aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.dockerignore4
-rwxr-xr-x.editorconfig9
-rw-r--r--.github/CONTRIBUTING.md110
-rw-r--r--.github/PULL_REQUEST_TEMPLATE.md1
-rw-r--r--.github/workflows/android.yml10
-rw-r--r--.github/workflows/build.yml83
-rw-r--r--.github/workflows/cpp_lint.yml27
-rw-r--r--.github/workflows/macos.yml66
-rw-r--r--.gitignore14
-rw-r--r--.gitlab-ci.yml130
-rw-r--r--.luacheckrc2
-rw-r--r--AppImageBuilder.yml21
-rw-r--r--CMakeLists.txt103
-rw-r--r--Dockerfile38
-rw-r--r--LICENSE.txt13
-rw-r--r--README.md151
-rw-r--r--android/app/build.gradle21
-rw-r--r--android/app/src/main/AndroidManifest.xml8
-rw-r--r--android/app/src/main/java/net/minetest/minetest/GameActivity.java33
-rw-r--r--android/app/src/main/java/net/minetest/minetest/MainActivity.java3
-rw-r--r--android/app/src/main/java/net/minetest/minetest/UnzipService.java5
-rw-r--r--android/build.gradle9
-rw-r--r--android/gradle/wrapper/gradle-wrapper.properties3
-rwxr-xr-xandroid/gradlew2
-rw-r--r--android/icons/aux_btn.svg411
-rw-r--r--android/native/build.gradle51
-rw-r--r--android/native/jni/Android.mk123
-rw-r--r--android/native/jni/Application.mk16
-rw-r--r--builtin/async/init.lua10
-rw-r--r--builtin/client/chatcommands.lua9
-rw-r--r--builtin/client/death_formspec.lua1
-rw-r--r--builtin/client/init.lua1
-rw-r--r--builtin/common/after.lua9
-rw-r--r--builtin/common/chatcommands.lua142
-rw-r--r--builtin/common/information_formspecs.lua60
-rw-r--r--builtin/common/misc_helpers.lua46
-rw-r--r--builtin/common/tests/misc_helpers_spec.lua5
-rw-r--r--builtin/common/tests/serialize_spec.lua13
-rw-r--r--builtin/common/tests/vector_spec.lua303
-rw-r--r--builtin/common/vector.lua250
-rw-r--r--builtin/fstk/tabview.lua50
-rw-r--r--builtin/fstk/ui.lua2
-rw-r--r--builtin/game/auth.lua7
-rw-r--r--builtin/game/chat.lua853
-rw-r--r--builtin/game/falling.lua93
-rw-r--r--builtin/game/features.lua3
-rw-r--r--builtin/game/forceloading.lua9
-rw-r--r--builtin/game/init.lua2
-rw-r--r--builtin/game/item.lua164
-rw-r--r--builtin/game/misc.lua86
-rw-r--r--builtin/game/privileges.lua47
-rw-r--r--builtin/game/register.lua12
-rw-r--r--builtin/game/voxelarea.lua14
-rw-r--r--builtin/init.lua1
-rw-r--r--builtin/locale/__builtin.de.tr245
-rw-r--r--builtin/locale/__builtin.it.tr258
-rw-r--r--builtin/locale/template.txt245
-rw-r--r--builtin/mainmenu/common.lua134
-rw-r--r--builtin/mainmenu/dlg_contentstore.lua135
-rw-r--r--builtin/mainmenu/dlg_create_world.lua266
-rw-r--r--builtin/mainmenu/dlg_settings_advanced.lua6
-rw-r--r--builtin/mainmenu/game_theme.lua (renamed from builtin/mainmenu/textures.lua)98
-rw-r--r--builtin/mainmenu/init.lua12
-rw-r--r--builtin/mainmenu/pkgmgr.lua88
-rw-r--r--builtin/mainmenu/tab_about.lua (renamed from builtin/mainmenu/tab_credits.lua)61
-rw-r--r--builtin/mainmenu/tab_content.lua15
-rw-r--r--builtin/mainmenu/tab_local.lua180
-rw-r--r--builtin/mainmenu/tab_online.lua456
-rw-r--r--builtin/mainmenu/tab_settings.lua64
-rw-r--r--builtin/mainmenu/tests/serverlistmgr_spec.lua1
-rw-r--r--builtin/profiler/init.lua18
-rw-r--r--builtin/profiler/instrumentation.lua5
-rw-r--r--builtin/profiler/reporter.lua19
-rw-r--r--builtin/settingtypes.txt170
-rw-r--r--client/shaders/3d_interlaced_merge/opengl_fragment.glsl2
-rw-r--r--client/shaders/3d_interlaced_merge/opengl_vertex.glsl2
-rw-r--r--client/shaders/default_shader/opengl_vertex.glsl4
-rw-r--r--client/shaders/minimap_shader/opengl_vertex.glsl4
-rw-r--r--client/shaders/nodes_shader/opengl_fragment.glsl463
-rw-r--r--client/shaders/nodes_shader/opengl_vertex.glsl67
-rw-r--r--client/shaders/object_shader/opengl_fragment.glsl310
-rw-r--r--client/shaders/object_shader/opengl_vertex.glsl50
-rw-r--r--client/shaders/selection_shader/opengl_vertex.glsl4
-rw-r--r--client/shaders/shadow_shaders/pass1_fragment.glsl13
-rw-r--r--client/shaders/shadow_shaders/pass1_trans_fragment.glsl42
-rw-r--r--client/shaders/shadow_shaders/pass1_trans_vertex.glsl33
-rw-r--r--client/shaders/shadow_shaders/pass1_vertex.glsl26
-rw-r--r--client/shaders/shadow_shaders/pass2_fragment.glsl23
-rw-r--r--client/shaders/shadow_shaders/pass2_vertex.glsl9
-rw-r--r--clientmods/preview/mod.conf1
-rw-r--r--cmake/Modules/FindGMP.cmake2
-rw-r--r--cmake/Modules/FindGettextLib.cmake9
-rw-r--r--cmake/Modules/FindIrrlicht.cmake77
-rw-r--r--cmake/Modules/FindJson.cmake23
-rw-r--r--cmake/Modules/FindLuaJIT.cmake17
-rw-r--r--cmake/Modules/FindOpenGLES2.cmake3
-rw-r--r--cmake/Modules/FindZstd.cmake25
-rw-r--r--cmake/Modules/MinetestFindIrrlichtHeaders.cmake26
-rw-r--r--doc/Doxyfile.in1
-rw-r--r--doc/client_lua_api.txt23
-rw-r--r--doc/direction.md69
-rw-r--r--doc/lua_api.txt776
-rw-r--r--doc/menu_lua_api.txt17
-rw-r--r--doc/minetest.67
-rw-r--r--doc/texture_packs.txt3
-rw-r--r--doc/world_format.txt91
-rw-r--r--fonts/mono_dejavu_sans_10.xmlbin257014 -> 0 bytes
-rw-r--r--fonts/mono_dejavu_sans_100.pngbin56121 -> 0 bytes
-rw-r--r--fonts/mono_dejavu_sans_11.xmlbin263644 -> 0 bytes
-rw-r--r--fonts/mono_dejavu_sans_110.pngbin67613 -> 0 bytes
-rw-r--r--fonts/mono_dejavu_sans_12.xmlbin268932 -> 0 bytes
-rw-r--r--fonts/mono_dejavu_sans_120.pngbin73938 -> 0 bytes
-rw-r--r--fonts/mono_dejavu_sans_14.xmlbin269188 -> 0 bytes
-rw-r--r--fonts/mono_dejavu_sans_140.pngbin89073 -> 0 bytes
-rw-r--r--fonts/mono_dejavu_sans_16.xmlbin275642 -> 0 bytes
-rw-r--r--fonts/mono_dejavu_sans_160.pngbin101939 -> 0 bytes
-rw-r--r--fonts/mono_dejavu_sans_18.xmlbin279962 -> 0 bytes
-rw-r--r--fonts/mono_dejavu_sans_180.pngbin122274 -> 0 bytes
-rw-r--r--fonts/mono_dejavu_sans_20.xmlbin282588 -> 0 bytes
-rw-r--r--fonts/mono_dejavu_sans_200.pngbin138662 -> 0 bytes
-rw-r--r--fonts/mono_dejavu_sans_22.xmlbin283950 -> 0 bytes
-rw-r--r--fonts/mono_dejavu_sans_220.pngbin152844 -> 0 bytes
-rw-r--r--fonts/mono_dejavu_sans_24.xmlbin286626 -> 0 bytes
-rw-r--r--fonts/mono_dejavu_sans_240.pngbin170247 -> 0 bytes
-rw-r--r--fonts/mono_dejavu_sans_26.xmlbin289710 -> 0 bytes
-rw-r--r--fonts/mono_dejavu_sans_260.pngbin190156 -> 0 bytes
-rw-r--r--fonts/mono_dejavu_sans_28.xmlbin292596 -> 0 bytes
-rw-r--r--fonts/mono_dejavu_sans_280.pngbin200848 -> 0 bytes
-rw-r--r--fonts/mono_dejavu_sans_4.xmlbin237740 -> 0 bytes
-rw-r--r--fonts/mono_dejavu_sans_40.pngbin15668 -> 0 bytes
-rw-r--r--fonts/mono_dejavu_sans_6.xmlbin245472 -> 0 bytes
-rw-r--r--fonts/mono_dejavu_sans_60.pngbin29291 -> 0 bytes
-rw-r--r--fonts/mono_dejavu_sans_8.xmlbin251876 -> 0 bytes
-rw-r--r--fonts/mono_dejavu_sans_80.pngbin45552 -> 0 bytes
-rw-r--r--fonts/mono_dejavu_sans_9.xmlbin254016 -> 0 bytes
-rw-r--r--fonts/mono_dejavu_sans_90.pngbin50995 -> 0 bytes
-rw-r--r--games/devtest/menu/background.pngbin152 -> 160 bytes
-rw-r--r--games/devtest/mods/basetools/init.lua44
-rw-r--r--games/devtest/mods/basetools/textures/basetools_dirtpick.pngbin307 -> 0 bytes
-rw-r--r--games/devtest/mods/broken/init.lua11
-rw-r--r--games/devtest/mods/broken/mod.conf2
-rw-r--r--games/devtest/mods/experimental/commands.lua10
-rw-r--r--games/devtest/mods/testformspec/formspec.lua100
-rw-r--r--games/devtest/mods/testhud/init.lua81
-rw-r--r--games/devtest/mods/testhud/mod.conf2
-rw-r--r--games/devtest/mods/testnodes/drawtypes.lua130
-rw-r--r--games/devtest/mods/testnodes/liquids.lua55
-rw-r--r--games/devtest/mods/testnodes/properties.lua108
-rw-r--r--games/devtest/mods/testnodes/settingtypes.txt4
-rw-r--r--games/devtest/mods/testnodes/textures.lua106
-rw-r--r--games/devtest/mods/testnodes/textures/testnodes_climbable_resistance_side.pngbin0 -> 295 bytes
-rw-r--r--games/devtest/mods/testnodes/textures/testnodes_move_resistance.pngbin0 -> 221 bytes
-rw-r--r--games/devtest/mods/testnodes/textures/testnodes_plantlike_rooted_base_side_wallmounted.pngbin0 -> 224 bytes
-rw-r--r--games/devtest/mods/testnodes/textures/testnodes_plantlike_rooted_wallmounted.pngbin0 -> 268 bytes
-rw-r--r--games/devtest/mods/testnodes/textures/testnodes_plantlike_wallmounted.pngbin0 -> 268 bytes
-rw-r--r--games/devtest/mods/testtools/README.md21
-rw-r--r--games/devtest/mods/testtools/init.lua196
-rw-r--r--games/devtest/mods/testtools/light.lua31
-rw-r--r--games/devtest/mods/testtools/textures/testtools_children_getter.pngbin0 -> 281 bytes
-rw-r--r--games/devtest/mods/testtools/textures/testtools_node_meta_editor.pngbin0 -> 135 bytes
-rw-r--r--games/devtest/mods/unittests/crafting.lua18
-rw-r--r--games/devtest/mods/unittests/init.lua199
-rw-r--r--games/devtest/mods/unittests/itemdescription.lua3
-rw-r--r--games/devtest/mods/unittests/misc.lua38
-rw-r--r--games/devtest/mods/unittests/player.lua46
-rw-r--r--games/devtest/mods/unittests/random.lua10
-rw-r--r--games/devtest/mods/util_commands/init.lua53
-rw-r--r--games/devtest/settingtypes.txt5
-rw-r--r--lib/bitop/CMakeLists.txt4
-rw-r--r--lib/bitop/bit.c189
-rw-r--r--lib/bitop/bit.h34
-rw-r--r--minetest.conf.example177
-rw-r--r--misc/Info.plist6
-rw-r--r--misc/debpkg-control11
-rw-r--r--misc/net.minetest.minetest.appdata.xml2
-rw-r--r--po/ar/minetest.po1097
-rw-r--r--po/be/minetest.po854
-rw-r--r--po/bg/minetest.po1450
-rw-r--r--po/ca/minetest.po784
-rw-r--r--po/cs/minetest.po1799
-rw-r--r--po/da/minetest.po834
-rw-r--r--po/de/minetest.po1009
-rw-r--r--po/dv/minetest.po717
-rw-r--r--po/el/minetest.po801
-rw-r--r--po/eo/minetest.po1122
-rw-r--r--po/es/minetest.po999
-rw-r--r--po/et/minetest.po868
-rw-r--r--po/eu/minetest.po729
-rw-r--r--po/fi/minetest.po1027
-rw-r--r--po/fil/minetest.po6638
-rw-r--r--po/fr/minetest.po2706
-rw-r--r--po/gd/minetest.po734
-rw-r--r--po/gl/minetest.po687
-rw-r--r--po/he/minetest.po844
-rw-r--r--po/hi/minetest.po754
-rw-r--r--po/hu/minetest.po1987
-rw-r--r--po/id/minetest.po950
-rw-r--r--po/it/minetest.po958
-rw-r--r--po/ja/minetest.po1135
-rw-r--r--po/jbo/minetest.po733
-rw-r--r--po/kk/minetest.po694
-rw-r--r--po/kn/minetest.po692
-rw-r--r--po/ko/minetest.po819
-rw-r--r--po/ky/minetest.po747
-rw-r--r--po/lt/minetest.po775
-rw-r--r--po/lv/minetest.po753
-rw-r--r--po/lzh/minetest.po6641
-rw-r--r--po/minetest.pot683
-rw-r--r--po/mr/minetest.po6649
-rw-r--r--po/ms/minetest.po1079
-rw-r--r--po/ms_Arab/minetest.po844
-rw-r--r--po/nb/minetest.po884
-rw-r--r--po/nl/minetest.po1052
-rw-r--r--po/nn/minetest.po761
-rw-r--r--po/pl/minetest.po1381
-rw-r--r--po/pt/minetest.po1318
-rw-r--r--po/pt_BR/minetest.po1045
-rw-r--r--po/ro/minetest.po885
-rw-r--r--po/ru/minetest.po1218
-rw-r--r--po/sk/minetest.po966
-rw-r--r--po/sl/minetest.po767
-rw-r--r--po/sr_Cyrl/minetest.po975
-rw-r--r--po/sr_Latn/minetest.po692
-rw-r--r--po/sv/minetest.po1818
-rw-r--r--po/sw/minetest.po848
-rw-r--r--po/th/minetest.po821
-rw-r--r--po/tr/minetest.po998
-rw-r--r--po/tt/minetest.po6645
-rw-r--r--po/uk/minetest.po1510
-rw-r--r--po/vi/minetest.po1254
-rw-r--r--po/yue/minetest.po6638
-rw-r--r--po/zh_CN/minetest.po969
-rw-r--r--po/zh_TW/minetest.po1137
-rw-r--r--src/CMakeLists.txt234
-rw-r--r--src/chat.cpp151
-rw-r--r--src/chat.h22
-rw-r--r--src/client/CMakeLists.txt4
-rw-r--r--src/client/camera.cpp90
-rw-r--r--src/client/camera.h12
-rw-r--r--src/client/client.cpp243
-rw-r--r--src/client/client.h30
-rw-r--r--src/client/clientenvironment.cpp65
-rw-r--r--src/client/clientevent.h55
-rw-r--r--src/client/clientlauncher.cpp92
-rw-r--r--src/client/clientlauncher.h2
-rw-r--r--src/client/clientmap.cpp383
-rw-r--r--src/client/clientmap.h42
-rw-r--r--src/client/clientmedia.cpp260
-rw-r--r--src/client/clientmedia.h166
-rw-r--r--src/client/clientobject.h2
-rw-r--r--src/client/clouds.cpp4
-rw-r--r--src/client/clouds.h5
-rw-r--r--src/client/content_cao.cpp147
-rw-r--r--src/client/content_cao.h4
-rw-r--r--src/client/content_mapblock.cpp80
-rw-r--r--src/client/content_mapblock.h7
-rw-r--r--src/client/fontengine.cpp284
-rw-r--r--src/client/fontengine.h22
-rw-r--r--src/client/game.cpp891
-rw-r--r--src/client/game.h6
-rw-r--r--src/client/gameui.cpp68
-rw-r--r--src/client/gameui.h9
-rw-r--r--src/client/guiscalingfilter.cpp7
-rw-r--r--src/client/hud.cpp173
-rw-r--r--src/client/hud.h26
-rw-r--r--src/client/imagefilters.cpp113
-rw-r--r--src/client/imagefilters.h6
-rw-r--r--src/client/inputhandler.cpp47
-rw-r--r--src/client/inputhandler.h95
-rw-r--r--src/client/joystick_controller.cpp80
-rw-r--r--src/client/joystick_controller.h5
-rw-r--r--src/client/keycode.cpp2
-rw-r--r--src/client/keys.h3
-rw-r--r--src/client/localplayer.cpp50
-rw-r--r--src/client/localplayer.h6
-rw-r--r--src/client/mapblock_mesh.cpp24
-rw-r--r--src/client/mesh.cpp597
-rw-r--r--src/client/mesh.h7
-rw-r--r--src/client/mesh_generator_thread.cpp53
-rw-r--r--src/client/mesh_generator_thread.h5
-rw-r--r--src/client/minimap.cpp5
-rw-r--r--src/client/particles.cpp4
-rw-r--r--src/client/render/anaglyph.cpp3
-rw-r--r--src/client/render/core.cpp19
-rw-r--r--src/client/render/core.h5
-rw-r--r--src/client/render/interlaced.cpp4
-rw-r--r--src/client/renderingengine.cpp168
-rw-r--r--src/client/renderingengine.h100
-rw-r--r--src/client/shader.cpp84
-rw-r--r--src/client/shader.h5
-rw-r--r--src/client/shadows/dynamicshadows.cpp165
-rw-r--r--src/client/shadows/dynamicshadows.h109
-rw-r--r--src/client/shadows/dynamicshadowsrender.cpp630
-rw-r--r--src/client/shadows/dynamicshadowsrender.h147
-rw-r--r--src/client/shadows/shadowsScreenQuad.cpp61
-rw-r--r--src/client/shadows/shadowsScreenQuad.h54
-rw-r--r--src/client/shadows/shadowsshadercallbacks.cpp (renamed from src/unittest/test_player.cpp)29
-rw-r--r--src/client/shadows/shadowsshadercallbacks.h48
-rw-r--r--src/client/sky.cpp224
-rw-r--r--src/client/sky.h18
-rw-r--r--src/client/sound_openal.cpp12
-rw-r--r--src/client/tile.cpp231
-rw-r--r--src/client/tile.h3
-rw-r--r--src/client/wieldmesh.cpp79
-rw-r--r--src/client/wieldmesh.h3
-rw-r--r--src/clientiface.cpp25
-rw-r--r--src/clientiface.h2
-rw-r--r--src/cmake_config.h.in1
-rw-r--r--src/constants.h3
-rw-r--r--src/content/mods.cpp146
-rw-r--r--src/content/mods.h15
-rw-r--r--src/content/subgames.cpp32
-rw-r--r--src/content/subgames.h2
-rw-r--r--src/convert_json.cpp54
-rw-r--r--src/convert_json.h4
-rw-r--r--src/database/database-dummy.cpp38
-rw-r--r--src/database/database-dummy.h9
-rw-r--r--src/database/database-files.cpp125
-rw-r--r--src/database/database-files.h26
-rw-r--r--src/database/database-leveldb.cpp16
-rw-r--r--src/database/database-postgresql.cpp41
-rw-r--r--src/database/database-postgresql.h2
-rw-r--r--src/database/database-redis.cpp6
-rw-r--r--src/database/database-sqlite3.cpp135
-rw-r--r--src/database/database-sqlite3.h25
-rw-r--r--src/database/database.h13
-rw-r--r--src/defaultsettings.cpp60
-rw-r--r--src/emerge.cpp90
-rw-r--r--src/emerge.h18
-rw-r--r--src/environment.cpp6
-rw-r--r--src/filesys.cpp139
-rw-r--r--src/filesys.h20
-rw-r--r--src/gamedef.h3
-rw-r--r--src/gettext.cpp4
-rw-r--r--src/gettext.h50
-rw-r--r--src/gui/CMakeLists.txt7
-rw-r--r--src/gui/guiButton.cpp86
-rw-r--r--src/gui/guiButton.h43
-rw-r--r--src/gui/guiChatConsole.cpp131
-rw-r--r--src/gui/guiChatConsole.h10
-rw-r--r--src/gui/guiConfirmRegistration.cpp19
-rw-r--r--src/gui/guiEditBox.cpp169
-rw-r--r--src/gui/guiEditBox.h9
-rw-r--r--src/gui/guiEditBoxWithScrollbar.cpp35
-rw-r--r--src/gui/guiEditBoxWithScrollbar.h6
-rw-r--r--src/gui/guiEngine.cpp79
-rw-r--r--src/gui/guiEngine.h7
-rw-r--r--src/gui/guiFormSpecMenu.cpp2305
-rw-r--r--src/gui/guiFormSpecMenu.h13
-rw-r--r--src/gui/guiHyperText.cpp23
-rw-r--r--src/gui/guiHyperText.h11
-rw-r--r--src/gui/guiKeyChangeMenu.cpp72
-rw-r--r--src/gui/guiPasswordChange.cpp8
-rw-r--r--src/gui/guiScene.cpp16
-rw-r--r--src/gui/guiScene.h1
-rw-r--r--src/gui/guiSkin.cpp42
-rw-r--r--src/gui/guiSkin.h10
-rw-r--r--src/gui/guiTable.cpp5
-rw-r--r--src/gui/guiVolumeChange.cpp15
-rw-r--r--src/gui/intlGUIEditBox.cpp626
-rw-r--r--src/gui/intlGUIEditBox.h68
-rw-r--r--src/gui/modalMenu.cpp13
-rw-r--r--src/gui/modalMenu.h4
-rw-r--r--src/gui/profilergraph.cpp15
-rw-r--r--src/gui/touchscreengui.cpp47
-rw-r--r--src/gui/touchscreengui.h14
-rw-r--r--src/httpfetch.cpp80
-rw-r--r--src/httpfetch.h27
-rw-r--r--src/hud.cpp1
-rw-r--r--src/hud.h6
-rw-r--r--src/inventory.cpp23
-rw-r--r--src/inventory.h4
-rw-r--r--src/inventorymanager.cpp16
-rw-r--r--src/irrlicht_changes/CGUITTFont.cpp117
-rw-r--r--src/irrlicht_changes/CGUITTFont.h12
-rw-r--r--src/irrlicht_changes/CMakeLists.txt7
-rw-r--r--src/irrlicht_changes/irrUString.h3891
-rw-r--r--src/irrlicht_changes/static_text.cpp74
-rw-r--r--src/irrlicht_changes/static_text.h49
-rw-r--r--src/irrlichttypes.h26
-rw-r--r--src/itemdef.cpp14
-rw-r--r--src/itemdef.h1
-rw-r--r--src/itemstackmetadata.cpp2
-rw-r--r--src/main.cpp111
-rw-r--r--src/map.cpp23
-rw-r--r--src/map.h5
-rw-r--r--src/map_settings_manager.cpp40
-rw-r--r--src/map_settings_manager.h6
-rw-r--r--src/mapblock.cpp191
-rw-r--r--src/mapblock.h20
-rw-r--r--src/mapgen/mapgen.cpp11
-rw-r--r--src/mapgen/mapgen_v6.cpp13
-rw-r--r--src/mapgen/mapgen_v6.h4
-rw-r--r--src/mapgen/mapgen_valleys.cpp3
-rw-r--r--src/mapgen/mg_biome.cpp90
-rw-r--r--src/mapgen/mg_biome.h27
-rw-r--r--src/mapgen/mg_ore.h12
-rw-r--r--src/mapgen/mg_schematic.cpp143
-rw-r--r--src/mapgen/mg_schematic.h17
-rw-r--r--src/mapnode.cpp58
-rw-r--r--src/mapnode.h8
-rw-r--r--src/network/address.cpp119
-rw-r--r--src/network/address.h35
-rw-r--r--src/network/clientopcodes.cpp2
-rw-r--r--src/network/clientpackethandler.cpp250
-rw-r--r--src/network/connection.cpp477
-rw-r--r--src/network/connection.h446
-rw-r--r--src/network/connectionthreads.cpp190
-rw-r--r--src/network/connectionthreads.h31
-rw-r--r--src/network/networkpacket.h2
-rw-r--r--src/network/networkprotocol.h17
-rw-r--r--src/network/serveropcodes.cpp4
-rw-r--r--src/network/serverpackethandler.cpp128
-rw-r--r--src/network/socket.cpp74
-rw-r--r--src/network/socket.h14
-rw-r--r--src/nodedef.cpp82
-rw-r--r--src/nodedef.h43
-rw-r--r--src/nodemetadata.cpp6
-rw-r--r--src/nodemetadata.h2
-rw-r--r--src/noise.cpp51
-rw-r--r--src/noise.h15
-rw-r--r--src/object_properties.cpp36
-rw-r--r--src/object_properties.h2
-rw-r--r--src/player.cpp59
-rw-r--r--src/player.h52
-rw-r--r--src/porting.cpp13
-rw-r--r--src/porting.h6
-rw-r--r--src/remoteplayer.cpp30
-rw-r--r--src/remoteplayer.h3
-rw-r--r--src/rollback.cpp6
-rw-r--r--src/rollback.h1
-rw-r--r--src/script/common/c_content.cpp83
-rw-r--r--src/script/common/c_content.h14
-rw-r--r--src/script/common/c_converter.cpp30
-rw-r--r--src/script/common/c_internal.cpp84
-rw-r--r--src/script/common/c_internal.h18
-rw-r--r--src/script/cpp_api/s_async.cpp108
-rw-r--r--src/script/cpp_api/s_async.h39
-rw-r--r--src/script/cpp_api/s_base.cpp11
-rw-r--r--src/script/cpp_api/s_base.h17
-rw-r--r--src/script/cpp_api/s_client.cpp88
-rw-r--r--src/script/cpp_api/s_entity.cpp2
-rw-r--r--src/script/cpp_api/s_entity.h2
-rw-r--r--src/script/cpp_api/s_env.cpp63
-rw-r--r--src/script/cpp_api/s_env.h5
-rw-r--r--src/script/cpp_api/s_item.cpp36
-rw-r--r--src/script/cpp_api/s_item.h14
-rw-r--r--src/script/cpp_api/s_mainmenu.h2
-rw-r--r--src/script/cpp_api/s_node.cpp1
-rw-r--r--src/script/cpp_api/s_node.h1
-rw-r--r--src/script/cpp_api/s_nodemeta.cpp18
-rw-r--r--src/script/cpp_api/s_player.cpp2
-rw-r--r--src/script/cpp_api/s_player.h2
-rw-r--r--src/script/cpp_api/s_security.cpp131
-rw-r--r--src/script/cpp_api/s_security.h15
-rw-r--r--src/script/cpp_api/s_server.cpp64
-rw-r--r--src/script/cpp_api/s_server.h6
-rw-r--r--src/script/lua_api/l_areastore.cpp2
-rw-r--r--src/script/lua_api/l_auth.cpp5
-rw-r--r--src/script/lua_api/l_camera.cpp2
-rw-r--r--src/script/lua_api/l_env.cpp65
-rw-r--r--src/script/lua_api/l_env.h22
-rw-r--r--src/script/lua_api/l_http.cpp66
-rw-r--r--src/script/lua_api/l_http.h3
-rw-r--r--src/script/lua_api/l_inventory.cpp15
-rw-r--r--src/script/lua_api/l_inventory.h2
-rw-r--r--src/script/lua_api/l_item.cpp2
-rw-r--r--src/script/lua_api/l_itemstackmeta.cpp2
-rw-r--r--src/script/lua_api/l_localplayer.cpp36
-rw-r--r--src/script/lua_api/l_localplayer.h3
-rw-r--r--src/script/lua_api/l_mainmenu.cpp247
-rw-r--r--src/script/lua_api/l_mainmenu.h4
-rw-r--r--src/script/lua_api/l_mapgen.cpp125
-rw-r--r--src/script/lua_api/l_metadata.cpp5
-rw-r--r--src/script/lua_api/l_minimap.cpp2
-rw-r--r--src/script/lua_api/l_modchannels.cpp2
-rw-r--r--src/script/lua_api/l_nodemeta.cpp9
-rw-r--r--src/script/lua_api/l_nodetimer.cpp2
-rw-r--r--src/script/lua_api/l_noise.cpp10
-rw-r--r--src/script/lua_api/l_object.cpp207
-rw-r--r--src/script/lua_api/l_playermeta.cpp2
-rw-r--r--src/script/lua_api/l_server.cpp102
-rw-r--r--src/script/lua_api/l_server.h15
-rw-r--r--src/script/lua_api/l_settings.cpp80
-rw-r--r--src/script/lua_api/l_storage.cpp20
-rw-r--r--src/script/lua_api/l_util.cpp209
-rw-r--r--src/script/lua_api/l_util.h28
-rw-r--r--src/script/lua_api/l_vmanip.cpp2
-rw-r--r--src/script/scripting_mainmenu.cpp6
-rw-r--r--src/script/scripting_mainmenu.h5
-rw-r--r--src/serialization.cpp160
-rw-r--r--src/serialization.h14
-rw-r--r--src/server.cpp472
-rw-r--r--src/server.h43
-rw-r--r--src/server/luaentity_sao.cpp13
-rw-r--r--src/server/luaentity_sao.h5
-rw-r--r--src/server/mods.cpp8
-rw-r--r--src/server/player_sao.cpp45
-rw-r--r--src/server/player_sao.h10
-rw-r--r--src/server/serveractiveobject.h7
-rw-r--r--src/server/serverinventorymgr.cpp32
-rw-r--r--src/server/unit_sao.cpp31
-rw-r--r--src/serverenvironment.cpp23
-rw-r--r--src/serverenvironment.h15
-rw-r--r--src/serverlist.cpp1
-rw-r--r--src/settings.cpp133
-rw-r--r--src/settings.h52
-rw-r--r--src/settings_translation_file.cpp119
-rw-r--r--src/skyparams.h45
-rw-r--r--src/staticobject.cpp24
-rw-r--r--src/tool.cpp106
-rw-r--r--src/tool.h20
-rw-r--r--src/translation.cpp8
-rw-r--r--src/unittest/CMakeLists.txt5
-rw-r--r--src/unittest/test.cpp6
-rw-r--r--src/unittest/test_areastore.cpp4
-rw-r--r--src/unittest/test_clientactiveobjectmgr.cpp1
-rw-r--r--src/unittest/test_compression.cpp42
-rw-r--r--src/unittest/test_config.h.in1
-rw-r--r--src/unittest/test_connection.cpp10
-rw-r--r--src/unittest/test_gettext.cpp43
-rw-r--r--src/unittest/test_irrptr.cpp10
-rw-r--r--src/unittest/test_map.cpp68
-rw-r--r--src/unittest/test_map_settings_manager.cpp5
-rw-r--r--src/unittest/test_mod/test_mod/init.lua1
-rw-r--r--src/unittest/test_mod/test_mod/mod.conf2
-rw-r--r--src/unittest/test_modmetadatadatabase.cpp253
-rw-r--r--src/unittest/test_noderesolver.cpp2
-rw-r--r--src/unittest/test_schematic.cpp40
-rw-r--r--src/unittest/test_servermodmanager.cpp21
-rw-r--r--src/unittest/test_socket.cpp18
-rw-r--r--src/unittest/test_utilities.cpp99
-rw-r--r--src/unittest/test_voxelarea.cpp18
-rw-r--r--src/util/CMakeLists.txt1
-rw-r--r--src/util/Optional.h32
-rw-r--r--src/util/base64.cpp29
-rw-r--r--src/util/numeric.cpp19
-rw-r--r--src/util/numeric.h4
-rwxr-xr-xsrc/util/png.cpp68
-rwxr-xr-x[-rw-r--r--]src/util/png.h (renamed from src/cloudparams.h)17
-rw-r--r--src/util/pointer.h58
-rw-r--r--src/util/serialize.cpp5
-rw-r--r--src/util/string.cpp450
-rw-r--r--src/util/string.h43
-rw-r--r--src/version.cpp1
-rw-r--r--textures/base/pack/aux1_btn.pngbin0 -> 1652 bytes
-rw-r--r--textures/base/pack/aux_btn.pngbin1900 -> 0 bytes
-rw-r--r--textures/base/pack/no_texture.pngbin0 -> 281 bytes
-rw-r--r--textures/base/pack/server_favorite.png (renamed from textures/base/pack/server_flags_favorite.png)bin916 -> 916 bytes
-rw-r--r--textures/base/pack/server_incompatible.pngbin0 -> 385 bytes
-rw-r--r--textures/base/pack/server_public.pngbin0 -> 492 bytes
-rwxr-xr-xutil/buildbot/buildwin32.sh182
-rwxr-xr-xutil/buildbot/buildwin64.sh184
-rw-r--r--util/buildbot/toolchain_i686-w64-mingw32-posix.cmake (renamed from util/buildbot/toolchain_i586-mingw32msvc.cmake)10
-rw-r--r--util/buildbot/toolchain_i686-w64-mingw32.cmake (renamed from util/buildbot/toolchain_i646-w64-mingw32.cmake)0
-rw-r--r--util/buildbot/toolchain_x86_64-w64-mingw32-posix.cmake19
-rw-r--r--util/ci/clang-format-whitelist.txt2
-rwxr-xr-xutil/ci/clang-format.sh (renamed from util/ci/lint.sh)25
-rw-r--r--util/ci/common.sh16
-rwxr-xr-xutil/fix_format.sh5
-rwxr-xr-xutil/test_multiplayer.sh105
-rwxr-xr-xutil/updatepo.sh5
-rw-r--r--util/wireshark/minetest.lua4
563 files changed, 89270 insertions, 32675 deletions
diff --git a/.dockerignore b/.dockerignore
new file mode 100644
index 000000000..bda43ebc0
--- /dev/null
+++ b/.dockerignore
@@ -0,0 +1,4 @@
+./cmake-build-*
+./build/*
+./cache/*
+Dockerfile
diff --git a/.editorconfig b/.editorconfig
new file mode 100755
index 000000000..ec0645241
--- /dev/null
+++ b/.editorconfig
@@ -0,0 +1,9 @@
+[*]
+end_of_line = lf
+
+[*.{cpp,h,lua,txt,glsl,md,c,cmake,java,gradle}]
+charset = utf8
+indent_size = 4
+indent_style = tab
+insert_final_newline = true
+trim_trailing_whitespace = true
diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md
index b01a89509..f60f584f9 100644
--- a/.github/CONTRIBUTING.md
+++ b/.github/CONTRIBUTING.md
@@ -10,13 +10,31 @@ Contributions are welcome! Here's how you can help:
## Code
-1. [Fork](https://help.github.com/articles/fork-a-repo/) the repository and [clone](https://help.github.com/articles/cloning-a-repository/) your fork.
+1. [Fork](https://help.github.com/articles/fork-a-repo/) the repository and
+ [clone](https://help.github.com/articles/cloning-a-repository/) your fork.
-2. Before you start coding, consider opening an [issue at Github](https://github.com/minetest/minetest/issues) to discuss the suitability and implementation of your intended contribution with the core developers. If you are planning to start some very significant coding, you would benefit from first discussing on our IRC development channel [#minetest-dev](http://www.minetest.net/irc/). Note that a proper IRC client is required to speak on this channel.
+2. Before you start coding, consider opening an
+ [issue at Github](https://github.com/minetest/minetest/issues) to discuss the
+ suitability and implementation of your intended contribution with the core
+ developers.
+
+ Any Pull Request that isn't a bug fix and isn't covered by
+ [the roadmap](../doc/direction.md) will be closed within a week unless it
+ receives a concept approval from a Core Developer. For this reason, it is
+ recommended that you open an issue for any such pull requests before doing
+ the work, to avoid disappointment.
+
+ You may also benefit from discussing on our IRC development channel
+ [#minetest-dev](http://www.minetest.net/irc/). Note that a proper IRC client
+ is required to speak on this channel.
3. Start coding!
- - Refer to the [Lua API](https://github.com/minetest/minetest/blob/master/doc/lua_api.txt), [Developer Wiki](http://dev.minetest.net/Main_Page) and other [documentation](https://github.com/minetest/minetest/tree/master/doc).
- - Follow the [C/C++](http://dev.minetest.net/Code_style_guidelines) and [Lua](http://dev.minetest.net/Lua_code_style_guidelines) code style guidelines.
+ - Refer to the
+ [Lua API](https://github.com/minetest/minetest/blob/master/doc/lua_api.txt),
+ [Developer Wiki](http://dev.minetest.net/Main_Page) and other
+ [documentation](https://github.com/minetest/minetest/tree/master/doc).
+ - Follow the [C/C++](http://dev.minetest.net/Code_style_guidelines) and
+ [Lua](http://dev.minetest.net/Lua_code_style_guidelines) code style guidelines.
- Check your code works as expected and document any changes to the Lua API.
4. Commit & [push](https://help.github.com/articles/pushing-to-a-remote/) your changes to a new branch (not `master`, one change per branch)
@@ -33,67 +51,115 @@ Contributions are welcome! Here's how you can help:
5. Once you are happy with your changes, submit a pull request.
- Open the [pull-request form](https://github.com/minetest/minetest/pull/new/master).
- - Add a description explaining what you've done (or if it's a work-in-progress - what you need to do).
+ - Add a description explaining what you've done (or if it's a
+ work-in-progress - what you need to do).
+ - Make sure to fill out the pull request template.
### A pull-request is considered merge-able when:
-1. It follows the roadmap in some way and fits the whole picture of the project: [roadmap introduction](http://c55.me/blog/?p=1491), [roadmap continued](https://forum.minetest.net/viewtopic.php?t=9177)
+1. It follows [the roadmap](../doc/direction.md) in some way and fits the whole
+ picture of the project.
2. It works.
-3. It follows the code style for [C/C++](http://dev.minetest.net/Code_style_guidelines) or [Lua](http://dev.minetest.net/Lua_code_style_guidelines).
-4. The code's interfaces are well designed, regardless of other aspects that might need more work in the future.
+3. It follows the code style for
+ [C/C++](http://dev.minetest.net/Code_style_guidelines) or
+ [Lua](http://dev.minetest.net/Lua_code_style_guidelines).
+4. The code's interfaces are well designed, regardless of other aspects that
+ might need more work in the future.
5. It uses protocols and formats which include the required compatibility.
### Important note about automated GitHub checks
-When you submit a pull request, GitHub automatically runs checks on the Minetest Engine combined with your changes. One of these checks is called 'cpp lint / clang format', which checks code formatting. Because formatting for readability requires human judgement this check often fails and often makes unsuitable formatting requests which make code readability worse.
+When you submit a pull request, GitHub automatically runs checks on the Minetest
+Engine combined with your changes. One of these checks is called 'cpp lint /
+clang format', which checks code formatting. Because formatting for readability
+requires human judgement this check often fails and often makes unsuitable
+formatting requests which make code readability worse.
-If this check fails, look at the details to check for any clear mistakes and correct those. However, you should not apply everything ClangFormat requests. Ignore requests that make code readability worse and any other clearly unsuitable requests. Discuss in the pull request with a core developer about how to progress.
+If this check fails, look at the details to check for any clear mistakes and
+correct those. However, you should not apply everything ClangFormat requests.
+Ignore requests that make code readability worse and any other clearly
+unsuitable requests. Discuss in the pull request with a core developer about how
+to progress.
## Issues
-If you experience an issue, we would like to know the details - especially when a stable release is on the way.
+If you experience an issue, we would like to know the details - especially when
+a stable release is on the way.
1. Do a quick search on GitHub to check if the issue has already been reported.
-2. Is it an issue with the Minetest *engine*? If not, report it [elsewhere](http://www.minetest.net/development/#reporting-issues).
-3. [Open an issue](https://github.com/minetest/minetest/issues/new) and describe the issue you are having - you could include:
+2. Is it an issue with the Minetest *engine*? If not, report it
+ [elsewhere](http://www.minetest.net/development/#reporting-issues).
+3. [Open an issue](https://github.com/minetest/minetest/issues/new) and describe
+ the issue you are having - you could include:
- Error logs (check the bottom of the `debug.txt` file).
- Screenshots.
- Ways you have tried to solve the issue, and whether they worked or not.
- Your Minetest version and the content (games, mods or texture packs) you have installed.
- Your platform (e.g. Windows 10 or Ubuntu 15.04 x64).
-After reporting you should aim to answer questions or clarifications as this helps pinpoint the cause of the issue (if you don't do this your issue may be closed after 1 month).
+After reporting you should aim to answer questions or clarifications as this
+helps pinpoint the cause of the issue (if you don't do this your issue may be
+closed after 1 month).
## Feature requests
-Feature requests are welcome but take a moment to see if your idea follows the roadmap in some way and fits the whole picture of the project: [roadmap introduction](http://c55.me/blog/?p=1491), [roadmap continued](https://forum.minetest.net/viewtopic.php?t=9177). You should provide a clear explanation with as much detail as possible.
+Feature requests are welcome but take a moment to see if your idea follows
+[the roadmap](../doc/direction.md) in some way and fits the whole picture of
+the project. You should provide a clear explanation with as much detail as
+possible.
## Translations
-Translations of Minetest are performed using Weblate. You can access the project page with a list of current languages [here](https://hosted.weblate.org/projects/minetest/minetest/).
+The core translations of Minetest are performed using Weblate. You can access
+the project page with a list of current languages
+[here](https://hosted.weblate.org/projects/minetest/minetest/).
+
+Builtin (the component which contains things like server messages, chat command
+descriptions, privilege descriptions) is translated separately; it needs to be
+translated by editing a `.tr` text file. See
+[Translation](https://dev.minetest.net/Translation) for more information.
## Donations
-If you'd like to monetarily support Minetest development, you can find donation methods on [our website](http://www.minetest.net/development/#donate).
+If you'd like to monetarily support Minetest development, you can find donation
+methods on [our website](http://www.minetest.net/development/#donate).
# Maintaining
-*This is a concise version of the [Rules & Guidelines](http://dev.minetest.net/Category:Rules_and_Guidelines) on the developer wiki.*
+* This is a concise version of the
+ [Rules & Guidelines](http://dev.minetest.net/Category:Rules_and_Guidelines) on the developer wiki.*
These notes are for those who have push access Minetest (core developers / maintainers).
- See the [project organisation](http://dev.minetest.net/Organisation) for the people involved.
+## Concept approvals and roadmaps
+
+If a Pull Request is not a bug fix:
+
+* If it matches a goal in [the roadmap](../doc/direction.md), then the PR should
+ be labelled as "Roadmap" and the goal stated by number in the description.
+* If it doesn't match a goal, then it needs to receive a concept approval within
+ a week of being opened to remain open. This 1 week deadline does not apply to
+ PRs opened before the roadmap was adopted; instead, they may remain open or be
+ closed as needed. Use the "Concept Approved" label. Issues can be marked as
+ "Concept Approved" to give preapproval to future PRs.
+
## Reviewing pull requests
-Pull requests should be reviewed and, if appropriate, checked if they achieve their intended purpose. You can show that you are in the process of, or will review the pull request by commenting *"Looks good"* or something similar.
+Pull requests should be reviewed and, if appropriate, checked if they achieve
+their intended purpose. You can show that you are in the process of, or will
+review the pull request by commenting *"Looks good"* or something similar.
**If the pull-request is not [merge-able](#a-pull-request-is-considered-merge-able-when):**
-Submit a comment explaining to the author what they need to change to make the pull-request merge-able.
+Submit a comment explaining to the author what they need to change to make the
+pull-request merge-able.
-- If the author comments or makes changes to the pull-request, it can be reviewed again.
-- If no response is made from the author within 1 month (when improvements are suggested or a question is asked), it can be closed.
+- If the author comments or makes changes to the pull-request, it can be
+ reviewed again.
+- If no response is made from the author within 1 month (when improvements are
+ suggested or a question is asked), it can be closed.
**If the pull-request is [merge-able](#a-pull-request-is-considered-merge-able-when):**
diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md
index ccec99bc5..4132826cd 100644
--- a/.github/PULL_REQUEST_TEMPLATE.md
+++ b/.github/PULL_REQUEST_TEMPLATE.md
@@ -3,6 +3,7 @@ Add compact, short information about your PR for easier understanding:
- Goal of the PR
- How does the PR work?
- Does it resolve any reported issue?
+- Does this relate to a goal in [the roadmap](../doc/direction.md)?
- If not a bug fix, why is this PR needed? What usecases does it solve?
## To do
diff --git a/.github/workflows/android.yml b/.github/workflows/android.yml
index 47ab64d11..cc5fe83ef 100644
--- a/.github/workflows/android.yml
+++ b/.github/workflows/android.yml
@@ -21,13 +21,13 @@ on:
jobs:
build:
- runs-on: ubuntu-18.04
+ runs-on: ubuntu-20.04
steps:
- uses: actions/checkout@v2
- - name: Set up JDK 1.8
- uses: actions/setup-java@v1
- with:
- java-version: 1.8
+ - name: Install deps
+ run: |
+ sudo apt-get update
+ sudo apt-get install -y --no-install-recommends gettext openjdk-11-jdk-headless
- name: Build with Gradle
run: cd android; ./gradlew assemblerelease
- name: Save armeabi artifact
diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index a3cc92a8e..79f9af5c7 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -13,6 +13,8 @@ on:
- 'util/buildbot/**'
- 'util/ci/**'
- '.github/workflows/**.yml'
+ - 'Dockerfile'
+ - '.dockerignore'
pull_request:
paths:
- 'lib/**.[ch]'
@@ -24,51 +26,53 @@ on:
- 'util/buildbot/**'
- 'util/ci/**'
- '.github/workflows/**.yml'
+ - 'Dockerfile'
+ - '.dockerignore'
jobs:
- # This is our minor gcc compiler
- gcc_6:
+ # Older gcc version (should be close to our minimum supported version)
+ gcc_5:
runs-on: ubuntu-18.04
steps:
- uses: actions/checkout@v2
- name: Install deps
run: |
source ./util/ci/common.sh
- install_linux_deps g++-6
+ install_linux_deps g++-5
- name: Build
run: |
./util/ci/build.sh
env:
- CC: gcc-6
- CXX: g++-6
+ CC: gcc-5
+ CXX: g++-5
- name: Test
run: |
./bin/minetest --run-unittests
- # This is the current gcc compiler (available in bionic)
- gcc_8:
- runs-on: ubuntu-18.04
+ # Current gcc version
+ gcc_10:
+ runs-on: ubuntu-20.04
steps:
- uses: actions/checkout@v2
- name: Install deps
run: |
source ./util/ci/common.sh
- install_linux_deps g++-8
+ install_linux_deps g++-10
- name: Build
run: |
./util/ci/build.sh
env:
- CC: gcc-8
- CXX: g++-8
+ CC: gcc-10
+ CXX: g++-10
- name: Test
run: |
./bin/minetest --run-unittests
- # This is our minor clang compiler
+ # Older clang version (should be close to our minimum supported version)
clang_3_9:
runs-on: ubuntu-18.04
steps:
@@ -76,7 +80,7 @@ jobs:
- name: Install deps
run: |
source ./util/ci/common.sh
- install_linux_deps clang-3.9
+ install_linux_deps clang-3.9 gdb
- name: Build
run: |
@@ -85,26 +89,30 @@ jobs:
CC: clang-3.9
CXX: clang++-3.9
- - name: Test
+ - name: Unittest
run: |
./bin/minetest --run-unittests
- # This is the current clang version
- clang_9:
- runs-on: ubuntu-18.04
+ - name: Integration test + devtest
+ run: |
+ ./util/test_multiplayer.sh
+
+ # Current clang version
+ clang_10:
+ runs-on: ubuntu-20.04
steps:
- uses: actions/checkout@v2
- name: Install deps
run: |
source ./util/ci/common.sh
- install_linux_deps clang-9 valgrind libluajit-5.1-dev
+ install_linux_deps clang-10 valgrind libluajit-5.1-dev
- name: Build
run: |
./util/ci/build.sh
env:
- CC: clang-9
- CXX: clang++-9
+ CC: clang-10
+ CXX: clang++-10
CMAKE_FLAGS: "-DREQUIRE_LUAJIT=1"
- name: Test
@@ -124,7 +132,7 @@ jobs:
- name: Install deps
run: |
source ./util/ci/common.sh
- install_linux_deps clang-9
+ install_linux_deps --old-irr clang-9
- name: Build prometheus-cpp
run: |
@@ -142,29 +150,6 @@ jobs:
run: |
./bin/minetestserver --run-unittests
- # Build without freetype (client-only)
- clang_9_no_freetype:
- name: "clang_9 (FREETYPE=0)"
- runs-on: ubuntu-18.04
- steps:
- - uses: actions/checkout@v2
- - name: Install deps
- run: |
- source ./util/ci/common.sh
- install_linux_deps clang-9
-
- - name: Build
- run: |
- ./util/ci/build.sh
- env:
- CC: clang-9
- CXX: clang++-9
- CMAKE_FLAGS: "-DENABLE_FREETYPE=0 -DBUILD_SERVER=0"
-
- - name: Test
- run: |
- ./bin/minetest --run-unittests
-
docker:
name: "Docker image"
runs-on: ubuntu-18.04
@@ -172,7 +157,8 @@ jobs:
- uses: actions/checkout@v2
- name: Build docker image
run: |
- docker build .
+ docker build . -t minetest:latest
+ docker run --rm minetest:latest /usr/local/bin/minetestserver --version
win32:
name: "MinGW cross-compiler (32-bit)"
@@ -212,11 +198,14 @@ jobs:
msvc:
name: VS 2019 ${{ matrix.config.arch }}-${{ matrix.type }}
- runs-on: windows-2019
+ runs-on: windows-2019
+ #### Disabled due to Irrlicht switch
+ if: false
+ #### Disabled due to Irrlicht switch
env:
VCPKG_VERSION: 0bf3923f9fab4001c00f0f429682a0853b5749e0
# 2020.11
- vcpkg_packages: irrlicht zlib curl[winssl] openal-soft libvorbis libogg sqlite3 freetype luajit
+ vcpkg_packages: irrlicht zlib zstd curl[winssl] openal-soft libvorbis libogg sqlite3 freetype luajit
strategy:
fail-fast: false
matrix:
diff --git a/.github/workflows/cpp_lint.yml b/.github/workflows/cpp_lint.yml
index 1f97d105a..2bd884c7a 100644
--- a/.github/workflows/cpp_lint.yml
+++ b/.github/workflows/cpp_lint.yml
@@ -24,20 +24,21 @@ on:
- '.github/workflows/**.yml'
jobs:
- clang_format:
- runs-on: ubuntu-18.04
- steps:
- - uses: actions/checkout@v2
- - name: Install clang-format
- run: |
- sudo apt-get install clang-format-9 -qyy
- - name: Run clang-format
- run: |
- source ./util/ci/lint.sh
- perform_lint
- env:
- CLANG_FORMAT: clang-format-9
+# clang_format:
+# runs-on: ubuntu-18.04
+# steps:
+# - uses: actions/checkout@v2
+# - name: Install clang-format
+# run: |
+# sudo apt-get install clang-format-9 -qyy
+#
+# - name: Run clang-format
+# run: |
+# source ./util/ci/clang-format.sh
+# check_format
+# env:
+# CLANG_FORMAT: clang-format-9
clang_tidy:
runs-on: ubuntu-18.04
diff --git a/.github/workflows/macos.yml b/.github/workflows/macos.yml
new file mode 100644
index 000000000..69253b70a
--- /dev/null
+++ b/.github/workflows/macos.yml
@@ -0,0 +1,66 @@
+name: macos
+
+# build on c/cpp changes or workflow changes
+on:
+ push:
+ paths:
+ - 'lib/**.[ch]'
+ - 'lib/**.cpp'
+ - 'src/**.[ch]'
+ - 'src/**.cpp'
+ - '**/CMakeLists.txt'
+ - 'cmake/Modules/**'
+ - '.github/workflows/macos.yml'
+ pull_request:
+ paths:
+ - 'lib/**.[ch]'
+ - 'lib/**.cpp'
+ - 'src/**.[ch]'
+ - 'src/**.cpp'
+ - '**/CMakeLists.txt'
+ - 'cmake/Modules/**'
+ - '.github/workflows/macos.yml'
+
+env:
+ IRRLICHT_TAG: 1.9.0mt4
+ MINETEST_GAME_REPO: https://github.com/minetest/minetest_game.git
+ MINETEST_GAME_BRANCH: master
+ MINETEST_GAME_NAME: minetest_game
+
+jobs:
+ build:
+ runs-on: macos-10.15
+ steps:
+ - uses: actions/checkout@v2
+ - name: Install deps
+ run: |
+ pkgs=(cmake freetype gettext gmp hiredis jpeg jsoncpp leveldb libogg libpng libvorbis luajit zstd)
+ brew update
+ brew install ${pkgs[@]}
+ brew unlink $(brew ls --formula)
+ brew link ${pkgs[@]}
+
+ - name: Build
+ run: |
+ git clone -b $MINETEST_GAME_BRANCH $MINETEST_GAME_REPO games/$MINETEST_GAME_NAME
+ rm -rvf games/$MINETEST_GAME_NAME/.git
+ git clone https://github.com/minetest/irrlicht -b $IRRLICHT_TAG lib/irrlichtmt
+ mkdir cmakebuild
+ cd cmakebuild
+ cmake .. \
+ -DCMAKE_OSX_DEPLOYMENT_TARGET=10.14 \
+ -DCMAKE_FIND_FRAMEWORK=LAST \
+ -DCMAKE_INSTALL_PREFIX=../build/macos/ \
+ -DRUN_IN_PLACE=FALSE \
+ -DENABLE_FREETYPE=TRUE -DENABLE_GETTEXT=TRUE
+ make -j2
+ make install
+
+ - name: Test
+ run: |
+ ./build/macos/minetest.app/Contents/MacOS/minetest --run-unittests
+
+ - uses: actions/upload-artifact@v2
+ with:
+ name: minetest-macos
+ path: ./build/macos/
diff --git a/.gitignore b/.gitignore
index 31e938ce4..bb5e0a0cd 100644
--- a/.gitignore
+++ b/.gitignore
@@ -87,8 +87,8 @@ src/test_config.h
src/cmake_config.h
src/cmake_config_githash.h
src/unittest/test_world/world.mt
-src/lua/build/
-locale/
+games/devtest/mods/testnodes/textures/testnodes_generated_*.png
+/locale/
.directory
*.cbp
*.layout
@@ -107,3 +107,13 @@ CMakeDoxy*
compile_commands.json
*.apk
*.zip
+# Visual Studio
+*.vcxproj*
+*.sln
+.vs/
+
+# Optional user provided library folder
+lib/irrlichtmt
+
+# Generated mod storage database
+client/mod_storage.sqlite
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 0441aeaa1..5d2600364 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -9,16 +9,20 @@ stages:
- deploy
variables:
+ IRRLICHT_TAG: "1.9.0mt4"
MINETEST_GAME_REPO: "https://github.com/minetest/minetest_game.git"
CONTAINER_IMAGE: registry.gitlab.com/$CI_PROJECT_PATH
.build_template:
stage: build
+ before_script:
+ - apt-get update
+ - DEBIAN_FRONTEND=noninteractive apt-get -y install build-essential git cmake libpng-dev libjpeg-dev libxxf86vm-dev libgl1-mesa-dev libsqlite3-dev libleveldb-dev libogg-dev libvorbis-dev libopenal-dev libcurl4-gnutls-dev libfreetype6-dev zlib1g-dev libgmp-dev libjsoncpp-dev libzstd-dev
script:
+ - git clone https://github.com/minetest/irrlicht -b $IRRLICHT_TAG lib/irrlichtmt
- mkdir cmakebuild
- - mkdir -p artifact/minetest/usr/
- cd cmakebuild
- - cmake -DCMAKE_INSTALL_PREFIX=../artifact/minetest/usr/ -DCMAKE_BUILD_TYPE=Release -DRUN_IN_PLACE=FALSE -DENABLE_GETTEXT=TRUE -DENABLE_SYSTEM_JSONCPP=TRUE -DBUILD_SERVER=TRUE ..
+ - cmake -DCMAKE_INSTALL_PREFIX=../artifact/minetest/usr/ -DCMAKE_BUILD_TYPE=Release -DRUN_IN_PLACE=FALSE -DENABLE_GETTEXT=TRUE -DBUILD_SERVER=TRUE ..
- make -j2
- make install
artifacts:
@@ -30,7 +34,7 @@ variables:
.debpkg_template:
stage: package
before_script:
- - apt-get update -y
+ - apt-get update
- apt-get install -y git
- mkdir -p build/deb/minetest/DEBIAN/
- cp misc/debpkg-control build/deb/minetest/DEBIAN/control
@@ -39,7 +43,9 @@ variables:
- git clone $MINETEST_GAME_REPO build/deb/minetest/usr/share/minetest/games/minetest_game
- rm -rf build/deb/minetest/usr/share/minetest/games/minetest/.git
- sed -i 's/DATEPLACEHOLDER/'$(date +%y.%m.%d)'/g' build/deb/minetest/DEBIAN/control
+ - sed -i 's/JPEG_PLACEHOLDER/'$JPEG_PKG'/g' build/deb/minetest/DEBIAN/control
- sed -i 's/LEVELDB_PLACEHOLDER/'$LEVELDB_PKG'/g' build/deb/minetest/DEBIAN/control
+ - sed -i 's/JSONCPP_PLACEHOLDER/'$JSONCPP_PKG'/g' build/deb/minetest/DEBIAN/control
- cd build/deb/ && dpkg-deb -b minetest/ && mv minetest.deb ../../
artifacts:
expire_in: 90 day
@@ -49,7 +55,7 @@ variables:
.debpkg_install:
stage: deploy
before_script:
- - apt-get update -y
+ - apt-get update -qy
script:
- apt-get install -y ./*.deb
- minetest --version
@@ -63,9 +69,6 @@ variables:
build:debian-9:
extends: .build_template
image: debian:9
- before_script:
- - apt-get update -y
- - apt-get -y install build-essential libirrlicht-dev cmake libbz2-dev libpng-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
package:debian-9:
extends: .debpkg_template
@@ -73,7 +76,9 @@ package:debian-9:
needs:
- build:debian-9
variables:
+ JSONCPP_PKG: libjsoncpp1
LEVELDB_PKG: libleveldb1v5
+ JPEG_PKG: libjpeg62-turbo
deploy:debian-9:
extends: .debpkg_install
@@ -86,9 +91,6 @@ deploy:debian-9:
build:debian-10:
extends: .build_template
image: debian:10
- before_script:
- - apt-get update -y
- - apt-get -y install build-essential libirrlicht-dev cmake libbz2-dev libpng-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
package:debian-10:
extends: .debpkg_template
@@ -96,7 +98,9 @@ package:debian-10:
needs:
- build:debian-10
variables:
+ JSONCPP_PKG: libjsoncpp1
LEVELDB_PKG: libleveldb1d
+ JPEG_PKG: libjpeg62-turbo
deploy:debian-10:
extends: .debpkg_install
@@ -104,41 +108,37 @@ deploy:debian-10:
needs:
- package:debian-10
-##
-## Ubuntu
-##
-
-# Xenial
+# Bullseye
-build:ubuntu-16.04:
- extends: .build_template
- image: ubuntu:xenial
- before_script:
- - apt-get update -y
- - apt-get -y install build-essential libirrlicht-dev cmake libbz2-dev libpng-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
+build:debian-11:
+ extends: .build_template
+ image: debian:11
-package:ubuntu-16.04:
+package:debian-11:
extends: .debpkg_template
- image: ubuntu:xenial
+ image: debian:11
needs:
- - build:ubuntu-16.04
+ - build:debian-11
variables:
- LEVELDB_PKG: libleveldb1v5
+ JSONCPP_PKG: libjsoncpp24
+ LEVELDB_PKG: libleveldb1d
+ JPEG_PKG: libjpeg62-turbo
-deploy:ubuntu-16.04:
+deploy:debian-11:
extends: .debpkg_install
- image: ubuntu:xenial
+ image: debian:11
needs:
- - package:ubuntu-16.04
+ - package:debian-11
+
+##
+## Ubuntu
+##
# Bionic
build:ubuntu-18.04:
extends: .build_template
image: ubuntu:bionic
- before_script:
- - apt-get update -y
- - apt-get -y install build-essential libirrlicht-dev cmake libbz2-dev libpng-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
package:ubuntu-18.04:
extends: .debpkg_template
@@ -146,7 +146,9 @@ package:ubuntu-18.04:
needs:
- build:ubuntu-18.04
variables:
+ JSONCPP_PKG: libjsoncpp1
LEVELDB_PKG: libleveldb1v5
+ JPEG_PKG: libjpeg-turbo8
deploy:ubuntu-18.04:
extends: .debpkg_install
@@ -154,6 +156,28 @@ deploy:ubuntu-18.04:
needs:
- package:ubuntu-18.04
+# Focal
+
+build:ubuntu-20.04:
+ extends: .build_template
+ image: ubuntu:focal
+
+package:ubuntu-20.04:
+ extends: .debpkg_template
+ image: ubuntu:focal
+ needs:
+ - build:ubuntu-20.04
+ variables:
+ JSONCPP_PKG: libjsoncpp1
+ LEVELDB_PKG: libleveldb1d
+ JPEG_PKG: libjpeg-turbo8
+
+deploy:ubuntu-20.04:
+ extends: .debpkg_install
+ image: ubuntu:focal
+ needs:
+ - package:ubuntu-20.04
+
##
## Fedora
##
@@ -163,17 +187,17 @@ build:fedora-28:
extends: .build_template
image: fedora:28
before_script:
- - dnf -y install make automake gcc gcc-c++ kernel-devel cmake libcurl-devel openal-soft-devel libvorbis-devel libXxf86vm-devel libogg-devel freetype-devel mesa-libGL-devel zlib-devel jsoncpp-devel irrlicht-devel gmp-devel sqlite-devel luajit-devel leveldb-devel ncurses-devel spatialindex-devel
+ - dnf -y install make git gcc gcc-c++ kernel-devel cmake libjpeg-devel libpng-devel libcurl-devel openal-soft-devel libvorbis-devel libXxf86vm-devel libogg-devel freetype-devel mesa-libGL-devel zlib-devel jsoncpp-devel gmp-devel sqlite-devel luajit-devel leveldb-devel ncurses-devel spatialindex-devel libzstd-devel
##
## MinGW for Windows
##
.generic_win_template:
- image: ubuntu:bionic
+ image: ubuntu:focal
before_script:
- - apt-get update -y
- - apt-get install -y wget xz-utils unzip git cmake gettext
+ - apt-get update
+ - DEBIAN_FRONTEND=noninteractive apt-get install -y wget xz-utils unzip git cmake gettext
- wget -nv http://minetest.kitsunemimi.pw/mingw-w64-${WIN_ARCH}_9.2.0_ubuntu18.04.tar.xz -O mingw.tar.xz
- tar -xaf mingw.tar.xz -C /usr
@@ -181,19 +205,6 @@ build:fedora-28:
extends: .generic_win_template
stage: build
artifacts:
- expire_in: 1h
- paths:
- - build/minetest/_build/*
-
-.package_win_template:
- extends: .generic_win_template
- stage: package
- script:
- - unzip build/minetest/_build/minetest-*.zip
- - cp -p /usr/${WIN_ARCH}-w64-mingw32/bin/libgcc*.dll minetest-*-win*/bin/
- - cp -p /usr/${WIN_ARCH}-w64-mingw32/bin/libstdc++*.dll minetest-*-win*/bin/
- - cp -p /usr/${WIN_ARCH}-w64-mingw32/bin/libwinpthread*.dll minetest-*-win*/bin/
- artifacts:
expire_in: 90 day
paths:
- minetest-*-win*/*
@@ -201,29 +212,16 @@ build:fedora-28:
build:win32:
extends: .build_win_template
script:
- - ./util/buildbot/buildwin32.sh build
- variables:
- WIN_ARCH: "i686"
-
-package:win32:
- extends: .package_win_template
- needs:
- - build:win32
+ - EXISTING_MINETEST_DIR=$PWD ./util/buildbot/buildwin32.sh build
+ - unzip -q build/build/*.zip
variables:
WIN_ARCH: "i686"
-
build:win64:
extends: .build_win_template
script:
- - ./util/buildbot/buildwin64.sh build
- variables:
- WIN_ARCH: "x86_64"
-
-package:win64:
- extends: .package_win_template
- needs:
- - build:win64
+ - EXISTING_MINETEST_DIR=$PWD ./util/buildbot/buildwin64.sh build
+ - unzip -q build/build/*.zip
variables:
WIN_ARCH: "x86_64"
@@ -274,7 +272,7 @@ package:appimage-client:
- build:ubuntu-18.04
before_script:
- apt-get update -y
- - apt-get install -y git wget
+ - apt-get install -y git
# Collect files
- mkdir AppDir
- cp -a artifact/minetest/usr/ AppDir/usr/
diff --git a/.luacheckrc b/.luacheckrc
index e010ab95c..a922bdea9 100644
--- a/.luacheckrc
+++ b/.luacheckrc
@@ -20,7 +20,7 @@ read_globals = {
string = {fields = {"split", "trim"}},
table = {fields = {"copy", "getn", "indexof", "insert_all"}},
- math = {fields = {"hypot"}},
+ math = {fields = {"hypot", "round"}},
}
globals = {
diff --git a/AppImageBuilder.yml b/AppImageBuilder.yml
index 9ecad5d8e..5788e246b 100644
--- a/AppImageBuilder.yml
+++ b/AppImageBuilder.yml
@@ -24,18 +24,21 @@ AppDir:
- sourceline: deb http://archive.ubuntu.com/ubuntu/ bionic-security main universe
include:
- - libirrlicht1.8
- - libxxf86vm1
- - libgl1-mesa-glx
- - libsqlite3-0
- - libogg0
- - libvorbis0a
- - libopenal1
+ - libc6
- libcurl3-gnutls
- libfreetype6
- - zlib1g
- - libgmp10
+ - libgl1
+ - libjpeg-turbo8
- libjsoncpp1
+ - libleveldb1v5
+ - libopenal1
+ - libpng16-16
+ - libsqlite3-0
+ - libstdc++6
+ - libvorbisfile3
+ - libx11-6
+ - libxxf86vm1
+ - zlib1g
files:
exclude:
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 5629cbe70..40a9ce15f 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1,19 +1,24 @@
cmake_minimum_required(VERSION 3.5)
-cmake_policy(SET CMP0025 OLD)
+# Set policies up to 3.9 since we want to enable the IPO option
+if(${CMAKE_VERSION} VERSION_LESS 3.9)
+ cmake_policy(VERSION ${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION})
+else()
+ cmake_policy(VERSION 3.9)
+endif()
# This can be read from ${PROJECT_NAME} after project() is called
project(minetest)
set(PROJECT_NAME_CAPITALIZED "Minetest")
set(CMAKE_CXX_STANDARD 11)
-set(GCC_MINIMUM_VERSION "4.8")
-set(CLANG_MINIMUM_VERSION "3.4")
+set(GCC_MINIMUM_VERSION "5.1")
+set(CLANG_MINIMUM_VERSION "3.5")
# Also remember to set PROTOCOL_VERSION in network/networkprotocol.h when releasing
set(VERSION_MAJOR 5)
-set(VERSION_MINOR 4)
-set(VERSION_PATCH 2)
+set(VERSION_MINOR 5)
+set(VERSION_PATCH 0)
set(VERSION_EXTRA "" CACHE STRING "Stuff to append to version string")
# Change to false for releases
@@ -21,7 +26,7 @@ set(DEVELOPMENT_BUILD FALSE)
set(VERSION_STRING "${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}")
if(VERSION_EXTRA)
- set(VERSION_STRING ${VERSION_STRING}-${VERSION_EXTRA})
+ set(VERSION_STRING "${VERSION_STRING}-${VERSION_EXTRA}")
elseif(DEVELOPMENT_BUILD)
set(VERSION_STRING "${VERSION_STRING}-dev")
endif()
@@ -47,7 +52,6 @@ set(BUILD_CLIENT TRUE CACHE BOOL "Build client")
set(BUILD_SERVER FALSE CACHE BOOL "Build server")
set(BUILD_UNITTESTS TRUE CACHE BOOL "Build unittests")
-
set(WARN_ALL TRUE CACHE BOOL "Enable -Wall for Release build")
if(NOT CMAKE_BUILD_TYPE)
@@ -59,8 +63,62 @@ endif()
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/Modules/")
+set(IRRLICHTMT_BUILD_DIR "" CACHE PATH "Path to IrrlichtMt build directory.")
+if(NOT "${IRRLICHTMT_BUILD_DIR}" STREQUAL "")
+ find_package(IrrlichtMt QUIET
+ PATHS "${IRRLICHTMT_BUILD_DIR}"
+ NO_DEFAULT_PATH
+)
+
+ if(NOT TARGET IrrlichtMt::IrrlichtMt)
+ # find_package() searches certain subdirectories. ${PATH}/cmake is not
+ # the only one, but it is the one where IrrlichtMt is supposed to export
+ # IrrlichtMtConfig.cmake
+ message(FATAL_ERROR "Could not find IrrlichtMtConfig.cmake in ${IRRLICHTMT_BUILD_DIR}/cmake.")
+ endif()
# This is done here so that relative search paths are more reasonable
-find_package(Irrlicht)
+elseif(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/lib/irrlichtmt")
+ message(STATUS "Using user-provided IrrlichtMt at subdirectory 'lib/irrlichtmt'")
+ if(BUILD_CLIENT)
+ # tell IrrlichtMt to create a static library
+ set(BUILD_SHARED_LIBS OFF CACHE BOOL "Build shared library" FORCE)
+ add_subdirectory(lib/irrlichtmt EXCLUDE_FROM_ALL)
+ unset(BUILD_SHARED_LIBS CACHE)
+
+ if(NOT TARGET IrrlichtMt)
+ message(FATAL_ERROR "IrrlichtMt project is missing a CMake target?!")
+ endif()
+ else()
+ add_library(IrrlichtMt::IrrlichtMt INTERFACE IMPORTED)
+ set_target_properties(IrrlichtMt::IrrlichtMt PROPERTIES
+ INTERFACE_INCLUDE_DIRECTORIES "${CMAKE_CURRENT_SOURCE_DIR}/lib/irrlichtmt/include")
+ endif()
+else()
+ find_package(IrrlichtMt QUIET)
+ if(NOT TARGET IrrlichtMt::IrrlichtMt)
+ string(CONCAT explanation_msg
+ "The Minetest team has forked Irrlicht to make their own customizations. "
+ "It can be found here: https://github.com/minetest/irrlicht\n"
+ "For example use: git clone --depth=1 https://github.com/minetest/irrlicht lib/irrlichtmt\n")
+ if(BUILD_CLIENT)
+ message(FATAL_ERROR "IrrlichtMt is required to build the client, but it was not found.\n${explanation_msg}")
+ endif()
+
+ include(MinetestFindIrrlichtHeaders)
+ if(NOT IRRLICHT_INCLUDE_DIR)
+ message(FATAL_ERROR "Irrlicht or IrrlichtMt headers are required to build the server, but none found.\n${explanation_msg}")
+ endif()
+ message(STATUS "Found Irrlicht headers: ${IRRLICHT_INCLUDE_DIR}")
+ add_library(IrrlichtMt::IrrlichtMt INTERFACE IMPORTED)
+ # Note that we can't use target_include_directories() since that doesn't work for IMPORTED targets before CMake 3.11
+ set_target_properties(IrrlichtMt::IrrlichtMt PROPERTIES
+ INTERFACE_INCLUDE_DIRECTORIES "${IRRLICHT_INCLUDE_DIR}")
+ endif()
+endif()
+
+if(TARGET IrrlichtMt::IrrlichtMt)
+ message(STATUS "Found IrrlichtMt ${IrrlichtMt_VERSION}")
+endif()
# Installation
@@ -91,15 +149,16 @@ elseif(UNIX) # Linux, BSD etc
set(ICONDIR "unix/icons")
set(LOCALEDIR "locale")
else()
- set(SHAREDIR "${CMAKE_INSTALL_PREFIX}/share/${PROJECT_NAME}")
- set(BINDIR "${CMAKE_INSTALL_PREFIX}/bin")
- set(DOCDIR "${CMAKE_INSTALL_PREFIX}/share/doc/${PROJECT_NAME}")
- set(MANDIR "${CMAKE_INSTALL_PREFIX}/share/man")
+ include(GNUInstallDirs)
+ set(SHAREDIR "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_DATADIR}/${PROJECT_NAME}")
+ set(BINDIR "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_BINDIR}")
+ set(DOCDIR "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_DOCDIR}")
+ set(MANDIR "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_MANDIR}")
set(EXAMPLE_CONF_DIR ${DOCDIR})
- set(XDG_APPS_DIR "${CMAKE_INSTALL_PREFIX}/share/applications")
- set(APPDATADIR "${CMAKE_INSTALL_PREFIX}/share/metainfo")
- set(ICONDIR "${CMAKE_INSTALL_PREFIX}/share/icons")
- set(LOCALEDIR "${CMAKE_INSTALL_PREFIX}/share/locale")
+ set(XDG_APPS_DIR "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_DATADIR}/applications")
+ set(APPDATADIR "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_DATADIR}/metainfo")
+ set(ICONDIR "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_DATADIR}/icons")
+ set(LOCALEDIR "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LOCALEDIR}")
endif()
endif()
@@ -169,7 +228,6 @@ install(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/games/devtest" DESTINATION "${SHA
if(BUILD_CLIENT)
install(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/client/shaders" DESTINATION "${SHAREDIR}/client")
install(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/textures/base/pack" DESTINATION "${SHAREDIR}/textures/base")
- install(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/fonts" DESTINATION "${SHAREDIR}")
if(RUN_IN_PLACE)
install(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/clientmods" DESTINATION "${SHAREDIR}")
install(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/client/serverlist" DESTINATION "${SHAREDIR}/client")
@@ -203,10 +261,10 @@ endif()
find_package(GMP REQUIRED)
find_package(Json REQUIRED)
find_package(Lua REQUIRED)
-
-# JsonCPP doesn't compile well on GCC 4.8
-if(NOT ENABLE_SYSTEM_JSONCPP)
- set(GCC_MINIMUM_VERSION "4.9")
+if(NOT USE_LUAJIT)
+ set(LUA_BIT_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/lib/bitop)
+ set(LUA_BIT_LIBRARY bitop)
+ add_subdirectory(lib/bitop)
endif()
if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
@@ -214,7 +272,7 @@ if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
message(FATAL_ERROR "Insufficient gcc version, found ${CMAKE_CXX_COMPILER_VERSION}. "
"Version ${GCC_MINIMUM_VERSION} or higher is required.")
endif()
-elseif(CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
+elseif(CMAKE_CXX_COMPILER_ID MATCHES "(Apple)?Clang")
if (CMAKE_CXX_COMPILER_VERSION VERSION_LESS "${CLANG_MINIMUM_VERSION}")
message(FATAL_ERROR "Insufficient clang version, found ${CMAKE_CXX_COMPILER_VERSION}. "
"Version ${CLANG_MINIMUM_VERSION} or higher is required.")
@@ -223,7 +281,6 @@ endif()
# Subdirectories
# Be sure to add all relevant definitions above this
-
add_subdirectory(src)
diff --git a/Dockerfile b/Dockerfile
index 871ca9825..8d1008fa2 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -1,6 +1,8 @@
-FROM alpine:3.11
+ARG DOCKER_IMAGE=alpine:3.14
+FROM $DOCKER_IMAGE AS builder
ENV MINETEST_GAME_VERSION master
+ENV IRRLICHT_VERSION master
COPY .git /usr/src/minetest/.git
COPY CMakeLists.txt /usr/src/minetest/CMakeLists.txt
@@ -18,10 +20,8 @@ COPY textures /usr/src/minetest/textures
WORKDIR /usr/src/minetest
-RUN apk add --no-cache git build-base irrlicht-dev cmake bzip2-dev libpng-dev \
- jpeg-dev libxxf86vm-dev mesa-dev sqlite-dev libogg-dev \
- libvorbis-dev openal-soft-dev curl-dev freetype-dev zlib-dev \
- gmp-dev jsoncpp-dev postgresql-dev luajit-dev ca-certificates && \
+RUN apk add --no-cache git build-base cmake sqlite-dev curl-dev zlib-dev zstd-dev \
+ gmp-dev jsoncpp-dev postgresql-dev ninja luajit-dev ca-certificates && \
git clone --depth=1 -b ${MINETEST_GAME_VERSION} https://github.com/minetest/minetest_game.git ./games/minetest_game && \
rm -fr ./games/minetest_game/.git
@@ -32,9 +32,13 @@ RUN git clone --recursive https://github.com/jupp0r/prometheus-cpp/ && \
cmake .. \
-DCMAKE_INSTALL_PREFIX=/usr/local \
-DCMAKE_BUILD_TYPE=Release \
- -DENABLE_TESTING=0 && \
- make -j2 && \
- make install
+ -DENABLE_TESTING=0 \
+ -GNinja && \
+ ninja && \
+ ninja install
+
+RUN git clone --depth=1 https://github.com/minetest/irrlicht/ -b ${IRRLICHT_VERSION} && \
+ cp -r irrlicht/include /usr/include/irrlichtmt
WORKDIR /usr/src/minetest
RUN mkdir build && \
@@ -45,21 +49,23 @@ RUN mkdir build && \
-DBUILD_SERVER=TRUE \
-DENABLE_PROMETHEUS=TRUE \
-DBUILD_UNITTESTS=FALSE \
- -DBUILD_CLIENT=FALSE && \
- make -j2 && \
- make install
+ -DBUILD_CLIENT=FALSE \
+ -GNinja && \
+ ninja && \
+ ninja install
-FROM alpine:3.11
+ARG DOCKER_IMAGE=alpine:3.14
+FROM $DOCKER_IMAGE AS runtime
-RUN apk add --no-cache sqlite-libs curl gmp libstdc++ libgcc libpq luajit && \
+RUN apk add --no-cache sqlite-libs curl gmp libstdc++ libgcc libpq luajit jsoncpp zstd-libs && \
adduser -D minetest --uid 30000 -h /var/lib/minetest && \
chown -R minetest:minetest /var/lib/minetest
WORKDIR /var/lib/minetest
-COPY --from=0 /usr/local/share/minetest /usr/local/share/minetest
-COPY --from=0 /usr/local/bin/minetestserver /usr/local/bin/minetestserver
-COPY --from=0 /usr/local/share/doc/minetest/minetest.conf.example /etc/minetest/minetest.conf
+COPY --from=builder /usr/local/share/minetest /usr/local/share/minetest
+COPY --from=builder /usr/local/bin/minetestserver /usr/local/bin/minetestserver
+COPY --from=builder /usr/local/share/doc/minetest/minetest.conf.example /etc/minetest/minetest.conf
USER minetest:minetest
diff --git a/LICENSE.txt b/LICENSE.txt
index 9b8ee851a..ab44488a7 100644
--- a/LICENSE.txt
+++ b/LICENSE.txt
@@ -14,6 +14,9 @@ https://www.apache.org/licenses/LICENSE-2.0.html
Textures by Zughy are under CC BY-SA 4.0
https://creativecommons.org/licenses/by-sa/4.0/
+textures/base/pack/server_public.png is under CC-BY 4.0, taken from Twitter's Twemoji set
+https://creativecommons.org/licenses/by/4.0/
+
Authors of media files
-----------------------
Everything not listed in here:
@@ -39,10 +42,10 @@ erlehmann:
misc/minetest.svg
textures/base/pack/logo.png
-JRottm
+JRottm:
textures/base/pack/player_marker.png
-srifqi
+srifqi:
textures/base/pack/chat_hide_btn.png
textures/base/pack/chat_show_btn.png
textures/base/pack/joystick_bg.png
@@ -58,6 +61,9 @@ Zughy:
textures/base/pack/cdb_update.png
textures/base/pack/cdb_viewonline.png
+appgurueu:
+ textures/base/pack/server_incompatible.png
+
License of Minetest source code
-------------------------------
@@ -81,7 +87,8 @@ with this program; if not, write to the Free Software Foundation, Inc.,
Irrlicht
---------------
-This program uses the Irrlicht Engine. http://irrlicht.sourceforge.net/
+This program uses IrrlichtMt, Minetest's fork of
+the Irrlicht Engine. http://irrlicht.sourceforge.net/
The Irrlicht Engine License
diff --git a/README.md b/README.md
index 58ec0c821..b3d2981f6 100644
--- a/README.md
+++ b/README.md
@@ -68,7 +68,7 @@ Some can be changed in the key config dialog in the settings tab.
| P | Enable/disable pitch move mode |
| J | Enable/disable fast mode (needs fast privilege) |
| H | Enable/disable noclip mode (needs noclip privilege) |
-| E | Move fast in fast mode |
+| E | Aux1 (Move fast in fast mode. Games may add special features) |
| C | Cycle through camera modes |
| V | Cycle through minimap modes |
| Shift + V | Change minimap orientation |
@@ -132,29 +132,31 @@ Compiling
| Dependency | Version | Commentary |
|------------|---------|------------|
-| GCC | 4.9+ | Can be replaced with Clang 3.4+ |
-| CMake | 2.6+ | |
-| Irrlicht | 1.7.3+ | |
-| SQLite3 | 3.0+ | |
+| GCC | 5.1+ | or Clang 3.5+ |
+| CMake | 3.5+ | |
+| IrrlichtMt | - | Custom version of Irrlicht, see https://github.com/minetest/irrlicht |
+| Freetype | 2.0+ | |
+| SQLite3 | 3+ | |
+| Zstd | 1.0+ | |
| LuaJIT | 2.0+ | Bundled Lua 5.1 is used if not present |
| GMP | 5.0.0+ | Bundled mini-GMP is used if not present |
| JsonCPP | 1.0.0+ | Bundled JsonCPP is used if not present |
For Debian/Ubuntu users:
- sudo apt install g++ make libc6-dev libirrlicht-dev cmake libbz2-dev libpng-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
+ sudo apt install g++ make libc6-dev cmake libpng-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 libzstd-dev libluajit-5.1-dev
For Fedora users:
- sudo dnf install make automake gcc gcc-c++ kernel-devel cmake libcurl-devel openal-soft-devel libvorbis-devel libXxf86vm-devel libogg-devel freetype-devel mesa-libGL-devel zlib-devel jsoncpp-devel irrlicht-devel bzip2-libs gmp-devel sqlite-devel luajit-devel leveldb-devel ncurses-devel doxygen spatialindex-devel bzip2-devel
-
+ sudo dnf install make automake gcc gcc-c++ kernel-devel cmake libcurl-devel openal-soft-devel libvorbis-devel libXxf86vm-devel libogg-devel freetype-devel mesa-libGL-devel zlib-devel jsoncpp-devel gmp-devel sqlite-devel luajit-devel leveldb-devel ncurses-devel spatialindex-devel libzstd-devel
+
For Arch users:
- sudo pacman -S base-devel libcurl-gnutls cmake libxxf86vm irrlicht libpng sqlite libogg libvorbis openal freetype2 jsoncpp gmp luajit leveldb ncurses
+ sudo pacman -S base-devel libcurl-gnutls cmake libxxf86vm libpng sqlite libogg libvorbis openal freetype2 jsoncpp gmp luajit leveldb ncurses zstd
For Alpine users:
- sudo apk add build-base irrlicht-dev cmake bzip2-dev libpng-dev jpeg-dev libxxf86vm-dev mesa-dev sqlite-dev libogg-dev libvorbis-dev openal-soft-dev curl-dev freetype-dev zlib-dev gmp-dev jsoncpp-dev luajit-dev
+ sudo apk add build-base cmake libpng-dev jpeg-dev libxxf86vm-dev mesa-dev sqlite-dev libogg-dev libvorbis-dev openal-soft-dev curl-dev freetype-dev zlib-dev gmp-dev jsoncpp-dev luajit-dev zstd-dev
#### Download
@@ -177,6 +179,10 @@ Download minetest_game (otherwise only the "Development Test" game is available)
git clone --depth 1 https://github.com/minetest/minetest_game.git games/minetest_game
+Download IrrlichtMt to `lib/irrlichtmt`, it will be used to satisfy the IrrlichtMt dependency that way:
+
+ git clone --depth 1 https://github.com/minetest/irrlicht.git lib/irrlichtmt
+
Download source, without using Git:
wget https://github.com/minetest/minetest/archive/master.tar.gz
@@ -191,6 +197,14 @@ Download minetest_game, without using Git:
mv minetest_game-master minetest_game
cd ..
+Download IrrlichtMt, without using Git:
+
+ cd lib/
+ wget https://github.com/minetest/irrlicht/archive/master.tar.gz
+ tar xf master.tar.gz
+ mv irrlicht-master irrlichtmt
+ cd ..
+
#### Build
Build a version that runs directly from the source directory:
@@ -209,8 +223,15 @@ Run it:
- You can disable the client build by specifying `-DBUILD_CLIENT=FALSE`.
- You can select between Release and Debug build by `-DCMAKE_BUILD_TYPE=<Debug or Release>`.
- Debug build is slower, but gives much more useful output in a debugger.
-- If you build a bare server you don't need to have Irrlicht installed.
- - In that case use `-DIRRLICHT_SOURCE_DIR=/the/irrlicht/source`.
+- If you build a bare server you don't need to have the Irrlicht or IrrlichtMt library installed.
+ - In that case use `-DIRRLICHT_INCLUDE_DIR=/some/where/irrlicht/include`.
+
+- Minetest will use the IrrlichtMt package that is found first, given by the following order:
+ 1. Specified `IRRLICHTMT_BUILD_DIR` CMake variable
+ 2. `${PROJECT_SOURCE_DIR}/lib/irrlichtmt` (if existent)
+ 3. Installation of IrrlichtMt in the system-specific library paths
+ 4. For server builds with disabled `BUILD_CLIENT` variable, the headers from `IRRLICHT_INCLUDE_DIR` will be used.
+ - NOTE: Changing the IrrlichtMt build directory (includes system installs) requires regenerating the CMake cache (`rm CMakeCache.txt`)
### CMake options
@@ -227,9 +248,8 @@ General options and their default values:
MinSizeRel - Release build with -Os passed to compiler to make executable as small as possible
ENABLE_CURL=ON - Build with cURL; Enables use of online mod repo, public serverlist and remote media fetching via http
ENABLE_CURSES=ON - Build with (n)curses; Enables a server side terminal (command line option: --terminal)
- ENABLE_FREETYPE=ON - Build with FreeType2; Allows using TTF fonts
ENABLE_GETTEXT=ON - Build with Gettext; Allows using translations
- ENABLE_GLES=OFF - Build for OpenGL ES instead of OpenGL (requires support by Irrlicht)
+ ENABLE_GLES=OFF - Build for OpenGL ES instead of OpenGL (requires support by IrrlichtMt)
ENABLE_LEVELDB=ON - Build with LevelDB; Enables use of LevelDB map backend
ENABLE_POSTGRESQL=ON - Build with libpq; Enables use of PostgreSQL map backend (PostgreSQL 9.5 or greater recommended)
ENABLE_REDIS=ON - Build with libhiredis; Enables use of Redis map backend
@@ -238,33 +258,31 @@ General options and their default values:
ENABLE_LUAJIT=ON - Build with LuaJIT (much faster than non-JIT Lua)
ENABLE_PROMETHEUS=OFF - Build with Prometheus metrics exporter (listens on tcp/30000 by default)
ENABLE_SYSTEM_GMP=ON - Use GMP from system (much faster than bundled mini-gmp)
- ENABLE_SYSTEM_JSONCPP=OFF - Use JsonCPP from system
+ ENABLE_SYSTEM_JSONCPP=ON - Use JsonCPP from system
OPENGL_GL_PREFERENCE=LEGACY - Linux client build only; See CMake Policy CMP0072 for reference
RUN_IN_PLACE=FALSE - Create a portable install (worlds, settings etc. in current directory)
USE_GPROF=FALSE - Enable profiling using GProf
VERSION_EXTRA= - Text to append to version (e.g. VERSION_EXTRA=foobar -> Minetest 0.4.9-foobar)
+ ENABLE_TOUCH=FALSE - Enable Touchscreen support (requires support by IrrlichtMt)
Library specific options:
- BZIP2_INCLUDE_DIR - Linux only; directory where bzlib.h is located
- BZIP2_LIBRARY - Linux only; path to libbz2.a/libbz2.so
CURL_DLL - Only if building with cURL on Windows; path to libcurl.dll
CURL_INCLUDE_DIR - Only if building with cURL; directory where curl.h is located
CURL_LIBRARY - Only if building with cURL; path to libcurl.a/libcurl.so/libcurl.lib
EGL_INCLUDE_DIR - Only if building with GLES; directory that contains egl.h
EGL_LIBRARY - Only if building with GLES; path to libEGL.a/libEGL.so
- FREETYPE_INCLUDE_DIR_freetype2 - Only if building with FreeType 2; directory that contains an freetype directory with files such as ftimage.h in it
- FREETYPE_INCLUDE_DIR_ft2build - Only if building with FreeType 2; directory that contains ft2build.h
- FREETYPE_LIBRARY - Only if building with FreeType 2; path to libfreetype.a/libfreetype.so/freetype.lib
- FREETYPE_DLL - Only if building with FreeType 2 on Windows; path to libfreetype.dll
- GETTEXT_DLL - Only when building with gettext on Windows; path to libintl3.dll
- GETTEXT_ICONV_DLL - Only when building with gettext on Windows; path to libiconv2.dll
+ EXTRA_DLL - Only on Windows; optional paths to additional DLLs that should be packaged
+ FREETYPE_INCLUDE_DIR_freetype2 - Directory that contains files such as ftimage.h
+ FREETYPE_INCLUDE_DIR_ft2build - Directory that contains ft2build.h
+ FREETYPE_LIBRARY - Path to libfreetype.a/libfreetype.so/freetype.lib
+ FREETYPE_DLL - Only on Windows; path to libfreetype-6.dll
+ GETTEXT_DLL - Only when building with gettext on Windows; paths to libintl + libiconv DLLs
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 - 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
+ IRRLICHT_DLL - Only on Windows; path to IrrlichtMt.dll
+ IRRLICHT_INCLUDE_DIR - Directory that contains IrrCompileConfig.h (usable for server build only)
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
@@ -276,7 +294,6 @@ Library specific options:
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
OGG_DLL - Only if building with sound on Windows; path to libogg.dll
OGG_INCLUDE_DIR - Only if building with sound; directory that contains an ogg directory which contains ogg.h
OGG_LIBRARY - Only if building with sound; path to libogg.a/libogg.so/libogg.dll.a
@@ -287,17 +304,19 @@ Library specific options:
OPENGLES2_LIBRARY - Only if building with GLES; path to libGLESv2.a/libGLESv2.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
+ VORBIS_DLL - Only if building with sound on Windows; paths to vorbis DLLs
VORBIS_INCLUDE_DIR - Only if building with sound; directory that contains a directory vorbis with vorbisenc.h inside
VORBIS_LIBRARY - Only if building with sound; path to libvorbis.a/libvorbis.so/libvorbis.dll.a
XXF86VM_LIBRARY - Only on Linux; path to libXXf86vm.a/libXXf86vm.so
ZLIB_DLL - Only on Windows; path to zlib1.dll
ZLIB_INCLUDE_DIR - Directory that contains zlib.h
ZLIB_LIBRARY - Path to libz.a/libz.so/zlib.lib
+ ZSTD_DLL - Only on Windows; path to libzstd.dll
+ ZSTD_INCLUDE_DIR - Directory that contains zstd.h
+ ZSTD_LIBRARY - Path to libzstd.a/libzstd.so/ztd.lib
-### Compiling on Windows
+### Compiling on Windows using MSVC
### Requirements
@@ -310,16 +329,14 @@ Library specific options:
It is highly recommended to use vcpkg as package manager.
-#### a) Using vcpkg to install dependencies
-
After you successfully built vcpkg you can easily install the required libraries:
```powershell
-vcpkg install irrlicht zlib curl[winssl] openal-soft libvorbis libogg sqlite3 freetype luajit gmp jsoncpp --triplet x64-windows
+vcpkg install zlib zstd curl[winssl] openal-soft libvorbis libogg libjpeg-turbo sqlite3 freetype luajit gmp jsoncpp opengl-registry --triplet x64-windows
```
+- **Don't forget about IrrlichtMt.** The easiest way is to clone it to `lib/irrlichtmt` as described in the Linux section.
- `curl` is optional, but required to read the serverlist, `curl[winssl]` is required to use the content store.
- `openal-soft`, `libvorbis` and `libogg` are optional, but required to use sound.
-- `freetype` is optional, it allows true-type font rendering.
- `luajit` is optional, it replaces the integrated Lua interpreter with a faster just-in-time interpreter.
- `gmp` and `jsoncpp` are optional, otherwise the bundled versions will be compiled
@@ -327,10 +344,6 @@ There are other optional libraries, but they are not tested if they can build an
Use `--triplet` to specify the target triplet, e.g. `x64-windows` or `x86-windows`.
-#### b) Compile the dependencies on your own
-
-This is outdated and not recommended. Follow the instructions on https://dev.minetest.net/Build_Win32_Minetest_including_all_required_libraries#VS2012_Build
-
### Compile Minetest
#### a) Using the vcpkg toolchain and CMake GUI
@@ -354,17 +367,11 @@ This is outdated and not recommended. Follow the instructions on https://dev.min
Run the following script in PowerShell:
```powershell
-cmake . -G"Visual Studio 15 2017 Win64" -DCMAKE_TOOLCHAIN_FILE=D:/vcpkg/scripts/buildsystems/vcpkg.cmake -DCMAKE_BUILD_TYPE=Release -DENABLE_GETTEXT=OFF -DENABLE_CURSES=OFF -DENABLE_SYSTEM_JSONCPP=ON
+cmake . -G"Visual Studio 15 2017 Win64" -DCMAKE_TOOLCHAIN_FILE=D:/vcpkg/scripts/buildsystems/vcpkg.cmake -DCMAKE_BUILD_TYPE=Release -DENABLE_GETTEXT=OFF -DENABLE_CURSES=OFF
cmake --build . --config Release
```
Make sure that the right compiler is selected and the path to the vcpkg toolchain is correct.
-#### c) Using your own compiled libraries
-
-**This is outdated and not recommended**
-
-Follow the instructions on https://dev.minetest.net/Build_Win32_Minetest_including_all_required_libraries#VS2012_Build
-
### Windows Installer using WiX Toolset
Requirements:
@@ -378,6 +385,60 @@ Build the binaries as described above, but make sure you unselect `RUN_IN_PLACE`
Open the generated project file with Visual Studio. Right-click **Package** and choose **Generate**.
It may take some minutes to generate the installer.
+### Compiling on MacOS
+
+#### Requirements
+- [Homebrew](https://brew.sh/)
+- [Git](https://git-scm.com/downloads)
+
+Install dependencies with homebrew:
+
+```
+brew install cmake freetype gettext gmp hiredis jpeg jsoncpp leveldb libogg libpng libvorbis luajit zstd
+```
+
+#### Download
+
+Download source (this is the URL to the latest of source repository, which might not work at all times) using Git:
+
+```bash
+git clone --depth 1 https://github.com/minetest/minetest.git
+cd minetest
+```
+
+Download minetest_game (otherwise only the "Development Test" game is available) using Git:
+
+```
+git clone --depth 1 https://github.com/minetest/minetest_game.git games/minetest_game
+```
+
+Download Minetest's fork of Irrlicht:
+
+```
+git clone --depth 1 https://github.com/minetest/irrlicht.git lib/irrlichtmt
+```
+
+#### Build
+
+```bash
+mkdir cmakebuild
+cd cmakebuild
+
+cmake .. \
+ -DCMAKE_OSX_DEPLOYMENT_TARGET=10.14 \
+ -DCMAKE_FIND_FRAMEWORK=LAST \
+ -DCMAKE_INSTALL_PREFIX=../build/macos/ \
+ -DRUN_IN_PLACE=FALSE -DENABLE_GETTEXT=TRUE
+
+make -j$(nproc)
+make install
+```
+
+#### Run
+
+```
+open ./build/macos/minetest.app
+```
Docker
------
diff --git a/android/app/build.gradle b/android/app/build.gradle
index b7d93ef0f..e8ba95722 100644
--- a/android/app/build.gradle
+++ b/android/app/build.gradle
@@ -1,12 +1,12 @@
apply plugin: 'com.android.application'
android {
- compileSdkVersion 29
+ compileSdkVersion 30
buildToolsVersion '30.0.3'
- ndkVersion '22.0.7026061'
+ ndkVersion "$ndk_version"
defaultConfig {
applicationId 'net.minetest.minetest'
minSdkVersion 16
- targetSdkVersion 29
+ targetSdkVersion 30
versionName "${versionMajor}.${versionMinor}.${versionPatch}"
versionCode project.versionCode
}
@@ -68,7 +68,7 @@ task prepareAssets() {
from "${projRoot}/client/shaders" into "${assetsFolder}/client/shaders"
}
copy {
- from "../native/deps/Android/Irrlicht/shaders" into "${assetsFolder}/client/shaders/Irrlicht"
+ from "../native/deps/armeabi-v7a/Irrlicht/Shaders" into "${assetsFolder}/client/shaders/Irrlicht"
}
copy {
from "${projRoot}/fonts" include "*.ttf" into "${assetsFolder}/fonts"
@@ -76,10 +76,13 @@ task prepareAssets() {
copy {
from "${projRoot}/games/${gameToCopy}" into "${assetsFolder}/games/${gameToCopy}"
}
- /*copy {
- // ToDo: fix broken locales
- from "${projRoot}/po" into "${assetsFolder}/po"
- }*/
+ fileTree("${projRoot}/po").include("**/*.po").forEach { poFile ->
+ def moPath = "${assetsFolder}/locale/${poFile.parentFile.name}/LC_MESSAGES/"
+ file(moPath).mkdirs()
+ exec {
+ commandLine 'msgfmt', '-o', "${moPath}/minetest.mo", poFile
+ }
+ }
copy {
from "${projRoot}/textures" into "${assetsFolder}/textures"
}
@@ -109,5 +112,5 @@ android.applicationVariants.all { variant ->
dependencies {
implementation project(':native')
- implementation 'androidx.appcompat:appcompat:1.2.0'
+ implementation 'androidx.appcompat:appcompat:1.3.1'
}
diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml
index 314a38b5c..6ea677cb9 100644
--- a/android/app/src/main/AndroidManifest.xml
+++ b/android/app/src/main/AndroidManifest.xml
@@ -19,8 +19,6 @@
android:label="@string/label"
android:requestLegacyExternalStorage="true"
android:resizeableActivity="false"
- android:hasFragileUserData="true"
- android:isGame="true"
tools:ignore="UnusedAttribute">
<meta-data
@@ -32,7 +30,8 @@
android:configChanges="orientation|keyboardHidden|navigation|screenSize"
android:maxAspectRatio="3.0"
android:screenOrientation="sensorLandscape"
- android:theme="@style/AppTheme">
+ android:theme="@style/AppTheme"
+ android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
@@ -46,7 +45,8 @@
android:launchMode="singleTask"
android:maxAspectRatio="3.0"
android:screenOrientation="sensorLandscape"
- android:theme="@style/AppTheme">
+ android:theme="@style/AppTheme"
+ android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
</intent-filter>
diff --git a/android/app/src/main/java/net/minetest/minetest/GameActivity.java b/android/app/src/main/java/net/minetest/minetest/GameActivity.java
index dc2e564be..46fc9b1de 100644
--- a/android/app/src/main/java/net/minetest/minetest/GameActivity.java
+++ b/android/app/src/main/java/net/minetest/minetest/GameActivity.java
@@ -30,7 +30,9 @@ import android.view.KeyEvent;
import android.view.View;
import android.view.WindowManager;
import android.view.inputmethod.InputMethodManager;
+import android.widget.Button;
import android.widget.EditText;
+import android.widget.LinearLayout;
import androidx.appcompat.app.AlertDialog;
@@ -85,9 +87,19 @@ public class GameActivity extends NativeActivity {
private void showDialogUI(String hint, String current, int editType) {
final AlertDialog.Builder builder = new AlertDialog.Builder(this);
- EditText editText = new CustomEditText(this);
- builder.setView(editText);
+ LinearLayout container = new LinearLayout(this);
+ container.setOrientation(LinearLayout.VERTICAL);
+ builder.setView(container);
AlertDialog alertDialog = builder.create();
+ EditText editText;
+ // For multi-line, do not close the dialog after pressing back button
+ if (editType == 1) {
+ editText = new EditText(this);
+ } else {
+ editText = new CustomEditText(this);
+ }
+ container.addView(editText);
+ editText.setMaxLines(8);
editText.requestFocus();
editText.setHint(hint);
editText.setText(current);
@@ -103,8 +115,9 @@ public class GameActivity extends NativeActivity {
else
editText.setInputType(InputType.TYPE_CLASS_TEXT);
editText.setSelection(editText.getText().length());
- editText.setOnKeyListener((view, KeyCode, event) -> {
- if (KeyCode == KeyEvent.KEYCODE_ENTER) {
+ editText.setOnKeyListener((view, keyCode, event) -> {
+ // For multi-line, do not submit the text after pressing Enter key
+ if (keyCode == KeyEvent.KEYCODE_ENTER && editType != 1) {
imm.hideSoftInputFromWindow(editText.getWindowToken(), 0);
messageReturnCode = 0;
messageReturnValue = editText.getText().toString();
@@ -113,6 +126,18 @@ public class GameActivity extends NativeActivity {
}
return false;
});
+ // For multi-line, add Done button since Enter key does not submit text
+ if (editType == 1) {
+ Button doneButton = new Button(this);
+ container.addView(doneButton);
+ doneButton.setText(R.string.ime_dialog_done);
+ doneButton.setOnClickListener((view -> {
+ imm.hideSoftInputFromWindow(editText.getWindowToken(), 0);
+ messageReturnCode = 0;
+ messageReturnValue = editText.getText().toString();
+ alertDialog.dismiss();
+ }));
+ }
alertDialog.show();
alertDialog.setOnCancelListener(dialog -> {
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
diff --git a/android/app/src/main/java/net/minetest/minetest/MainActivity.java b/android/app/src/main/java/net/minetest/minetest/MainActivity.java
index 56615fca7..b6567b4b7 100644
--- a/android/app/src/main/java/net/minetest/minetest/MainActivity.java
+++ b/android/app/src/main/java/net/minetest/minetest/MainActivity.java
@@ -101,7 +101,8 @@ public class MainActivity extends AppCompatActivity {
mTextView = findViewById(R.id.textView);
sharedPreferences = getSharedPreferences(SETTINGS, Context.MODE_PRIVATE);
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M)
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M &&
+ Build.VERSION.SDK_INT < Build.VERSION_CODES.R)
checkPermission();
else
checkAppVersion();
diff --git a/android/app/src/main/java/net/minetest/minetest/UnzipService.java b/android/app/src/main/java/net/minetest/minetest/UnzipService.java
index b513a7fe0..a61a49139 100644
--- a/android/app/src/main/java/net/minetest/minetest/UnzipService.java
+++ b/android/app/src/main/java/net/minetest/minetest/UnzipService.java
@@ -32,6 +32,7 @@ import android.os.Environment;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
+import androidx.annotation.RequiresApi;
import androidx.annotation.StringRes;
import java.io.File;
@@ -200,6 +201,10 @@ public class UnzipService extends IntentService {
* Migrates user data from deprecated external storage to app scoped storage
*/
private void migrate(Notification.Builder notificationBuilder, File newLocation) throws IOException {
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
+ return;
+ }
+
File oldLocation = new File(Environment.getExternalStorageDirectory(), "Minetest");
if (!oldLocation.isDirectory())
return;
diff --git a/android/build.gradle b/android/build.gradle
index b3118af21..71e995e48 100644
--- a/android/build.gradle
+++ b/android/build.gradle
@@ -1,21 +1,22 @@
// Top-level build file where you can add configuration options common to all sub-projects/modules.
project.ext.set("versionMajor", 5) // Version Major
-project.ext.set("versionMinor", 4) // Version Minor
-project.ext.set("versionPatch", 2) // Version Patch
+project.ext.set("versionMinor", 5) // Version Minor
+project.ext.set("versionPatch", 0) // Version Patch
project.ext.set("versionExtra", "") // Version Extra
-project.ext.set("versionCode", 36) // Android Version Code
+project.ext.set("versionCode", 38) // Android Version Code
// NOTE: +2 after each release!
// +1 for ARM and +1 for ARM64 APK's, because
// each APK must have a larger `versionCode` than the previous
buildscript {
+ ext.ndk_version = '23.0.7599858'
repositories {
google()
jcenter()
}
dependencies {
- classpath 'com.android.tools.build:gradle:4.1.1'
+ classpath 'com.android.tools.build:gradle:7.0.3'
classpath 'de.undercouch:gradle-download-task:4.1.1'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
diff --git a/android/gradle/wrapper/gradle-wrapper.properties b/android/gradle/wrapper/gradle-wrapper.properties
index 7fd9307d7..8ad73a75c 100644
--- a/android/gradle/wrapper/gradle-wrapper.properties
+++ b/android/gradle/wrapper/gradle-wrapper.properties
@@ -1,6 +1,5 @@
-#Fri Jan 08 17:52:00 UTC 2020
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-6.8-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-7.2-bin.zip
diff --git a/android/gradlew b/android/gradlew
index 83f2acfdc..25e0c1148 100755
--- a/android/gradlew
+++ b/android/gradlew
@@ -98,7 +98,7 @@ location of your Java installation."
fi
else
JAVACMD="java"
- which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+ command -v java >/dev/null || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
diff --git a/android/icons/aux_btn.svg b/android/icons/aux_btn.svg
deleted file mode 100644
index 6bbefff67..000000000
--- a/android/icons/aux_btn.svg
+++ /dev/null
@@ -1,411 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:cc="http://creativecommons.org/ns#"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns="http://www.w3.org/2000/svg"
- xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
- xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
- width="512"
- height="512"
- viewBox="0 0 135.46666 135.46667"
- version="1.1"
- id="svg8"
- inkscape:version="0.92.1 r15371"
- sodipodi:docname="aux_btn.svg"
- inkscape:export-filename="/home/stu/Desktop/icons/png/aux_btn.png"
- inkscape:export-xdpi="24.000002"
- inkscape:export-ydpi="24.000002">
- <defs
- id="defs2">
- <filter
- style="color-interpolation-filters:sRGB;"
- inkscape:label="Colorize"
- id="filter4628">
- <feComposite
- in2="SourceGraphic"
- operator="arithmetic"
- k1="0"
- k2="1"
- result="composite1"
- id="feComposite4614" />
- <feColorMatrix
- in="composite1"
- values="1"
- type="saturate"
- result="colormatrix1"
- id="feColorMatrix4616" />
- <feFlood
- flood-opacity="1"
- flood-color="rgb(158,0,0)"
- result="flood1"
- id="feFlood4618" />
- <feBlend
- in="flood1"
- in2="colormatrix1"
- mode="multiply"
- result="blend1"
- id="feBlend4620" />
- <feBlend
- in2="blend1"
- mode="screen"
- result="blend2"
- id="feBlend4622" />
- <feColorMatrix
- in="blend2"
- values="1"
- type="saturate"
- result="colormatrix2"
- id="feColorMatrix4624" />
- <feComposite
- in="colormatrix2"
- in2="SourceGraphic"
- operator="in"
- k2="1"
- result="composite2"
- id="feComposite4626" />
- </filter>
- <filter
- style="color-interpolation-filters:sRGB;"
- inkscape:label="Sharpen More"
- id="filter5109"
- inkscape:menu="Image Effects"
- inkscape:menu-tooltip="Sharpen edges and boundaries within the object, force=0.3">
- <feComposite
- in2="SourceGraphic"
- operator="arithmetic"
- k1="0"
- k2="1"
- result="composite1"
- id="feComposite5095" />
- <feColorMatrix
- in="composite1"
- values="1"
- type="saturate"
- result="colormatrix1"
- id="feColorMatrix5097" />
- <feFlood
- flood-opacity="1"
- flood-color="rgb(158,67,0)"
- result="flood1"
- id="feFlood5099" />
- <feBlend
- in="flood1"
- in2="colormatrix1"
- mode="multiply"
- result="blend1"
- id="feBlend5101" />
- <feBlend
- in2="blend1"
- mode="screen"
- result="blend2"
- id="feBlend5103" />
- <feColorMatrix
- in="blend2"
- values="1"
- type="saturate"
- result="colormatrix2"
- id="feColorMatrix5105" />
- <feComposite
- in="colormatrix2"
- in2="SourceGraphic"
- operator="in"
- k2="1"
- result="fbSourceGraphic"
- id="feComposite5107" />
- <feColorMatrix
- result="fbSourceGraphicAlpha"
- in="fbSourceGraphic"
- values="0 0 0 -1 0 0 0 0 -1 0 0 0 0 -1 0 0 0 0 1 0"
- id="feColorMatrix5111" />
- <feComposite
- in2="fbSourceGraphic"
- id="feComposite5113"
- operator="arithmetic"
- k1="0"
- k2="1"
- result="composite1"
- in="fbSourceGraphic" />
- <feColorMatrix
- id="feColorMatrix5115"
- in="composite1"
- values="1"
- type="saturate"
- result="colormatrix1" />
- <feFlood
- id="feFlood5117"
- flood-opacity="1"
- flood-color="rgb(158,0,0)"
- result="flood1" />
- <feBlend
- in2="colormatrix1"
- id="feBlend5119"
- in="flood1"
- mode="multiply"
- result="blend1" />
- <feBlend
- in2="blend1"
- id="feBlend5121"
- mode="screen"
- result="blend2" />
- <feColorMatrix
- id="feColorMatrix5123"
- in="blend2"
- values="1"
- type="saturate"
- result="colormatrix2" />
- <feComposite
- in2="fbSourceGraphic"
- id="feComposite5125"
- in="colormatrix2"
- operator="in"
- k2="1"
- result="fbSourceGraphic" />
- <feColorMatrix
- result="fbSourceGraphicAlpha"
- in="fbSourceGraphic"
- values="0 0 0 -1 0 0 0 0 -1 0 0 0 0 -1 0 0 0 0 1 0"
- id="feColorMatrix7007" />
- <feConvolveMatrix
- id="feConvolveMatrix7009"
- order="3 3"
- kernelMatrix="0 -0.15 0 -0.15 1.6 -0.15 0 -0.15 0"
- divisor="1"
- in="fbSourceGraphic"
- targetX="1"
- targetY="1"
- result="fbSourceGraphic" />
- <feColorMatrix
- result="fbSourceGraphicAlpha"
- in="fbSourceGraphic"
- values="0 0 0 -1 0 0 0 0 -1 0 0 0 0 -1 0 0 0 0 1 0"
- id="feColorMatrix7011" />
- <feConvolveMatrix
- id="feConvolveMatrix7013"
- targetY="1"
- targetX="1"
- in="fbSourceGraphic"
- divisor="1"
- kernelMatrix="0 -0.3 0 -0.3 2.2 -0.3 0 -0.3 0"
- order="3 3"
- result="result1" />
- <feBlend
- in2="fbSourceGraphic"
- id="feBlend7015"
- mode="normal"
- result="result2" />
- </filter>
- <marker
- style="overflow:visible"
- refY="0.0"
- refX="0.0"
- orient="auto"
- id="DistanceX">
- <path
- id="path7410"
- style="stroke:#000000; stroke-width:0.5"
- d="M 3,-3 L -3,3 M 0,-5 L 0,5" />
- </marker>
- <pattern
- y="0"
- x="0"
- width="8"
- patternUnits="userSpaceOnUse"
- id="Hatch"
- height="8">
- <path
- id="path7413"
- stroke-width="0.25"
- stroke="#000000"
- linecap="square"
- d="M8 4 l-4,4" />
- <path
- id="path7415"
- stroke-width="0.25"
- stroke="#000000"
- linecap="square"
- d="M6 2 l-4,4" />
- <path
- id="path7417"
- stroke-width="0.25"
- stroke="#000000"
- linecap="square"
- d="M4 0 l-4,4" />
- </pattern>
- <symbol
- id="*Model_Space" />
- <symbol
- id="*Paper_Space" />
- <symbol
- id="*Paper_Space0" />
- <filter
- style="color-interpolation-filters:sRGB;"
- inkscape:label="Colorize"
- id="filter4883">
- <feComposite
- in2="SourceGraphic"
- operator="arithmetic"
- k1="0"
- k2="1"
- result="composite1"
- id="feComposite4869" />
- <feColorMatrix
- in="composite1"
- values="1"
- type="saturate"
- result="colormatrix1"
- id="feColorMatrix4871" />
- <feFlood
- flood-opacity="1"
- flood-color="rgb(158,21,0)"
- result="flood1"
- id="feFlood4873" />
- <feBlend
- in="flood1"
- in2="colormatrix1"
- mode="multiply"
- result="blend1"
- id="feBlend4875" />
- <feBlend
- in2="blend1"
- mode="screen"
- result="blend2"
- id="feBlend4877" />
- <feColorMatrix
- in="blend2"
- values="1"
- type="saturate"
- result="colormatrix2"
- id="feColorMatrix4879" />
- <feComposite
- in="colormatrix2"
- in2="SourceGraphic"
- operator="in"
- k2="1"
- result="composite2"
- id="feComposite4881" />
- </filter>
- </defs>
- <sodipodi:namedview
- id="base"
- pagecolor="#404040"
- bordercolor="#666666"
- borderopacity="1.0"
- inkscape:pageopacity="0"
- inkscape:pageshadow="2"
- inkscape:zoom="0.98994949"
- inkscape:cx="-341.34157"
- inkscape:cy="210.02973"
- inkscape:document-units="mm"
- inkscape:current-layer="layer2"
- showgrid="true"
- units="px"
- inkscape:window-width="1920"
- inkscape:window-height="1023"
- inkscape:window-x="0"
- inkscape:window-y="34"
- inkscape:window-maximized="1"
- inkscape:pagecheckerboard="false"
- inkscape:snap-grids="false"
- inkscape:snap-page="true"
- showguides="true"
- inkscape:snap-bbox="true"
- inkscape:snap-to-guides="true"
- inkscape:snap-object-midpoints="false"
- inkscape:snap-others="true"
- inkscape:snap-bbox-midpoints="true">
- <inkscape:grid
- type="xygrid"
- id="grid16"
- spacingx="0.26458333"
- spacingy="0.26458333"
- empspacing="4"
- color="#40ff40"
- opacity="0.1254902"
- empcolor="#40ff40"
- empopacity="0.25098039" />
- </sodipodi:namedview>
- <metadata
- id="metadata5">
- <rdf:RDF>
- <cc:Work
- rdf:about="">
- <dc:format>image/svg+xml</dc:format>
- <dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- <dc:title></dc:title>
- <cc:license
- rdf:resource="http://creativecommons.org/licenses/by-sa/4.0/" />
- </cc:Work>
- <cc:License
- rdf:about="http://creativecommons.org/licenses/by-sa/4.0/">
- <cc:permits
- rdf:resource="http://creativecommons.org/ns#Reproduction" />
- <cc:permits
- rdf:resource="http://creativecommons.org/ns#Distribution" />
- <cc:requires
- rdf:resource="http://creativecommons.org/ns#Notice" />
- <cc:requires
- rdf:resource="http://creativecommons.org/ns#Attribution" />
- <cc:permits
- rdf:resource="http://creativecommons.org/ns#DerivativeWorks" />
- <cc:requires
- rdf:resource="http://creativecommons.org/ns#ShareAlike" />
- </cc:License>
- </rdf:RDF>
- </metadata>
- <g
- inkscape:groupmode="layer"
- id="layer2"
- inkscape:label="Layer 2"
- style="display:inline">
- <path
- style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- d=""
- id="path7055"
- inkscape:connector-curvature="0" />
- <path
- style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- d=""
- id="path7035"
- inkscape:connector-curvature="0" />
- <path
- style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- d=""
- id="path7005"
- inkscape:connector-curvature="0" />
- <path
- style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- d=""
- id="path5127"
- inkscape:connector-curvature="0" />
- <text
- xml:space="preserve"
- style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:48.47851181px;line-height:1.25;font-family:'Bitstream Vera Sans';-inkscape-font-specification:'Bitstream Vera Sans';text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#d9d9d9;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- x="67.78315"
- y="85.59491"
- id="text4716"
- transform="scale(1.0078883,0.99217343)"><tspan
- sodipodi:role="line"
- id="tspan4714"
- x="67.78315"
- y="85.59491"
- style="fill:#d9d9d9;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1">AUX</tspan></text>
- <flowRoot
- xml:space="preserve"
- id="flowRoot4718"
- style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:40px;line-height:1.25;font-family:'Bitstream Vera Sans';-inkscape-font-specification:'Bitstream Vera Sans';text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:none;fill-opacity:1;stroke:#ffffff;stroke-opacity:1"
- transform="scale(0.26458333)"><flowRegion
- id="flowRegion4720"
- style="fill:none;fill-opacity:1;stroke:#ffffff;stroke-opacity:1"><rect
- id="rect4722"
- width="157.5838"
- height="136.37059"
- x="264.65997"
- y="124.10143"
- style="fill:none;fill-opacity:1;stroke:#ffffff;stroke-opacity:1" /></flowRegion><flowPara
- id="flowPara4724" /></flowRoot> </g>
-</svg>
diff --git a/android/native/build.gradle b/android/native/build.gradle
index d58a2dcc5..2ddc77135 100644
--- a/android/native/build.gradle
+++ b/android/native/build.gradle
@@ -2,12 +2,12 @@ apply plugin: 'com.android.library'
apply plugin: 'de.undercouch.download'
android {
- compileSdkVersion 29
+ compileSdkVersion 30
buildToolsVersion '30.0.3'
- ndkVersion '22.0.7026061'
+ ndkVersion "$ndk_version"
defaultConfig {
minSdkVersion 16
- targetSdkVersion 29
+ targetSdkVersion 30
externalNativeBuild {
ndkBuild {
arguments '-j' + Runtime.getRuntime().availableProcessors(),
@@ -50,54 +50,19 @@ android {
}
// get precompiled deps
-def folder = 'minetest_android_deps_binaries'
-def deps_ref = "342eb18b7512462585a33bc9eef0b68298087151"
-
task downloadDeps(type: Download) {
- src 'https://github.com/minetest/' + folder + '/archive/' + deps_ref + '.zip'
+ src 'https://github.com/minetest/minetest_android_deps/releases/download/latest/deps.zip'
dest new File(buildDir, 'deps.zip')
overwrite false
}
task getDeps(dependsOn: downloadDeps, type: Copy) {
- def deps = file('deps')
- def f = file("$buildDir/" + folder + "-" + deps_ref)
-
- if (!deps.exists() && !f.exists()) {
+ def deps = new File(buildDir.parent, 'deps')
+ if (!deps.exists()) {
+ deps.mkdir()
from zipTree(downloadDeps.dest)
- into buildDir
- }
-
- doLast {
- if (!deps.exists()) {
- file(f).renameTo(file(deps))
- }
- }
-}
-
-// get sqlite
-def sqlite_ver = '3340000'
-task downloadSqlite(dependsOn: getDeps, type: Download) {
- src 'https://www.sqlite.org/2020/sqlite-amalgamation-' + sqlite_ver + '.zip'
- dest new File(buildDir, 'sqlite.zip')
- overwrite false
-}
-
-task getSqlite(dependsOn: downloadSqlite, type: Copy) {
- def sqlite = file('deps/Android/sqlite')
- def f = file("$buildDir/sqlite-amalgamation-" + sqlite_ver)
-
- if (!sqlite.exists() && !f.exists()) {
- from zipTree(downloadSqlite.dest)
- into buildDir
- }
-
- doLast {
- if (!sqlite.exists()) {
- file(f).renameTo(file(sqlite))
- }
+ into deps
}
}
preBuild.dependsOn getDeps
-preBuild.dependsOn getSqlite
diff --git a/android/native/jni/Android.mk b/android/native/jni/Android.mk
index 73df04945..f8ca74d3c 100644
--- a/android/native/jni/Android.mk
+++ b/android/native/jni/Android.mk
@@ -4,64 +4,82 @@ LOCAL_PATH := $(call my-dir)/..
include $(CLEAR_VARS)
LOCAL_MODULE := Curl
-LOCAL_SRC_FILES := deps/Android/Curl/${NDK_TOOLCHAIN_VERSION}/$(APP_ABI)/libcurl.a
+LOCAL_SRC_FILES := deps/$(APP_ABI)/Curl/libcurl.a
include $(PREBUILT_STATIC_LIBRARY)
include $(CLEAR_VARS)
-LOCAL_MODULE := Freetype
-LOCAL_SRC_FILES := deps/Android/Freetype/${NDK_TOOLCHAIN_VERSION}/$(APP_ABI)/libfreetype.a
+LOCAL_MODULE := libmbedcrypto
+LOCAL_SRC_FILES := deps/$(APP_ABI)/Curl/libmbedcrypto.a
include $(PREBUILT_STATIC_LIBRARY)
include $(CLEAR_VARS)
-LOCAL_MODULE := Irrlicht
-LOCAL_SRC_FILES := deps/Android/Irrlicht/${NDK_TOOLCHAIN_VERSION}/$(APP_ABI)/libIrrlicht.a
+LOCAL_MODULE := libmbedtls
+LOCAL_SRC_FILES := deps/$(APP_ABI)/Curl/libmbedtls.a
include $(PREBUILT_STATIC_LIBRARY)
-#include $(CLEAR_VARS)
-#LOCAL_MODULE := LevelDB
-#LOCAL_SRC_FILES := deps/Android/LevelDB/${NDK_TOOLCHAIN_VERSION}/$(APP_ABI)/libleveldb.a
-#include $(PREBUILT_STATIC_LIBRARY)
+include $(CLEAR_VARS)
+LOCAL_MODULE := libmbedx509
+LOCAL_SRC_FILES := deps/$(APP_ABI)/Curl/libmbedx509.a
+include $(PREBUILT_STATIC_LIBRARY)
include $(CLEAR_VARS)
-LOCAL_MODULE := LuaJIT
-LOCAL_SRC_FILES := deps/Android/LuaJIT/${NDK_TOOLCHAIN_VERSION}/$(APP_ABI)/libluajit.a
+LOCAL_MODULE := Freetype
+LOCAL_SRC_FILES := deps/$(APP_ABI)/Freetype/libfreetype.a
+include $(PREBUILT_STATIC_LIBRARY)
+
+include $(CLEAR_VARS)
+LOCAL_MODULE := Iconv
+LOCAL_SRC_FILES := deps/$(APP_ABI)/Iconv/libiconv.a
include $(PREBUILT_STATIC_LIBRARY)
include $(CLEAR_VARS)
-LOCAL_MODULE := mbedTLS
-LOCAL_SRC_FILES := deps/Android/mbedTLS/${NDK_TOOLCHAIN_VERSION}/$(APP_ABI)/libmbedtls.a
+LOCAL_MODULE := libcharset
+LOCAL_SRC_FILES := deps/$(APP_ABI)/Iconv/libcharset.a
include $(PREBUILT_STATIC_LIBRARY)
include $(CLEAR_VARS)
-LOCAL_MODULE := mbedx509
-LOCAL_SRC_FILES := deps/Android/mbedTLS/${NDK_TOOLCHAIN_VERSION}/$(APP_ABI)/libmbedx509.a
+LOCAL_MODULE := Irrlicht
+LOCAL_SRC_FILES := deps/$(APP_ABI)/Irrlicht/libIrrlichtMt.a
include $(PREBUILT_STATIC_LIBRARY)
include $(CLEAR_VARS)
-LOCAL_MODULE := mbedcrypto
-LOCAL_SRC_FILES := deps/Android/mbedTLS/${NDK_TOOLCHAIN_VERSION}/$(APP_ABI)/libmbedcrypto.a
+LOCAL_MODULE := LuaJIT
+LOCAL_SRC_FILES := deps/$(APP_ABI)/LuaJIT/libluajit.a
include $(PREBUILT_STATIC_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := OpenAL
-LOCAL_SRC_FILES := deps/Android/OpenAL-Soft/${NDK_TOOLCHAIN_VERSION}/$(APP_ABI)/libopenal.a
+LOCAL_SRC_FILES := deps/$(APP_ABI)/OpenAL-Soft/libopenal.a
include $(PREBUILT_STATIC_LIBRARY)
-# You can use `OpenSSL and Crypto` instead `mbedTLS mbedx509 mbedcrypto`,
-#but it increase APK size on ~0.7MB
-#include $(CLEAR_VARS)
-#LOCAL_MODULE := OpenSSL
-#LOCAL_SRC_FILES := deps/Android/OpenSSL/${NDK_TOOLCHAIN_VERSION}/$(APP_ABI)/libssl.a
-#include $(PREBUILT_STATIC_LIBRARY)
+include $(CLEAR_VARS)
+LOCAL_MODULE := Gettext
+LOCAL_SRC_FILES := deps/$(APP_ABI)/Gettext/libintl.a
+include $(PREBUILT_STATIC_LIBRARY)
-#include $(CLEAR_VARS)
-#LOCAL_MODULE := Crypto
-#LOCAL_SRC_FILES := deps/Android/OpenSSL/${NDK_TOOLCHAIN_VERSION}/$(APP_ABI)/libcrypto.a
-#include $(PREBUILT_STATIC_LIBRARY)
+include $(CLEAR_VARS)
+LOCAL_MODULE := SQLite3
+LOCAL_SRC_FILES := deps/$(APP_ABI)/SQLite/libsqlite3.a
+include $(PREBUILT_STATIC_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := Vorbis
-LOCAL_SRC_FILES := deps/Android/Vorbis/${NDK_TOOLCHAIN_VERSION}/$(APP_ABI)/libvorbis.a
+LOCAL_SRC_FILES := deps/$(APP_ABI)/Vorbis/libvorbis.a
+include $(PREBUILT_STATIC_LIBRARY)
+
+include $(CLEAR_VARS)
+LOCAL_MODULE := libvorbisfile
+LOCAL_SRC_FILES := deps/$(APP_ABI)/Vorbis/libvorbisfile.a
+include $(PREBUILT_STATIC_LIBRARY)
+
+include $(CLEAR_VARS)
+LOCAL_MODULE := libogg
+LOCAL_SRC_FILES := deps/$(APP_ABI)/Vorbis/libogg.a
+include $(PREBUILT_STATIC_LIBRARY)
+
+include $(CLEAR_VARS)
+LOCAL_MODULE := Zstd
+LOCAL_SRC_FILES := deps/$(APP_ABI)/Zstd/libzstd.a
include $(PREBUILT_STATIC_LIBRARY)
include $(CLEAR_VARS)
@@ -73,9 +91,9 @@ LOCAL_CFLAGS += \
-DENABLE_GLES=1 \
-DUSE_CURL=1 \
-DUSE_SOUND=1 \
- -DUSE_FREETYPE=1 \
-DUSE_LEVELDB=0 \
-DUSE_LUAJIT=1 \
+ -DUSE_GETTEXT=1 \
-DVERSION_MAJOR=${versionMajor} \
-DVERSION_MINOR=${versionMinor} \
-DVERSION_PATCH=${versionPatch} \
@@ -97,16 +115,16 @@ LOCAL_C_INCLUDES := \
../../src/script \
../../lib/gmp \
../../lib/jsoncpp \
- deps/Android/Curl/include \
- deps/Android/Freetype/include \
- deps/Android/Irrlicht/include \
- deps/Android/LevelDB/include \
- deps/Android/libiconv/include \
- deps/Android/libiconv/libcharset/include \
- deps/Android/LuaJIT/src \
- deps/Android/OpenAL-Soft/include \
- deps/Android/sqlite \
- deps/Android/Vorbis/include
+ deps/$(APP_ABI)/Curl/include \
+ deps/$(APP_ABI)/Freetype/include/freetype2 \
+ deps/$(APP_ABI)/Irrlicht/include \
+ deps/$(APP_ABI)/Gettext/include \
+ deps/$(APP_ABI)/Iconv/include \
+ deps/$(APP_ABI)/LuaJIT/include \
+ deps/$(APP_ABI)/OpenAL-Soft/include \
+ deps/$(APP_ABI)/SQLite/include \
+ deps/$(APP_ABI)/Vorbis/include \
+ deps/$(APP_ABI)/Zstd/include
LOCAL_SRC_FILES := \
$(wildcard ../../src/client/*.cpp) \
@@ -189,25 +207,24 @@ LOCAL_SRC_FILES := \
../../src/voxel.cpp \
../../src/voxelalgorithms.cpp
-# LevelDB backend is disabled
-# ../../src/database/database-leveldb.cpp
-
# GMP
LOCAL_SRC_FILES += ../../lib/gmp/mini-gmp.c
# JSONCPP
LOCAL_SRC_FILES += ../../lib/jsoncpp/jsoncpp.cpp
-# iconv
-LOCAL_SRC_FILES += \
- deps/Android/libiconv/lib/iconv.c \
- deps/Android/libiconv/libcharset/lib/localcharset.c
-
-# SQLite3
-LOCAL_SRC_FILES += deps/Android/sqlite/sqlite3.c
-
-LOCAL_STATIC_LIBRARIES += Curl Freetype Irrlicht OpenAL mbedTLS mbedx509 mbedcrypto Vorbis LuaJIT android_native_app_glue $(PROFILER_LIBS) #LevelDB
-#OpenSSL Crypto
+LOCAL_STATIC_LIBRARIES += \
+ Curl libmbedcrypto libmbedtls libmbedx509 \
+ Freetype \
+ Iconv libcharset \
+ Irrlicht \
+ LuaJIT \
+ OpenAL \
+ Gettext \
+ SQLite3 \
+ Vorbis libvorbisfile libogg \
+ Zstd
+LOCAL_STATIC_LIBRARIES += android_native_app_glue $(PROFILER_LIBS)
LOCAL_LDLIBS := -lEGL -lGLESv1_CM -lGLESv2 -landroid -lOpenSLES
diff --git a/android/native/jni/Application.mk b/android/native/jni/Application.mk
index 82f0148f0..e21bca61c 100644
--- a/android/native/jni/Application.mk
+++ b/android/native/jni/Application.mk
@@ -5,22 +5,22 @@ NDK_TOOLCHAIN_VERSION := clang
APP_SHORT_COMMANDS := true
APP_MODULES := Minetest
-APP_CPPFLAGS := -Ofast -fvisibility=hidden -fexceptions -Wno-deprecated-declarations -Wno-extra-tokens
+APP_CPPFLAGS := -O2 -fvisibility=hidden
ifeq ($(APP_ABI),armeabi-v7a)
-APP_CPPFLAGS += -march=armv7-a -mfloat-abi=softfp -mfpu=vfpv3-d16 -mthumb
+APP_CPPFLAGS += -mfloat-abi=softfp -mfpu=vfpv3-d16 -mthumb
endif
-#ifeq ($(APP_ABI),x86)
-#APP_CPPFLAGS += -march=i686 -mtune=intel -mssse3 -mfpmath=sse -m32 -funroll-loops
-#endif
+ifeq ($(APP_ABI),x86)
+APP_CPPFLAGS += -mssse3 -mfpmath=sse -funroll-loops
+endif
ifndef NDEBUG
-APP_CPPFLAGS := -g -D_DEBUG -O0 -fno-omit-frame-pointer -fexceptions
+APP_CPPFLAGS := -g -Og -fno-omit-frame-pointer
endif
-APP_CFLAGS := $(APP_CPPFLAGS) -Wno-parentheses-equality #-Werror=shorten-64-to-32
-APP_CXXFLAGS := $(APP_CPPFLAGS) -frtti -std=gnu++17
+APP_CFLAGS := $(APP_CPPFLAGS) -Wno-inconsistent-missing-override -Wno-parentheses-equality
+APP_CXXFLAGS := $(APP_CPPFLAGS) -fexceptions -frtti -std=gnu++17
APP_LDFLAGS := -Wl,--no-warn-mismatch,--gc-sections,--icf=safe
ifeq ($(APP_ABI),arm64-v8a)
diff --git a/builtin/async/init.lua b/builtin/async/init.lua
index 1b2549685..3803994d6 100644
--- a/builtin/async/init.lua
+++ b/builtin/async/init.lua
@@ -1,16 +1,10 @@
core.log("info", "Initializing Asynchronous environment")
-function core.job_processor(serialized_func, serialized_param)
- local func = loadstring(serialized_func)
+function core.job_processor(func, serialized_param)
local param = core.deserialize(serialized_param)
- local retval = nil
- if type(func) == "function" then
- retval = core.serialize(func(param))
- else
- core.log("error", "ASYNC WORKER: Unable to deserialize function")
- end
+ local retval = core.serialize(func(param))
return retval or core.serialize(nil)
end
diff --git a/builtin/client/chatcommands.lua b/builtin/client/chatcommands.lua
index 0e8d4dd03..a563a6627 100644
--- a/builtin/client/chatcommands.lua
+++ b/builtin/client/chatcommands.lua
@@ -1,6 +1,5 @@
-- Minetest: builtin/client/chatcommands.lua
-
core.register_on_sending_chat_message(function(message)
if message:sub(1,2) == ".." then
return false
@@ -8,7 +7,7 @@ core.register_on_sending_chat_message(function(message)
local first_char = message:sub(1,1)
if first_char == "/" or first_char == "." then
- core.display_chat_message(core.gettext("issued command: ") .. message)
+ core.display_chat_message(core.gettext("Issued command: ") .. message)
end
if first_char ~= "." then
@@ -19,7 +18,7 @@ core.register_on_sending_chat_message(function(message)
param = param or ""
if not cmd then
- core.display_chat_message(core.gettext("-!- Empty command"))
+ core.display_chat_message("-!- " .. core.gettext("Empty command."))
return true
end
@@ -36,7 +35,7 @@ core.register_on_sending_chat_message(function(message)
core.display_chat_message(result)
end
else
- core.display_chat_message(core.gettext("-!- Invalid command: ") .. cmd)
+ core.display_chat_message("-!- " .. core.gettext("Invalid command: ") .. cmd)
end
return true
@@ -66,7 +65,7 @@ core.register_chatcommand("clear_chat_queue", {
description = core.gettext("Clear the out chat queue"),
func = function(param)
core.clear_out_chat_queue()
- return true, core.gettext("The out chat queue is now empty")
+ return true, core.gettext("The out chat queue is now empty.")
end,
})
diff --git a/builtin/client/death_formspec.lua b/builtin/client/death_formspec.lua
index e755ac5c1..c25c799ab 100644
--- a/builtin/client/death_formspec.lua
+++ b/builtin/client/death_formspec.lua
@@ -2,7 +2,6 @@
-- handled by the engine.
core.register_on_death(function()
- core.display_chat_message("You died.")
local formspec = "size[11,5.5]bgcolor[#320000b4;true]" ..
"label[4.85,1.35;" .. fgettext("You died") ..
"]button_exit[4,3;3,0.5;btn_respawn;".. fgettext("Respawn") .."]"
diff --git a/builtin/client/init.lua b/builtin/client/init.lua
index 9633a7c71..589fe8f24 100644
--- a/builtin/client/init.lua
+++ b/builtin/client/init.lua
@@ -7,5 +7,4 @@ dofile(clientpath .. "register.lua")
dofile(commonpath .. "after.lua")
dofile(commonpath .. "chatcommands.lua")
dofile(clientpath .. "chatcommands.lua")
-dofile(commonpath .. "vector.lua")
dofile(clientpath .. "death_formspec.lua")
diff --git a/builtin/common/after.lua b/builtin/common/after.lua
index e20f292f0..bce262537 100644
--- a/builtin/common/after.lua
+++ b/builtin/common/after.lua
@@ -37,7 +37,14 @@ function core.after(after, func, ...)
arg = {...},
mod_origin = core.get_last_run_mod(),
}
+
jobs[#jobs + 1] = new_job
time_next = math.min(time_next, expire)
- return { cancel = function() new_job.func = function() end end }
+
+ return {
+ cancel = function()
+ new_job.func = function() end
+ new_job.args = {}
+ end
+ }
end
diff --git a/builtin/common/chatcommands.lua b/builtin/common/chatcommands.lua
index 52edda659..7c3da0601 100644
--- a/builtin/common/chatcommands.lua
+++ b/builtin/common/chatcommands.lua
@@ -1,7 +1,47 @@
-- Minetest: builtin/common/chatcommands.lua
+-- For server-side translations (if INIT == "game")
+-- Otherwise, use core.gettext
+local S = core.get_translator("__builtin")
+
core.registered_chatcommands = {}
+-- Interpret the parameters of a command, separating options and arguments.
+-- Input: command, param
+-- command: name of command
+-- param: parameters of command
+-- Returns: opts, args
+-- opts is a string of option letters, or false on error
+-- args is an array with the non-option arguments in order, or an error message
+-- Example: for this command line:
+-- /command a b -cd e f -g
+-- the function would receive:
+-- a b -cd e f -g
+-- and it would return:
+-- "cdg", {"a", "b", "e", "f"}
+-- Negative numbers are taken as arguments. Long options (--option) are
+-- currently rejected as reserved.
+local function getopts(command, param)
+ local opts = ""
+ local args = {}
+ for match in param:gmatch("%S+") do
+ if match:byte(1) == 45 then -- 45 = '-'
+ local second = match:byte(2)
+ if second == 45 then
+ return false, S("Invalid parameters (see /help @1).", command)
+ elseif second and (second < 48 or second > 57) then -- 48 = '0', 57 = '9'
+ opts = opts .. match:sub(2)
+ else
+ -- numeric, add it to args
+ args[#args + 1] = match
+ end
+ else
+ args[#args + 1] = match
+ end
+ end
+ return opts, args
+end
+
function core.register_chatcommand(cmd, def)
def = def or {}
def.params = def.params or ""
@@ -29,35 +69,30 @@ function core.override_chatcommand(name, redefinition)
core.registered_chatcommands[name] = chatcommand
end
-local cmd_marker = "/"
-
-local function gettext(...)
- return ...
-end
-
-local function gettext_replace(text, replace)
- return text:gsub("$1", replace)
-end
-
-
-if INIT == "client" then
- cmd_marker = "."
- gettext = core.gettext
- gettext_replace = fgettext_ne
+local function format_help_line(cmd, def)
+ local cmd_marker = INIT == "client" and "." or "/"
+ local msg = core.colorize("#00ffff", cmd_marker .. cmd)
+ if def.params and def.params ~= "" then
+ msg = msg .. " " .. def.params
+ end
+ if def.description and def.description ~= "" then
+ msg = msg .. ": " .. def.description
+ end
+ return msg
end
local function do_help_cmd(name, param)
- local function format_help_line(cmd, def)
- local msg = core.colorize("#00ffff", cmd_marker .. cmd)
- if def.params and def.params ~= "" then
- msg = msg .. " " .. def.params
- end
- if def.description and def.description ~= "" then
- msg = msg .. ": " .. def.description
- end
- return msg
+ local opts, args = getopts("help", param)
+ if not opts then
+ return false, args
+ end
+ if #args > 1 then
+ return false, S("Too many arguments, try using just /help <command>")
end
- if param == "" then
+ local use_gui = INIT ~= "client" and core.get_player_by_name(name)
+ use_gui = use_gui and not opts:find("t")
+
+ if #args == 0 and not use_gui then
local cmds = {}
for cmd, def in pairs(core.registered_chatcommands) do
if INIT == "client" or core.check_player_privs(name, def.privs) then
@@ -65,10 +100,25 @@ local function do_help_cmd(name, param)
end
end
table.sort(cmds)
- return true, gettext("Available commands: ") .. table.concat(cmds, " ") .. "\n"
- .. gettext_replace("Use '$1help <cmd>' to get more information,"
- .. " or '$1help all' to list everything.", cmd_marker)
- elseif param == "all" then
+ local msg
+ if INIT == "game" then
+ msg = S("Available commands: @1",
+ table.concat(cmds, " ")) .. "\n"
+ .. S("Use '/help <cmd>' to get more "
+ .. "information, or '/help all' to list "
+ .. "everything.")
+ else
+ msg = core.gettext("Available commands: ")
+ .. table.concat(cmds, " ") .. "\n"
+ .. core.gettext("Use '.help <cmd>' to get more "
+ .. "information, or '.help all' to list "
+ .. "everything.")
+ end
+ return true, msg
+ elseif #args == 0 or (args[1] == "all" and use_gui) then
+ core.show_general_help_formspec(name)
+ return true
+ elseif args[1] == "all" then
local cmds = {}
for cmd, def in pairs(core.registered_chatcommands) do
if INIT == "client" or core.check_player_privs(name, def.privs) then
@@ -76,19 +126,35 @@ local function do_help_cmd(name, param)
end
end
table.sort(cmds)
- return true, gettext("Available commands:").."\n"..table.concat(cmds, "\n")
- elseif INIT == "game" and param == "privs" then
+ local msg
+ if INIT == "game" then
+ msg = S("Available commands:")
+ else
+ msg = core.gettext("Available commands:")
+ end
+ return true, msg.."\n"..table.concat(cmds, "\n")
+ elseif INIT == "game" and args[1] == "privs" then
+ if use_gui then
+ core.show_privs_help_formspec(name)
+ return true
+ end
local privs = {}
for priv, def in pairs(core.registered_privileges) do
privs[#privs + 1] = priv .. ": " .. def.description
end
table.sort(privs)
- return true, "Available privileges:\n"..table.concat(privs, "\n")
+ return true, S("Available privileges:").."\n"..table.concat(privs, "\n")
else
- local cmd = param
+ local cmd = args[1]
local def = core.registered_chatcommands[cmd]
if not def then
- return false, gettext("Command not available: ")..cmd
+ local msg
+ if INIT == "game" then
+ msg = S("Command not available: @1", cmd)
+ else
+ msg = core.gettext("Command not available: ") .. cmd
+ end
+ return false, msg
else
return true, format_help_line(cmd, def)
end
@@ -97,16 +163,16 @@ end
if INIT == "client" then
core.register_chatcommand("help", {
- params = gettext("[all | <cmd>]"),
- description = gettext("Get help for commands"),
+ params = core.gettext("[all | <cmd>]"),
+ description = core.gettext("Get help for commands"),
func = function(param)
return do_help_cmd(nil, param)
end,
})
else
core.register_chatcommand("help", {
- params = "[all | privs | <cmd>]",
- description = "Get help for commands or list privileges",
+ params = S("[all | privs | <cmd>] [-t]"),
+ description = S("Get help for commands or list privileges (-t: output in chat)"),
func = do_help_cmd,
})
end
diff --git a/builtin/common/information_formspecs.lua b/builtin/common/information_formspecs.lua
index 3e2f1f079..3405263bf 100644
--- a/builtin/common/information_formspecs.lua
+++ b/builtin/common/information_formspecs.lua
@@ -20,7 +20,8 @@ local LIST_FORMSPEC_DESCRIPTION = [[
button_exit[5,7;3,1;quit;%s]
]]
-local formspec_escape = core.formspec_escape
+local F = core.formspec_escape
+local S = core.get_translator("__builtin")
local check_player_privs = core.check_player_privs
@@ -51,22 +52,23 @@ core.after(0, load_mod_command_tree)
local function build_chatcommands_formspec(name, sel, copy)
local rows = {}
- rows[1] = "#FFF,0,Command,Parameters"
+ rows[1] = "#FFF,0,"..F(S("Command"))..","..F(S("Parameters"))
- local description = "For more information, click on any entry in the list.\n" ..
- "Double-click to copy the entry to the chat history."
+ local description = S("For more information, click on "
+ .. "any entry in the list.").. "\n" ..
+ S("Double-click to copy the entry to the chat history.")
for i, data in ipairs(mod_cmds) do
- rows[#rows + 1] = COLOR_BLUE .. ",0," .. formspec_escape(data[1]) .. ","
+ rows[#rows + 1] = COLOR_BLUE .. ",0," .. F(data[1]) .. ","
for j, cmds in ipairs(data[2]) do
local has_priv = check_player_privs(name, cmds[2].privs)
rows[#rows + 1] = ("%s,1,%s,%s"):format(
has_priv and COLOR_GREEN or COLOR_GRAY,
- cmds[1], formspec_escape(cmds[2].params))
+ cmds[1], F(cmds[2].params))
if sel == #rows then
description = cmds[2].description
if copy then
- core.chat_send_player(name, ("Command: %s %s"):format(
+ core.chat_send_player(name, S("Command: @1 @2",
core.colorize("#0FF", "/" .. cmds[1]), cmds[2].params))
end
end
@@ -74,9 +76,9 @@ local function build_chatcommands_formspec(name, sel, copy)
end
return LIST_FORMSPEC_DESCRIPTION:format(
- "Available commands: (see also: /help <cmd>)",
+ F(S("Available commands: (see also: /help <cmd>)")),
table.concat(rows, ","), sel or 0,
- description, "Close"
+ F(description), F(S("Close"))
)
end
@@ -91,19 +93,19 @@ local function build_privs_formspec(name)
table.sort(privs, function(a, b) return a[1] < b[1] end)
local rows = {}
- rows[1] = "#FFF,0,Privilege,Description"
+ rows[1] = "#FFF,0,"..F(S("Privilege"))..","..F(S("Description"))
local player_privs = core.get_player_privs(name)
for i, data in ipairs(privs) do
rows[#rows + 1] = ("%s,0,%s,%s"):format(
player_privs[data[1]] and COLOR_GREEN or COLOR_GRAY,
- data[1], formspec_escape(data[2].description))
+ data[1], F(data[2].description))
end
return LIST_FORMSPEC:format(
- "Available privileges:",
+ F(S("Available privileges:")),
table.concat(rows, ","),
- "Close"
+ F(S("Close"))
)
end
@@ -123,30 +125,12 @@ core.register_on_player_receive_fields(function(player, formname, fields)
end
end)
-
-local help_command = core.registered_chatcommands["help"]
-local old_help_func = help_command.func
-
-help_command.func = function(name, param)
- local admin = core.settings:get("name")
-
- -- If the admin ran help, put the output in the chat buffer as well to
- -- work with the server terminal
- if param == "privs" then
- core.show_formspec(name, "__builtin:help_privs",
- build_privs_formspec(name))
- if name ~= admin then
- return true
- end
- end
- if param == "" or param == "all" then
- core.show_formspec(name, "__builtin:help_cmds",
- build_chatcommands_formspec(name))
- if name ~= admin then
- return true
- end
- end
-
- return old_help_func(name, param)
+function core.show_general_help_formspec(name)
+ core.show_formspec(name, "__builtin:help_cmds",
+ build_chatcommands_formspec(name))
end
+function core.show_privs_help_formspec(name)
+ core.show_formspec(name, "__builtin:help_privs",
+ build_privs_formspec(name))
+end
diff --git a/builtin/common/misc_helpers.lua b/builtin/common/misc_helpers.lua
index 0f3897f47..f5f89acd7 100644
--- a/builtin/common/misc_helpers.lua
+++ b/builtin/common/misc_helpers.lua
@@ -209,14 +209,7 @@ end
--------------------------------------------------------------------------------
function math.hypot(x, y)
- local t
- x = math.abs(x)
- y = math.abs(y)
- t = math.min(x, y)
- x = math.max(x, y)
- if x == 0 then return 0 end
- t = t / x
- return x * math.sqrt(1 + t * t)
+ return math.sqrt(x * x + y * y)
end
--------------------------------------------------------------------------------
@@ -244,6 +237,15 @@ function math.factorial(x)
return v
end
+
+function math.round(x)
+ if x >= 0 then
+ return math.floor(x + 0.5)
+ end
+ return math.ceil(x - 0.5)
+end
+
+
function core.formspec_escape(text)
if text ~= nil then
text = string.gsub(text,"\\","\\\\")
@@ -423,21 +425,19 @@ function core.string_to_pos(value)
return nil
end
- local p = {}
- p.x, p.y, p.z = string.match(value, "^([%d.-]+)[, ] *([%d.-]+)[, ] *([%d.-]+)$")
- if p.x and p.y and p.z then
- p.x = tonumber(p.x)
- p.y = tonumber(p.y)
- p.z = tonumber(p.z)
- return p
+ local x, y, z = string.match(value, "^([%d.-]+)[, ] *([%d.-]+)[, ] *([%d.-]+)$")
+ if x and y and z then
+ x = tonumber(x)
+ y = tonumber(y)
+ z = tonumber(z)
+ return vector.new(x, y, z)
end
- p = {}
- p.x, p.y, p.z = string.match(value, "^%( *([%d.-]+)[, ] *([%d.-]+)[, ] *([%d.-]+) *%)$")
- if p.x and p.y and p.z then
- p.x = tonumber(p.x)
- p.y = tonumber(p.y)
- p.z = tonumber(p.z)
- return p
+ x, y, z = string.match(value, "^%( *([%d.-]+)[, ] *([%d.-]+)[, ] *([%d.-]+) *%)$")
+ if x and y and z then
+ x = tonumber(x)
+ y = tonumber(y)
+ z = tonumber(z)
+ return vector.new(x, y, z)
end
return nil
end
@@ -532,7 +532,7 @@ if INIT == "mainmenu" then
end
end
-if INIT == "client" or INIT == "mainmenu" then
+if core.gettext then -- for client and mainmenu
function fgettext_ne(text, ...)
text = core.gettext(text)
local arg = {n=select('#', ...), ...}
diff --git a/builtin/common/tests/misc_helpers_spec.lua b/builtin/common/tests/misc_helpers_spec.lua
index bb9d13e7f..b16987f0b 100644
--- a/builtin/common/tests/misc_helpers_spec.lua
+++ b/builtin/common/tests/misc_helpers_spec.lua
@@ -1,4 +1,5 @@
_G.core = {}
+dofile("builtin/common/vector.lua")
dofile("builtin/common/misc_helpers.lua")
describe("string", function()
@@ -55,8 +56,8 @@ end)
describe("pos", function()
it("from string", function()
- assert.same({ x = 10, y = 5.1, z = -2}, core.string_to_pos("10.0, 5.1, -2"))
- assert.same({ x = 10, y = 5.1, z = -2}, core.string_to_pos("( 10.0, 5.1, -2)"))
+ assert.equal(vector.new(10, 5.1, -2), core.string_to_pos("10.0, 5.1, -2"))
+ assert.equal(vector.new(10, 5.1, -2), core.string_to_pos("( 10.0, 5.1, -2)"))
assert.is_nil(core.string_to_pos("asd, 5, -2)"))
end)
diff --git a/builtin/common/tests/serialize_spec.lua b/builtin/common/tests/serialize_spec.lua
index 17c6a60f7..e46b7dcc5 100644
--- a/builtin/common/tests/serialize_spec.lua
+++ b/builtin/common/tests/serialize_spec.lua
@@ -3,6 +3,7 @@ _G.core = {}
_G.setfenv = require 'busted.compatibility'.setfenv
dofile("builtin/common/serialize.lua")
+dofile("builtin/common/vector.lua")
describe("serialize", function()
it("works", function()
@@ -53,4 +54,16 @@ describe("serialize", function()
assert.is_nil(test_out.func)
assert.equals(test_out.foo, "bar")
end)
+
+ it("vectors work", function()
+ local v = vector.new(1, 2, 3)
+ assert.same({{x = 1, y = 2, z = 3}}, core.deserialize(core.serialize({v})))
+ assert.same({x = 1, y = 2, z = 3}, core.deserialize(core.serialize(v)))
+
+ -- abuse
+ v = vector.new(1, 2, 3)
+ v.a = "bla"
+ assert.same({x = 1, y = 2, z = 3, a = "bla"},
+ core.deserialize(core.serialize(v)))
+ end)
end)
diff --git a/builtin/common/tests/vector_spec.lua b/builtin/common/tests/vector_spec.lua
index 0f287363a..2f72f3383 100644
--- a/builtin/common/tests/vector_spec.lua
+++ b/builtin/common/tests/vector_spec.lua
@@ -4,14 +4,20 @@ dofile("builtin/common/vector.lua")
describe("vector", function()
describe("new()", function()
it("constructs", function()
- assert.same({ x = 0, y = 0, z = 0 }, vector.new())
- assert.same({ x = 1, y = 2, z = 3 }, vector.new(1, 2, 3))
- assert.same({ x = 3, y = 2, z = 1 }, vector.new({ x = 3, y = 2, z = 1 }))
+ assert.same({x = 0, y = 0, z = 0}, vector.new())
+ assert.same({x = 1, y = 2, z = 3}, vector.new(1, 2, 3))
+ assert.same({x = 3, y = 2, z = 1}, vector.new({x = 3, y = 2, z = 1}))
+
+ assert.is_true(vector.check(vector.new()))
+ assert.is_true(vector.check(vector.new(1, 2, 3)))
+ assert.is_true(vector.check(vector.new({x = 3, y = 2, z = 1})))
local input = vector.new({ x = 3, y = 2, z = 1 })
local output = vector.new(input)
assert.same(input, output)
- assert.are_not.equal(input, output)
+ assert.equal(input, output)
+ assert.is_false(rawequal(input, output))
+ assert.equal(input, input:new())
end)
it("throws on invalid input", function()
@@ -25,27 +31,286 @@ describe("vector", function()
end)
end)
- it("equal()", function()
- local function assertE(a, b)
- assert.is_true(vector.equals(a, b))
- end
- local function assertNE(a, b)
- assert.is_false(vector.equals(a, b))
- end
+ it("zero()", function()
+ assert.same({x = 0, y = 0, z = 0}, vector.zero())
+ assert.same(vector.new(), vector.zero())
+ assert.equal(vector.new(), vector.zero())
+ assert.is_true(vector.check(vector.zero()))
+ end)
- assertE({x = 0, y = 0, z = 0}, {x = 0, y = 0, z = 0})
- assertE({x = -1, y = 0, z = 1}, {x = -1, y = 0, z = 1})
- local a = { x = 2, y = 4, z = -10 }
- assertE(a, a)
- assertNE({x = -1, y = 0, z = 1}, a)
+ it("copy()", function()
+ local v = vector.new(1, 2, 3)
+ assert.same(v, vector.copy(v))
+ assert.same(vector.new(v), vector.copy(v))
+ assert.equal(vector.new(v), vector.copy(v))
+ assert.is_true(vector.check(vector.copy(v)))
end)
- it("add()", function()
- assert.same({ x = 2, y = 4, z = 6 }, vector.add(vector.new(1, 2, 3), { x = 1, y = 2, z = 3 }))
+ it("indexes", function()
+ local some_vector = vector.new(24, 42, 13)
+ assert.equal(24, some_vector[1])
+ assert.equal(24, some_vector.x)
+ assert.equal(42, some_vector[2])
+ assert.equal(42, some_vector.y)
+ assert.equal(13, some_vector[3])
+ assert.equal(13, some_vector.z)
+
+ some_vector[1] = 100
+ assert.equal(100, some_vector.x)
+ some_vector.x = 101
+ assert.equal(101, some_vector[1])
+
+ some_vector[2] = 100
+ assert.equal(100, some_vector.y)
+ some_vector.y = 102
+ assert.equal(102, some_vector[2])
+
+ some_vector[3] = 100
+ assert.equal(100, some_vector.z)
+ some_vector.z = 103
+ assert.equal(103, some_vector[3])
+ end)
+
+ it("direction()", function()
+ local a = vector.new(1, 0, 0)
+ local b = vector.new(1, 42, 0)
+ assert.equal(vector.new(0, 1, 0), vector.direction(a, b))
+ assert.equal(vector.new(0, 1, 0), a:direction(b))
+ end)
+
+ it("distance()", function()
+ local a = vector.new(1, 0, 0)
+ local b = vector.new(3, 42, 9)
+ assert.is_true(math.abs(43 - vector.distance(a, b)) < 1.0e-12)
+ assert.is_true(math.abs(43 - a:distance(b)) < 1.0e-12)
+ assert.equal(0, vector.distance(a, a))
+ assert.equal(0, b:distance(b))
+ end)
+
+ it("length()", function()
+ local a = vector.new(0, 0, -23)
+ assert.equal(0, vector.length(vector.new()))
+ assert.equal(23, vector.length(a))
+ assert.equal(23, a:length())
+ end)
+
+ it("normalize()", function()
+ local a = vector.new(0, 0, -23)
+ assert.equal(vector.new(0, 0, -1), vector.normalize(a))
+ assert.equal(vector.new(0, 0, -1), a:normalize())
+ assert.equal(vector.new(), vector.normalize(vector.new()))
+ end)
+
+ it("floor()", function()
+ local a = vector.new(0.1, 0.9, -0.5)
+ assert.equal(vector.new(0, 0, -1), vector.floor(a))
+ assert.equal(vector.new(0, 0, -1), a:floor())
+ end)
+
+ it("round()", function()
+ local a = vector.new(0.1, 0.9, -0.5)
+ assert.equal(vector.new(0, 1, -1), vector.round(a))
+ assert.equal(vector.new(0, 1, -1), a:round())
+ end)
+
+ it("apply()", function()
+ local i = 0
+ local f = function(x)
+ i = i + 1
+ return x + i
+ end
+ local a = vector.new(0.1, 0.9, -0.5)
+ assert.equal(vector.new(1, 1, 0), vector.apply(a, math.ceil))
+ assert.equal(vector.new(1, 1, 0), a:apply(math.ceil))
+ assert.equal(vector.new(0.1, 0.9, 0.5), vector.apply(a, math.abs))
+ assert.equal(vector.new(0.1, 0.9, 0.5), a:apply(math.abs))
+ assert.equal(vector.new(1.1, 2.9, 2.5), vector.apply(a, f))
+ assert.equal(vector.new(4.1, 5.9, 5.5), a:apply(f))
+ end)
+
+ it("equals()", function()
+ local function assertE(a, b)
+ assert.is_true(vector.equals(a, b))
+ end
+ local function assertNE(a, b)
+ assert.is_false(vector.equals(a, b))
+ end
+
+ assertE({x = 0, y = 0, z = 0}, {x = 0, y = 0, z = 0})
+ assertE({x = -1, y = 0, z = 1}, {x = -1, y = 0, z = 1})
+ assertE({x = -1, y = 0, z = 1}, vector.new(-1, 0, 1))
+ local a = {x = 2, y = 4, z = -10}
+ assertE(a, a)
+ assertNE({x = -1, y = 0, z = 1}, a)
+
+ assert.equal(vector.new(1, 2, 3), vector.new(1, 2, 3))
+ assert.is_true(vector.new(1, 2, 3):equals(vector.new(1, 2, 3)))
+ assert.not_equal(vector.new(1, 2, 3), vector.new(1, 2, 4))
+ assert.is_true(vector.new(1, 2, 3) == vector.new(1, 2, 3))
+ assert.is_false(vector.new(1, 2, 3) == vector.new(1, 3, 3))
+ end)
+
+ it("metatable is same", function()
+ local a = vector.new()
+ local b = vector.new(1, 2, 3)
+
+ assert.equal(true, vector.check(a))
+ assert.equal(true, vector.check(b))
+
+ assert.equal(vector.metatable, getmetatable(a))
+ assert.equal(vector.metatable, getmetatable(b))
+ assert.equal(vector.metatable, a.metatable)
+ end)
+
+ it("sort()", function()
+ local a = vector.new(1, 2, 3)
+ local b = vector.new(0.5, 232, -2)
+ local sorted = {vector.new(0.5, 2, -2), vector.new(1, 232, 3)}
+ assert.same(sorted, {vector.sort(a, b)})
+ assert.same(sorted, {a:sort(b)})
+ end)
+
+ it("angle()", function()
+ assert.equal(math.pi, vector.angle(vector.new(-1, -2, -3), vector.new(1, 2, 3)))
+ assert.equal(math.pi/2, vector.new(0, 1, 0):angle(vector.new(1, 0, 0)))
+ end)
+
+ it("dot()", function()
+ assert.equal(-14, vector.dot(vector.new(-1, -2, -3), vector.new(1, 2, 3)))
+ assert.equal(0, vector.new():dot(vector.new(1, 2, 3)))
+ end)
+
+ it("cross()", function()
+ local a = vector.new(-1, -2, 0)
+ local b = vector.new(1, 2, 3)
+ assert.equal(vector.new(-6, 3, 0), vector.cross(a, b))
+ assert.equal(vector.new(-6, 3, 0), a:cross(b))
end)
it("offset()", function()
- assert.same({ x = 41, y = 52, z = 63 }, vector.offset(vector.new(1, 2, 3), 40, 50, 60))
+ assert.same({x = 41, y = 52, z = 63}, vector.offset(vector.new(1, 2, 3), 40, 50, 60))
+ assert.equal(vector.new(41, 52, 63), vector.offset(vector.new(1, 2, 3), 40, 50, 60))
+ assert.equal(vector.new(41, 52, 63), vector.new(1, 2, 3):offset(40, 50, 60))
+ end)
+
+ it("is()", function()
+ local some_table1 = {foo = 13, [42] = 1, "bar", 2}
+ local some_table2 = {1, 2, 3}
+ local some_table3 = {x = 1, 2, 3}
+ local some_table4 = {1, 2, z = 3}
+ local old = {x = 1, y = 2, z = 3}
+ local real = vector.new(1, 2, 3)
+
+ assert.is_false(vector.check(nil))
+ assert.is_false(vector.check(1))
+ assert.is_false(vector.check(true))
+ assert.is_false(vector.check("foo"))
+ assert.is_false(vector.check(some_table1))
+ assert.is_false(vector.check(some_table2))
+ assert.is_false(vector.check(some_table3))
+ assert.is_false(vector.check(some_table4))
+ assert.is_false(vector.check(old))
+ assert.is_true(vector.check(real))
+ assert.is_true(real:check())
+ end)
+
+ it("global pairs", function()
+ local out = {}
+ local vec = vector.new(10, 20, 30)
+ for k, v in pairs(vec) do
+ out[k] = v
+ end
+ assert.same({x = 10, y = 20, z = 30}, out)
+ end)
+
+ it("abusing works", function()
+ local v = vector.new(1, 2, 3)
+ v.a = 1
+ assert.equal(1, v.a)
+
+ local a_is_there = false
+ for key, value in pairs(v) do
+ if key == "a" then
+ a_is_there = true
+ assert.equal(value, 1)
+ break
+ end
+ end
+ assert.is_true(a_is_there)
+ end)
+
+ it("add()", function()
+ local a = vector.new(1, 2, 3)
+ local b = vector.new(1, 4, 3)
+ local c = vector.new(2, 6, 6)
+ assert.equal(c, vector.add(a, {x = 1, y = 4, z = 3}))
+ assert.equal(c, vector.add(a, b))
+ assert.equal(c, a:add(b))
+ assert.equal(c, a + b)
+ assert.equal(c, b + a)
+ end)
+
+ it("subtract()", function()
+ local a = vector.new(1, 2, 3)
+ local b = vector.new(2, 4, 3)
+ local c = vector.new(-1, -2, 0)
+ assert.equal(c, vector.subtract(a, {x = 2, y = 4, z = 3}))
+ assert.equal(c, vector.subtract(a, b))
+ assert.equal(c, a:subtract(b))
+ assert.equal(c, a - b)
+ assert.equal(c, -b + a)
+ end)
+
+ it("multiply()", function()
+ local a = vector.new(1, 2, 3)
+ local b = vector.new(2, 4, 3)
+ local c = vector.new(2, 8, 9)
+ local s = 2
+ local d = vector.new(2, 4, 6)
+ assert.equal(c, vector.multiply(a, {x = 2, y = 4, z = 3}))
+ assert.equal(c, vector.multiply(a, b))
+ assert.equal(d, vector.multiply(a, s))
+ assert.equal(d, a:multiply(s))
+ assert.equal(d, a * s)
+ assert.equal(d, s * a)
+ assert.equal(-a, -1 * a)
+ end)
+
+ it("divide()", function()
+ local a = vector.new(1, 2, 3)
+ local b = vector.new(2, 4, 3)
+ local c = vector.new(0.5, 0.5, 1)
+ local s = 2
+ local d = vector.new(0.5, 1, 1.5)
+ assert.equal(c, vector.divide(a, {x = 2, y = 4, z = 3}))
+ assert.equal(c, vector.divide(a, b))
+ assert.equal(d, vector.divide(a, s))
+ assert.equal(d, a:divide(s))
+ assert.equal(d, a / s)
+ assert.equal(d, 1/s * a)
+ assert.equal(-a, a / -1)
+ end)
+
+ it("to_string()", function()
+ local v = vector.new(1, 2, 3.14)
+ assert.same("(1, 2, 3.14)", vector.to_string(v))
+ assert.same("(1, 2, 3.14)", v:to_string())
+ assert.same("(1, 2, 3.14)", tostring(v))
+ end)
+
+ it("from_string()", function()
+ local v = vector.new(1, 2, 3.14)
+ assert.is_true(vector.check(vector.from_string("(1, 2, 3.14)")))
+ assert.same({v, 13}, {vector.from_string("(1, 2, 3.14)")})
+ assert.same({v, 12}, {vector.from_string("(1,2 ,3.14)")})
+ assert.same({v, 12}, {vector.from_string("(1,2,3.14,)")})
+ assert.same({v, 11}, {vector.from_string("(1 2 3.14)")})
+ assert.same({v, 15}, {vector.from_string("( 1, 2, 3.14 )")})
+ assert.same({v, 15}, {vector.from_string(" ( 1, 2, 3.14) ")})
+ assert.same({vector.new(), 8}, {vector.from_string("(0,0,0) ( 1, 2, 3.14) ")})
+ assert.same({v, 22}, {vector.from_string("(0,0,0) ( 1, 2, 3.14) ", 8)})
+ assert.same({v, 22}, {vector.from_string("(0,0,0) ( 1, 2, 3.14) ", 9)})
+ assert.same(nil, vector.from_string("nothing"))
end)
-- This function is needed because of floating point imprecision.
diff --git a/builtin/common/vector.lua b/builtin/common/vector.lua
index d6437deda..581d014e0 100644
--- a/builtin/common/vector.lua
+++ b/builtin/common/vector.lua
@@ -1,73 +1,126 @@
+--[[
+Vector helpers
+Note: The vector.*-functions must be able to accept old vectors that had no metatables
+]]
+
+-- localize functions
+local setmetatable = setmetatable
vector = {}
+local metatable = {}
+vector.metatable = metatable
+
+local xyz = {"x", "y", "z"}
+
+-- only called when rawget(v, key) returns nil
+function metatable.__index(v, key)
+ return rawget(v, xyz[key]) or vector[key]
+end
+
+-- only called when rawget(v, key) returns nil
+function metatable.__newindex(v, key, value)
+ rawset(v, xyz[key] or key, value)
+end
+
+-- constructors
+
+local function fast_new(x, y, z)
+ return setmetatable({x = x, y = y, z = z}, metatable)
+end
+
function vector.new(a, b, c)
+ if a and b and c then
+ return fast_new(a, b, c)
+ end
+
+ -- deprecated, use vector.copy and vector.zero directly
if type(a) == "table" then
- assert(a.x and a.y and a.z, "Invalid vector passed to vector.new()")
- return {x=a.x, y=a.y, z=a.z}
- elseif a then
- assert(b and c, "Invalid arguments for vector.new()")
- return {x=a, y=b, z=c}
+ return vector.copy(a)
+ else
+ assert(not a, "Invalid arguments for vector.new()")
+ return vector.zero()
+ end
+end
+
+function vector.zero()
+ return fast_new(0, 0, 0)
+end
+
+function vector.copy(v)
+ assert(v.x and v.y and v.z, "Invalid vector passed to vector.copy()")
+ return fast_new(v.x, v.y, v.z)
+end
+
+function vector.from_string(s, init)
+ local x, y, z, np = string.match(s, "^%s*%(%s*([^%s,]+)%s*[,%s]%s*([^%s,]+)%s*[,%s]" ..
+ "%s*([^%s,]+)%s*[,%s]?%s*%)()", init)
+ x = tonumber(x)
+ y = tonumber(y)
+ z = tonumber(z)
+ if not (x and y and z) then
+ return nil
end
- return {x=0, y=0, z=0}
+ return fast_new(x, y, z), np
+end
+
+function vector.to_string(v)
+ return string.format("(%g, %g, %g)", v.x, v.y, v.z)
end
+metatable.__tostring = vector.to_string
function vector.equals(a, b)
return a.x == b.x and
a.y == b.y and
a.z == b.z
end
+metatable.__eq = vector.equals
+
+-- unary operations
function vector.length(v)
- return math.hypot(v.x, math.hypot(v.y, v.z))
+ return math.sqrt(v.x * v.x + v.y * v.y + v.z * v.z)
end
+-- Note: we can not use __len because it is already used for primitive table length
function vector.normalize(v)
local len = vector.length(v)
if len == 0 then
- return {x=0, y=0, z=0}
+ return fast_new(0, 0, 0)
else
return vector.divide(v, len)
end
end
function vector.floor(v)
- return {
- x = math.floor(v.x),
- y = math.floor(v.y),
- z = math.floor(v.z)
- }
+ return vector.apply(v, math.floor)
end
function vector.round(v)
- return {
- x = math.floor(v.x + 0.5),
- y = math.floor(v.y + 0.5),
- z = math.floor(v.z + 0.5)
- }
+ return fast_new(
+ math.round(v.x),
+ math.round(v.y),
+ math.round(v.z)
+ )
end
function vector.apply(v, func)
- return {
- x = func(v.x),
- y = func(v.y),
- z = func(v.z)
- }
+ return fast_new(
+ func(v.x),
+ func(v.y),
+ func(v.z)
+ )
end
function vector.distance(a, b)
local x = a.x - b.x
local y = a.y - b.y
local z = a.z - b.z
- return math.hypot(x, math.hypot(y, z))
+ return math.sqrt(x * x + y * y + z * z)
end
function vector.direction(pos1, pos2)
- return vector.normalize({
- x = pos2.x - pos1.x,
- y = pos2.y - pos1.y,
- z = pos2.z - pos1.z
- })
+ return vector.subtract(pos2, pos1):normalize()
end
function vector.angle(a, b)
@@ -82,70 +135,137 @@ function vector.dot(a, b)
end
function vector.cross(a, b)
- return {
- x = a.y * b.z - a.z * b.y,
- y = a.z * b.x - a.x * b.z,
- z = a.x * b.y - a.y * b.x
- }
+ return fast_new(
+ a.y * b.z - a.z * b.y,
+ a.z * b.x - a.x * b.z,
+ a.x * b.y - a.y * b.x
+ )
end
+function metatable.__unm(v)
+ return fast_new(-v.x, -v.y, -v.z)
+end
+
+-- add, sub, mul, div operations
+
function vector.add(a, b)
if type(b) == "table" then
- return {x = a.x + b.x,
- y = a.y + b.y,
- z = a.z + b.z}
+ return fast_new(
+ a.x + b.x,
+ a.y + b.y,
+ a.z + b.z
+ )
else
- return {x = a.x + b,
- y = a.y + b,
- z = a.z + b}
+ return fast_new(
+ a.x + b,
+ a.y + b,
+ a.z + b
+ )
end
end
+function metatable.__add(a, b)
+ return fast_new(
+ a.x + b.x,
+ a.y + b.y,
+ a.z + b.z
+ )
+end
function vector.subtract(a, b)
if type(b) == "table" then
- return {x = a.x - b.x,
- y = a.y - b.y,
- z = a.z - b.z}
+ return fast_new(
+ a.x - b.x,
+ a.y - b.y,
+ a.z - b.z
+ )
else
- return {x = a.x - b,
- y = a.y - b,
- z = a.z - b}
+ return fast_new(
+ a.x - b,
+ a.y - b,
+ a.z - b
+ )
end
end
+function metatable.__sub(a, b)
+ return fast_new(
+ a.x - b.x,
+ a.y - b.y,
+ a.z - b.z
+ )
+end
function vector.multiply(a, b)
if type(b) == "table" then
- return {x = a.x * b.x,
- y = a.y * b.y,
- z = a.z * b.z}
+ return fast_new(
+ a.x * b.x,
+ a.y * b.y,
+ a.z * b.z
+ )
+ else
+ return fast_new(
+ a.x * b,
+ a.y * b,
+ a.z * b
+ )
+ end
+end
+function metatable.__mul(a, b)
+ if type(a) == "table" then
+ return fast_new(
+ a.x * b,
+ a.y * b,
+ a.z * b
+ )
else
- return {x = a.x * b,
- y = a.y * b,
- z = a.z * b}
+ return fast_new(
+ a * b.x,
+ a * b.y,
+ a * b.z
+ )
end
end
function vector.divide(a, b)
if type(b) == "table" then
- return {x = a.x / b.x,
- y = a.y / b.y,
- z = a.z / b.z}
+ return fast_new(
+ a.x / b.x,
+ a.y / b.y,
+ a.z / b.z
+ )
else
- return {x = a.x / b,
- y = a.y / b,
- z = a.z / b}
+ return fast_new(
+ a.x / b,
+ a.y / b,
+ a.z / b
+ )
end
end
+function metatable.__div(a, b)
+ -- scalar/vector makes no sense
+ return fast_new(
+ a.x / b,
+ a.y / b,
+ a.z / b
+ )
+end
+
+-- misc stuff
function vector.offset(v, x, y, z)
- return {x = v.x + x,
- y = v.y + y,
- z = v.z + z}
+ return fast_new(
+ v.x + x,
+ v.y + y,
+ v.z + z
+ )
end
function vector.sort(a, b)
- return {x = math.min(a.x, b.x), y = math.min(a.y, b.y), z = math.min(a.z, b.z)},
- {x = math.max(a.x, b.x), y = math.max(a.y, b.y), z = math.max(a.z, b.z)}
+ return fast_new(math.min(a.x, b.x), math.min(a.y, b.y), math.min(a.z, b.z)),
+ fast_new(math.max(a.x, b.x), math.max(a.y, b.y), math.max(a.z, b.z))
+end
+
+function vector.check(v)
+ return getmetatable(v) == metatable
end
local function sin(x)
@@ -213,7 +333,7 @@ end
function vector.dir_to_rotation(forward, up)
forward = vector.normalize(forward)
- local rot = {x = math.asin(forward.y), y = -math.atan2(forward.x, forward.z), z = 0}
+ local rot = vector.new(math.asin(forward.y), -math.atan2(forward.x, forward.z), 0)
if not up then
return rot
end
@@ -221,7 +341,7 @@ function vector.dir_to_rotation(forward, up)
"Invalid vectors passed to vector.dir_to_rotation().")
up = vector.normalize(up)
-- Calculate vector pointing up with roll = 0, just based on forward vector.
- local forwup = vector.rotate({x = 0, y = 1, z = 0}, rot)
+ local forwup = vector.rotate(vector.new(0, 1, 0), rot)
-- 'forwup' and 'up' are now in a plane with 'forward' as normal.
-- The angle between them is the absolute of the roll value we're looking for.
rot.z = vector.angle(forwup, up)
diff --git a/builtin/fstk/tabview.lua b/builtin/fstk/tabview.lua
index 3715e231b..424d329fb 100644
--- a/builtin/fstk/tabview.lua
+++ b/builtin/fstk/tabview.lua
@@ -58,26 +58,20 @@ end
--------------------------------------------------------------------------------
local function get_formspec(self)
- local formspec = ""
+ if self.hidden or (self.parent ~= nil and self.parent.hidden) then
+ return ""
+ end
+ local tab = self.tablist[self.last_tab_index]
- if not self.hidden and (self.parent == nil or not self.parent.hidden) then
+ local content, prepend = tab.get_formspec(self, tab.name, tab.tabdata, tab.tabsize)
- if self.parent == nil then
- local tsize = self.tablist[self.last_tab_index].tabsize or
- {width=self.width, height=self.height}
- formspec = formspec ..
- string.format("size[%f,%f,%s]",tsize.width,tsize.height,
- dump(self.fixed_size))
- end
- formspec = formspec .. self:tab_header()
- formspec = formspec ..
- self.tablist[self.last_tab_index].get_formspec(
- self,
- self.tablist[self.last_tab_index].name,
- self.tablist[self.last_tab_index].tabdata,
- self.tablist[self.last_tab_index].tabsize
- )
+ if self.parent == nil and not prepend then
+ local tsize = tab.tabsize or {width=self.width, height=self.height}
+ prepend = string.format("size[%f,%f,%s]", tsize.width, tsize.height,
+ dump(self.fixed_size))
end
+
+ local formspec = (prepend or "") .. self:tab_header() .. content
return formspec
end
@@ -97,14 +91,9 @@ local function handle_buttons(self,fields)
return true
end
- if self.tablist[self.last_tab_index].button_handler ~= nil then
- return
- self.tablist[self.last_tab_index].button_handler(
- self,
- fields,
- self.tablist[self.last_tab_index].name,
- self.tablist[self.last_tab_index].tabdata
- )
+ local tab = self.tablist[self.last_tab_index]
+ if tab.button_handler ~= nil then
+ return tab.button_handler(self, fields, tab.name, tab.tabdata)
end
return false
@@ -122,14 +111,9 @@ local function handle_events(self,event)
return true
end
- if self.tablist[self.last_tab_index].evt_handler ~= nil then
- return
- self.tablist[self.last_tab_index].evt_handler(
- self,
- event,
- self.tablist[self.last_tab_index].name,
- self.tablist[self.last_tab_index].tabdata
- )
+ local tab = self.tablist[self.last_tab_index]
+ if tab.evt_handler ~= nil then
+ return tab.evt_handler(self, event, tab.name, tab.tabdata)
end
return false
diff --git a/builtin/fstk/ui.lua b/builtin/fstk/ui.lua
index 976659ed3..13f9cbec2 100644
--- a/builtin/fstk/ui.lua
+++ b/builtin/fstk/ui.lua
@@ -63,7 +63,7 @@ function ui.update()
-- handle errors
if gamedata ~= nil and gamedata.reconnect_requested then
local error_message = core.formspec_escape(
- gamedata.errormessage or "<none available>")
+ gamedata.errormessage or fgettext("<none available>"))
formspec = {
"size[14,8]",
"real_coordinates[true]",
diff --git a/builtin/game/auth.lua b/builtin/game/auth.lua
index fc061666c..e7d502bb3 100644
--- a/builtin/game/auth.lua
+++ b/builtin/game/auth.lua
@@ -87,6 +87,10 @@ core.builtin_auth_handler = {
core.settings:get("default_password")))
end
+ auth_entry.privileges = privileges
+
+ core_auth.save(auth_entry)
+
-- Run grant callbacks
for priv, _ in pairs(privileges) do
if not auth_entry.privileges[priv] then
@@ -100,9 +104,6 @@ core.builtin_auth_handler = {
core.run_priv_callbacks(name, priv, nil, "revoke")
end
end
-
- auth_entry.privileges = privileges
- core_auth.save(auth_entry)
core.notify_authentication_modified(name)
end,
reload = function()
diff --git a/builtin/game/chat.lua b/builtin/game/chat.lua
index 945707623..b73e32876 100644
--- a/builtin/game/chat.lua
+++ b/builtin/game/chat.lua
@@ -1,5 +1,7 @@
-- Minetest: builtin/game/chat.lua
+local S = core.get_translator("__builtin")
+
-- Helper function that implements search and replace without pattern matching
-- Returns the string and a boolean indicating whether or not the string was modified
local function safe_gsub(s, replace, with)
@@ -45,6 +47,8 @@ end
core.chatcommands = core.registered_chatcommands -- BACKWARDS COMPATIBILITY
+local msg_time_threshold =
+ tonumber(core.settings:get("chatcommand_msg_time_threshold")) or 0.1
core.register_on_chat_message(function(name, message)
if message:sub(1,1) ~= "/" then
return
@@ -52,7 +56,7 @@ core.register_on_chat_message(function(name, message)
local cmd, param = string.match(message, "^/([^ ]+) *(.*)")
if not cmd then
- core.chat_send_player(name, "-!- Empty command")
+ core.chat_send_player(name, "-!- "..S("Empty command."))
return true
end
@@ -65,15 +69,17 @@ core.register_on_chat_message(function(name, message)
local cmd_def = core.registered_chatcommands[cmd]
if not cmd_def then
- core.chat_send_player(name, "-!- Invalid command: " .. cmd)
+ core.chat_send_player(name, "-!- "..S("Invalid command: @1", cmd))
return true
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 t_before = core.get_us_time()
local success, result = cmd_def.func(name, param)
+ local delay = (core.get_us_time() - t_before) / 1000000
if success == false and result == nil then
- core.chat_send_player(name, "-!- Invalid command usage")
+ core.chat_send_player(name, "-!- "..S("Invalid command usage."))
local help_def = core.registered_chatcommands["help"]
if help_def then
local _, helpmsg = help_def.func(name, cmd)
@@ -81,13 +87,27 @@ core.register_on_chat_message(function(name, message)
core.chat_send_player(name, helpmsg)
end
end
- elseif result then
- core.chat_send_player(name, result)
+ else
+ if delay > msg_time_threshold then
+ -- Show how much time it took to execute the command
+ if result then
+ result = result .. core.colorize("#f3d2ff", S(" (@1 s)",
+ string.format("%.5f", delay)))
+ else
+ result = core.colorize("#f3d2ff", S(
+ "Command execution took @1 s",
+ string.format("%.5f", delay)))
+ end
+ end
+ if result then
+ core.chat_send_player(name, result)
+ end
end
else
- core.chat_send_player(name, "You don't have permission"
- .. " to run this command (missing privileges: "
- .. table.concat(missing_privs, ", ") .. ")")
+ core.chat_send_player(name,
+ S("You don't have permission to run this command "
+ .. "(missing privileges: @1).",
+ table.concat(missing_privs, ", ")))
end
return true -- Handled chat message
end)
@@ -107,12 +127,13 @@ local function parse_range_str(player_name, str)
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"
+ return false, S("Unable to get position of player @1.", player_name)
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)"
+ return false, S("Incorrect area format. "
+ .. "Expected: (x1,y1,z1) (x2,y2,z2)")
end
end
@@ -123,9 +144,9 @@ end
-- Chat commands
--
core.register_chatcommand("me", {
- params = "<action>",
- description = "Show chat action (e.g., '/me orders a pizza' displays"
- .. " '<player name> orders a pizza')",
+ params = S("<action>"),
+ description = S("Show chat action (e.g., '/me orders a pizza' "
+ .. "displays '<player name> orders a pizza')"),
privs = {shout=true},
func = function(name, param)
core.chat_send_all("* " .. name .. " " .. param)
@@ -134,43 +155,54 @@ core.register_chatcommand("me", {
})
core.register_chatcommand("admin", {
- description = "Show the name of the server owner",
+ description = S("Show the name of the server owner"),
func = function(name)
local admin = core.settings:get("name")
if admin then
- return true, "The administrator of this server is " .. admin .. "."
+ return true, S("The administrator of this server is @1.", admin)
else
- return false, "There's no administrator named in the config file."
+ return false, S("There's no administrator named "
+ .. "in the config file.")
end
end,
})
+local function privileges_of(name, privs)
+ if not privs then
+ privs = core.get_player_privs(name)
+ end
+ local privstr = core.privs_to_string(privs, ", ")
+ if privstr == "" then
+ return S("@1 does not have any privileges.", name)
+ else
+ return S("Privileges of @1: @2", name, privstr)
+ end
+end
+
core.register_chatcommand("privs", {
- params = "[<name>]",
- description = "Show privileges of yourself or another player",
+ params = S("[<name>]"),
+ description = S("Show privileges of yourself or another player"),
func = function(caller, param)
param = param:trim()
local name = (param ~= "" and param or caller)
if not core.player_exists(name) then
- return false, "Player " .. name .. " does not exist."
+ return false, S("Player @1 does not exist.", name)
end
- return true, "Privileges of " .. name .. ": "
- .. core.privs_to_string(
- core.get_player_privs(name), ", ")
+ return true, privileges_of(name)
end,
})
core.register_chatcommand("haspriv", {
- params = "<privilege>",
- description = "Return list of all online players with privilege.",
+ params = S("<privilege>"),
+ description = S("Return list of all online players with privilege"),
privs = {basic_privs = true},
func = function(caller, param)
param = param:trim()
if param == "" then
- return false, "Invalid parameters (see /help haspriv)"
+ return false, S("Invalid parameters (see /help haspriv).")
end
if not core.registered_privileges[param] then
- return false, "Unknown privilege!"
+ return false, S("Unknown privilege!")
end
local privs = core.string_to_privs(param)
local players_with_priv = {}
@@ -180,19 +212,25 @@ core.register_chatcommand("haspriv", {
table.insert(players_with_priv, player_name)
end
end
- return true, "Players online with the \"" .. param .. "\" privilege: " ..
- table.concat(players_with_priv, ", ")
+ if #players_with_priv == 0 then
+ return true, S("No online player has the \"@1\" privilege.",
+ param)
+ else
+ return true, S("Players online with the \"@1\" privilege: @2",
+ param,
+ table.concat(players_with_priv, ", "))
+ end
end
})
local function handle_grant_command(caller, grantname, grantprivstr)
local caller_privs = core.get_player_privs(caller)
if not (caller_privs.privs or caller_privs.basic_privs) then
- return false, "Your privileges are insufficient."
+ return false, S("Your privileges are insufficient.")
end
if not core.get_auth_handler().get_auth(grantname) then
- return false, "Player " .. grantname .. " does not exist."
+ return false, S("Player @1 does not exist.", grantname)
end
local grantprivs = core.string_to_privs(grantprivstr)
if grantprivstr == "all" then
@@ -204,50 +242,51 @@ local function handle_grant_command(caller, grantname, grantprivstr)
core.string_to_privs(core.settings:get("basic_privs") or "interact,shout")
for priv, _ in pairs(grantprivs) do
if not basic_privs[priv] and not caller_privs.privs then
- return false, "Your privileges are insufficient."
+ return false, S("Your privileges are insufficient. "..
+ "'@1' only allows you to grant: @2",
+ "basic_privs",
+ core.privs_to_string(basic_privs, ', '))
end
if not core.registered_privileges[priv] then
- privs_unknown = privs_unknown .. "Unknown privilege: " .. priv .. "\n"
+ privs_unknown = privs_unknown .. S("Unknown privilege: @1", priv) .. "\n"
end
privs[priv] = true
end
if privs_unknown ~= "" then
return false, privs_unknown
end
+ core.set_player_privs(grantname, privs)
for priv, _ in pairs(grantprivs) do
-- call the on_grant callbacks
core.run_priv_callbacks(grantname, priv, caller, "grant")
end
- core.set_player_privs(grantname, privs)
core.log("action", caller..' granted ('..core.privs_to_string(grantprivs, ', ')..') privileges to '..grantname)
if grantname ~= caller then
- core.chat_send_player(grantname, caller
- .. " granted you privileges: "
- .. core.privs_to_string(grantprivs, ' '))
+ core.chat_send_player(grantname,
+ S("@1 granted you privileges: @2", caller,
+ core.privs_to_string(grantprivs, ', ')))
end
- return true, "Privileges of " .. grantname .. ": "
- .. core.privs_to_string(
- core.get_player_privs(grantname), ' ')
+ return true, privileges_of(grantname)
end
core.register_chatcommand("grant", {
- params = "<name> (<privilege> | all)",
- description = "Give privileges to player",
+ params = S("<name> (<privilege> [, <privilege2> [<...>]] | all)"),
+ description = S("Give privileges to player"),
func = function(name, param)
local grantname, grantprivstr = string.match(param, "([^ ]+) (.+)")
if not grantname or not grantprivstr then
- return false, "Invalid parameters (see /help grant)"
+ return false, S("Invalid parameters (see /help grant).")
end
return handle_grant_command(name, grantname, grantprivstr)
end,
})
core.register_chatcommand("grantme", {
- params = "<privilege> | all",
- description = "Grant privileges to yourself",
+ params = S("<privilege> [, <privilege2> [<...>]] | all"),
+ description = S("Grant privileges to yourself"),
func = function(name, param)
if param == "" then
- return false, "Invalid parameters (see /help grantme)"
+ return false, S("Invalid parameters (see /help grantme).")
end
return handle_grant_command(name, name, param)
end,
@@ -256,23 +295,20 @@ core.register_chatcommand("grantme", {
local function handle_revoke_command(caller, revokename, revokeprivstr)
local caller_privs = core.get_player_privs(caller)
if not (caller_privs.privs or caller_privs.basic_privs) then
- return false, "Your privileges are insufficient."
+ return false, S("Your privileges are insufficient.")
end
if not core.get_auth_handler().get_auth(revokename) then
- return false, "Player " .. revokename .. " does not exist."
+ return false, S("Player @1 does not exist.", revokename)
end
- local revokeprivs = core.string_to_privs(revokeprivstr)
local privs = core.get_player_privs(revokename)
- local basic_privs =
- core.string_to_privs(core.settings:get("basic_privs") or "interact,shout")
- for priv, _ in pairs(revokeprivs) do
- if not basic_privs[priv] and not caller_privs.privs then
- return false, "Your privileges are insufficient."
- end
- end
+ local revokeprivs = core.string_to_privs(revokeprivstr)
+ local is_singleplayer = core.is_singleplayer()
+ local is_admin = not is_singleplayer
+ and revokename == core.settings:get("name")
+ and revokename ~= ""
if revokeprivstr == "all" then
revokeprivs = privs
privs = {}
@@ -282,53 +318,99 @@ local function handle_revoke_command(caller, revokename, revokeprivstr)
end
end
+ local privs_unknown = ""
+ local basic_privs =
+ core.string_to_privs(core.settings:get("basic_privs") or "interact,shout")
+ local irrevokable = {}
+ local has_irrevokable_priv = false
+ for priv, _ in pairs(revokeprivs) do
+ if not basic_privs[priv] and not caller_privs.privs then
+ return false, S("Your privileges are insufficient. "..
+ "'@1' only allows you to revoke: @2",
+ "basic_privs",
+ core.privs_to_string(basic_privs, ', '))
+ end
+ local def = core.registered_privileges[priv]
+ if not def then
+ privs_unknown = privs_unknown .. S("Unknown privilege: @1", priv) .. "\n"
+ elseif is_singleplayer and def.give_to_singleplayer then
+ irrevokable[priv] = true
+ elseif is_admin and def.give_to_admin then
+ irrevokable[priv] = true
+ end
+ end
+ for priv, _ in pairs(irrevokable) do
+ revokeprivs[priv] = nil
+ has_irrevokable_priv = true
+ end
+ if privs_unknown ~= "" then
+ return false, privs_unknown
+ end
+ if has_irrevokable_priv then
+ if is_singleplayer then
+ core.chat_send_player(caller,
+ S("Note: Cannot revoke in singleplayer: @1",
+ core.privs_to_string(irrevokable, ', ')))
+ elseif is_admin then
+ core.chat_send_player(caller,
+ S("Note: Cannot revoke from admin: @1",
+ core.privs_to_string(irrevokable, ', ')))
+ end
+ end
+
+ local revokecount = 0
+
+ core.set_player_privs(revokename, privs)
for priv, _ in pairs(revokeprivs) do
-- call the on_revoke callbacks
core.run_priv_callbacks(revokename, priv, caller, "revoke")
+ revokecount = revokecount + 1
+ end
+ local new_privs = core.get_player_privs(revokename)
+
+ if revokecount == 0 then
+ return false, S("No privileges were revoked.")
end
- core.set_player_privs(revokename, privs)
core.log("action", caller..' revoked ('
..core.privs_to_string(revokeprivs, ', ')
..') privileges from '..revokename)
if revokename ~= caller then
- core.chat_send_player(revokename, caller
- .. " revoked privileges from you: "
- .. core.privs_to_string(revokeprivs, ' '))
+ core.chat_send_player(revokename,
+ S("@1 revoked privileges from you: @2", caller,
+ core.privs_to_string(revokeprivs, ', ')))
end
- return true, "Privileges of " .. revokename .. ": "
- .. core.privs_to_string(
- core.get_player_privs(revokename), ' ')
+ return true, privileges_of(revokename, new_privs)
end
core.register_chatcommand("revoke", {
- params = "<name> (<privilege> | all)",
- description = "Remove privileges from player",
+ params = S("<name> (<privilege> [, <privilege2> [<...>]] | all)"),
+ description = S("Remove privileges from player"),
privs = {},
func = function(name, param)
local revokename, revokeprivstr = string.match(param, "([^ ]+) (.+)")
if not revokename or not revokeprivstr then
- return false, "Invalid parameters (see /help revoke)"
+ return false, S("Invalid parameters (see /help revoke).")
end
return handle_revoke_command(name, revokename, revokeprivstr)
end,
})
core.register_chatcommand("revokeme", {
- params = "<privilege> | all",
- description = "Revoke privileges from yourself",
+ params = S("<privilege> [, <privilege2> [<...>]] | all"),
+ description = S("Revoke privileges from yourself"),
privs = {},
func = function(name, param)
if param == "" then
- return false, "Invalid parameters (see /help revokeme)"
+ return false, S("Invalid parameters (see /help revokeme).")
end
return handle_revoke_command(name, name, param)
end,
})
core.register_chatcommand("setpassword", {
- params = "<name> <password>",
- description = "Set player's password",
+ params = S("<name> <password>"),
+ description = S("Set player's password"),
privs = {password=true},
func = function(name, param)
local toname, raw_password = string.match(param, "^([^ ]+) +(.+)$")
@@ -338,207 +420,197 @@ core.register_chatcommand("setpassword", {
end
if not toname then
- return false, "Name field required"
+ return false, S("Name field required.")
end
- local act_str_past, act_str_pres
+ local msg_chat, msg_log, msg_ret
if not raw_password then
core.set_player_password(toname, "")
- act_str_past = "cleared"
- act_str_pres = "clears"
+ msg_chat = S("Your password was cleared by @1.", name)
+ msg_log = name .. " clears password of " .. toname .. "."
+ msg_ret = S("Password of player \"@1\" cleared.", toname)
else
core.set_player_password(toname,
core.get_password_hash(toname,
raw_password))
- act_str_past = "set"
- act_str_pres = "sets"
+ msg_chat = S("Your password was set by @1.", name)
+ msg_log = name .. " sets password of " .. toname .. "."
+ msg_ret = S("Password of player \"@1\" set.", toname)
end
if toname ~= name then
- core.chat_send_player(toname, "Your password was "
- .. act_str_past .. " by " .. name)
+ core.chat_send_player(toname, msg_chat)
end
- core.log("action", name .. " " .. act_str_pres ..
- " password of " .. toname .. ".")
+ core.log("action", msg_log)
- return true, "Password of player \"" .. toname .. "\" " .. act_str_past
+ return true, msg_ret
end,
})
core.register_chatcommand("clearpassword", {
- params = "<name>",
- description = "Set empty password for a player",
+ params = S("<name>"),
+ description = S("Set empty password for a player"),
privs = {password=true},
func = function(name, param)
local toname = param
if toname == "" then
- return false, "Name field required"
+ return false, S("Name field required.")
end
core.set_player_password(toname, '')
core.log("action", name .. " clears password of " .. toname .. ".")
- return true, "Password of player \"" .. toname .. "\" cleared"
+ return true, S("Password of player \"@1\" cleared.", toname)
end,
})
core.register_chatcommand("auth_reload", {
params = "",
- description = "Reload authentication data",
+ description = S("Reload authentication data"),
privs = {server=true},
func = function(name, param)
local done = core.auth_reload()
- return done, (done and "Done." or "Failed.")
+ return done, (done and S("Done.") or S("Failed."))
end,
})
core.register_chatcommand("remove_player", {
- params = "<name>",
- description = "Remove a player's data",
+ params = S("<name>"),
+ description = S("Remove a player's data"),
privs = {server=true},
func = function(name, param)
local toname = param
if toname == "" then
- return false, "Name field required"
+ return false, S("Name field required.")
end
local rc = core.remove_player(toname)
if rc == 0 then
core.log("action", name .. " removed player data of " .. toname .. ".")
- return true, "Player \"" .. toname .. "\" removed."
+ return true, S("Player \"@1\" removed.", toname)
elseif rc == 1 then
- return true, "No such player \"" .. toname .. "\" to remove."
+ return true, S("No such player \"@1\" to remove.", toname)
elseif rc == 2 then
- return true, "Player \"" .. toname .. "\" is connected, cannot remove."
+ return true, S("Player \"@1\" is connected, cannot remove.", toname)
end
- return false, "Unhandled remove_player return code " .. rc .. ""
+ return false, S("Unhandled remove_player return code @1.", tostring(rc))
end,
})
-core.register_chatcommand("teleport", {
- params = "<X>,<Y>,<Z> | <to_name> | (<name> <X>,<Y>,<Z>) | (<name> <to_name>)",
- description = "Teleport to position or player",
- privs = {teleport=true},
- func = function(name, param)
- -- Returns (pos, true) if found, otherwise (pos, false)
- local function find_free_position_near(pos)
- local tries = {
- {x=1,y=0,z=0},
- {x=-1,y=0,z=0},
- {x=0,y=0,z=1},
- {x=0,y=0,z=-1},
- }
- for _, d in ipairs(tries) do
- local p = {x = pos.x+d.x, y = pos.y+d.y, z = pos.z+d.z}
- local n = core.get_node_or_nil(p)
- if n and n.name then
- local def = core.registered_nodes[n.name]
- if def and not def.walkable then
- return p, true
- end
- end
+
+-- pos may be a non-integer position
+local function find_free_position_near(pos)
+ local tries = {
+ vector.new( 1, 0, 0),
+ vector.new(-1, 0, 0),
+ vector.new( 0, 0, 1),
+ vector.new( 0, 0, -1),
+ }
+ for _, d in ipairs(tries) do
+ local p = vector.add(pos, d)
+ local n = core.get_node_or_nil(p)
+ if n then
+ local def = core.registered_nodes[n.name]
+ if def and not def.walkable then
+ return p
end
- return pos, false
end
+ end
+ return pos
+end
+
+-- Teleports player <name> to <p> if possible
+local function teleport_to_pos(name, p)
+ local lm = 31007 -- equals MAX_MAP_GENERATION_LIMIT in C++
+ if p.x < -lm or p.x > lm or p.y < -lm or p.y > lm
+ or p.z < -lm or p.z > lm then
+ return false, S("Cannot teleport out of map bounds!")
+ end
+ local teleportee = core.get_player_by_name(name)
+ if not teleportee then
+ return false, S("Cannot get player with name @1.", name)
+ end
+ if teleportee:get_attach() then
+ return false, S("Cannot teleport, @1 " ..
+ "is attached to an object!", name)
+ end
+ teleportee:set_pos(p)
+ return true, S("Teleporting @1 to @2.", name, core.pos_to_string(p, 1))
+end
+-- Teleports player <name> next to player <target_name> if possible
+local function teleport_to_player(name, target_name)
+ if name == target_name then
+ return false, S("One does not teleport to oneself.")
+ end
+ local teleportee = core.get_player_by_name(name)
+ if not teleportee then
+ return false, S("Cannot get teleportee with name @1.", name)
+ end
+ if teleportee:get_attach() then
+ return false, S("Cannot teleport, @1 " ..
+ "is attached to an object!", name)
+ end
+ local target = core.get_player_by_name(target_name)
+ if not target then
+ return false, S("Cannot get target player with name @1.", target_name)
+ end
+ local p = find_free_position_near(target:get_pos())
+ teleportee:set_pos(p)
+ return true, S("Teleporting @1 to @2 at @3.", name, target_name,
+ core.pos_to_string(p, 1))
+end
+
+core.register_chatcommand("teleport", {
+ params = S("<X>,<Y>,<Z> | <to_name> | <name> <X>,<Y>,<Z> | <name> <to_name>"),
+ description = S("Teleport to position or player"),
+ privs = {teleport=true},
+ func = function(name, param)
local p = {}
- p.x, p.y, p.z = string.match(param, "^([%d.-]+)[, ] *([%d.-]+)[, ] *([%d.-]+)$")
- p.x = tonumber(p.x)
- p.y = tonumber(p.y)
- p.z = tonumber(p.z)
+ p.x, p.y, p.z = param:match("^([%d.-]+)[, ] *([%d.-]+)[, ] *([%d.-]+)$")
+ p = vector.apply(p, tonumber)
if p.x and p.y and p.z then
-
- local lm = 31000
- if p.x < -lm or p.x > lm or p.y < -lm or p.y > lm or p.z < -lm or p.z > lm then
- return false, "Cannot teleport out of map bounds!"
- end
- local teleportee = core.get_player_by_name(name)
- if teleportee then
- if teleportee:get_attach() then
- return false, "Can't teleport, you're attached to an object!"
- end
- teleportee:set_pos(p)
- return true, "Teleporting to "..core.pos_to_string(p)
- end
+ return teleport_to_pos(name, p)
end
local target_name = param:match("^([^ ]+)$")
- local teleportee = core.get_player_by_name(name)
-
- p = nil
if target_name then
- local target = core.get_player_by_name(target_name)
- if target then
- p = target:get_pos()
- end
+ return teleport_to_player(name, target_name)
end
- if teleportee and p then
- if teleportee:get_attach() then
- return false, "Can't teleport, you're attached to an object!"
- end
- p = find_free_position_near(p)
- teleportee:set_pos(p)
- return true, "Teleporting to " .. target_name
- .. " at "..core.pos_to_string(p)
- end
+ local has_bring_priv = core.check_player_privs(name, {bring=true})
+ local missing_bring_msg = S("You don't have permission to teleport " ..
+ "other players (missing privilege: @1).", "bring")
- if not core.check_player_privs(name, {bring=true}) then
- return false, "You don't have permission to teleport other players (missing bring privilege)"
- end
-
- teleportee = nil
- p = {}
local teleportee_name
teleportee_name, p.x, p.y, p.z = param:match(
"^([^ ]+) +([%d.-]+)[, ] *([%d.-]+)[, ] *([%d.-]+)$")
- p.x, p.y, p.z = tonumber(p.x), tonumber(p.y), tonumber(p.z)
- if teleportee_name then
- teleportee = core.get_player_by_name(teleportee_name)
- end
- if teleportee and p.x and p.y and p.z then
- if teleportee:get_attach() then
- return false, "Can't teleport, player is attached to an object!"
+ p = vector.apply(p, tonumber)
+ if teleportee_name and p.x and p.y and p.z then
+ if not has_bring_priv then
+ return false, missing_bring_msg
end
- teleportee:set_pos(p)
- return true, "Teleporting " .. teleportee_name
- .. " to " .. core.pos_to_string(p)
+ return teleport_to_pos(teleportee_name, p)
end
- teleportee = nil
- p = nil
teleportee_name, target_name = string.match(param, "^([^ ]+) +([^ ]+)$")
- if teleportee_name then
- teleportee = core.get_player_by_name(teleportee_name)
- end
- if target_name then
- local target = core.get_player_by_name(target_name)
- if target then
- p = target:get_pos()
- end
- end
- if teleportee and p then
- if teleportee:get_attach() then
- return false, "Can't teleport, player is attached to an object!"
+ if teleportee_name and target_name then
+ if not has_bring_priv then
+ return false, missing_bring_msg
end
- p = find_free_position_near(p)
- teleportee:set_pos(p)
- return true, "Teleporting " .. teleportee_name
- .. " to " .. target_name
- .. " at " .. core.pos_to_string(p)
+ return teleport_to_player(teleportee_name, target_name)
end
- return false, 'Invalid parameters ("' .. param
- .. '") or player not found (see /help teleport)'
+ return false
end,
})
core.register_chatcommand("set", {
- params = "([-n] <name> <value>) | <name>",
- description = "Set or read server configuration setting",
+ params = S("([-n] <name> <value>) | <name>"),
+ description = S("Set or read server configuration setting"),
privs = {server=true},
func = function(name, param)
local arg, setname, setvalue = string.match(param, "(-[n]) ([^ ]+) (.+)")
@@ -550,22 +622,23 @@ core.register_chatcommand("set", {
setname, setvalue = string.match(param, "([^ ]+) (.+)")
if setname and setvalue then
if not core.settings:get(setname) then
- return false, "Failed. Use '/set -n <name> <value>' to create a new setting."
+ return false, S("Failed. Use '/set -n <name> <value>' "
+ .. "to create a new setting.")
end
core.settings:set(setname, setvalue)
- return true, setname .. " = " .. setvalue
+ return true, S("@1 = @2", setname, setvalue)
end
setname = string.match(param, "([^ ]+)")
if setname then
setvalue = core.settings:get(setname)
if not setvalue then
- setvalue = "<not set>"
+ setvalue = S("<not set>")
end
- return true, setname .. " = " .. setvalue
+ return true, S("@1 = @2", setname, setvalue)
end
- return false, "Invalid parameters (see /help set)."
+ return false, S("Invalid parameters (see /help set).")
end,
})
@@ -578,26 +651,27 @@ local function emergeblocks_callback(pos, action, num_calls_remaining, ctx)
if ctx.current_blocks == ctx.total_blocks then
core.chat_send_player(ctx.requestor_name,
- string.format("Finished emerging %d blocks in %.2fms.",
- ctx.total_blocks, (os.clock() - ctx.start_time) * 1000))
+ S("Finished emerging @1 blocks in @2ms.",
+ ctx.total_blocks,
+ string.format("%.2f", (os.clock() - ctx.start_time) * 1000)))
end
end
local function emergeblocks_progress_update(ctx)
if ctx.current_blocks ~= ctx.total_blocks then
core.chat_send_player(ctx.requestor_name,
- string.format("emergeblocks update: %d/%d blocks emerged (%.1f%%)",
+ S("emergeblocks update: @1/@2 blocks emerged (@3%)",
ctx.current_blocks, ctx.total_blocks,
- (ctx.current_blocks / ctx.total_blocks) * 100))
+ string.format("%.1f", (ctx.current_blocks / ctx.total_blocks) * 100)))
core.after(2, emergeblocks_progress_update, ctx)
end
end
core.register_chatcommand("emergeblocks", {
- params = "(here [<radius>]) | (<pos1> <pos2>)",
- description = "Load (or, if nonexistent, generate) map blocks "
- .. "contained in area pos1 to pos2 (<pos1> and <pos2> must be in parentheses)",
+ params = S("(here [<radius>]) | (<pos1> <pos2>)"),
+ description = S("Load (or, if nonexistent, generate) map blocks contained in "
+ .. "area pos1 to pos2 (<pos1> and <pos2> must be in parentheses)"),
privs = {server=true},
func = function(name, param)
local p1, p2 = parse_range_str(name, param)
@@ -615,15 +689,15 @@ core.register_chatcommand("emergeblocks", {
core.emerge_area(p1, p2, emergeblocks_callback, context)
core.after(2, emergeblocks_progress_update, context)
- return true, "Started emerge of area ranging from " ..
- core.pos_to_string(p1, 1) .. " to " .. core.pos_to_string(p2, 1)
+ return true, S("Started emerge of area ranging from @1 to @2.",
+ core.pos_to_string(p1, 1), core.pos_to_string(p2, 1))
end,
})
core.register_chatcommand("deleteblocks", {
- params = "(here [<radius>]) | (<pos1> <pos2>)",
- description = "Delete map blocks contained in area pos1 to pos2 "
- .. "(<pos1> and <pos2> must be in parentheses)",
+ params = S("(here [<radius>]) | (<pos1> <pos2>)"),
+ description = S("Delete map blocks contained in area pos1 to pos2 "
+ .. "(<pos1> and <pos2> must be in parentheses)"),
privs = {server=true},
func = function(name, param)
local p1, p2 = parse_range_str(name, param)
@@ -632,18 +706,20 @@ core.register_chatcommand("deleteblocks", {
end
if core.delete_area(p1, p2) then
- return true, "Successfully cleared area ranging from " ..
- core.pos_to_string(p1, 1) .. " to " .. core.pos_to_string(p2, 1)
+ return true, S("Successfully cleared area "
+ .. "ranging from @1 to @2.",
+ core.pos_to_string(p1, 1), core.pos_to_string(p2, 1))
else
- return false, "Failed to clear one or more blocks in area"
+ return false, S("Failed to clear one or more "
+ .. "blocks in area.")
end
end,
})
core.register_chatcommand("fixlight", {
- params = "(here [<radius>]) | (<pos1> <pos2>)",
- description = "Resets lighting in the area between pos1 and pos2 "
- .. "(<pos1> and <pos2> must be in parentheses)",
+ params = S("(here [<radius>]) | (<pos1> <pos2>)"),
+ description = S("Resets lighting in the area between pos1 and pos2 "
+ .. "(<pos1> and <pos2> must be in parentheses)"),
privs = {server = true},
func = function(name, param)
local p1, p2 = parse_range_str(name, param)
@@ -652,20 +728,26 @@ core.register_chatcommand("fixlight", {
end
if core.fix_light(p1, p2) then
- return true, "Successfully reset light in the area ranging from " ..
- core.pos_to_string(p1, 1) .. " to " .. core.pos_to_string(p2, 1)
+ return true, S("Successfully reset light in the area "
+ .. "ranging from @1 to @2.",
+ core.pos_to_string(p1, 1), core.pos_to_string(p2, 1))
else
- return false, "Failed to load one or more blocks in area"
+ return false, S("Failed to load one or more blocks in area.")
end
end,
})
core.register_chatcommand("mods", {
params = "",
- description = "List mods installed on the server",
+ description = S("List mods installed on the server"),
privs = {},
func = function(name, param)
- return true, table.concat(core.get_modnames(), ", ")
+ local mods = core.get_modnames()
+ if #mods == 0 then
+ return true, S("No mods installed.")
+ else
+ return true, table.concat(core.get_modnames(), ", ")
+ end
end,
})
@@ -674,117 +756,136 @@ local function handle_give_command(cmd, giver, receiver, stackstring)
.. ', stackstring="' .. stackstring .. '"')
local itemstack = ItemStack(stackstring)
if itemstack:is_empty() then
- return false, "Cannot give an empty item"
+ return false, S("Cannot give an empty item.")
elseif (not itemstack:is_known()) or (itemstack:get_name() == "unknown") then
- return false, "Cannot give an unknown item"
+ return false, S("Cannot give an unknown item.")
-- Forbid giving 'ignore' due to unwanted side effects
elseif itemstack:get_name() == "ignore" then
- return false, "Giving 'ignore' is not allowed"
+ return false, S("Giving 'ignore' is not allowed.")
end
local receiverref = core.get_player_by_name(receiver)
if receiverref == nil then
- return false, receiver .. " is not a known player"
+ return false, S("@1 is not a known player.", receiver)
end
local leftover = receiverref:get_inventory():add_item("main", itemstack)
local partiality
if leftover:is_empty() then
- partiality = ""
+ partiality = nil
elseif leftover:get_count() == itemstack:get_count() then
- partiality = "could not be "
+ partiality = false
else
- partiality = "partially "
+ partiality = true
end
-- The actual item stack string may be different from what the "giver"
-- entered (e.g. big numbers are always interpreted as 2^16-1).
stackstring = itemstack:to_string()
+ local msg
+ if partiality == true then
+ msg = S("@1 partially added to inventory.", stackstring)
+ elseif partiality == false then
+ msg = S("@1 could not be added to inventory.", stackstring)
+ else
+ msg = S("@1 added to inventory.", stackstring)
+ end
if giver == receiver then
- local msg = "%q %sadded to inventory."
- return true, msg:format(stackstring, partiality)
+ return true, msg
else
- core.chat_send_player(receiver, ("%q %sadded to inventory.")
- :format(stackstring, partiality))
- local msg = "%q %sadded to %s's inventory."
- return true, msg:format(stackstring, partiality, receiver)
+ core.chat_send_player(receiver, msg)
+ local msg_other
+ if partiality == true then
+ msg_other = S("@1 partially added to inventory of @2.",
+ stackstring, receiver)
+ elseif partiality == false then
+ msg_other = S("@1 could not be added to inventory of @2.",
+ stackstring, receiver)
+ else
+ msg_other = S("@1 added to inventory of @2.",
+ stackstring, receiver)
+ end
+ return true, msg_other
end
end
core.register_chatcommand("give", {
- params = "<name> <ItemString> [<count> [<wear>]]",
- description = "Give item to player",
+ params = S("<name> <ItemString> [<count> [<wear>]]"),
+ description = S("Give item to player"),
privs = {give=true},
func = function(name, param)
local toname, itemstring = string.match(param, "^([^ ]+) +(.+)$")
if not toname or not itemstring then
- return false, "Name and ItemString required"
+ return false, S("Name and ItemString required.")
end
return handle_give_command("/give", name, toname, itemstring)
end,
})
core.register_chatcommand("giveme", {
- params = "<ItemString> [<count> [<wear>]]",
- description = "Give item to yourself",
+ params = S("<ItemString> [<count> [<wear>]]"),
+ description = S("Give item to yourself"),
privs = {give=true},
func = function(name, param)
local itemstring = string.match(param, "(.+)$")
if not itemstring then
- return false, "ItemString required"
+ return false, S("ItemString required.")
end
return handle_give_command("/giveme", name, name, itemstring)
end,
})
core.register_chatcommand("spawnentity", {
- params = "<EntityName> [<X>,<Y>,<Z>]",
- description = "Spawn entity at given (or your) position",
+ params = S("<EntityName> [<X>,<Y>,<Z>]"),
+ description = S("Spawn entity at given (or your) position"),
privs = {give=true, interact=true},
func = function(name, param)
local entityname, p = string.match(param, "^([^ ]+) *(.*)$")
if not entityname then
- return false, "EntityName required"
+ return false, S("EntityName required.")
end
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"
+ return false, S("Unable to spawn entity, player is nil.")
end
if not core.registered_entities[entityname] then
- return false, "Cannot spawn an unknown entity"
+ return false, S("Cannot spawn an unknown entity.")
end
if p == "" then
p = player:get_pos()
else
p = core.string_to_pos(p)
if p == nil then
- return false, "Invalid parameters ('" .. param .. "')"
+ return false, S("Invalid parameters (@1).", param)
end
end
p.y = p.y + 1
local obj = core.add_entity(p, entityname)
- local msg = obj and "%q spawned." or "%q failed to spawn."
- return true, msg:format(entityname)
+ if obj then
+ return true, S("@1 spawned.", entityname)
+ else
+ return true, S("@1 failed to spawn.", entityname)
+ end
end,
})
core.register_chatcommand("pulverize", {
params = "",
- description = "Destroy item in hand",
+ description = S("Destroy item in hand"),
func = function(name, param)
local player = core.get_player_by_name(name)
if not player then
core.log("error", "Unable to pulverize, no player.")
- return false, "Unable to pulverize, no player."
+ return false, S("Unable to pulverize, no player.")
end
local wielded_item = player:get_wielded_item()
if wielded_item:is_empty() then
- return false, "Unable to pulverize, no item in hand."
+ return false, S("Unable to pulverize, no item in hand.")
end
core.log("action", name .. " pulverized \"" ..
wielded_item:get_name() .. " " .. wielded_item:get_count() .. "\"")
player:set_wielded_item(nil)
- return true, "An item was pulverized."
+ return true, S("An item was pulverized.")
end,
})
@@ -800,14 +901,15 @@ core.register_on_punchnode(function(pos, node, puncher)
end)
core.register_chatcommand("rollback_check", {
- params = "[<range>] [<seconds>] [<limit>]",
- description = "Check who last touched a node or a node near it"
- .. " within the time specified by <seconds>. Default: range = 0,"
- .. " seconds = 86400 = 24h, limit = 5. Set <seconds> to inf for no time limit",
+ params = S("[<range>] [<seconds>] [<limit>]"),
+ description = S("Check who last touched a node or a node near it "
+ .. "within the time specified by <seconds>. "
+ .. "Default: range = 0, seconds = 86400 = 24h, limit = 5. "
+ .. "Set <seconds> to inf for no time limit"),
privs = {rollback=true},
func = function(name, param)
if not core.settings:get_bool("enable_rollback_recording") then
- return false, "Rollback functions are disabled."
+ return false, S("Rollback functions are disabled.")
end
local range, seconds, limit =
param:match("(%d+) *(%d*) *(%d*)")
@@ -815,30 +917,30 @@ core.register_chatcommand("rollback_check", {
seconds = tonumber(seconds) or 86400
limit = tonumber(limit) or 5
if limit > 100 then
- return false, "That limit is too high!"
+ return false, S("That limit is too high!")
end
core.rollback_punch_callbacks[name] = function(pos, node, puncher)
local name = puncher:get_player_name()
- core.chat_send_player(name, "Checking " .. core.pos_to_string(pos) .. "...")
+ core.chat_send_player(name, S("Checking @1 ...", core.pos_to_string(pos)))
local actions = core.rollback_get_node_actions(pos, range, seconds, limit)
if not actions then
- core.chat_send_player(name, "Rollback functions are disabled")
+ core.chat_send_player(name, S("Rollback functions are disabled."))
return
end
local num_actions = #actions
if num_actions == 0 then
- core.chat_send_player(name, "Nobody has touched"
- .. " the specified location in "
- .. seconds .. " seconds")
+ core.chat_send_player(name,
+ S("Nobody has touched the specified "
+ .. "location in @1 seconds.",
+ seconds))
return
end
local time = os.time()
for i = num_actions, 1, -1 do
local action = actions[i]
core.chat_send_player(name,
- ("%s %s %s -> %s %d seconds ago.")
- :format(
+ S("@1 @2 @3 -> @4 @5 seconds ago.",
core.pos_to_string(action.pos),
action.actor,
action.oldnode.name,
@@ -847,189 +949,235 @@ core.register_chatcommand("rollback_check", {
end
end
- return true, "Punch a node (range=" .. range .. ", seconds="
- .. seconds .. "s, limit=" .. limit .. ")"
+ return true, S("Punch a node (range=@1, seconds=@2, limit=@3).",
+ range, seconds, limit)
end,
})
core.register_chatcommand("rollback", {
- params = "(<name> [<seconds>]) | (:<actor> [<seconds>])",
- description = "Revert actions of a player. Default for <seconds> is 60. Set <seconds> to inf for no time limit",
+ params = S("(<name> [<seconds>]) | (:<actor> [<seconds>])"),
+ description = S("Revert actions of a player. "
+ .. "Default for <seconds> is 60. "
+ .. "Set <seconds> to inf for no time limit"),
privs = {rollback=true},
func = function(name, param)
if not core.settings:get_bool("enable_rollback_recording") then
- return false, "Rollback functions are disabled."
+ return false, S("Rollback functions are disabled.")
end
local target_name, seconds = string.match(param, ":([^ ]+) *(%d*)")
+ local rev_msg
if not target_name then
local player_name
player_name, seconds = string.match(param, "([^ ]+) *(%d*)")
if not player_name then
- return false, "Invalid parameters. See /help rollback"
- .. " and /help rollback_check."
+ return false, S("Invalid parameters. "
+ .. "See /help rollback and "
+ .. "/help rollback_check.")
end
+ seconds = tonumber(seconds) or 60
target_name = "player:"..player_name
+ rev_msg = S("Reverting actions of player '@1' since @2 seconds.",
+ player_name, seconds)
+ else
+ seconds = tonumber(seconds) or 60
+ rev_msg = S("Reverting actions of @1 since @2 seconds.",
+ target_name, seconds)
end
- seconds = tonumber(seconds) or 60
- core.chat_send_player(name, "Reverting actions of "
- .. target_name .. " since "
- .. seconds .. " seconds.")
+ core.chat_send_player(name, rev_msg)
local success, log = core.rollback_revert_actions_by(
target_name, seconds)
local response = ""
if #log > 100 then
- response = "(log is too long to show)\n"
+ response = S("(log is too long to show)").."\n"
else
for _, line in pairs(log) do
response = response .. line .. "\n"
end
end
- response = response .. "Reverting actions "
- .. (success and "succeeded." or "FAILED.")
+ if success then
+ response = response .. S("Reverting actions succeeded.")
+ else
+ response = response .. S("Reverting actions FAILED.")
+ end
return success, response
end,
})
core.register_chatcommand("status", {
- description = "Show server status",
+ description = S("Show server status"),
func = function(name, param)
local status = core.get_server_status(name, false)
if status and status ~= "" then
return true, status
end
- return false, "This command was disabled by a mod or game"
+ return false, S("This command was disabled by a mod or game.")
end,
})
core.register_chatcommand("time", {
- params = "[<0..23>:<0..59> | <0..24000>]",
- description = "Show or set time of day",
+ params = S("[<0..23>:<0..59> | <0..24000>]"),
+ description = S("Show or set time of day"),
privs = {},
func = function(name, param)
if param == "" then
local current_time = math.floor(core.get_timeofday() * 1440)
local minutes = current_time % 60
local hour = (current_time - minutes) / 60
- return true, ("Current time is %d:%02d"):format(hour, minutes)
+ return true, S("Current time is @1:@2.",
+ string.format("%d", hour),
+ string.format("%02d", minutes))
end
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)."
+ return false, S("You don't have permission to run "
+ .. "this command (missing privilege: @1).", "settime")
end
local hour, minute = param:match("^(%d+):(%d+)$")
if not hour then
- local new_time = tonumber(param)
- if not new_time then
- return false, "Invalid time."
+ local new_time = tonumber(param) or -1
+ if new_time ~= new_time or new_time < 0 or new_time > 24000 then
+ return false, S("Invalid time (must be between 0 and 24000).")
end
- -- Backward compatibility.
- core.set_timeofday((new_time % 24000) / 24000)
+ core.set_timeofday(new_time / 24000)
core.log("action", name .. " sets time to " .. new_time)
- return true, "Time of day changed."
+ return true, S("Time of day changed.")
end
hour = tonumber(hour)
minute = tonumber(minute)
if hour < 0 or hour > 23 then
- return false, "Invalid hour (must be between 0 and 23 inclusive)."
+ return false, S("Invalid hour (must be between 0 and 23 inclusive).")
elseif minute < 0 or minute > 59 then
- return false, "Invalid minute (must be between 0 and 59 inclusive)."
+ return false, S("Invalid minute (must be between 0 and 59 inclusive).")
end
core.set_timeofday((hour * 60 + minute) / 1440)
core.log("action", ("%s sets time to %d:%02d"):format(name, hour, minute))
- return true, "Time of day changed."
+ return true, S("Time of day changed.")
end,
})
core.register_chatcommand("days", {
- description = "Show day count since world creation",
+ description = S("Show day count since world creation"),
func = function(name, param)
- return true, "Current day is " .. core.get_day_count()
+ return true, S("Current day is @1.", core.get_day_count())
end
})
+local function parse_shutdown_param(param)
+ local delay, reconnect, message
+ local one, two, three
+ one, two, three = param:match("^(%S+) +(%-r) +(.*)")
+ if one and two and three then
+ -- 3 arguments: delay, reconnect and message
+ return one, two, three
+ end
+ -- 2 arguments
+ one, two = param:match("^(%S+) +(.*)")
+ if one and two then
+ if tonumber(one) then
+ delay = one
+ if two == "-r" then
+ reconnect = two
+ else
+ message = two
+ end
+ elseif one == "-r" then
+ reconnect, message = one, two
+ end
+ return delay, reconnect, message
+ end
+ -- 1 argument
+ one = param:match("(.*)")
+ if tonumber(one) then
+ delay = one
+ elseif one == "-r" then
+ reconnect = one
+ else
+ message = one
+ end
+ return delay, reconnect, message
+end
+
core.register_chatcommand("shutdown", {
- params = "[<delay_in_seconds> | -1] [reconnect] [<message>]",
- description = "Shutdown server (-1 cancels a delayed shutdown)",
+ params = S("[<delay_in_seconds> | -1] [-r] [<message>]"),
+ description = S("Shutdown server (-1 cancels a delayed shutdown, -r allows players to reconnect)"),
privs = {server=true},
func = function(name, param)
- local delay, reconnect, message
- delay, param = param:match("^%s*(%S+)(.*)")
- if param then
- reconnect, param = param:match("^%s*(%S+)(.*)")
+ local delay, reconnect, message = parse_shutdown_param(param)
+ local bool_reconnect = reconnect == "-r"
+ if not message then
+ message = ""
end
- message = param and param:match("^%s*(.+)") or ""
delay = tonumber(delay) or 0
if delay == 0 then
core.log("action", name .. " shuts down server")
- core.chat_send_all("*** Server shutting down (operator request).")
+ core.chat_send_all("*** "..S("Server shutting down (operator request)."))
end
- core.request_shutdown(message:trim(), core.is_yes(reconnect), delay)
+ core.request_shutdown(message:trim(), bool_reconnect, delay)
return true
end,
})
core.register_chatcommand("ban", {
- params = "[<name>]",
- description = "Ban the IP of a player or show the ban list",
+ params = S("[<name>]"),
+ description = S("Ban the IP of a player or show the ban list"),
privs = {ban=true},
func = function(name, param)
if param == "" then
local ban_list = core.get_ban_list()
if ban_list == "" then
- return true, "The ban list is empty."
+ return true, S("The ban list is empty.")
else
- return true, "Ban list: " .. ban_list
+ return true, S("Ban list: @1", ban_list)
end
end
if not core.get_player_by_name(param) then
- return false, "Player is not online."
+ return false, S("Player is not online.")
end
if not core.ban_player(param) then
- return false, "Failed to ban player."
+ return false, S("Failed to ban player.")
end
local desc = core.get_ban_description(param)
core.log("action", name .. " bans " .. desc .. ".")
- return true, "Banned " .. desc .. "."
+ return true, S("Banned @1.", desc)
end,
})
core.register_chatcommand("unban", {
- params = "<name> | <IP_address>",
- description = "Remove IP ban belonging to a player/IP",
+ params = S("<name> | <IP_address>"),
+ description = S("Remove IP ban belonging to a player/IP"),
privs = {ban=true},
func = function(name, param)
if not core.unban_player_or_ip(param) then
- return false, "Failed to unban player/IP."
+ return false, S("Failed to unban player/IP.")
end
core.log("action", name .. " unbans " .. param)
- return true, "Unbanned " .. param
+ return true, S("Unbanned @1.", param)
end,
})
core.register_chatcommand("kick", {
- params = "<name> [<reason>]",
- description = "Kick a player",
+ params = S("<name> [<reason>]"),
+ description = S("Kick a player"),
privs = {kick=true},
func = function(name, param)
local tokick, reason = param:match("([^ ]+) (.+)")
tokick = tokick or param
if not core.kick_player(tokick, reason) then
- return false, "Failed to kick player " .. tokick
+ return false, S("Failed to kick player @1.", tokick)
end
local log_reason = ""
if reason then
log_reason = " with reason \"" .. reason .. "\""
end
core.log("action", name .. " kicks " .. tokick .. log_reason)
- return true, "Kicked " .. tokick
+ return true, S("Kicked @1.", tokick)
end,
})
core.register_chatcommand("clearobjects", {
- params = "[full | quick]",
- description = "Clear all objects in world",
+ params = S("[full | quick]"),
+ description = S("Clear all objects in world"),
privs = {server=true},
func = function(name, param)
local options = {}
@@ -1038,45 +1186,44 @@ core.register_chatcommand("clearobjects", {
elseif param == "full" then
options.mode = "full"
else
- return false, "Invalid usage, see /help clearobjects."
+ return false, S("Invalid usage, see /help clearobjects.")
end
- core.log("action", name .. " clears all objects ("
+ core.log("action", name .. " clears objects ("
.. options.mode .. " mode).")
- core.chat_send_all("Clearing all objects. This may take a long time."
- .. " You may experience a timeout. (by "
- .. name .. ")")
+ if options.mode == "full" then
+ core.chat_send_all(S("Clearing all objects. This may take a long time. "
+ .. "You may experience a timeout. (by @1)", name))
+ end
core.clear_objects(options)
core.log("action", "Object clearing done.")
- core.chat_send_all("*** Cleared all objects.")
+ core.chat_send_all("*** "..S("Cleared all objects."))
return true
end,
})
core.register_chatcommand("msg", {
- params = "<name> <message>",
- description = "Send a direct message to a player",
+ params = S("<name> <message>"),
+ description = S("Send a direct message to a player"),
privs = {shout=true},
func = function(name, param)
local sendto, message = param:match("^(%S+)%s(.+)$")
if not sendto then
- return false, "Invalid usage, see /help msg."
+ return false, S("Invalid usage, see /help msg.")
end
if not core.get_player_by_name(sendto) then
- return false, "The player " .. sendto
- .. " is not online."
+ return false, S("The player @1 is not online.", sendto)
end
core.log("action", "DM from " .. name .. " to " .. sendto
.. ": " .. message)
- core.chat_send_player(sendto, "DM from " .. name .. ": "
- .. message)
- return true, "Message sent."
+ core.chat_send_player(sendto, S("DM from @1: @2", name, message))
+ return true, S("Message sent.")
end,
})
core.register_chatcommand("last-login", {
- params = "[<name>]",
- description = "Get the last login time of a player or yourself",
+ params = S("[<name>]"),
+ description = S("Get the last login time of a player or yourself"),
func = function(name, param)
if param == "" then
param = name
@@ -1084,25 +1231,27 @@ core.register_chatcommand("last-login", {
local pauth = core.get_auth_handler().get_auth(param)
if pauth and pauth.last_login and pauth.last_login ~= -1 then
-- Time in UTC, ISO 8601 format
- return true, param.."'s last login time was " ..
- os.date("!%Y-%m-%dT%H:%M:%SZ", pauth.last_login)
+ return true, S("@1's last login time was @2.",
+ param,
+ os.date("!%Y-%m-%dT%H:%M:%SZ", pauth.last_login))
end
- return false, param.."'s last login time is unknown"
+ return false, S("@1's last login time is unknown.", param)
end,
})
core.register_chatcommand("clearinv", {
- params = "[<name>]",
- description = "Clear the inventory of yourself or another player",
+ params = S("[<name>]"),
+ description = S("Clear the inventory of yourself or another player"),
func = function(name, param)
local player
if param and param ~= "" and param ~= name then
if not core.check_player_privs(name, {server=true}) then
- return false, "You don't have permission"
- .. " to clear another player's inventory (missing privilege: server)"
+ return false, S("You don't have permission to "
+ .. "clear another player's inventory "
+ .. "(missing privilege: @1).", "server")
end
player = core.get_player_by_name(param)
- core.chat_send_player(param, name.." cleared your inventory.")
+ core.chat_send_player(param, S("@1 cleared your inventory.", name))
else
player = core.get_player_by_name(name)
end
@@ -1112,25 +1261,25 @@ core.register_chatcommand("clearinv", {
player:get_inventory():set_list("craft", {})
player:get_inventory():set_list("craftpreview", {})
core.log("action", name.." clears "..player:get_player_name().."'s inventory")
- return true, "Cleared "..player:get_player_name().."'s inventory."
+ return true, S("Cleared @1's inventory.", player:get_player_name())
else
- return false, "Player must be online to clear inventory!"
+ return false, S("Player must be online to clear inventory!")
end
end,
})
local function handle_kill_command(killer, victim)
if core.settings:get_bool("enable_damage") == false then
- return false, "Players can't be killed, damage has been disabled."
+ return false, S("Players can't be killed, damage has been disabled.")
end
local victimref = core.get_player_by_name(victim)
if victimref == nil then
- return false, string.format("Player %s is not online.", victim)
+ return false, S("Player @1 is not online.", victim)
elseif victimref:get_hp() <= 0 then
if killer == victim then
- return false, "You are already dead."
+ return false, S("You are already dead.")
else
- return false, string.format("%s is already dead.", victim)
+ return false, S("@1 is already dead.", victim)
end
end
if not killer == victim then
@@ -1138,12 +1287,12 @@ local function handle_kill_command(killer, victim)
end
-- Kill victim
victimref:set_hp(0)
- return true, string.format("%s has been killed.", victim)
+ return true, S("@1 has been killed.", victim)
end
core.register_chatcommand("kill", {
- params = "[<name>]",
- description = "Kill player or yourself",
+ params = S("[<name>]"),
+ description = S("Kill player or yourself"),
privs = {server=true},
func = function(name, param)
return handle_kill_command(name, param == "" and name or param)
diff --git a/builtin/game/falling.lua b/builtin/game/falling.lua
index 057d0d0ed..29cb56aae 100644
--- a/builtin/game/falling.lua
+++ b/builtin/game/falling.lua
@@ -39,7 +39,7 @@ local gravity = tonumber(core.settings:get("movement_gravity")) or 9.81
core.register_entity(":__builtin:falling_node", {
initial_properties = {
visual = "item",
- visual_size = {x = SCALE, y = SCALE, z = SCALE},
+ visual_size = vector.new(SCALE, SCALE, SCALE),
textures = {},
physical = true,
is_visible = false,
@@ -84,9 +84,6 @@ core.register_entity(":__builtin:falling_node", {
local textures
if def.tiles and def.tiles[1] then
local tile = def.tiles[1]
- if def.drawtype == "torchlike" and def.paramtype2 ~= "wallmounted" then
- tile = def.tiles[2] or def.tiles[1]
- end
if type(tile) == "table" then
tile = tile.name
end
@@ -99,7 +96,7 @@ core.register_entity(":__builtin:falling_node", {
local vsize
if def.visual_scale then
local s = def.visual_scale
- vsize = {x = s, y = s, z = s}
+ vsize = vector.new(s, s, s)
end
self.object:set_properties({
is_visible = true,
@@ -114,15 +111,21 @@ core.register_entity(":__builtin:falling_node", {
itemstring = core.itemstring_with_palette(itemstring, node.param2)
end
-- FIXME: solution needed for paramtype2 == "leveled"
- local vsize
- if def.visual_scale then
- local s = def.visual_scale * SCALE
- vsize = {x = s, y = s, z = s}
+ -- Calculate size of falling node
+ local s = {}
+ s.x = (def.visual_scale or 1) * SCALE
+ s.y = s.x
+ s.z = s.x
+ -- Compensate for wield_scale
+ if def.wield_scale then
+ s.x = s.x / def.wield_scale.x
+ s.y = s.y / def.wield_scale.y
+ s.z = s.z / def.wield_scale.z
end
self.object:set_properties({
is_visible = true,
wield_item = itemstring,
- visual_size = vsize,
+ visual_size = s,
glow = def.light_source,
})
end
@@ -147,11 +150,7 @@ core.register_entity(":__builtin:falling_node", {
-- Rotate entity
if def.drawtype == "torchlike" then
- if def.paramtype2 == "wallmounted" then
- self.object:set_yaw(math.pi*0.25)
- else
- self.object:set_yaw(-math.pi*0.25)
- end
+ self.object:set_yaw(math.pi*0.25)
elseif ((node.param2 ~= 0 or def.drawtype == "nodebox" or def.drawtype == "mesh")
and (def.wield_image == "" or def.wield_image == nil))
or def.drawtype == "signlike"
@@ -165,8 +164,13 @@ core.register_entity(":__builtin:falling_node", {
if euler then
self.object:set_rotation(euler)
end
- elseif (def.paramtype2 == "wallmounted" or def.paramtype2 == "colorwallmounted") then
+ elseif (def.drawtype ~= "plantlike" and def.drawtype ~= "plantlike_rooted" and
+ (def.paramtype2 == "wallmounted" or def.paramtype2 == "colorwallmounted" or def.drawtype == "signlike")) then
local rot = node.param2 % 8
+ if (def.drawtype == "signlike" and def.paramtype2 ~= "wallmounted" and def.paramtype2 ~= "colorwallmounted") then
+ -- Change rotation to "floor" by default for non-wallmounted paramtype2
+ rot = 1
+ end
local pitch, yaw, roll = 0, 0, 0
if def.drawtype == "nodebox" or def.drawtype == "mesh" then
if rot == 0 then
@@ -208,6 +212,14 @@ core.register_entity(":__builtin:falling_node", {
end
end
self.object:set_rotation({x=pitch, y=yaw, z=roll})
+ elseif (def.drawtype == "mesh" and def.paramtype2 == "degrotate") then
+ local p2 = (node.param2 - (def.place_param2 or 0)) % 240
+ local yaw = (p2 / 240) * (math.pi * 2)
+ self.object:set_yaw(yaw)
+ elseif (def.drawtype == "mesh" and def.paramtype2 == "colordegrotate") then
+ local p2 = (node.param2 % 32 - (def.place_param2 or 0) % 32) % 24
+ local yaw = (p2 / 24) * (math.pi * 2)
+ self.object:set_yaw(yaw)
end
end
end,
@@ -222,7 +234,7 @@ core.register_entity(":__builtin:falling_node", {
on_activate = function(self, staticdata)
self.object:set_armor_groups({immortal = 1})
- self.object:set_acceleration({x = 0, y = -gravity, z = 0})
+ self.object:set_acceleration(vector.new(0, -gravity, 0))
local ds = core.deserialize(staticdata)
if ds and ds.node then
@@ -298,7 +310,7 @@ core.register_entity(":__builtin:falling_node", {
if self.floats then
local pos = self.object:get_pos()
- local bcp = vector.round({x = pos.x, y = pos.y - 0.7, z = pos.z})
+ local bcp = pos:offset(0, -0.7, 0):round()
local bcn = core.get_node(bcp)
local bcd = core.registered_nodes[bcn.name]
@@ -339,13 +351,12 @@ core.register_entity(":__builtin:falling_node", {
-- TODO: this hack could be avoided in the future if objects
-- could choose who to collide with
local vel = self.object:get_velocity()
- self.object:set_velocity({
- x = vel.x,
- y = player_collision.old_velocity.y,
- z = vel.z
- })
- self.object:set_pos(vector.add(self.object:get_pos(),
- {x = 0, y = -0.5, z = 0}))
+ self.object:set_velocity(vector.new(
+ vel.x,
+ player_collision.old_velocity.y,
+ vel.z
+ ))
+ self.object:set_pos(self.object:get_pos():offset(0, -0.5, 0))
end
return
elseif bcn.name == "ignore" then
@@ -407,7 +418,7 @@ local function convert_to_falling_node(pos, node)
obj:get_luaentity():set_node(node, metatable)
core.remove_node(pos)
- return true
+ return true, obj
end
function core.spawn_falling_node(pos)
@@ -425,7 +436,7 @@ local function drop_attached_node(p)
if def and def.preserve_metadata then
local oldmeta = core.get_meta(p):to_table().fields
-- Copy pos and node because the callback can modify them.
- local pos_copy = {x=p.x, y=p.y, z=p.z}
+ local pos_copy = vector.new(p)
local node_copy = {name=n.name, param1=n.param1, param2=n.param2}
local drop_stacks = {}
for k, v in pairs(drops) do
@@ -450,14 +461,14 @@ end
function builtin_shared.check_attached_node(p, n)
local def = core.registered_nodes[n.name]
- local d = {x = 0, y = 0, z = 0}
+ local d = vector.new()
if def.paramtype2 == "wallmounted" or
def.paramtype2 == "colorwallmounted" then
-- The fallback vector here is in case 'wallmounted to dir' is nil due
-- to voxelmanip placing a wallmounted node without resetting a
-- pre-existing param2 value that is out-of-range for wallmounted.
-- The fallback vector corresponds to param2 = 0.
- d = core.wallmounted_to_dir(n.param2) or {x = 0, y = 1, z = 0}
+ d = core.wallmounted_to_dir(n.param2) or vector.new(0, 1, 0)
else
d.y = -1
end
@@ -477,7 +488,7 @@ end
function core.check_single_for_falling(p)
local n = core.get_node(p)
if core.get_item_group(n.name, "falling_node") ~= 0 then
- local p_bottom = {x = p.x, y = p.y - 1, z = p.z}
+ local p_bottom = vector.offset(p, 0, -1, 0)
-- Only spawn falling node if node below is loaded
local n_bottom = core.get_node_or_nil(p_bottom)
local d_bottom = n_bottom and core.registered_nodes[n_bottom.name]
@@ -516,17 +527,17 @@ end
-- Down first as likely case, but always before self. The same with sides.
-- Up must come last, so that things above self will also fall all at once.
local check_for_falling_neighbors = {
- {x = -1, y = -1, z = 0},
- {x = 1, y = -1, z = 0},
- {x = 0, y = -1, z = -1},
- {x = 0, y = -1, z = 1},
- {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},
- {x = 0, y = 0, z = 0},
- {x = 0, y = 1, z = 0},
+ vector.new(-1, -1, 0),
+ vector.new( 1, -1, 0),
+ vector.new( 0, -1, -1),
+ vector.new( 0, -1, 1),
+ vector.new( 0, -1, 0),
+ vector.new(-1, 0, 0),
+ vector.new( 1, 0, 0),
+ vector.new( 0, 0, 1),
+ vector.new( 0, 0, -1),
+ vector.new( 0, 0, 0),
+ vector.new( 0, 1, 0),
}
function core.check_for_falling(p)
diff --git a/builtin/game/features.lua b/builtin/game/features.lua
index 36ff1f0b0..583ef5092 100644
--- a/builtin/game/features.lua
+++ b/builtin/game/features.lua
@@ -19,6 +19,9 @@ core.features = {
object_step_has_moveresult = true,
direct_velocity_on_players = true,
use_texture_alpha_string_modes = true,
+ degrotate_240_steps = true,
+ abm_min_max_y = true,
+ dynamic_add_media_table = true,
}
function core.has_feature(arg)
diff --git a/builtin/game/forceloading.lua b/builtin/game/forceloading.lua
index e1e00920c..8043e5dea 100644
--- a/builtin/game/forceloading.lua
+++ b/builtin/game/forceloading.lua
@@ -86,12 +86,6 @@ local function read_file(filename)
return core.deserialize(t) or {}
end
-local function write_file(filename, table)
- local f = io.open(filename, "w")
- f:write(core.serialize(table))
- f:close()
-end
-
blocks_forceloaded = read_file(wpath.."/force_loaded.txt")
for _, __ in pairs(blocks_forceloaded) do
total_forceloaded = total_forceloaded + 1
@@ -106,7 +100,8 @@ end)
-- persists the currently forceloaded blocks to disk
local function persist_forceloaded_blocks()
- write_file(wpath.."/force_loaded.txt", blocks_forceloaded)
+ local data = core.serialize(blocks_forceloaded)
+ core.safe_file_write(wpath.."/force_loaded.txt", data)
end
-- periodical forceload persistence
diff --git a/builtin/game/init.lua b/builtin/game/init.lua
index 1d62be019..bb007fabd 100644
--- a/builtin/game/init.lua
+++ b/builtin/game/init.lua
@@ -7,8 +7,6 @@ local gamepath = scriptpath .. "game".. DIR_DELIM
-- not exposed to outer context
local builtin_shared = {}
-dofile(commonpath .. "vector.lua")
-
dofile(gamepath .. "constants.lua")
assert(loadfile(gamepath .. "item.lua"))(builtin_shared)
dofile(gamepath .. "register.lua")
diff --git a/builtin/game/item.lua b/builtin/game/item.lua
index b68177c22..5a83eafd2 100644
--- a/builtin/game/item.lua
+++ b/builtin/game/item.lua
@@ -92,12 +92,12 @@ end
-- Table of possible dirs
local facedir_to_dir = {
- {x= 0, y=0, z= 1},
- {x= 1, y=0, z= 0},
- {x= 0, y=0, z=-1},
- {x=-1, y=0, z= 0},
- {x= 0, y=-1, z= 0},
- {x= 0, y=1, z= 0},
+ vector.new( 0, 0, 1),
+ vector.new( 1, 0, 0),
+ vector.new( 0, 0, -1),
+ vector.new(-1, 0, 0),
+ vector.new( 0, -1, 0),
+ vector.new( 0, 1, 0),
}
-- Mapping from facedir value to index in facedir_to_dir.
local facedir_to_dir_map = {
@@ -136,12 +136,12 @@ end
-- table of dirs in wallmounted order
local wallmounted_to_dir = {
- [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},
+ [0] = vector.new( 0, 1, 0),
+ vector.new( 0, -1, 0),
+ vector.new( 1, 0, 0),
+ vector.new(-1, 0, 0),
+ vector.new( 0, 0, 1),
+ vector.new( 0, 0, -1),
}
function core.wallmounted_to_dir(wallmounted)
return wallmounted_to_dir[wallmounted % 8]
@@ -152,12 +152,12 @@ function core.dir_to_yaw(dir)
end
function core.yaw_to_dir(yaw)
- return {x = -math.sin(yaw), y = 0, z = math.cos(yaw)}
+ return vector.new(-math.sin(yaw), 0, math.cos(yaw))
end
function core.is_colored_paramtype(ptype)
return (ptype == "color") or (ptype == "colorfacedir") or
- (ptype == "colorwallmounted")
+ (ptype == "colorwallmounted") or (ptype == "colordegrotate")
end
function core.strip_param2_color(param2, paramtype2)
@@ -168,11 +168,25 @@ function core.strip_param2_color(param2, paramtype2)
param2 = math.floor(param2 / 32) * 32
elseif paramtype2 == "colorwallmounted" then
param2 = math.floor(param2 / 8) * 8
+ elseif paramtype2 == "colordegrotate" then
+ param2 = math.floor(param2 / 32) * 32
end
-- paramtype2 == "color" requires no modification.
return param2
end
+local function has_all_groups(tbl, required_groups)
+ if type(required_groups) == "string" then
+ return (tbl[required_groups] or 0) ~= 0
+ end
+ for _, group in ipairs(required_groups) do
+ if (tbl[group] or 0) == 0 then
+ return false
+ end
+ end
+ return true
+end
+
function core.get_node_drops(node, toolname)
-- Compatibility, if node is string
local nodename = node
@@ -212,7 +226,7 @@ function core.get_node_drops(node, toolname)
if item.rarity ~= nil then
good_rarity = item.rarity < 1 or math.random(item.rarity) == 1
end
- if item.tools ~= nil then
+ if item.tools ~= nil or item.tool_groups ~= nil then
good_tool = false
end
if item.tools ~= nil and toolname then
@@ -227,6 +241,27 @@ function core.get_node_drops(node, toolname)
end
end
end
+ if item.tool_groups ~= nil and toolname then
+ local tooldef = core.registered_items[toolname]
+ if tooldef ~= nil and type(tooldef.groups) == "table" then
+ if type(item.tool_groups) == "string" then
+ -- tool_groups can be a string which specifies the required group
+ good_tool = core.get_item_group(toolname, item.tool_groups) ~= 0
+ else
+ -- tool_groups can be a list of sufficient requirements.
+ -- i.e. if any item in the list can be satisfied then the tool is good
+ assert(type(item.tool_groups) == "table")
+ for _, required_groups in ipairs(item.tool_groups) do
+ -- required_groups can be either a string (a single group),
+ -- or an array of strings where all must be in tooldef.groups
+ good_tool = has_all_groups(tooldef.groups, required_groups)
+ if good_tool then
+ break
+ end
+ end
+ end
+ end
+ end
if good_rarity and good_tool then
got_count = got_count + 1
for _, add_item in ipairs(item.items) do
@@ -288,12 +323,12 @@ function core.item_place_node(itemstack, placer, pointed_thing, param2,
end
-- Place above pointed node
- local place_to = {x = above.x, y = above.y, z = above.z}
+ local place_to = vector.new(above)
-- If node under is buildable_to, place into it instead (eg. snow)
if olddef_under.buildable_to then
log("info", "node under is buildable to")
- place_to = {x = under.x, y = under.y, z = under.z}
+ place_to = vector.new(under)
end
if core.is_protected(place_to, playername) then
@@ -313,22 +348,14 @@ function core.item_place_node(itemstack, placer, pointed_thing, param2,
newnode.param2 = def.place_param2
elseif (def.paramtype2 == "wallmounted" or
def.paramtype2 == "colorwallmounted") and not param2 then
- local dir = {
- x = under.x - above.x,
- y = under.y - above.y,
- z = under.z - above.z
- }
+ local dir = vector.subtract(under, above)
newnode.param2 = core.dir_to_wallmounted(dir)
-- Calculate the direction for furnaces and chests and stuff
elseif (def.paramtype2 == "facedir" or
def.paramtype2 == "colorfacedir") and not param2 then
local placer_pos = placer and placer:get_pos()
if placer_pos then
- local dir = {
- x = above.x - placer_pos.x,
- y = above.y - placer_pos.y,
- z = above.z - placer_pos.z
- }
+ local dir = vector.subtract(above, placer_pos)
newnode.param2 = core.dir_to_facedir(dir)
log("info", "facedir: " .. newnode.param2)
end
@@ -345,6 +372,8 @@ function core.item_place_node(itemstack, placer, pointed_thing, param2,
color_divisor = 8
elseif def.paramtype2 == "colorfacedir" then
color_divisor = 32
+ elseif def.paramtype2 == "colordegrotate" then
+ color_divisor = 32
end
if color_divisor then
local color = math.floor(metatable.palette_index / color_divisor)
@@ -380,7 +409,7 @@ function core.item_place_node(itemstack, placer, pointed_thing, param2,
-- Run callback
if def.after_place_node and not prevent_after_place then
-- Deepcopy place_to and pointed_thing because callback can modify it
- local place_to_copy = {x=place_to.x, y=place_to.y, z=place_to.z}
+ local place_to_copy = vector.new(place_to)
local pointed_thing_copy = copy_pointed_thing(pointed_thing)
if def.after_place_node(place_to_copy, placer, itemstack,
pointed_thing_copy) then
@@ -391,7 +420,7 @@ function core.item_place_node(itemstack, placer, pointed_thing, param2,
-- Run script hook
for _, callback in ipairs(core.registered_on_placenodes) do
-- Deepcopy pos, node and pointed_thing because callback can modify them
- local place_to_copy = {x=place_to.x, y=place_to.y, z=place_to.z}
+ local place_to_copy = vector.new(place_to)
local newnode_copy = {name=newnode.name, param1=newnode.param1, param2=newnode.param2}
local oldnode_copy = {name=oldnode.name, param1=oldnode.param1, param2=oldnode.param2}
local pointed_thing_copy = copy_pointed_thing(pointed_thing)
@@ -470,34 +499,41 @@ function core.do_item_eat(hp_change, replace_with_item, itemstack, user, pointed
return result
end
end
+ -- read definition before potentially emptying the stack
local def = itemstack:get_definition()
- if itemstack:take_item() ~= nil then
- user:set_hp(user:get_hp() + hp_change)
-
- if def and def.sound and def.sound.eat then
- core.sound_play(def.sound.eat, {
- pos = user:get_pos(),
- max_hear_distance = 16
- }, true)
- end
+ if itemstack:take_item():is_empty() then
+ return itemstack
+ end
+
+ if def and def.sound and def.sound.eat then
+ core.sound_play(def.sound.eat, {
+ pos = user:get_pos(),
+ max_hear_distance = 16
+ }, true)
+ end
- if replace_with_item then
- if itemstack:is_empty() then
- itemstack:add_item(replace_with_item)
+ -- Changing hp might kill the player causing mods to do who-knows-what to the
+ -- inventory, so do this before set_hp().
+ if replace_with_item then
+ if itemstack:is_empty() then
+ itemstack:add_item(replace_with_item)
+ else
+ local inv = user:get_inventory()
+ -- Check if inv is null, since non-players don't have one
+ if inv and inv:room_for_item("main", {name=replace_with_item}) then
+ inv:add_item("main", replace_with_item)
else
- local inv = user:get_inventory()
- -- Check if inv is null, since non-players don't have one
- if inv and inv:room_for_item("main", {name=replace_with_item}) then
- inv:add_item("main", replace_with_item)
- else
- local pos = user:get_pos()
- pos.y = math.floor(pos.y + 0.5)
- core.add_item(pos, replace_with_item)
- end
+ local pos = user:get_pos()
+ pos.y = math.floor(pos.y + 0.5)
+ core.add_item(pos, replace_with_item)
end
end
end
- return itemstack
+ user:set_wielded_item(itemstack)
+
+ user:set_hp(user:get_hp() + hp_change)
+
+ return nil -- don't overwrite wield item a second time
end
function core.item_eat(hp_change, replace_with_item)
@@ -537,11 +573,11 @@ function core.handle_node_drops(pos, drops, digger)
for _, dropped_item in pairs(drops) do
local left = give_item(dropped_item)
if not left:is_empty() then
- local p = {
- x = pos.x + math.random()/2-0.25,
- y = pos.y + math.random()/2-0.25,
- z = pos.z + math.random()/2-0.25,
- }
+ local p = vector.offset(pos,
+ math.random()/2-0.25,
+ math.random()/2-0.25,
+ math.random()/2-0.25
+ )
core.add_item(p, left)
end
end
@@ -578,7 +614,7 @@ function core.node_dig(pos, node, digger)
if wielded then
local wdef = wielded:get_definition()
local tp = wielded:get_tool_capabilities()
- local dp = core.get_dig_params(def and def.groups, tp)
+ local dp = core.get_dig_params(def and def.groups, tp, wielded:get_wear())
if wdef and wdef.after_use then
wielded = wdef.after_use(wielded, digger, node, dp) or wielded
else
@@ -600,7 +636,7 @@ function core.node_dig(pos, node, digger)
if def and def.preserve_metadata then
local oldmeta = core.get_meta(pos):to_table().fields
-- Copy pos and node because the callback can modify them.
- local pos_copy = {x=pos.x, y=pos.y, z=pos.z}
+ local pos_copy = vector.new(pos)
local node_copy = {name=node.name, param1=node.param1, param2=node.param2}
local drop_stacks = {}
for k, v in pairs(drops) do
@@ -632,7 +668,7 @@ function core.node_dig(pos, node, digger)
-- Run callback
if def and def.after_dig_node then
-- Copy pos and node because callback can modify them
- local pos_copy = {x=pos.x, y=pos.y, z=pos.z}
+ local pos_copy = vector.new(pos)
local node_copy = {name=node.name, param1=node.param1, param2=node.param2}
def.after_dig_node(pos_copy, node_copy, oldmetadata, digger)
end
@@ -645,7 +681,7 @@ function core.node_dig(pos, node, digger)
end
-- Copy pos and node because callback can modify them
- local pos_copy = {x=pos.x, y=pos.y, z=pos.z}
+ local pos_copy = vector.new(pos)
local node_copy = {name=node.name, param1=node.param1, param2=node.param2}
callback(pos_copy, node_copy, digger)
end
@@ -688,7 +724,7 @@ core.nodedef_default = {
groups = {},
inventory_image = "",
wield_image = "",
- wield_scale = {x=1,y=1,z=1},
+ wield_scale = vector.new(1, 1, 1),
stack_max = default_stack_max,
usable = false,
liquids_pointable = false,
@@ -747,7 +783,7 @@ core.craftitemdef_default = {
groups = {},
inventory_image = "",
wield_image = "",
- wield_scale = {x=1,y=1,z=1},
+ wield_scale = vector.new(1, 1, 1),
stack_max = default_stack_max,
liquids_pointable = false,
tool_capabilities = nil,
@@ -766,7 +802,7 @@ core.tooldef_default = {
groups = {},
inventory_image = "",
wield_image = "",
- wield_scale = {x=1,y=1,z=1},
+ wield_scale = vector.new(1, 1, 1),
stack_max = 1,
liquids_pointable = false,
tool_capabilities = nil,
@@ -785,7 +821,7 @@ core.noneitemdef_default = { -- This is used for the hand and unknown items
groups = {},
inventory_image = "",
wield_image = "",
- wield_scale = {x=1,y=1,z=1},
+ wield_scale = vector.new(1, 1, 1),
stack_max = default_stack_max,
liquids_pointable = false,
tool_capabilities = nil,
diff --git a/builtin/game/misc.lua b/builtin/game/misc.lua
index b8c5e16a9..e86efc50c 100644
--- a/builtin/game/misc.lua
+++ b/builtin/game/misc.lua
@@ -1,9 +1,21 @@
-- Minetest: builtin/misc.lua
+local S = core.get_translator("__builtin")
+
--
-- Misc. API functions
--
+-- @spec core.kick_player(String, String) :: Boolean
+function core.kick_player(player_name, reason)
+ if type(reason) == "string" then
+ reason = "Kicked: " .. reason
+ else
+ reason = "Kicked."
+ end
+ return core.disconnect_player(player_name, reason)
+end
+
function core.check_player_privs(name, ...)
if core.is_player(name) then
name = name:get_player_name()
@@ -42,15 +54,15 @@ end
function core.send_join_message(player_name)
if not core.is_singleplayer() then
- core.chat_send_all("*** " .. player_name .. " joined the game.")
+ core.chat_send_all("*** " .. S("@1 joined the game.", player_name))
end
end
function core.send_leave_message(player_name, timed_out)
- local announcement = "*** " .. player_name .. " left the game."
+ local announcement = "*** " .. S("@1 left the game.", player_name)
if timed_out then
- announcement = announcement .. " (timed out)"
+ announcement = "*** " .. S("@1 left the game (timed out).", player_name)
end
core.chat_send_all(announcement)
end
@@ -117,13 +129,12 @@ end
function core.get_position_from_hash(hash)
- local pos = {}
- pos.x = (hash % 65536) - 32768
+ local x = (hash % 65536) - 32768
hash = math.floor(hash / 65536)
- pos.y = (hash % 65536) - 32768
+ local y = (hash % 65536) - 32768
hash = math.floor(hash / 65536)
- pos.z = (hash % 65536) - 32768
- return pos
+ local z = (hash % 65536) - 32768
+ return vector.new(x, y, z)
end
@@ -213,7 +224,7 @@ function core.is_area_protected(minp, maxp, player_name, interval)
local y = math.floor(yf + 0.5)
for xf = minp.x, maxp.x, d.x do
local x = math.floor(xf + 0.5)
- local pos = {x = x, y = y, z = z}
+ local pos = vector.new(x, y, z)
if core.is_protected(pos, player_name) then
return pos
end
@@ -239,7 +250,7 @@ end
-- HTTP callback interface
-function core.http_add_fetch(httpenv)
+core.set_http_api_lua(function(httpenv)
httpenv.fetch = function(req, callback)
local handle = httpenv.fetch_async(req)
@@ -255,7 +266,8 @@ function core.http_add_fetch(httpenv)
end
return httpenv
-end
+end)
+core.set_http_api_lua = nil
function core.close_formspec(player_name, formname)
@@ -268,24 +280,44 @@ function core.cancel_shutdown_requests()
end
--- Callback handling for dynamic_add_media
+-- Used for callback handling with dynamic_add_media
+core.dynamic_media_callbacks = {}
+
-local dynamic_add_media_raw = core.dynamic_add_media_raw
-core.dynamic_add_media_raw = nil
-function core.dynamic_add_media(filepath, callback)
- local ret = dynamic_add_media_raw(filepath)
- if ret == false then
- return ret
+-- PNG encoder safety wrapper
+
+local o_encode_png = core.encode_png
+function core.encode_png(width, height, data, compression)
+ if type(width) ~= "number" then
+ error("Incorrect type for 'width', expected number, got " .. type(width))
end
- if callback == nil then
- core.log("deprecated", "Calling minetest.dynamic_add_media without "..
- "a callback is deprecated and will stop working in future versions.")
- else
- -- At the moment async loading is not actually implemented, so we
- -- immediately call the callback ourselves
- for _, name in ipairs(ret) do
- callback(name)
+ if type(height) ~= "number" then
+ error("Incorrect type for 'height', expected number, got " .. type(height))
+ end
+
+ local expected_byte_count = width * height * 4
+
+ if type(data) ~= "table" and type(data) ~= "string" then
+ error("Incorrect type for 'data', expected table or string, got " .. type(data))
+ end
+
+ local data_length = type(data) == "table" and #data * 4 or string.len(data)
+
+ if data_length ~= expected_byte_count then
+ error(string.format(
+ "Incorrect length of 'data', width and height imply %d bytes but %d were provided",
+ expected_byte_count,
+ data_length
+ ))
+ end
+
+ if type(data) == "table" then
+ local dataBuf = {}
+ for i = 1, #data do
+ dataBuf[i] = core.colorspec_to_bytes(data[i])
end
+ data = table.concat(dataBuf)
end
- return true
+
+ return o_encode_png(width, height, data, compression or 6)
end
diff --git a/builtin/game/privileges.lua b/builtin/game/privileges.lua
index c7417d2f4..2ff4c093c 100644
--- a/builtin/game/privileges.lua
+++ b/builtin/game/privileges.lua
@@ -1,5 +1,7 @@
-- Minetest: builtin/privileges.lua
+local S = core.get_translator("__builtin")
+
--
-- Privileges
--
@@ -15,7 +17,7 @@ function core.register_privilege(name, param)
def.give_to_admin = def.give_to_singleplayer
end
if def.description == nil then
- def.description = "(no description)"
+ def.description = S("(no description)")
end
end
local def
@@ -28,71 +30,76 @@ function core.register_privilege(name, param)
core.registered_privileges[name] = def
end
-core.register_privilege("interact", "Can interact with things and modify the world")
-core.register_privilege("shout", "Can speak in chat")
-core.register_privilege("basic_privs", "Can modify 'shout' and 'interact' privileges")
-core.register_privilege("privs", "Can modify privileges")
+core.register_privilege("interact", S("Can interact with things and modify the world"))
+core.register_privilege("shout", S("Can speak in chat"))
+
+local basic_privs =
+ core.string_to_privs((core.settings:get("basic_privs") or "shout,interact"))
+local basic_privs_desc = S("Can modify basic privileges (@1)",
+ core.privs_to_string(basic_privs, ', '))
+core.register_privilege("basic_privs", basic_privs_desc)
+
+core.register_privilege("privs", S("Can modify privileges"))
core.register_privilege("teleport", {
- description = "Can teleport self",
+ description = S("Can teleport self"),
give_to_singleplayer = false,
})
core.register_privilege("bring", {
- description = "Can teleport other players",
+ description = S("Can teleport other players"),
give_to_singleplayer = false,
})
core.register_privilege("settime", {
- description = "Can set the time of day using /time",
+ description = S("Can set the time of day using /time"),
give_to_singleplayer = false,
})
core.register_privilege("server", {
- description = "Can do server maintenance stuff",
+ description = S("Can do server maintenance stuff"),
give_to_singleplayer = false,
give_to_admin = true,
})
core.register_privilege("protection_bypass", {
- description = "Can bypass node protection in the world",
+ description = S("Can bypass node protection in the world"),
give_to_singleplayer = false,
})
core.register_privilege("ban", {
- description = "Can ban and unban players",
+ description = S("Can ban and unban players"),
give_to_singleplayer = false,
give_to_admin = true,
})
core.register_privilege("kick", {
- description = "Can kick players",
+ description = S("Can kick players"),
give_to_singleplayer = false,
give_to_admin = true,
})
core.register_privilege("give", {
- description = "Can use /give and /giveme",
+ description = S("Can use /give and /giveme"),
give_to_singleplayer = false,
})
core.register_privilege("password", {
- description = "Can use /setpassword and /clearpassword",
+ description = S("Can use /setpassword and /clearpassword"),
give_to_singleplayer = false,
give_to_admin = true,
})
core.register_privilege("fly", {
- description = "Can use fly mode",
+ description = S("Can use fly mode"),
give_to_singleplayer = false,
})
core.register_privilege("fast", {
- description = "Can use fast mode",
+ description = S("Can use fast mode"),
give_to_singleplayer = false,
})
core.register_privilege("noclip", {
- description = "Can fly through solid nodes using noclip mode",
+ description = S("Can fly through solid nodes using noclip mode"),
give_to_singleplayer = false,
})
core.register_privilege("rollback", {
- description = "Can use the rollback functionality",
+ description = S("Can use the rollback functionality"),
give_to_singleplayer = false,
})
core.register_privilege("debug", {
- description = "Allows enabling various debug options that may affect gameplay",
+ description = S("Can enable wireframe"),
give_to_singleplayer = false,
- give_to_admin = true,
})
core.register_can_bypass_userlimit(function(name, ip)
diff --git a/builtin/game/register.lua b/builtin/game/register.lua
index 1cff85813..56e40c75c 100644
--- a/builtin/game/register.lua
+++ b/builtin/game/register.lua
@@ -1,5 +1,7 @@
-- Minetest: builtin/misc_register.lua
+local S = core.get_translator("__builtin")
+
--
-- Make raw registration functions inaccessible to anyone except this file
--
@@ -326,7 +328,7 @@ end
core.register_item(":unknown", {
type = "none",
- description = "Unknown Item",
+ description = S("Unknown Item"),
inventory_image = "unknown_item.png",
on_place = core.item_place,
on_secondary_use = core.item_secondary_use,
@@ -336,7 +338,7 @@ core.register_item(":unknown", {
})
core.register_node(":air", {
- description = "Air",
+ description = S("Air"),
inventory_image = "air.png",
wield_image = "air.png",
drawtype = "airlike",
@@ -353,7 +355,7 @@ core.register_node(":air", {
})
core.register_node(":ignore", {
- description = "Ignore",
+ description = S("Ignore"),
inventory_image = "ignore.png",
wield_image = "ignore.png",
drawtype = "airlike",
@@ -366,11 +368,12 @@ core.register_node(":ignore", {
air_equivalent = true,
drop = "",
groups = {not_in_creative_inventory=1},
+ node_placement_prediction = "",
on_place = function(itemstack, placer, pointed_thing)
core.chat_send_player(
placer:get_player_name(),
core.colorize("#FF0000",
- "You can't place 'ignore' nodes!"))
+ S("You can't place 'ignore' nodes!")))
return ""
end,
})
@@ -607,6 +610,7 @@ core.registered_on_modchannel_message, core.register_on_modchannel_message = mak
core.registered_on_player_inventory_actions, core.register_on_player_inventory_action = make_registration()
core.registered_allow_player_inventory_actions, core.register_allow_player_inventory_action = make_registration()
core.registered_on_rightclickplayers, core.register_on_rightclickplayer = make_registration()
+core.registered_on_liquid_transformed, core.register_on_liquid_transformed = make_registration()
--
-- Compatibility for on_mapgen_init()
diff --git a/builtin/game/voxelarea.lua b/builtin/game/voxelarea.lua
index 724761414..64436bf1a 100644
--- a/builtin/game/voxelarea.lua
+++ b/builtin/game/voxelarea.lua
@@ -1,6 +1,6 @@
VoxelArea = {
- MinEdge = {x=1, y=1, z=1},
- MaxEdge = {x=0, y=0, z=0},
+ MinEdge = vector.new(1, 1, 1),
+ MaxEdge = vector.new(0, 0, 0),
ystride = 0,
zstride = 0,
}
@@ -19,11 +19,11 @@ end
function VoxelArea:getExtent()
local MaxEdge, MinEdge = self.MaxEdge, self.MinEdge
- return {
- x = MaxEdge.x - MinEdge.x + 1,
- y = MaxEdge.y - MinEdge.y + 1,
- z = MaxEdge.z - MinEdge.z + 1,
- }
+ return vector.new(
+ MaxEdge.x - MinEdge.x + 1,
+ MaxEdge.y - MinEdge.y + 1,
+ MaxEdge.z - MinEdge.z + 1
+ )
end
function VoxelArea:getVolume()
diff --git a/builtin/init.lua b/builtin/init.lua
index 89b1fdc64..7a9b5c427 100644
--- a/builtin/init.lua
+++ b/builtin/init.lua
@@ -30,6 +30,7 @@ local clientpath = scriptdir .. "client" .. DIR_DELIM
local commonpath = scriptdir .. "common" .. DIR_DELIM
local asyncpath = scriptdir .. "async" .. DIR_DELIM
+dofile(commonpath .. "vector.lua")
dofile(commonpath .. "strict.lua")
dofile(commonpath .. "serialize.lua")
dofile(commonpath .. "misc_helpers.lua")
diff --git a/builtin/locale/__builtin.de.tr b/builtin/locale/__builtin.de.tr
new file mode 100644
index 000000000..1b29f81e7
--- /dev/null
+++ b/builtin/locale/__builtin.de.tr
@@ -0,0 +1,245 @@
+# textdomain: __builtin
+Empty command.=Leerer Befehl.
+Invalid command: @1=Ungültiger Befehl: @1
+Invalid command usage.=Ungültige Befehlsverwendung.
+ (@1 s)= (@1 s)
+Command execution took @1 s=Befehlsausführung brauchte @1 s
+You don't have permission to run this command (missing privileges: @1).=Sie haben keine Erlaubnis, diesen Befehl auszuführen (fehlende Privilegien: @1).
+Unable to get position of player @1.=Konnte Position vom Spieler @1 nicht ermitteln.
+Incorrect area format. Expected: (x1,y1,z1) (x2,y2,z2)=Ungültiges Gebietsformat. Erwartet: (x1,y1,z1) (x2,y2,z2)
+<action>=<Aktion>
+Show chat action (e.g., '/me orders a pizza' displays '<player name> orders a pizza')=Chataktion zeigen (z.B. wird „/me isst Pizza“ zu „<Spielername> isst Pizza“)
+Show the name of the server owner=Den Namen des Servereigentümers zeigen
+The administrator of this server is @1.=Der Administrator dieses Servers ist @1.
+There's no administrator named in the config file.=In der Konfigurationsdatei wurde kein Administrator angegeben.
+@1 does not have any privileges.=@1 hat keine Privilegien.
+Privileges of @1: @2=Privilegien von @1: @2
+[<name>]=[<Name>]
+Show privileges of yourself or another player=Ihre eigenen Privilegien oder die eines anderen Spielers anzeigen
+Player @1 does not exist.=Spieler @1 existiert nicht.
+<privilege>=<Privileg>
+Return list of all online players with privilege=Liste aller Spieler mit einem Privileg ausgeben
+Invalid parameters (see /help haspriv).=Ungültige Parameter (siehe „/help haspriv“).
+Unknown privilege!=Unbekanntes Privileg!
+No online player has the "@1" privilege.=Kein online spielender Spieler hat das „@1“-Privileg.
+Players online with the "@1" privilege: @2=Derzeit online spielende Spieler mit dem „@1“-Privileg: @2
+Your privileges are insufficient.=Ihre Privilegien sind unzureichend.
+Your privileges are insufficient. '@1' only allows you to grant: @2=Ihre Privilegien sind unzureichend. Mit „@1“ können Sie nur folgendes gewähren: @2
+Unknown privilege: @1=Unbekanntes Privileg: @1
+@1 granted you privileges: @2=@1 gewährte Ihnen Privilegien: @2
+<name> (<privilege> [, <privilege2> [<...>]] | all)=<Name> (<Privileg> [, <Privileg2> [<...>]] | all)
+Give privileges to player=Privileg an Spieler vergeben
+Invalid parameters (see /help grant).=Ungültige Parameter (siehe „/help grant“).
+<privilege> [, <privilege2> [<...>]] | all=<Privileg> [, <Privileg2> [<...>]] | all
+Grant privileges to yourself=Privilegien an Ihnen selbst vergeben
+Invalid parameters (see /help grantme).=Ungültige Parameter (siehe „/help grantme“).
+Your privileges are insufficient. '@1' only allows you to revoke: @2=Ihre Privilegien sind unzureichend. Mit „@1“ können Sie nur folgendes entziehen: @2
+Note: Cannot revoke in singleplayer: @1=Anmerkung: Im Einzelspielermodus kann man folgendes nicht entziehen: @1
+Note: Cannot revoke from admin: @1=Anmerkung: Vom Admin kann man folgendes nicht entziehen: @1
+No privileges were revoked.=Es wurden keine Privilegien entzogen.
+@1 revoked privileges from you: @2=@1 entfernte Privilegien von Ihnen: @2
+Remove privileges from player=Privilegien von Spieler entfernen
+Invalid parameters (see /help revoke).=Ungültige Parameter (siehe „/help revoke“).
+Revoke privileges from yourself=Privilegien von Ihnen selbst entfernen
+Invalid parameters (see /help revokeme).=Ungültige Parameter (siehe „/help revokeme“).
+<name> <password>=<Name> <Passwort>
+Set player's password=Passwort von Spieler setzen
+Name field required.=Namensfeld benötigt.
+Your password was cleared by @1.=Ihr Passwort wurde von @1 geleert.
+Password of player "@1" cleared.=Passwort von Spieler „@1“ geleert.
+Your password was set by @1.=Ihr Passwort wurde von @1 gesetzt.
+Password of player "@1" set.=Passwort von Spieler „@1“ gesetzt.
+<name>=<Name>
+Set empty password for a player=Leeres Passwort für einen Spieler setzen
+Reload authentication data=Authentifizierungsdaten erneut laden
+Done.=Fertig.
+Failed.=Fehlgeschlagen.
+Remove a player's data=Daten eines Spielers löschen
+Player "@1" removed.=Spieler „@1“ gelöscht.
+No such player "@1" to remove.=Es gibt keinen Spieler „@1“, der gelöscht werden könnte.
+Player "@1" is connected, cannot remove.=Spieler „@1“ ist verbunden, er kann nicht gelöscht werden.
+Unhandled remove_player return code @1.=Nicht berücksichtigter remove_player-Rückgabewert @1.
+Cannot teleport out of map bounds!=Eine Teleportation außerhalb der Kartengrenzen ist nicht möglich!
+Cannot get player with name @1.=Spieler mit Namen @1 kann nicht gefunden werden.
+Cannot teleport, @1 is attached to an object!=Teleportation nicht möglich, @1 ist an einem Objekt befestigt!
+Teleporting @1 to @2.=Teleportation von @1 nach @2
+One does not teleport to oneself.=Man teleportiert sich doch nicht zu sich selbst.
+Cannot get teleportee with name @1.=Der zu teleportierende Spieler mit Namen @1 kann nicht gefunden werden.
+Cannot get target player with name @1.=Zielspieler mit Namen @1 kann nicht gefunden werden.
+Teleporting @1 to @2 at @3.=Teleportation von @1 zu @2 bei @3
+<X>,<Y>,<Z> | <to_name> | <name> <X>,<Y>,<Z> | <name> <to_name>=<X>,<Y>,<Z> | <zu_Name> | <Name> <X>,<Y>,<Z> | <Name> <zu_Name>
+Teleport to position or player=Zu Position oder Spieler teleportieren
+You don't have permission to teleport other players (missing privilege: @1).=Sie haben nicht die Erlaubnis, andere Spieler zu teleportieren (fehlendes Privileg: @1).
+([-n] <name> <value>) | <name>=([-n] <Name> <Wert>) | <Name>
+Set or read server configuration setting=Serverkonfigurationseinstellung setzen oder lesen
+Failed. Use '/set -n <name> <value>' to create a new setting.=Fehlgeschlagen. Benutzen Sie „/set -n <Name> <Wert>“, um eine neue Einstellung zu erstellen.
+@1 @= @2=@1 @= @2
+<not set>=<nicht gesetzt>
+Invalid parameters (see /help set).=Ungültige Parameter (siehe „/help set“).
+Finished emerging @1 blocks in @2ms.=Fertig mit Erzeugung von @1 Blöcken in @2 ms.
+emergeblocks update: @1/@2 blocks emerged (@3%)=emergeblocks-Update: @1/@2 Kartenblöcke geladen (@3%)
+(here [<radius>]) | (<pos1> <pos2>)=(here [<Radius>]) | (<Pos1> <Pos2>)
+Load (or, if nonexistent, generate) map blocks contained in area pos1 to pos2 (<pos1> and <pos2> must be in parentheses)=Lade (oder, wenn nicht existent, generiere) Kartenblöcke im Gebiet zwischen Pos1 und Pos2 (<Pos1> und <Pos2> müssen in Klammern stehen)
+Started emerge of area ranging from @1 to @2.=Start des Ladevorgangs des Gebiets zwischen @1 und @2.
+Delete map blocks contained in area pos1 to pos2 (<pos1> and <pos2> must be in parentheses)=Kartenblöcke innerhalb des Gebiets zwischen Pos1 und Pos2 löschen (<Pos1> und <Pos2> müssen in Klammern stehen)
+Successfully cleared area ranging from @1 to @2.=Gebiet zwischen @1 und @2 erfolgreich geleert.
+Failed to clear one or more blocks in area.=Fehlgeschlagen: Ein oder mehrere Kartenblöcke im Gebiet konnten nicht geleert werden.
+Resets lighting in the area between pos1 and pos2 (<pos1> and <pos2> must be in parentheses)=Setzt das Licht im Gebiet zwischen Pos1 und Pos2 zurück (<Pos1> und <Pos2> müssen in Klammern stehen)
+Successfully reset light in the area ranging from @1 to @2.=Das Licht im Gebiet zwischen @1 und @2 wurde erfolgreich zurückgesetzt.
+Failed to load one or more blocks in area.=Fehlgeschlagen: Ein oder mehrere Kartenblöcke im Gebiet konnten nicht geladen werden.
+List mods installed on the server=Installierte Mods auf dem Server auflisten
+No mods installed.=Es sind keine Mods installiert.
+Cannot give an empty item.=Ein leerer Gegenstand kann nicht gegeben werden.
+Cannot give an unknown item.=Ein unbekannter Gegenstand kann nicht gegeben werden.
+Giving 'ignore' is not allowed.=„ignore“ darf nicht gegeben werden.
+@1 is not a known player.=@1 ist kein bekannter Spieler.
+@1 partially added to inventory.=@1 teilweise ins Inventar eingefügt.
+@1 could not be added to inventory.=@1 konnte nicht ins Inventar eingefügt werden.
+@1 added to inventory.=@1 zum Inventar hinzugefügt.
+@1 partially added to inventory of @2.=@1 teilweise ins Inventar von @2 eingefügt.
+@1 could not be added to inventory of @2.=@1 konnte nicht ins Inventar von @2 eingefügt werden.
+@1 added to inventory of @2.=@1 ins Inventar von @2 eingefügt.
+<name> <ItemString> [<count> [<wear>]]=<Name> <ItemString> [<Anzahl> [<Abnutzung>]]
+Give item to player=Gegenstand an Spieler geben
+Name and ItemString required.=Name und ItemString benötigt.
+<ItemString> [<count> [<wear>]]=<ItemString> [<Anzahl> [<Abnutzung>]]
+Give item to yourself=Gegenstand Ihnen selbst geben
+ItemString required.=ItemString benötigt.
+<EntityName> [<X>,<Y>,<Z>]=<EntityName> [<X>,<Y>,<Z>]
+Spawn entity at given (or your) position=Entity an angegebener (oder Ihrer eigenen) Position spawnen
+EntityName required.=EntityName benötigt.
+Unable to spawn entity, player is nil.=Entity konnte nicht gespawnt werden, Spieler ist nil.
+Cannot spawn an unknown entity.=Ein unbekanntes Entity kann nicht gespawnt werden.
+Invalid parameters (@1).=Ungültige Parameter (@1).
+@1 spawned.=@1 gespawnt.
+@1 failed to spawn.=@1 konnte nicht gespawnt werden.
+Destroy item in hand=Gegenstand in der Hand zerstören
+Unable to pulverize, no player.=Konnte nicht pulverisieren, kein Spieler.
+Unable to pulverize, no item in hand.=Konnte nicht pulverisieren, kein Gegenstand in der Hand.
+An item was pulverized.=Ein Gegenstand wurde pulverisiert.
+[<range>] [<seconds>] [<limit>]=[<Reichweite>] [<Sekunden>] [<Limit>]
+Check who last touched a node or a node near it within the time specified by <seconds>. Default: range @= 0, seconds @= 86400 @= 24h, limit @= 5. Set <seconds> to inf for no time limit=Überprüfen, wer als letztes einen Node oder einen Node in der Nähe innerhalb der in <Sekunden> angegebenen Zeitspanne angefasst hat. Standard: Reichweite @= 0, Sekunden @= 86400 @= 24h, Limit @= 5. <Sekunden> auf „inf“ setzen, um Zeitlimit zu deaktivieren.
+Rollback functions are disabled.=Rollback-Funktionen sind deaktiviert.
+That limit is too high!=Dieses Limit ist zu hoch!
+Checking @1 ...=Überprüfe @1 ...
+Nobody has touched the specified location in @1 seconds.=Niemand hat die angegebene Position seit @1 Sekunden angefasst.
+@1 @2 @3 -> @4 @5 seconds ago.=@1 @2 @3 -> @4 vor @5 Sekunden.
+Punch a node (range@=@1, seconds@=@2, limit@=@3).=Hauen Sie einen Node (Reichweite@=@1, Sekunden@=@2, Limit@=@3).
+(<name> [<seconds>]) | (:<actor> [<seconds>])=(<Name> [<Sekunden>]) | (:<Akteur> [<Sekunden>])
+Revert actions of a player. Default for <seconds> is 60. Set <seconds> to inf for no time limit=Aktionen eines Spielers zurückrollen. Standard für <Sekunden> ist 60. <Sekunden> auf „inf“ setzen, um Zeitlimit zu deaktivieren
+Invalid parameters. See /help rollback and /help rollback_check.=Ungültige Parameter. Siehe /help rollback und /help rollback_check.
+Reverting actions of player '@1' since @2 seconds.=Die Aktionen des Spielers „@1“ seit @2 Sekunden werden rückgängig gemacht.
+Reverting actions of @1 since @2 seconds.=Die Aktionen von @1 seit @2 Sekunden werden rückgängig gemacht.
+(log is too long to show)=(Protokoll ist zu lang für die Anzeige)
+Reverting actions succeeded.=Die Aktionen wurden erfolgreich rückgängig gemacht.
+Reverting actions FAILED.=FEHLGESCHLAGEN: Die Aktionen konnten nicht rückgängig gemacht werden.
+Show server status=Serverstatus anzeigen
+This command was disabled by a mod or game.=Dieser Befehl wurde von einer Mod oder einem Spiel deaktiviert.
+[<0..23>:<0..59> | <0..24000>]=[<0..23>:<0..59> | <0..24000>]
+Show or set time of day=Tageszeit anzeigen oder setzen
+Current time is @1:@2.=Es ist jetzt @1:@2 Uhr.
+You don't have permission to run this command (missing privilege: @1).=Sie haben nicht die Erlaubnis, diesen Befehl auszuführen (fehlendes Privileg: @1).
+Invalid time (must be between 0 and 24000).=Ungültige Zeit (muss zwischen 0 und 24000 liegen).
+Time of day changed.=Tageszeit geändert.
+Invalid hour (must be between 0 and 23 inclusive).=Ungültige Stunde (muss zwischen 0 und 23 inklusive liegen).
+Invalid minute (must be between 0 and 59 inclusive).=Ungültige Minute (muss zwischen 0 und 59 inklusive liegen).
+Show day count since world creation=Anzahl Tage seit der Erschaffung der Welt anzeigen
+Current day is @1.=Aktueller Tag ist @1.
+[<delay_in_seconds> | -1] [-r] [<message>]=[<Verzögerung_in_Sekunden> | -1] [-r] [<Nachricht>]
+Shutdown server (-1 cancels a delayed shutdown, -r allows players to reconnect)=Server herunterfahren (-1 bricht einen verzögerten Abschaltvorgang ab, -r erlaubt Spielern, sich wiederzuverbinden)
+Server shutting down (operator request).=Server wird heruntergefahren (Betreiberanfrage).
+Ban the IP of a player or show the ban list=Die IP eines Spielers verbannen oder die Bannliste anzeigen
+The ban list is empty.=Die Bannliste ist leer.
+Ban list: @1=Bannliste: @1
+Player is not online.=Spieler ist nicht online.
+Failed to ban player.=Konnte Spieler nicht verbannen.
+Banned @1.=@1 verbannt.
+<name> | <IP_address>=<Name> | <IP_Adresse>
+Remove IP ban belonging to a player/IP=Einen IP-Bann auf einen Spieler zurücknehmen
+Failed to unban player/IP.=Konnte Bann auf Spieler/IP nicht zurücknehmen.
+Unbanned @1.=Bann auf @1 zurückgenommen.
+<name> [<reason>]=<Name> [<Grund>]
+Kick a player=Spieler hinauswerfen
+Failed to kick player @1.=Spieler @1 konnte nicht hinausgeworfen werden.
+Kicked @1.=@1 hinausgeworfen.
+[full | quick]=[full | quick]
+Clear all objects in world=Alle Objekte in der Welt löschen
+Invalid usage, see /help clearobjects.=Ungültige Verwendung, siehe /help clearobjects.
+Clearing all objects. This may take a long time. You may experience a timeout. (by @1)=Lösche alle Objekte. Dies kann eine lange Zeit dauern. Eine Netzwerkzeitüberschreitung könnte für Sie auftreten. (von @1)
+Cleared all objects.=Alle Objekte gelöscht.
+<name> <message>=<Name> <Nachricht>
+Send a direct message to a player=Eine Direktnachricht an einen Spieler senden
+Invalid usage, see /help msg.=Ungültige Verwendung, siehe /help msg.
+The player @1 is not online.=Der Spieler @1 ist nicht online.
+DM from @1: @2=DN von @1: @2
+Message sent.=Nachricht gesendet.
+Get the last login time of a player or yourself=Den letzten Loginzeitpunkt eines Spielers oder Ihren eigenen anfragen
+@1's last login time was @2.=Letzter Loginzeitpunkt von @1 war @2.
+@1's last login time is unknown.=Letzter Loginzeitpunkt von @1 ist unbekannt.
+Clear the inventory of yourself or another player=Das Inventar von Ihnen oder einem anderen Spieler leeren
+You don't have permission to clear another player's inventory (missing privilege: @1).=Sie haben nicht die Erlaubnis, das Inventar eines anderen Spielers zu leeren (fehlendes Privileg: @1).
+@1 cleared your inventory.=@1 hat Ihr Inventar geleert.
+Cleared @1's inventory.=Inventar von @1 geleert.
+Player must be online to clear inventory!=Spieler muss online sein, um das Inventar leeren zu können!
+Players can't be killed, damage has been disabled.=Spieler können nicht getötet werden, Schaden ist deaktiviert.
+Player @1 is not online.=Spieler @1 ist nicht online.
+You are already dead.=Sie sind schon tot.
+@1 is already dead.=@1 ist bereits tot.
+@1 has been killed.=@1 wurde getötet.
+Kill player or yourself=Einen Spieler oder Sie selbst töten
+Invalid parameters (see /help @1).=Ungültige Parameter (siehe „/help @1“).
+Too many arguments, try using just /help <command>=Zu viele Argumente. Probieren Sie es mit „/help <Befehl>“
+Available commands: @1=Verfügbare Befehle: @1
+Use '/help <cmd>' to get more information, or '/help all' to list everything.=„/help <Befehl>“ benutzen, um mehr Informationen zu erhalten, oder „/help all“, um alles aufzulisten.
+Available commands:=Verfügbare Befehle:
+Command not available: @1=Befehl nicht verfügbar: @1
+[all | privs | <cmd>] [-t]=[all | privs | <Befehl>] [-t]
+Get help for commands or list privileges (-t: output in chat)=Hilfe für Befehle erhalten oder Privilegien auflisten (-t: Ausgabe im Chat)
+Available privileges:=Verfügbare Privilegien:
+Command=Befehl
+Parameters=Parameter
+For more information, click on any entry in the list.=Für mehr Informationen klicken Sie auf einen beliebigen Eintrag in der Liste.
+Double-click to copy the entry to the chat history.=Doppelklicken, um den Eintrag in die Chathistorie einzufügen.
+Command: @1 @2=Befehl: @1 @2
+Available commands: (see also: /help <cmd>)=Verfügbare Befehle: (siehe auch: /help <Befehl>)
+Close=Schließen
+Privilege=Privileg
+Description=Beschreibung
+print [<filter>] | dump [<filter>] | save [<format> [<filter>]] | reset=print [<Filter>] | dump [<Filter>] | save [<Format> [<Filter>]]
+Handle the profiler and profiling data=Den Profiler und Profilingdaten verwalten
+Statistics written to action log.=Statistiken zum Aktionsprotokoll geschrieben.
+Statistics were reset.=Statistiken wurden zurückgesetzt.
+Usage: @1=Verwendung: @1
+Format can be one of txt, csv, lua, json, json_pretty (structures may be subject to change).=Format kann entweder „txt“, „csv“, „lua“, „json“ oder „json_pretty“ sein (die Struktur kann sich in Zukunft ändern).
+@1 joined the game.=@1 ist dem Spiel beigetreten.
+@1 left the game.=@1 hat das Spiel verlassen.
+@1 left the game (timed out).=@1 hat das Spiel verlassen (Netzwerkzeitüberschreitung).
+(no description)=(keine Beschreibung)
+Can interact with things and modify the world=Kann mit Dingen interagieren und die Welt verändern
+Can speak in chat=Kann im Chat sprechen
+Can modify basic privileges (@1)=Kann grundlegende Privilegien anpassen (@1)
+Can modify privileges=Kann Privilegien anpassen
+Can teleport self=Kann sich selbst teleportieren
+Can teleport other players=Kann andere Spieler teleportieren
+Can set the time of day using /time=Kann die Tageszeit mit /time setzen
+Can do server maintenance stuff=Kann Serverwartungsdinge machen
+Can bypass node protection in the world=Kann den Schutz auf Blöcken in der Welt umgehen
+Can ban and unban players=Kann Spieler verbannen und entbannen
+Can kick players=Kann Spieler hinauswerfen
+Can use /give and /giveme=Kann /give und /giveme benutzen
+Can use /setpassword and /clearpassword=Kann /setpassword und /clearpassword benutzen
+Can use fly mode=Kann den Flugmodus benutzen
+Can use fast mode=Kann den Schnellmodus benutzen
+Can fly through solid nodes using noclip mode=Kann durch feste Blöcke mit dem Geistmodus fliegen
+Can use the rollback functionality=Kann die Rollback-Funktionalität benutzen
+Can view more debug info that might give a gameplay advantage=Kann zusätzliche Debuginformationen betrachten, welche einen spielerischen Vorteil geben könnten
+Can enable wireframe=Kann Drahtmodell aktivieren
+Unknown Item=Unbekannter Gegenstand
+Air=Luft
+Ignore=Ignorieren
+You can't place 'ignore' nodes!=Sie können keine „ignore“-Blöcke platzieren!
+Values below show absolute/relative times spend per server step by the instrumented function.=Die unten angegebenen Werte zeigen absolute/relative Zeitspannen, die je Server-Step von der instrumentierten Funktion in Anspruch genommen wurden.
+A total of @1 sample(s) were taken.=Es wurden insgesamt @1 Datenpunkt(e) aufgezeichnet.
+The output is limited to '@1'.=Die Ausgabe ist beschränkt auf „@1“.
+Saving of profile failed: @1=Speichern des Profils fehlgeschlagen: @1
+Profile saved to @1=Profil abgespeichert nach @1
diff --git a/builtin/locale/__builtin.it.tr b/builtin/locale/__builtin.it.tr
new file mode 100644
index 000000000..77f85c766
--- /dev/null
+++ b/builtin/locale/__builtin.it.tr
@@ -0,0 +1,258 @@
+# textdomain: __builtin
+Empty command.=Comando vuoto.
+Invalid command: @1=Comando non valido: @1
+Invalid command usage.=Utilizzo del comando non valido.
+ (@1 s)=
+Command execution took @1 s=
+You don't have permission to run this command (missing privileges: @1).=Non hai il permesso di eseguire questo comando (privilegi mancanti: @1).
+Unable to get position of player @1.=Impossibile ottenere la posizione del giocatore @1.
+Incorrect area format. Expected: (x1,y1,z1) (x2,y2,z2)=Formato dell'area non corretto. Richiesto: (x1,y1,z1) (x2,y2,z2)
+<action>=<azione>
+Show chat action (e.g., '/me orders a pizza' displays '<player name> orders a pizza')=Mostra un'azione in chat (es. `/me ordina una pizza` mostra `<nome giocatore> ordina una pizza`)
+Show the name of the server owner=Mostra il nome del proprietario del server
+The administrator of this server is @1.=L'amministratore di questo server è @1.
+There's no administrator named in the config file.=Non c'è nessun amministratore nel file di configurazione.
+@1 does not have any privileges.=
+Privileges of @1: @2=Privilegi di @1: @2
+[<name>]=[<nome>]
+Show privileges of yourself or another player=Mostra i privilegi propri o di un altro giocatore
+Player @1 does not exist.=Il giocatore @1 non esiste.
+<privilege>=<privilegio>
+Return list of all online players with privilege=Ritorna una lista di tutti i giocatori connessi col tale privilegio
+Invalid parameters (see /help haspriv).=Parametri non validi (vedi /help haspriv).
+Unknown privilege!=Privilegio sconosciuto!
+No online player has the "@1" privilege.=
+Players online with the "@1" privilege: @2=Giocatori connessi con il privilegio "@1": @2
+Your privileges are insufficient.=I tuoi privilegi sono insufficienti.
+Your privileges are insufficient. '@1' only allows you to grant: @2=
+Unknown privilege: @1=Privilegio sconosciuto: @1
+@1 granted you privileges: @2=@1 ti ha assegnato i seguenti privilegi: @2
+<name> (<privilege> [, <privilege2> [<...>]] | all)=
+Give privileges to player=Dà privilegi al giocatore
+Invalid parameters (see /help grant).=Parametri non validi (vedi /help grant).
+<privilege> [, <privilege2> [<...>]] | all=
+Grant privileges to yourself=Assegna dei privilegi a te stessÇ
+Invalid parameters (see /help grantme).=Parametri non validi (vedi /help grantme).
+Your privileges are insufficient. '@1' only allows you to revoke: @2=
+Note: Cannot revoke in singleplayer: @1=
+Note: Cannot revoke from admin: @1=
+No privileges were revoked.=
+@1 revoked privileges from you: @2=@1 ti ha revocato i seguenti privilegi: @2
+Remove privileges from player=Rimuove privilegi dal giocatore
+Invalid parameters (see /help revoke).=Parametri non validi (vedi /help revoke).
+Revoke privileges from yourself=Revoca privilegi a te stessÇ
+Invalid parameters (see /help revokeme).=Parametri non validi (vedi /help revokeme).
+<name> <password>=<nome> <password>
+Set player's password=Imposta la password del giocatore
+Name field required.=Campo "nome" richiesto.
+Your password was cleared by @1.=La tua password è stata resettata da @1.
+Password of player "@1" cleared.=Password del giocatore "@1" resettata.
+Your password was set by @1.=La tua password è stata impostata da @1.
+Password of player "@1" set.=Password del giocatore "@1" impostata.
+<name>=<nome>
+Set empty password for a player=Imposta una password vuota a un giocatore
+Reload authentication data=Ricarica i dati d'autenticazione
+Done.=Fatto.
+Failed.=Errore.
+Remove a player's data=Rimuove i dati di un giocatore
+Player "@1" removed.=Giocatore "@1" rimosso.
+No such player "@1" to remove.=Non è presente nessun giocatore "@1" da rimuovere.
+Player "@1" is connected, cannot remove.=Il giocatore "@1" è connesso, non può essere rimosso.
+Unhandled remove_player return code @1.=Codice ritornato da remove_player non gestito (@1).
+Cannot teleport out of map bounds!=Non ci si può teletrasportare fuori dai limiti della mappa!
+Cannot get player with name @1.=Impossibile trovare il giocatore chiamato @1.
+Cannot teleport, @1 is attached to an object!=Impossibile teletrasportare, @1 è attaccato a un oggetto!
+Teleporting @1 to @2.=Teletrasportando @1 da @2.
+One does not teleport to oneself.=Non ci si può teletrasportare su se stessi.
+Cannot get teleportee with name @1.=Impossibile trovare il giocatore chiamato @1 per il teletrasporto
+Cannot get target player with name @1.=Impossibile trovare il giocatore chiamato @1 per il teletrasporto
+Teleporting @1 to @2 at @3.=Teletrasportando @1 da @2 a @3
+<X>,<Y>,<Z> | <to_name> | <name> <X>,<Y>,<Z> | <name> <to_name>=<X>,<Y>,<Z> | <da_nome> | <nome> <X>,<Y>,<Z> | <nome> <da_nome>
+Teleport to position or player=Teletrasporta a una posizione o da un giocatore
+You don't have permission to teleport other players (missing privilege: @1).=Non hai il permesso di teletrasportare altri giocatori (privilegio mancante: @1).
+([-n] <name> <value>) | <name>=([-n] <nome> <valore>) | <nome>
+Set or read server configuration setting=Imposta o ottieni le configurazioni del server
+Failed. Use '/set -n <name> <value>' to create a new setting.=Errore. Usa 'set -n <nome> <valore>' per creare una nuova impostazione
+@1 @= @2=@1 @= @2
+<not set>=<non impostato>
+Invalid parameters (see /help set).=Parametri non validi (vedi /help set).
+Finished emerging @1 blocks in @2ms.=Finito di emergere @1 blocchi in @2ms
+emergeblocks update: @1/@2 blocks emerged (@3%)=aggiornamento emergeblocks: @1/@2 blocchi emersi (@3%)
+(here [<radius>]) | (<pos1> <pos2>)=(here [<raggio>]) | (<pos1> <pos2>)
+Load (or, if nonexistent, generate) map blocks contained in area pos1 to pos2 (<pos1> and <pos2> must be in parentheses)=Carica (o, se non esiste, genera) blocchi mappa contenuti nell'area tra pos1 e pos2 (<pos1> e <pos2> vanno tra parentesi)
+Started emerge of area ranging from @1 to @2.=Iniziata emersione dell'area tra @1 e @2.
+Delete map blocks contained in area pos1 to pos2 (<pos1> and <pos2> must be in parentheses)=Cancella i blocchi mappa contenuti nell'area tra pos1 e pos2 (<pos1> e <pos2> vanno tra parentesi)
+Successfully cleared area ranging from @1 to @2.=Area tra @1 e @2 ripulita con successo.
+Failed to clear one or more blocks in area.=Errore nel ripulire uno o più blocchi mappa nell'area
+Resets lighting in the area between pos1 and pos2 (<pos1> and <pos2> must be in parentheses)=Reimposta l'illuminazione nell'area tra pos1 e po2 (<pos1> e <pos2> vanno tra parentesi)
+Successfully reset light in the area ranging from @1 to @2.=Luce nell'area tra @1 e @2 reimpostata con successo.
+Failed to load one or more blocks in area.=Errore nel caricare uno o più blocchi mappa nell'area.
+List mods installed on the server=Elenca le mod installate nel server
+No mods installed.=
+Cannot give an empty item.=Impossibile dare un oggetto vuoto.
+Cannot give an unknown item.=Impossibile dare un oggetto sconosciuto.
+Giving 'ignore' is not allowed.=Non è permesso dare 'ignore'.
+@1 is not a known player.=@1 non è un giocatore conosciuto.
+@1 partially added to inventory.=@1 parzialmente aggiunto all'inventario.
+@1 could not be added to inventory.=@1 non può essere aggiunto all'inventario.
+@1 added to inventory.=@1 aggiunto all'inventario.
+@1 partially added to inventory of @2.=@1 parzialmente aggiunto all'inventario di @2.
+@1 could not be added to inventory of @2.=Non è stato possibile aggiungere @1 all'inventario di @2.
+@1 added to inventory of @2.=@1 aggiunto all'inventario di @2.
+<name> <ItemString> [<count> [<wear>]]=<nome> <NomeOggetto> [<quantità> [<usura>]]
+Give item to player=Dà oggetti ai giocatori
+Name and ItemString required.=Richiesti nome e NomeOggetto.
+<ItemString> [<count> [<wear>]]=<NomeOggetto> [<quantità> [<usura>]]
+Give item to yourself=Dà oggetti a te stessÇ
+ItemString required.=Richiesto NomeOggetto.
+<EntityName> [<X>,<Y>,<Z>]=<NomeEntità> [<X>,<Y>,<Z>]
+Spawn entity at given (or your) position=Genera un'entità alla data coordinata (o la tua)
+EntityName required.=Richiesto NomeEntità
+Unable to spawn entity, player is nil.=Impossibile generare l'entità, il giocatore è nil.
+Cannot spawn an unknown entity.=Impossibile generare un'entità sconosciuta.
+Invalid parameters (@1).=Parametri non validi (@1).
+@1 spawned.=Generata entità @1.
+@1 failed to spawn.=Errore nel generare @1
+Destroy item in hand=Distrugge l'oggetto in mano
+Unable to pulverize, no player.=Impossibile polverizzare, nessun giocatore.
+Unable to pulverize, no item in hand.=Impossibile polverizzare, nessun oggetto in mano.
+An item was pulverized.=Un oggetto è stato polverizzato.
+[<range>] [<seconds>] [<limit>]=[<raggio>] [<secondi>] [<limite>]
+Check who last touched a node or a node near it within the time specified by <seconds>. Default: range @= 0, seconds @= 86400 @= 24h, limit @= 5. Set <seconds> to inf for no time limit=Controlla chi è l'ultimo giocatore che ha toccato un nodo o un nodo nelle sue vicinanze, negli ultimi secondi indicati. Di base: raggio @= 0, secondi @= 86400 @= 24h, limite @= 5.
+Rollback functions are disabled.=Le funzioni di rollback sono disabilitate.
+That limit is too high!=Il limite è troppo alto!
+Checking @1 ...=Controllando @1 ...
+Nobody has touched the specified location in @1 seconds.=Nessuno ha toccato il punto specificato negli ultimi @1 secondi.
+@1 @2 @3 -> @4 @5 seconds ago.=@1 @2 @3 -> @4 @5 secondi fa.
+Punch a node (range@=@1, seconds@=@2, limit@=@3).=Colpisce un nodo (raggio@=@1, secondi@=@2, limite@=@3)
+(<name> [<seconds>]) | (:<actor> [<seconds>])=(<nome> [<secondi>]) | (:<attore> [<secondi>])
+Revert actions of a player. Default for <seconds> is 60. Set <seconds> to inf for no time limit=Riavvolge le azioni di un giocatore. Di base, <secondi> è 60. Imposta <secondi> a inf per nessun limite di tempo
+Invalid parameters. See /help rollback and /help rollback_check.=Parametri non validi. Vedi /help rollback e /help rollback_check.
+Reverting actions of player '@1' since @2 seconds.=Riavvolge le azioni del giocatore '@1' avvenute negli ultimi @2 secondi.
+Reverting actions of @1 since @2 seconds.=Riavvolge le azioni di @1 avvenute negli ultimi @2 secondi.
+(log is too long to show)=(il log è troppo lungo per essere mostrato)
+Reverting actions succeeded.=Riavvolgimento azioni avvenuto con successo.
+Reverting actions FAILED.=Errore nel riavvolgere le azioni.
+Show server status=Mostra lo stato del server
+This command was disabled by a mod or game.=Questo comando è stato disabilitato da una mod o dal gioco.
+[<0..23>:<0..59> | <0..24000>]=[<0..23>:<0..59> | <0..24000>]
+Show or set time of day=Mostra o imposta l'orario della giornata
+Current time is @1:@2.=Orario corrente: @1:@2.
+You don't have permission to run this command (missing privilege: @1).=Non hai il permesso di eseguire questo comando (privilegio mancante: @1)
+Invalid time (must be between 0 and 24000).=
+Time of day changed.=Orario della giornata cambiato.
+Invalid hour (must be between 0 and 23 inclusive).=Ora non valida (deve essere tra 0 e 23 inclusi)
+Invalid minute (must be between 0 and 59 inclusive).=Minuto non valido (deve essere tra 0 e 59 inclusi)
+Show day count since world creation=Mostra il conteggio dei giorni da quando il mondo è stato creato
+Current day is @1.=Giorno attuale: @1.
+[<delay_in_seconds> | -1] [-r] [<message>]=
+Shutdown server (-1 cancels a delayed shutdown, -r allows players to reconnect)=
+Server shutting down (operator request).=Arresto del server in corso (per richiesta dell'operatore)
+Ban the IP of a player or show the ban list=Bandisce l'IP del giocatore o mostra la lista di quelli banditi
+The ban list is empty.=La lista banditi è vuota.
+Ban list: @1=Lista banditi: @1
+Player is not online.=Il giocatore non è connesso.
+Failed to ban player.=Errore nel bandire il giocatore.
+Banned @1.=@1 banditÇ.
+<name> | <IP_address>=<nome> | <indirizzo_IP>
+Remove IP ban belonging to a player/IP=Perdona l'IP appartenente a un giocatore/IP
+Failed to unban player/IP.=Errore nel perdonare il giocatore/IP
+Unbanned @1.=@1 perdonatÇ
+<name> [<reason>]=<nome> [<ragione>]
+Kick a player=Caccia un giocatore
+Failed to kick player @1.=Errore nel cacciare il giocatore @1.
+Kicked @1.=@1 cacciatÇ.
+[full | quick]=[full | quick]
+Clear all objects in world=Elimina tutti gli oggetti/entità nel mondo
+Invalid usage, see /help clearobjects.=Uso incorretto, vedi /help clearobjects.
+Clearing all objects. This may take a long time. You may experience a timeout. (by @1)=Eliminando tutti gli oggetti/entità. Questo potrebbe richiedere molto tempo e farti eventualmente crashare. (di @1)
+Cleared all objects.=Tutti gli oggetti sono stati eliminati.
+<name> <message>=<nome> <messaggio>
+Send a direct message to a player=Invia un messaggio privato al giocatore
+Invalid usage, see /help msg.=Uso incorretto, vedi /help msg
+The player @1 is not online.=Il giocatore @1 non è connesso.
+DM from @1: @2=Messaggio privato da @1: @2
+Message sent.=Messaggio inviato.
+Get the last login time of a player or yourself=Ritorna l'ultimo accesso di un giocatore o di te stessÇ
+@1's last login time was @2.=L'ultimo accesso di @1 è avvenuto il @2
+@1's last login time is unknown.=L'ultimo accesso di @1 non è conosciuto
+Clear the inventory of yourself or another player=Svuota l'inventario tuo o di un altro giocatore
+You don't have permission to clear another player's inventory (missing privilege: @1).=Non hai il permesso di svuotare l'inventario di un altro giocatore (privilegio mancante: @1).
+@1 cleared your inventory.=@1 ha svuotato il tuo inventario.
+Cleared @1's inventory.=L'inventario di @1 è stato svuotato.
+Player must be online to clear inventory!=Il giocatore deve essere connesso per svuotarne l'inventario!
+Players can't be killed, damage has been disabled.=I giocatori non possono essere uccisi, il danno è disabilitato.
+Player @1 is not online.=Il giocatore @1 non è connesso.
+You are already dead.=Sei già mortÇ.
+@1 is already dead.=@1 è già mortÇ.
+@1 has been killed.=@1 è stato uccisÇ.
+Kill player or yourself=Uccide un giocatore o te stessÇ
+Invalid parameters (see /help @1).=
+Too many arguments, try using just /help <command>=
+Available commands: @1=Comandi disponibili: @1
+Use '/help <cmd>' to get more information, or '/help all' to list everything.=Usa '/help <comando>' per ottenere più informazioni, o '/help all' per elencare tutti i comandi.
+Available commands:=Comandi disponibili:
+Command not available: @1=Comando non disponibile: @1
+[all | privs | <cmd>] [-t]=
+Get help for commands or list privileges (-t: output in chat)=
+Available privileges:=Privilegi disponibili:
+Command=Comando
+Parameters=Parametri
+For more information, click on any entry in the list.=Per più informazioni, clicca su una qualsiasi voce dell'elenco.
+Double-click to copy the entry to the chat history.=Doppio click per copiare la voce nella cronologia della chat.
+Command: @1 @2=Comando: @1 @2
+Available commands: (see also: /help <cmd>)=Comandi disponibili: (vedi anche /help <comando>)
+Close=Chiudi
+Privilege=Privilegio
+Description=Descrizione
+print [<filter>] | dump [<filter>] | save [<format> [<filter>]] | reset=print [<filtro>] | dump [<filtro>] | save [<formato> [<filtro>]] | reset
+Handle the profiler and profiling data=Gestisce il profiler e i dati da esso elaborati
+Statistics written to action log.=Statistiche scritte nel log delle azioni.
+Statistics were reset.=Le statistiche sono state resettate.
+Usage: @1=Utilizzo: @1
+Format can be one of txt, csv, lua, json, json_pretty (structures may be subject to change).=I formati supportati sono txt, csv, lua, json e json_pretty (le strutture potrebbero essere soggetti a cambiamenti).
+@1 joined the game.=
+@1 left the game.=
+@1 left the game (timed out).=
+(no description)=(nessuna descrizione)
+Can interact with things and modify the world=Si può interagire con le cose e modificare il mondo
+Can speak in chat=Si può parlare in chat
+Can modify basic privileges (@1)=
+Can modify privileges=Si possono modificare i privilegi
+Can teleport self=Si può teletrasportare se stessз
+Can teleport other players=Si possono teletrasportare gli altri giocatori
+Can set the time of day using /time=Si può impostate l'orario della giornata tramite /time
+Can do server maintenance stuff=Si possono eseguire operazioni di manutenzione del server
+Can bypass node protection in the world=Si può aggirare la protezione dei nodi nel mondo
+Can ban and unban players=Si possono bandire e perdonare i giocatori
+Can kick players=Si possono cacciare i giocatori
+Can use /give and /giveme=Si possono usare /give e /give me
+Can use /setpassword and /clearpassword=Si possono usare /setpassword e /clearpassword
+Can use fly mode=Si può usare la modalità volo
+Can use fast mode=Si può usare la modalità rapida
+Can fly through solid nodes using noclip mode=Si può volare attraverso i nodi solidi con la modalità incorporea
+Can use the rollback functionality=Si può usare la funzione di rollback
+Can view more debug info that might give a gameplay advantage=
+Can enable wireframe=
+Unknown Item=Oggetto sconosciuto
+Air=Aria
+Ignore=Ignora
+You can't place 'ignore' nodes!=Non puoi piazzare nodi 'ignore'!
+Values below show absolute/relative times spend per server step by the instrumented function.=
+A total of @1 sample(s) were taken.=
+The output is limited to '@1'.=
+Saving of profile failed: @1=
+Profile saved to @1=
+
+
+##### not used anymore #####
+
+Invalid time.=Orario non valido.
+[all | privs | <cmd>]=[all | privs | <comando>]
+Get help for commands or list privileges=Richiama la finestra d'aiuto dei comandi o dei privilegi
+Allows enabling various debug options that may affect gameplay=Permette di abilitare varie opzioni di debug che potrebbero influenzare l'esperienza di gioco
+[<delay_in_seconds> | -1] [reconnect] [<message>]=[<ritardo_in_secondi> | -1] [reconnect] [<messaggio>]
+Shutdown server (-1 cancels a delayed shutdown)=Arresta il server (-1 annulla un arresto programmato)
+<name> (<privilege> | all)=<nome> (<privilegio> | all)
+<privilege> | all=<privilegio> | all
+Can modify 'shout' and 'interact' privileges=Si possono modificare i privilegi 'shout' e 'interact'
diff --git a/builtin/locale/template.txt b/builtin/locale/template.txt
new file mode 100644
index 000000000..308d17f37
--- /dev/null
+++ b/builtin/locale/template.txt
@@ -0,0 +1,245 @@
+# textdomain: __builtin
+Empty command.=
+Invalid command: @1=
+Invalid command usage.=
+ (@1 s)=
+Command execution took @1 s=
+You don't have permission to run this command (missing privileges: @1).=
+Unable to get position of player @1.=
+Incorrect area format. Expected: (x1,y1,z1) (x2,y2,z2)=
+<action>=
+Show chat action (e.g., '/me orders a pizza' displays '<player name> orders a pizza')=
+Show the name of the server owner=
+The administrator of this server is @1.=
+There's no administrator named in the config file.=
+@1 does not have any privileges.=
+Privileges of @1: @2=
+[<name>]=
+Show privileges of yourself or another player=
+Player @1 does not exist.=
+<privilege>=
+Return list of all online players with privilege=
+Invalid parameters (see /help haspriv).=
+Unknown privilege!=
+No online player has the "@1" privilege.=
+Players online with the "@1" privilege: @2=
+Your privileges are insufficient.=
+Your privileges are insufficient. '@1' only allows you to grant: @2=
+Unknown privilege: @1=
+@1 granted you privileges: @2=
+<name> (<privilege> [, <privilege2> [<...>]] | all)=
+Give privileges to player=
+Invalid parameters (see /help grant).=
+<privilege> [, <privilege2> [<...>]] | all=
+Grant privileges to yourself=
+Invalid parameters (see /help grantme).=
+Your privileges are insufficient. '@1' only allows you to revoke: @2=
+Note: Cannot revoke in singleplayer: @1=
+Note: Cannot revoke from admin: @1=
+No privileges were revoked.=
+@1 revoked privileges from you: @2=
+Remove privileges from player=
+Invalid parameters (see /help revoke).=
+Revoke privileges from yourself=
+Invalid parameters (see /help revokeme).=
+<name> <password>=
+Set player's password=
+Name field required.=
+Your password was cleared by @1.=
+Password of player "@1" cleared.=
+Your password was set by @1.=
+Password of player "@1" set.=
+<name>=
+Set empty password for a player=
+Reload authentication data=
+Done.=
+Failed.=
+Remove a player's data=
+Player "@1" removed.=
+No such player "@1" to remove.=
+Player "@1" is connected, cannot remove.=
+Unhandled remove_player return code @1.=
+Cannot teleport out of map bounds!=
+Cannot get player with name @1.=
+Cannot teleport, @1 is attached to an object!=
+Teleporting @1 to @2.=
+One does not teleport to oneself.=
+Cannot get teleportee with name @1.=
+Cannot get target player with name @1.=
+Teleporting @1 to @2 at @3.=
+<X>,<Y>,<Z> | <to_name> | <name> <X>,<Y>,<Z> | <name> <to_name>=
+Teleport to position or player=
+You don't have permission to teleport other players (missing privilege: @1).=
+([-n] <name> <value>) | <name>=
+Set or read server configuration setting=
+Failed. Use '/set -n <name> <value>' to create a new setting.=
+@1 @= @2=
+<not set>=
+Invalid parameters (see /help set).=
+Finished emerging @1 blocks in @2ms.=
+emergeblocks update: @1/@2 blocks emerged (@3%)=
+(here [<radius>]) | (<pos1> <pos2>)=
+Load (or, if nonexistent, generate) map blocks contained in area pos1 to pos2 (<pos1> and <pos2> must be in parentheses)=
+Started emerge of area ranging from @1 to @2.=
+Delete map blocks contained in area pos1 to pos2 (<pos1> and <pos2> must be in parentheses)=
+Successfully cleared area ranging from @1 to @2.=
+Failed to clear one or more blocks in area.=
+Resets lighting in the area between pos1 and pos2 (<pos1> and <pos2> must be in parentheses)=
+Successfully reset light in the area ranging from @1 to @2.=
+Failed to load one or more blocks in area.=
+List mods installed on the server=
+No mods installed.=
+Cannot give an empty item.=
+Cannot give an unknown item.=
+Giving 'ignore' is not allowed.=
+@1 is not a known player.=
+@1 partially added to inventory.=
+@1 could not be added to inventory.=
+@1 added to inventory.=
+@1 partially added to inventory of @2.=
+@1 could not be added to inventory of @2.=
+@1 added to inventory of @2.=
+<name> <ItemString> [<count> [<wear>]]=
+Give item to player=
+Name and ItemString required.=
+<ItemString> [<count> [<wear>]]=
+Give item to yourself=
+ItemString required.=
+<EntityName> [<X>,<Y>,<Z>]=
+Spawn entity at given (or your) position=
+EntityName required.=
+Unable to spawn entity, player is nil.=
+Cannot spawn an unknown entity.=
+Invalid parameters (@1).=
+@1 spawned.=
+@1 failed to spawn.=
+Destroy item in hand=
+Unable to pulverize, no player.=
+Unable to pulverize, no item in hand.=
+An item was pulverized.=
+[<range>] [<seconds>] [<limit>]=
+Check who last touched a node or a node near it within the time specified by <seconds>. Default: range @= 0, seconds @= 86400 @= 24h, limit @= 5. Set <seconds> to inf for no time limit=
+Rollback functions are disabled.=
+That limit is too high!=
+Checking @1 ...=
+Nobody has touched the specified location in @1 seconds.=
+@1 @2 @3 -> @4 @5 seconds ago.=
+Punch a node (range@=@1, seconds@=@2, limit@=@3).=
+(<name> [<seconds>]) | (:<actor> [<seconds>])=
+Revert actions of a player. Default for <seconds> is 60. Set <seconds> to inf for no time limit=
+Invalid parameters. See /help rollback and /help rollback_check.=
+Reverting actions of player '@1' since @2 seconds.=
+Reverting actions of @1 since @2 seconds.=
+(log is too long to show)=
+Reverting actions succeeded.=
+Reverting actions FAILED.=
+Show server status=
+This command was disabled by a mod or game.=
+[<0..23>:<0..59> | <0..24000>]=
+Show or set time of day=
+Current time is @1:@2.=
+You don't have permission to run this command (missing privilege: @1).=
+Invalid time (must be between 0 and 24000).=
+Time of day changed.=
+Invalid hour (must be between 0 and 23 inclusive).=
+Invalid minute (must be between 0 and 59 inclusive).=
+Show day count since world creation=
+Current day is @1.=
+[<delay_in_seconds> | -1] [-r] [<message>]=
+Shutdown server (-1 cancels a delayed shutdown, -r allows players to reconnect)=
+Server shutting down (operator request).=
+Ban the IP of a player or show the ban list=
+The ban list is empty.=
+Ban list: @1=
+Player is not online.=
+Failed to ban player.=
+Banned @1.=
+<name> | <IP_address>=
+Remove IP ban belonging to a player/IP=
+Failed to unban player/IP.=
+Unbanned @1.=
+<name> [<reason>]=
+Kick a player=
+Failed to kick player @1.=
+Kicked @1.=
+[full | quick]=
+Clear all objects in world=
+Invalid usage, see /help clearobjects.=
+Clearing all objects. This may take a long time. You may experience a timeout. (by @1)=
+Cleared all objects.=
+<name> <message>=
+Send a direct message to a player=
+Invalid usage, see /help msg.=
+The player @1 is not online.=
+DM from @1: @2=
+Message sent.=
+Get the last login time of a player or yourself=
+@1's last login time was @2.=
+@1's last login time is unknown.=
+Clear the inventory of yourself or another player=
+You don't have permission to clear another player's inventory (missing privilege: @1).=
+@1 cleared your inventory.=
+Cleared @1's inventory.=
+Player must be online to clear inventory!=
+Players can't be killed, damage has been disabled.=
+Player @1 is not online.=
+You are already dead.=
+@1 is already dead.=
+@1 has been killed.=
+Kill player or yourself=
+Invalid parameters (see /help @1).=
+Too many arguments, try using just /help <command>=
+Available commands: @1=
+Use '/help <cmd>' to get more information, or '/help all' to list everything.=
+Available commands:=
+Command not available: @1=
+[all | privs | <cmd>] [-t]=
+Get help for commands or list privileges (-t: output in chat)=
+Available privileges:=
+Command=
+Parameters=
+For more information, click on any entry in the list.=
+Double-click to copy the entry to the chat history.=
+Command: @1 @2=
+Available commands: (see also: /help <cmd>)=
+Close=
+Privilege=
+Description=
+print [<filter>] | dump [<filter>] | save [<format> [<filter>]] | reset=
+Handle the profiler and profiling data=
+Statistics written to action log.=
+Statistics were reset.=
+Usage: @1=
+Format can be one of txt, csv, lua, json, json_pretty (structures may be subject to change).=
+@1 joined the game.=
+@1 left the game.=
+@1 left the game (timed out).=
+(no description)=
+Can interact with things and modify the world=
+Can speak in chat=
+Can modify basic privileges (@1)=
+Can modify privileges=
+Can teleport self=
+Can teleport other players=
+Can set the time of day using /time=
+Can do server maintenance stuff=
+Can bypass node protection in the world=
+Can ban and unban players=
+Can kick players=
+Can use /give and /giveme=
+Can use /setpassword and /clearpassword=
+Can use fly mode=
+Can use fast mode=
+Can fly through solid nodes using noclip mode=
+Can use the rollback functionality=
+Can view more debug info that might give a gameplay advantage=
+Can enable wireframe=
+Unknown Item=
+Air=
+Ignore=
+You can't place 'ignore' nodes!=
+Values below show absolute/relative times spend per server step by the instrumented function.=
+A total of @1 sample(s) were taken.=
+The output is limited to '@1'.=
+Saving of profile failed: @1=
+Profile saved to @1=
diff --git a/builtin/mainmenu/common.lua b/builtin/mainmenu/common.lua
index cd896f9ec..8db8bb8d1 100644
--- a/builtin/mainmenu/common.lua
+++ b/builtin/mainmenu/common.lua
@@ -14,14 +14,11 @@
--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.
---------------------------------------------------------------------------------
+
-- Global menu data
---------------------------------------------------------------------------------
menudata = {}
---------------------------------------------------------------------------------
-- Local cached values
---------------------------------------------------------------------------------
local min_supp_proto, max_supp_proto
function common_update_cached_supp_proto()
@@ -29,14 +26,12 @@ function common_update_cached_supp_proto()
max_supp_proto = core.get_max_supp_proto()
end
common_update_cached_supp_proto()
---------------------------------------------------------------------------------
+
-- Menu helper functions
---------------------------------------------------------------------------------
---------------------------------------------------------------------------------
local function render_client_count(n)
- if n > 99 then return '99+'
- elseif n >= 0 then return tostring(n)
+ if n > 999 then return '99+'
+ elseif n >= 0 then return tostring(n)
else return '?' end
end
@@ -50,21 +45,7 @@ local function configure_selected_world_params(idx)
end
end
---------------------------------------------------------------------------------
-function image_column(tooltip, flagname)
- return "image,tooltip=" .. core.formspec_escape(tooltip) .. "," ..
- "0=" .. core.formspec_escape(defaulttexturedir .. "blank.png") .. "," ..
- "1=" .. core.formspec_escape(defaulttexturedir ..
- (flagname and "server_flags_" .. flagname .. ".png" or "blank.png")) .. "," ..
- "2=" .. core.formspec_escape(defaulttexturedir .. "server_ping_4.png") .. "," ..
- "3=" .. core.formspec_escape(defaulttexturedir .. "server_ping_3.png") .. "," ..
- "4=" .. core.formspec_escape(defaulttexturedir .. "server_ping_2.png") .. "," ..
- "5=" .. core.formspec_escape(defaulttexturedir .. "server_ping_1.png")
-end
-
-
---------------------------------------------------------------------------------
-function render_serverlist_row(spec, is_favorite)
+function render_serverlist_row(spec)
local text = ""
if spec.name then
text = text .. core.formspec_escape(spec.name:trim())
@@ -75,31 +56,29 @@ function render_serverlist_row(spec, is_favorite)
end
end
- local grey_out = not is_server_protocol_compat(spec.proto_min, spec.proto_max)
+ local grey_out = not spec.is_compatible
- local details
- if is_favorite then
- details = "1,"
- else
- details = "0,"
- end
+ local details = {}
- if spec.ping then
- local ping = spec.ping * 1000
- if ping <= 50 then
- details = details .. "2,"
- elseif ping <= 100 then
- details = details .. "3,"
- elseif ping <= 250 then
- details = details .. "4,"
+ if spec.lag or spec.ping then
+ local lag = (spec.lag or 0) * 1000 + (spec.ping or 0) * 250
+ if lag <= 125 then
+ table.insert(details, "1")
+ elseif lag <= 175 then
+ table.insert(details, "2")
+ elseif lag <= 250 then
+ table.insert(details, "3")
else
- details = details .. "5,"
+ table.insert(details, "4")
end
else
- details = details .. "0,"
+ table.insert(details, "0")
end
- if spec.clients and spec.clients_max then
+ table.insert(details, ",")
+
+ local color = (grey_out and "#aaaaaa") or ((spec.is_favorite and "#ddddaa") or "#ffffff")
+ if spec.clients and (spec.clients_max or 0) > 0 then
local clients_percent = 100 * spec.clients / spec.clients_max
-- Choose a color depending on how many clients are connected
@@ -110,68 +89,59 @@ function render_serverlist_row(spec, is_favorite)
elseif clients_percent <= 60 then clients_color = '#a1e587' -- 0-60%: green
elseif clients_percent <= 90 then clients_color = '#ffdc97' -- 60-90%: yellow
elseif clients_percent == 100 then clients_color = '#dd5b5b' -- full server: red (darker)
- else clients_color = '#ffba97' -- 90-100%: orange
+ else clients_color = '#ffba97' -- 90-100%: orange
end
- details = details .. clients_color .. ',' ..
- render_client_count(spec.clients) .. ',/,' ..
- render_client_count(spec.clients_max) .. ','
-
- elseif grey_out then
- details = details .. '#aaaaaa,?,/,?,'
+ table.insert(details, clients_color)
+ table.insert(details, render_client_count(spec.clients) .. " / " ..
+ render_client_count(spec.clients_max))
else
- details = details .. ',?,/,?,'
+ table.insert(details, color)
+ table.insert(details, "?")
end
if spec.creative then
- details = details .. "1,"
+ table.insert(details, "1") -- creative icon
else
- details = details .. "0,"
- end
-
- if spec.damage then
- details = details .. "1,"
- else
- details = details .. "0,"
+ table.insert(details, "0")
end
if spec.pvp then
- details = details .. "1,"
+ table.insert(details, "2") -- pvp icon
+ elseif spec.damage then
+ table.insert(details, "1") -- heart icon
else
- details = details .. "0,"
+ table.insert(details, "0")
end
- return details .. (grey_out and '#aaaaaa,' or ',') .. text
-end
+ table.insert(details, color)
+ table.insert(details, text)
---------------------------------------------------------------------------------
-os.tempfolder = function()
- local temp = core.get_temp_path()
- return temp .. DIR_DELIM .. "MT_" .. math.random(0, 10000)
+ return table.concat(details, ",")
end
-
---------------------------------------------------------------------------------
+---------------------------------------------------------------------------------
os.tmpname = function()
- local path = os.tempfolder()
- io.open(path, "w"):close()
- return path
+ error('do not use') -- instead use core.get_temp_path()
end
-
--------------------------------------------------------------------------------
-function menu_render_worldlist()
- local retval = ""
+
+function menu_render_worldlist(show_gameid)
+ local retval = {}
local current_worldlist = menudata.worldlist:get_list()
+ local row
for i, v in ipairs(current_worldlist) do
- if retval ~= "" then retval = retval .. "," end
- retval = retval .. core.formspec_escape(v.name) ..
- " \\[" .. core.formspec_escape(v.gameid) .. "\\]"
+ row = v.name
+ if show_gameid == nil or show_gameid == true then
+ row = row .. " [" .. v.gameid .. "]"
+ end
+ retval[#retval+1] = core.formspec_escape(row)
+
end
- return retval
+ return table.concat(retval, ",")
end
---------------------------------------------------------------------------------
function menu_handle_key_up_down(fields, textlist, settingname)
local oldidx, newidx = core.get_textlist_index(textlist), 1
if fields.key_up or fields.key_down then
@@ -188,7 +158,6 @@ function menu_handle_key_up_down(fields, textlist, settingname)
return false
end
---------------------------------------------------------------------------------
function text2textlist(xpos, ypos, width, height, tl_name, textlen, text, transparency)
local textlines = core.wrap_text(text, textlen, true)
local retval = "textlist[" .. xpos .. "," .. ypos .. ";" .. width ..
@@ -206,7 +175,6 @@ function text2textlist(xpos, ypos, width, height, tl_name, textlen, text, transp
return retval
end
---------------------------------------------------------------------------------
function is_server_protocol_compat(server_proto_min, server_proto_max)
if (not server_proto_min) or (not server_proto_max) then
-- There is no info. Assume the best and act as if we would be compatible.
@@ -214,7 +182,7 @@ function is_server_protocol_compat(server_proto_min, server_proto_max)
end
return min_supp_proto <= server_proto_max and max_supp_proto >= server_proto_min
end
---------------------------------------------------------------------------------
+
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, client_prot_ver_info
@@ -242,7 +210,7 @@ function is_server_protocol_compat_or_error(server_proto_min, server_proto_max)
return true
end
---------------------------------------------------------------------------------
+
function menu_worldmt(selected, setting, value)
local world = menudata.worldlist:get_list()[selected]
if world then
diff --git a/builtin/mainmenu/dlg_contentstore.lua b/builtin/mainmenu/dlg_contentstore.lua
index b0736a4fd..9db67cf57 100644
--- a/builtin/mainmenu/dlg_contentstore.lua
+++ b/builtin/mainmenu/dlg_contentstore.lua
@@ -57,34 +57,77 @@ local filter_types_type = {
"txp",
}
+local REASON_NEW = "new"
+local REASON_UPDATE = "update"
+local REASON_DEPENDENCY = "dependency"
-local function download_package(param)
- if core.download_file(param.package.url, param.filename) then
+
+-- encodes for use as URL parameter or path component
+local function urlencode(str)
+ return str:gsub("[^%a%d()._~-]", function(char)
+ return string.format("%%%02X", string.byte(char))
+ end)
+end
+assert(urlencode("sample text?") == "sample%20text%3F")
+
+
+local function get_download_url(package, reason)
+ local base_url = core.settings:get("contentdb_url")
+ local ret = base_url .. ("/packages/%s/releases/%d/download/"):format(
+ package.url_part, package.release)
+ if reason then
+ ret = ret .. "?reason=" .. reason
+ end
+ return ret
+end
+
+
+local function download_and_extract(param)
+ local package = param.package
+
+ local filename = core.get_temp_path(true)
+ if filename == "" or not core.download_file(param.url, filename) then
+ core.log("error", "Downloading " .. dump(param.url) .. " failed")
return {
- filename = param.filename,
- successful = true,
+ msg = fgettext("Failed to download $1", package.name)
}
+ end
+
+ local tempfolder = core.get_temp_path()
+ if tempfolder ~= "" then
+ tempfolder = tempfolder .. DIR_DELIM .. "MT_" .. math.random(1, 1024000)
+ if not core.extract_zip(filename, tempfolder) then
+ tempfolder = nil
+ end
else
- core.log("error", "downloading " .. dump(param.package.url) .. " failed")
+ tempfolder = nil
+ end
+ os.remove(filename)
+ if not tempfolder then
return {
- successful = false,
+ msg = fgettext("Install: Unsupported file type or broken archive"),
}
end
+
+ return {
+ path = tempfolder
+ }
end
-local function start_install(package)
+local function start_install(package, reason)
local params = {
package = package,
- filename = os.tempfolder() .. "_MODNAME_" .. package.name .. ".zip",
+ url = get_download_url(package, reason),
}
number_downloading = number_downloading + 1
local function callback(result)
- if result.successful then
- local path, msg = pkgmgr.install(package.type,
- result.filename, package.name,
- package.path)
+ if result.msg then
+ gamedata.errormessage = result.msg
+ else
+ local path, msg = pkgmgr.install_dir(package.type, result.path, package.name, package.path)
+ core.delete_dir(result.path)
if not path then
gamedata.errormessage = msg
else
@@ -122,9 +165,6 @@ local function start_install(package)
conf:write()
end
end
- os.remove(result.filename)
- else
- gamedata.errormessage = fgettext("Failed to download $1", package.name)
end
package.downloading = false
@@ -135,7 +175,7 @@ local function start_install(package)
if next then
table.remove(download_queue, 1)
- start_install(next)
+ start_install(next.package, next.reason)
end
ui.update()
@@ -144,19 +184,19 @@ local function start_install(package)
package.queued = false
package.downloading = true
- if not core.handle_async(download_package, params, callback) then
+ if not core.handle_async(download_and_extract, params, callback) then
core.log("error", "ERROR: async event failed")
gamedata.errormessage = fgettext("Failed to download $1", package.name)
return
end
end
-local function queue_download(package)
+local function queue_download(package, reason)
local max_concurrent_downloads = tonumber(core.settings:get("contentdb_max_concurrent_downloads"))
if number_downloading < max_concurrent_downloads then
- start_install(package)
+ start_install(package, reason)
else
- table.insert(download_queue, package)
+ table.insert(download_queue, { package = package, reason = reason })
package.queued = true
end
end
@@ -169,7 +209,7 @@ local function get_raw_dependencies(package)
local url_fmt = "/api/packages/%s/dependencies/?only_hard=1&protocol_version=%s&engine_version=%s"
local version = core.get_version()
local base_url = core.settings:get("contentdb_url")
- local url = base_url .. url_fmt:format(package.id, core.get_max_supp_proto(), version.string)
+ local url = base_url .. url_fmt:format(package.url_part, core.get_max_supp_proto(), urlencode(version.string))
local response = http.fetch_sync({ url = url })
if not response.succeeded then
@@ -407,12 +447,12 @@ function install_dialog.handle_submit(this, fields)
end
if fields.install_all then
- queue_download(install_dialog.package)
+ queue_download(install_dialog.package, REASON_NEW)
if install_dialog.will_install_deps then
for _, dep in pairs(install_dialog.dependencies) do
if not dep.is_optional and not dep.installed and dep.package then
- queue_download(dep.package)
+ queue_download(dep.package, REASON_DEPENDENCY)
end
end
end
@@ -544,33 +584,43 @@ function store.load()
local base_url = core.settings:get("contentdb_url")
local url = base_url ..
"/api/packages/?type=mod&type=game&type=txp&protocol_version=" ..
- core.get_max_supp_proto() .. "&engine_version=" .. version.string
+ core.get_max_supp_proto() .. "&engine_version=" .. urlencode(version.string)
for _, item in pairs(core.settings:get("contentdb_flag_blacklist"):split(",")) do
item = item:trim()
if item ~= "" then
- url = url .. "&hide=" .. item
+ url = url .. "&hide=" .. urlencode(item)
end
end
- local timeout = tonumber(core.settings:get("curl_file_download_timeout"))
- local response = http.fetch_sync({ url = url, timeout = timeout })
+ local response = http.fetch_sync({ url = url })
if not response.succeeded then
return
end
store.packages_full = core.parse_json(response.data) or {}
+ store.aliases = {}
for _, package in pairs(store.packages_full) do
- package.url = base_url .. "/packages/" ..
- package.author .. "/" .. package.name ..
- "/releases/" .. package.release .. "/download/"
-
local name_len = #package.name
+ -- This must match what store.update_paths() does!
+ package.id = package.author:lower() .. "/"
if package.type == "game" and name_len > 5 and package.name:sub(name_len - 4) == "_game" then
- package.id = package.author:lower() .. "/" .. package.name:sub(1, name_len - 5)
+ package.id = package.id .. package.name:sub(1, name_len - 5)
else
- package.id = package.author:lower() .. "/" .. package.name
+ package.id = package.id .. package.name
+ end
+
+ package.url_part = urlencode(package.author) .. "/" .. urlencode(package.name)
+
+ if package.aliases then
+ for _, alias in ipairs(package.aliases) do
+ -- We currently don't support name changing
+ local suffix = "/" .. package.name
+ if alias:sub(-#suffix) == suffix then
+ store.aliases[alias:lower()] = package.id
+ end
+ end
end
end
@@ -584,7 +634,8 @@ function store.update_paths()
pkgmgr.refresh_globals()
for _, mod in pairs(pkgmgr.global_mods:get_list()) do
if mod.author and mod.release > 0 then
- mod_hash[mod.author:lower() .. "/" .. mod.name] = mod
+ local id = mod.author:lower() .. "/" .. mod.name
+ mod_hash[store.aliases[id] or id] = mod
end
end
@@ -592,14 +643,16 @@ function store.update_paths()
pkgmgr.update_gamelist()
for _, game in pairs(pkgmgr.games) do
if game.author ~= "" and game.release > 0 then
- game_hash[game.author:lower() .. "/" .. game.id] = game
+ local id = game.author:lower() .. "/" .. game.id
+ game_hash[store.aliases[id] or id] = game
end
end
local txp_hash = {}
for _, txp in pairs(pkgmgr.get_texture_packs()) do
if txp.author and txp.release > 0 then
- txp_hash[txp.author:lower() .. "/" .. txp.name] = txp
+ local id = txp.author:lower() .. "/" .. txp.name
+ txp_hash[store.aliases[id] or id] = txp
end
end
@@ -915,7 +968,7 @@ function store.handle_submit(this, fields)
local package = store.packages_full[i]
if package.path and package.installed_release < package.release and
not (package.downloading or package.queued) then
- queue_download(package)
+ queue_download(package, REASON_UPDATE)
end
end
return true
@@ -948,7 +1001,7 @@ function store.handle_submit(this, fields)
this:hide()
dlg:show()
else
- queue_download(package)
+ queue_download(package, package.path and REASON_UPDATE or REASON_NEW)
end
end
@@ -973,9 +1026,9 @@ function store.handle_submit(this, fields)
end
if fields["view_" .. i] then
- local url = ("%s/packages/%s/%s?protocol_version=%d"):format(
- core.settings:get("contentdb_url"),
- package.author, package.name, core.get_max_supp_proto())
+ local url = ("%s/packages/%s?protocol_version=%d"):format(
+ core.settings:get("contentdb_url"), package.url_part,
+ core.get_max_supp_proto())
core.open_url(url)
return true
end
diff --git a/builtin/mainmenu/dlg_create_world.lua b/builtin/mainmenu/dlg_create_world.lua
index 1938747fe..8d1509f33 100644
--- a/builtin/mainmenu/dlg_create_world.lua
+++ b/builtin/mainmenu/dlg_create_world.lua
@@ -15,7 +15,8 @@
--with this program; if not, write to the Free Software Foundation, Inc.,
--51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-local worldname = ""
+-- cf. tab_local, the gamebar already provides game selection so we hide the list from here
+local hide_gamelist = PLATFORM ~= "Android"
local function table_to_flags(ftable)
-- Convert e.g. { jungles = true, caves = false } to "jungles,nocaves"
@@ -31,9 +32,8 @@ local function strflag(flags, flag)
return (flags[flag] == true) and "true" or "false"
end
-local cb_caverns = { "caverns", fgettext("Caverns"), "caverns",
+local cb_caverns = { "caverns", fgettext("Caverns"),
fgettext("Very large caverns deep in the underground") }
-local tt_sea_rivers = fgettext("Sea level rivers")
local flag_checkboxes = {
v5 = {
@@ -41,39 +41,38 @@ local flag_checkboxes = {
},
v7 = {
cb_caverns,
- { "ridges", fgettext("Rivers"), "ridges", tt_sea_rivers },
- { "mountains", fgettext("Mountains"), "mountains" },
- { "floatlands", fgettext("Floatlands (experimental)"), "floatlands",
+ { "ridges", fgettext("Rivers"), fgettext("Sea level rivers") },
+ { "mountains", fgettext("Mountains") },
+ { "floatlands", fgettext("Floatlands (experimental)"),
fgettext("Floating landmasses in the sky") },
},
carpathian = {
cb_caverns,
- { "rivers", fgettext("Rivers"), "rivers", tt_sea_rivers },
+ { "rivers", fgettext("Rivers"), fgettext("Sea level rivers") },
},
valleys = {
- { "altitude-chill", fgettext("Altitude chill"), "altitude_chill",
+ { "altitude_chill", fgettext("Altitude chill"),
fgettext("Reduces heat with altitude") },
- { "altitude-dry", fgettext("Altitude dry"), "altitude_dry",
+ { "altitude_dry", fgettext("Altitude dry"),
fgettext("Reduces humidity with altitude") },
- { "humid-rivers", fgettext("Humid rivers"), "humid_rivers",
+ { "humid_rivers", fgettext("Humid rivers"),
fgettext("Increases humidity around rivers") },
- { "vary-river-depth", fgettext("Vary river depth"), "vary_river_depth",
+ { "vary_river_depth", fgettext("Vary river depth"),
fgettext("Low humidity and high heat causes shallow or dry rivers") },
},
flat = {
cb_caverns,
- { "hills", fgettext("Hills"), "hills" },
- { "lakes", fgettext("Lakes"), "lakes" },
+ { "hills", fgettext("Hills") },
+ { "lakes", fgettext("Lakes") },
},
fractal = {
- { "terrain", fgettext("Additional terrain"), "terrain",
+ { "terrain", fgettext("Additional terrain"),
fgettext("Generate non-fractal terrain: Oceans and underground") },
},
v6 = {
- { "trees", fgettext("Trees and jungle grass"), "trees" },
- { "flat", fgettext("Flat terrain"), "flat" },
- { "mudflow", fgettext("Mud flow"), "mudflow",
- fgettext("Terrain surface erosion") },
+ { "trees", fgettext("Trees and jungle grass") },
+ { "flat", fgettext("Flat terrain") },
+ { "mudflow", fgettext("Mud flow"), fgettext("Terrain surface erosion") },
-- Biome settings are in mgv6_biomes below
},
}
@@ -105,38 +104,26 @@ local function create_world_formspec(dialogdata)
"button[4.75,2.5;3,0.5;world_create_cancel;" .. fgettext("Cancel") .. "]"
end
+ local current_mg = dialogdata.mg
local mapgens = core.get_mapgen_names()
- local current_seed = core.settings:get("fixed_map_seed") or ""
- local current_mg = core.settings:get("mg_name")
local gameid = core.settings:get("menu_last_game")
- local flags = {
- main = core.settings:get_flags("mg_flags"),
- v5 = core.settings:get_flags("mgv5_spflags"),
- v6 = core.settings:get_flags("mgv6_spflags"),
- v7 = core.settings:get_flags("mgv7_spflags"),
- fractal = core.settings:get_flags("mgfractal_spflags"),
- carpathian = core.settings:get_flags("mgcarpathian_spflags"),
- valleys = core.settings:get_flags("mgvalleys_spflags"),
- flat = core.settings:get_flags("mgflat_spflags"),
- }
-
- local gameidx = 0
- if gameid ~= nil then
- local _
- _, gameidx = pkgmgr.find_by_gameid(gameid)
+ local flags = dialogdata.flags
- if gameidx == nil then
- gameidx = 0
- end
+ local game, gameidx = pkgmgr.find_by_gameid(gameid)
+ if game == nil and hide_gamelist then
+ -- should never happen but just pick the first game
+ game = pkgmgr.get_game(1)
+ gameidx = 1
+ core.settings:set("menu_last_game", game.id)
+ elseif game == nil then
+ gameidx = 0
end
- local game_by_gameidx = core.get_game(gameidx)
local disallowed_mapgen_settings = {}
- if game_by_gameidx ~= nil then
- local gamepath = game_by_gameidx.path
- local gameconfig = Settings(gamepath.."/game.conf")
+ if game ~= nil then
+ local gameconfig = Settings(game.path.."/game.conf")
local allowed_mapgens = (gameconfig:get("allowed_mapgens") or ""):split()
for key, value in pairs(allowed_mapgens) do
@@ -156,7 +143,7 @@ local function create_world_formspec(dialogdata)
end
end
- if disallowed_mapgens then
+ if #disallowed_mapgens > 0 then
for i = #mapgens, 1, -1 do
if table.indexof(disallowed_mapgens, mapgens[i]) > 0 then
table.remove(mapgens, i)
@@ -172,23 +159,29 @@ local function create_world_formspec(dialogdata)
local mglist = ""
local selindex
- local i = 1
- local first_mg
- for k,v in pairs(mapgens) do
- if not first_mg then
- first_mg = v
+ do -- build the list of mapgens
+ local i = 1
+ local first_mg
+ for k, v in pairs(mapgens) do
+ if not first_mg then
+ first_mg = v
+ end
+ if current_mg == v then
+ selindex = i
+ end
+ i = i + 1
+ mglist = mglist .. core.formspec_escape(v) .. ","
end
- if current_mg == v then
- selindex = i
+ if not selindex then
+ selindex = 1
+ current_mg = first_mg
end
- i = i + 1
- mglist = mglist .. v .. ","
- end
- if not selindex then
- selindex = 1
- current_mg = first_mg
+ mglist = mglist:sub(1, -2)
end
- mglist = mglist:sub(1, -2)
+
+ -- The logic of the flag element IDs is as follows:
+ -- "flag_main_foo-bar-baz" controls dialogdata.flags["main"]["foo_bar_baz"]
+ -- see the buttonhandler for the implementation of this
local mg_main_flags = function(mapgen, y)
if mapgen == "singlenode" then
@@ -198,11 +191,11 @@ local function create_world_formspec(dialogdata)
return "", y
end
- local form = "checkbox[0," .. y .. ";flag_mg_caves;" ..
+ local form = "checkbox[0," .. y .. ";flag_main_caves;" ..
fgettext("Caves") .. ";"..strflag(flags.main, "caves").."]"
y = y + 0.5
- form = form .. "checkbox[0,"..y..";flag_mg_dungeons;" ..
+ form = form .. "checkbox[0,"..y..";flag_main_dungeons;" ..
fgettext("Dungeons") .. ";"..strflag(flags.main, "dungeons").."]"
y = y + 0.5
@@ -213,7 +206,7 @@ local function create_world_formspec(dialogdata)
else
d_tt = fgettext("Structures appearing on the terrain, typically trees and plants")
end
- form = form .. "checkbox[0,"..y..";flag_mg_decorations;" ..
+ form = form .. "checkbox[0,"..y..";flag_main_decorations;" ..
d_name .. ";" ..
strflag(flags.main, "decorations").."]" ..
"tooltip[flag_mg_decorations;" ..
@@ -221,7 +214,7 @@ local function create_world_formspec(dialogdata)
"]"
y = y + 0.5
- form = form .. "tooltip[flag_mg_caves;" ..
+ form = form .. "tooltip[flag_main_caves;" ..
fgettext("Network of tunnels and caves")
.. "]"
return form, y
@@ -235,13 +228,13 @@ local function create_world_formspec(dialogdata)
return "", y
end
local form = ""
- for _,tab in pairs(flag_checkboxes[mapgen]) do
- local id = "flag_mg"..mapgen.."_"..tab[1]
+ for _, tab in pairs(flag_checkboxes[mapgen]) do
+ local id = "flag_"..mapgen.."_"..tab[1]:gsub("_", "-")
form = form .. ("checkbox[0,%f;%s;%s;%s]"):
- format(y, id, tab[2], strflag(flags[mapgen], tab[3]))
+ format(y, id, tab[2], strflag(flags[mapgen], tab[1]))
- if tab[4] then
- form = form .. "tooltip["..id..";"..tab[4].."]"
+ if tab[3] then
+ form = form .. "tooltip["..id..";"..tab[3].."]"
end
y = y + 0.5
end
@@ -277,16 +270,14 @@ local function create_world_formspec(dialogdata)
-- biomeblend
y = y + 0.55
- form = form .. "checkbox[0,"..y..";flag_mgv6_biomeblend;" ..
+ form = form .. "checkbox[0,"..y..";flag_v6_biomeblend;" ..
fgettext("Biome blending") .. ";"..strflag(flags.v6, "biomeblend").."]" ..
- "tooltip[flag_mgv6_biomeblend;" ..
+ "tooltip[flag_v6_biomeblend;" ..
fgettext("Smooth transition between biomes") .. "]"
return form, y
end
- current_seed = core.formspec_escape(current_seed)
-
local y_start = 0.0
local y = y_start
local str_flags, str_spflags
@@ -323,21 +314,27 @@ local function create_world_formspec(dialogdata)
"container[0,0]"..
"field[0.3,0.6;6,0.5;te_world_name;" ..
fgettext("World name") ..
- ";" .. core.formspec_escape(worldname) .. "]" ..
+ ";" .. core.formspec_escape(dialogdata.worldname) .. "]" ..
+ "set_focus[te_world_name;false]" ..
"field[0.3,1.7;6,0.5;te_seed;" ..
fgettext("Seed") ..
- ";".. current_seed .. "]" ..
+ ";".. core.formspec_escape(dialogdata.seed) .. "]" ..
"label[0,2;" .. fgettext("Mapgen") .. "]"..
- "dropdown[0,2.5;6.3;dd_mapgen;" .. mglist .. ";" .. selindex .. "]" ..
+ "dropdown[0,2.5;6.3;dd_mapgen;" .. mglist .. ";" .. selindex .. "]"
+
+ if not hide_gamelist or devtest_only ~= "" then
+ retval = retval ..
+ "label[0,3.35;" .. fgettext("Game") .. "]"..
+ "textlist[0,3.85;5.8,"..gamelist_height..";games;" ..
+ pkgmgr.gamelist() .. ";" .. gameidx .. ";false]" ..
+ "container[0,4.5]" ..
+ devtest_only ..
+ "container_end[]"
+ end
- "label[0,3.35;" .. fgettext("Game") .. "]"..
- "textlist[0,3.85;5.8,"..gamelist_height..";games;" ..
- pkgmgr.gamelist() .. ";" .. gameidx .. ";false]" ..
- "container[0,4.5]" ..
- devtest_only ..
- "container_end[]" ..
+ retval = retval ..
"container_end[]" ..
-- Right side
@@ -360,9 +357,20 @@ local function create_world_buttonhandler(this, fields)
fields["key_enter"] then
local worldname = fields["te_world_name"]
- local gameindex = core.get_textlist_index("games")
+ local game, gameindex
+ if hide_gamelist then
+ game, gameindex = pkgmgr.find_by_gameid(core.settings:get("menu_last_game"))
+ else
+ gameindex = core.get_textlist_index("games")
+ game = pkgmgr.get_game(gameindex)
+ end
- if gameindex ~= nil then
+ local message
+ if game == nil then
+ message = fgettext("No game selected")
+ end
+
+ if message == nil then
-- For unnamed worlds use the generated name 'world<number>',
-- where the number increments: it is set to 1 larger than the largest
-- generated name number found.
@@ -377,36 +385,48 @@ local function create_world_buttonhandler(this, fields)
worldname = "world" .. worldnum_max + 1
end
- core.settings:set("fixed_map_seed", fields["te_seed"])
-
- local message
- if not menudata.worldlist:uid_exists_raw(worldname) then
- core.settings:set("mg_name",fields["dd_mapgen"])
- message = core.create_world(worldname,gameindex)
- else
+ if menudata.worldlist:uid_exists_raw(worldname) then
message = fgettext("A world named \"$1\" already exists", worldname)
end
+ end
- if message ~= nil then
- gamedata.errormessage = message
- else
- core.settings:set("menu_last_game",pkgmgr.games[gameindex].id)
- if this.data.update_worldlist_filter then
- menudata.worldlist:set_filtercriteria(pkgmgr.games[gameindex].id)
- mm_texture.update("singleplayer", pkgmgr.games[gameindex].id)
- end
- menudata.worldlist:refresh()
- core.settings:set("mainmenu_last_selected_world",
- menudata.worldlist:raw_index_by_uid(worldname))
+ if message == nil then
+ this.data.seed = fields["te_seed"]
+ this.data.mg = fields["dd_mapgen"]
+
+ -- actual names as used by engine
+ local settings = {
+ fixed_map_seed = this.data.seed,
+ mg_name = this.data.mg,
+ mg_flags = table_to_flags(this.data.flags.main),
+ mgv5_spflags = table_to_flags(this.data.flags.v5),
+ mgv6_spflags = table_to_flags(this.data.flags.v6),
+ mgv7_spflags = table_to_flags(this.data.flags.v7),
+ mgfractal_spflags = table_to_flags(this.data.flags.fractal),
+ mgcarpathian_spflags = table_to_flags(this.data.flags.carpathian),
+ mgvalleys_spflags = table_to_flags(this.data.flags.valleys),
+ mgflat_spflags = table_to_flags(this.data.flags.flat),
+ }
+ message = core.create_world(worldname, gameindex, settings)
+ end
+
+ if message == nil then
+ core.settings:set("menu_last_game", game.id)
+ if this.data.update_worldlist_filter then
+ menudata.worldlist:set_filtercriteria(game.id)
end
- else
- gamedata.errormessage = fgettext("No game selected")
+ menudata.worldlist:refresh()
+ core.settings:set("mainmenu_last_selected_world",
+ menudata.worldlist:raw_index_by_uid(worldname))
end
+
+ gamedata.errormessage = message
this:delete()
return true
end
- worldname = fields.te_world_name
+ this.data.worldname = fields["te_world_name"]
+ this.data.seed = fields["te_seed"]
if fields["games"] then
local gameindex = core.get_textlist_index("games")
@@ -417,22 +437,11 @@ local function create_world_buttonhandler(this, fields)
for k,v in pairs(fields) do
local split = string.split(k, "_", nil, 3)
if split and split[1] == "flag" then
- local setting
- if split[2] == "mg" then
- setting = "mg_flags"
- else
- setting = split[2].."_spflags"
- end
-- We replaced the underscore of flag names with a dash.
local flag = string.gsub(split[3], "-", "_")
- local ftable = core.settings:get_flags(setting)
- if v == "true" then
- ftable[flag] = true
- else
- ftable[flag] = false
- end
- local flags = table_to_flags(ftable)
- core.settings:set(setting, flags)
+ local ftable = this.data.flags[split[2]]
+ assert(ftable)
+ ftable[flag] = v == "true"
return true
end
end
@@ -446,18 +455,16 @@ local function create_world_buttonhandler(this, fields)
local entry = core.formspec_escape(fields["mgv6_biomes"])
for b=1, #mgv6_biomes do
if entry == mgv6_biomes[b][1] then
- local ftable = core.settings:get_flags("mgv6_spflags")
+ local ftable = this.data.flags.v6
ftable.jungles = mgv6_biomes[b][2].jungles
ftable.snowbiomes = mgv6_biomes[b][2].snowbiomes
- local flags = table_to_flags(ftable)
- core.settings:set("mgv6_spflags", flags)
return true
end
end
end
if fields["dd_mapgen"] then
- core.settings:set("mg_name", fields["dd_mapgen"])
+ this.data.mg = fields["dd_mapgen"]
return true
end
@@ -466,12 +473,27 @@ end
function create_create_world_dlg(update_worldlistfilter)
- worldname = ""
local retval = dialog_create("sp_create_world",
create_world_formspec,
create_world_buttonhandler,
nil)
- retval.update_worldlist_filter = update_worldlistfilter
+ retval.data = {
+ update_worldlist_filter = update_worldlistfilter,
+ worldname = "",
+ -- settings the world is created with:
+ seed = core.settings:get("fixed_map_seed") or "",
+ mg = core.settings:get("mg_name"),
+ flags = {
+ main = core.settings:get_flags("mg_flags"),
+ v5 = core.settings:get_flags("mgv5_spflags"),
+ v6 = core.settings:get_flags("mgv6_spflags"),
+ v7 = core.settings:get_flags("mgv7_spflags"),
+ fractal = core.settings:get_flags("mgfractal_spflags"),
+ carpathian = core.settings:get_flags("mgcarpathian_spflags"),
+ valleys = core.settings:get_flags("mgvalleys_spflags"),
+ flat = core.settings:get_flags("mgflat_spflags"),
+ }
+ }
return retval
end
diff --git a/builtin/mainmenu/dlg_settings_advanced.lua b/builtin/mainmenu/dlg_settings_advanced.lua
index c16e4aad0..06fd32d84 100644
--- a/builtin/mainmenu/dlg_settings_advanced.lua
+++ b/builtin/mainmenu/dlg_settings_advanced.lua
@@ -31,6 +31,10 @@ end
-- returns error message, or nil
local function parse_setting_line(settings, line, read_all, base_level, allow_secure)
+
+ -- strip carriage returns (CR, /r)
+ line = line:gsub("\r", "")
+
-- comment
local comment = line:match("^#" .. CHAR_CLASSES.SPACE .. "*(.*)$")
if comment then
@@ -620,7 +624,7 @@ local function create_change_setting_formspec(dialogdata)
-- Third row
add_field(0.3, "te_octaves", fgettext("Octaves"), t[7])
- add_field(3.6, "te_persist", fgettext("Persistance"), t[8])
+ add_field(3.6, "te_persist", fgettext("Persistence"), t[8])
add_field(6.9, "te_lacun", fgettext("Lacunarity"), t[9])
height = height + 1.1
diff --git a/builtin/mainmenu/textures.lua b/builtin/mainmenu/game_theme.lua
index a3acbbdec..89e1b66c8 100644
--- a/builtin/mainmenu/textures.lua
+++ b/builtin/mainmenu/game_theme.lua
@@ -16,23 +16,25 @@
--51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-mm_texture = {}
+mm_game_theme = {}
--------------------------------------------------------------------------------
-function mm_texture.init()
- mm_texture.defaulttexturedir = core.get_texturepath() .. DIR_DELIM .. "base" ..
+function mm_game_theme.init()
+ mm_game_theme.defaulttexturedir = core.get_texturepath_share() .. DIR_DELIM .. "base" ..
DIR_DELIM .. "pack" .. DIR_DELIM
- mm_texture.basetexturedir = mm_texture.defaulttexturedir
+ mm_game_theme.basetexturedir = mm_game_theme.defaulttexturedir
- mm_texture.texturepack = core.settings:get("texture_path")
+ mm_game_theme.texturepack = core.settings:get("texture_path")
- mm_texture.gameid = nil
+ mm_game_theme.gameid = nil
+
+ mm_game_theme.music_handle = nil
end
--------------------------------------------------------------------------------
-function mm_texture.update(tab,gamedetails)
+function mm_game_theme.update(tab,gamedetails)
if tab ~= "singleplayer" then
- mm_texture.reset()
+ mm_game_theme.reset()
return
end
@@ -40,50 +42,54 @@ function mm_texture.update(tab,gamedetails)
return
end
- mm_texture.update_game(gamedetails)
+ mm_game_theme.update_game(gamedetails)
end
--------------------------------------------------------------------------------
-function mm_texture.reset()
- mm_texture.gameid = nil
+function mm_game_theme.reset()
+ mm_game_theme.gameid = nil
local have_bg = false
- local have_overlay = mm_texture.set_generic("overlay")
+ local have_overlay = mm_game_theme.set_generic("overlay")
if not have_overlay then
- have_bg = mm_texture.set_generic("background")
+ have_bg = mm_game_theme.set_generic("background")
end
- mm_texture.clear("header")
- mm_texture.clear("footer")
+ mm_game_theme.clear("header")
+ mm_game_theme.clear("footer")
core.set_clouds(false)
- mm_texture.set_generic("footer")
- mm_texture.set_generic("header")
+ mm_game_theme.set_generic("footer")
+ mm_game_theme.set_generic("header")
if not have_bg then
if core.settings:get_bool("menu_clouds") then
core.set_clouds(true)
else
- mm_texture.set_dirt_bg()
+ mm_game_theme.set_dirt_bg()
end
end
+
+ if mm_game_theme.music_handle ~= nil then
+ core.sound_stop(mm_game_theme.music_handle)
+ end
end
--------------------------------------------------------------------------------
-function mm_texture.update_game(gamedetails)
- if mm_texture.gameid == gamedetails.id then
+function mm_game_theme.update_game(gamedetails)
+ if mm_game_theme.gameid == gamedetails.id then
return
end
local have_bg = false
- local have_overlay = mm_texture.set_game("overlay",gamedetails)
+ local have_overlay = mm_game_theme.set_game("overlay",gamedetails)
if not have_overlay then
- have_bg = mm_texture.set_game("background",gamedetails)
+ have_bg = mm_game_theme.set_game("background",gamedetails)
end
- mm_texture.clear("header")
- mm_texture.clear("footer")
+ mm_game_theme.clear("header")
+ mm_game_theme.clear("footer")
core.set_clouds(false)
if not have_bg then
@@ -91,34 +97,34 @@ function mm_texture.update_game(gamedetails)
if core.settings:get_bool("menu_clouds") then
core.set_clouds(true)
else
- mm_texture.set_dirt_bg()
+ mm_game_theme.set_dirt_bg()
end
end
- mm_texture.set_game("footer",gamedetails)
- mm_texture.set_game("header",gamedetails)
+ mm_game_theme.set_game("footer",gamedetails)
+ mm_game_theme.set_game("header",gamedetails)
- mm_texture.gameid = gamedetails.id
+ mm_game_theme.gameid = gamedetails.id
end
--------------------------------------------------------------------------------
-function mm_texture.clear(identifier)
+function mm_game_theme.clear(identifier)
core.set_background(identifier,"")
end
--------------------------------------------------------------------------------
-function mm_texture.set_generic(identifier)
+function mm_game_theme.set_generic(identifier)
--try texture pack first
- if mm_texture.texturepack ~= nil then
- local path = mm_texture.texturepack .. DIR_DELIM .."menu_" ..
+ if mm_game_theme.texturepack ~= nil then
+ local path = mm_game_theme.texturepack .. DIR_DELIM .."menu_" ..
identifier .. ".png"
if core.set_background(identifier,path) then
return true
end
end
- if mm_texture.defaulttexturedir ~= nil then
- local path = mm_texture.defaulttexturedir .. DIR_DELIM .."menu_" ..
+ if mm_game_theme.defaulttexturedir ~= nil then
+ local path = mm_game_theme.defaulttexturedir .. DIR_DELIM .."menu_" ..
identifier .. ".png"
if core.set_background(identifier,path) then
return true
@@ -129,14 +135,16 @@ function mm_texture.set_generic(identifier)
end
--------------------------------------------------------------------------------
-function mm_texture.set_game(identifier, gamedetails)
+function mm_game_theme.set_game(identifier, gamedetails)
if gamedetails == nil then
return false
end
- if mm_texture.texturepack ~= nil then
- local path = mm_texture.texturepack .. DIR_DELIM ..
+ mm_game_theme.set_music(gamedetails)
+
+ if mm_game_theme.texturepack ~= nil then
+ local path = mm_game_theme.texturepack .. DIR_DELIM ..
gamedetails.id .. "_menu_" .. identifier .. ".png"
if core.set_background(identifier, path) then
return true
@@ -171,9 +179,10 @@ function mm_texture.set_game(identifier, gamedetails)
return false
end
-function mm_texture.set_dirt_bg()
- if mm_texture.texturepack ~= nil then
- local path = mm_texture.texturepack .. DIR_DELIM .."default_dirt.png"
+--------------------------------------------------------------------------------
+function mm_game_theme.set_dirt_bg()
+ if mm_game_theme.texturepack ~= nil then
+ local path = mm_game_theme.texturepack .. DIR_DELIM .."default_dirt.png"
if core.set_background("background", path, true, 128) then
return true
end
@@ -183,3 +192,12 @@ function mm_texture.set_dirt_bg()
local minimalpath = defaulttexturedir .. "menu_bg.png"
core.set_background("background", minimalpath, true, 128)
end
+
+--------------------------------------------------------------------------------
+function mm_game_theme.set_music(gamedetails)
+ if mm_game_theme.music_handle ~= nil then
+ core.sound_stop(mm_game_theme.music_handle)
+ end
+ local music_path = gamedetails.path .. DIR_DELIM .. "menu" .. DIR_DELIM .. "theme"
+ mm_game_theme.music_handle = core.sound_play(music_path, true)
+end
diff --git a/builtin/mainmenu/init.lua b/builtin/mainmenu/init.lua
index 45089c7c9..8e716c2eb 100644
--- a/builtin/mainmenu/init.lua
+++ b/builtin/mainmenu/init.lua
@@ -35,7 +35,7 @@ dofile(menupath .. DIR_DELIM .. "async_event.lua")
dofile(menupath .. DIR_DELIM .. "common.lua")
dofile(menupath .. DIR_DELIM .. "pkgmgr.lua")
dofile(menupath .. DIR_DELIM .. "serverlistmgr.lua")
-dofile(menupath .. DIR_DELIM .. "textures.lua")
+dofile(menupath .. DIR_DELIM .. "game_theme.lua")
dofile(menupath .. DIR_DELIM .. "dlg_config_world.lua")
dofile(menupath .. DIR_DELIM .. "dlg_settings_advanced.lua")
@@ -49,7 +49,7 @@ local tabs = {}
tabs.settings = dofile(menupath .. DIR_DELIM .. "tab_settings.lua")
tabs.content = dofile(menupath .. DIR_DELIM .. "tab_content.lua")
-tabs.credits = dofile(menupath .. DIR_DELIM .. "tab_credits.lua")
+tabs.about = dofile(menupath .. DIR_DELIM .. "tab_about.lua")
tabs.local_game = dofile(menupath .. DIR_DELIM .. "tab_local.lua")
tabs.play_online = dofile(menupath .. DIR_DELIM .. "tab_online.lua")
@@ -87,7 +87,7 @@ local function init_globals()
core.settings:set("menu_last_game", default_game)
end
- mm_texture.init()
+ mm_game_theme.init()
-- Create main tabview
local tv_main = tabview_create("maintab", {x = 12, y = 5.4}, {x = 0, y = 0})
@@ -98,7 +98,7 @@ local function init_globals()
tv_main:add(tabs.content)
tv_main:add(tabs.settings)
- tv_main:add(tabs.credits)
+ tv_main:add(tabs.about)
tv_main:set_global_event_handler(main_event_handler)
tv_main:set_fixed_size(false)
@@ -113,7 +113,7 @@ local function init_globals()
if tv_main.current_tab == "local" then
local game = pkgmgr.find_by_gameid(core.settings:get("menu_last_game"))
if game == nil then
- mm_texture.reset()
+ mm_game_theme.reset()
end
end
@@ -121,8 +121,6 @@ local function init_globals()
tv_main:show()
ui.update()
-
- core.sound_play("main_menu", true)
end
init_globals()
diff --git a/builtin/mainmenu/pkgmgr.lua b/builtin/mainmenu/pkgmgr.lua
index 787936e31..6de671529 100644
--- a/builtin/mainmenu/pkgmgr.lua
+++ b/builtin/mainmenu/pkgmgr.lua
@@ -181,21 +181,6 @@ function pkgmgr.get_texture_packs()
end
--------------------------------------------------------------------------------
-function pkgmgr.extract(modfile)
- if modfile.type == "zip" then
- local tempfolder = os.tempfolder()
-
- if tempfolder ~= nil and
- tempfolder ~= "" then
- core.create_dir(tempfolder)
- if core.extract_zip(modfile.name,tempfolder) then
- return tempfolder
- end
- end
- end
- return nil
-end
-
function pkgmgr.get_folder_type(path)
local testfile = io.open(path .. DIR_DELIM .. "init.lua","r")
if testfile ~= nil then
@@ -450,6 +435,7 @@ function pkgmgr.enable_mod(this, toset)
local toggled_mods = {}
local enabled_mods = {}
toggle_mod_or_modpack(list, toggled_mods, enabled_mods, toset, mod)
+ toset = mod.enabled -- Update if toggled
if not toset then
-- Mod(s) were disabled, so no dependencies need to be enabled
@@ -561,11 +547,10 @@ function pkgmgr.install_dir(type, path, basename, targetpath)
local from = basefolder and basefolder.path or path
if targetpath then
core.delete_dir(targetpath)
- core.create_dir(targetpath)
else
targetpath = core.get_texturepath() .. DIR_DELIM .. basename
end
- if not core.copy_dir(from, targetpath) then
+ if not core.copy_dir(from, targetpath, false) then
return nil,
fgettext("Failed to install $1 to $2", basename, targetpath)
end
@@ -586,7 +571,6 @@ function pkgmgr.install_dir(type, path, basename, targetpath)
-- Get destination name for modpack
if targetpath then
core.delete_dir(targetpath)
- core.create_dir(targetpath)
else
local clean_path = nil
if basename ~= nil then
@@ -610,7 +594,6 @@ function pkgmgr.install_dir(type, path, basename, targetpath)
if targetpath then
core.delete_dir(targetpath)
- core.create_dir(targetpath)
else
local targetfolder = basename
if targetfolder == nil then
@@ -636,14 +619,13 @@ function pkgmgr.install_dir(type, path, basename, targetpath)
if targetpath then
core.delete_dir(targetpath)
- core.create_dir(targetpath)
else
targetpath = core.get_gamepath() .. DIR_DELIM .. basename
end
end
-- Copy it
- if not core.copy_dir(basefolder.path, targetpath) then
+ if not core.copy_dir(basefolder.path, targetpath, false) then
return nil,
fgettext("Failed to install $1 to $2", basename, targetpath)
end
@@ -658,23 +640,6 @@ function pkgmgr.install_dir(type, path, basename, targetpath)
end
--------------------------------------------------------------------------------
-function pkgmgr.install(type, modfilename, basename, dest)
- local archive_info = pkgmgr.identify_filetype(modfilename)
- local path = pkgmgr.extract(archive_info)
-
- if path == nil then
- return nil,
- fgettext("Install: file: \"$1\"", archive_info.name) .. "\n" ..
- fgettext("Install: Unsupported file type \"$1\" or broken archive",
- archive_info.type)
- end
-
- local targetpath, msg = pkgmgr.install_dir(type, path, basename, dest)
- core.delete_dir(path)
- return targetpath, msg
-end
-
---------------------------------------------------------------------------------
function pkgmgr.preparemodlist(data)
local retval = {}
@@ -682,11 +647,9 @@ function pkgmgr.preparemodlist(data)
local game_mods = {}
--read global mods
- local modpath = core.get_modpath()
-
- if modpath ~= nil and
- modpath ~= "" then
- get_mods(modpath,global_mods)
+ local modpaths = core.get_modpaths()
+ for _, modpath in ipairs(modpaths) do
+ get_mods(modpath, global_mods)
end
for i=1,#global_mods,1 do
@@ -820,45 +783,6 @@ function pkgmgr.refresh_globals()
end
--------------------------------------------------------------------------------
-function pkgmgr.identify_filetype(name)
-
- if name:sub(-3):lower() == "zip" then
- return {
- name = name,
- type = "zip"
- }
- end
-
- if name:sub(-6):lower() == "tar.gz" or
- name:sub(-3):lower() == "tgz"then
- return {
- name = name,
- type = "tgz"
- }
- end
-
- if name:sub(-6):lower() == "tar.bz2" then
- return {
- name = name,
- type = "tbz"
- }
- end
-
- if name:sub(-2):lower() == "7z" then
- return {
- name = name,
- type = "7z"
- }
- end
-
- return {
- name = name,
- type = "ukn"
- }
-end
-
-
---------------------------------------------------------------------------------
function pkgmgr.find_by_gameid(gameid)
for i=1,#pkgmgr.games,1 do
if pkgmgr.games[i].id == gameid then
diff --git a/builtin/mainmenu/tab_credits.lua b/builtin/mainmenu/tab_about.lua
index a34dd58bb..ba258fd2d 100644
--- a/builtin/mainmenu/tab_credits.lua
+++ b/builtin/mainmenu/tab_about.lua
@@ -28,32 +28,35 @@ local core_developers = {
"Lars Hofhansl <larsh@apache.org>",
"Pierre-Yves Rollo <dev@pyrollo.com>",
"v-rob <robinsonvincent89@gmail.com>",
+ "hecks",
+ "Hugues Ross <hugues.ross@gmail.com>",
+ "Dmitry Kostenko (x2048) <codeforsmile@gmail.com>",
}
-- For updating active/previous contributors, see the script in ./util/gather_git_credits.py
local active_contributors = {
- "Wuzzy [devtest game, visual corrections]",
- "Zughy [Visual improvements, various fixes]",
- "Maksim (MoNTE48) [Android]",
+ "Wuzzy [I18n for builtin, liquid features, fixes]",
+ "Zughy [Various features and fixes]",
"numzero [Graphics and rendering]",
- "appgurueu [Various internal fixes]",
- "Desour [Formspec and vector API changes]",
- "HybridDog [Rendering fixes and documentation]",
- "Hugues Ross [Graphics-related improvements]",
- "ANAND (ClobberXD) [Mouse buttons rebinding]",
- "luk3yx [Fixes]",
- "hecks [Audiovisuals, Lua API]",
- "LoneWolfHT [Object crosshair, documentation fixes]",
- "Lejo [Server-related improvements]",
- "EvidenceB [Compass HUD element]",
- "Paul Ouellette (pauloue) [Lua API, documentation]",
- "TheTermos [Collision detection, physics]",
+ "Desour [Internal fixes, Clipboard on X11]",
+ "Lars Müller [Various internal fixes]",
+ "JosiahWI [CMake, cleanups and fixes]",
+ "HybridDog [builtin, documentation]",
+ "Jude Melton-Houghton [Database implementation]",
+ "savilli [Fixes]",
+ "Liso [Shadow Mapping]",
+ "MoNTE48 [Build fix]",
+ "Jean-Patrick Guerrero (kilbith) [Fixes]",
+ "ROllerozxa [Code cleanups]",
+ "Lejo [bitop library integration]",
+ "LoneWolfHT [Build fixes]",
+ "NeroBurner [Joystick]",
+ "Elias Fleckenstein [Internal fixes]",
"David CARLIER [Unix & Haiku build fixes]",
- "dcbrwn [Object shading]",
- "Elias Fleckenstein [API features/fixes]",
- "Jean-Patrick Guerrero (kilbith) [model element, visual fixes]",
- "k.h.lai [Memory leak fixes, documentation]",
+ "pecksin [Clickable web links]",
+ "srfqi [Android & rendering fixes]",
+ "EvidenceB [Formspec]",
}
local previous_core_developers = {
@@ -70,6 +73,7 @@ local previous_core_developers = {
"Zeno",
"ShadowNinja <shadowninja@minetest.net>",
"Auke Kok (sofar) <sofar@foo-projects.org>",
+ "Aaron Suen <warr1024@gmail.com>",
}
local previous_contributors = {
@@ -80,10 +84,10 @@ local previous_contributors = {
"MirceaKitsune <mirceakitsune@gmail.com>",
"Constantin Wenger (SpeedProg)",
"Ciaran Gultnieks (CiaranG)",
- "stujones11 [Android UX improvements]",
- "Rogier <rogier777@gmail.com> [Fixes]",
- "Gregory Currie (gregorycu) [optimisation]",
- "srifqi [Fixes]",
+ "Paul Ouellette (pauloue)",
+ "stujones11",
+ "Rogier <rogier777@gmail.com>",
+ "Gregory Currie (gregorycu)",
"JacobF",
"Jeija <jeija@mesecons.net> [HTTP, particles]",
}
@@ -97,8 +101,8 @@ local function buildCreditList(source)
end
return {
- name = "credits",
- caption = fgettext("Credits"),
+ name = "about",
+ caption = fgettext("About"),
cbf_formspec = function(tabview, name, tabdata)
local logofile = defaulttexturedir .. "logo.png"
local version = core.get_version()
@@ -119,11 +123,16 @@ return {
buildCreditList(previous_contributors) .. "," ..
";1]"
+ -- Render information
+ fs = fs .. "label[0.75,4.9;" ..
+ fgettext("Active renderer:") .. "\n" ..
+ core.formspec_escape(core.get_screen_info().render_info) .. "]"
+
if PLATFORM ~= "Android" then
fs = fs .. "tooltip[userdata;" ..
fgettext("Opens the directory that contains user-provided worlds, games, mods,\n" ..
"and texture packs in a file manager / explorer.") .. "]"
- fs = fs .. "button[0,4.75;3.5,1;userdata;" .. fgettext("Open User Data Directory") .. "]"
+ fs = fs .. "button[0,4;3.5,1;userdata;" .. fgettext("Open User Data Directory") .. "]"
end
return fs
diff --git a/builtin/mainmenu/tab_content.lua b/builtin/mainmenu/tab_content.lua
index 336730bf4..fb7f121f8 100644
--- a/builtin/mainmenu/tab_content.lua
+++ b/builtin/mainmenu/tab_content.lua
@@ -146,10 +146,25 @@ local function get_formspec(tabview, name, tabdata)
end
--------------------------------------------------------------------------------
+local function handle_doubleclick(pkg)
+ if pkg.type == "txp" then
+ if core.settings:get("texture_path") == pkg.path then
+ core.settings:set("texture_path", "")
+ else
+ core.settings:set("texture_path", pkg.path)
+ end
+ packages = nil
+ end
+end
+
+--------------------------------------------------------------------------------
local function handle_buttons(tabview, fields, tabname, tabdata)
if fields["pkglist"] ~= nil then
local event = core.explode_table_event(fields["pkglist"])
tabdata.selected_pkg = event.row
+ if event.type == "DCL" then
+ handle_doubleclick(packages:get_list()[tabdata.selected_pkg])
+ end
return true
end
diff --git a/builtin/mainmenu/tab_local.lua b/builtin/mainmenu/tab_local.lua
index 0e06c3bef..e77c6f04d 100644
--- a/builtin/mainmenu/tab_local.lua
+++ b/builtin/mainmenu/tab_local.lua
@@ -18,8 +18,14 @@
local enable_gamebar = PLATFORM ~= "Android"
local current_game, singleplayer_refresh_gamebar
+local valid_disabled_settings = {
+ ["enable_damage"]=true,
+ ["creative_mode"]=true,
+ ["enable_server"]=true,
+}
if enable_gamebar then
+ -- Currently chosen game in gamebar for theming and filtering
function current_game()
local last_game_id = core.settings:get("menu_last_game")
local game = pkgmgr.find_by_gameid(last_game_id)
@@ -27,10 +33,30 @@ if enable_gamebar then
return game
end
+ -- Apply menu changes from given game
+ function apply_game(game)
+ core.set_topleft_text(game.name)
+ core.settings:set("menu_last_game", game.id)
+ menudata.worldlist:set_filtercriteria(game.id)
+
+ mm_game_theme.update("singleplayer", game) -- this refreshes the formspec
+
+ local index = filterlist.get_current_index(menudata.worldlist,
+ tonumber(core.settings: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)
+ end
+
function singleplayer_refresh_gamebar()
local old_bar = ui.find_by_name("game_button_bar")
-
if old_bar ~= nil then
old_bar:delete()
end
@@ -45,26 +71,10 @@ if enable_gamebar then
return true
end
- for key,value in pairs(fields) do
- for j=1,#pkgmgr.games,1 do
- if ("game_btnbar_" .. pkgmgr.games[j].id == key) then
- mm_texture.update("singleplayer", pkgmgr.games[j])
- core.set_topleft_text(pkgmgr.games[j].name)
- core.settings:set("menu_last_game",pkgmgr.games[j].id)
- menudata.worldlist:set_filtercriteria(pkgmgr.games[j].id)
- local index = filterlist.get_current_index(menudata.worldlist,
- tonumber(core.settings: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
+ for _, game in ipairs(pkgmgr.games) do
+ if fields["game_btnbar_" .. game.id] then
+ apply_game(game)
+ return true
end
end
end
@@ -73,25 +83,22 @@ if enable_gamebar then
game_buttonbar_button_handler,
{x=-0.3,y=5.9}, "horizontal", {x=12.4,y=1.15})
- for i=1,#pkgmgr.games,1 do
- local btn_name = "game_btnbar_" .. pkgmgr.games[i].id
+ for _, game in ipairs(pkgmgr.games) do
+ local btn_name = "game_btnbar_" .. game.id
local image = nil
local text = nil
- local tooltip = core.formspec_escape(pkgmgr.games[i].name)
+ local tooltip = core.formspec_escape(game.name)
- if pkgmgr.games[i].menuicon_path ~= nil and
- pkgmgr.games[i].menuicon_path ~= "" then
- image = core.formspec_escape(pkgmgr.games[i].menuicon_path)
+ if (game.menuicon_path or "") ~= "" then
+ image = core.formspec_escape(game.menuicon_path)
else
-
- local part1 = pkgmgr.games[i].id:sub(1,5)
- local part2 = pkgmgr.games[i].id:sub(6,10)
- local part3 = pkgmgr.games[i].id:sub(11)
+ local part1 = game.id:sub(1,5)
+ local part2 = game.id:sub(6,10)
+ local part3 = game.id:sub(11)
text = part1 .. "\n" .. part2
- if part3 ~= nil and
- part3 ~= "" then
+ if part3 ~= "" then
text = text .. "\n" .. part3
end
end
@@ -102,37 +109,91 @@ if enable_gamebar then
btnbar:add_button("game_open_cdb", "", plus_image, fgettext("Install games from ContentDB"))
end
else
+ -- Currently chosen game in gamebar: no gamebar -> no "current" game
function current_game()
return nil
end
end
+local function get_disabled_settings(game)
+ if not game then
+ return {}
+ end
+
+ local gameconfig = Settings(game.path .. "/game.conf")
+ local disabled_settings = {}
+ if gameconfig then
+ local disabled_settings_str = (gameconfig:get("disabled_settings") or ""):split()
+ for _, value in pairs(disabled_settings_str) do
+ local state = false
+ value = value:trim()
+ if string.sub(value, 1, 1) == "!" then
+ state = true
+ value = string.sub(value, 2)
+ end
+ if valid_disabled_settings[value] then
+ disabled_settings[value] = state
+ else
+ core.log("error", "Invalid disabled setting in game.conf: "..tostring(value))
+ end
+ end
+ end
+ return disabled_settings
+end
+
local function get_formspec(tabview, name, tabdata)
local retval = ""
local index = filterlist.get_current_index(menudata.worldlist,
- tonumber(core.settings:get("mainmenu_last_selected_world"))
- )
+ tonumber(core.settings:get("mainmenu_last_selected_world")))
+ local list = menudata.worldlist:get_list()
+ local world = list and index and list[index]
+ local game
+ if world then
+ game = pkgmgr.find_by_gameid(world.gameid)
+ else
+ game = current_game()
+ end
+ local disabled_settings = get_disabled_settings(game)
+
+ local creative, damage, host = "", "", ""
+
+ -- Y offsets for game settings checkboxes
+ local y = -0.2
+ local yo = 0.45
+
+ if disabled_settings["creative_mode"] == nil then
+ creative = "checkbox[0,"..y..";cb_creative_mode;".. fgettext("Creative Mode") .. ";" ..
+ dump(core.settings:get_bool("creative_mode")) .. "]"
+ y = y + yo
+ end
+ if disabled_settings["enable_damage"] == nil then
+ damage = "checkbox[0,"..y..";cb_enable_damage;".. fgettext("Enable Damage") .. ";" ..
+ dump(core.settings:get_bool("enable_damage")) .. "]"
+ y = y + yo
+ end
+ if disabled_settings["enable_server"] == nil then
+ host = "checkbox[0,"..y..";cb_server;".. fgettext("Host Server") ..";" ..
+ dump(core.settings:get_bool("enable_server")) .. "]"
+ y = y + yo
+ end
retval = retval ..
"button[3.9,3.8;2.8,1;world_delete;".. fgettext("Delete") .. "]" ..
"button[6.55,3.8;2.8,1;world_configure;".. fgettext("Select Mods") .. "]" ..
"button[9.2,3.8;2.8,1;world_create;".. fgettext("New") .. "]" ..
"label[3.9,-0.05;".. fgettext("Select World:") .. "]"..
- "checkbox[0,-0.20;cb_creative_mode;".. fgettext("Creative Mode") .. ";" ..
- dump(core.settings:get_bool("creative_mode")) .. "]"..
- "checkbox[0,0.25;cb_enable_damage;".. fgettext("Enable Damage") .. ";" ..
- dump(core.settings:get_bool("enable_damage")) .. "]"..
- "checkbox[0,0.7;cb_server;".. fgettext("Host Server") ..";" ..
- dump(core.settings:get_bool("enable_server")) .. "]" ..
+ creative ..
+ damage ..
+ host ..
"textlist[3.9,0.4;7.9,3.45;sp_worlds;" ..
- menu_render_worldlist() ..
+ menu_render_worldlist(not enable_gamebar) ..
";" .. index .. "]"
- if core.settings:get_bool("enable_server") then
+ if core.settings:get_bool("enable_server") and disabled_settings["enable_server"] == nil then
retval = retval ..
"button[7.9,4.75;4.1,1;play;".. fgettext("Host Game") .. "]" ..
- "checkbox[0,1.15;cb_server_announce;" .. fgettext("Announce Server") .. ";" ..
+ "checkbox[0,"..y..";cb_server_announce;" .. fgettext("Announce Server") .. ";" ..
dump(core.settings:get_bool("server_announce")) .. "]" ..
"field[0.3,2.85;3.8,0.5;te_playername;" .. fgettext("Name") .. ";" ..
core.formspec_escape(core.settings:get("name")) .. "]" ..
@@ -227,9 +288,21 @@ local function main_button_handler(this, fields, name, tabdata)
-- Update last game
local world = menudata.worldlist:get_raw_element(gamedata.selected_world)
+ local game_obj
if world then
- local game = pkgmgr.find_by_gameid(world.gameid)
- core.settings:set("menu_last_game", game.id)
+ game_obj = pkgmgr.find_by_gameid(world.gameid)
+ core.settings:set("menu_last_game", game_obj.id)
+ end
+
+ local disabled_settings = get_disabled_settings(game_obj)
+ for k, _ in pairs(valid_disabled_settings) do
+ local v = disabled_settings[k]
+ if v ~= nil then
+ if k == "enable_server" and v == true then
+ error("Setting 'enable_server' cannot be force-enabled! The game.conf needs to be fixed.")
+ end
+ core.settings:set_bool(k, disabled_settings[k])
+ end
end
if core.settings:get_bool("enable_server") then
@@ -251,11 +324,11 @@ local function main_button_handler(this, fields, name, tabdata)
end
if fields["world_create"] ~= nil then
- local create_world_dlg = create_create_world_dlg(true)
+ local create_world_dlg = create_create_world_dlg(enable_gamebar)
create_world_dlg:set_parent(this)
this:hide()
create_world_dlg:show()
- mm_texture.update("singleplayer", current_game())
+ mm_game_theme.update("singleplayer", current_game())
return true
end
@@ -272,7 +345,7 @@ local function main_button_handler(this, fields, name, tabdata)
delete_world_dlg:set_parent(this)
this:hide()
delete_world_dlg:show()
- mm_texture.update("singleplayer",current_game())
+ mm_game_theme.update("singleplayer",current_game())
end
end
@@ -290,7 +363,7 @@ local function main_button_handler(this, fields, name, tabdata)
configdialog:set_parent(this)
this:hide()
configdialog:show()
- mm_texture.update("singleplayer",current_game())
+ mm_game_theme.update("singleplayer",current_game())
end
end
@@ -303,11 +376,8 @@ if enable_gamebar then
function on_change(type, old_tab, new_tab)
if (type == "ENTER") then
local game = current_game()
-
if game then
- menudata.worldlist:set_filtercriteria(game.id)
- core.set_topleft_text(game.name)
- mm_texture.update("singleplayer",game)
+ apply_game(game)
end
singleplayer_refresh_gamebar()
@@ -319,7 +389,7 @@ if enable_gamebar then
gamebar:hide()
end
core.set_topleft_text("")
- mm_texture.update(new_tab,nil)
+ mm_game_theme.update(new_tab,nil)
end
end
end
diff --git a/builtin/mainmenu/tab_online.lua b/builtin/mainmenu/tab_online.lua
index e6748ed88..fb7409864 100644
--- a/builtin/mainmenu/tab_online.lua
+++ b/builtin/mainmenu/tab_online.lua
@@ -15,17 +15,50 @@
--with this program; if not, write to the Free Software Foundation, Inc.,
--51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
---------------------------------------------------------------------------------
+local function get_sorted_servers()
+ local servers = {
+ fav = {},
+ public = {},
+ incompatible = {}
+ }
+
+ local favs = serverlistmgr.get_favorites()
+ local taken_favs = {}
+ local result = menudata.search_result or serverlistmgr.servers
+ for _, server in ipairs(result) do
+ server.is_favorite = false
+ for index, fav in ipairs(favs) do
+ if server.address == fav.address and server.port == fav.port then
+ taken_favs[index] = true
+ server.is_favorite = true
+ break
+ end
+ end
+ server.is_compatible = is_server_protocol_compat(server.proto_min, server.proto_max)
+ if server.is_favorite then
+ table.insert(servers.fav, server)
+ elseif server.is_compatible then
+ table.insert(servers.public, server)
+ else
+ table.insert(servers.incompatible, server)
+ end
+ end
+
+ if not menudata.search_result then
+ for index, fav in ipairs(favs) do
+ if not taken_favs[index] then
+ table.insert(servers.fav, fav)
+ end
+ end
+ end
+
+ return servers
+end
+
local function get_formspec(tabview, name, tabdata)
-- Update the cached supported proto info,
-- it may have changed after a change by the settings menu.
common_update_cached_supp_proto()
- local selected
- if menudata.search_result then
- selected = menudata.search_result[tabdata.selected]
- else
- selected = serverlistmgr.servers[tabdata.selected]
- end
if not tabdata.search_for then
tabdata.search_for = ""
@@ -33,128 +66,221 @@ local function get_formspec(tabview, name, tabdata)
local retval =
-- Search
- "field[0.15,0.075;5.91,1;te_search;;" .. core.formspec_escape(tabdata.search_for) .. "]" ..
- "image_button[5.63,-.165;.83,.83;" .. core.formspec_escape(defaulttexturedir .. "search.png") .. ";btn_mp_search;]" ..
- "image_button[6.3,-.165;.83,.83;" .. core.formspec_escape(defaulttexturedir .. "clear.png") .. ";btn_mp_clear;]" ..
- "image_button[6.97,-.165;.83,.83;" .. core.formspec_escape(defaulttexturedir .. "refresh.png")
- .. ";btn_mp_refresh;]" ..
+ "field[0.25,0.25;7,0.75;te_search;;" .. core.formspec_escape(tabdata.search_for) .. "]" ..
+ "container[7.25,0.25]" ..
+ "image_button[0,0;0.75,0.75;" .. core.formspec_escape(defaulttexturedir .. "search.png") .. ";btn_mp_search;]" ..
+ "image_button[0.75,0;0.75,0.75;" .. core.formspec_escape(defaulttexturedir .. "clear.png") .. ";btn_mp_clear;]" ..
+ "image_button[1.5,0;0.75,0.75;" .. core.formspec_escape(defaulttexturedir .. "refresh.png") .. ";btn_mp_refresh;]" ..
+ "tooltip[btn_mp_clear;" .. fgettext("Clear") .. "]" ..
+ "tooltip[btn_mp_search;" .. fgettext("Search") .. "]" ..
+ "tooltip[btn_mp_refresh;" .. fgettext("Refresh") .. "]" ..
+ "container_end[]" ..
+
+ "container[9.75,0]" ..
+ "box[0,0;5.75,7;#666666]" ..
-- Address / Port
- "label[7.75,-0.25;" .. fgettext("Address / Port") .. "]" ..
- "field[8,0.65;3.25,0.5;te_address;;" ..
+ "label[0.25,0.35;" .. fgettext("Address") .. "]" ..
+ "label[4.25,0.35;" .. fgettext("Port") .. "]" ..
+ "field[0.25,0.5;4,0.75;te_address;;" ..
core.formspec_escape(core.settings:get("address")) .. "]" ..
- "field[11.1,0.65;1.4,0.5;te_port;;" ..
+ "field[4.25,0.5;1.25,0.75;te_port;;" ..
core.formspec_escape(core.settings:get("remote_port")) .. "]" ..
-- Name / Password
- "label[7.75,0.95;" .. fgettext("Name / Password") .. "]" ..
- "field[8,1.85;2.9,0.5;te_name;;" ..
+ "label[0.25,1.55;" .. fgettext("Name") .. "]" ..
+ "label[3,1.55;" .. fgettext("Password") .. "]" ..
+ "field[0.25,1.75;2.75,0.75;te_name;;" ..
core.formspec_escape(core.settings:get("name")) .. "]" ..
- "pwdfield[10.73,1.85;1.77,0.5;te_pwd;]" ..
+ "pwdfield[3,1.75;2.5,0.75;te_pwd;]" ..
-- Description Background
- "box[7.73,2.25;4.25,2.6;#999999]"..
+ "label[0.25,2.75;" .. fgettext("Server Description") .. "]" ..
+ "box[0.25,3;5.25,2.75;#999999]"..
-- Connect
- "button[9.88,4.9;2.3,1;btn_mp_connect;" .. fgettext("Connect") .. "]"
+ "button[3,6;2.5,0.75;btn_mp_connect;" .. fgettext("Connect") .. "]"
- if tabdata.selected and selected then
+ if tabdata.selected then
if gamedata.fav then
- retval = retval .. "button[7.73,4.9;2.3,1;btn_delete_favorite;" ..
+ retval = retval .. "button[0.25,6;2.5,0.75;btn_delete_favorite;" ..
fgettext("Del. Favorite") .. "]"
end
- if selected.description then
- retval = retval .. "textarea[8.1,2.3;4.23,2.9;;;" ..
- core.formspec_escape((gamedata.serverdescription or ""), true) .. "]"
+ if gamedata.serverdescription then
+ retval = retval .. "textarea[0.25,3;5.25,2.75;;;" ..
+ core.formspec_escape(gamedata.serverdescription) .. "]"
end
end
- --favorites
+ retval = retval .. "container_end[]"
+
+ -- Table
retval = retval .. "tablecolumns[" ..
- image_column(fgettext("Favorite"), "favorite") .. ";" ..
- image_column(fgettext("Ping")) .. ",padding=0.25;" ..
- "color,span=3;" ..
- "text,align=right;" .. -- clients
- "text,align=center,padding=0.25;" .. -- "/"
- "text,align=right,padding=0.25;" .. -- clients_max
- image_column(fgettext("Creative mode"), "creative") .. ",padding=1;" ..
- image_column(fgettext("Damage enabled"), "damage") .. ",padding=0.25;" ..
- --~ PvP = Player versus Player
- image_column(fgettext("PvP enabled"), "pvp") .. ",padding=0.25;" ..
+ "image,tooltip=" .. fgettext("Ping") .. "," ..
+ "0=" .. core.formspec_escape(defaulttexturedir .. "blank.png") .. "," ..
+ "1=" .. core.formspec_escape(defaulttexturedir .. "server_ping_4.png") .. "," ..
+ "2=" .. core.formspec_escape(defaulttexturedir .. "server_ping_3.png") .. "," ..
+ "3=" .. core.formspec_escape(defaulttexturedir .. "server_ping_2.png") .. "," ..
+ "4=" .. core.formspec_escape(defaulttexturedir .. "server_ping_1.png") .. "," ..
+ "5=" .. core.formspec_escape(defaulttexturedir .. "server_favorite.png") .. "," ..
+ "6=" .. core.formspec_escape(defaulttexturedir .. "server_public.png") .. "," ..
+ "7=" .. core.formspec_escape(defaulttexturedir .. "server_incompatible.png") .. ";" ..
"color,span=1;" ..
- "text,padding=1]" ..
- "table[-0.15,0.6;7.75,5.15;favorites;"
-
- if menudata.search_result then
- local favs = serverlistmgr.get_favorites()
- for i = 1, #menudata.search_result do
- local server = menudata.search_result[i]
- for fav_id = 1, #favs do
- if server.address == favs[fav_id].address and
- server.port == favs[fav_id].port then
- server.is_favorite = true
- end
- end
-
- if i ~= 1 then
- retval = retval .. ","
- end
-
- retval = retval .. render_serverlist_row(server, server.is_favorite)
- end
- elseif #serverlistmgr.servers > 0 then
- local favs = serverlistmgr.get_favorites()
- if #favs > 0 then
- for i = 1, #favs do
- for j = 1, #serverlistmgr.servers do
- if serverlistmgr.servers[j].address == favs[i].address and
- serverlistmgr.servers[j].port == favs[i].port then
- table.insert(serverlistmgr.servers, i, table.remove(serverlistmgr.servers, j))
- end
- end
- if favs[i].address ~= serverlistmgr.servers[i].address then
- table.insert(serverlistmgr.servers, i, favs[i])
- end
+ "text,align=inline;"..
+ "color,span=1;" ..
+ "text,align=inline,width=4.25;" ..
+ "image,tooltip=" .. fgettext("Creative mode") .. "," ..
+ "0=" .. core.formspec_escape(defaulttexturedir .. "blank.png") .. "," ..
+ "1=" .. core.formspec_escape(defaulttexturedir .. "server_flags_creative.png") .. "," ..
+ "align=inline,padding=0.25,width=1.5;" ..
+ --~ PvP = Player versus Player
+ "image,tooltip=" .. fgettext("Damage / PvP") .. "," ..
+ "0=" .. core.formspec_escape(defaulttexturedir .. "blank.png") .. "," ..
+ "1=" .. core.formspec_escape(defaulttexturedir .. "server_flags_damage.png") .. "," ..
+ "2=" .. core.formspec_escape(defaulttexturedir .. "server_flags_pvp.png") .. "," ..
+ "align=inline,padding=0.25,width=1.5;" ..
+ "color,align=inline,span=1;" ..
+ "text,align=inline,padding=1]" ..
+ "table[0.25,1;9.25,5.75;servers;"
+
+ local servers = get_sorted_servers()
+
+ local dividers = {
+ fav = "5,#ffff00," .. fgettext("Favorites") .. ",,,0,0,,",
+ public = "6,#4bdd42," .. fgettext("Public Servers") .. ",,,0,0,,",
+ incompatible = "7,"..mt_color_grey.."," .. fgettext("Incompatible Servers") .. ",,,0,0,,"
+ }
+ local order = {"fav", "public", "incompatible"}
+
+ tabdata.lookup = {} -- maps row number to server
+ local rows = {}
+ for _, section in ipairs(order) do
+ local section_servers = servers[section]
+ if next(section_servers) ~= nil then
+ rows[#rows + 1] = dividers[section]
+ for _, server in ipairs(section_servers) do
+ tabdata.lookup[#rows + 1] = server
+ rows[#rows + 1] = render_serverlist_row(server)
end
end
-
- retval = retval .. render_serverlist_row(serverlistmgr.servers[1], (#favs > 0))
- for i = 2, #serverlistmgr.servers do
- retval = retval .. "," .. render_serverlist_row(serverlistmgr.servers[i], (i <= #favs))
- end
end
+ retval = retval .. table.concat(rows, ",")
+
if tabdata.selected then
retval = retval .. ";" .. tabdata.selected .. "]"
else
retval = retval .. ";0]"
end
- return retval
+ return retval, "size[15.5,7,false]real_coordinates[true]"
end
--------------------------------------------------------------------------------
-local function main_button_handler(tabview, fields, name, tabdata)
- local serverlist = menudata.search_result or serverlistmgr.servers
+local function search_server_list(input)
+ menudata.search_result = nil
+ if #serverlistmgr.servers < 2 then
+ return
+ end
+
+ -- setup the keyword list
+ local keywords = {}
+ for word in input:gmatch("%S+") do
+ word = word:gsub("(%W)", "%%%1")
+ table.insert(keywords, word)
+ end
+
+ if #keywords == 0 then
+ return
+ end
+
+ menudata.search_result = {}
+
+ -- Search the serverlist
+ local search_result = {}
+ for i = 1, #serverlistmgr.servers do
+ local server = serverlistmgr.servers[i]
+ local found = 0
+ for k = 1, #keywords do
+ local keyword = keywords[k]
+ if server.name then
+ local sername = server.name:lower()
+ local _, count = sername:gsub(keyword, keyword)
+ found = found + count * 4
+ end
+
+ if server.description then
+ local desc = server.description:lower()
+ local _, count = desc:gsub(keyword, keyword)
+ found = found + count * 2
+ end
+ end
+ if found > 0 then
+ local points = (#serverlistmgr.servers - i) / 5 + found
+ server.points = points
+ table.insert(search_result, server)
+ end
+ end
+
+ if #search_result == 0 then
+ return
+ end
+
+ table.sort(search_result, function(a, b)
+ return a.points > b.points
+ end)
+ menudata.search_result = search_result
+end
+
+local function set_selected_server(tabdata, idx, server)
+ -- reset selection
+ if idx == nil or server == nil then
+ tabdata.selected = nil
+
+ core.settings:set("address", "")
+ core.settings:set("remote_port", "30000")
+ return
+ end
+
+ local address = server.address
+ local port = server.port
+ gamedata.serverdescription = server.description
+
+ gamedata.fav = false
+ for _, fav in ipairs(serverlistmgr.get_favorites()) do
+ if address == fav.address and port == fav.port then
+ gamedata.fav = true
+ break
+ end
+ end
+
+ if address and port then
+ core.settings:set("address", address)
+ core.settings:set("remote_port", port)
+ end
+ tabdata.selected = idx
+end
+
+local function main_button_handler(tabview, fields, name, tabdata)
if fields.te_name then
gamedata.playername = fields.te_name
core.settings:set("name", fields.te_name)
end
- if fields.favorites then
- local event = core.explode_table_event(fields.favorites)
- local fav = serverlist[event.row]
+ if fields.servers then
+ local event = core.explode_table_event(fields.servers)
+ local server = tabdata.lookup[event.row]
- if event.type == "DCL" then
- if event.row <= #serverlist then
+ if server then
+ if event.type == "DCL" then
if not is_server_protocol_compat_or_error(
- fav.proto_min, fav.proto_max) then
+ server.proto_min, server.proto_max) then
return true
end
- gamedata.address = fav.address
- gamedata.port = fav.port
+ gamedata.address = server.address
+ gamedata.port = server.port
gamedata.playername = fields.te_name
gamedata.selected_world = 0
@@ -162,84 +288,32 @@ local function main_button_handler(tabview, fields, name, tabdata)
gamedata.password = fields.te_pwd
end
- gamedata.servername = fav.name
- gamedata.serverdescription = fav.description
+ gamedata.servername = server.name
+ gamedata.serverdescription = server.description
if gamedata.address and gamedata.port then
core.settings:set("address", gamedata.address)
core.settings:set("remote_port", gamedata.port)
core.start()
end
+ return true
end
- return true
- end
-
- if event.type == "CHG" then
- if event.row <= #serverlist then
- gamedata.fav = false
- local favs = serverlistmgr.get_favorites()
- local address = fav.address
- local port = fav.port
- gamedata.serverdescription = fav.description
-
- for i = 1, #favs do
- if fav.address == favs[i].address and
- fav.port == favs[i].port then
- gamedata.fav = true
- end
- end
-
- if address and port then
- core.settings:set("address", address)
- core.settings:set("remote_port", port)
- end
- tabdata.selected = event.row
- end
- return true
- end
- end
-
- if fields.key_up or fields.key_down then
- local fav_idx = core.get_table_index("favorites")
- local fav = serverlist[fav_idx]
-
- if fav_idx then
- if fields.key_up and fav_idx > 1 then
- fav_idx = fav_idx - 1
- elseif fields.key_down and fav_idx < #serverlistmgr.servers then
- fav_idx = fav_idx + 1
+ if event.type == "CHG" then
+ set_selected_server(tabdata, event.row, server)
+ return true
end
- else
- fav_idx = 1
- end
-
- if not serverlistmgr.servers or not fav then
- tabdata.selected = 0
- return true
- end
-
- local address = fav.address
- local port = fav.port
- gamedata.serverdescription = fav.description
- if address and port then
- core.settings:set("address", address)
- core.settings:set("remote_port", port)
end
-
- tabdata.selected = fav_idx
- return true
end
if fields.btn_delete_favorite then
- local current_favorite = core.get_table_index("favorites")
- if not current_favorite then return end
-
- serverlistmgr.delete_favorite(serverlistmgr.servers[current_favorite])
- serverlistmgr.sync()
- tabdata.selected = nil
-
- core.settings:set("address", "")
- core.settings:set("remote_port", "30000")
+ local idx = core.get_table_index("servers")
+ if not idx then return end
+ local server = tabdata.lookup[idx]
+ if not server then return end
+
+ serverlistmgr.delete_favorite(server)
+ -- the server at [idx+1] will be at idx once list is refreshed
+ set_selected_server(tabdata, idx, tabdata.lookup[idx+1])
return true
end
@@ -250,63 +324,13 @@ local function main_button_handler(tabview, fields, name, tabdata)
end
if fields.btn_mp_search or fields.key_enter_field == "te_search" then
- tabdata.selected = 1
- local input = fields.te_search:lower()
tabdata.search_for = fields.te_search
-
- if #serverlistmgr.servers < 2 then
- return true
- end
-
- menudata.search_result = {}
-
- -- setup the keyword list
- local keywords = {}
- for word in input:gmatch("%S+") do
- word = word:gsub("(%W)", "%%%1")
- table.insert(keywords, word)
+ search_server_list(fields.te_search:lower())
+ if menudata.search_result then
+ -- first server in row 2 due to header
+ set_selected_server(tabdata, 2, menudata.search_result[1])
end
- if #keywords == 0 then
- menudata.search_result = nil
- return true
- end
-
- -- Search the serverlist
- local search_result = {}
- for i = 1, #serverlistmgr.servers do
- local server = serverlistmgr.servers[i]
- local found = 0
- for k = 1, #keywords do
- local keyword = keywords[k]
- if server.name then
- local sername = server.name:lower()
- local _, count = sername:gsub(keyword, keyword)
- found = found + count * 4
- end
-
- if server.description then
- local desc = server.description:lower()
- local _, count = desc:gsub(keyword, keyword)
- found = found + count * 2
- end
- end
- if found > 0 then
- local points = (#serverlistmgr.servers - i) / 5 + found
- server.points = points
- table.insert(search_result, server)
- end
- end
- if #search_result > 0 then
- table.sort(search_result, function(a, b)
- return a.points > b.points
- end)
- menudata.search_result = search_result
- local first_server = search_result[1]
- core.settings:set("address", first_server.address)
- core.settings:set("remote_port", first_server.port)
- gamedata.serverdescription = first_server.description
- end
return true
end
@@ -322,20 +346,22 @@ local function main_button_handler(tabview, fields, name, tabdata)
gamedata.address = fields.te_address
gamedata.port = tonumber(fields.te_port)
gamedata.selected_world = 0
- local fav_idx = core.get_table_index("favorites")
- local fav = serverlist[fav_idx]
- if fav_idx and fav_idx <= #serverlist and
- fav.address == gamedata.address and
- fav.port == gamedata.port then
+ local idx = core.get_table_index("servers")
+ local server = idx and tabdata.lookup[idx]
+
+ set_selected_server(tabdata)
- serverlistmgr.add_favorite(fav)
+ if server and server.address == gamedata.address and
+ server.port == gamedata.port then
- gamedata.servername = fav.name
- gamedata.serverdescription = fav.description
+ serverlistmgr.add_favorite(server)
+
+ gamedata.servername = server.name
+ gamedata.serverdescription = server.description
if not is_server_protocol_compat_or_error(
- fav.proto_min, fav.proto_max) then
+ server.proto_min, server.proto_max) then
return true
end
else
@@ -354,6 +380,7 @@ local function main_button_handler(tabview, fields, name, tabdata)
core.start()
return true
end
+
return false
end
@@ -362,7 +389,6 @@ local function on_change(type, old_tab, new_tab)
serverlistmgr.sync()
end
---------------------------------------------------------------------------------
return {
name = "online",
caption = fgettext("Join Game"),
diff --git a/builtin/mainmenu/tab_settings.lua b/builtin/mainmenu/tab_settings.lua
index 29744048a..700b7390f 100644
--- a/builtin/mainmenu/tab_settings.lua
+++ b/builtin/mainmenu/tab_settings.lua
@@ -43,6 +43,14 @@ local labels = {
fgettext("2x"),
fgettext("4x"),
fgettext("8x")
+ },
+ shadow_levels = {
+ fgettext("Disabled"),
+ fgettext("Very Low"),
+ fgettext("Low"),
+ fgettext("Medium"),
+ fgettext("High"),
+ fgettext("Ultra High")
}
}
@@ -66,6 +74,10 @@ local dd_options = {
antialiasing = {
table.concat(labels.antialiasing, ","),
{"0", "2", "4", "8"}
+ },
+ shadow_levels = {
+ table.concat(labels.shadow_levels, ","),
+ { "0", "1", "2", "3", "4", "5" }
}
}
@@ -110,6 +122,15 @@ local getSettingIndex = {
end
end
return 1
+ end,
+ ShadowMapping = function()
+ local shadow_setting = core.settings:get("shadow_levels")
+ for i = 1, #dd_options.shadow_levels[2] do
+ if shadow_setting == dd_options.shadow_levels[2][i] then
+ return i
+ end
+ end
+ return 1
end
}
@@ -198,6 +219,9 @@ local function formspec(tabview, name, tabdata)
.. dump(core.settings:get_bool("enable_waving_leaves")) .. "]" ..
"checkbox[8.25,2;cb_waving_plants;" .. fgettext("Waving Plants") .. ";"
.. dump(core.settings:get_bool("enable_waving_plants")) .. "]"
+ --"label[8.25,3.0;" .. fgettext("Dynamic shadows: ") .. "]" ..
+ --"dropdown[8.25,3.5;3.5;dd_shadows;" .. dd_options.shadow_levels[1] .. ";"
+ -- .. getSettingIndex.ShadowMapping() .. "]"
else
tab_string = tab_string ..
"label[8.38,0.7;" .. core.colorize("#888888",
@@ -208,6 +232,8 @@ local function formspec(tabview, name, tabdata)
fgettext("Waving Leaves")) .. "]" ..
"label[8.38,2.2;" .. core.colorize("#888888",
fgettext("Waving Plants")) .. "]"
+ --"label[8.38,2.7;" .. core.colorize("#888888",
+ -- fgettext("Dynamic shadows")) .. "]"
end
return tab_string
@@ -221,7 +247,7 @@ local function handle_settings_buttons(this, fields, tabname, tabdata)
adv_settings_dlg:set_parent(this)
this:hide()
adv_settings_dlg:show()
- --mm_texture.update("singleplayer", current_game())
+ --mm_game_theme.update("singleplayer", current_game())
return true
end
if fields["cb_smooth_lighting"] then
@@ -249,13 +275,7 @@ local function handle_settings_buttons(this, fields, tabname, tabdata)
return true
end
if fields["cb_shaders"] then
- if (core.settings:get("video_driver") == "direct3d8" or
- core.settings:get("video_driver") == "direct3d9") then
- core.settings:set("enable_shaders", "false")
- gamedata.errormessage = fgettext("To enable shaders the OpenGL driver needs to be used.")
- else
- core.settings:set("enable_shaders", fields["cb_shaders"])
- end
+ core.settings:set("enable_shaders", fields["cb_shaders"])
return true
end
if fields["cb_tonemapping"] then
@@ -333,6 +353,34 @@ local function handle_settings_buttons(this, fields, tabname, tabdata)
ddhandled = true
end
+ for i = 1, #labels.shadow_levels do
+ if fields["dd_shadows"] == labels.shadow_levels[i] then
+ core.settings:set("shadow_levels", dd_options.shadow_levels[2][i])
+ ddhandled = true
+ end
+ end
+
+ if fields["dd_shadows"] == labels.shadow_levels[1] then
+ core.settings:set("enable_dynamic_shadows", "false")
+ else
+ local shadow_presets = {
+ [2] = { 80, 512, "true", 0, "false" },
+ [3] = { 120, 1024, "true", 1, "false" },
+ [4] = { 350, 2048, "true", 1, "false" },
+ [5] = { 350, 2048, "true", 2, "true" },
+ [6] = { 450, 4096, "true", 2, "true" },
+ }
+ local s = shadow_presets[table.indexof(labels.shadow_levels, fields["dd_shadows"])]
+ if s then
+ core.settings:set("enable_dynamic_shadows", "true")
+ core.settings:set("shadow_map_max_distance", s[1])
+ core.settings:set("shadow_map_texture_size", s[2])
+ core.settings:set("shadow_map_texture_32bit", s[3])
+ core.settings:set("shadow_filters", s[4])
+ core.settings:set("shadow_map_color", s[5])
+ end
+ end
+
return ddhandled
end
diff --git a/builtin/mainmenu/tests/serverlistmgr_spec.lua b/builtin/mainmenu/tests/serverlistmgr_spec.lua
index 148e9b794..a091959fb 100644
--- a/builtin/mainmenu/tests/serverlistmgr_spec.lua
+++ b/builtin/mainmenu/tests/serverlistmgr_spec.lua
@@ -2,6 +2,7 @@ _G.core = {}
_G.unpack = table.unpack
_G.serverlistmgr = {}
+dofile("builtin/common/vector.lua")
dofile("builtin/common/misc_helpers.lua")
dofile("builtin/mainmenu/serverlistmgr.lua")
diff --git a/builtin/profiler/init.lua b/builtin/profiler/init.lua
index a0033d752..7f63dfaea 100644
--- a/builtin/profiler/init.lua
+++ b/builtin/profiler/init.lua
@@ -15,6 +15,8 @@
--with this program; if not, write to the Free Software Foundation, Inc.,
--51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+local S = core.get_translator("__builtin")
+
local function get_bool_default(name, default)
local val = core.settings:get_bool(name)
if val == nil then
@@ -40,9 +42,9 @@ function profiler.init_chatcommand()
instrumentation.init_chatcommand()
end
- local param_usage = "print [filter] | dump [filter] | save [format [filter]] | reset"
+ local param_usage = S("print [<filter>] | dump [<filter>] | save [<format> [<filter>]] | reset")
core.register_chatcommand("profiler", {
- description = "handle the profiler and profiling data",
+ description = S("Handle the profiler and profiling data"),
params = param_usage,
privs = { server=true },
func = function(name, param)
@@ -51,21 +53,19 @@ function profiler.init_chatcommand()
if command == "dump" then
core.log("action", reporter.print(sampler.profile, arg0))
- return true, "Statistics written to action log"
+ return true, S("Statistics written to action log.")
elseif command == "print" then
return true, reporter.print(sampler.profile, arg0)
elseif command == "save" then
return reporter.save(sampler.profile, args[1] or "txt", args[2])
elseif command == "reset" then
sampler.reset()
- return true, "Statistics were reset"
+ return true, S("Statistics were reset.")
end
- return false, string.format(
- "Usage: %s\n" ..
- "Format can be one of txt, csv, lua, json, json_pretty (structures may be subject to change).",
- param_usage
- )
+ return false,
+ S("Usage: @1", param_usage) .. "\n" ..
+ S("Format can be one of txt, csv, lua, json, json_pretty (structures may be subject to change).")
end
})
diff --git a/builtin/profiler/instrumentation.lua b/builtin/profiler/instrumentation.lua
index 6b951a2c2..f80314b32 100644
--- a/builtin/profiler/instrumentation.lua
+++ b/builtin/profiler/instrumentation.lua
@@ -102,8 +102,9 @@ local function instrument(def)
-- also called https://en.wikipedia.org/wiki/Continuation_passing_style
-- Compared to table creation and unpacking it won't lose `nil` returns
-- and is expected to be faster
- -- `measure` will be executed after time() and func(...)
- return measure(modname, instrument_name, time(), func(...))
+ -- `measure` will be executed after func(...)
+ local start = time()
+ return measure(modname, instrument_name, start, func(...))
end
end
diff --git a/builtin/profiler/reporter.lua b/builtin/profiler/reporter.lua
index fed47a36b..5928a3718 100644
--- a/builtin/profiler/reporter.lua
+++ b/builtin/profiler/reporter.lua
@@ -15,6 +15,10 @@
--with this program; if not, write to the Free Software Foundation, Inc.,
--51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+local S = core.get_translator("__builtin")
+-- Note: In this file, only messages are translated
+-- but not the table itself, to keep it simple.
+
local DIR_DELIM, LINE_DELIM = DIR_DELIM, "\n"
local table, unpack, string, pairs, io, os = table, unpack, string, pairs, io, os
local rep, sprintf, tonumber = string.rep, string.format, tonumber
@@ -104,11 +108,11 @@ local TxtFormatter = Formatter:new {
end,
format = function(self, filter)
local profile = self.profile
- self:print("Values below show absolute/relative times spend per server step by the instrumented function.")
- self:print("A total of %d samples were taken", profile.stats_total.samples)
+ self:print(S("Values below show absolute/relative times spend per server step by the instrumented function."))
+ self:print(S("A total of @1 sample(s) were taken.", profile.stats_total.samples))
if filter then
- self:print("The output is limited to '%s'", filter)
+ self:print(S("The output is limited to '@1'.", filter))
end
self:print()
@@ -259,19 +263,18 @@ function reporter.save(profile, format, filter)
local output, io_err = io.open(path, "w")
if not output then
- return false, "Saving of profile failed with: " .. io_err
+ return false, S("Saving of profile failed: @1", io_err)
end
local content, err = serialize_profile(profile, format, filter)
if not content then
output:close()
- return false, "Saving of profile failed with: " .. err
+ return false, S("Saving of profile failed: @1", err)
end
output:write(content)
output:close()
- local logmessage = "Profile saved to " .. path
- core.log("action", logmessage)
- return true, logmessage
+ core.log("action", "Profile saved to " .. path)
+ return true, S("Profile saved to @1", path)
end
return reporter
diff --git a/builtin/settingtypes.txt b/builtin/settingtypes.txt
index f800f71ab..42b45aa00 100644
--- a/builtin/settingtypes.txt
+++ b/builtin/settingtypes.txt
@@ -75,7 +75,7 @@ free_move (Flying) bool false
# If enabled, makes move directions relative to the player's pitch when flying or swimming.
pitch_move (Pitch move mode) bool false
-# Fast movement (via the "special" key).
+# Fast movement (via the "Aux1" key).
# This requires the "fast" privilege on the server.
fast_move (Fast movement) bool false
@@ -99,14 +99,14 @@ invert_mouse (Invert mouse) bool false
# Mouse sensitivity multiplier.
mouse_sensitivity (Mouse sensitivity) float 0.2
-# If enabled, "special" key instead of "sneak" key is used for climbing down and
+# If enabled, "Aux1" key instead of "Sneak" key is used for climbing down and
# descending.
-aux1_descends (Special key for climbing/descending) bool false
+aux1_descends (Aux1 key for climbing/descending) bool false
# Double-tapping the jump key toggles fly mode.
doubletap_jump (Double tap jump for fly) bool false
-# If disabled, "special" key is used to fly fast if both fly and fast mode are
+# If disabled, "Aux1" key is used to fly fast if both fly and fast mode are
# enabled.
always_fly_fast (Always fly and fast) bool true
@@ -135,9 +135,9 @@ touchscreen_threshold (Touch screen threshold) int 20 0 100
# If disabled, virtual joystick will center to first-touch's position.
fixed_virtual_joystick (Fixed virtual joystick) bool false
-# (Android) Use virtual joystick to trigger "aux" button.
-# If enabled, virtual joystick will also tap "aux" button when out of main circle.
-virtual_joystick_triggers_aux (Virtual joystick triggers aux button) bool false
+# (Android) Use virtual joystick to trigger "Aux1" button.
+# If enabled, virtual joystick will also tap "Aux1" button when out of main circle.
+virtual_joystick_triggers_aux1 (Virtual joystick triggers Aux1 button) bool false
# Enable joysticks
enable_joysticks (Enable joysticks) bool false
@@ -146,17 +146,17 @@ enable_joysticks (Enable joysticks) bool false
joystick_id (Joystick ID) int 0
# The type of joystick
-joystick_type (Joystick type) enum auto auto,generic,xbox
+joystick_type (Joystick type) enum auto auto,generic,xbox,dragonrise_gamecube
# The time in seconds it takes between repeated events
# when holding down a joystick button combination.
repeat_joystick_button_time (Joystick button repetition interval) float 0.17 0.001
-# The deadzone of the joystick
-joystick_deadzone (Joystick deadzone) int 2048
+# The dead zone of the joystick
+joystick_deadzone (Joystick dead zone) int 2048
# The sensitivity of the joystick axes for moving the
-# ingame view frustum around.
+# in-game view frustum around.
joystick_frustum_sensitivity (Joystick frustum sensitivity) float 170
# Key for moving the player forward.
@@ -199,7 +199,7 @@ 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 (Special key) key KEY_KEY_E
+keymap_aux1 (Aux1 key) key KEY_KEY_E
# Key for opening the chat window.
# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
@@ -451,9 +451,9 @@ keymap_decrease_viewing_range_min (View range decrease key) key -
[**Basic]
-# Whether nametag backgrounds should be shown by default.
+# Whether name tag backgrounds should be shown by default.
# Mods may still set a background.
-show_nametag_backgrounds (Show nametag backgrounds by default) bool true
+show_nametag_backgrounds (Show name tag backgrounds by default) bool true
# Enable vertex buffer objects.
# This should greatly improve graphics performance.
@@ -475,6 +475,10 @@ connected_glass (Connect glass) bool false
# Disable for speed or for different looks.
smooth_lighting (Smooth lighting) bool true
+# Enables tradeoffs that reduce CPU load or increase rendering performance
+# at the expense of minor visual glitches that do not impact game playability.
+performance_tradeoffs (Tradeoffs for performance) bool false
+
# Clouds are a client side effect.
enable_clouds (Clouds) bool true
@@ -489,7 +493,7 @@ enable_particles (Digging particles) bool true
[**Filtering]
-# Use mip mapping to scale textures. May slightly increase performance,
+# Use mipmapping to scale textures. May slightly increase performance,
# especially when using a high resolution texture pack.
# Gamma correct downscaling is not supported.
mip_map (Mipmapping) bool false
@@ -504,18 +508,17 @@ bilinear_filter (Bilinear filtering) bool false
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.
+# which PNG optimizers usually discard, often resulting in dark or
+# light edges to transparent textures. Apply a filter to clean that up
+# at texture load time. This is automatically enabled if mipmapping is enabled.
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.
+# memory. Powers of 2 are recommended. This setting is ONLY applied if
+# bilinear/trilinear/anisotropic filtering is enabled.
# This is also used as the base node texture size for world-aligned
# texture autoscaling.
texture_min_size (Minimum texture size) int 64
@@ -609,10 +612,10 @@ viewing_range (Viewing range) int 190 20 4000
# 0.1 = Default, 0.25 = Good value for weaker tablets.
near_plane (Near plane) float 0.1 0 0.25
-# Width component of the initial window size.
+# Width component of the initial window size. Ignored in fullscreen mode.
screen_w (Screen width) int 1024 1
-# Height component of the initial window size.
+# Height component of the initial window size. Ignored in fullscreen mode.
screen_h (Screen height) int 600 1
# Save window size automatically when modified.
@@ -621,9 +624,6 @@ autosave_screensize (Autosave screen size) bool true
# 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 (VSync) bool false
@@ -662,12 +662,12 @@ lighting_boost_spread (Light curve boost spread) float 0.2 0.0 0.4
# Path to texture directory. All textures are first searched from here.
texture_path (Texture path) path
-# The rendering back-end for Irrlicht.
+# The rendering back-end.
# A restart is required after changing this.
# Note: On Android, stick with OGLES1 if unsure! App may fail to start otherwise.
# On other platforms, OpenGL is recommended.
# Shaders are supported by OpenGL (desktop only) and OGLES2 (experimental)
-video_driver (Video driver) enum opengl null,software,burningsvideo,direct3d8,direct3d9,opengl,ogles1,ogles2
+video_driver (Video driver) enum opengl opengl,ogles1,ogles2
# 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.
@@ -728,7 +728,7 @@ selectionbox_width (Selection box width) int 2 1 5
crosshair_color (Crosshair color) string (255,255,255)
# Crosshair alpha (opaqueness, between 0 and 255).
-# Also controls the object crosshair color
+# This also applies to the object crosshair.
crosshair_alpha (Crosshair alpha) int 255 0 255
# Maximum number of recent chat messages to show
@@ -741,7 +741,7 @@ desynchronize_mapblock_texture_animation (Desynchronize block animation) bool tr
# Useful if there's something to be displayed right or left of hotbar.
hud_hotbar_max_width (Maximum hotbar width) float 1.0
-# Modifies the size of the hudbar elements.
+# Modifies the size of the HUD elements.
hud_scaling (HUD scale factor) float 1.0
# Enables caching of facedir rotated meshes.
@@ -834,10 +834,6 @@ tooltip_show_delay (Tooltip delay) int 400
# Append item name to tooltip.
tooltip_append_itemname (Append item name) bool false
-# Whether FreeType fonts are used, requires FreeType support to be compiled in.
-# If disabled, bitmap and XML vectors fonts are used instead.
-freetype (FreeType fonts) bool true
-
font_bold (Font bold by default) bool false
font_italic (Font italic by default) bool false
@@ -848,44 +844,41 @@ font_shadow (Font shadow) int 1
# Opaqueness (alpha) of the shadow behind the default font, between 0 and 255.
font_shadow_alpha (Font shadow alpha) int 127 0 255
-# Font size of the default font in point (pt).
+# Font size of the default font where 1 unit = 1 pixel at 96 DPI
font_size (Font size) int 16 1
-# Path to the default font.
-# If “freetype†setting is enabled: Must be a TrueType font.
-# If “freetype†setting is disabled: Must be a bitmap or XML vectors font.
+# For pixel-style fonts that do not scale well, this ensures that font sizes used
+# with this font will always be divisible by this value, in pixels. For instance,
+# a pixel font 16 pixels tall should have this set to 16, so it will only ever be
+# sized 16, 32, 48, etc., so a mod requesting a size of 25 will get 32.
+font_size_divisible_by (Font size divisible by) int 1 1
+
+# Path to the default font. Must be a TrueType font.
# The fallback font will be used if the font cannot be loaded.
font_path (Regular font path) filepath fonts/Arimo-Regular.ttf
font_path_bold (Bold font path) filepath fonts/Arimo-Bold.ttf
font_path_italic (Italic font path) filepath fonts/Arimo-Italic.ttf
-font_path_bolditalic (Bold and italic font path) filepath fonts/Arimo-BoldItalic.ttf
+font_path_bold_italic (Bold and italic font path) filepath fonts/Arimo-BoldItalic.ttf
-# Font size of the monospace font in point (pt).
-mono_font_size (Monospace font size) int 15 1
+# Font size of the monospace font where 1 unit = 1 pixel at 96 DPI
+mono_font_size (Monospace font size) int 16 1
-# Path to the monospace font.
-# If “freetype†setting is enabled: Must be a TrueType font.
-# If “freetype†setting is disabled: Must be a bitmap or XML vectors font.
+# For pixel-style fonts that do not scale well, this ensures that font sizes used
+# with this font will always be divisible by this value, in pixels. For instance,
+# a pixel font 16 pixels tall should have this set to 16, so it will only ever be
+# sized 16, 32, 48, etc., so a mod requesting a size of 25 will get 32.
+mono_font_size_divisible_by (Monospace font size divisible by) int 1 1
+
+# Path to the monospace font. Must be a TrueType font.
# This font is used for e.g. the console and profiler screen.
mono_font_path (Monospace font path) filepath fonts/Cousine-Regular.ttf
mono_font_path_bold (Bold monospace font path) filepath fonts/Cousine-Bold.ttf
mono_font_path_italic (Italic monospace font path) filepath fonts/Cousine-Italic.ttf
-mono_font_path_bolditalic (Bold and italic monospace font path) filepath fonts/Cousine-BoldItalic.ttf
-
-# Font size of the fallback font in point (pt).
-fallback_font_size (Fallback font size) int 15 1
+mono_font_path_bold_italic (Bold and italic monospace font path) filepath fonts/Cousine-BoldItalic.ttf
-# Shadow offset (in pixels) of the fallback font. If 0, then shadow will not be drawn.
-fallback_font_shadow (Fallback font shadow) int 1
-
-# Opaqueness (alpha) of the shadow behind the fallback font, between 0 and 255.
-fallback_font_shadow_alpha (Fallback font shadow alpha) int 128 0 255
-
-# Path of the fallback font.
-# If “freetype†setting is enabled: Must be a TrueType font.
-# If “freetype†setting is disabled: Must be a bitmap or XML vectors font.
+# Path of the fallback font. Must be a TrueType font.
# This font will be used for certain languages or if the default font is unavailable.
fallback_font_path (Fallback font path) filepath fonts/DroidSansFallbackFull.ttf
@@ -898,7 +891,7 @@ chat_font_size (Chat font size) int 0
screenshot_path (Screenshot folder) path screenshots
# Format of screenshots.
-screenshot_format (Screenshot format) enum png png,jpg,bmp,pcx,ppm,tga
+screenshot_format (Screenshot format) enum png png,jpg
# Screenshot quality. Only used for JPEG format.
# 1 means worst quality; 100 means best quality.
@@ -910,6 +903,9 @@ screenshot_quality (Screenshot quality) int 0 0 100
# Adjust dpi configuration to your screen (non X11/Android only) e.g. for 4k screens.
screen_dpi (DPI) int 72 1
+# Adjust the detected display density, used for scaling UI elements.
+display_density_factor (Display Density Scaling Factor) float 1
+
# Windows systems only: Start Minetest with the command line window in the background.
# Contains the same information as the file debug.txt (default name).
enable_console (Enable console window) bool false
@@ -934,6 +930,12 @@ mute_sound (Mute sound) bool false
[Client]
+# Clickable weblinks (middle-click or Ctrl+left-click) enabled in chat console output.
+clickable_chat_weblinks (Chat weblinks) bool false
+
+# Optional override for chat weblink color.
+chat_weblink_color (Weblink color) string
+
[*Network]
# Address to connect to.
@@ -946,9 +948,9 @@ address (Server address) string
remote_port (Remote port) int 30000 1 65535
# Prometheus listener address.
-# If minetest is compiled with ENABLE_PROMETHEUS option enabled,
+# If Minetest is compiled with ENABLE_PROMETHEUS option enabled,
# enable metrics listener for Prometheus on that address.
-# Metrics can be fetch on http://127.0.0.1:30000/metrics
+# Metrics can be fetched on http://127.0.0.1:30000/metrics
prometheus_listener_address (Prometheus listener address) string 127.0.0.1:30000
# Save the map received by the client on disk.
@@ -1055,11 +1057,10 @@ full_block_send_enable_min_time_from_building (Delay in sending blocks after bui
# client number.
max_packets_per_iteration (Max. packets per iteration) int 1024
-# ZLib compression level to use when sending mapblocks to the client.
-# -1 - Zlib's default compression level
-# 0 - no compresson, fastest
+# Compression level to use when sending mapblocks to the client.
+# -1 - use default compression level
+# 0 - least compression, fastest
# 9 - best compression, slowest
-# (levels 1-3 use Zlib's "fast" method, 4-9 use the normal method)
map_compression_level_net (Map Compression Level for Network Transfer) int -1 -1 9
[*Game]
@@ -1136,6 +1137,10 @@ enable_rollback_recording (Rollback recording) bool false
# @name, @message, @timestamp (optional)
chat_message_format (Chat message format) string <@name> @message
+# If the execution of a chat command takes longer than this specified time in
+# seconds, add the time information to the chat command message
+chatcommand_msg_time_threshold (Chat command time message threshold) float 0.1
+
# A message to be displayed to all clients when the server shuts down.
kick_msg_shutdown (Shutdown message) string Server shutting down.
@@ -1240,7 +1245,7 @@ movement_gravity (Gravity) float 9.81
deprecated_lua_api_handling (Deprecated Lua API handling) enum log none,log,error
# Number of extra blocks that can be loaded by /clearobjects at once.
-# This is a trade-off between sqlite transaction overhead and
+# 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
@@ -1254,12 +1259,11 @@ max_objects_per_block (Maximum objects per block) int 64
# See https://www.sqlite.org/pragma.html#pragma_synchronous
sqlite_synchronous (Synchronous SQLite) enum 2 0,1,2
-# ZLib compression level to use when saving mapblocks to disk.
-# -1 - Zlib's default compression level
-# 0 - no compresson, fastest
+# Compression level to use when saving mapblocks to disk.
+# -1 - use default compression level
+# 0 - least compression, fastest
# 9 - best compression, slowest
-# (levels 1-3 use Zlib's "fast" method, 4-9 use the normal method)
-map_compression_level_disk (Map Compression Level for Disk Storage) int 3 -1 9
+map_compression_level_disk (Map Compression Level for Disk Storage) int -1 -1 9
# Length of a server tick and the interval at which objects are generally updated over
# network.
@@ -1364,8 +1368,8 @@ instrument.abm (Active Block Modifiers) bool true
# Instrument the action function of Loading Block Modifiers on registration.
instrument.lbm (Loading Block Modifiers) bool true
-# Instrument chatcommands on registration.
-instrument.chatcommand (Chatcommands) bool true
+# Instrument chat commands on registration.
+instrument.chatcommand (Chat commands) bool true
# Instrument global callback functions on registration.
# (anything you pass to a minetest.register_*() function)
@@ -1391,7 +1395,7 @@ name (Player name) string
# Set the language. Leave empty to use the system language.
# A restart is required after changing this.
-language (Language) enum ,ar,ca,cs,da,de,dv,el,en,eo,es,et,eu,fil,fr,hu,id,it,ja,ja_KS,jbo,kk,kn,lo,lt,ms,my,nb,nl,nn,pl,pt,pt_BR,ro,ru,sl,sr_Cyrl,sv,sw,th,tr,uk,vi
+language (Language) enum ,be,bg,ca,cs,da,de,el,en,eo,es,et,eu,fi,fr,gd,gl,hu,id,it,ja,jbo,kk,ko,lt,lv,ms,nb,nl,nn,pl,pt,pt_BR,ro,ru,sk,sl,sr_Cyrl,sr_Latn,sv,sw,tr,uk,vi,zh_CN,zh_TW
# Level of logging to be written to debug.txt:
# - <nothing> (no logging)
@@ -1418,9 +1422,8 @@ 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
+# Maximum time an interactive request (e.g. server list fetch) may take, stated in milliseconds.
+curl_timeout (cURL interactive timeout) int 20000
# Limits number of parallel HTTP requests. Affects:
# - Media fetch if server uses remote_media setting.
@@ -1429,12 +1432,9 @@ curl_timeout (cURL timeout) int 5000
# 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.
+# Maximum time a file download (e.g. a mod download) may take, stated in milliseconds.
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
@@ -1459,11 +1459,11 @@ max_block_generate_distance (Max block generate distance) int 10
# Limit of map generation, in nodes, in all 6 directions from (0, 0, 0).
# Only mapchunks completely within the mapgen limit are generated.
# Value is stored per-world.
-mapgen_limit (Map generation limit) int 31000 0 31000
+mapgen_limit (Map generation limit) int 31007 0 31007
# Global map generation attributes.
# In Mapgen v6 the 'decorations' flag controls all decorations except trees
-# and junglegrass, in all other mapgens this flag controls all decorations.
+# and jungle grass, in all other mapgens this flag controls all decorations.
mg_flags (Mapgen flags) flags caves,dungeons,light,decorations,biomes,ores caves,dungeons,light,decorations,biomes,ores,nocaves,nodungeons,nolight,nodecorations,nobiomes,noores
[*Biome API temperature and humidity noise parameters]
@@ -2173,15 +2173,15 @@ chunksize (Chunk size) int 5
enable_mapgen_debug_info (Mapgen debug) bool false
# Maximum number of blocks that can be queued for loading.
-emergequeue_limit_total (Absolute limit of queued blocks to emerge) int 1024
+emergequeue_limit_total (Absolute limit of queued blocks to emerge) int 1024 1 1000000
# Maximum number of blocks to be queued that are to be loaded from file.
# This limit is enforced per player.
-emergequeue_limit_diskonly (Per-player limit of queued blocks load from disk) int 128
+emergequeue_limit_diskonly (Per-player limit of queued blocks load from disk) int 128 1 1000000
# Maximum number of blocks to be queued that are to be generated.
# This limit is enforced per player.
-emergequeue_limit_generate (Per-player limit of queued blocks to generate) int 128
+emergequeue_limit_generate (Per-player limit of queued blocks to generate) int 128 1 1000000
# Number of emerge threads to use.
# Value 0:
diff --git a/client/shaders/3d_interlaced_merge/opengl_fragment.glsl b/client/shaders/3d_interlaced_merge/opengl_fragment.glsl
index 7cba61b39..6d3ae5093 100644
--- a/client/shaders/3d_interlaced_merge/opengl_fragment.glsl
+++ b/client/shaders/3d_interlaced_merge/opengl_fragment.glsl
@@ -6,7 +6,7 @@ uniform sampler2D textureFlags;
#define rightImage normalTexture
#define maskImage textureFlags
-varying mediump vec2 varTexCoord;
+varying mediump vec4 varTexCoord;
void main(void)
{
diff --git a/client/shaders/3d_interlaced_merge/opengl_vertex.glsl b/client/shaders/3d_interlaced_merge/opengl_vertex.glsl
index 860049481..224b7d183 100644
--- a/client/shaders/3d_interlaced_merge/opengl_vertex.glsl
+++ b/client/shaders/3d_interlaced_merge/opengl_vertex.glsl
@@ -1,4 +1,4 @@
-varying mediump vec2 varTexCoord;
+varying mediump vec4 varTexCoord;
void main(void)
{
diff --git a/client/shaders/default_shader/opengl_vertex.glsl b/client/shaders/default_shader/opengl_vertex.glsl
index d95a3c2d3..a908ac953 100644
--- a/client/shaders/default_shader/opengl_vertex.glsl
+++ b/client/shaders/default_shader/opengl_vertex.glsl
@@ -3,5 +3,9 @@ varying lowp vec4 varColor;
void main(void)
{
gl_Position = mWorldViewProj * inVertexPosition;
+#ifdef GL_ES
+ varColor = inVertexColor.bgra;
+#else
varColor = inVertexColor;
+#endif
}
diff --git a/client/shaders/minimap_shader/opengl_vertex.glsl b/client/shaders/minimap_shader/opengl_vertex.glsl
index 1a9491805..b23d27181 100644
--- a/client/shaders/minimap_shader/opengl_vertex.glsl
+++ b/client/shaders/minimap_shader/opengl_vertex.glsl
@@ -7,5 +7,9 @@ void main(void)
{
varTexCoord = inTexCoord0.st;
gl_Position = mWorldViewProj * inVertexPosition;
+#ifdef GL_ES
+ varColor = inVertexColor.bgra;
+#else
varColor = inVertexColor;
+#endif
}
diff --git a/client/shaders/nodes_shader/opengl_fragment.glsl b/client/shaders/nodes_shader/opengl_fragment.glsl
index b58095063..762a676c6 100644
--- a/client/shaders/nodes_shader/opengl_fragment.glsl
+++ b/client/shaders/nodes_shader/opengl_fragment.glsl
@@ -1,5 +1,6 @@
uniform sampler2D baseTexture;
+uniform vec3 dayLight;
uniform vec4 skyBgColor;
uniform float fogDistance;
uniform vec3 eyePosition;
@@ -7,7 +8,22 @@ uniform vec3 eyePosition;
// The cameraOffset is the current center of the visible world.
uniform vec3 cameraOffset;
uniform float animationTimer;
+#ifdef ENABLE_DYNAMIC_SHADOWS
+ // shadow texture
+ uniform sampler2D ShadowMapSampler;
+ // shadow uniforms
+ uniform vec3 v_LightDirection;
+ uniform float f_textureresolution;
+ uniform mat4 m_ShadowViewProj;
+ uniform float f_shadowfar;
+ varying float normalOffsetScale;
+ varying float adj_shadow_strength;
+ varying float cosLight;
+ varying float f_normal_length;
+#endif
+
+varying vec3 vNormal;
varying vec3 vPosition;
// World position in the visible world (i.e. relative to the cameraOffset.)
// This can be used for many shader effects without loss of precision.
@@ -22,10 +38,393 @@ varying mediump vec2 varTexCoord;
centroid varying vec2 varTexCoord;
#endif
varying vec3 eyeVec;
+varying float nightRatio;
const float fogStart = FOG_START;
const float fogShadingParameter = 1.0 / ( 1.0 - fogStart);
+
+
+#ifdef ENABLE_DYNAMIC_SHADOWS
+const float bias0 = 0.9;
+const float zPersFactor = 0.5;
+const float bias1 = 1.0 - bias0 + 1e-6;
+
+vec4 getPerspectiveFactor(in vec4 shadowPosition)
+{
+
+ float pDistance = length(shadowPosition.xy);
+ float pFactor = pDistance * bias0 + bias1;
+
+ shadowPosition.xyz *= vec3(vec2(1.0 / pFactor), zPersFactor);
+
+ return shadowPosition;
+}
+
+// assuming near is always 1.0
+float getLinearDepth()
+{
+ return 2.0 * f_shadowfar / (f_shadowfar + 1.0 - (2.0 * gl_FragCoord.z - 1.0) * (f_shadowfar - 1.0));
+}
+
+vec3 getLightSpacePosition()
+{
+ vec4 pLightSpace;
+ // some drawtypes have zero normals, so we need to handle it :(
+ #if DRAW_TYPE == NDT_PLANTLIKE
+ pLightSpace = m_ShadowViewProj * vec4(worldPosition, 1.0);
+ #else
+ float offsetScale = (0.0057 * getLinearDepth() + normalOffsetScale);
+ pLightSpace = m_ShadowViewProj * vec4(worldPosition + offsetScale * normalize(vNormal), 1.0);
+ #endif
+ pLightSpace = getPerspectiveFactor(pLightSpace);
+ return pLightSpace.xyz * 0.5 + 0.5;
+}
+// custom smoothstep implementation because it's not defined in glsl1.2
+// https://docs.gl/sl4/smoothstep
+float mtsmoothstep(in float edge0, in float edge1, in float x)
+{
+ float t = clamp((x - edge0) / (edge1 - edge0), 0.0, 1.0);
+ return t * t * (3.0 - 2.0 * t);
+}
+
+#ifdef COLORED_SHADOWS
+
+// c_precision of 128 fits within 7 base-10 digits
+const float c_precision = 128.0;
+const float c_precisionp1 = c_precision + 1.0;
+
+float packColor(vec3 color)
+{
+ return floor(color.b * c_precision + 0.5)
+ + floor(color.g * c_precision + 0.5) * c_precisionp1
+ + floor(color.r * c_precision + 0.5) * c_precisionp1 * c_precisionp1;
+}
+
+vec3 unpackColor(float value)
+{
+ vec3 color;
+ color.b = mod(value, c_precisionp1) / c_precision;
+ color.g = mod(floor(value / c_precisionp1), c_precisionp1) / c_precision;
+ color.r = floor(value / (c_precisionp1 * c_precisionp1)) / c_precision;
+ return color;
+}
+
+vec4 getHardShadowColor(sampler2D shadowsampler, vec2 smTexCoord, float realDistance)
+{
+ vec4 texDepth = texture2D(shadowsampler, smTexCoord.xy).rgba;
+
+ float visibility = step(0.0, realDistance - texDepth.r);
+ vec4 result = vec4(visibility, vec3(0.0,0.0,0.0));//unpackColor(texDepth.g));
+ if (visibility < 0.1) {
+ visibility = step(0.0, realDistance - texDepth.b);
+ result = vec4(visibility, unpackColor(texDepth.a));
+ }
+ return result;
+}
+
+#else
+
+float getHardShadow(sampler2D shadowsampler, vec2 smTexCoord, float realDistance)
+{
+ float texDepth = texture2D(shadowsampler, smTexCoord.xy).r;
+ float visibility = step(0.0, realDistance - texDepth);
+ return visibility;
+}
+
+#endif
+
+
+#if SHADOW_FILTER == 2
+ #define PCFBOUND 3.5
+ #define PCFSAMPLES 64.0
+#elif SHADOW_FILTER == 1
+ #define PCFBOUND 1.5
+ #if defined(POISSON_FILTER)
+ #define PCFSAMPLES 32.0
+ #else
+ #define PCFSAMPLES 16.0
+ #endif
+#else
+ #define PCFBOUND 0.0
+ #if defined(POISSON_FILTER)
+ #define PCFSAMPLES 4.0
+ #else
+ #define PCFSAMPLES 1.0
+ #endif
+#endif
+#ifdef COLORED_SHADOWS
+float getHardShadowDepth(sampler2D shadowsampler, vec2 smTexCoord, float realDistance)
+{
+ vec4 texDepth = texture2D(shadowsampler, smTexCoord.xy);
+ float depth = max(realDistance - texDepth.r, realDistance - texDepth.b);
+ return depth;
+}
+#else
+float getHardShadowDepth(sampler2D shadowsampler, vec2 smTexCoord, float realDistance)
+{
+ float texDepth = texture2D(shadowsampler, smTexCoord.xy).r;
+ float depth = realDistance - texDepth;
+ return depth;
+}
+#endif
+
+float getBaseLength(vec2 smTexCoord)
+{
+ float l = length(2.0 * smTexCoord.xy - 1.0); // length in texture coords
+ return bias1 / (1.0 / l - bias0); // return to undistorted coords
+}
+
+float getDeltaPerspectiveFactor(float l)
+{
+ return 0.1 / (bias0 * l + bias1); // original distortion factor, divided by 10
+}
+
+float getPenumbraRadius(sampler2D shadowsampler, vec2 smTexCoord, float realDistance, float multiplier)
+{
+ float baseLength = getBaseLength(smTexCoord);
+ float perspectiveFactor;
+
+ if (PCFBOUND == 0.0) return 0.0;
+ // Return fast if sharp shadows are requested
+ if (SOFTSHADOWRADIUS <= 1.0) {
+ perspectiveFactor = getDeltaPerspectiveFactor(baseLength);
+ return max(2 * length(smTexCoord.xy) * 2048 / f_textureresolution / pow(perspectiveFactor, 3), SOFTSHADOWRADIUS);
+ }
+
+ vec2 clampedpos;
+ float texture_size = 1.0 / (2048 /*f_textureresolution*/ * 0.5);
+ float y, x;
+ float depth = 0.0;
+ float pointDepth;
+ float maxRadius = SOFTSHADOWRADIUS * 5.0 * multiplier;
+
+ float bound = clamp(PCFBOUND * (1 - baseLength), 0.0, PCFBOUND);
+ int n = 0;
+
+ for (y = -bound; y <= bound; y += 1.0)
+ for (x = -bound; x <= bound; x += 1.0) {
+ clampedpos = vec2(x,y);
+ perspectiveFactor = getDeltaPerspectiveFactor(baseLength + length(clampedpos) * texture_size * maxRadius);
+ clampedpos = clampedpos * texture_size * perspectiveFactor * maxRadius * perspectiveFactor + smTexCoord.xy;
+
+ pointDepth = getHardShadowDepth(shadowsampler, clampedpos.xy, realDistance);
+ if (pointDepth > -0.01) {
+ depth += pointDepth;
+ n += 1;
+ }
+ }
+
+ depth = depth / n;
+ depth = pow(clamp(depth, 0.0, 1000.0), 1.6) / 0.001;
+
+ perspectiveFactor = getDeltaPerspectiveFactor(baseLength);
+ return max(length(smTexCoord.xy) * 2 * 2048 / f_textureresolution / pow(perspectiveFactor, 3), depth * maxRadius);
+}
+
+#ifdef POISSON_FILTER
+const vec2[64] poissonDisk = vec2[64](
+ vec2(0.170019, -0.040254),
+ vec2(-0.299417, 0.791925),
+ vec2(0.645680, 0.493210),
+ vec2(-0.651784, 0.717887),
+ vec2(0.421003, 0.027070),
+ vec2(-0.817194, -0.271096),
+ vec2(-0.705374, -0.668203),
+ vec2(0.977050, -0.108615),
+ vec2(0.063326, 0.142369),
+ vec2(0.203528, 0.214331),
+ vec2(-0.667531, 0.326090),
+ vec2(-0.098422, -0.295755),
+ vec2(-0.885922, 0.215369),
+ vec2(0.566637, 0.605213),
+ vec2(0.039766, -0.396100),
+ vec2(0.751946, 0.453352),
+ vec2(0.078707, -0.715323),
+ vec2(-0.075838, -0.529344),
+ vec2(0.724479, -0.580798),
+ vec2(0.222999, -0.215125),
+ vec2(-0.467574, -0.405438),
+ vec2(-0.248268, -0.814753),
+ vec2(0.354411, -0.887570),
+ vec2(0.175817, 0.382366),
+ vec2(0.487472, -0.063082),
+ vec2(0.355476, 0.025357),
+ vec2(-0.084078, 0.898312),
+ vec2(0.488876, -0.783441),
+ vec2(0.470016, 0.217933),
+ vec2(-0.696890, -0.549791),
+ vec2(-0.149693, 0.605762),
+ vec2(0.034211, 0.979980),
+ vec2(0.503098, -0.308878),
+ vec2(-0.016205, -0.872921),
+ vec2(0.385784, -0.393902),
+ vec2(-0.146886, -0.859249),
+ vec2(0.643361, 0.164098),
+ vec2(0.634388, -0.049471),
+ vec2(-0.688894, 0.007843),
+ vec2(0.464034, -0.188818),
+ vec2(-0.440840, 0.137486),
+ vec2(0.364483, 0.511704),
+ vec2(0.034028, 0.325968),
+ vec2(0.099094, -0.308023),
+ vec2(0.693960, -0.366253),
+ vec2(0.678884, -0.204688),
+ vec2(0.001801, 0.780328),
+ vec2(0.145177, -0.898984),
+ vec2(0.062655, -0.611866),
+ vec2(0.315226, -0.604297),
+ vec2(-0.780145, 0.486251),
+ vec2(-0.371868, 0.882138),
+ vec2(0.200476, 0.494430),
+ vec2(-0.494552, -0.711051),
+ vec2(0.612476, 0.705252),
+ vec2(-0.578845, -0.768792),
+ vec2(-0.772454, -0.090976),
+ vec2(0.504440, 0.372295),
+ vec2(0.155736, 0.065157),
+ vec2(0.391522, 0.849605),
+ vec2(-0.620106, -0.328104),
+ vec2(0.789239, -0.419965),
+ vec2(-0.545396, 0.538133),
+ vec2(-0.178564, -0.596057)
+);
+
+#ifdef COLORED_SHADOWS
+
+vec4 getShadowColor(sampler2D shadowsampler, vec2 smTexCoord, float realDistance)
+{
+ vec2 clampedpos;
+ vec4 visibility = vec4(0.0);
+ float radius = getPenumbraRadius(shadowsampler, smTexCoord, realDistance, 1.5); // scale to align with PCF
+ if (radius < 0.1) {
+ // we are in the middle of even brightness, no need for filtering
+ return getHardShadowColor(shadowsampler, smTexCoord.xy, realDistance);
+ }
+
+ float baseLength = getBaseLength(smTexCoord);
+ float perspectiveFactor;
+
+ float texture_size = 1.0 / (f_textureresolution * 0.5);
+ int samples = int(clamp(PCFSAMPLES * (1 - baseLength) * (1 - baseLength), PCFSAMPLES / 4, PCFSAMPLES));
+ int init_offset = int(floor(mod(((smTexCoord.x * 34.0) + 1.0) * smTexCoord.y, 64.0-samples)));
+ int end_offset = int(samples) + init_offset;
+
+ for (int x = init_offset; x < end_offset; x++) {
+ clampedpos = poissonDisk[x];
+ perspectiveFactor = getDeltaPerspectiveFactor(baseLength + length(clampedpos) * texture_size * radius);
+ clampedpos = clampedpos * texture_size * perspectiveFactor * radius * perspectiveFactor + smTexCoord.xy;
+ visibility += getHardShadowColor(shadowsampler, clampedpos.xy, realDistance);
+ }
+
+ return visibility / samples;
+}
+
+#else
+
+float getShadow(sampler2D shadowsampler, vec2 smTexCoord, float realDistance)
+{
+ vec2 clampedpos;
+ float visibility = 0.0;
+ float radius = getPenumbraRadius(shadowsampler, smTexCoord, realDistance, 1.5); // scale to align with PCF
+ if (radius < 0.1) {
+ // we are in the middle of even brightness, no need for filtering
+ return getHardShadow(shadowsampler, smTexCoord.xy, realDistance);
+ }
+
+ float baseLength = getBaseLength(smTexCoord);
+ float perspectiveFactor;
+
+ float texture_size = 1.0 / (f_textureresolution * 0.5);
+ int samples = int(clamp(PCFSAMPLES * (1 - baseLength) * (1 - baseLength), PCFSAMPLES / 4, PCFSAMPLES));
+ int init_offset = int(floor(mod(((smTexCoord.x * 34.0) + 1.0) * smTexCoord.y, 64.0-samples)));
+ int end_offset = int(samples) + init_offset;
+
+ for (int x = init_offset; x < end_offset; x++) {
+ clampedpos = poissonDisk[x];
+ perspectiveFactor = getDeltaPerspectiveFactor(baseLength + length(clampedpos) * texture_size * radius);
+ clampedpos = clampedpos * texture_size * perspectiveFactor * radius * perspectiveFactor + smTexCoord.xy;
+ visibility += getHardShadow(shadowsampler, clampedpos.xy, realDistance);
+ }
+
+ return visibility / samples;
+}
+
+#endif
+
+#else
+/* poisson filter disabled */
+
+#ifdef COLORED_SHADOWS
+
+vec4 getShadowColor(sampler2D shadowsampler, vec2 smTexCoord, float realDistance)
+{
+ vec2 clampedpos;
+ vec4 visibility = vec4(0.0);
+ float radius = getPenumbraRadius(shadowsampler, smTexCoord, realDistance, 1.0);
+ if (radius < 0.1) {
+ // we are in the middle of even brightness, no need for filtering
+ return getHardShadowColor(shadowsampler, smTexCoord.xy, realDistance);
+ }
+
+ float baseLength = getBaseLength(smTexCoord);
+ float perspectiveFactor;
+
+ float texture_size = 1.0 / (f_textureresolution * 0.5);
+ float y, x;
+ float bound = clamp(PCFBOUND * (1 - baseLength), PCFBOUND / 2, PCFBOUND);
+ int n = 0;
+
+ // basic PCF filter
+ for (y = -bound; y <= bound; y += 1.0)
+ for (x = -bound; x <= bound; x += 1.0) {
+ clampedpos = vec2(x,y); // screen offset
+ perspectiveFactor = getDeltaPerspectiveFactor(baseLength + length(clampedpos) * texture_size * radius / bound);
+ clampedpos = clampedpos * texture_size * perspectiveFactor * radius * perspectiveFactor / bound + smTexCoord.xy; // both dx,dy and radius are adjusted
+ visibility += getHardShadowColor(shadowsampler, clampedpos.xy, realDistance);
+ n += 1;
+ }
+
+ return visibility / n;
+}
+
+#else
+float getShadow(sampler2D shadowsampler, vec2 smTexCoord, float realDistance)
+{
+ vec2 clampedpos;
+ float visibility = 0.0;
+ float radius = getPenumbraRadius(shadowsampler, smTexCoord, realDistance, 1.0);
+ if (radius < 0.1) {
+ // we are in the middle of even brightness, no need for filtering
+ return getHardShadow(shadowsampler, smTexCoord.xy, realDistance);
+ }
+
+ float baseLength = getBaseLength(smTexCoord);
+ float perspectiveFactor;
+
+ float texture_size = 1.0 / (f_textureresolution * 0.5);
+ float y, x;
+ float bound = clamp(PCFBOUND * (1 - baseLength), PCFBOUND / 2, PCFBOUND);
+ int n = 0;
+
+ // basic PCF filter
+ for (y = -bound; y <= bound; y += 1.0)
+ for (x = -bound; x <= bound; x += 1.0) {
+ clampedpos = vec2(x,y); // screen offset
+ perspectiveFactor = getDeltaPerspectiveFactor(baseLength + length(clampedpos) * texture_size * radius / bound);
+ clampedpos = clampedpos * texture_size * perspectiveFactor * radius * perspectiveFactor / bound + smTexCoord.xy; // both dx,dy and radius are adjusted
+ visibility += getHardShadow(shadowsampler, clampedpos.xy, realDistance);
+ n += 1;
+ }
+
+ return visibility / n;
+}
+
+#endif
+
+#endif
+#endif
+
#if ENABLE_TONE_MAPPING
/* Hable's UC2 Tone mapping parameters
@@ -58,25 +457,79 @@ vec4 applyToneMapping(vec4 color)
}
#endif
+
+
void main(void)
{
vec3 color;
vec2 uv = varTexCoord.st;
vec4 base = texture2D(baseTexture, uv).rgba;
-#ifdef USE_DISCARD
// If alpha is zero, we can just discard the pixel. This fixes transparency
// on GPUs like GC7000L, where GL_ALPHA_TEST is not implemented in mesa,
// and also on GLES 2, where GL_ALPHA_TEST is missing entirely.
- if (base.a == 0.0) {
+#ifdef USE_DISCARD
+ if (base.a == 0.0)
+ discard;
+#endif
+#ifdef USE_DISCARD_REF
+ if (base.a < 0.5)
discard;
- }
#endif
color = base.rgb;
-
vec4 col = vec4(color.rgb * varColor.rgb, 1.0);
+#ifdef ENABLE_DYNAMIC_SHADOWS
+ float shadow_int = 0.0;
+ vec3 shadow_color = vec3(0.0, 0.0, 0.0);
+ vec3 posLightSpace = getLightSpacePosition();
+
+ float distance_rate = (1 - pow(clamp(2.0 * length(posLightSpace.xy - 0.5),0.0,1.0), 20.0));
+ float f_adj_shadow_strength = max(adj_shadow_strength-mtsmoothstep(0.9,1.1, posLightSpace.z ),0.0);
+
+ if (distance_rate > 1e-7) {
+
+#ifdef COLORED_SHADOWS
+ vec4 visibility;
+ if (cosLight > 0.0)
+ visibility = getShadowColor(ShadowMapSampler, posLightSpace.xy, posLightSpace.z);
+ else
+ visibility = vec4(1.0, 0.0, 0.0, 0.0);
+ shadow_int = visibility.r;
+ shadow_color = visibility.gba;
+#else
+ if (cosLight > 0.0)
+ shadow_int = getShadow(ShadowMapSampler, posLightSpace.xy, posLightSpace.z);
+ else
+ shadow_int = 1.0;
+#endif
+ shadow_int *= distance_rate;
+ shadow_int = clamp(shadow_int, 0.0, 1.0);
+
+ }
+
+ // turns out that nightRatio falls off much faster than
+ // actual brightness of artificial light in relation to natual light.
+ // Power ratio was measured on torches in MTG (brightness = 14).
+ float adjusted_night_ratio = pow(max(0.0, nightRatio), 0.6);
+
+ if (f_normal_length != 0 && cosLight < 0.035) {
+ shadow_int = max(shadow_int, 1 - clamp(cosLight, 0.0, 0.035)/0.035);
+ }
+
+ shadow_int *= f_adj_shadow_strength;
+
+ // calculate fragment color from components:
+ col.rgb =
+ adjusted_night_ratio * col.rgb + // artificial light
+ (1.0 - adjusted_night_ratio) * ( // natural light
+ col.rgb * (1.0 - shadow_int * (1.0 - shadow_color)) + // filtered texture color
+ dayLight * shadow_color * shadow_int); // reflected filtered sunlight/moonlight
+ // col.r = 0.5 * clamp(getPenumbraRadius(ShadowMapSampler, posLightSpace.xy, posLightSpace.z, 1.0) / SOFTSHADOWRADIUS, 0.0, 1.0) + 0.5 * col.r;
+ // col.r = adjusted_night_ratio; // debug night ratio adjustment
+#endif
+
#if ENABLE_TONE_MAPPING
col = applyToneMapping(col);
#endif
@@ -94,6 +547,6 @@ void main(void)
- fogShadingParameter * length(eyeVec) / fogDistance, 0.0, 1.0);
col = mix(skyBgColor, col, clarity);
col = vec4(col.rgb, base.a);
-
+
gl_FragColor = col;
}
diff --git a/client/shaders/nodes_shader/opengl_vertex.glsl b/client/shaders/nodes_shader/opengl_vertex.glsl
index c68df4a8e..d316930b2 100644
--- a/client/shaders/nodes_shader/opengl_vertex.glsl
+++ b/client/shaders/nodes_shader/opengl_vertex.glsl
@@ -1,5 +1,4 @@
uniform mat4 mWorld;
-
// Color of the light emitted by the sun.
uniform vec3 dayLight;
uniform vec3 eyePosition;
@@ -8,6 +7,7 @@ uniform vec3 eyePosition;
uniform vec3 cameraOffset;
uniform float animationTimer;
+varying vec3 vNormal;
varying vec3 vPosition;
// World position in the visible world (i.e. relative to the cameraOffset.)
// This can be used for many shader effects without loss of precision.
@@ -24,13 +24,38 @@ varying mediump vec2 varTexCoord;
#else
centroid varying vec2 varTexCoord;
#endif
-varying vec3 eyeVec;
+#ifdef ENABLE_DYNAMIC_SHADOWS
+ // shadow uniforms
+ uniform vec3 v_LightDirection;
+ uniform float f_textureresolution;
+ uniform mat4 m_ShadowViewProj;
+ uniform float f_shadowfar;
+ uniform float f_shadow_strength;
+ uniform float f_timeofday;
+ varying float cosLight;
+ varying float normalOffsetScale;
+ varying float adj_shadow_strength;
+ varying float f_normal_length;
+#endif
+
+varying vec3 eyeVec;
+varying float nightRatio;
// Color of the light emitted by the light sources.
const vec3 artificialLight = vec3(1.04, 1.04, 1.04);
const float e = 2.718281828459;
const float BS = 10.0;
+#ifdef ENABLE_DYNAMIC_SHADOWS
+// custom smoothstep implementation because it's not defined in glsl1.2
+// https://docs.gl/sl4/smoothstep
+float mtsmoothstep(in float edge0, in float edge1, in float x)
+{
+ float t = clamp((x - edge0) / (edge1 - edge0), 0.0, 1.0);
+ return t * t * (3.0 - 2.0 * t);
+}
+#endif
+
float smoothCurve(float x)
{
@@ -86,6 +111,9 @@ float snoise(vec3 p)
#endif
+
+
+
void main(void)
{
varTexCoord = inTexCoord0.st;
@@ -136,20 +164,23 @@ void main(void)
gl_Position = mWorldViewProj * inVertexPosition;
#endif
-
vPosition = gl_Position.xyz;
-
eyeVec = -(mWorldView * inVertexPosition).xyz;
+ vNormal = inVertexNormal;
// Calculate color.
// Red, green and blue components are pre-multiplied with
// the brightness, so now we have to multiply these
// colors with the color of the incoming light.
// The pre-baked colors are halved to prevent overflow.
- vec4 color;
+#ifdef GL_ES
+ vec4 color = inVertexColor.bgra;
+#else
+ vec4 color = inVertexColor;
+#endif
// The alpha gives the ratio of sunlight in the incoming light.
- float nightRatio = 1.0 - inVertexColor.a;
- color.rgb = inVertexColor.rgb * (inVertexColor.a * dayLight.rgb +
+ nightRatio = 1.0 - color.a;
+ color.rgb = color.rgb * (color.a * dayLight.rgb +
nightRatio * artificialLight.rgb) * 2.0;
color.a = 1.0;
@@ -160,4 +191,26 @@ void main(void)
0.07 * brightness);
varColor = clamp(color, 0.0, 1.0);
+
+#ifdef ENABLE_DYNAMIC_SHADOWS
+ vec3 nNormal = normalize(vNormal);
+ cosLight = dot(nNormal, -v_LightDirection);
+ float texelSize = 767.0 / f_textureresolution;
+ float slopeScale = clamp(1.0 - abs(cosLight), 0.0, 1.0);
+ normalOffsetScale = texelSize * slopeScale;
+
+ if (f_timeofday < 0.2) {
+ adj_shadow_strength = f_shadow_strength * 0.5 *
+ (1.0 - mtsmoothstep(0.18, 0.2, f_timeofday));
+ } else if (f_timeofday >= 0.8) {
+ adj_shadow_strength = f_shadow_strength * 0.5 *
+ mtsmoothstep(0.8, 0.83, f_timeofday);
+ } else {
+ adj_shadow_strength = f_shadow_strength *
+ mtsmoothstep(0.20, 0.25, f_timeofday) *
+ (1.0 - mtsmoothstep(0.7, 0.8, f_timeofday));
+ }
+ f_normal_length = length(vNormal);
+#endif
+
}
diff --git a/client/shaders/object_shader/opengl_fragment.glsl b/client/shaders/object_shader/opengl_fragment.glsl
index 9a81d8185..3390e7227 100644
--- a/client/shaders/object_shader/opengl_fragment.glsl
+++ b/client/shaders/object_shader/opengl_fragment.glsl
@@ -23,8 +23,22 @@ const float BS = 10.0;
const float fogStart = FOG_START;
const float fogShadingParameter = 1.0 / (1.0 - fogStart);
-#if ENABLE_TONE_MAPPING
+#ifdef ENABLE_DYNAMIC_SHADOWS
+ // shadow texture
+ uniform sampler2D ShadowMapSampler;
+ // shadow uniforms
+ uniform vec3 v_LightDirection;
+ uniform float f_textureresolution;
+ uniform mat4 m_ShadowViewProj;
+ uniform float f_shadowfar;
+ uniform float f_timeofday;
+ varying float normalOffsetScale;
+ varying float adj_shadow_strength;
+ varying float cosLight;
+ varying float f_normal_length;
+#endif
+#if ENABLE_TONE_MAPPING
/* Hable's UC2 Tone mapping parameters
A = 0.22;
B = 0.30;
@@ -55,30 +69,310 @@ vec4 applyToneMapping(vec4 color)
}
#endif
+#ifdef ENABLE_DYNAMIC_SHADOWS
+const float bias0 = 0.9;
+const float zPersFactor = 0.5;
+const float bias1 = 1.0 - bias0;
+
+vec4 getPerspectiveFactor(in vec4 shadowPosition)
+{
+ float pDistance = length(shadowPosition.xy);
+ float pFactor = pDistance * bias0 + bias1;
+ shadowPosition.xyz *= vec3(vec2(1.0 / pFactor), zPersFactor);
+
+ return shadowPosition;
+}
+
+// assuming near is always 1.0
+float getLinearDepth()
+{
+ return 2.0 * f_shadowfar / (f_shadowfar + 1.0 - (2.0 * gl_FragCoord.z - 1.0) * (f_shadowfar - 1.0));
+}
+
+vec3 getLightSpacePosition()
+{
+ vec4 pLightSpace;
+ float normalBias = 0.0005 * getLinearDepth() * cosLight + normalOffsetScale;
+ pLightSpace = m_ShadowViewProj * vec4(worldPosition + normalBias * normalize(vNormal), 1.0);
+ pLightSpace = getPerspectiveFactor(pLightSpace);
+ return pLightSpace.xyz * 0.5 + 0.5;
+}
+
+#ifdef COLORED_SHADOWS
+
+// c_precision of 128 fits within 7 base-10 digits
+const float c_precision = 128.0;
+const float c_precisionp1 = c_precision + 1.0;
+
+float packColor(vec3 color)
+{
+ return floor(color.b * c_precision + 0.5)
+ + floor(color.g * c_precision + 0.5) * c_precisionp1
+ + floor(color.r * c_precision + 0.5) * c_precisionp1 * c_precisionp1;
+}
+
+vec3 unpackColor(float value)
+{
+ vec3 color;
+ color.b = mod(value, c_precisionp1) / c_precision;
+ color.g = mod(floor(value / c_precisionp1), c_precisionp1) / c_precision;
+ color.r = floor(value / (c_precisionp1 * c_precisionp1)) / c_precision;
+ return color;
+}
+
+vec4 getHardShadowColor(sampler2D shadowsampler, vec2 smTexCoord, float realDistance)
+{
+ vec4 texDepth = texture2D(shadowsampler, smTexCoord.xy).rgba;
+
+ float visibility = step(0.0, (realDistance-2e-5) - texDepth.r);
+ vec4 result = vec4(visibility, vec3(0.0,0.0,0.0));//unpackColor(texDepth.g));
+ if (visibility < 0.1) {
+ visibility = step(0.0, (realDistance-2e-5) - texDepth.r);
+ result = vec4(visibility, unpackColor(texDepth.a));
+ }
+ return result;
+}
+
+#else
+
+float getHardShadow(sampler2D shadowsampler, vec2 smTexCoord, float realDistance)
+{
+ float texDepth = texture2D(shadowsampler, smTexCoord.xy).r;
+ float visibility = step(0.0, (realDistance-2e-5) - texDepth);
+
+ return visibility;
+}
+
+#endif
+
+#if SHADOW_FILTER == 2
+ #define PCFBOUND 3.5
+ #define PCFSAMPLES 64.0
+#elif SHADOW_FILTER == 1
+ #define PCFBOUND 1.5
+ #if defined(POISSON_FILTER)
+ #define PCFSAMPLES 32.0
+ #else
+ #define PCFSAMPLES 16.0
+ #endif
+#else
+ #define PCFBOUND 0.0
+ #if defined(POISSON_FILTER)
+ #define PCFSAMPLES 4.0
+ #else
+ #define PCFSAMPLES 1.0
+ #endif
+#endif
+
+#ifdef POISSON_FILTER
+const vec2[64] poissonDisk = vec2[64](
+ vec2(0.170019, -0.040254),
+ vec2(-0.299417, 0.791925),
+ vec2(0.645680, 0.493210),
+ vec2(-0.651784, 0.717887),
+ vec2(0.421003, 0.027070),
+ vec2(-0.817194, -0.271096),
+ vec2(-0.705374, -0.668203),
+ vec2(0.977050, -0.108615),
+ vec2(0.063326, 0.142369),
+ vec2(0.203528, 0.214331),
+ vec2(-0.667531, 0.326090),
+ vec2(-0.098422, -0.295755),
+ vec2(-0.885922, 0.215369),
+ vec2(0.566637, 0.605213),
+ vec2(0.039766, -0.396100),
+ vec2(0.751946, 0.453352),
+ vec2(0.078707, -0.715323),
+ vec2(-0.075838, -0.529344),
+ vec2(0.724479, -0.580798),
+ vec2(0.222999, -0.215125),
+ vec2(-0.467574, -0.405438),
+ vec2(-0.248268, -0.814753),
+ vec2(0.354411, -0.887570),
+ vec2(0.175817, 0.382366),
+ vec2(0.487472, -0.063082),
+ vec2(0.355476, 0.025357),
+ vec2(-0.084078, 0.898312),
+ vec2(0.488876, -0.783441),
+ vec2(0.470016, 0.217933),
+ vec2(-0.696890, -0.549791),
+ vec2(-0.149693, 0.605762),
+ vec2(0.034211, 0.979980),
+ vec2(0.503098, -0.308878),
+ vec2(-0.016205, -0.872921),
+ vec2(0.385784, -0.393902),
+ vec2(-0.146886, -0.859249),
+ vec2(0.643361, 0.164098),
+ vec2(0.634388, -0.049471),
+ vec2(-0.688894, 0.007843),
+ vec2(0.464034, -0.188818),
+ vec2(-0.440840, 0.137486),
+ vec2(0.364483, 0.511704),
+ vec2(0.034028, 0.325968),
+ vec2(0.099094, -0.308023),
+ vec2(0.693960, -0.366253),
+ vec2(0.678884, -0.204688),
+ vec2(0.001801, 0.780328),
+ vec2(0.145177, -0.898984),
+ vec2(0.062655, -0.611866),
+ vec2(0.315226, -0.604297),
+ vec2(-0.780145, 0.486251),
+ vec2(-0.371868, 0.882138),
+ vec2(0.200476, 0.494430),
+ vec2(-0.494552, -0.711051),
+ vec2(0.612476, 0.705252),
+ vec2(-0.578845, -0.768792),
+ vec2(-0.772454, -0.090976),
+ vec2(0.504440, 0.372295),
+ vec2(0.155736, 0.065157),
+ vec2(0.391522, 0.849605),
+ vec2(-0.620106, -0.328104),
+ vec2(0.789239, -0.419965),
+ vec2(-0.545396, 0.538133),
+ vec2(-0.178564, -0.596057)
+);
+
+#ifdef COLORED_SHADOWS
+
+vec4 getShadowColor(sampler2D shadowsampler, vec2 smTexCoord, float realDistance)
+{
+ vec2 clampedpos;
+ vec4 visibility = vec4(0.0);
+
+ float texture_size = 1.0 / (f_textureresolution * 0.5);
+ int init_offset = int(floor(mod(((smTexCoord.x * 34.0) + 1.0) * smTexCoord.y, 64.0-PCFSAMPLES)));
+ int end_offset = int(PCFSAMPLES) + init_offset;
+
+ for (int x = init_offset; x < end_offset; x++) {
+ clampedpos = poissonDisk[x] * texture_size * SOFTSHADOWRADIUS + smTexCoord.xy;
+ visibility += getHardShadowColor(shadowsampler, clampedpos.xy, realDistance);
+ }
+
+ return visibility / PCFSAMPLES;
+}
+
+#else
+
+float getShadow(sampler2D shadowsampler, vec2 smTexCoord, float realDistance)
+{
+ vec2 clampedpos;
+ float visibility = 0.0;
+
+ float texture_size = 1.0 / (f_textureresolution * 0.5);
+ int init_offset = int(floor(mod(((smTexCoord.x * 34.0) + 1.0) * smTexCoord.y, 64.0-PCFSAMPLES)));
+ int end_offset = int(PCFSAMPLES) + init_offset;
+
+ for (int x = init_offset; x < end_offset; x++) {
+ clampedpos = poissonDisk[x] * texture_size * SOFTSHADOWRADIUS + smTexCoord.xy;
+ visibility += getHardShadow(shadowsampler, clampedpos.xy, realDistance);
+ }
+
+ return visibility / PCFSAMPLES;
+}
+
+#endif
+
+#else
+/* poisson filter disabled */
+
+#ifdef COLORED_SHADOWS
+
+vec4 getShadowColor(sampler2D shadowsampler, vec2 smTexCoord, float realDistance)
+{
+ vec2 clampedpos;
+ vec4 visibility = vec4(0.0);
+ float sradius=0.0;
+ if( PCFBOUND>0)
+ sradius = SOFTSHADOWRADIUS / PCFBOUND;
+ float texture_size = 1.0 / (f_textureresolution * 0.5);
+ float y, x;
+ // basic PCF filter
+ for (y = -PCFBOUND; y <= PCFBOUND; y += 1.0)
+ for (x = -PCFBOUND; x <= PCFBOUND; x += 1.0) {
+ clampedpos = vec2(x,y) * texture_size* sradius + smTexCoord.xy;
+ visibility += getHardShadowColor(shadowsampler, clampedpos.xy, realDistance);
+ }
+
+ return visibility / PCFSAMPLES;
+}
+
+#else
+float getShadow(sampler2D shadowsampler, vec2 smTexCoord, float realDistance)
+{
+ vec2 clampedpos;
+ float visibility = 0.0;
+ float sradius=0.0;
+ if( PCFBOUND>0)
+ sradius = SOFTSHADOWRADIUS / PCFBOUND;
+
+ float texture_size = 1.0 / (f_textureresolution * 0.5);
+ float y, x;
+ // basic PCF filter
+ for (y = -PCFBOUND; y <= PCFBOUND; y += 1.0)
+ for (x = -PCFBOUND; x <= PCFBOUND; x += 1.0) {
+ clampedpos = vec2(x,y) * texture_size * sradius + smTexCoord.xy;
+ visibility += getHardShadow(shadowsampler, clampedpos.xy, realDistance);
+ }
+
+ return visibility / PCFSAMPLES;
+}
+
+#endif
+
+#endif
+#endif
+
void main(void)
{
vec3 color;
vec2 uv = varTexCoord.st;
-
vec4 base = texture2D(baseTexture, uv).rgba;
-#ifdef USE_DISCARD
// If alpha is zero, we can just discard the pixel. This fixes transparency
// on GPUs like GC7000L, where GL_ALPHA_TEST is not implemented in mesa,
// and also on GLES 2, where GL_ALPHA_TEST is missing entirely.
- if (base.a == 0.0) {
+#ifdef USE_DISCARD
+ if (base.a == 0.0)
+ discard;
+#endif
+#ifdef USE_DISCARD_REF
+ if (base.a < 0.5)
discard;
- }
#endif
color = base.rgb;
-
vec4 col = vec4(color.rgb, base.a);
-
col.rgb *= varColor.rgb;
-
col.rgb *= emissiveColor.rgb * vIDiff;
+#ifdef ENABLE_DYNAMIC_SHADOWS
+ float shadow_int = 0.0;
+ vec3 shadow_color = vec3(0.0, 0.0, 0.0);
+ vec3 posLightSpace = getLightSpacePosition();
+
+#ifdef COLORED_SHADOWS
+ vec4 visibility;
+ if (cosLight > 0.0)
+ visibility = getShadowColor(ShadowMapSampler, posLightSpace.xy, posLightSpace.z);
+ else
+ visibility = vec4(1.0, 0.0, 0.0, 0.0);
+ shadow_int = visibility.r;
+ shadow_color = visibility.gba;
+#else
+ shadow_int = getShadow(ShadowMapSampler, posLightSpace.xy, posLightSpace.z);
+#endif
+
+ if (f_normal_length != 0 && cosLight <= 0.001) {
+ shadow_int = clamp(shadow_int + 0.5 * abs(cosLight), 0.0, 1.0);
+ }
+
+ shadow_int = 1.0 - (shadow_int * adj_shadow_strength);
+
+ col.rgb = mix(shadow_color, col.rgb, shadow_int) * shadow_int;
+#endif
+
+
+
#if ENABLE_TONE_MAPPING
col = applyToneMapping(col);
#endif
diff --git a/client/shaders/object_shader/opengl_vertex.glsl b/client/shaders/object_shader/opengl_vertex.glsl
index b4a4d0aaa..f135ab9dc 100644
--- a/client/shaders/object_shader/opengl_vertex.glsl
+++ b/client/shaders/object_shader/opengl_vertex.glsl
@@ -13,12 +13,37 @@ varying mediump vec2 varTexCoord;
centroid varying vec2 varTexCoord;
#endif
+#ifdef ENABLE_DYNAMIC_SHADOWS
+ // shadow uniforms
+ uniform vec3 v_LightDirection;
+ uniform float f_textureresolution;
+ uniform mat4 m_ShadowViewProj;
+ uniform float f_shadowfar;
+ uniform float f_shadow_strength;
+ uniform float f_timeofday;
+ varying float cosLight;
+ varying float normalOffsetScale;
+ varying float adj_shadow_strength;
+ varying float f_normal_length;
+#endif
+
varying vec3 eyeVec;
varying float vIDiff;
const float e = 2.718281828459;
const float BS = 10.0;
+#ifdef ENABLE_DYNAMIC_SHADOWS
+// custom smoothstep implementation because it's not defined in glsl1.2
+// https://docs.gl/sl4/smoothstep
+float mtsmoothstep(in float edge0, in float edge1, in float x)
+{
+ float t = clamp((x - edge0) / (edge1 - edge0), 0.0, 1.0);
+ return t * t * (3.0 - 2.0 * t);
+}
+#endif
+
+
float directional_ambient(vec3 normal)
{
vec3 v = normal * normal;
@@ -49,5 +74,30 @@ void main(void)
: directional_ambient(normalize(inVertexNormal));
#endif
+#ifdef GL_ES
+ varColor = inVertexColor.bgra;
+#else
varColor = inVertexColor;
+#endif
+
+#ifdef ENABLE_DYNAMIC_SHADOWS
+
+ cosLight = max(0.0, dot(vNormal, -v_LightDirection));
+ float texelSize = 0.51;
+ float slopeScale = clamp(1.0 - cosLight, 0.0, 1.0);
+ normalOffsetScale = texelSize * slopeScale;
+ if (f_timeofday < 0.2) {
+ adj_shadow_strength = f_shadow_strength * 0.5 *
+ (1.0 - mtsmoothstep(0.18, 0.2, f_timeofday));
+ } else if (f_timeofday >= 0.8) {
+ adj_shadow_strength = f_shadow_strength * 0.5 *
+ mtsmoothstep(0.8, 0.83, f_timeofday);
+ } else {
+ adj_shadow_strength = f_shadow_strength *
+ mtsmoothstep(0.20, 0.25, f_timeofday) *
+ (1.0 - mtsmoothstep(0.7, 0.8, f_timeofday));
+ }
+ f_normal_length = length(vNormal);
+
+#endif
}
diff --git a/client/shaders/selection_shader/opengl_vertex.glsl b/client/shaders/selection_shader/opengl_vertex.glsl
index 9ca87a9cf..39dde3056 100644
--- a/client/shaders/selection_shader/opengl_vertex.glsl
+++ b/client/shaders/selection_shader/opengl_vertex.glsl
@@ -6,5 +6,9 @@ void main(void)
varTexCoord = inTexCoord0.st;
gl_Position = mWorldViewProj * inVertexPosition;
+#ifdef GL_ES
+ varColor = inVertexColor.bgra;
+#else
varColor = inVertexColor;
+#endif
}
diff --git a/client/shaders/shadow_shaders/pass1_fragment.glsl b/client/shaders/shadow_shaders/pass1_fragment.glsl
new file mode 100644
index 000000000..2105def96
--- /dev/null
+++ b/client/shaders/shadow_shaders/pass1_fragment.glsl
@@ -0,0 +1,13 @@
+uniform sampler2D ColorMapSampler;
+varying vec4 tPos;
+
+void main()
+{
+ vec4 col = texture2D(ColorMapSampler, gl_TexCoord[0].st);
+
+ if (col.a < 0.70)
+ discard;
+
+ float depth = 0.5 + tPos.z * 0.5;
+ gl_FragColor = vec4(depth, 0.0, 0.0, 1.0);
+}
diff --git a/client/shaders/shadow_shaders/pass1_trans_fragment.glsl b/client/shaders/shadow_shaders/pass1_trans_fragment.glsl
new file mode 100644
index 000000000..b267c2214
--- /dev/null
+++ b/client/shaders/shadow_shaders/pass1_trans_fragment.glsl
@@ -0,0 +1,42 @@
+uniform sampler2D ColorMapSampler;
+varying vec4 tPos;
+
+#ifdef COLORED_SHADOWS
+varying vec3 varColor;
+
+// c_precision of 128 fits within 7 base-10 digits
+const float c_precision = 128.0;
+const float c_precisionp1 = c_precision + 1.0;
+
+float packColor(vec3 color)
+{
+ return floor(color.b * c_precision + 0.5)
+ + floor(color.g * c_precision + 0.5) * c_precisionp1
+ + floor(color.r * c_precision + 0.5) * c_precisionp1 * c_precisionp1;
+}
+
+const vec3 black = vec3(0.0);
+#endif
+
+void main()
+{
+ vec4 col = texture2D(ColorMapSampler, gl_TexCoord[0].st);
+#ifndef COLORED_SHADOWS
+ if (col.a < 0.5)
+ discard;
+#endif
+
+ float depth = 0.5 + tPos.z * 0.5;
+ // ToDo: Liso: Apply movement on waving plants
+ // depth in [0, 1] for texture
+
+ //col.rgb = col.a == 1.0 ? vec3(1.0) : col.rgb;
+#ifdef COLORED_SHADOWS
+ col.rgb *= varColor.rgb;
+ // premultiply color alpha (see-through side)
+ float packedColor = packColor(col.rgb * (1.0 - col.a));
+ gl_FragColor = vec4(depth, packedColor, 0.0,1.0);
+#else
+ gl_FragColor = vec4(depth, 0.0, 0.0, 1.0);
+#endif
+}
diff --git a/client/shaders/shadow_shaders/pass1_trans_vertex.glsl b/client/shaders/shadow_shaders/pass1_trans_vertex.glsl
new file mode 100644
index 000000000..0a9efe450
--- /dev/null
+++ b/client/shaders/shadow_shaders/pass1_trans_vertex.glsl
@@ -0,0 +1,33 @@
+uniform mat4 LightMVP; // world matrix
+varying vec4 tPos;
+#ifdef COLORED_SHADOWS
+varying vec3 varColor;
+#endif
+
+const float bias0 = 0.9;
+const float zPersFactor = 0.5;
+const float bias1 = 1.0 - bias0 + 1e-6;
+
+vec4 getPerspectiveFactor(in vec4 shadowPosition)
+{
+ float pDistance = length(shadowPosition.xy);
+ float pFactor = pDistance * bias0 + bias1;
+ shadowPosition.xyz *= vec3(vec2(1.0 / pFactor), zPersFactor);
+
+ return shadowPosition;
+}
+
+
+void main()
+{
+ vec4 pos = LightMVP * gl_Vertex;
+
+ tPos = getPerspectiveFactor(LightMVP * gl_Vertex);
+
+ gl_Position = vec4(tPos.xyz, 1.0);
+ gl_TexCoord[0].st = gl_MultiTexCoord0.st;
+
+#ifdef COLORED_SHADOWS
+ varColor = gl_Color.rgb;
+#endif
+}
diff --git a/client/shaders/shadow_shaders/pass1_vertex.glsl b/client/shaders/shadow_shaders/pass1_vertex.glsl
new file mode 100644
index 000000000..a6d8b3db8
--- /dev/null
+++ b/client/shaders/shadow_shaders/pass1_vertex.glsl
@@ -0,0 +1,26 @@
+uniform mat4 LightMVP; // world matrix
+varying vec4 tPos;
+
+const float bias0 = 0.9;
+const float zPersFactor = 0.5;
+const float bias1 = 1.0 - bias0 + 1e-6;
+
+vec4 getPerspectiveFactor(in vec4 shadowPosition)
+{
+ float pDistance = length(shadowPosition.xy);
+ float pFactor = pDistance * bias0 + bias1;
+ shadowPosition.xyz *= vec3(vec2(1.0 / pFactor), zPersFactor);
+
+ return shadowPosition;
+}
+
+
+void main()
+{
+ vec4 pos = LightMVP * gl_Vertex;
+
+ tPos = getPerspectiveFactor(pos);
+
+ gl_Position = vec4(tPos.xyz, 1.0);
+ gl_TexCoord[0].st = gl_MultiTexCoord0.st;
+}
diff --git a/client/shaders/shadow_shaders/pass2_fragment.glsl b/client/shaders/shadow_shaders/pass2_fragment.glsl
new file mode 100644
index 000000000..00b4f9f6c
--- /dev/null
+++ b/client/shaders/shadow_shaders/pass2_fragment.glsl
@@ -0,0 +1,23 @@
+uniform sampler2D ShadowMapClientMap;
+#ifdef COLORED_SHADOWS
+uniform sampler2D ShadowMapClientMapTraslucent;
+#endif
+uniform sampler2D ShadowMapSamplerdynamic;
+
+void main() {
+
+#ifdef COLORED_SHADOWS
+ vec2 first_depth = texture2D(ShadowMapClientMap, gl_TexCoord[0].st).rg;
+ vec2 depth_splitdynamics = vec2(texture2D(ShadowMapSamplerdynamic, gl_TexCoord[2].st).r, 0.0);
+ if (first_depth.r > depth_splitdynamics.r)
+ first_depth = depth_splitdynamics;
+ vec2 depth_color = texture2D(ShadowMapClientMapTraslucent, gl_TexCoord[1].st).rg;
+ gl_FragColor = vec4(first_depth.r, first_depth.g, depth_color.r, depth_color.g);
+#else
+ float first_depth = texture2D(ShadowMapClientMap, gl_TexCoord[0].st).r;
+ float depth_splitdynamics = texture2D(ShadowMapSamplerdynamic, gl_TexCoord[2].st).r;
+ first_depth = min(first_depth, depth_splitdynamics);
+ gl_FragColor = vec4(first_depth, 0.0, 0.0, 1.0);
+#endif
+
+}
diff --git a/client/shaders/shadow_shaders/pass2_vertex.glsl b/client/shaders/shadow_shaders/pass2_vertex.glsl
new file mode 100644
index 000000000..ac445c9c7
--- /dev/null
+++ b/client/shaders/shadow_shaders/pass2_vertex.glsl
@@ -0,0 +1,9 @@
+
+void main()
+{
+ vec4 uv = vec4(gl_Vertex.xyz, 1.0) * 0.5 + 0.5;
+ gl_TexCoord[0] = uv;
+ gl_TexCoord[1] = uv;
+ gl_TexCoord[2] = uv;
+ gl_Position = vec4(gl_Vertex.xyz, 1.0);
+}
diff --git a/clientmods/preview/mod.conf b/clientmods/preview/mod.conf
new file mode 100644
index 000000000..4e56ec293
--- /dev/null
+++ b/clientmods/preview/mod.conf
@@ -0,0 +1 @@
+name = preview
diff --git a/cmake/Modules/FindGMP.cmake b/cmake/Modules/FindGMP.cmake
index 7b45f16c7..190b7c548 100644
--- a/cmake/Modules/FindGMP.cmake
+++ b/cmake/Modules/FindGMP.cmake
@@ -12,8 +12,6 @@ if(ENABLE_SYSTEM_GMP)
else()
message (STATUS "Detecting GMP from system failed.")
endif()
-else()
- message (STATUS "Detecting GMP from system disabled! (ENABLE_SYSTEM_GMP=0)")
endif()
if(NOT USE_SYSTEM_GMP)
diff --git a/cmake/Modules/FindGettextLib.cmake b/cmake/Modules/FindGettextLib.cmake
index 529452a4a..b7681827c 100644
--- a/cmake/Modules/FindGettextLib.cmake
+++ b/cmake/Modules/FindGettextLib.cmake
@@ -42,15 +42,6 @@ if(WIN32)
NAMES ${GETTEXT_LIB_NAMES}
PATHS "${CUSTOM_GETTEXT_PATH}/lib"
DOC "GetText library")
- find_file(GETTEXT_DLL
- NAMES libintl.dll intl.dll libintl3.dll intl3.dll
- PATHS "${CUSTOM_GETTEXT_PATH}/bin" "${CUSTOM_GETTEXT_PATH}/lib"
- DOC "gettext *intl*.dll")
- find_file(GETTEXT_ICONV_DLL
- NAMES libiconv2.dll
- PATHS "${CUSTOM_GETTEXT_PATH}/bin" "${CUSTOM_GETTEXT_PATH}/lib"
- DOC "gettext *iconv*.lib")
- set(GETTEXT_REQUIRED_VARS ${GETTEXT_REQUIRED_VARS} GETTEXT_DLL GETTEXT_ICONV_DLL)
endif(WIN32)
diff --git a/cmake/Modules/FindIrrlicht.cmake b/cmake/Modules/FindIrrlicht.cmake
deleted file mode 100644
index 6f361e829..000000000
--- a/cmake/Modules/FindIrrlicht.cmake
+++ /dev/null
@@ -1,77 +0,0 @@
-
-mark_as_advanced(IRRLICHT_LIBRARY IRRLICHT_INCLUDE_DIR IRRLICHT_DLL)
-set(IRRLICHT_SOURCE_DIR "" CACHE PATH "Path to irrlicht source directory (optional)")
-
-
-# Find include directory
-
-if(NOT IRRLICHT_SOURCE_DIR STREQUAL "")
- set(IRRLICHT_SOURCE_DIR_INCLUDE
- "${IRRLICHT_SOURCE_DIR}/include"
- )
-
- set(IRRLICHT_LIBRARY_NAMES libIrrlicht.a Irrlicht Irrlicht.lib)
-
- if(WIN32)
- if(MSVC)
- set(IRRLICHT_SOURCE_DIR_LIBS "${IRRLICHT_SOURCE_DIR}/lib/Win32-visualstudio")
- set(IRRLICHT_LIBRARY_NAMES Irrlicht.lib)
- else()
- set(IRRLICHT_SOURCE_DIR_LIBS "${IRRLICHT_SOURCE_DIR}/lib/Win32-gcc")
- set(IRRLICHT_LIBRARY_NAMES libIrrlicht.a libIrrlicht.dll.a)
- endif()
- else()
- set(IRRLICHT_SOURCE_DIR_LIBS "${IRRLICHT_SOURCE_DIR}/lib/Linux")
- set(IRRLICHT_LIBRARY_NAMES libIrrlicht.a)
- endif()
-
- find_path(IRRLICHT_INCLUDE_DIR NAMES irrlicht.h
- PATHS
- ${IRRLICHT_SOURCE_DIR_INCLUDE}
- NO_DEFAULT_PATH
- )
-
- find_library(IRRLICHT_LIBRARY NAMES ${IRRLICHT_LIBRARY_NAMES}
- PATHS
- ${IRRLICHT_SOURCE_DIR_LIBS}
- NO_DEFAULT_PATH
- )
-
-else()
- find_path(IRRLICHT_INCLUDE_DIR NAMES irrlicht.h
- PATHS
- /usr/local/include/irrlicht
- /usr/include/irrlicht
- /system/develop/headers/irrlicht #Haiku
- PATH_SUFFIXES "include/irrlicht"
- )
-
- find_library(IRRLICHT_LIBRARY NAMES libIrrlicht.so libIrrlicht.a Irrlicht
- PATHS
- /usr/local/lib
- /usr/lib
- /system/develop/lib # Haiku
- )
-endif()
-
-
-# On Windows, find the DLL for installation
-if(WIN32)
- # If VCPKG_APPLOCAL_DEPS is ON, dll's are automatically handled by VCPKG
- if(NOT VCPKG_APPLOCAL_DEPS)
- if(MSVC)
- set(IRRLICHT_COMPILER "VisualStudio")
- else()
- set(IRRLICHT_COMPILER "gcc")
- endif()
- find_file(IRRLICHT_DLL NAMES Irrlicht.dll
- PATHS
- "${IRRLICHT_SOURCE_DIR}/bin/Win32-${IRRLICHT_COMPILER}"
- DOC "Path of the Irrlicht dll (for installation)"
- )
- endif()
-endif(WIN32)
-
-include(FindPackageHandleStandardArgs)
-find_package_handle_standard_args(Irrlicht DEFAULT_MSG IRRLICHT_LIBRARY IRRLICHT_INCLUDE_DIR)
-
diff --git a/cmake/Modules/FindJson.cmake b/cmake/Modules/FindJson.cmake
index a5e9098f8..cce2d387f 100644
--- a/cmake/Modules/FindJson.cmake
+++ b/cmake/Modules/FindJson.cmake
@@ -1,26 +1,25 @@
-# Look for JSONCPP if asked to.
-# We use a bundled version by default because some distros ship versions of
-# JSONCPP that cause segfaults and other memory errors when we link with them.
-# See https://github.com/minetest/minetest/issues/1793
+# Look for JsonCpp, with fallback to bundeled version
mark_as_advanced(JSON_LIBRARY JSON_INCLUDE_DIR)
-option(ENABLE_SYSTEM_JSONCPP "Enable using a system-wide JSONCPP. May cause segfaults and other memory errors!" FALSE)
+option(ENABLE_SYSTEM_JSONCPP "Enable using a system-wide JsonCpp" TRUE)
+set(USE_SYSTEM_JSONCPP FALSE)
if(ENABLE_SYSTEM_JSONCPP)
find_library(JSON_LIBRARY NAMES jsoncpp)
find_path(JSON_INCLUDE_DIR json/allocator.h PATH_SUFFIXES jsoncpp)
- include(FindPackageHandleStandardArgs)
- find_package_handle_standard_args(Json DEFAULT_MSG JSON_LIBRARY JSON_INCLUDE_DIR)
-
- if(JSON_FOUND)
- message(STATUS "Using system JSONCPP library.")
+ if(JSON_LIBRARY AND JSON_INCLUDE_DIR)
+ message(STATUS "Using JsonCpp provided by system.")
+ set(USE_SYSTEM_JSONCPP TRUE)
endif()
endif()
-if(NOT JSON_FOUND)
- message(STATUS "Using bundled JSONCPP library.")
+if(NOT USE_SYSTEM_JSONCPP)
+ message(STATUS "Using bundled JsonCpp library.")
set(JSON_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/lib/jsoncpp)
set(JSON_LIBRARY jsoncpp)
add_subdirectory(lib/jsoncpp)
endif()
+
+include(FindPackageHandleStandardArgs)
+find_package_handle_standard_args(Json DEFAULT_MSG JSON_LIBRARY JSON_INCLUDE_DIR)
diff --git a/cmake/Modules/FindLuaJIT.cmake b/cmake/Modules/FindLuaJIT.cmake
index 97b0b7c64..217415d14 100644
--- a/cmake/Modules/FindLuaJIT.cmake
+++ b/cmake/Modules/FindLuaJIT.cmake
@@ -1,8 +1,8 @@
# Locate LuaJIT library
# This module defines
# LUAJIT_FOUND, if false, do not try to link to Lua
+# LUA_LIBRARY, where to find the lua library
# LUA_INCLUDE_DIR, where to find lua.h
-# LUA_VERSION_STRING, the version of Lua found (since CMake 2.8.8)
#
# This module is similar to FindLua51.cmake except that it finds LuaJit instead.
@@ -44,19 +44,10 @@ else()
)
endif()
-
-IF(LUA_INCLUDE_DIR AND EXISTS "${LUA_INCLUDE_DIR}/luajit.h")
- FILE(STRINGS "${LUA_INCLUDE_DIR}/luajit.h" lua_version_str REGEX "^#define[ \t]+LUA_RELEASE[ \t]+\"LuaJIT .+\"")
-
- STRING(REGEX REPLACE "^#define[ \t]+LUA_RELEASE[ \t]+\"LuaJIT ([^\"]+)\".*" "\\1" LUA_VERSION_STRING "${lua_version_str}")
- UNSET(lua_version_str)
-ENDIF()
-
INCLUDE(FindPackageHandleStandardArgs)
# handle the QUIETLY and REQUIRED arguments and set LUAJIT_FOUND to TRUE if
-# all listed variables are TRUE
+# all listed variables exist
FIND_PACKAGE_HANDLE_STANDARD_ARGS(LuaJIT
- REQUIRED_VARS LUA_LIBRARY LUA_INCLUDE_DIR
- VERSION_VAR LUA_VERSION_STRING)
+ REQUIRED_VARS LUA_LIBRARY LUA_INCLUDE_DIR)
-MARK_AS_ADVANCED(LUA_INCLUDE_DIR LUA_LIBRARY LUA_MATH_LIBRARY)
+MARK_AS_ADVANCED(LUA_INCLUDE_DIR LUA_LIBRARY)
diff --git a/cmake/Modules/FindOpenGLES2.cmake b/cmake/Modules/FindOpenGLES2.cmake
index a47126705..ce04191dd 100644
--- a/cmake/Modules/FindOpenGLES2.cmake
+++ b/cmake/Modules/FindOpenGLES2.cmake
@@ -42,7 +42,7 @@ else()
)
include(FindPackageHandleStandardArgs)
- find_package_handle_standard_args(OPENGLES2 DEFAULT_MSG OPENGLES2_LIBRARY OPENGLES2_INCLUDE_DIR)
+ find_package_handle_standard_args(OpenGLES2 DEFAULT_MSG OPENGLES2_LIBRARY OPENGLES2_INCLUDE_DIR)
find_path(EGL_INCLUDE_DIR EGL/egl.h
PATHS /usr/openwin/share/include
@@ -59,7 +59,6 @@ else()
/usr/lib
)
- include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(EGL DEFAULT_MSG EGL_LIBRARY EGL_INCLUDE_DIR)
endif()
diff --git a/cmake/Modules/FindZstd.cmake b/cmake/Modules/FindZstd.cmake
new file mode 100644
index 000000000..e28e1334b
--- /dev/null
+++ b/cmake/Modules/FindZstd.cmake
@@ -0,0 +1,25 @@
+mark_as_advanced(ZSTD_LIBRARY ZSTD_INCLUDE_DIR)
+
+find_path(ZSTD_INCLUDE_DIR NAMES zstd.h)
+
+find_library(ZSTD_LIBRARY NAMES zstd)
+
+if(ZSTD_INCLUDE_DIR AND ZSTD_LIBRARY)
+ # Check that the API we use exists
+ include(CheckSymbolExists)
+ unset(HAVE_ZSTD_INITCSTREAM CACHE)
+ set(CMAKE_REQUIRED_INCLUDES ${ZSTD_INCLUDE_DIR})
+ set(CMAKE_REQUIRED_LIBRARIES ${ZSTD_LIBRARY})
+ check_symbol_exists(ZSTD_initCStream zstd.h HAVE_ZSTD_INITCSTREAM)
+ unset(CMAKE_REQUIRED_INCLUDES)
+ unset(CMAKE_REQUIRED_LIBRARIES)
+
+ if(NOT HAVE_ZSTD_INITCSTREAM)
+ unset(ZSTD_INCLUDE_DIR CACHE)
+ unset(ZSTD_LIBRARY CACHE)
+ endif()
+endif()
+
+include(FindPackageHandleStandardArgs)
+find_package_handle_standard_args(Zstd DEFAULT_MSG ZSTD_LIBRARY ZSTD_INCLUDE_DIR)
+
diff --git a/cmake/Modules/MinetestFindIrrlichtHeaders.cmake b/cmake/Modules/MinetestFindIrrlichtHeaders.cmake
new file mode 100644
index 000000000..d33b296d0
--- /dev/null
+++ b/cmake/Modules/MinetestFindIrrlichtHeaders.cmake
@@ -0,0 +1,26 @@
+# Locate Irrlicht or IrrlichtMt headers on system.
+
+foreach(libname IN ITEMS IrrlichtMt Irrlicht)
+ string(TOLOWER "${libname}" libname2)
+
+ find_path(IRRLICHT_INCLUDE_DIR NAMES irrlicht.h
+ DOC "Path to the directory with IrrlichtMt includes"
+ PATHS
+ /usr/local/include/${libname2}
+ /usr/include/${libname2}
+ /system/develop/headers/${libname2} #Haiku
+ PATH_SUFFIXES "include/${libname2}"
+ )
+
+ if(IRRLICHT_INCLUDE_DIR)
+ break()
+ endif()
+endforeach()
+
+# Handholding for users
+if(IRRLICHT_INCLUDE_DIR AND (NOT IS_DIRECTORY "${IRRLICHT_INCLUDE_DIR}" OR
+ NOT EXISTS "${IRRLICHT_INCLUDE_DIR}/irrlicht.h"))
+ message(WARNING "IRRLICHT_INCLUDE_DIR was set to ${IRRLICHT_INCLUDE_DIR} "
+ "but irrlicht.h does not exist inside. The path will not be used.")
+ unset(IRRLICHT_INCLUDE_DIR CACHE)
+endif()
diff --git a/doc/Doxyfile.in b/doc/Doxyfile.in
index d7816f0e4..ae36fd6bf 100644
--- a/doc/Doxyfile.in
+++ b/doc/Doxyfile.in
@@ -16,7 +16,6 @@ PREDEFINED = "USE_SPATIAL=1" \
"USE_REDIS=1" \
"USE_SOUND=1" \
"USE_CURL=1" \
- "USE_FREETYPE=1" \
"USE_GETTEXT=1"
# Input
diff --git a/doc/client_lua_api.txt b/doc/client_lua_api.txt
index 098596481..32be8c849 100644
--- a/doc/client_lua_api.txt
+++ b/doc/client_lua_api.txt
@@ -1,4 +1,4 @@
-Minetest Lua Client Modding API Reference 5.4.0
+Minetest Lua Client Modding API Reference 5.5.0
================================================
* More information at <http://www.minetest.net/>
* Developer Wiki: <http://dev.minetest.net/>
@@ -651,6 +651,9 @@ Minetest namespace reference
* `minetest.sha1(data, [raw])`: returns the sha1 hash of data
* `data`: string of data to hash
* `raw`: return raw bytes instead of hex digits, default: false
+* `minetest.colorspec_to_colorstring(colorspec)`: Converts a ColorSpec to a
+ ColorString. If the ColorSpec is invalid, returns `nil`.
+ * `colorspec`: The ColorSpec to convert
* `minetest.get_csm_restrictions()`: returns a table of `Flags` indicating the
restrictions applied to the current mod.
* If a flag in this table is set to true, the feature is RESTRICTED.
@@ -907,7 +910,9 @@ Call these functions only at load time!
* Example: `minetest.rgba(10, 20, 30, 40)`, returns `"#0A141E28"`
* `minetest.encode_base64(string)`: returns string encoded in base64
* Encodes a string in base64.
-* `minetest.decode_base64(string)`: returns string
+* `minetest.decode_base64(string)`: returns string or nil on failure
+ * Padding characters are only supported starting at version 5.4.0, where
+ 5.5.0 and newer perform proper checks.
* Decodes a string encoded in base64.
* `minetest.gettext(string)` : returns string
* look up the translation of a string in the gettext message catalog
@@ -1025,8 +1030,8 @@ Methods:
* returns true if player is in a liquid (This oscillates so that the player jumps a bit above the surface)
* `is_in_liquid_stable()`
* returns true if player is in a stable liquid (This is more stable and defines the maximum speed of the player)
-* `get_liquid_viscosity()`
- * returns liquid viscosity (Gets the viscosity of liquid to calculate friction)
+* `get_move_resistance()`
+ * returns move resistance of current node, the higher the slower the player moves
* `is_climbing()`
* returns true if player is climbing
* `swimming_vertical()`
@@ -1228,7 +1233,7 @@ It can be created via `Raycast(pos1, pos2, objects, liquids)` or
liquid_type = <string>, -- A string containing "none", "flowing", or "source" *May not exist*
liquid_alternative_flowing = <string>, -- Alternative node for liquid *May not exist*
liquid_alternative_source = <string>, -- Alternative node for liquid *May not exist*
- liquid_viscosity = <number>, -- How fast the liquid flows *May not exist*
+ liquid_viscosity = <number>, -- How slow the liquid flows *May not exist*
liquid_renewable = <boolean>, -- Whether the liquid makes an infinite source *May not exist*
liquid_range = <number>, -- How far the liquid flows *May not exist*
drowning = bool, -- Whether the player will drown in the node
@@ -1243,6 +1248,7 @@ It can be created via `Raycast(pos1, pos2, objects, liquids)` or
},
legacy_facedir_simple = bool, -- Whether to use old facedir
legacy_wallmounted = bool -- Whether to use old wallmounted
+ move_resistance = <number>, -- How slow players can move through the node *May not exist*
}
```
@@ -1309,6 +1315,8 @@ It can be created via `Raycast(pos1, pos2, objects, liquids)` or
-- ^ See "HUD Element Types"
size = { x=100, y=100 }, -- default {x=0, y=0}
-- ^ Size of element in pixels
+ style = 0,
+ -- ^ For "text" elements sets font style: bitfield with 1 = bold, 2 = italic, 4 = monospace
}
```
@@ -1348,9 +1356,8 @@ The following functions provide escape sequences:
Named colors are also supported and are equivalent to
[CSS Color Module Level 4](http://dev.w3.org/csswg/css-color/#named-colors).
-To specify the value of the alpha channel, append `#AA` to the end of the color name
-(e.g. `colorname#08`). For named colors the hexadecimal string representing the alpha
-value must (always) be two hexadecimal digits.
+To specify the value of the alpha channel, append `#A` or `#AA` to the end of
+the color name (e.g. `colorname#08`).
`Color`
-------------
diff --git a/doc/direction.md b/doc/direction.md
new file mode 100644
index 000000000..826dd47b3
--- /dev/null
+++ b/doc/direction.md
@@ -0,0 +1,69 @@
+# Minetest Direction Document
+
+## 1. Long-term Roadmap
+
+The long-term roadmaps, aims, and guiding philosophies are set out using the
+following documents:
+
+* [What is Minetest?](http://c55.me/blog/?p=1491)
+* [celeron55's roadmap](https://forum.minetest.net/viewtopic.php?t=9177)
+* [celeron55's comment in "A clear mission statement for Minetest is missing"](https://github.com/minetest/minetest/issues/3476#issuecomment-167399287)
+* [Core developer to-do/wish lists](https://forum.minetest.net/viewforum.php?f=7)
+
+## 2. Medium-term Roadmap
+
+These are the current medium-term goals for Minetest development, in no
+particular order.
+
+These goals were created from the top points in a
+[roadmap brainstorm](https://github.com/minetest/minetest/issues/10461).
+This should be reviewed approximately yearly, or when goals are achieved.
+
+Pull requests that address one of these goals will be labelled as "Roadmap".
+PRs that are not on the roadmap will be closed unless they receive a concept
+approval within a week, issues can be used for preapproval.
+Bug fixes are exempt for this, and are always accepted and prioritised.
+See [CONTRIBUTING.md](../.github/CONTRIBUTING.md) for more info.
+
+### 2.1 Rendering/Graphics improvements
+
+The priority is fixing the issues, performance, and general correctness.
+Once that is done, fancier features can be worked on, such as water shaders,
+shadows, and improved lighting.
+
+Examples include
+[transparency sorting](https://github.com/minetest/minetest/issues/95),
+[particle performance](https://github.com/minetest/minetest/issues/1414),
+[general view distance](https://github.com/minetest/minetest/issues/7222).
+
+This includes work on maintaining
+[our Irrlicht fork](https://github.com/minetest/irrlicht), and switching to
+alternative libraries to replace Irrlicht functionality as needed
+
+### 2.2 Internal code refactoring
+
+To ensure sustainable development, Minetest's code needs to be
+[refactored and improved](https://github.com/minetest/minetest/pulls?q=is%3Aopen+sort%3Aupdated-desc+label%3A%22Code+quality%22+).
+This will remove code rot and allow for more efficient development.
+
+### 2.3 UI Improvements
+
+A [formspec replacement](https://github.com/minetest/minetest/issues/6527) is
+needed to make GUIs better and easier to create. This replacement could also
+be a replacement for HUDs, allowing for a unified API.
+
+A [new mainmenu](https://github.com/minetest/minetest/issues/6733) is needed to
+improve user experience. First impressions matter, and the current main menu
+doesn't do a very good job at selling Minetest or explaining what it is.
+A new main menu should promote games to users, allowing Minetest Game to no
+longer be bundled by default.
+
+The UI code is undergoing rapid changes, so it is especially important to make
+an issue for any large changes before spending lots of time.
+
+### 2.4 Object and entity improvements
+
+There are still a significant number of issues with objects.
+Collisions,
+[performance](https://github.com/minetest/minetest/issues/6453),
+API convenience, and discrepancies between players and entities.
diff --git a/doc/lua_api.txt b/doc/lua_api.txt
index 790ab32f4..faaed55e1 100644
--- a/doc/lua_api.txt
+++ b/doc/lua_api.txt
@@ -77,8 +77,16 @@ The game directory can contain the following files:
`disallowed_mapgens`.
* `disallowed_mapgen_settings= <comma-separated mapgen settings>`
e.g. `disallowed_mapgen_settings = mgv5_spflags`
- These settings are hidden for this game in the world creation
+ These mapgen settings are hidden for this game in the world creation
dialog and game start menu.
+ * `disabled_settings = <comma-separated settings>`
+ e.g. `disabled_settings = enable_damage, creative_mode`
+ These settings are hidden for this game in the "Start game" tab
+ and will be initialized as `false` when the game is started.
+ Prepend a setting name with an exclamation mark to initialize it to `true`
+ (this does not work for `enable_server`).
+ Only these settings are supported:
+ `enable_damage`, `creative_mode`, `enable_server`.
* `author`: The author of the game. It only appears when downloaded from
ContentDB.
* `release`: Ignore this: Should only ever be set by ContentDB, as it is
@@ -105,8 +113,16 @@ 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.
+Menu music
+-----------
+Games can provide custom main menu music. They are put inside a `menu`
+directory inside the game directory.
+The music files are named `theme.ogg`.
+If you want to specify multiple music files for one game, add additional
+images named like `theme.$n.ogg`, with an ascending number $n starting
+with 1 (max 10), and a random music file will be chosen from the provided ones.
Mods
====
@@ -247,7 +263,7 @@ Media files (textures, sounds, whatever) that will be transferred to the
client and will be available for use by the mod and translation files for
the clients (see [Translations]).
-It is suggested to use the folders for the purpous they are thought for,
+It is suggested to use the folders for the purpose they are thought for,
eg. put textures into `textures`, translation files into `locale`,
models for entities or meshnodes into `models` et cetera.
@@ -620,6 +636,23 @@ Result is more like what you'd expect if you put a color on top of another
color, meaning white surfaces get a lot of your new color while black parts
don't change very much.
+#### `[png:<base64>`
+
+Embed a base64 encoded PNG image in the texture string.
+You can produce a valid string for this by calling
+`minetest.encode_base64(minetest.encode_png(tex))`,
+refer to the documentation of these functions for details.
+You can use this to send disposable images such as captchas
+to individual clients, or render things that would be too
+expensive to compose with `[combine:`.
+
+IMPORTANT: Avoid sending large images this way.
+This is not a replacement for asset files, do not use it to do anything
+that you could instead achieve by just using a file.
+In particular consider `minetest.dynamic_add_media` and test whether
+using other texture modifiers could result in a shorter string than
+embedding a whole image, this may vary by use case.
+
Hardware coloring
-----------------
@@ -993,7 +1026,7 @@ The function of `param1` is determined by `paramtype` in node definition.
`param1` is reserved for the engine when `paramtype != "none"`.
* `paramtype = "light"`
- * The value stores light with and without sun in its upper and lower 4 bits
+ * The value stores light with and without sun in its lower and upper 4 bits
respectively.
* Required by a light source node to enable spreading its light.
* Required by the following drawtypes as they determine their visual
@@ -1022,7 +1055,8 @@ The function of `param2` is determined by `paramtype2` in node definition.
to access/manipulate the content of this field
* Bit 3: If set, liquid is flowing downwards (no graphical effect)
* `paramtype2 = "wallmounted"`
- * Supported drawtypes: "torchlike", "signlike", "normal", "nodebox", "mesh"
+ * Supported drawtypes: "torchlike", "signlike", "plantlike",
+ "plantlike_rooted", "normal", "nodebox", "mesh"
* The rotation of the node is stored in `param2`
* You can make this value by using `minetest.dir_to_wallmounted()`
* Values range 0 - 5
@@ -1048,9 +1082,9 @@ The function of `param2` is determined by `paramtype2` in node definition.
* The height of the 'plantlike' section is stored in `param2`.
* The height is (`param2` / 16) nodes.
* `paramtype2 = "degrotate"`
- * Only valid for "plantlike" drawtype. The rotation of the node is stored in
- `param2`.
- * Values range 0 - 179. The value stored in `param2` is multiplied by two to
+ * Valid for `plantlike` and `mesh` drawtypes. The rotation of the node is
+ stored in `param2`.
+ * Values range 0–239. The value stored in `param2` is multiplied by 1.5 to
get the actual rotation in degrees of the node.
* `paramtype2 = "meshoptions"`
* Only valid for "plantlike" drawtype. `param2` encodes the shape and
@@ -1084,10 +1118,20 @@ The function of `param2` is determined by `paramtype2` in node definition.
palette. The palette should have 32 pixels.
* `paramtype2 = "glasslikeliquidlevel"`
* Only valid for "glasslike_framed" or "glasslike_framed_optional"
- drawtypes.
- * `param2` values 0-63 define 64 levels of internal liquid, 0 being empty
- and 63 being full.
+ drawtypes. "glasslike_framed_optional" nodes are only affected if the
+ "Connected Glass" setting is enabled.
+ * Bits 0-5 define 64 levels of internal liquid, 0 being empty and 63 being
+ full.
+ * Bits 6 and 7 modify the appearance of the frame and node faces. One or
+ both of these values may be added to `param2`:
+ * 64 - Makes the node not connect with neighbors above or below it.
+ * 128 - Makes the node not connect with neighbors to its sides.
* Liquid texture is defined using `special_tiles = {"modname_tilename.png"}`
+* `paramtype2 = "colordegrotate"`
+ * Same as `degrotate`, but with colors.
+ * The first (most-significant) three bits of `param2` tells which color
+ is picked from the palette. The palette should have 8 pixels.
+ * Remaining 5 bits store rotation in range 0–23 (i.e. in 15° steps)
* `paramtype2 = "none"`
* `param2` will not be used by the engine and can be used to store
an arbitrary value
@@ -1107,8 +1151,20 @@ Look for examples in `games/devtest` or `games/minetest_game`.
* Invisible, uses no texture.
* `liquid`
* The cubic source node for a liquid.
+ * Faces bordering to the same node are never rendered.
+ * Connects to node specified in `liquid_alternative_flowing`.
+ * Use `backface_culling = false` for the tiles you want to make
+ visible when inside the node.
* `flowingliquid`
* The flowing version of a liquid, appears with various heights and slopes.
+ * Faces bordering to the same node are never rendered.
+ * Connects to node specified in `liquid_alternative_source`.
+ * Node textures are defined with `special_tiles` where the first tile
+ is for the top and bottom faces and the second tile is for the side
+ faces.
+ * `tiles` is used for the item/inventory/wield image rendering.
+ * Use `backface_culling = false` for the special tiles you want to make
+ visible when inside the node
* `glasslike`
* Often used for partially-transparent nodes.
* Only external sides of textures are visible.
@@ -1135,14 +1191,20 @@ Look for examples in `games/devtest` or `games/minetest_game`.
used to compensate for how `glasslike` reduces visual thickness.
* `torchlike`
* A single vertical texture.
- * If placed on top of a node, uses the first texture specified in `tiles`.
- * If placed against the underside of a node, uses the second texture
- specified in `tiles`.
- * If placed on the side of a node, uses the third texture specified in
- `tiles` and is perpendicular to that node.
+ * If `paramtype2="[color]wallmounted":
+ * If placed on top of a node, uses the first texture specified in `tiles`.
+ * If placed against the underside of a node, uses the second texture
+ specified in `tiles`.
+ * If placed on the side of a node, uses the third texture specified in
+ `tiles` and is perpendicular to that node.
+ * If `paramtype2="none"`:
+ * Will be rendered as if placed on top of a node (see
+ above) and only the first texture is used.
* `signlike`
* A single texture parallel to, and mounted against, the top, underside or
side of a node.
+ * If `paramtype2="[color]wallmounted", it rotates according to `param2`
+ * If `paramtype2="none"`, it will always be on the floor.
* `plantlike`
* Two vertical and diagonal textures at right-angles to each other.
* See `paramtype2 = "meshoptions"` above for other options.
@@ -1175,7 +1237,12 @@ Look for examples in `games/devtest` or `games/minetest_game`.
* `plantlike_rooted`
* Enables underwater `plantlike` without air bubbles around the nodes.
* Consists of a base cube at the co-ordinates of the node plus a
- `plantlike` extension above with a height of `param2 / 16` nodes.
+ `plantlike` extension above
+ * If `paramtype2="leveled", the `plantlike` extension has a height
+ of `param2 / 16` nodes, otherwise it's the height of 1 node
+ * If `paramtype2="wallmounted"`, the `plantlike` extension
+ will be at one of the corresponding 6 sides of the base cube.
+ Also, the base cube rotates like a `normal` cube would
* The `plantlike` extension visually passes through any nodes above the
base cube without affecting them.
* The base cube texture tiles are defined as normal, the `plantlike`
@@ -1482,6 +1549,9 @@ Position/vector
{x=num, y=num, z=num}
+ Note: it is highly recommended to construct a vector using the helper function:
+ vector.new(num, num, num)
+
For helper functions see [Spatial Vectors].
`pointed_thing`
@@ -1549,15 +1619,37 @@ since, by default, no schematic attributes are set.
Items
=====
+Items are things that can be held by players, dropped in the map and
+stored in inventories.
+Items come in the form of item stacks, which are collections of equal
+items that occupy a single inventory slot.
+
Item types
----------
There are three kinds of items: nodes, tools and craftitems.
-* Node: Can be placed in the world's voxel grid
-* Tool: Has a wear property but cannot be stacked. The default use action is to
- dig nodes or hit objects according to its tool capabilities.
-* Craftitem: Cannot dig nodes or be placed
+* Node: Placeable item form of a node in the world's voxel grid
+* Tool: Has a changable wear property but cannot be stacked
+* Craftitem: Has no special properties
+
+Every registered node (the voxel in the world) has a corresponding
+item form (the thing in your inventory) that comes along with it.
+This item form can be placed which will create a node in the
+world (by default).
+Both the 'actual' node and its item form share the same identifier.
+For all practical purposes, you can treat the node and its item form
+interchangeably. We usually just say 'node' to the item form of
+the node as well.
+
+Note the definition of tools is purely technical. The only really
+unique thing about tools is their wear, and that's basically it.
+Beyond that, you can't make any gameplay-relevant assumptions
+about tools or non-tools. It is perfectly valid to register something
+that acts as tool in a gameplay sense as a craftitem, and vice-versa.
+
+Craftitems can be used for items that neither need to be a node
+nor a tool.
Amount and wear
---------------
@@ -1568,7 +1660,9 @@ default. Tool item stacks can not have an amount greater than 1.
Tools use a wear (damage) value ranging from 0 to 65535. The
value 0 is the default and is used for unworn tools. The values
1 to 65535 are used for worn tools, where a higher value stands for
-a higher wear. Non-tools always have a wear value of 0.
+a higher wear. Non-tools technically also have a wear property,
+but it is always 0. There is also a special 'toolrepair' crafting
+recipe that is only available to tools.
Item formats
------------
@@ -1622,8 +1716,8 @@ Groups
======
In a number of places, there is a group table. Groups define the
-properties of a thing (item, node, armor of entity, capabilities of
-tool) in such a way that the engine and other mods can can interact with
+properties of a thing (item, node, armor of entity, tool capabilities)
+in such a way that the engine and other mods can can interact with
the thing without actually knowing what the thing is.
Usage
@@ -1664,17 +1758,17 @@ Groups of entities
------------------
For entities, groups are, as of now, used only for calculating damage.
-The rating is the percentage of damage caused by tools with this damage group.
+The rating is the percentage of damage caused by items with this damage group.
See [Entity damage mechanism].
object.get_armor_groups() --> a group-rating table (e.g. {fleshy=100})
object.set_armor_groups({fleshy=30, cracky=80})
-Groups of tools
----------------
+Groups of tool capabilities
+---------------------------
-Groups in tools define which groups of nodes and entities they are
-effective towards.
+Groups in tool capabilities define which groups of nodes and entities they
+are effective towards.
Groups in crafting recipes
--------------------------
@@ -1706,7 +1800,7 @@ The asterisk `(*)` after a group name describes that there is no engine
functionality bound to it, and implementation is left up as a suggestion
to games.
-### Node, item and tool groups
+### Node and item groups
* `not_in_creative_inventory`: (*) Special group for inventory mods to indicate
that the item should be hidden in item lists.
@@ -1725,16 +1819,24 @@ to games.
* `3`: the node always gets the digging time 0 seconds (torch)
* `disable_jump`: Player (and possibly other things) cannot jump from node
or if their feet are in the node. Note: not supported for `new_move = false`
-* `fall_damage_add_percent`: damage speed = `speed * (1 + value/100)`
+* `fall_damage_add_percent`: modifies the fall damage suffered when hitting
+ the top of this node. There's also an armor group with the same name.
+ The final player damage is determined by the following formula:
+ damage =
+ collision speed
+ * ((node_fall_damage_add_percent + 100) / 100) -- node group
+ * ((player_fall_damage_add_percent + 100) / 100) -- player armor group
+ - (14) -- constant tolerance
+ Negative damage values are discarded as no damage.
* `falling_node`: if there is no walkable block under the node it will fall
-* `float`: the node will not fall through liquids
+* `float`: the node will not fall through liquids (`liquidtype ~= "none"`)
* `level`: Can be used to give an additional sense of progression in the game.
* A larger level will cause e.g. a weapon of a lower level make much less
damage, and get worn out much faster, or not be able to get drops
from destroyed nodes.
* `0` is something that is directly accessible at the start of gameplay
* There is no upper limit
- * See also: `leveldiff` in [Tools]
+ * See also: `leveldiff` in [Tool Capabilities]
* `slippery`: Players and items will slide on the node.
Slipperiness rises steadily with `slippery` value, starting at 1.
@@ -1745,12 +1847,15 @@ to games.
`"toolrepair"` crafting recipe
-### `ObjectRef` groups
+### `ObjectRef` armor groups
* `immortal`: Skips all damage and breath handling for an object. This group
will also hide the integrated HUD status bars for players. It is
automatically set to all players when damage is disabled on the server and
cannot be reset (subject to change).
+* `fall_damage_add_percent`: Modifies the fall damage suffered by players
+ when they hit the ground. It is analog to the node group with the same
+ name. See the node group above for the exact calculation.
* `punch_operable`: For entities; disables the regular damage mechanism for
players punching it by hand or a non-tool item, so that it can do something
else than take damage.
@@ -1762,8 +1867,8 @@ Known damage and digging time defining groups
* `crumbly`: dirt, sand
* `cracky`: tough but crackable stuff like stone.
-* `snappy`: something that can be cut using fine tools; e.g. leaves, small
- plants, wire, sheets of metal
+* `snappy`: something that can be cut using things like scissors, shears,
+ bolt cutters and the like, e.g. leaves, small plants, wire, sheets of metal
* `choppy`: something that can be cut using force; e.g. trees, wooden planks
* `fleshy`: Living things like animals and the player. This could imply
some blood effects when hitting.
@@ -1772,7 +1877,7 @@ Known damage and digging time defining groups
Can be added to nodes that shouldn't logically be breakable by the
hand but are. Somewhat similar to `dig_immediate`, but times are more
like `{[1]=3.50,[2]=2.00,[3]=0.70}` and this does not override the
- speed of a tool if the tool can dig at a faster speed than this
+ digging speed of an item if it can dig at a faster speed than this
suggests for the hand.
Examples of custom groups
@@ -1798,54 +1903,67 @@ Groups such as `crumbly`, `cracky` and `snappy` are used for this
purpose. Rating is `1`, `2` or `3`. A higher rating for such a group implies
faster digging time.
-The `level` group is used to limit the toughness of nodes a tool can dig
-and to scale the digging times / damage to a greater extent.
+The `level` group is used to limit the toughness of nodes an item capable
+of digging can dig and to scale the digging times / damage to a greater extent.
**Please do understand this**, otherwise you cannot use the system to it's
full potential.
-Tools define their properties by a list of parameters for groups. They
+Items define their properties by a list of parameters for groups. They
cannot dig other groups; thus it is important to use a standard bunch of
-groups to enable interaction with tools.
+groups to enable interaction with items.
-Tools
-=====
+Tool Capabilities
+=================
-Tools definition
-----------------
+'Tool capabilities' is a property of items that defines two things:
-Tools define:
+1) Which nodes it can dig and how fast
+2) Which objects it can hurt by punching and by how much
+
+Tool capabilities are available for all items, not just tools.
+But only tools can receive wear from digging and punching.
+
+Missing or incomplete tool capabilities will default to the
+player's hand.
+
+Tool capabilities definition
+----------------------------
+
+Tool capabilities define:
* Full punch interval
* Maximum drop level
-* For an arbitrary list of groups:
+* For an arbitrary list of node groups:
* Uses (until the tool breaks)
- * Maximum level (usually `0`, `1`, `2` or `3`)
- * Digging times
- * Damage groups
+ * Maximum level (usually `0`, `1`, `2` or `3`)
+ * Digging times
+* Damage groups
+* Punch attack uses (until the tool breaks)
### Full punch interval
-When used as a weapon, the tool will do full damage if this time is spent
-between punches. If e.g. half the time is spent, the tool will do half
+When used as a weapon, the item will do full damage if this time is spent
+between punches. If e.g. half the time is spent, the item will do half
damage.
### Maximum drop level
-Suggests the maximum level of node, when dug with the tool, that will drop
-it's useful item. (e.g. iron ore to drop a lump of iron).
+Suggests the maximum level of node, when dug with the item, that will drop
+its useful item. (e.g. iron ore to drop a lump of iron).
This is not automated; it is the responsibility of the node definition
to implement this.
-### Uses
+### Uses (tools only)
Determines how many uses the tool has when it is used for digging a node,
-of this group, of the maximum level. For lower leveled nodes, the use count
-is multiplied by `3^leveldiff`.
+of this group, of the maximum level. The maximum supported number of
+uses is 65535. The special number 0 is used for infinite uses.
+For lower leveled nodes, the use count is multiplied by `3^leveldiff`.
`leveldiff` is the difference of the tool's `maxlevel` `groupcaps` and the
node's `level` group. The node cannot be dug if `leveldiff` is less than zero.
@@ -1853,9 +1971,11 @@ node's `level` group. The node cannot be dug if `leveldiff` is less than zero.
* `uses=10, leveldiff=1`: actual uses: 30
* `uses=10, leveldiff=2`: actual uses: 90
+For non-tools, this has no effect.
+
### Maximum level
-Tells what is the maximum level of a node of this group that the tool will
+Tells what is the maximum level of a node of this group that the item will
be able to dig.
### Digging times
@@ -1864,7 +1984,7 @@ List of digging times for different ratings of the group, for nodes of the
maximum level.
For example, as a Lua table, `times={2=2.00, 3=0.70}`. This would
-result in the tool to be able to dig nodes that have a rating of `2` or `3`
+result in the item to be able to dig nodes that have a rating of `2` or `3`
for this group, and unable to dig the rating `1`, which is the toughest.
Unless there is a matching group that enables digging otherwise.
@@ -1876,8 +1996,19 @@ i.e. players can more quickly click the nodes away instead of holding LMB.
List of damage for groups of entities. See [Entity damage mechanism].
-Example definition of the capabilities of a tool
-------------------------------------------------
+### Punch attack uses (tools only)
+
+Determines how many uses (before breaking) the tool has when dealing damage
+to an object, when the full punch interval (see above) was always
+waited out fully.
+
+Wear received by the tool is proportional to the time spent, scaled by
+the full punch interval.
+
+For non-tools, this has no effect.
+
+Example definition of the capabilities of an item
+-------------------------------------------------
tool_capabilities = {
full_punch_interval=1.5,
@@ -1888,7 +2019,7 @@ Example definition of the capabilities of a tool
damage_groups = {fleshy=2},
}
-This makes the tool be able to dig nodes that fulfil both of these:
+This makes the item capable of digging nodes that fulfil both of these:
* Have the `crumbly` group
* Have a `level` group less or equal to `2`
@@ -1992,8 +2123,12 @@ Node metadata contains two things:
Some of the values in the key-value store are handled specially:
-* `formspec`: Defines a right-click inventory menu. See [Formspec].
-* `infotext`: Text shown on the screen when the node is pointed at
+* `formspec`: Defines an inventory menu that is opened with the
+ 'place/use' key. Only works if no `on_rightclick` was
+ defined for the node. See also [Formspec].
+* `infotext`: Text shown on the screen when the node is pointed at.
+ Line-breaks will be applied automatically.
+ If the infotext is very long, it will be truncated.
Example:
@@ -2046,6 +2181,21 @@ Example:
meta:set_string("key", "value")
print(dump(meta:to_table()))
+Example manipulations of "description" and expected output behaviors:
+
+ print(ItemStack("default:pick_steel"):get_description()) --> Steel Pickaxe
+ print(ItemStack("foobar"):get_description()) --> Unknown Item
+
+ local stack = ItemStack("default:stone")
+ stack:get_meta():set_string("description", "Custom description\nAnother line")
+ print(stack:get_description()) --> Custom description\nAnother line
+ print(stack:get_short_description()) --> Custom description
+
+ stack:get_meta():set_string("short_description", "Short")
+ print(stack:get_description()) --> Custom description\nAnother line
+ print(stack:get_short_description()) --> Short
+
+ print(ItemStack("mod:item_with_no_desc"):get_description()) --> mod:item_with_no_desc
@@ -2121,18 +2271,20 @@ Examples
Version History
---------------
-* FORMSPEC VERSION 1:
+* Formspec version 1 (pre-5.1.0):
* (too much)
-* FORMSPEC VERSION 2:
+* Formspec version 2 (5.1.0):
* Forced real coordinates
* background9[]: 9-slice scaling parameters
-* FORMSPEC VERSION 3:
+* Formspec version 3 (5.2.0):
* Formspec elements are drawn in the order of definition
* bgcolor[]: use 3 parameters (bgcolor, formspec (now an enum), fbgcolor)
* box[] and image[] elements enable clipping by default
* new element: scroll_container[]
-* FORMSPEC VERSION 4:
+* Formspec version 4 (5.4.0):
* Allow dropdown indexing events
+* Formspec version 5 (5.5.0):
+ * Added padding[] element
Elements
--------
@@ -2176,9 +2328,20 @@ Elements
* `position` and `anchor` elements need suitable values to avoid a formspec
extending off the game window due to particular game window sizes.
-### `no_prepend[]`
+### `padding[<X>,<Y>]`
* Must be used after the `size`, `position`, and `anchor` elements (if present).
+* Defines how much space is padded around the formspec if the formspec tries to
+ increase past the size of the screen and coordinates have to be shrunk.
+* For X and Y, 0.0 represents no padding (the formspec can touch the edge of the
+ screen), and 0.5 represents half the screen (which forces the coordinate size
+ to 0). If negative, the formspec can extend off the edge of the screen.
+* Defaults to [0.05, 0.05].
+
+### `no_prepend[]`
+
+* Must be used after the `size`, `position`, `anchor`, and `padding` elements
+ (if present).
* Disables player:set_formspec_prepend() from applying to this formspec.
### `real_coordinates[<bool>]`
@@ -2299,7 +2462,7 @@ Elements
* `frame duration`: Milliseconds between each frame. `0` means the frames don't advance.
* `frame start` (Optional): The index of the frame to start on. Default `1`.
-### `model[<X>,<Y>;<W>,<H>;<name>;<mesh>;<textures>;<rotation X,Y>;<continuous>;<mouse control>;<frame loop range>]`
+### `model[<X>,<Y>;<W>,<H>;<name>;<mesh>;<textures>;<rotation X,Y>;<continuous>;<mouse control>;<frame loop range>;<animation speed>]`
* Show a mesh model.
* `name`: Element name that can be used for styling
@@ -2313,6 +2476,7 @@ Elements
* `frame loop range` (Optional): Range of the animation frames.
* Defaults to the full range of all available frames.
* Syntax: `<begin>,<end>`
+* `animation speed` (Optional): Sets the animation speed. Default 0 FPS.
### `item_image[<X>,<Y>;<W>,<H>;<item name>]`
@@ -2678,7 +2842,7 @@ Elements
* `span=<value>`: number of following columns to affect
(default: infinite).
-### `style[<selector 1>,<selector 2>;<prop1>;<prop2>;...]`
+### `style[<selector 1>,<selector 2>,...;<prop1>;<prop2>;...]`
* Set the style for the element(s) matching `selector` by name.
* `selector` can be one of:
@@ -2691,7 +2855,7 @@ Elements
* See [Styling Formspecs].
-### `style_type[<selector 1>,<selector 2>;<prop1>;<prop2>;...]`
+### `style_type[<selector 1>,<selector 2>,...;<prop1>;<prop2>;...]`
* Set the style for the element(s) matching `selector` by type.
* `selector` can be one of:
@@ -2764,10 +2928,10 @@ Styling Formspecs
Formspec elements can be themed using the style elements:
- style[<name 1>,<name 2>;<prop1>;<prop2>;...]
- style[<name 1>:<state>,<name 2>:<state>;<prop1>;<prop2>;...]
- style_type[<type 1>,<type 2>;<prop1>;<prop2>;...]
- style_type[<type 1>:<state>,<type 2>:<state>;<prop1>;<prop2>;...]
+ style[<name 1>,<name 2>,...;<prop1>;<prop2>;...]
+ style[<name 1>:<state>,<name 2>:<state>,...;<prop1>;<prop2>;...]
+ style_type[<type 1>,<type 2>,...;<prop1>;<prop2>;...]
+ style_type[<type 1>:<state>,<type 2>:<state>,...;<prop1>;<prop2>;...]
Where a prop is:
@@ -2942,6 +3106,9 @@ Some tags can enclose text, they open with `<tagname>` and close with `</tagname
Tags can have attributes, in that case, attributes are in the opening tag in
form of a key/value separated with equal signs. Attribute values should not be quoted.
+If you want to insert a literal greater-than sign or a backslash into the text,
+you must escape it by preceding it with a backslash.
+
These are the technically basic tags but see below for usual tags. Base tags are:
`<style color=... font=... size=...>...</style>`
@@ -3077,9 +3244,8 @@ Colors
Named colors are also supported and are equivalent to
[CSS Color Module Level 4](http://dev.w3.org/csswg/css-color/#named-colors).
-To specify the value of the alpha channel, append `#AA` to the end of the color
-name (e.g. `colorname#08`). For named colors the hexadecimal string
-representing the alpha value must (always) be two hexadecimal digits.
+To specify the value of the alpha channel, append `#A` or `#AA` to the end of
+the color name (e.g. `colorname#08`).
`ColorSpec`
-----------
@@ -3134,29 +3300,63 @@ no particular point.
Internally, it is implemented as a table with the 3 fields
`x`, `y` and `z`. Example: `{x = 0, y = 1, z = 0}`.
+However, one should *never* create a vector manually as above, such misbehavior
+is deprecated. The vector helpers set a metatable for the created vectors which
+allows indexing with numbers, calling functions directly on vectors and using
+operators (like `+`). Furthermore, the internal implementation might change in
+the future.
+Old code might still use vectors without metatables, be aware of this!
+
+All these forms of addressing a vector `v` are valid:
+`v[1]`, `v[3]`, `v.x`, `v[1] = 42`, `v.y = 13`
+
+Where `v` is a vector and `foo` stands for any function name, `v:foo(...)` does
+the same as `vector.foo(v, ...)`, apart from deprecated functionality.
+
+The metatable that is used for vectors can be accessed via `vector.metatable`.
+Do not modify it!
+
+All `vector.*` functions allow vectors `{x = X, y = Y, z = Z}` without metatables.
+Returned vectors always have a metatable set.
For the following functions, `v`, `v1`, `v2` are vectors,
`p1`, `p2` are positions,
-`s` is a scalar (a number):
-
-* `vector.new(a[, b, c])`:
- * Returns a vector.
- * A copy of `a` if `a` is a vector.
- * `{x = a, y = b, z = c}`, if all of `a`, `b`, `c` are defined numbers.
+`s` is a scalar (a number),
+vectors are written like this: `(x, y, z)`:
+
+* `vector.new([a[, b, c]])`:
+ * Returns a new vector `(a, b, c)`.
+ * Deprecated: `vector.new()` does the same as `vector.zero()` and
+ `vector.new(v)` does the same as `vector.copy(v)`
+* `vector.zero()`:
+ * Returns a new vector `(0, 0, 0)`.
+* `vector.copy(v)`:
+ * Returns a copy of the vector `v`.
+* `vector.from_string(s[, init])`:
+ * Returns `v, np`, where `v` is a vector read from the given string `s` and
+ `np` is the next position in the string after the vector.
+ * Returns `nil` on failure.
+ * `s`: Has to begin with a substring of the form `"(x, y, z)"`. Additional
+ spaces, leaving away commas and adding an additional comma to the end
+ is allowed.
+ * `init`: If given starts looking for the vector at this string index.
+* `vector.to_string(v)`:
+ * Returns a string of the form `"(x, y, z)"`.
* `vector.direction(p1, p2)`:
* Returns a vector of length 1 with direction `p1` to `p2`.
- * If `p1` and `p2` are identical, returns `{x = 0, y = 0, z = 0}`.
+ * If `p1` and `p2` are identical, returns `(0, 0, 0)`.
* `vector.distance(p1, p2)`:
* Returns zero or a positive number, the distance between `p1` and `p2`.
* `vector.length(v)`:
* Returns zero or a positive number, the length of vector `v`.
* `vector.normalize(v)`:
* Returns a vector of length 1 with direction of vector `v`.
- * If `v` has zero length, returns `{x = 0, y = 0, z = 0}`.
+ * If `v` has zero length, returns `(0, 0, 0)`.
* `vector.floor(v)`:
* Returns a vector, each dimension rounded down.
* `vector.round(v)`:
* Returns a vector, each dimension rounded to nearest integer.
+ * At a multiple of 0.5, rounds away from zero.
* `vector.apply(v, func)`:
* Returns a vector where the function `func` has been applied to each
component.
@@ -3171,7 +3371,11 @@ For the following functions, `v`, `v1`, `v2` are vectors,
* `vector.cross(v1, v2)`:
* Returns the cross product of `v1` and `v2`.
* `vector.offset(v, x, y, z)`:
- * Returns the sum of the vectors `v` and `{x = x, y = y, z = z}`.
+ * Returns the sum of the vectors `v` and `(x, y, z)`.
+* `vector.check()`:
+ * Returns a boolean value indicating whether `v` is a real vector, eg. created
+ by a `vector.*` function.
+ * Returns `false` for anything else, including tables like `{x=3,y=1,z=4}`.
For the following functions `x` can be either a vector or a number:
@@ -3190,14 +3394,30 @@ For the following functions `x` can be either a vector or a number:
* Returns a scaled vector.
* Deprecated: If `s` is a vector: Returns the Schur quotient.
+Operators can be used if all of the involved vectors have metatables:
+* `v1 == v2`:
+ * Returns whether `v1` and `v2` are identical.
+* `-v`:
+ * Returns the additive inverse of v.
+* `v1 + v2`:
+ * Returns the sum of both vectors.
+ * Note: `+` can not be used together with scalars.
+* `v1 - v2`:
+ * Returns the difference of `v1` subtracted by `v2`.
+ * Note: `-` can not be used together with scalars.
+* `v * s` or `s * v`:
+ * Returns `v` scaled by `s`.
+* `v / s`:
+ * Returns `v` scaled by `1 / s`.
+
For the following functions `a` is an angle in radians and `r` is a rotation
vector ({x = <pitch>, y = <yaw>, z = <roll>}) where pitch, yaw and roll are
angles in radians.
* `vector.rotate(v, r)`:
* Applies the rotation `r` to `v` and returns the result.
- * `vector.rotate({x = 0, y = 0, z = 1}, r)` and
- `vector.rotate({x = 0, y = 1, z = 0}, r)` return vectors pointing
+ * `vector.rotate(vector.new(0, 0, 1), r)` and
+ `vector.rotate(vector.new(0, 1, 0), r)` return vectors pointing
forward and up relative to an entity's rotation `r`.
* `vector.rotate_around_axis(v1, v2, a)`:
* Returns `v1` rotated around axis `v2` by `a` radians according to
@@ -3231,6 +3451,8 @@ Helper functions
* If the absolute value of `x` is within the `tolerance` or `x` is NaN,
`0` is returned.
* `math.factorial(x)`: returns the factorial of `x`
+* `math.round(x)`: Returns `x` rounded to the nearest integer.
+ * At a multiple of 0.5, rounds away from zero.
* `string.split(str, separator, include_empty, max_splits, sep_is_pattern)`
* `separator`: string, default: `","`
* `include_empty`: boolean, default: `false`
@@ -3268,7 +3490,6 @@ Helper functions
* returns true when the passed number represents NaN.
* `minetest.get_us_time()`
* returns time with microsecond precision. May not return wall time.
- * This value might overflow on certain 32-bit systems!
* `table.copy(table)`: returns a table
* returns a deep copy of `table`
* `table.indexof(list, val)`: returns the smallest numerical index containing
@@ -3291,25 +3512,27 @@ Helper functions
* `minetest.pointed_thing_to_face_pos(placer, pointed_thing)`: returns a
position.
* returns the exact position on the surface of a pointed node
-* `minetest.get_dig_params(groups, tool_capabilities)`: Simulates a tool
- that digs a node.
+* `minetest.get_dig_params(groups, tool_capabilities [, wear])`:
+ Simulates an item that digs a node.
Returns a table with the following fields:
* `diggable`: `true` if node can be dug, `false` otherwise.
* `time`: Time it would take to dig the node.
- * `wear`: How much wear would be added to the tool.
+ * `wear`: How much wear would be added to the tool (ignored for non-tools).
`time` and `wear` are meaningless if node's not diggable
Parameters:
* `groups`: Table of the node groups of the node that would be dug
- * `tool_capabilities`: Tool capabilities table of the tool
-* `minetest.get_hit_params(groups, tool_capabilities [, time_from_last_punch])`:
+ * `tool_capabilities`: Tool capabilities table of the item
+ * `wear`: Amount of wear the tool starts with (default: 0)
+* `minetest.get_hit_params(groups, tool_capabilities [, time_from_last_punch [, wear]])`:
Simulates an item that punches an object.
Returns a table with the following fields:
- * `hp`: How much damage the punch would cause.
- * `wear`: How much wear would be added to the tool.
+ * `hp`: How much damage the punch would cause (between -65535 and 65535).
+ * `wear`: How much wear would be added to the tool (ignored for non-tools).
Parameters:
* `groups`: Damage groups of the object
* `tool_capabilities`: Tool capabilities table of the item
* `time_from_last_punch`: time in seconds since last punch action
+ * `wear`: Amount of wear the item starts with (default: 0)
@@ -3509,7 +3732,7 @@ A whole number, 1 or more.
Each additional octave adds finer detail to the noise but also increases the
noise calculation load.
3 is a typical minimum for a high quality, complex and natural-looking noise
-variation. 1 octave has a slight 'gridlike' appearence.
+variation. 1 octave has a slight 'gridlike' appearance.
Choose the number of octaves according to the `spread` and `lacunarity`, and the
size of the finest detail you require. For example:
@@ -3584,7 +3807,7 @@ For 2D or 3D perlin noise or perlin noise maps:
spread = {x = 500, y = 500, z = 500},
seed = 571347,
octaves = 5,
- persist = 0.63,
+ persistence = 0.63,
lacunarity = 2.0,
flags = "defaults, absvalue",
}
@@ -3674,7 +3897,7 @@ The following is a decent set of parameters to work from:
spread = {x=200, y=200, z=200},
seed = 5390,
octaves = 4,
- persist = 0.5,
+ persistence = 0.5,
lacunarity = 2.0,
flags = "eased",
},
@@ -3980,7 +4203,7 @@ differences:
### Other API functions operating on a VoxelManip
-If any VoxelManip contents were set to a liquid node,
+If any VoxelManip contents were set to a liquid node (`liquidtype ~= "none"`),
`VoxelManip:update_liquids()` must be called for these liquid nodes to begin
flowing. It is recommended to call this function only after having written all
buffered data back to the VoxelManip object, save for special situations where
@@ -4231,7 +4454,7 @@ Callbacks:
* `puncher`: an `ObjectRef` (can be `nil`)
* `time_from_last_punch`: Meant for disallowing spamming of clicks
(can be `nil`).
- * `tool_capabilities`: capability table of used tool (can be `nil`)
+ * `tool_capabilities`: capability table of used item (can be `nil`)
* `dir`: unit vector of direction of punch. Always defined. Points from the
puncher to the punched.
* `damage`: damage that will be done to entity.
@@ -4240,6 +4463,9 @@ Callbacks:
* Called when the object dies.
* `killer`: an `ObjectRef` (can be `nil`)
* `on_rightclick(self, clicker)`
+ * Called when `clicker` pressed the 'place/use' key while pointing
+ to the object (not neccessarily an actual rightclick)
+ * `clicker`: an `ObjectRef` (may or may not be a player)
* `on_attach_child(self, child)`
* `child`: an `ObjectRef` of the child that attaches
* `on_detach_child(self, child)`
@@ -4392,6 +4618,13 @@ Utilities
direct_velocity_on_players = true,
-- nodedef's use_texture_alpha accepts new string modes (5.4.0)
use_texture_alpha_string_modes = true,
+ -- degrotate param2 rotates in units of 1.5° instead of 2°
+ -- thus changing the range of values from 0-179 to 0-240 (5.5.0)
+ degrotate_240_steps = true,
+ -- ABM supports min_y and max_y fields in definition (5.5.0)
+ abm_min_max_y = true,
+ -- dynamic_add_media supports passing a table with options (5.5.0)
+ dynamic_add_media_table = true,
}
* `minetest.has_feature(arg)`: returns `boolean, missing_features`
@@ -4427,6 +4660,19 @@ Utilities
* `minetest.mkdir(path)`: returns success.
* Creates a directory specified by `path`, creating parent directories
if they don't exist.
+* `minetest.rmdir(path, recursive)`: returns success.
+ * Removes a directory specified by `path`.
+ * If `recursive` is set to `true`, the directory is recursively removed.
+ Otherwise, the directory will only be removed if it is empty.
+ * Returns true on success, false on failure.
+* `minetest.cpdir(source, destination)`: returns success.
+ * Copies a directory specified by `path` to `destination`
+ * Any files in `destination` will be overwritten if they already exist.
+ * Returns true on success, false on failure.
+* `minetest.mvdir(source, destination)`: returns success.
+ * Moves a directory specified by `path` to `destination`.
+ * If the `destination` is a non-empty directory, then the move will fail.
+ * Returns true on success, false on failure.
* `minetest.get_dir_list(path, [is_dir])`: returns list of entry names
* is_dir is one of:
* nil: return all entries,
@@ -4451,6 +4697,26 @@ Utilities
* `minetest.sha1(data, [raw])`: returns the sha1 hash of data
* `data`: string of data to hash
* `raw`: return raw bytes instead of hex digits, default: false
+* `minetest.colorspec_to_colorstring(colorspec)`: Converts a ColorSpec to a
+ ColorString. If the ColorSpec is invalid, returns `nil`.
+ * `colorspec`: The ColorSpec to convert
+* `minetest.colorspec_to_bytes(colorspec)`: Converts a ColorSpec to a raw
+ string of four bytes in an RGBA layout, returned as a string.
+ * `colorspec`: The ColorSpec to convert
+* `minetest.encode_png(width, height, data, [compression])`: Encode a PNG
+ image and return it in string form.
+ * `width`: Width of the image
+ * `height`: Height of the image
+ * `data`: Image data, one of:
+ * array table of ColorSpec, length must be width*height
+ * string with raw RGBA pixels, length must be width*height*4
+ * `compression`: Optional zlib compression level, number in range 0 to 9.
+ The data is one-dimensional, starting in the upper left corner of the image
+ and laid out in scanlines going from left to right, then top to bottom.
+ Please note that it's not safe to use string.char to generate raw data,
+ use `colorspec_to_bytes` to generate raw RGBA values in a predictable way.
+ The resulting PNG image is always 32-bit. Palettes are not supported at the moment.
+ You may use this to procedurally generate textures during server init.
Logging
-------
@@ -4595,15 +4861,16 @@ Call these functions only at load time!
* `hitter`: ObjectRef - Player that hit
* `time_from_last_punch`: Meant for disallowing spamming of clicks
(can be nil).
- * `tool_capabilities`: Capability table of used tool (can be nil)
+ * `tool_capabilities`: Capability table of used item (can be nil)
* `dir`: Unit vector of direction of punch. Always defined. Points from
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_rightclickplayer(function(player, clicker))`
- * Called when a player is right-clicked
- * `player`: ObjectRef - Player that was right-clicked
- * `clicker`: ObjectRef - Object that right-clicked, may or may not be a player
+ * Called when the 'place/use' key was used while pointing a player
+ (not neccessarily an actual rightclick)
+ * `player`: ObjectRef - Player that is acted upon
+ * `clicker`: ObjectRef - Object that acted upon `player`, may or may not be a player
* `minetest.register_on_player_hpchange(function(player, hp_change, reason), modifier)`
* Called when the player gets damaged or healed
* `player`: ObjectRef of the player
@@ -4759,6 +5026,12 @@ Call these functions only at load time!
* Called when an incoming mod channel message is received
* You should have joined some channels to receive events.
* If message comes from a server mod, `sender` field is an empty string.
+* `minetest.register_on_liquid_transformed(function(pos_list, node_list))`
+ * Called after liquid nodes (`liquidtype ~= "none"`) are modified by the
+ engine's liquid transformation process.
+ * `pos_list` is an array of all modified positions.
+ * `node_list` is an array of the old node that was previously at the position
+ with the corresponding index in pos_list.
Setting-related
---------------
@@ -4895,7 +5168,7 @@ Environment access
* Punch node with the same effects that a player would cause
* `minetest.spawn_falling_node(pos)`
* Change node into falling node
- * Returns `true` if successful, `false` on failure
+ * Returns `true` and the ObjectRef of the spawned entity if successful, `false` on failure
* `minetest.find_nodes_with_meta(pos1, pos2)`
* Get a table of positions of nodes that have metadata within a region
@@ -5097,7 +5370,8 @@ Environment access
* `pos1`: start of the ray
* `pos2`: end of the ray
* `objects`: if false, only nodes will be returned. Default is `true`.
- * `liquids`: if false, liquid nodes won't be returned. Default is `false`.
+ * `liquids`: if false, liquid nodes (`liquidtype ~= "none"`) won't be
+ returned. Default is `false`.
* `minetest.find_path(pos1,pos2,searchdistance,max_jump,max_drop,algorithm)`
* returns table containing path that can be walked on
* returns a table of 3D points representing a path from `pos1` to `pos2` or
@@ -5121,7 +5395,7 @@ Environment access
* `minetest.spawn_tree (pos, {treedef})`
* spawns L-system tree at given `pos` with definition in `treedef` table
* `minetest.transforming_liquid_add(pos)`
- * add node to liquid update queue
+ * add node to liquid flow update queue
* `minetest.get_node_max_level(pos)`
* get max available level for leveled node
* `minetest.get_node_level(pos)`
@@ -5199,7 +5473,7 @@ Inventory
* `minetest.remove_detached_inventory(name)`
* Returns a `boolean` indicating whether the removal succeeded.
* `minetest.do_item_eat(hp_change, replace_with_item, itemstack, user, pointed_thing)`:
- returns left over ItemStack.
+ returns leftover ItemStack or nil to indicate no inventory change
* See `minetest.item_eat` and `minetest.register_on_item_eat`
Formspec
@@ -5279,9 +5553,9 @@ Item handling
information.
* `minetest.get_node_drops(node, toolname)`
* Returns list of itemstrings that are dropped by `node` when dug
- with `toolname`.
+ with the item `toolname` (not limited to tools).
* `node`: node as table or node name
- * `toolname`: name of the tool item (can be `nil`)
+ * `toolname`: name of the item used to dig (can be `nil`)
* `minetest.get_craft_result(input)`: returns `output, decremented_input`
* `input.method` = `"normal"` or `"cooking"` or `"fuel"`
* `input.width` = for example `3`
@@ -5442,6 +5716,8 @@ Server
a player joined.
* This function may be overwritten by mods to customize the status message.
* `minetest.get_server_uptime()`: returns the server uptime in seconds
+* `minetest.get_server_max_lag()`: returns the current maximum lag
+ of the server in seconds or nil if server is not fully loaded yet
* `minetest.remove_player(name)`: remove player from database (if they are not
connected).
* As auth data is not removed, minetest.player_exists will continue to
@@ -5450,22 +5726,33 @@ Server
* Returns a code (0: successful, 1: no such player, 2: player is connected)
* `minetest.remove_player_auth(name)`: remove player authentication data
* Returns boolean indicating success (false if player nonexistant)
-* `minetest.dynamic_add_media(filepath, callback)`
- * `filepath`: path to a media file on the filesystem
- * `callback`: function with arguments `name`, where name is a player name
- (previously there was no callback argument; omitting it is deprecated)
- * Adds the file to the media sent to clients by the server on startup
- and also pushes this file to already connected clients.
- The file must be a supported image, sound or model format. It must not be
- modified, deleted, moved or renamed after calling this function.
- The list of dynamically added media is not persisted.
+* `minetest.dynamic_add_media(options, callback)`
+ * `options`: table containing the following parameters
+ * `filepath`: path to a media file on the filesystem
+ * `to_player`: name of the player the media should be sent to instead of
+ all players (optional)
+ * `ephemeral`: boolean that marks the media as ephemeral,
+ it will not be cached on the client (optional, default false)
+ * `callback`: function with arguments `name`, which is a player name
+ * Pushes the specified media file to client(s). (details below)
+ The file must be a supported image, sound or model format.
+ Dynamically added media is not persisted between server restarts.
* Returns false on error, true if the request was accepted
* The given callback will be called for every player as soon as the
media is available on the client.
- Old clients that lack support for this feature will not see the media
- unless they reconnect to the server. (callback won't be called)
- * Since media transferred this way currently does not use client caching
- or HTTP transfers, dynamic media should not be used with big files.
+ * Details/Notes:
+ * If `ephemeral`=false and `to_player` is unset the file is added to the media
+ sent to clients on startup, this means the media will appear even on
+ old clients if they rejoin the server.
+ * If `ephemeral`=false the file must not be modified, deleted, moved or
+ renamed after calling this function.
+ * Regardless of any use of `ephemeral`, adding media files with the same
+ name twice is not possible/guaranteed to work. An exception to this is the
+ use of `to_player` to send the same, already existent file to multiple
+ chosen players.
+ * Clients will attempt to fetch files added this way via remote media,
+ this can make transfer of bigger files painless (if set up). Nevertheless
+ it is advised not to use dynamic media for big media files.
Bans
----
@@ -5480,6 +5767,10 @@ Bans
* `minetest.kick_player(name, [reason])`: disconnect a player with an optional
reason.
* Returns boolean indicating success (false if player nonexistant)
+* `minetest.disconnect_player(name, [reason])`: disconnect a player with an
+ optional reason, this will not prefix with 'Kicked: ' like kick_player.
+ If no reason is given, it will default to 'Disconnected.'
+ * Returns boolean indicating success (false if player nonexistant)
Particles
---------
@@ -5721,7 +6012,9 @@ Misc.
* Example: `minetest.rgba(10, 20, 30, 40)`, returns `"#0A141E28"`
* `minetest.encode_base64(string)`: returns string encoded in base64
* Encodes a string in base64.
-* `minetest.decode_base64(string)`: returns string or nil for invalid base64
+* `minetest.decode_base64(string)`: returns string or nil on failure
+ * Padding characters are only supported starting at version 5.4.0, where
+ 5.5.0 and newer perform proper checks.
* Decodes a string encoded in base64.
* `minetest.is_protected(pos, name)`: returns boolean
* Returning `true` restricts the player `name` from modifying (i.e. digging,
@@ -5809,6 +6102,19 @@ Misc.
* If `transient` is `false` or absent, frees a persistent forceload.
If `true`, frees a transient forceload.
+* `minetest.compare_block_status(pos, condition)`
+ * Checks whether the mapblock at positition `pos` is in the wanted condition.
+ * `condition` may be one of the following values:
+ * `"unknown"`: not in memory
+ * `"emerging"`: in the queue for loading from disk or generating
+ * `"loaded"`: in memory but inactive (no ABMs are executed)
+ * `"active"`: in memory and active
+ * Other values are reserved for future functionality extensions
+ * Return value, the comparison status:
+ * `false`: Mapblock does not fulfil the wanted condition
+ * `true`: Mapblock meets the requirement
+ * `nil`: Unsupported `condition` value
+
* `minetest.request_insecure_environment()`: returns an environment containing
insecure functions if the calling mod has been listed as trusted in the
`secure.trusted_mods` setting or security is disabled, otherwise returns
@@ -6068,7 +6374,7 @@ an itemstring, a table or `nil`.
* `get_tool_capabilities()`: returns the digging properties of the item,
or those of the hand if none are defined for this item type
* `add_wear(amount)`
- * Increases wear by `amount` if the item is a tool
+ * Increases wear by `amount` if the item is a tool, otherwise does nothing
* `amount`: number, integer
* `add_item(item)`: returns leftover `ItemStack`
* Put some item or stack onto this stack
@@ -6262,6 +6568,8 @@ object you are working with still exists.
Default `{x=0, y=0, z=0}`
* `forced_visible`: Boolean to control whether the attached entity
should appear in first person. Default `false`.
+ * This command may fail silently (do nothing) when it would result
+ in circular attachments.
* `get_attach()`: returns parent, bone, position, rotation, forced_visible,
or nil if it isn't attached.
* `get_children()`: returns a list of ObjectRefs that are attached to the
@@ -6393,6 +6701,7 @@ object you are working with still exists.
* `set_inventory_formspec(formspec)`
* Redefine player's inventory form
* Should usually be called in `on_joinplayer`
+ * If `formspec` is `""`, the player's inventory is disabled.
* `get_inventory_formspec()`: returns a formspec string
* `set_formspec_prepend(formspec)`:
* the formspec string will be added to every formspec shown to the user,
@@ -6407,18 +6716,21 @@ object you are working with still exists.
`aux1`, `sneak`, `dig`, `place`, `LMB`, `RMB`, and `zoom`.
* The fields `LMB` and `RMB` are equal to `dig` and `place` respectively,
and exist only to preserve backwards compatibility.
+ * Returns an empty table `{}` if the object is not a player.
* `get_player_control_bits()`: returns integer with bit packed player pressed
- keys. Bits:
- * 0 - up
- * 1 - down
- * 2 - left
- * 3 - right
- * 4 - jump
- * 5 - aux1
- * 6 - sneak
- * 7 - dig
- * 8 - place
- * 9 - zoom
+ keys.
+ * Bits:
+ * 0 - up
+ * 1 - down
+ * 2 - left
+ * 3 - right
+ * 4 - jump
+ * 5 - aux1
+ * 6 - sneak
+ * 7 - dig
+ * 8 - place
+ * 9 - zoom
+ * Returns `0` (no bits set) if the object is not a player.
* `set_physics_override(override_table)`
* `override_table` is a table with the following fields:
* `speed`: multiplier to default walking speed value (default: `1`)
@@ -6487,43 +6799,46 @@ object you are working with still exists.
* `set_sky(sky_parameters)`
* The presence of the function `set_sun`, `set_moon` or `set_stars` indicates
whether `set_sky` accepts this format. Check the legacy format otherwise.
+ * Passing no arguments resets the sky to its default values.
* `sky_parameters` is a table with the following optional fields:
* `base_color`: ColorSpec, changes fog in "skybox" and "plain".
+ (default: `#ffffff`)
* `type`: Available types:
* `"regular"`: Uses 0 textures, `base_color` ignored
* `"skybox"`: Uses 6 textures, `base_color` used as fog.
* `"plain"`: Uses 0 textures, `base_color` used as both fog and sky.
+ (default: `"regular"`)
* `textures`: A table containing up to six textures in the following
order: Y+ (top), Y- (bottom), X- (west), X+ (east), Z+ (north), Z- (south).
* `clouds`: Boolean for whether clouds appear. (default: `true`)
- * `sky_color`: A table containing the following values, alpha is ignored:
- * `day_sky`: ColorSpec, for the top half of the `"regular"`
- sky during the day. (default: `#8cbafa`)
- * `day_horizon`: ColorSpec, for the bottom half of the
- `"regular"` sky during the day. (default: `#9bc1f0`)
- * `dawn_sky`: ColorSpec, for the top half of the `"regular"`
- sky during dawn/sunset. (default: `#b4bafa`)
+ * `sky_color`: A table used in `"regular"` type only, containing the
+ following values (alpha is ignored):
+ * `day_sky`: ColorSpec, for the top half of the sky during the day.
+ (default: `#61b5f5`)
+ * `day_horizon`: ColorSpec, for the bottom half of the sky during the day.
+ (default: `#90d3f6`)
+ * `dawn_sky`: ColorSpec, for the top half of the sky during dawn/sunset.
+ (default: `#b4bafa`)
The resulting sky color will be a darkened version of the ColorSpec.
Warning: The darkening of the ColorSpec is subject to change.
- * `dawn_horizon`: ColorSpec, for the bottom half of the `"regular"`
- sky during dawn/sunset. (default: `#bac1f0`)
+ * `dawn_horizon`: ColorSpec, for the bottom half of the sky during dawn/sunset.
+ (default: `#bac1f0`)
The resulting sky color will be a darkened version of the ColorSpec.
Warning: The darkening of the ColorSpec is subject to change.
- * `night_sky`: ColorSpec, for the top half of the `"regular"`
- sky during the night. (default: `#006aff`)
+ * `night_sky`: ColorSpec, for the top half of the sky during the night.
+ (default: `#006bff`)
The resulting sky color will be a dark version of the ColorSpec.
Warning: The darkening of the ColorSpec is subject to change.
- * `night_horizon`: ColorSpec, for the bottom half of the `"regular"`
- sky during the night. (default: `#4090ff`)
+ * `night_horizon`: ColorSpec, for the bottom half of the sky during the night.
+ (default: `#4090ff`)
The resulting sky color will be a dark version of the ColorSpec.
Warning: The darkening of the ColorSpec is subject to change.
- * `indoors`: ColorSpec, for when you're either indoors or
- underground. Only applies to the `"regular"` sky.
+ * `indoors`: ColorSpec, for when you're either indoors or underground.
(default: `#646464`)
* `fog_sun_tint`: ColorSpec, changes the fog tinting for the sun
- at sunrise and sunset.
+ at sunrise and sunset. (default: `#f47d1d`)
* `fog_moon_tint`: ColorSpec, changes the fog tinting for the moon
- at sunrise and sunset.
+ at sunrise and sunset. (default: `#7f99cc`)
* `fog_tint_type`: string, changes which mode the directional fog
abides by, `"custom"` uses `sun_tint` and `moon_tint`, while
`"default"` uses the classic Minetest sun and moon tinting.
@@ -6541,11 +6856,12 @@ object you are working with still exists.
* `get_sky_color()`: returns a table with the `sky_color` parameters as in
`set_sky`.
* `set_sun(sun_parameters)`:
+ * Passing no arguments resets the sun to its default values.
* `sun_parameters` is a table with the following optional fields:
* `visible`: Boolean for whether the sun is visible.
(default: `true`)
* `texture`: A regular texture for the sun. Setting to `""`
- will re-enable the mesh sun. (default: `"sun.png"`)
+ will re-enable the mesh sun. (default: "sun.png", if it exists)
* `tonemap`: A 512x1 texture containing the tonemap for the sun
(default: `"sun_tonemap.png"`)
* `sunrise`: A regular texture for the sunrise texture.
@@ -6556,17 +6872,19 @@ object you are working with still exists.
* `get_sun()`: returns a table with the current sun parameters as in
`set_sun`.
* `set_moon(moon_parameters)`:
+ * Passing no arguments resets the moon to its default values.
* `moon_parameters` is a table with the following optional fields:
* `visible`: Boolean for whether the moon is visible.
(default: `true`)
* `texture`: A regular texture for the moon. Setting to `""`
- will re-enable the mesh moon. (default: `"moon.png"`)
+ will re-enable the mesh moon. (default: "moon.png", if it exists)
* `tonemap`: A 512x1 texture containing the tonemap for the moon
(default: `"moon_tonemap.png"`)
* `scale`: Float controlling the overall size of the moon (default: `1`)
* `get_moon()`: returns a table with the current moon parameters as in
`set_moon`.
* `set_stars(star_parameters)`:
+ * Passing no arguments resets stars to their default values.
* `star_parameters` is a table with the following optional fields:
* `visible`: Boolean for whether the stars are visible.
(default: `true`)
@@ -6580,6 +6898,7 @@ object you are working with still exists.
* `get_stars()`: returns a table with the current stars parameters as in
`set_stars`.
* `set_clouds(cloud_parameters)`: set cloud parameters
+ * Passing no arguments resets clouds to their default values.
* `cloud_parameters` is a table with the following optional fields:
* `density`: from `0` (no clouds) to `1` (full clouds) (default `0.4`)
* `color`: basic cloud color with alpha channel, ColorSpec
@@ -6746,7 +7065,8 @@ It can be created via `Raycast(pos1, pos2, objects, liquids)` or
* `pos1`: start of the ray
* `pos2`: end of the ray
* `objects`: if false, only nodes will be returned. Default is true.
-* `liquids`: if false, liquid nodes won't be returned. Default is false.
+* `liquids`: if false, liquid nodes (`liquidtype ~= "none"`) won't be
+ returned. Default is false.
### Methods
@@ -6905,6 +7225,7 @@ Player properties need to be saved manually.
-- "sprite" uses 1 texture.
-- "upright_sprite" uses 2 textures: {front, back}.
-- "wielditem" expects 'textures = {itemname}' (see 'visual' above).
+ -- "mesh" requires one texture for each mesh buffer/material (in order)
colors = {},
-- Number of required colors depends on visual
@@ -6975,7 +7296,7 @@ Player properties need to be saved manually.
-- Default: false
infotext = "",
- -- By default empty, text to be shown when pointed at object
+ -- Same as infotext for nodes. Empty by default
static_save = true,
-- If false, never save this object statically. It will simply be
@@ -7076,6 +7397,11 @@ Used by `minetest.register_abm`.
-- Chance of triggering `action` per-node per-interval is 1.0 / this
-- value
+ min_y = -32768,
+ max_y = 32767,
+ -- min and max height levels where ABM will be processed
+ -- can be used to reduce CPU usage
+
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
@@ -7225,6 +7551,8 @@ Used by `minetest.register_node`, `minetest.register_craftitem`, and
range = 4.0,
liquids_pointable = false,
+ -- If true, item points to all liquid nodes (`liquidtype ~= "none"`),
+ -- even those for which `pointable = false`
light_source = 0,
-- When used for nodes: Defines amount of light emitted by node.
@@ -7233,7 +7561,7 @@ Used by `minetest.register_node`, `minetest.register_craftitem`, and
-- A value outside the range 0 to minetest.LIGHT_MAX causes undefined
-- behavior.
- -- See "Tools" section for an example including explanation
+ -- See "Tool Capabilities" section for an example including explanation
tool_capabilities = {
full_punch_interval = 1.0,
max_drop_level = 0,
@@ -7280,12 +7608,17 @@ Used by `minetest.register_node`, `minetest.register_craftitem`, and
},
on_place = function(itemstack, placer, pointed_thing),
- -- Shall place item and return the leftover itemstack.
+ -- When the 'place' key was pressed with the item in hand
+ -- and a node was pointed at.
+ -- Shall place item and return the leftover itemstack
+ -- or nil to not modify the inventory.
-- The placer may be any ObjectRef or nil.
-- default: minetest.item_place
on_secondary_use = function(itemstack, user, pointed_thing),
-- Same as on_place but called when not pointing at a node.
+ -- Function must return either nil if inventory shall not be modified,
+ -- or an itemstack to replace the original itemstack.
-- The user may be any ObjectRef or nil.
-- default: nil
@@ -7296,8 +7629,9 @@ Used by `minetest.register_node`, `minetest.register_craftitem`, and
on_use = function(itemstack, user, pointed_thing),
-- default: nil
- -- Function must return either nil if no item shall be removed from
- -- inventory, or an itemstack to replace the original itemstack.
+ -- When user pressed the 'punch/mine' key with the item in hand.
+ -- Function must return either nil if inventory shall not be modified,
+ -- or an itemstack to replace the original itemstack.
-- e.g. itemstack:take_item(); return itemstack
-- Otherwise, the function is free to do what it wants.
-- The user may be any ObjectRef or nil.
@@ -7306,7 +7640,7 @@ Used by `minetest.register_node`, `minetest.register_craftitem`, and
after_use = function(itemstack, user, node, digparams),
-- default: nil
-- If defined, should return an itemstack and will be called instead of
- -- wearing out the tool. If returns nil, does nothing.
+ -- wearing out the item (if tool). If returns nil, does nothing.
-- If after_use doesn't exist, it is the same as:
-- function(itemstack, user, node, digparams)
-- itemstack:add_wear(digparams.wear)
@@ -7407,24 +7741,54 @@ Used by `minetest.register_node`.
climbable = false, -- If true, can be climbed on (ladder)
+ move_resistance = 0,
+ -- Slows down movement of players through this node (max. 7).
+ -- If this is nil, it will be equal to liquid_viscosity.
+ -- Note: If liquid movement physics apply to the node
+ -- (see `liquid_move_physics`), the movement speed will also be
+ -- affected by the `movement_liquid_*` settings.
+
buildable_to = false, -- If true, placed nodes can replace this node
floodable = false,
-- If true, liquids flow into and replace this node.
-- Warning: making a liquid node 'floodable' will cause problems.
- liquidtype = "none", -- "none" / "source" / "flowing"
+ liquidtype = "none", -- specifies liquid flowing physics
+ -- * "none": no liquid flowing physics
+ -- * "source": spawns flowing liquid nodes at all 4 sides and below;
+ -- recommended drawtype: "liquid".
+ -- * "flowing": spawned from source, spawns more flowing liquid nodes
+ -- around it until `liquid_range` is reached;
+ -- will drain out without a source;
+ -- recommended drawtype: "flowingliquid".
+ -- If it's "source" or "flowing" and `liquid_range > 0`, then
+ -- both `liquid_alternative_*` fields must be specified
liquid_alternative_flowing = "", -- Flowing version of source liquid
liquid_alternative_source = "", -- Source version of flowing liquid
- liquid_viscosity = 0, -- Higher viscosity = slower flow (max. 7)
+ liquid_viscosity = 0,
+ -- Controls speed at which the liquid spreads/flows (max. 7).
+ -- 0 is fastest, 7 is slowest.
+ -- By default, this also slows down movement of players inside the node
+ -- (can be overridden using `move_resistance`)
liquid_renewable = true,
-- If true, a new liquid source can be created by placing two or more
-- sources nearby
+ liquid_move_physics = nil, -- specifies movement physics if inside node
+ -- * false: No liquid movement physics apply.
+ -- * true: Enables liquid movement physics. Enables things like
+ -- ability to "swim" up/down, sinking slowly if not moving,
+ -- smoother speed change when falling into, etc. The `movement_liquid_*`
+ -- settings apply.
+ -- * nil: Will be treated as true if `liquidype ~= "none"`
+ -- and as false otherwise.
+ -- Default: nil
+
leveled = 0,
-- Only valid for "nodebox" drawtype with 'type = "leveled"'.
-- Allows defining the nodebox height without using param2.
@@ -7434,9 +7798,12 @@ Used by `minetest.register_node`.
leveled_max = 127,
-- Maximum value for `leveled` (0-127), enforced in
-- `minetest.set_node_level` and `minetest.add_node_level`.
- -- Values above 124 might causes collision detection issues.
+ -- Values above 124 might causes collision detection issues.
- liquid_range = 8, -- Number of flowing nodes around source (max. 8)
+ liquid_range = 8,
+ -- Maximum distance that flowing liquid nodes can spread around
+ -- source on flat land;
+ -- maximum = 8; set to 0 to disable liquid flow
drowning = 0,
-- Player will take this amount of damage if no bubbles are left
@@ -7507,7 +7874,7 @@ Used by `minetest.register_node`.
-- While digging node.
-- If `"__group"`, then the sound will be
-- `default_dig_<groupname>`, where `<groupname>` is the
- -- name of the tool's digging group with the fastest digging time.
+ -- name of the item's digging group with the fastest digging time.
-- In case of a tie, one of the sounds will be played (but we
-- cannot predict which one)
-- Default value: `"__group"`
@@ -7531,14 +7898,13 @@ Used by `minetest.register_node`.
drop = "",
-- Name of dropped item when dug.
-- Default dropped item is the node itself.
- -- Using a table allows multiple items, drop chances and tool filtering.
- -- Tool filtering was undocumented until recently, tool filtering by string
- -- matching is deprecated.
+ -- Using a table allows multiple items, drop chances and item filtering.
+ -- Item filtering by string matching is deprecated.
drop = {
max_items = 1,
-- Maximum number of item lists to drop.
-- The entries in 'items' are processed in order. For each:
- -- Tool filtering is applied, chance of drop is applied, if both are
+ -- Item filtering is applied, chance of drop is applied, if both are
-- successful the entire item list is dropped.
-- Entry processing continues until the number of dropped item lists
-- equals 'max_items'.
@@ -7552,7 +7918,7 @@ Used by `minetest.register_node`.
items = {"default:diamond"},
},
{
- -- Only drop if using a tool whose name is identical to one
+ -- Only drop if using an item whose name is identical to one
-- of these.
tools = {"default:shovel_mese", "default:shovel_diamond"},
rarity = 5,
@@ -7563,14 +7929,24 @@ Used by `minetest.register_node`.
inherit_color = true,
},
{
- -- Only drop if using a tool whose name contains
- -- "default:shovel_" (this tool filtering by string matching
- -- is deprecated).
+ -- Only drop if using an item whose name contains
+ -- "default:shovel_" (this item filtering by string matching
+ -- is deprecated, use tool_groups instead).
tools = {"~default:shovel_"},
rarity = 2,
-- The item list dropped.
items = {"default:sand", "default:desert_sand"},
},
+ {
+ -- Only drop if using an item in the "magicwand" group, or
+ -- an item that is in both the "pickaxe" and the "lucky"
+ -- groups.
+ tool_groups = {
+ "magicwand",
+ {"pickaxe", "lucky"}
+ },
+ items = {"default:coal_lump"},
+ },
},
},
@@ -7634,9 +8010,9 @@ Used by `minetest.register_node`.
on_rightclick = function(pos, node, clicker, itemstack, pointed_thing),
-- default: nil
- -- Called when clicker (an ObjectRef) "rightclicks"
- -- ("rightclick" here stands for the placement key) while pointing at
- -- the node at pos with 'node' being the node table.
+ -- Called when clicker (an ObjectRef) used the 'place/build' key
+ -- (not neccessarily an actual rightclick)
+ -- while pointing at the node at pos with 'node' being the node table.
-- itemstack will hold clicker's wielded item.
-- Shall return the leftover itemstack.
-- Note: pointed_thing can be nil, if a mod calls this function.
@@ -7645,7 +8021,7 @@ Used by `minetest.register_node`.
on_dig = function(pos, node, digger),
-- default: minetest.node_dig
- -- By default checks privileges, wears out tool and removes node.
+ -- By default checks privileges, wears out item (if tool) and removes node.
-- return true if the node was dug successfully, false otherwise.
-- Deprecated: returning nil is the same as returning true.
@@ -7732,10 +8108,22 @@ Used by `minetest.register_craft`.
{
type = "toolrepair",
- additional_wear = -0.02,
+ additional_wear = -0.02, -- multiplier of 65536
}
-Note: Tools with group `disable_repair=1` will not repairable by this recipe.
+Adds a shapeless recipe for *every* tool that doesn't have the `disable_repair=1`
+group. Player can put 2 equal tools in the craft grid to get one "repaired" tool
+back.
+The wear of the output is determined by the wear of both tools, plus a
+'repair bonus' given by `additional_wear`. To reduce the wear (i.e. 'repair'),
+you want `additional_wear` to be negative.
+
+The formula used to calculate the resulting wear is:
+
+ 65536 - ( (65536 - tool_1_wear) + (65536 - tool_2_wear) + 65536 * additional_wear )
+
+The result is rounded and can't be lower than 0. If the result is 65536 or higher,
+no crafting is possible.
### Cooking
@@ -7803,7 +8191,7 @@ See [Ores] section above for essential information.
spread = {x = 100, y = 100, z = 100},
seed = 23,
octaves = 3,
- persist = 0.7
+ persistence = 0.7
},
-- NoiseParams structure describing one of the perlin noises used for
-- ore distribution.
@@ -7832,7 +8220,7 @@ See [Ores] section above for essential information.
spread = {x = 100, y = 100, z = 100},
seed = 47,
octaves = 3,
- persist = 0.7
+ persistence = 0.7
},
np_puff_bottom = {
offset = 4,
@@ -7840,7 +8228,7 @@ See [Ores] section above for essential information.
spread = {x = 100, y = 100, z = 100},
seed = 11,
octaves = 3,
- persist = 0.7
+ persistence = 0.7
},
-- vein
@@ -7853,7 +8241,7 @@ See [Ores] section above for essential information.
spread = {x = 100, y = 100, z = 100},
seed = 17,
octaves = 3,
- persist = 0.7
+ persistence = 0.7
},
stratum_thickness = 8,
}
@@ -7980,7 +8368,7 @@ See [Decoration types]. Used by `minetest.register_decoration`.
spread = {x = 100, y = 100, z = 100},
seed = 354,
octaves = 3,
- persist = 0.7,
+ persistence = 0.7,
lacunarity = 2.0,
flags = "absvalue"
},
@@ -8236,6 +8624,9 @@ Used by `Player:hud_add`. Returned by `Player:hud_get`.
z_index = 0,
-- Z index : lower z-index HUDs are displayed behind higher z-index HUDs
+
+ style = 0,
+ -- For "text" elements sets font style: bitfield with 1 = bold, 2 = italic, 4 = monospace
}
Particle definition
@@ -8383,7 +8774,7 @@ Used by `HTTPApiTable.fetch` and `HTTPApiTable.fetch_async`.
url = "http://example.org",
timeout = 10,
- -- Timeout for connection in seconds. Default is 3 seconds.
+ -- Timeout for request to be completed in seconds. Default depends on engine settings.
method = "GET", "POST", "PUT" or "DELETE"
-- The http method to use. Defaults to "GET".
@@ -8475,3 +8866,10 @@ Used by `minetest.register_authentication_handler`.
-- Returns an iterator (use with `for` loops) for all player names
-- currently in the auth database
}
+
+Bit Library
+-----------
+
+Functions: bit.tobit, bit.tohex, bit.bnot, bit.band, bit.bor, bit.bxor, bit.lshift, bit.rshift, bit.arshift, bit.rol, bit.ror, bit.bswap
+
+See http://bitop.luajit.org/ for advanced information.
diff --git a/doc/menu_lua_api.txt b/doc/menu_lua_api.txt
index b3975bc1d..9bc0c46bd 100644
--- a/doc/menu_lua_api.txt
+++ b/doc/menu_lua_api.txt
@@ -1,4 +1,4 @@
-Minetest Lua Mainmenu API Reference 5.4.0
+Minetest Lua Mainmenu API Reference 5.5.0
=========================================
Introduction
@@ -85,7 +85,9 @@ core.get_video_drivers()
core.get_mapgen_names([include_hidden=false]) -> table of map generator algorithms
registered in the core (possible in async calls)
core.get_cache_path() -> path of cache
-core.get_temp_path() -> path of temp folder
+core.get_temp_path([param]) (possible in async calls)
+^ param=true: returns path to a temporary file
+^ otherwise: returns path to the temporary folder
HTTP Requests
@@ -204,7 +206,8 @@ core.get_screen_info()
display_width = <width of display>,
display_height = <height of display>,
window_width = <current window width>,
- window_height = <current window height>
+ window_height = <current window height>,
+ render_info = <active render information>
}
@@ -218,7 +221,13 @@ Package - content which is downloadable from the content db, may or may not be i
* returns path to global user data,
the directory that contains user-provided mods, worlds, games, and texture packs.
* core.get_modpath() (possible in async calls)
- * returns path to global modpath
+ * returns path to global modpath, where mods can be installed
+* core.get_modpaths() (possible in async calls)
+ * returns list of paths to global modpaths, where mods have been installed
+
+ The difference with "core.get_modpath" is that no mods should be installed in these
+ directories by Minetest -- they might be read-only.
+
* core.get_clientmodpath() (possible in async calls)
* returns path to global client-side modpath
* core.get_gamepath() (possible in async calls)
diff --git a/doc/minetest.6 b/doc/minetest.6
index bac70fe1a..6a3601f80 100644
--- a/doc/minetest.6
+++ b/doc/minetest.6
@@ -112,6 +112,10 @@ leveldb, and files.
Migrate from current players backend to another. Possible values are sqlite3,
leveldb, postgresql, dummy, and files.
.TP
+.B \-\-migrate-mod-storage <value>
+Migrate from current mod storage backend to another. Possible values are
+sqlite3, dummy, and files.
+.TP
.B \-\-terminal
Display an interactive terminal over ncurses during execution.
@@ -119,6 +123,9 @@ Display an interactive terminal over ncurses during execution.
.TP
.B MINETEST_SUBGAME_PATH
Colon delimited list of directories to search for games.
+.TP
+.B MINETEST_MOD_PATH
+Colon delimited list of directories to search for mods.
.SH BUGS
Please report all bugs at https://github.com/minetest/minetest/issues.
diff --git a/doc/texture_packs.txt b/doc/texture_packs.txt
index 8af2cbad6..f738032b6 100644
--- a/doc/texture_packs.txt
+++ b/doc/texture_packs.txt
@@ -90,9 +90,10 @@ by texture packs. All existing fallback textures can be found in the directory
* `minimap_mask_square.png`: mask used for the square minimap
* `minimap_overlay_round.png`: overlay texture for the round minimap
* `minimap_overlay_square.png`: overlay texture for the square minimap
-* `no_texture_airlike.png`: fallback inventory image for airlike nodes
* `object_marker_red.png`: texture for players on the minimap
* `player_marker.png`: texture for the own player on the square minimap
+* `no_texture_airlike.png`: fallback inventory image for airlike nodes
+* `no_texture.png`: fallback image for unspecified textures
* `player.png`: front texture of the 2D upright sprite player
* `player_back.png`: back texture of the 2D upright sprite player
diff --git a/doc/world_format.txt b/doc/world_format.txt
index a8a9e463e..eb1d7f728 100644
--- a/doc/world_format.txt
+++ b/doc/world_format.txt
@@ -1,5 +1,5 @@
=============================
-Minetest World Format 22...27
+Minetest World Format 22...29
=============================
This applies to a world format carrying the block serialization version
@@ -8,6 +8,7 @@ This applies to a world format carrying the block serialization version
- 0.4.0 (23)
- 24 was never released as stable and existed for ~2 days
- 27 was added in 0.4.15-dev
+- 29 was added in 5.5.0-dev
The block serialization version does not fully specify every aspect of this
format; if compliance with this format is to be checked, it needs to be
@@ -281,6 +282,8 @@ MapBlock serialization format
NOTE: Byte order is MSB first (big-endian).
NOTE: Zlib data is in such a format that Python's zlib at least can
directly decompress.
+NOTE: Since version 29 zstd is used instead of zlib. In addition the entire
+ block is first serialized and then compressed (except the version byte).
u8 version
- map format version number, see serialisation.h for the latest number
@@ -324,6 +327,20 @@ u16 lighting_complete
then Minetest will correct lighting in the day light bank when
the block at (1, 0, 0) is also loaded.
+if map format version >= 29:
+ u32 timestamp
+ - Timestamp when last saved, as seconds from starting the game.
+ - 0xffffffff = invalid/unknown timestamp, nothing should be done with the time
+ difference when loaded
+
+ u16 num_name_id_mappings
+ foreach num_name_id_mappings
+ u16 id
+ u16 name_len
+ u8[name_len] name
+if map format version < 29:
+ -- Nothing right here, timpstamp and node id mappings are serialized later
+
u8 content_width
- Number of bytes in the content (param0) fields of nodes
if map format version <= 23:
@@ -335,7 +352,7 @@ u8 params_width
- Number of bytes used for parameters per node
- Always 2
-zlib-compressed node data:
+node data (zlib-compressed if version < 29):
if content_width == 1:
- content:
u8[4096]: param0 fields
@@ -348,31 +365,31 @@ if content_width == 2:
u8[4096]: param2 fields
- The location of a node in each of those arrays is (z*16*16 + y*16 + x).
-zlib-compressed node metadata list
+node metadata list (zlib-compressed if version < 29):
- 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. Format depends on type_id, see below.
-if map format version >= 23:
- u8 version -- Note: type was u16 for map format version <= 22
- -- = 1 for map format version < 28
- -- = 2 since map format version 28
- 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
- u8 is_private -- only for version >= 2. 0 = not private, 1 = private
- serialized inventory
+ 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. Format depends on type_id, see below.
+ if map format version >= 23:
+ u8 version -- Note: type was u16 for map format version <= 22
+ -- = 1 for map format version < 28
+ -- = 2 since map format version 28
+ 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
+ u8 is_private -- only for version >= 2. 0 = not private, 1 = private
+ serialized inventory
- Node timers
if map format version == 23:
@@ -403,20 +420,18 @@ foreach static_object_count:
u16 data_size
u8[data_size] data
-u32 timestamp
-- Timestamp when last saved, as seconds from starting the game.
-- 0xffffffff = invalid/unknown timestamp, nothing should be done with the time
- difference when loaded
-
-u8 name-id-mapping version
-- Always 0
+if map format version < 29:
+ u32 timestamp
+ - Same meaning as the timestamp further up
-u16 num_name_id_mappings
+ u8 name-id-mapping version
+ - Always 0
-foreach num_name_id_mappings
- u16 id
- u16 name_len
- u8[name_len] name
+ u16 num_name_id_mappings
+ foreach num_name_id_mappings
+ u16 id
+ u16 name_len
+ u8[name_len] name
- Node timers
if map format version == 25:
diff --git a/fonts/mono_dejavu_sans_10.xml b/fonts/mono_dejavu_sans_10.xml
deleted file mode 100644
index 0276cedb6..000000000
--- a/fonts/mono_dejavu_sans_10.xml
+++ /dev/null
Binary files differ
diff --git a/fonts/mono_dejavu_sans_100.png b/fonts/mono_dejavu_sans_100.png
deleted file mode 100644
index 45a312542..000000000
--- a/fonts/mono_dejavu_sans_100.png
+++ /dev/null
Binary files differ
diff --git a/fonts/mono_dejavu_sans_11.xml b/fonts/mono_dejavu_sans_11.xml
deleted file mode 100644
index f727ed2bb..000000000
--- a/fonts/mono_dejavu_sans_11.xml
+++ /dev/null
Binary files differ
diff --git a/fonts/mono_dejavu_sans_110.png b/fonts/mono_dejavu_sans_110.png
deleted file mode 100644
index c90c0e242..000000000
--- a/fonts/mono_dejavu_sans_110.png
+++ /dev/null
Binary files differ
diff --git a/fonts/mono_dejavu_sans_12.xml b/fonts/mono_dejavu_sans_12.xml
deleted file mode 100644
index 38f6427be..000000000
--- a/fonts/mono_dejavu_sans_12.xml
+++ /dev/null
Binary files differ
diff --git a/fonts/mono_dejavu_sans_120.png b/fonts/mono_dejavu_sans_120.png
deleted file mode 100644
index 0cebd70e8..000000000
--- a/fonts/mono_dejavu_sans_120.png
+++ /dev/null
Binary files differ
diff --git a/fonts/mono_dejavu_sans_14.xml b/fonts/mono_dejavu_sans_14.xml
deleted file mode 100644
index b90a34960..000000000
--- a/fonts/mono_dejavu_sans_14.xml
+++ /dev/null
Binary files differ
diff --git a/fonts/mono_dejavu_sans_140.png b/fonts/mono_dejavu_sans_140.png
deleted file mode 100644
index a413759ea..000000000
--- a/fonts/mono_dejavu_sans_140.png
+++ /dev/null
Binary files differ
diff --git a/fonts/mono_dejavu_sans_16.xml b/fonts/mono_dejavu_sans_16.xml
deleted file mode 100644
index 3f7d2c2a2..000000000
--- a/fonts/mono_dejavu_sans_16.xml
+++ /dev/null
Binary files differ
diff --git a/fonts/mono_dejavu_sans_160.png b/fonts/mono_dejavu_sans_160.png
deleted file mode 100644
index bd8a2f40a..000000000
--- a/fonts/mono_dejavu_sans_160.png
+++ /dev/null
Binary files differ
diff --git a/fonts/mono_dejavu_sans_18.xml b/fonts/mono_dejavu_sans_18.xml
deleted file mode 100644
index 92865cbfc..000000000
--- a/fonts/mono_dejavu_sans_18.xml
+++ /dev/null
Binary files differ
diff --git a/fonts/mono_dejavu_sans_180.png b/fonts/mono_dejavu_sans_180.png
deleted file mode 100644
index a299afcbe..000000000
--- a/fonts/mono_dejavu_sans_180.png
+++ /dev/null
Binary files differ
diff --git a/fonts/mono_dejavu_sans_20.xml b/fonts/mono_dejavu_sans_20.xml
deleted file mode 100644
index acd8c77d0..000000000
--- a/fonts/mono_dejavu_sans_20.xml
+++ /dev/null
Binary files differ
diff --git a/fonts/mono_dejavu_sans_200.png b/fonts/mono_dejavu_sans_200.png
deleted file mode 100644
index 68ee62681..000000000
--- a/fonts/mono_dejavu_sans_200.png
+++ /dev/null
Binary files differ
diff --git a/fonts/mono_dejavu_sans_22.xml b/fonts/mono_dejavu_sans_22.xml
deleted file mode 100644
index eafb4def6..000000000
--- a/fonts/mono_dejavu_sans_22.xml
+++ /dev/null
Binary files differ
diff --git a/fonts/mono_dejavu_sans_220.png b/fonts/mono_dejavu_sans_220.png
deleted file mode 100644
index 042d7e094..000000000
--- a/fonts/mono_dejavu_sans_220.png
+++ /dev/null
Binary files differ
diff --git a/fonts/mono_dejavu_sans_24.xml b/fonts/mono_dejavu_sans_24.xml
deleted file mode 100644
index fc8b6232e..000000000
--- a/fonts/mono_dejavu_sans_24.xml
+++ /dev/null
Binary files differ
diff --git a/fonts/mono_dejavu_sans_240.png b/fonts/mono_dejavu_sans_240.png
deleted file mode 100644
index d2d68c5bb..000000000
--- a/fonts/mono_dejavu_sans_240.png
+++ /dev/null
Binary files differ
diff --git a/fonts/mono_dejavu_sans_26.xml b/fonts/mono_dejavu_sans_26.xml
deleted file mode 100644
index 829f09948..000000000
--- a/fonts/mono_dejavu_sans_26.xml
+++ /dev/null
Binary files differ
diff --git a/fonts/mono_dejavu_sans_260.png b/fonts/mono_dejavu_sans_260.png
deleted file mode 100644
index 3a8cb6c57..000000000
--- a/fonts/mono_dejavu_sans_260.png
+++ /dev/null
Binary files differ
diff --git a/fonts/mono_dejavu_sans_28.xml b/fonts/mono_dejavu_sans_28.xml
deleted file mode 100644
index b5b25bd07..000000000
--- a/fonts/mono_dejavu_sans_28.xml
+++ /dev/null
Binary files differ
diff --git a/fonts/mono_dejavu_sans_280.png b/fonts/mono_dejavu_sans_280.png
deleted file mode 100644
index ccf62ba48..000000000
--- a/fonts/mono_dejavu_sans_280.png
+++ /dev/null
Binary files differ
diff --git a/fonts/mono_dejavu_sans_4.xml b/fonts/mono_dejavu_sans_4.xml
deleted file mode 100644
index cfebb39b3..000000000
--- a/fonts/mono_dejavu_sans_4.xml
+++ /dev/null
Binary files differ
diff --git a/fonts/mono_dejavu_sans_40.png b/fonts/mono_dejavu_sans_40.png
deleted file mode 100644
index 24ed693f7..000000000
--- a/fonts/mono_dejavu_sans_40.png
+++ /dev/null
Binary files differ
diff --git a/fonts/mono_dejavu_sans_6.xml b/fonts/mono_dejavu_sans_6.xml
deleted file mode 100644
index d0e1de21d..000000000
--- a/fonts/mono_dejavu_sans_6.xml
+++ /dev/null
Binary files differ
diff --git a/fonts/mono_dejavu_sans_60.png b/fonts/mono_dejavu_sans_60.png
deleted file mode 100644
index 326af996f..000000000
--- a/fonts/mono_dejavu_sans_60.png
+++ /dev/null
Binary files differ
diff --git a/fonts/mono_dejavu_sans_8.xml b/fonts/mono_dejavu_sans_8.xml
deleted file mode 100644
index c48bf7ccc..000000000
--- a/fonts/mono_dejavu_sans_8.xml
+++ /dev/null
Binary files differ
diff --git a/fonts/mono_dejavu_sans_80.png b/fonts/mono_dejavu_sans_80.png
deleted file mode 100644
index 04326dbb2..000000000
--- a/fonts/mono_dejavu_sans_80.png
+++ /dev/null
Binary files differ
diff --git a/fonts/mono_dejavu_sans_9.xml b/fonts/mono_dejavu_sans_9.xml
deleted file mode 100644
index 74e841034..000000000
--- a/fonts/mono_dejavu_sans_9.xml
+++ /dev/null
Binary files differ
diff --git a/fonts/mono_dejavu_sans_90.png b/fonts/mono_dejavu_sans_90.png
deleted file mode 100644
index 65ac51858..000000000
--- a/fonts/mono_dejavu_sans_90.png
+++ /dev/null
Binary files differ
diff --git a/games/devtest/menu/background.png b/games/devtest/menu/background.png
index 415bb3d14..89c45fcd5 100644
--- a/games/devtest/menu/background.png
+++ b/games/devtest/menu/background.png
Binary files differ
diff --git a/games/devtest/mods/basetools/init.lua b/games/devtest/mods/basetools/init.lua
index bd7480030..fd83b82eb 100644
--- a/games/devtest/mods/basetools/init.lua
+++ b/games/devtest/mods/basetools/init.lua
@@ -16,11 +16,11 @@ Tool types:
Tool materials:
-* Dirt: dig nodes of rating 3, one use only
* Wood: dig nodes of rating 3
* Stone: dig nodes of rating 3 or 2
* Steel: dig nodes of rating 3, 2 or 1
* Mese: dig "everything" instantly
+* n-Uses: can be used n times before breaking
]]
-- The hand
@@ -92,20 +92,6 @@ minetest.register_tool("basetools:pick_mese", {
-- Pickaxes: Dig cracky
--
--- This should break after only 1 use
-minetest.register_tool("basetools:pick_dirt", {
- description = "Dirt Pickaxe".."\n"..
- "Digs cracky=3".."\n"..
- "1 use only",
- inventory_image = "basetools_dirtpick.png",
- tool_capabilities = {
- max_drop_level=0,
- groupcaps={
- cracky={times={[3]=2.00}, uses=1, maxlevel=0}
- },
- },
-})
-
minetest.register_tool("basetools:pick_wood", {
description = "Wooden Pickaxe".."\n"..
"Digs cracky=3",
@@ -348,3 +334,31 @@ minetest.register_tool("basetools:dagger_steel", {
damage_groups = {fleshy=2},
}
})
+
+-- Test tool uses and punch_attack_uses
+local uses = { 1, 2, 3, 5, 10, 50, 100, 1000, 10000, 65535 }
+for i=1, #uses do
+ local u = uses[i]
+ local color = string.format("#FF00%02X", math.floor(((i-1)/#uses) * 255))
+ minetest.register_tool("basetools:pick_uses_"..string.format("%05d", u), {
+ description = u.."-Uses Pickaxe".."\n"..
+ "Digs cracky=3",
+ inventory_image = "basetools_steelpick.png^[colorize:"..color..":127",
+ tool_capabilities = {
+ max_drop_level=0,
+ groupcaps={
+ cracky={times={[3]=0.1, [2]=0.2, [1]=0.3}, uses=u, maxlevel=0}
+ },
+ },
+ })
+
+ minetest.register_tool("basetools:sword_uses_"..string.format("%05d", u), {
+ description = u.."-Uses Sword".."\n"..
+ "Damage: fleshy=1",
+ inventory_image = "basetools_woodsword.png^[colorize:"..color..":127",
+ tool_capabilities = {
+ damage_groups = {fleshy=1},
+ punch_attack_uses = u,
+ },
+ })
+end
diff --git a/games/devtest/mods/basetools/textures/basetools_dirtpick.png b/games/devtest/mods/basetools/textures/basetools_dirtpick.png
deleted file mode 100644
index 20a021d72..000000000
--- a/games/devtest/mods/basetools/textures/basetools_dirtpick.png
+++ /dev/null
Binary files differ
diff --git a/games/devtest/mods/broken/init.lua b/games/devtest/mods/broken/init.lua
new file mode 100644
index 000000000..04993ca16
--- /dev/null
+++ b/games/devtest/mods/broken/init.lua
@@ -0,0 +1,11 @@
+-- Register stuff with empty definitions to test if Minetest fallback options
+-- for these things work properly.
+
+-- The itemstrings are deliberately kept descriptive to keep them easy to
+-- recognize.
+
+minetest.register_node("broken:node_with_empty_definition", {})
+minetest.register_tool("broken:tool_with_empty_definition", {})
+minetest.register_craftitem("broken:craftitem_with_empty_definition", {})
+
+minetest.register_entity("broken:entity_with_empty_definition", {})
diff --git a/games/devtest/mods/broken/mod.conf b/games/devtest/mods/broken/mod.conf
new file mode 100644
index 000000000..a24378a34
--- /dev/null
+++ b/games/devtest/mods/broken/mod.conf
@@ -0,0 +1,2 @@
+name = broken
+description = Register items and an entity with empty definitions to test fallback
diff --git a/games/devtest/mods/experimental/commands.lua b/games/devtest/mods/experimental/commands.lua
index 132b08b0b..e42ae954d 100644
--- a/games/devtest/mods/experimental/commands.lua
+++ b/games/devtest/mods/experimental/commands.lua
@@ -131,10 +131,11 @@ local function place_nodes(param)
p2_max = 63
elseif def.paramtype2 == "leveled" then
p2_max = 127
- elseif def.paramtype2 == "degrotate" and def.drawtype == "plantlike" then
- p2_max = 179
+ elseif def.paramtype2 == "degrotate" and (def.drawtype == "plantlike" or def.drawtype == "mesh") then
+ p2_max = 239
elseif def.paramtype2 == "colorfacedir" or
def.paramtype2 == "colorwallmounted" or
+ def.paramtype2 == "colordegrotate" or
def.paramtype2 == "color" then
p2_max = 255
end
@@ -143,7 +144,8 @@ local function place_nodes(param)
-- Skip undefined param2 values
if not ((def.paramtype2 == "meshoptions" and p2 % 8 > 4) or
(def.paramtype2 == "colorwallmounted" and p2 % 8 > 5) or
- (def.paramtype2 == "colorfacedir" and p2 % 32 > 23)) then
+ ((def.paramtype2 == "colorfacedir" or def.paramtype2 == "colordegrotate")
+ and p2 % 32 > 23)) then
minetest.set_node(pos, { name = itemstring, param2 = p2 })
nodes_placed = nodes_placed + 1
@@ -215,5 +217,5 @@ minetest.register_chatcommand("test_place_nodes", {
})
core.register_on_chatcommand(function(name, command, params)
- minetest.log("caught command '"..command.."', issued by '"..name.."'. Parameters: '"..params.."'")
+ minetest.log("action", "caught command '"..command.."', issued by '"..name.."'. Parameters: '"..params.."'")
end)
diff --git a/games/devtest/mods/testformspec/formspec.lua b/games/devtest/mods/testformspec/formspec.lua
index 2a2bdad60..c0db695b7 100644
--- a/games/devtest/mods/testformspec/formspec.lua
+++ b/games/devtest/mods/testformspec/formspec.lua
@@ -270,6 +270,16 @@ local scroll_fs =
--style_type[label;border=;bgcolor=]
--label[0.75,2;Reset]
+local window = {
+ sizex = 12,
+ sizey = 13,
+ positionx = 0.5,
+ positiony = 0.5,
+ anchorx = 0.5,
+ anchory = 0.5,
+ paddingx = 0.05,
+ paddingy = 0.05
+}
local pages = {
-- Real Coordinates
@@ -341,9 +351,28 @@ local pages = {
"size[12,13]real_coordinates[true]" ..
"container[0.5,1.5]" .. tabheaders_fs .. "container_end[]",
- -- Inv
+ -- Inv
"size[12,13]real_coordinates[true]" .. inv_style_fs,
+ -- Window
+ function()
+ return "formspec_version[3]" ..
+ string.format("size[%s,%s]position[%s,%s]anchor[%s,%s]padding[%s,%s]",
+ window.sizex, window.sizey, window.positionx, window.positiony,
+ window.anchorx, window.anchory, window.paddingx, window.paddingy) ..
+ string.format("field[0.5,0.5;2.5,0.5;sizex;X Size;%s]field[3.5,0.5;2.5,0.5;sizey;Y Size;%s]" ..
+ "field[0.5,1.5;2.5,0.5;positionx;X Position;%s]field[3.5,1.5;2.5,0.5;positiony;Y Position;%s]" ..
+ "field[0.5,2.5;2.5,0.5;anchorx;X Anchor;%s]field[3.5,2.5;2.5,0.5;anchory;Y Anchor;%s]" ..
+ "field[0.5,3.5;2.5,0.5;paddingx;X Padding;%s]field[3.5,3.5;2.5,0.5;paddingy;Y Padding;%s]" ..
+ "button[2,4.5;2.5,0.5;submit_window;Submit]",
+ window.sizex, window.sizey, window.positionx, window.positiony,
+ window.anchorx, window.anchory, window.paddingx, window.paddingy) ..
+ "field_close_on_enter[sizex;false]field_close_on_enter[sizey;false]" ..
+ "field_close_on_enter[positionx;false]field_close_on_enter[positiony;false]" ..
+ "field_close_on_enter[anchorx;false]field_close_on_enter[anchory;false]" ..
+ "field_close_on_enter[paddingx;false]field_close_on_enter[paddingy;false]"
+ end,
+
-- Animation
[[
formspec_version[3]
@@ -362,20 +391,55 @@ Number]
animated_image[5.5,0.5;5,2;;testformspec_animation.png;4;100]
animated_image[5.5,2.75;5,2;;testformspec_animation.jpg;4;100]
+ ]],
+
+ -- Model
+ [[
+ formspec_version[3]
+ size[12,13]
style[m1;bgcolor=black]
- model[0.5,6;4,4;m1;testformspec_character.b3d;testformspec_character.png]
- model[5,6;4,4;m2;testformspec_chest.obj;default_chest_top.png,default_chest_top.png,default_chest_side.png,default_chest_side.png,default_chest_front.png,default_chest_inside.png;30,1;true;true]
+ style[m2;bgcolor=black]
+ label[5,1;all defaults]
+ label[5,5.1;angle = 0, 180
+continuous = false
+mouse control = false
+frame loop range = 0,30]
+ label[5,9.2;continuous = true
+mouse control = true]
+ model[0.5,0.1;4,4;m1;testformspec_character.b3d;testformspec_character.png]
+ model[0.5,4.2;4,4;m2;testformspec_character.b3d;testformspec_character.png;0,180;false;false;0,30]
+ model[0.5,8.3;4,4;m3;testformspec_chest.obj;default_chest_top.png,default_chest_top.png,default_chest_side.png,default_chest_side.png,default_chest_front.png,default_chest_inside.png;30,1;true;true]
]],
-- Scroll containers
"formspec_version[3]size[12,13]" ..
scroll_fs,
+
+ -- Sound
+ [[
+ formspec_version[3]
+ size[12,13]
+ style[snd_btn;sound=soundstuff_mono]
+ style[snd_ibtn;sound=soundstuff_mono]
+ style[snd_drp;sound=soundstuff_mono]
+ style[snd_chk;sound=soundstuff_mono]
+ style[snd_tab;sound=soundstuff_mono]
+ button[0.5,0.5;2,1;snd_btn;Sound]
+ image_button[0.5,2;2,1;testformspec_item.png;snd_ibtn;Sound]
+ dropdown[0.5,4;4;snd_drp;Sound,Two,Three;]
+ checkbox[0.5,5.5.5;snd_chk;Sound;]
+ tabheader[0.5,7;8,0.65;snd_tab;Soundtab1,Soundtab2,Soundtab3;1;false;false]
+ ]],
}
-local function show_test_formspec(pname, page_id)
- page_id = page_id or 2
+local page_id = 2
+local function show_test_formspec(pname)
+ local page = pages[page_id]
+ if type(page) == "function" then
+ page = page()
+ end
- local fs = pages[page_id] .. "tabheader[0,0;8,0.65;maintabs;Real Coord,Styles,Noclip,Hypertext,Tabs,Invs,Anim,ScrollC;" .. page_id .. ";false;false]"
+ local fs = page .. "tabheader[0,0;8,0.65;maintabs;Real Coord,Styles,Noclip,Hypertext,Tabs,Invs,Window,Anim,Model,ScrollC,Sound;" .. page_id .. ";false;false]"
minetest.show_formspec(pname, "testformspec:formspec", fs)
end
@@ -385,9 +449,9 @@ minetest.register_on_player_receive_fields(function(player, formname, fields)
return false
end
-
if fields.maintabs then
- show_test_formspec(player:get_player_name(), tonumber(fields.maintabs))
+ page_id = tonumber(fields.maintabs)
+ show_test_formspec(player:get_player_name())
return true
end
@@ -403,6 +467,26 @@ minetest.register_on_player_receive_fields(function(player, formname, fields)
minetest.chat_send_player(player:get_player_name(), "Hypertext action received: " .. tostring(fields.hypertext))
return true
end
+
+ for name, value in pairs(fields) do
+ if window[name] then
+ print(name, window[name])
+ local num_val = tonumber(value) or 0
+
+ if name == "sizex" and num_val < 4 then
+ num_val = 6.5
+ elseif name == "sizey" and num_val < 5 then
+ num_val = 5.5
+ end
+
+ window[name] = num_val
+ print(name, window[name])
+ end
+ end
+
+ if fields.submit_window then
+ show_test_formspec(player:get_player_name())
+ end
end)
minetest.register_chatcommand("test_formspec", {
diff --git a/games/devtest/mods/testhud/init.lua b/games/devtest/mods/testhud/init.lua
new file mode 100644
index 000000000..2fa12fd71
--- /dev/null
+++ b/games/devtest/mods/testhud/init.lua
@@ -0,0 +1,81 @@
+local player_huds = {}
+
+local states = {
+ {0, "Normal font"},
+ {1, "Bold font"},
+ {2, "Italic font"},
+ {3, "Bold and italic font"},
+ {4, "Monospace font"},
+ {5, "Bold and monospace font"},
+ {7, "ZOMG all the font styles"},
+}
+
+
+local default_def = {
+ hud_elem_type = "text",
+ position = {x = 0.5, y = 0.5},
+ scale = {x = 2, y = 2},
+ alignment = { x = 0, y = 0 },
+}
+
+local function add_hud(player, state)
+ local def = table.copy(default_def)
+ local statetbl = states[state]
+ def.offset = {x = 0, y = 32 * state}
+ def.style = statetbl[1]
+ def.text = statetbl[2]
+ return player:hud_add(def)
+end
+
+minetest.register_on_leaveplayer(function(player)
+ player_huds[player:get_player_name()] = nil
+end)
+
+local etime = 0
+local state = 0
+
+minetest.register_globalstep(function(dtime)
+ etime = etime + dtime
+ if etime < 1 then
+ return
+ end
+ etime = 0
+ for _, player in ipairs(minetest.get_connected_players()) do
+ local huds = player_huds[player:get_player_name()]
+ if huds then
+ for i, hud_id in ipairs(huds) do
+ local statetbl = states[(state + i) % #states + 1]
+ player:hud_change(hud_id, "style", statetbl[1])
+ player:hud_change(hud_id, "text", statetbl[2])
+ end
+ end
+ end
+ state = state + 1
+end)
+
+minetest.register_chatcommand("hudfonts", {
+ params = "",
+ description = "Show/Hide some text on the HUD with various font options",
+ func = function(name, param)
+ local player = minetest.get_player_by_name(name)
+ local param = tonumber(param) or 0
+ param = math.min(math.max(param, 1), #states)
+ if player_huds[name] == nil then
+ player_huds[name] = {}
+ for i = 1, param do
+ table.insert(player_huds[name], add_hud(player, i))
+ end
+ minetest.chat_send_player(name, ("%d HUD element(s) added."):format(param))
+ else
+ local huds = player_huds[name]
+ if huds then
+ for _, hud_id in ipairs(huds) do
+ player:hud_remove(hud_id)
+ end
+ minetest.chat_send_player(name, "All HUD elements removed.")
+ end
+ player_huds[name] = nil
+ end
+ return true
+ end,
+})
diff --git a/games/devtest/mods/testhud/mod.conf b/games/devtest/mods/testhud/mod.conf
new file mode 100644
index 000000000..ed9f65c59
--- /dev/null
+++ b/games/devtest/mods/testhud/mod.conf
@@ -0,0 +1,2 @@
+name = testhud
+description = For testing HUD functionality
diff --git a/games/devtest/mods/testnodes/drawtypes.lua b/games/devtest/mods/testnodes/drawtypes.lua
index ff970144d..208774f6c 100644
--- a/games/devtest/mods/testnodes/drawtypes.lua
+++ b/games/devtest/mods/testnodes/drawtypes.lua
@@ -15,22 +15,6 @@ testing this node easier and more convenient.
local S = minetest.get_translator("testnodes")
--- If set to true, will show an inventory image for nodes that have no inventory image as of Minetest 5.1.0.
--- This is due to <https://github.com/minetest/minetest/issues/9209>.
--- This is only added to make the items more visible to avoid confusion, but you will no longer see
--- the default inventory images for these items. When you want to test the default inventory image of drawtypes,
--- this should be turned off.
--- TODO: Remove support for fallback inventory image as soon #9209 is fixed.
-local SHOW_FALLBACK_IMAGE = minetest.settings:get_bool("testnodes_show_fallback_image", false)
-
-local fallback_image = function(img)
- if SHOW_FALLBACK_IMAGE then
- return img
- else
- return nil
- end
-end
-
-- A regular cube
minetest.register_node("testnodes:normal", {
description = S("Normal Drawtype Test Node"),
@@ -145,20 +129,15 @@ minetest.register_node("testnodes:fencelike", {
})
minetest.register_node("testnodes:torchlike", {
- description = S("Torchlike Drawtype Test Node"),
+ description = S("Floor Torchlike Drawtype Test Node"),
drawtype = "torchlike",
paramtype = "light",
- tiles = {
- "testnodes_torchlike_floor.png",
- "testnodes_torchlike_ceiling.png",
- "testnodes_torchlike_wall.png",
- },
+ tiles = { "testnodes_torchlike_floor.png^[colorize:#FF0000:64" },
walkable = false,
sunlight_propagates = true,
groups = { dig_immediate = 3 },
- inventory_image = fallback_image("testnodes_torchlike_floor.png"),
})
minetest.register_node("testnodes:torchlike_wallmounted", {
@@ -176,12 +155,22 @@ minetest.register_node("testnodes:torchlike_wallmounted", {
walkable = false,
sunlight_propagates = true,
groups = { dig_immediate = 3 },
- inventory_image = fallback_image("testnodes_torchlike_floor.png"),
})
+minetest.register_node("testnodes:signlike", {
+ description = S("Floor Signlike Drawtype Test Node"),
+ drawtype = "signlike",
+ paramtype = "light",
+ tiles = { "testnodes_signlike.png^[colorize:#FF0000:64" },
-minetest.register_node("testnodes:signlike", {
+ walkable = false,
+ groups = { dig_immediate = 3 },
+ sunlight_propagates = true,
+})
+
+
+minetest.register_node("testnodes:signlike_wallmounted", {
description = S("Wallmounted Signlike Drawtype Test Node"),
drawtype = "signlike",
paramtype = "light",
@@ -192,7 +181,6 @@ minetest.register_node("testnodes:signlike", {
walkable = false,
groups = { dig_immediate = 3 },
sunlight_propagates = true,
- inventory_image = fallback_image("testnodes_signlike.png"),
})
minetest.register_node("testnodes:plantlike", {
@@ -220,9 +208,46 @@ minetest.register_node("testnodes:plantlike_waving", {
groups = { dig_immediate = 3 },
})
+minetest.register_node("testnodes:plantlike_wallmounted", {
+ description = S("Wallmounted Plantlike Drawtype Test Node"),
+ drawtype = "plantlike",
+ paramtype = "light",
+ paramtype2 = "wallmounted",
+ tiles = { "testnodes_plantlike_wallmounted.png" },
+ leveled = 1,
+
+
+ walkable = false,
+ sunlight_propagates = true,
+ groups = { dig_immediate = 3 },
+})
-- param2 will rotate
+local function rotate_on_rightclick(pos, node, clicker)
+ local def = minetest.registered_nodes[node.name]
+ local aux1 = clicker:get_player_control().aux1
+
+ local deg, deg_max
+ local color, color_mult = 0, 0
+ if def.paramtype2 == "degrotate" then
+ deg = node.param2
+ deg_max = 240
+ elseif def.paramtype2 == "colordegrotate" then
+ -- MSB [3x color, 5x rotation] LSB
+ deg = node.param2 % 2^5
+ deg_max = 24
+ color_mult = 2^5
+ color = math.floor(node.param2 / color_mult)
+ end
+
+ deg = (deg + (aux1 and 10 or 1)) % deg_max
+ node.param2 = color * color_mult + deg
+ minetest.swap_node(pos, node)
+ minetest.chat_send_player(clicker:get_player_name(),
+ "Rotation is now " .. deg .. " / " .. deg_max)
+end
+
minetest.register_node("testnodes:plantlike_degrotate", {
description = S("Degrotate Plantlike Drawtype Test Node"),
drawtype = "plantlike",
@@ -230,12 +255,43 @@ minetest.register_node("testnodes:plantlike_degrotate", {
paramtype2 = "degrotate",
tiles = { "testnodes_plantlike_degrotate.png" },
-
+ on_rightclick = rotate_on_rightclick,
+ place_param2 = 7,
walkable = false,
sunlight_propagates = true,
groups = { dig_immediate = 3 },
})
+minetest.register_node("testnodes:mesh_degrotate", {
+ description = S("Degrotate Mesh Drawtype Test Node"),
+ drawtype = "mesh",
+ paramtype = "light",
+ paramtype2 = "degrotate",
+ mesh = "testnodes_ocorner.obj",
+ tiles = { "testnodes_mesh_stripes2.png" },
+
+ on_rightclick = rotate_on_rightclick,
+ place_param2 = 10, -- 15°
+ sunlight_propagates = true,
+ groups = { dig_immediate = 3 },
+})
+
+minetest.register_node("testnodes:mesh_colordegrotate", {
+ description = S("Color Degrotate Mesh Drawtype Test Node"),
+ drawtype = "mesh",
+ paramtype = "light",
+ paramtype2 = "colordegrotate",
+ palette = "testnodes_palette_facedir.png",
+ mesh = "testnodes_ocorner.obj",
+ tiles = { "testnodes_mesh_stripes3.png" },
+
+ on_rightclick = rotate_on_rightclick,
+ -- color index 1, 1 step (=15°) rotated
+ place_param2 = 1 * 2^5 + 1,
+ sunlight_propagates = true,
+ groups = { dig_immediate = 3 },
+})
+
-- param2 will change height
minetest.register_node("testnodes:plantlike_leveled", {
description = S("Leveled Plantlike Drawtype Test Node"),
@@ -277,6 +333,20 @@ minetest.register_node("testnodes:plantlike_rooted", {
groups = { dig_immediate = 3 },
})
+minetest.register_node("testnodes:plantlike_rooted_wallmounted", {
+ description = S("Wallmounted Rooted Plantlike Drawtype Test Node"),
+ drawtype = "plantlike_rooted",
+ paramtype = "light",
+ paramtype2 = "wallmounted",
+ tiles = {
+ "testnodes_plantlike_rooted_base.png",
+ "testnodes_plantlike_rooted_base.png",
+ "testnodes_plantlike_rooted_base_side_wallmounted.png" },
+ special_tiles = { "testnodes_plantlike_rooted_wallmounted.png" },
+
+ groups = { dig_immediate = 3 },
+})
+
minetest.register_node("testnodes:plantlike_rooted_waving", {
description = S("Waving Rooted Plantlike Drawtype Test Node"),
drawtype = "plantlike_rooted",
@@ -456,7 +526,6 @@ minetest.register_node("testnodes:airlike", {
walkable = false,
groups = { dig_immediate = 3 },
sunlight_propagates = true,
- inventory_image = fallback_image("testnodes_airlike.png"),
})
-- param2 changes liquid height
@@ -546,10 +615,13 @@ scale("allfaces_optional_waving",
scale("plantlike",
S("Double-sized Plantlike Drawtype Test Node"),
S("Half-sized Plantlike Drawtype Test Node"))
+scale("plantlike_wallmounted",
+ S("Double-sized Wallmounted Plantlike Drawtype Test Node"),
+ S("Half-sized Wallmounted Plantlike Drawtype Test Node"))
scale("torchlike_wallmounted",
S("Double-sized Wallmounted Torchlike Drawtype Test Node"),
S("Half-sized Wallmounted Torchlike Drawtype Test Node"))
-scale("signlike",
+scale("signlike_wallmounted",
S("Double-sized Wallmounted Signlike Drawtype Test Node"),
S("Half-sized Wallmounted Signlike Drawtype Test Node"))
scale("firelike",
diff --git a/games/devtest/mods/testnodes/liquids.lua b/games/devtest/mods/testnodes/liquids.lua
index 3d2ea17f5..be33814af 100644
--- a/games/devtest/mods/testnodes/liquids.lua
+++ b/games/devtest/mods/testnodes/liquids.lua
@@ -40,9 +40,11 @@ for d=0, 8 do
liquid_range = d,
})
+ if d <= 7 then
+
local mod = "^[colorize:#000000:127"
minetest.register_node("testnodes:vliquid_"..d, {
- description = "Test Liquid Source, Viscosity "..d,
+ description = "Test Liquid Source, Viscosity/Resistance "..d,
drawtype = "liquid",
tiles = {"testnodes_liquidsource_r"..d..".png"..mod},
special_tiles = {
@@ -61,7 +63,7 @@ for d=0, 8 do
})
minetest.register_node("testnodes:vliquid_flowing_"..d, {
- description = "Flowing Test Liquid, Viscosity "..d,
+ description = "Flowing Test Liquid, Viscosity/Resistance "..d,
drawtype = "flowingliquid",
tiles = {"testnodes_liquidflowing_r"..d..".png"..mod},
special_tiles = {
@@ -80,4 +82,53 @@ for d=0, 8 do
liquid_viscosity = d,
})
+ mod = "^[colorize:#000000:192"
+ local v = 4
+ minetest.register_node("testnodes:vrliquid_"..d, {
+ description = "Test Liquid Source, Viscosity "..v..", Resistance "..d,
+ drawtype = "liquid",
+ tiles = {"testnodes_liquidsource_r"..d..".png"..mod},
+ special_tiles = {
+ {name = "testnodes_liquidsource_r"..d..".png"..mod, backface_culling = false},
+ {name = "testnodes_liquidsource_r"..d..".png"..mod, backface_culling = true},
+ },
+ use_texture_alpha = "blend",
+ paramtype = "light",
+ walkable = false,
+ pointable = false,
+ diggable = false,
+ buildable_to = true,
+ is_ground_content = false,
+ liquidtype = "source",
+ liquid_alternative_flowing = "testnodes:vrliquid_flowing_"..d,
+ liquid_alternative_source = "testnodes:vrliquid_"..d,
+ liquid_viscosity = v,
+ move_resistance = d,
+ })
+
+ minetest.register_node("testnodes:vrliquid_flowing_"..d, {
+ description = "Flowing Test Liquid, Viscosity "..v..", Resistance "..d,
+ drawtype = "flowingliquid",
+ tiles = {"testnodes_liquidflowing_r"..d..".png"..mod},
+ special_tiles = {
+ {name = "testnodes_liquidflowing_r"..d..".png"..mod, backface_culling = false},
+ {name = "testnodes_liquidflowing_r"..d..".png"..mod, backface_culling = false},
+ },
+ use_texture_alpha = "blend",
+ paramtype = "light",
+ paramtype2 = "flowingliquid",
+ walkable = false,
+ pointable = false,
+ diggable = false,
+ buildable_to = true,
+ is_ground_content = false,
+ liquidtype = "flowing",
+ liquid_alternative_flowing = "testnodes:vrliquid_flowing_"..d,
+ liquid_alternative_source = "testnodes:vrliquid_"..d,
+ liquid_viscosity = v,
+ move_resistance = d,
+ })
+
+ end
+
end
diff --git a/games/devtest/mods/testnodes/properties.lua b/games/devtest/mods/testnodes/properties.lua
index a52cd1d6f..51f703d7c 100644
--- a/games/devtest/mods/testnodes/properties.lua
+++ b/games/devtest/mods/testnodes/properties.lua
@@ -152,6 +152,66 @@ minetest.register_node("testnodes:liquidflowing_nojump", {
post_effect_color = {a = 70, r = 255, g = 0, b = 200},
})
+-- A liquid which doesn't have liquid movement physics (source variant)
+minetest.register_node("testnodes:liquid_noswim", {
+ description = S("No-swim Liquid Source Node"),
+ liquidtype = "source",
+ liquid_range = 1,
+ liquid_viscosity = 0,
+ liquid_alternative_flowing = "testnodes:liquidflowing_noswim",
+ liquid_alternative_source = "testnodes:liquid_noswim",
+ liquid_renewable = false,
+ liquid_move_physics = false,
+ groups = {dig_immediate=3},
+ walkable = false,
+
+ drawtype = "liquid",
+ tiles = {"testnodes_liquidsource.png^[colorize:#FF00FF:127"},
+ special_tiles = {
+ {name = "testnodes_liquidsource.png^[colorize:#FF00FF:127", backface_culling = false},
+ {name = "testnodes_liquidsource.png^[colorize:#FF00FF:127", backface_culling = true},
+ },
+ use_texture_alpha = "blend",
+ paramtype = "light",
+ pointable = false,
+ liquids_pointable = true,
+ buildable_to = true,
+ is_ground_content = false,
+ post_effect_color = {a = 70, r = 255, g = 200, b = 200},
+})
+
+-- A liquid which doen't have liquid movement physics (flowing variant)
+minetest.register_node("testnodes:liquidflowing_noswim", {
+ description = S("No-swim Flowing Liquid Node"),
+ liquidtype = "flowing",
+ liquid_range = 1,
+ liquid_viscosity = 0,
+ liquid_alternative_flowing = "testnodes:liquidflowing_noswim",
+ liquid_alternative_source = "testnodes:liquid_noswim",
+ liquid_renewable = false,
+ liquid_move_physics = false,
+ groups = {dig_immediate=3},
+ walkable = false,
+
+
+ drawtype = "flowingliquid",
+ tiles = {"testnodes_liquidflowing.png^[colorize:#FF00FF:127"},
+ special_tiles = {
+ {name = "testnodes_liquidflowing.png^[colorize:#FF00FF:127", backface_culling = false},
+ {name = "testnodes_liquidflowing.png^[colorize:#FF00FF:127", backface_culling = false},
+ },
+ use_texture_alpha = "blend",
+ paramtype = "light",
+ paramtype2 = "flowingliquid",
+ pointable = false,
+ liquids_pointable = true,
+ buildable_to = true,
+ is_ground_content = false,
+ post_effect_color = {a = 70, r = 255, g = 200, b = 200},
+})
+
+
+
-- Nodes that modify fall damage (various damage modifiers)
for i=-100, 100, 25 do
if i ~= 0 then
@@ -216,6 +276,54 @@ for i=1, 5 do
})
end
+-- Move resistance nodes (various resistance levels)
+for r=0, 7 do
+ if r > 0 then
+ minetest.register_node("testnodes:move_resistance"..r, {
+ description = S("Move-resistant Node (@1)", r),
+ walkable = false,
+ move_resistance = r,
+
+ drawtype = "glasslike",
+ paramtype = "light",
+ sunlight_propagates = true,
+ tiles = { "testnodes_move_resistance.png" },
+ is_ground_content = false,
+ groups = { dig_immediate = 3 },
+ color = { b = 0, g = 255, r = math.floor((r/7)*255), a = 255 },
+ })
+ end
+
+ minetest.register_node("testnodes:move_resistance_liquidlike"..r, {
+ description = S("Move-resistant Node, liquidlike (@1)", r),
+ walkable = false,
+ move_resistance = r,
+ liquid_move_physics = true,
+
+ drawtype = "glasslike",
+ paramtype = "light",
+ sunlight_propagates = true,
+ tiles = { "testnodes_move_resistance.png" },
+ is_ground_content = false,
+ groups = { dig_immediate = 3 },
+ color = { b = 255, g = 0, r = math.floor((r/7)*255), a = 255 },
+ })
+end
+
+minetest.register_node("testnodes:climbable_move_resistance_4", {
+ description = S("Climbable Move-resistant Node (4)"),
+ walkable = false,
+ climbable = true,
+ move_resistance = 4,
+
+ drawtype = "glasslike",
+ paramtype = "light",
+ sunlight_propagates = true,
+ tiles = {"testnodes_climbable_resistance_side.png"},
+ is_ground_content = false,
+ groups = { dig_immediate = 3 },
+})
+
-- By placing something on the node, the node itself will be replaced
minetest.register_node("testnodes:buildable_to", {
description = S("Replacable Node"),
diff --git a/games/devtest/mods/testnodes/settingtypes.txt b/games/devtest/mods/testnodes/settingtypes.txt
deleted file mode 100644
index 7f753bf3e..000000000
--- a/games/devtest/mods/testnodes/settingtypes.txt
+++ /dev/null
@@ -1,4 +0,0 @@
-# If set to true, will show an inventory image for nodes that have no inventory image as of Minetest 5.1.0.
-# This is due to <https://github.com/minetest/minetest/issues/9209>.
-# This is only added to make the items more visible to avoid confusion, but you will no longer see the default inventory images for these items. When you want to test the default inventory image of drawtypes, this should be turned off.
-testnodes_show_fallback_image (Use fallback inventory images) bool false
diff --git a/games/devtest/mods/testnodes/textures.lua b/games/devtest/mods/testnodes/textures.lua
index f6e6a0c2a..dc581b0c7 100644
--- a/games/devtest/mods/testnodes/textures.lua
+++ b/games/devtest/mods/testnodes/textures.lua
@@ -65,3 +65,109 @@ for a=1,#alphas do
})
end
+-- Generate PNG textures
+
+local function mandelbrot(w, h, iterations)
+ local r = {}
+ for y=0, h-1 do
+ for x=0, w-1 do
+ local re = (x - w/2) * 4/w
+ local im = (y - h/2) * 4/h
+ -- zoom in on a nice view
+ re = re / 128 - 0.23
+ im = im / 128 - 0.82
+
+ local px, py = 0, 0
+ local i = 0
+ while px*px + py*py <= 4 and i < iterations do
+ px, py = px*px - py*py + re, 2 * px * py + im
+ i = i + 1
+ end
+ r[w*y+x+1] = i / iterations
+ end
+ end
+ return r
+end
+
+local function gen_checkers(w, h, tile)
+ local r = {}
+ for y=0, h-1 do
+ for x=0, w-1 do
+ local hori = math.floor(x / tile) % 2 == 0
+ local vert = math.floor(y / tile) % 2 == 0
+ r[w*y+x+1] = hori ~= vert and 1 or 0
+ end
+ end
+ return r
+end
+
+local fractal = mandelbrot(512, 512, 128)
+local frac_emb = mandelbrot(64, 64, 64)
+local checker = gen_checkers(512, 512, 32)
+
+local floor = math.floor
+local abs = math.abs
+local data_emb = {}
+local data_mb = {}
+local data_ck = {}
+for i=1, #frac_emb do
+ data_emb[i] = {
+ r = floor(abs(frac_emb[i] * 2 - 1) * 255),
+ g = floor(abs(1 - frac_emb[i]) * 255),
+ b = floor(frac_emb[i] * 255),
+ a = frac_emb[i] < 0.95 and 255 or 0,
+ }
+end
+for i=1, #fractal do
+ data_mb[i] = {
+ r = floor(fractal[i] * 255),
+ g = floor(abs(fractal[i] * 2 - 1) * 255),
+ b = floor(abs(1 - fractal[i]) * 255),
+ a = 255,
+ }
+ data_ck[i] = checker[i] > 0 and "#F80" or "#000"
+end
+
+local textures_path = minetest.get_modpath( minetest.get_current_modname() ) .. "/textures/"
+minetest.safe_file_write(
+ textures_path .. "testnodes_generated_mb.png",
+ minetest.encode_png(512,512,data_mb)
+)
+minetest.safe_file_write(
+ textures_path .. "testnodes_generated_ck.png",
+ minetest.encode_png(512,512,data_ck)
+)
+
+minetest.register_node("testnodes:generated_png_mb", {
+ description = S("Generated Mandelbrot PNG Test Node"),
+ tiles = { "testnodes_generated_mb.png" },
+
+ groups = { dig_immediate = 2 },
+})
+minetest.register_node("testnodes:generated_png_ck", {
+ description = S("Generated Checker PNG Test Node"),
+ tiles = { "testnodes_generated_ck.png" },
+
+ groups = { dig_immediate = 2 },
+})
+
+local png_emb = "[png:" .. minetest.encode_base64(minetest.encode_png(64,64,data_emb))
+
+minetest.register_node("testnodes:generated_png_emb", {
+ description = S("Generated In-Band Mandelbrot PNG Test Node"),
+ tiles = { png_emb },
+
+ groups = { dig_immediate = 2 },
+})
+minetest.register_node("testnodes:generated_png_src_emb", {
+ description = S("Generated In-Band Source Blit Mandelbrot PNG Test Node"),
+ tiles = { png_emb .. "^testnodes_damage_neg.png" },
+
+ groups = { dig_immediate = 2 },
+})
+minetest.register_node("testnodes:generated_png_dst_emb", {
+ description = S("Generated In-Band Dest Blit Mandelbrot PNG Test Node"),
+ tiles = { "testnodes_generated_ck.png^" .. png_emb },
+
+ groups = { dig_immediate = 2 },
+})
diff --git a/games/devtest/mods/testnodes/textures/testnodes_climbable_resistance_side.png b/games/devtest/mods/testnodes/textures/testnodes_climbable_resistance_side.png
new file mode 100644
index 000000000..be01583e6
--- /dev/null
+++ b/games/devtest/mods/testnodes/textures/testnodes_climbable_resistance_side.png
Binary files differ
diff --git a/games/devtest/mods/testnodes/textures/testnodes_move_resistance.png b/games/devtest/mods/testnodes/textures/testnodes_move_resistance.png
new file mode 100644
index 000000000..cac3944bf
--- /dev/null
+++ b/games/devtest/mods/testnodes/textures/testnodes_move_resistance.png
Binary files differ
diff --git a/games/devtest/mods/testnodes/textures/testnodes_plantlike_rooted_base_side_wallmounted.png b/games/devtest/mods/testnodes/textures/testnodes_plantlike_rooted_base_side_wallmounted.png
new file mode 100644
index 000000000..b0be8d077
--- /dev/null
+++ b/games/devtest/mods/testnodes/textures/testnodes_plantlike_rooted_base_side_wallmounted.png
Binary files differ
diff --git a/games/devtest/mods/testnodes/textures/testnodes_plantlike_rooted_wallmounted.png b/games/devtest/mods/testnodes/textures/testnodes_plantlike_rooted_wallmounted.png
new file mode 100644
index 000000000..421466407
--- /dev/null
+++ b/games/devtest/mods/testnodes/textures/testnodes_plantlike_rooted_wallmounted.png
Binary files differ
diff --git a/games/devtest/mods/testnodes/textures/testnodes_plantlike_wallmounted.png b/games/devtest/mods/testnodes/textures/testnodes_plantlike_wallmounted.png
new file mode 100644
index 000000000..c89b29e30
--- /dev/null
+++ b/games/devtest/mods/testnodes/textures/testnodes_plantlike_wallmounted.png
Binary files differ
diff --git a/games/devtest/mods/testtools/README.md b/games/devtest/mods/testtools/README.md
index 9cfe29ea4..a1eb95ed7 100644
--- a/games/devtest/mods/testtools/README.md
+++ b/games/devtest/mods/testtools/README.md
@@ -33,6 +33,13 @@ Usage:
* Punch node: Make it fall
* Place: Try to teleport up to 2 units upwards, then make it fall
+## Node Meta Editor
+Edit and view metadata of nodes.
+
+Usage:
+
+* Punch: Open node metadata editor
+
## Entity Rotator
Changes the entity rotation (with `set_rotation`).
@@ -90,6 +97,13 @@ Usage:
* Place: Increase move distance
* Sneak+place: Decrease move distance
+## Children Getter
+Shows list of objects that are attached to an object (aka "children") in chat.
+
+Usage:
+* Punch object: Show children of punched object
+* Punch air: Show your own children
+
## Entity Visual Scaler
Change visual size of entities
@@ -97,3 +111,10 @@ Usage:
* Punch entity to increase visual size
* Sneak+punch entity to decrease visual size
+
+## Light Tool
+Show light level of node.
+
+Usage:
+* Punch: Show light info of node in front of the punched node's side
+* Place: Show light info of the node that you touched
diff --git a/games/devtest/mods/testtools/init.lua b/games/devtest/mods/testtools/init.lua
index d578b264a..1041acdeb 100644
--- a/games/devtest/mods/testtools/init.lua
+++ b/games/devtest/mods/testtools/init.lua
@@ -3,8 +3,6 @@ local F = minetest.formspec_escape
dofile(minetest.get_modpath("testtools") .. "/light.lua")
--- TODO: Add a Node Metadata tool
-
minetest.register_tool("testtools:param2tool", {
description = S("Param2 Tool") .."\n"..
S("Modify param2 value of nodes") .."\n"..
@@ -111,25 +109,6 @@ minetest.register_tool("testtools:node_setter", {
end,
})
-minetest.register_on_player_receive_fields(function(player, formname, fields)
- if formname == "testtools:node_setter" then
- local playername = player:get_player_name()
- local witem = player:get_wielded_item()
- if witem:get_name() == "testtools:node_setter" then
- if fields.nodename and fields.param2 then
- local param2 = tonumber(fields.param2)
- if not param2 then
- return
- end
- local meta = witem:get_meta()
- meta:set_string("node", fields.nodename)
- meta:set_int("node_param2", param2)
- player:set_wielded_item(witem)
- end
- end
- end
-end)
-
minetest.register_tool("testtools:remover", {
description = S("Remover") .."\n"..
S("Punch: Remove pointed node or object"),
@@ -634,6 +613,54 @@ minetest.register_tool("testtools:object_attacher", {
end,
})
+local function print_object(obj)
+ if obj:is_player() then
+ return "player '"..obj:get_player_name().."'"
+ elseif obj:get_luaentity() then
+ return "LuaEntity '"..obj:get_luaentity().name.."'"
+ else
+ return "object"
+ end
+end
+
+minetest.register_tool("testtools:children_getter", {
+ description = S("Children Getter") .."\n"..
+ S("Shows list of objects attached to object") .."\n"..
+ S("Punch object to show its 'children'") .."\n"..
+ S("Punch air to show your own 'children'"),
+ inventory_image = "testtools_children_getter.png",
+ groups = { testtool = 1, disable_repair = 1 },
+ on_use = function(itemstack, user, pointed_thing)
+ if user and user:is_player() then
+ local name = user:get_player_name()
+ local selected_object
+ local self_name
+ if pointed_thing.type == "object" then
+ selected_object = pointed_thing.ref
+ elseif pointed_thing.type == "nothing" then
+ selected_object = user
+ else
+ return
+ end
+ self_name = print_object(selected_object)
+ local children = selected_object:get_children()
+ local ret = ""
+ for c=1, #children do
+ ret = ret .. "* " .. print_object(children[c])
+ if c < #children then
+ ret = ret .. "\n"
+ end
+ end
+ if ret == "" then
+ ret = S("No children attached to @1.", self_name)
+ else
+ ret = S("Children of @1:", self_name) .. "\n" .. ret
+ end
+ minetest.chat_send_player(user:get_player_name(), ret)
+ end
+ end,
+})
+
-- Use loadstring to parse param as a Lua value
local function use_loadstring(param, player)
-- For security reasons, require 'server' priv, just in case
@@ -666,6 +693,68 @@ local function use_loadstring(param, player)
return true, errOrResult
end
+-- Node Meta Editor
+local node_meta_posses = {}
+local node_meta_latest_keylist = {}
+
+local function show_node_meta_formspec(user, pos, key, value, keylist)
+ local textlist
+ if keylist then
+ textlist = "textlist[0,0.5;2.5,6.5;keylist;"..keylist.."]"
+ else
+ textlist = ""
+ end
+ minetest.show_formspec(user:get_player_name(),
+ "testtools:node_meta_editor",
+ "size[15,9]"..
+ "label[0,0;"..F(S("Current keys:")).."]"..
+ textlist..
+ "field[3,0.5;12,1;key;"..F(S("Key"))..";"..F(key).."]"..
+ "textarea[3,1.5;12,6;value;"..F(S("Value (use empty value to delete key)"))..";"..F(value).."]"..
+ "button[0,8;3,1;get;"..F(S("Get value")).."]"..
+ "button[4,8;3,1;set;"..F(S("Set value")).."]"..
+ "label[0,7.2;"..F(S("pos = @1", minetest.pos_to_string(pos))).."]")
+end
+
+local function get_node_meta_keylist(meta, playername, escaped)
+ local keys = {}
+ local ekeys = {}
+ local mtable = meta:to_table()
+ for k,_ in pairs(mtable.fields) do
+ table.insert(keys, k)
+ if escaped then
+ table.insert(ekeys, F(k))
+ else
+ table.insert(ekeys, k)
+ end
+ end
+ if playername then
+ node_meta_latest_keylist[playername] = keys
+ end
+ return table.concat(ekeys, ",")
+end
+
+minetest.register_tool("testtools:node_meta_editor", {
+ description = S("Node Meta Editor") .. "\n" ..
+ S("Place: Edit node metadata"),
+ inventory_image = "testtools_node_meta_editor.png",
+ groups = { testtool = 1, disable_repair = 1 },
+ on_place = function(itemstack, user, pointed_thing)
+ if pointed_thing.type ~= "node" then
+ return itemstack
+ end
+ if not user:is_player() then
+ return itemstack
+ end
+ local pos = pointed_thing.under
+ node_meta_posses[user:get_player_name()] = pos
+ local meta = minetest.get_meta(pos)
+ local inv = meta:get_inventory()
+ show_node_meta_formspec(user, pos, "", "", get_node_meta_keylist(meta, user:get_player_name(), true))
+ return itemstack
+ end,
+})
+
minetest.register_on_player_receive_fields(function(player, formname, fields)
if not (player and player:is_player()) then
return
@@ -728,5 +817,70 @@ minetest.register_on_player_receive_fields(function(player, formname, fields)
editor_formspec(name, selected_objects[name], prop_to_string(props[key]), sel)
return
end
+ elseif formname == "testtools:node_setter" then
+ local playername = player:get_player_name()
+ local witem = player:get_wielded_item()
+ if witem:get_name() == "testtools:node_setter" then
+ if fields.nodename and fields.param2 then
+ local param2 = tonumber(fields.param2)
+ if not param2 then
+ return
+ end
+ local meta = witem:get_meta()
+ meta:set_string("node", fields.nodename)
+ meta:set_int("node_param2", param2)
+ player:set_wielded_item(witem)
+ end
+ end
+ elseif formname == "testtools:node_meta_editor" then
+ local name = player:get_player_name()
+ local pos = node_meta_posses[name]
+ if fields.keylist then
+ local evnt = minetest.explode_textlist_event(fields.keylist)
+ if evnt.type == "DCL" or evnt.type == "CHG" then
+ local keylist_table = node_meta_latest_keylist[name]
+ if not pos then
+ return
+ end
+ local meta = minetest.get_meta(pos)
+ if not keylist_table then
+ return
+ end
+ if #keylist_table == 0 then
+ return
+ end
+ local key = keylist_table[evnt.index]
+ local value = meta:get_string(key)
+ local keylist_escaped = {}
+ for k,v in pairs(keylist_table) do
+ keylist_escaped[k] = F(v)
+ end
+ local keylist = table.concat(keylist_escaped, ",")
+ show_node_meta_formspec(player, pos, key, value, keylist)
+ return
+ end
+ elseif fields.key and fields.key ~= "" and fields.value then
+ if not pos then
+ return
+ end
+ local meta = minetest.get_meta(pos)
+ if fields.get then
+ local value = meta:get_string(fields.key)
+ show_node_meta_formspec(player, pos, fields.key, value,
+ get_node_meta_keylist(meta, name, true))
+ return
+ elseif fields.set then
+ meta:set_string(fields.key, fields.value)
+ show_node_meta_formspec(player, pos, fields.key, fields.value,
+ get_node_meta_keylist(meta, name, true))
+ return
+ end
+ end
end
end)
+
+minetest.register_on_leaveplayer(function(player)
+ local name = player:get_player_name()
+ node_meta_latest_keylist[name] = nil
+ node_meta_posses[name] = nil
+end)
diff --git a/games/devtest/mods/testtools/light.lua b/games/devtest/mods/testtools/light.lua
index a9458ca6b..afca9a489 100644
--- a/games/devtest/mods/testtools/light.lua
+++ b/games/devtest/mods/testtools/light.lua
@@ -1,22 +1,37 @@
local S = minetest.get_translator("testtools")
-minetest.register_tool("testtools:lighttool", {
- description = S("Light tool"),
- inventory_image = "testtools_lighttool.png",
- groups = { testtool = 1, disable_repair = 1 },
- on_use = function(itemstack, user, pointed_thing)
- local pos = pointed_thing.above
+local function get_func(is_place)
+ return function(itemstack, user, pointed_thing)
+ local pos
+ if is_place then
+ pos = pointed_thing.under
+ else
+ pos = pointed_thing.above
+ end
if pointed_thing.type ~= "node" or not pos then
return
end
local node = minetest.get_node(pos)
+ local pstr = minetest.pos_to_string(pos)
local time = minetest.get_timeofday()
local sunlight = minetest.get_natural_light(pos)
local artificial = minetest.get_artificial_light(node.param1)
- local message = ("param1 0x%02x | time %.5f | sunlight %d | artificial %d")
- :format(node.param1, time, sunlight, artificial)
+ local message = ("pos=%s | param1=0x%02x | " ..
+ "sunlight=%d | artificial=%d | timeofday=%.5f" )
+ :format(pstr, node.param1, sunlight, artificial, time)
minetest.chat_send_player(user:get_player_name(), message)
end
+end
+
+minetest.register_tool("testtools:lighttool", {
+ description = S("Light Tool") .. "\n" ..
+ S("Show light values of node") .. "\n" ..
+ S("Punch: Light of node above touched node") .. "\n" ..
+ S("Place: Light of touched node itself"),
+ inventory_image = "testtools_lighttool.png",
+ groups = { testtool = 1, disable_repair = 1 },
+ on_use = get_func(false),
+ on_place = get_func(true),
})
diff --git a/games/devtest/mods/testtools/textures/testtools_children_getter.png b/games/devtest/mods/testtools/textures/testtools_children_getter.png
new file mode 100644
index 000000000..b7fa34025
--- /dev/null
+++ b/games/devtest/mods/testtools/textures/testtools_children_getter.png
Binary files differ
diff --git a/games/devtest/mods/testtools/textures/testtools_node_meta_editor.png b/games/devtest/mods/testtools/textures/testtools_node_meta_editor.png
new file mode 100644
index 000000000..89eafd65c
--- /dev/null
+++ b/games/devtest/mods/testtools/textures/testtools_node_meta_editor.png
Binary files differ
diff --git a/games/devtest/mods/unittests/crafting.lua b/games/devtest/mods/unittests/crafting.lua
index eff13ce09..8c16d3efb 100644
--- a/games/devtest/mods/unittests/crafting.lua
+++ b/games/devtest/mods/unittests/crafting.lua
@@ -1,6 +1,7 @@
+dofile(core.get_modpath(core.get_current_modname()) .. "/crafting_prepare.lua")
+
-- Test minetest.clear_craft function
local function test_clear_craft()
- minetest.log("info", "[unittests] Testing minetest.clear_craft")
-- Clearing by output
minetest.register_craft({
output = "foo",
@@ -22,11 +23,10 @@ local function test_clear_craft()
minetest.clear_craft({recipe={{"foo", "bar"}}})
assert(minetest.get_all_craft_recipes("foo") == nil)
end
+unittests.register("test_clear_craft", test_clear_craft)
-- Test minetest.get_craft_result function
local function test_get_craft_result()
- minetest.log("info", "[unittests] Testing minetest.get_craft_result")
-
-- normal
local input = {
method = "normal",
@@ -107,14 +107,6 @@ local function test_get_craft_result()
assert(output.item)
minetest.log("info", "[unittests] unrepairable tool crafting output.item:to_table(): "..dump(output.item:to_table()))
-- unrepairable tool must not yield any output
- assert(output.item:get_name() == "")
-
+ assert(output.item:is_empty())
end
-
-function unittests.test_crafting()
- test_clear_craft()
- test_get_craft_result()
- minetest.log("action", "[unittests] Crafting tests passed!")
- return true
-end
-
+unittests.register("test_get_craft_result", test_get_craft_result)
diff --git a/games/devtest/mods/unittests/init.lua b/games/devtest/mods/unittests/init.lua
index 12c67f78b..0754d507f 100644
--- a/games/devtest/mods/unittests/init.lua
+++ b/games/devtest/mods/unittests/init.lua
@@ -1,18 +1,199 @@
unittests = {}
+unittests.list = {}
+
+-- name: Name of the test
+-- func:
+-- for sync: function(player, pos), should error on failure
+-- for async: function(callback, player, pos)
+-- MUST call callback() or callback("error msg") in case of error once test is finished
+-- this means you cannot use assert() in the test implementation
+-- opts: {
+-- player = false, -- Does test require a player?
+-- map = false, -- Does test require map access?
+-- async = false, -- Does the test run asynchronously? (read notes above!)
+-- }
+function unittests.register(name, func, opts)
+ local def = table.copy(opts or {})
+ def.name = name
+ def.func = func
+ table.insert(unittests.list, def)
+end
+
+function unittests.on_finished(all_passed)
+ -- free to override
+end
+
+-- Calls invoke with a callback as argument
+-- Suspends coroutine until that callback is called
+-- Return values are passed through
+local function await(invoke)
+ local co = coroutine.running()
+ assert(co)
+ local called_early = true
+ invoke(function(...)
+ if called_early == true then
+ called_early = {...}
+ else
+ coroutine.resume(co, ...)
+ end
+ end)
+ if called_early ~= true then
+ -- callback was already called before yielding
+ return unpack(called_early)
+ end
+ called_early = nil
+ return coroutine.yield()
+end
+
+function unittests.run_one(idx, counters, out_callback, player, pos)
+ local def = unittests.list[idx]
+ if not def.player then
+ player = nil
+ elseif player == nil then
+ out_callback(false)
+ return false
+ end
+ if not def.map then
+ pos = nil
+ elseif pos == nil then
+ out_callback(false)
+ return false
+ end
+
+ local tbegin = core.get_us_time()
+ local function done(status, err)
+ local tend = core.get_us_time()
+ local ms_taken = (tend - tbegin) / 1000
+
+ if not status then
+ core.log("error", err)
+ end
+ print(string.format("[%s] %s - %dms",
+ status and "PASS" or "FAIL", def.name, ms_taken))
+ counters.time = counters.time + ms_taken
+ counters.total = counters.total + 1
+ if status then
+ counters.passed = counters.passed + 1
+ end
+ end
+
+ if def.async then
+ core.log("info", "[unittest] running " .. def.name .. " (async)")
+ def.func(function(err)
+ done(err == nil, err)
+ out_callback(true)
+ end, player, pos)
+ else
+ core.log("info", "[unittest] running " .. def.name)
+ local status, err = pcall(def.func, player, pos)
+ done(status, err)
+ out_callback(true)
+ end
+
+ return true
+end
+
+local function wait_for_player(callback)
+ if #core.get_connected_players() > 0 then
+ return callback(core.get_connected_players()[1])
+ end
+ local first = true
+ core.register_on_joinplayer(function(player)
+ if first then
+ callback(player)
+ first = false
+ end
+ end)
+end
+
+local function wait_for_map(player, callback)
+ local check = function()
+ if core.get_node_or_nil(player:get_pos()) ~= nil then
+ callback()
+ else
+ minetest.after(0, check)
+ end
+ end
+ check()
+end
+
+function unittests.run_all()
+ -- This runs in a coroutine so it uses await().
+ local counters = { time = 0, total = 0, passed = 0 }
+
+ -- Run standalone tests first
+ for idx = 1, #unittests.list do
+ local def = unittests.list[idx]
+ def.done = await(function(cb)
+ unittests.run_one(idx, counters, cb, nil, nil)
+ end)
+ end
+
+ -- Wait for a player to join, run tests that require a player
+ local player = await(wait_for_player)
+ for idx = 1, #unittests.list do
+ local def = unittests.list[idx]
+ if not def.done then
+ def.done = await(function(cb)
+ unittests.run_one(idx, counters, cb, player, nil)
+ end)
+ end
+ end
+
+ -- Wait for the world to generate/load, run tests that require map access
+ await(function(cb)
+ wait_for_map(player, cb)
+ end)
+ local pos = vector.round(player:get_pos())
+ for idx = 1, #unittests.list do
+ local def = unittests.list[idx]
+ if not def.done then
+ def.done = await(function(cb)
+ unittests.run_one(idx, counters, cb, player, pos)
+ end)
+ end
+ end
+
+ -- Print stats
+ assert(#unittests.list == counters.total)
+ print(string.rep("+", 80))
+ print(string.format("Unit Test Results: %s",
+ counters.total == counters.passed and "PASSED" or "FAILED"))
+ print(string.format(" %d / %d failed tests.",
+ counters.total - counters.passed, counters.total))
+ print(string.format(" Testing took %dms total.", counters.time))
+ print(string.rep("+", 80))
+ unittests.on_finished(counters.total == counters.passed)
+ return counters.total == counters.passed
+end
+
+--------------
+
local modpath = minetest.get_modpath("unittests")
-dofile(modpath .. "/random.lua")
+dofile(modpath .. "/misc.lua")
dofile(modpath .. "/player.lua")
-dofile(modpath .. "/crafting_prepare.lua")
dofile(modpath .. "/crafting.lua")
dofile(modpath .. "/itemdescription.lua")
-if minetest.settings:get_bool("devtest_unittests_autostart", false) then
- unittests.test_random()
- unittests.test_crafting()
- unittests.test_short_desc()
- minetest.register_on_joinplayer(function(player)
- unittests.test_player(player)
+--------------
+
+if core.settings:get_bool("devtest_unittests_autostart", false) then
+ core.after(0, function()
+ coroutine.wrap(unittests.run_all)()
end)
+else
+ minetest.register_chatcommand("unittests", {
+ privs = {basic_privs=true},
+ description = "Runs devtest unittests (may modify player or map state)",
+ func = function(name, param)
+ unittests.on_finished = function(ok)
+ core.chat_send_player(name,
+ (ok and "All tests passed." or "There were test failures.") ..
+ " Check the console for detailed output.")
+ end
+ coroutine.wrap(unittests.run_all)()
+ return true, ""
+ end,
+ })
end
-
diff --git a/games/devtest/mods/unittests/itemdescription.lua b/games/devtest/mods/unittests/itemdescription.lua
index d6ee6551a..dc62de7f0 100644
--- a/games/devtest/mods/unittests/itemdescription.lua
+++ b/games/devtest/mods/unittests/itemdescription.lua
@@ -25,7 +25,7 @@ minetest.register_chatcommand("item_description", {
end
})
-function unittests.test_short_desc()
+local function test_short_desc()
local function get_short_description(item)
return ItemStack(item):get_short_description()
end
@@ -49,3 +49,4 @@ function unittests.test_short_desc()
return true
end
+unittests.register("test_short_desc", test_short_desc)
diff --git a/games/devtest/mods/unittests/misc.lua b/games/devtest/mods/unittests/misc.lua
new file mode 100644
index 000000000..cf4f92cfa
--- /dev/null
+++ b/games/devtest/mods/unittests/misc.lua
@@ -0,0 +1,38 @@
+local function test_random()
+ -- Try out PseudoRandom
+ local pseudo = PseudoRandom(13)
+ assert(pseudo:next() == 22290)
+ assert(pseudo:next() == 13854)
+end
+unittests.register("test_random", test_random)
+
+local function test_dynamic_media(cb, player)
+ if core.get_player_information(player:get_player_name()).protocol_version < 40 then
+ core.log("warning", "test_dynamic_media: Client too old, skipping test.")
+ return cb()
+ end
+
+ -- Check that the client acknowledges media transfers
+ local path = core.get_worldpath() .. "/test_media.obj"
+ local f = io.open(path, "w")
+ f:write("# contents don't matter\n")
+ f:close()
+
+ local call_ok = false
+ local ok = core.dynamic_add_media({
+ filepath = path,
+ to_player = player:get_player_name(),
+ }, function(name)
+ if not call_ok then
+ cb("impossible condition")
+ end
+ cb()
+ end)
+ if not ok then
+ return cb("dynamic_add_media() returned error")
+ end
+ call_ok = true
+
+ -- if the callback isn't called this test will just hang :shrug:
+end
+unittests.register("test_dynamic_media", test_dynamic_media, {async=true, player=true})
diff --git a/games/devtest/mods/unittests/player.lua b/games/devtest/mods/unittests/player.lua
index 4a681310d..fa0557960 100644
--- a/games/devtest/mods/unittests/player.lua
+++ b/games/devtest/mods/unittests/player.lua
@@ -2,6 +2,21 @@
-- HP Change Reasons
--
local expect = nil
+minetest.register_on_player_hpchange(function(player, hp, reason)
+ if expect == nil then
+ return
+ end
+
+ for key, value in pairs(reason) do
+ assert(expect[key] == value)
+ end
+ for key, value in pairs(expect) do
+ assert(reason[key] == value)
+ end
+
+ expect = nil
+end)
+
local function run_hpchangereason_tests(player)
local old_hp = player:get_hp()
@@ -20,7 +35,11 @@ local function run_hpchangereason_tests(player)
player:set_hp(old_hp)
end
+unittests.register("test_hpchangereason", run_hpchangereason_tests, {player=true})
+--
+-- Player meta
+--
local function run_player_meta_tests(player)
local meta = player:get_meta()
meta:set_string("foo", "bar")
@@ -48,29 +67,4 @@ local function run_player_meta_tests(player)
assert(meta:get_string("foo") == "")
assert(meta:equals(meta2))
end
-
-function unittests.test_player(player)
- minetest.register_on_player_hpchange(function(player, hp, reason)
- if not expect then
- return
- end
-
- for key, value in pairs(reason) do
- assert(expect[key] == value)
- end
-
- for key, value in pairs(expect) do
- assert(reason[key] == value)
- end
-
- expect = nil
- end)
-
- run_hpchangereason_tests(player)
- run_player_meta_tests(player)
- local msg = "Player tests passed for player '"..player:get_player_name().."'!"
- minetest.chat_send_all(msg)
- minetest.log("action", "[unittests] "..msg)
- return true
-end
-
+unittests.register("test_player_meta", run_player_meta_tests, {player=true})
diff --git a/games/devtest/mods/unittests/random.lua b/games/devtest/mods/unittests/random.lua
deleted file mode 100644
index f94f0a88e..000000000
--- a/games/devtest/mods/unittests/random.lua
+++ /dev/null
@@ -1,10 +0,0 @@
-function unittests.test_random()
- -- Try out PseudoRandom
- minetest.log("action", "[unittests] Testing PseudoRandom ...")
- local pseudo = PseudoRandom(13)
- assert(pseudo:next() == 22290)
- assert(pseudo:next() == 13854)
- minetest.log("action", "[unittests] PseudoRandom test passed!")
- return true
-end
-
diff --git a/games/devtest/mods/util_commands/init.lua b/games/devtest/mods/util_commands/init.lua
index ca5dca2d9..79acaa0d0 100644
--- a/games/devtest/mods/util_commands/init.lua
+++ b/games/devtest/mods/util_commands/init.lua
@@ -114,6 +114,59 @@ minetest.register_chatcommand("detach", {
end,
})
+minetest.register_chatcommand("use_tool", {
+ params = "(dig <group> <leveldiff>) | (hit <damage_group> <time_from_last_punch>) [<uses>]",
+ description = "Apply tool wear a number of times, as if it were used for digging",
+ func = function(name, param)
+ local player = minetest.get_player_by_name(name)
+ if not player then
+ return false, "No player."
+ end
+ local mode, group, level, uses = string.match(param, "([a-z]+) ([a-z0-9]+) (-?%d+) (%d+)")
+ if not mode then
+ mode, group, level = string.match(param, "([a-z]+) ([a-z0-9]+) (-?%d+)")
+ uses = 1
+ end
+ if not mode or not group or not level then
+ return false
+ end
+ if mode ~= "dig" and mode ~= "hit" then
+ return false
+ end
+ local tool = player:get_wielded_item()
+ local caps = tool:get_tool_capabilities()
+ if not caps or tool:get_count() == 0 then
+ return false, "No tool in hand."
+ end
+ local actual_uses = 0
+ for u=1, uses do
+ local wear = tool:get_wear()
+ local dp
+ if mode == "dig" then
+ dp = minetest.get_dig_params({[group]=3, level=level}, caps, wear)
+ else
+ dp = minetest.get_hit_params({[group]=100}, caps, level, wear)
+ end
+ tool:add_wear(dp.wear)
+ actual_uses = actual_uses + 1
+ if tool:get_count() == 0 then
+ break
+ end
+ end
+ player:set_wielded_item(tool)
+ if tool:get_count() == 0 then
+ return true, string.format("Tool used %d time(s). "..
+ "The tool broke after %d use(s).", uses, actual_uses)
+ else
+ local wear = tool:get_wear()
+ return true, string.format("Tool used %d time(s). "..
+ "Final wear=%d", uses, wear)
+ end
+ end,
+})
+
+
+
-- Use this to test waypoint capabilities
minetest.register_chatcommand("test_waypoints", {
params = "[change_immediate]",
diff --git a/games/devtest/settingtypes.txt b/games/devtest/settingtypes.txt
index 40ee5845b..c4365643e 100644
--- a/games/devtest/settingtypes.txt
+++ b/games/devtest/settingtypes.txt
@@ -30,8 +30,3 @@ devtest_dungeon_mossycobble (Generate mossy cobblestone) bool false
# If enabled, some very basic biomes will be registered.
devtest_register_biomes (Register biomes) bool true
-
-# If set to true, will show an inventory image for nodes that have no inventory image as of Minetest 5.1.0.
-# This is due to <https://github.com/minetest/minetest/issues/9209>.
-# This is only added to make the items more visible to avoid confusion, but you will no longer see the default inventory images for these items. When you want to test the default inventory image of drawtypes, this should be turned off.
-testnodes_show_fallback_image (Use fallback inventory images) bool false
diff --git a/lib/bitop/CMakeLists.txt b/lib/bitop/CMakeLists.txt
new file mode 100644
index 000000000..03b4d0b96
--- /dev/null
+++ b/lib/bitop/CMakeLists.txt
@@ -0,0 +1,4 @@
+add_library(bitop bit.c)
+target_link_libraries(bitop)
+
+include_directories(${LUA_INCLUDE_DIR})
diff --git a/lib/bitop/bit.c b/lib/bitop/bit.c
new file mode 100644
index 000000000..f23c31a4c
--- /dev/null
+++ b/lib/bitop/bit.c
@@ -0,0 +1,189 @@
+/*
+** Lua BitOp -- a bit operations library for Lua 5.1/5.2.
+** http://bitop.luajit.org/
+**
+** Copyright (C) 2008-2012 Mike Pall. All rights reserved.
+**
+** 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.
+**
+** [ MIT license: http://www.opensource.org/licenses/mit-license.php ]
+*/
+
+#include "bit.h"
+
+#define LUA_BITOP_VERSION "1.0.2"
+
+#define LUA_LIB
+#include "lauxlib.h"
+
+#ifdef _MSC_VER
+/* MSVC is stuck in the last century and doesn't have C99's stdint.h. */
+typedef __int32 int32_t;
+typedef unsigned __int32 uint32_t;
+typedef unsigned __int64 uint64_t;
+#else
+#include <stdint.h>
+#endif
+
+typedef int32_t SBits;
+typedef uint32_t UBits;
+
+typedef union {
+ lua_Number n;
+#ifdef LUA_NUMBER_DOUBLE
+ uint64_t b;
+#else
+ UBits b;
+#endif
+} BitNum;
+
+/* Convert argument to bit type. */
+static UBits barg(lua_State *L, int idx)
+{
+ BitNum bn;
+ UBits b;
+#if LUA_VERSION_NUM < 502
+ bn.n = lua_tonumber(L, idx);
+#else
+ bn.n = luaL_checknumber(L, idx);
+#endif
+#if defined(LUA_NUMBER_DOUBLE)
+ bn.n += 6755399441055744.0; /* 2^52+2^51 */
+#ifdef SWAPPED_DOUBLE
+ b = (UBits)(bn.b >> 32);
+#else
+ b = (UBits)bn.b;
+#endif
+#elif defined(LUA_NUMBER_INT) || defined(LUA_NUMBER_LONG) || \
+ defined(LUA_NUMBER_LONGLONG) || defined(LUA_NUMBER_LONG_LONG) || \
+ defined(LUA_NUMBER_LLONG)
+ if (sizeof(UBits) == sizeof(lua_Number))
+ b = bn.b;
+ else
+ b = (UBits)(SBits)bn.n;
+#elif defined(LUA_NUMBER_FLOAT)
+#error "A 'float' lua_Number type is incompatible with this library"
+#else
+#error "Unknown number type, check LUA_NUMBER_* in luaconf.h"
+#endif
+#if LUA_VERSION_NUM < 502
+ if (b == 0 && !lua_isnumber(L, idx)) {
+ luaL_typerror(L, idx, "number");
+ }
+#endif
+ return b;
+}
+
+/* Return bit type. */
+#define BRET(b) lua_pushnumber(L, (lua_Number)(SBits)(b)); return 1;
+
+static int bit_tobit(lua_State *L) { BRET(barg(L, 1)) }
+static int bit_bnot(lua_State *L) { BRET(~barg(L, 1)) }
+
+#define BIT_OP(func, opr) \
+ static int func(lua_State *L) { int i; UBits b = barg(L, 1); \
+ for (i = lua_gettop(L); i > 1; i--) b opr barg(L, i); BRET(b) }
+BIT_OP(bit_band, &=)
+BIT_OP(bit_bor, |=)
+BIT_OP(bit_bxor, ^=)
+
+#define bshl(b, n) (b << n)
+#define bshr(b, n) (b >> n)
+#define bsar(b, n) ((SBits)b >> n)
+#define brol(b, n) ((b << n) | (b >> (32-n)))
+#define bror(b, n) ((b << (32-n)) | (b >> n))
+#define BIT_SH(func, fn) \
+ static int func(lua_State *L) { \
+ UBits b = barg(L, 1); UBits n = barg(L, 2) & 31; BRET(fn(b, n)) }
+BIT_SH(bit_lshift, bshl)
+BIT_SH(bit_rshift, bshr)
+BIT_SH(bit_arshift, bsar)
+BIT_SH(bit_rol, brol)
+BIT_SH(bit_ror, bror)
+
+static int bit_bswap(lua_State *L)
+{
+ UBits b = barg(L, 1);
+ b = (b >> 24) | ((b >> 8) & 0xff00) | ((b & 0xff00) << 8) | (b << 24);
+ BRET(b)
+}
+
+static int bit_tohex(lua_State *L)
+{
+ UBits b = barg(L, 1);
+ SBits n = lua_isnone(L, 2) ? 8 : (SBits)barg(L, 2);
+ const char *hexdigits = "0123456789abcdef";
+ char buf[8];
+ int i;
+ if (n < 0) { n = -n; hexdigits = "0123456789ABCDEF"; }
+ if (n > 8) n = 8;
+ for (i = (int)n; --i >= 0; ) { buf[i] = hexdigits[b & 15]; b >>= 4; }
+ lua_pushlstring(L, buf, (size_t)n);
+ return 1;
+}
+
+static const struct luaL_Reg bit_funcs[] = {
+ { "tobit", bit_tobit },
+ { "bnot", bit_bnot },
+ { "band", bit_band },
+ { "bor", bit_bor },
+ { "bxor", bit_bxor },
+ { "lshift", bit_lshift },
+ { "rshift", bit_rshift },
+ { "arshift", bit_arshift },
+ { "rol", bit_rol },
+ { "ror", bit_ror },
+ { "bswap", bit_bswap },
+ { "tohex", bit_tohex },
+ { NULL, NULL }
+};
+
+/* Signed right-shifts are implementation-defined per C89/C99.
+** But the de facto standard are arithmetic right-shifts on two's
+** complement CPUs. This behaviour is required here, so test for it.
+*/
+#define BAD_SAR (bsar(-8, 2) != (SBits)-2)
+
+LUALIB_API int luaopen_bit(lua_State *L)
+{
+ UBits b;
+ lua_pushnumber(L, (lua_Number)1437217655L);
+ b = barg(L, -1);
+ if (b != (UBits)1437217655L || BAD_SAR) { /* Perform a simple self-test. */
+ const char *msg = "compiled with incompatible luaconf.h";
+#ifdef LUA_NUMBER_DOUBLE
+#ifdef _WIN32
+ if (b == (UBits)1610612736L)
+ msg = "use D3DCREATE_FPU_PRESERVE with DirectX";
+#endif
+ if (b == (UBits)1127743488L)
+ msg = "not compiled with SWAPPED_DOUBLE";
+#endif
+ if (BAD_SAR)
+ msg = "arithmetic right-shift broken";
+ luaL_error(L, "bit library self-test failed (%s)", msg);
+ }
+#if LUA_VERSION_NUM < 502
+ luaL_register(L, "bit", bit_funcs);
+#else
+ luaL_newlib(L, bit_funcs);
+#endif
+ return 1;
+}
diff --git a/lib/bitop/bit.h b/lib/bitop/bit.h
new file mode 100644
index 000000000..3e5845ee5
--- /dev/null
+++ b/lib/bitop/bit.h
@@ -0,0 +1,34 @@
+/*
+** Lua BitOp -- a bit operations library for Lua 5.1/5.2.
+** http://bitop.luajit.org/
+**
+** Copyright (C) 2008-2012 Mike Pall. All rights reserved.
+**
+** 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.
+**
+** [ MIT license: http://www.opensource.org/licenses/mit-license.php ]
+*/
+
+#pragma once
+
+#include "lua.h"
+
+#define LUA_BITLIBNAME "bit"
+LUALIB_API int luaopen_bit(lua_State *L);
diff --git a/minetest.conf.example b/minetest.conf.example
index 47c03ff80..7f4b5d946 100644
--- a/minetest.conf.example
+++ b/minetest.conf.example
@@ -30,7 +30,7 @@
# type: bool
# pitch_move = false
-# Fast movement (via the "special" key).
+# Fast movement (via the "Aux1" key).
# This requires the "fast" privilege on the server.
# type: bool
# fast_move = false
@@ -61,7 +61,7 @@
# type: float
# mouse_sensitivity = 0.2
-# If enabled, "special" key instead of "sneak" key is used for climbing down and
+# If enabled, "Aux1" key instead of "Sneak" key is used for climbing down and
# descending.
# type: bool
# aux1_descends = false
@@ -70,7 +70,7 @@
# type: bool
# doubletap_jump = false
-# If disabled, "special" key is used to fly fast if both fly and fast mode are
+# If disabled, "Aux1" key is used to fly fast if both fly and fast mode are
# enabled.
# type: bool
# always_fly_fast = true
@@ -107,10 +107,10 @@
# type: bool
# fixed_virtual_joystick = false
-# (Android) Use virtual joystick to trigger "aux" button.
-# If enabled, virtual joystick will also tap "aux" button when out of main circle.
+# (Android) Use virtual joystick to trigger "Aux1" button.
+# If enabled, virtual joystick will also tap "Aux1" button when out of main circle.
# type: bool
-# virtual_joystick_triggers_aux = false
+# virtual_joystick_triggers_aux1 = false
# Enable joysticks
# type: bool
@@ -121,7 +121,7 @@
# joystick_id = 0
# The type of joystick
-# type: enum values: auto, generic, xbox
+# type: enum values: auto, generic, xbox, dragonrise_gamecube
# joystick_type = auto
# The time in seconds it takes between repeated events
@@ -129,12 +129,12 @@
# type: float min: 0.001
# repeat_joystick_button_time = 0.17
-# The deadzone of the joystick
+# The dead zone of the joystick
# type: int
# joystick_deadzone = 2048
# The sensitivity of the joystick axes for moving the
-# ingame view frustum around.
+# in-game view frustum around.
# type: float
# joystick_frustum_sensitivity = 170
@@ -188,7 +188,7 @@
# Key for moving fast in fast mode.
# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
# type: key
-# keymap_special1 = KEY_KEY_E
+# keymap_aux1 = KEY_KEY_E
# Key for opening the chat window.
# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
@@ -503,7 +503,7 @@
### Basic
-# Whether nametag backgrounds should be shown by default.
+# Whether name tag backgrounds should be shown by default.
# Mods may still set a background.
# type: bool
# show_nametag_backgrounds = true
@@ -533,6 +533,11 @@
# type: bool
# smooth_lighting = true
+# Enables tradeoffs that reduce CPU load or increase rendering performance
+# at the expense of minor visual glitches that do not impact game playability.
+# type: bool
+# performance_tradeoffs = false
+
# Clouds are a client side effect.
# type: bool
# enable_clouds = true
@@ -551,7 +556,7 @@
### Filtering
-# Use mip mapping to scale textures. May slightly increase performance,
+# Use mipmapping to scale textures. May slightly increase performance,
# especially when using a high resolution texture pack.
# Gamma correct downscaling is not supported.
# type: bool
@@ -570,9 +575,9 @@
# 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.
+# which PNG optimizers usually discard, often resulting in dark or
+# light edges to transparent textures. Apply a filter to clean that up
+# at texture load time. This is automatically enabled if mipmapping is enabled.
# type: bool
# texture_clean_transparent = false
@@ -580,9 +585,8 @@
# 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.
+# memory. Powers of 2 are recommended. This setting is ONLY applied if
+# bilinear/trilinear/anisotropic filtering is enabled.
# This is also used as the base node texture size for world-aligned
# texture autoscaling.
# type: int
@@ -694,11 +698,11 @@
# type: float min: 0 max: 0.25
# near_plane = 0.1
-# Width component of the initial window size.
+# Width component of the initial window size. Ignored in fullscreen mode.
# type: int min: 1
# screen_w = 1024
-# Height component of the initial window size.
+# Height component of the initial window size. Ignored in fullscreen mode.
# type: int min: 1
# screen_h = 600
@@ -710,10 +714,6 @@
# 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
@@ -761,12 +761,12 @@
# type: path
# texture_path =
-# The rendering back-end for Irrlicht.
+# The rendering back-end.
# A restart is required after changing this.
# Note: On Android, stick with OGLES1 if unsure! App may fail to start otherwise.
# On other platforms, OpenGL is recommended.
# Shaders are supported by OpenGL (desktop only) and OGLES2 (experimental)
-# type: enum values: null, software, burningsvideo, direct3d8, direct3d9, opengl, ogles1, ogles2
+# type: enum values: opengl, ogles1, ogles2
# video_driver = opengl
# Radius of cloud area stated in number of 64 node cloud squares.
@@ -843,7 +843,7 @@
# crosshair_color = (255,255,255)
# Crosshair alpha (opaqueness, between 0 and 255).
-# Also controls the object crosshair color
+# This also applies to the object crosshair.
# type: int min: 0 max: 255
# crosshair_alpha = 255
@@ -860,7 +860,7 @@
# type: float
# hud_hotbar_max_width = 1.0
-# Modifies the size of the hudbar elements.
+# Modifies the size of the HUD elements.
# type: float
# hud_scaling = 1.0
@@ -974,11 +974,6 @@
# type: bool
# tooltip_append_itemname = false
-# Whether FreeType fonts are used, requires FreeType support to be compiled in.
-# If disabled, bitmap and XML vectors fonts are used instead.
-# type: bool
-# freetype = true
-
# type: bool
# font_bold = false
@@ -993,13 +988,18 @@
# type: int min: 0 max: 255
# font_shadow_alpha = 127
-# Font size of the default font in point (pt).
+# Font size of the default font where 1 unit = 1 pixel at 96 DPI
# type: int min: 1
# font_size = 16
-# Path to the default font.
-# If “freetype†setting is enabled: Must be a TrueType font.
-# If “freetype†setting is disabled: Must be a bitmap or XML vectors font.
+# For pixel-style fonts that do not scale well, this ensures that font sizes used
+# with this font will always be divisible by this value, in pixels. For instance,
+# a pixel font 16 pixels tall should have this set to 16, so it will only ever be
+# sized 16, 32, 48, etc., so a mod requesting a size of 25 will get 32.
+# type: int min: 1
+# font_size_divisible_by = 1
+
+# Path to the default font. Must be a TrueType font.
# The fallback font will be used if the font cannot be loaded.
# type: filepath
# font_path = fonts/Arimo-Regular.ttf
@@ -1011,15 +1011,20 @@
# font_path_italic = fonts/Arimo-Italic.ttf
# type: filepath
-# font_path_bolditalic = fonts/Arimo-BoldItalic.ttf
+# font_path_bold_italic = fonts/Arimo-BoldItalic.ttf
+
+# Font size of the monospace font where 1 unit = 1 pixel at 96 DPI
+# type: int min: 1
+# mono_font_size = 16
-# Font size of the monospace font in point (pt).
+# For pixel-style fonts that do not scale well, this ensures that font sizes used
+# with this font will always be divisible by this value, in pixels. For instance,
+# a pixel font 16 pixels tall should have this set to 16, so it will only ever be
+# sized 16, 32, 48, etc., so a mod requesting a size of 25 will get 32.
# type: int min: 1
-# mono_font_size = 15
+# mono_font_size_divisible_by = 1
-# Path to the monospace font.
-# If “freetype†setting is enabled: Must be a TrueType font.
-# If “freetype†setting is disabled: Must be a bitmap or XML vectors font.
+# Path to the monospace font. Must be a TrueType font.
# This font is used for e.g. the console and profiler screen.
# type: filepath
# mono_font_path = fonts/Cousine-Regular.ttf
@@ -1031,23 +1036,9 @@
# mono_font_path_italic = fonts/Cousine-Italic.ttf
# type: filepath
-# mono_font_path_bolditalic = fonts/Cousine-BoldItalic.ttf
-
-# Font size of the fallback font in point (pt).
-# type: int min: 1
-# fallback_font_size = 15
-
-# Shadow offset (in pixels) of the fallback font. If 0, then shadow will not be drawn.
-# type: int
-# fallback_font_shadow = 1
+# mono_font_path_bold_italic = fonts/Cousine-BoldItalic.ttf
-# Opaqueness (alpha) of the shadow behind the fallback font, between 0 and 255.
-# type: int min: 0 max: 255
-# fallback_font_shadow_alpha = 128
-
-# Path of the fallback font.
-# If “freetype†setting is enabled: Must be a TrueType font.
-# If “freetype†setting is disabled: Must be a bitmap or XML vectors font.
+# Path of the fallback font. Must be a TrueType font.
# This font will be used for certain languages or if the default font is unavailable.
# type: filepath
# fallback_font_path = fonts/DroidSansFallbackFull.ttf
@@ -1063,7 +1054,7 @@
# screenshot_path = screenshots
# Format of screenshots.
-# type: enum values: png, jpg, bmp, pcx, ppm, tga
+# type: enum values: png, jpg
# screenshot_format = png
# Screenshot quality. Only used for JPEG format.
@@ -1078,6 +1069,10 @@
# type: int min: 1
# screen_dpi = 72
+# Adjust the detected display density, used for scaling UI elements.
+# type: float
+# display_density_factor = 1
+
# Windows systems only: Start Minetest with the command line window in the background.
# Contains the same information as the file debug.txt (default name).
# type: bool
@@ -1110,6 +1105,14 @@
# Client
#
+# Clickable weblinks (middle-click or Ctrl+left-click) enabled in chat console output.
+# type: bool
+# clickable_chat_weblinks = false
+
+# Optional override for chat weblink color.
+# type: string
+# chat_weblink_color =
+
## Network
# Address to connect to.
@@ -1124,9 +1127,9 @@
# remote_port = 30000
# Prometheus listener address.
-# If minetest is compiled with ENABLE_PROMETHEUS option enabled,
+# If Minetest is compiled with ENABLE_PROMETHEUS option enabled,
# enable metrics listener for Prometheus on that address.
-# Metrics can be fetch on http://127.0.0.1:30000/metrics
+# Metrics can be fetched on http://127.0.0.1:30000/metrics
# type: string
# prometheus_listener_address = 127.0.0.1:30000
@@ -1261,11 +1264,10 @@
# type: int
# max_packets_per_iteration = 1024
-# ZLib compression level to use when sending mapblocks to the client.
-# -1 - Zlib's default compression level
-# 0 - no compresson, fastest
+# Compression level to use when sending mapblocks to the client.
+# -1 - use default compression level
+# 0 - least compression, fastest
# 9 - best compression, slowest
-# (levels 1-3 use Zlib's "fast" method, 4-9 use the normal method)
# type: int min: -1 max: 9
# map_compression_level_net = -1
@@ -1364,6 +1366,11 @@
# type: string
# chat_message_format = <@name> @message
+# If the execution of a chat command takes longer than this specified time in
+# seconds, add the time information to the chat command message
+# type: float
+# chatcommand_msg_time_threshold = 0.1
+
# A message to be displayed to all clients when the server shuts down.
# type: string
# kick_msg_shutdown = Server shutting down.
@@ -1495,7 +1502,7 @@
# deprecated_lua_api_handling = log
# Number of extra blocks that can be loaded by /clearobjects at once.
-# This is a trade-off between sqlite transaction overhead and
+# 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
@@ -1513,13 +1520,12 @@
# type: enum values: 0, 1, 2
# sqlite_synchronous = 2
-# ZLib compression level to use when saving mapblocks to disk.
-# -1 - Zlib's default compression level
-# 0 - no compresson, fastest
+# Compression level to use when saving mapblocks to disk.
+# -1 - use default compression level
+# 0 - least compression, fastest
# 9 - best compression, slowest
-# (levels 1-3 use Zlib's "fast" method, 4-9 use the normal method)
# type: int min: -1 max: 9
-# map_compression_level_disk = 3
+# map_compression_level_disk = -1
# Length of a server tick and the interval at which objects are generally updated over
# network.
@@ -1647,7 +1653,7 @@
# type: bool
# instrument.lbm = true
-# Instrument chatcommands on registration.
+# Instrument chat commands on registration.
# type: bool
# instrument.chatcommand = true
@@ -1682,7 +1688,7 @@
# Set the language. Leave empty to use the system language.
# A restart is required after changing this.
-# type: enum values: , ar, ca, cs, da, de, dv, el, en, eo, es, et, eu, fil, fr, hu, id, it, ja, ja_KS, jbo, kk, kn, lo, lt, ms, my, nb, nl, nn, pl, pt, pt_BR, ro, ru, sl, sr_Cyrl, sv, sw, th, tr, uk, vi
+# type: enum values: , be, bg, ca, cs, da, de, el, en, eo, es, et, eu, fi, fr, gd, gl, hu, id, it, ja, jbo, kk, ko, lt, lv, ms, nb, nl, nn, pl, pt, pt_BR, ro, ru, sk, sl, sr_Cyrl, sr_Latn, sv, sw, tr, uk, vi, zh_CN, zh_TW
# language =
# Level of logging to be written to debug.txt:
@@ -1714,10 +1720,9 @@
## Advanced
-# Default timeout for cURL, stated in milliseconds.
-# Only has an effect if compiled with cURL.
+# Maximum time an interactive request (e.g. server list fetch) may take, stated in milliseconds.
# type: int
-# curl_timeout = 5000
+# curl_timeout = 20000
# Limits number of parallel HTTP requests. Affects:
# - Media fetch if server uses remote_media setting.
@@ -1727,14 +1732,10 @@
# type: int
# curl_parallel_limit = 8
-# Maximum time in ms a file download (e.g. a mod download) may take.
+# Maximum time a file download (e.g. a mod download) may take, stated in milliseconds.
# 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 =
@@ -1766,12 +1767,12 @@
# Limit of map generation, in nodes, in all 6 directions from (0, 0, 0).
# Only mapchunks completely within the mapgen limit are generated.
# Value is stored per-world.
-# type: int min: 0 max: 31000
-# mapgen_limit = 31000
+# type: int min: 0 max: 31007
+# mapgen_limit = 31007
# Global map generation attributes.
# In Mapgen v6 the 'decorations' flag controls all decorations except trees
-# and junglegrass, in all other mapgens this flag controls all decorations.
+# and jungle grass, in all other mapgens this flag controls all decorations.
# type: flags possible values: caves, dungeons, light, decorations, biomes, ores, nocaves, nodungeons, nolight, nodecorations, nobiomes, noores
# mg_flags = caves,dungeons,light,decorations,biomes,ores
@@ -3352,17 +3353,17 @@
# enable_mapgen_debug_info = false
# Maximum number of blocks that can be queued for loading.
-# type: int
+# type: int min: 1 max: 1000000
# emergequeue_limit_total = 1024
# Maximum number of blocks to be queued that are to be loaded from file.
# This limit is enforced per player.
-# type: int
+# type: int min: 1 max: 1000000
# emergequeue_limit_diskonly = 128
# Maximum number of blocks to be queued that are to be generated.
# This limit is enforced per player.
-# type: int
+# type: int min: 1 max: 1000000
# emergequeue_limit_generate = 128
# Number of emerge threads to use.
diff --git a/misc/Info.plist b/misc/Info.plist
index 1498ee474..0491d2fc1 100644
--- a/misc/Info.plist
+++ b/misc/Info.plist
@@ -8,7 +8,13 @@
<string>minetest</string>
<key>CFBundleIconFile</key>
<string>minetest-icon.icns</string>
+ <key>CFBundleName</key>
+ <string>Minetest</string>
+ <key>CFBundleDisplayName</key>
+ <string>Minetest</string>
<key>CFBundleIdentifier</key>
<string>net.minetest.minetest</string>
+ <key>NSHighResolutionCapable</key>
+ <false/>
</dict>
</plist>
diff --git a/misc/debpkg-control b/misc/debpkg-control
index 30dc94088..e867f3eb9 100644
--- a/misc/debpkg-control
+++ b/misc/debpkg-control
@@ -2,8 +2,8 @@ Section: games
Priority: extra
Standards-Version: 3.6.2
Package: minetest-staging
-Version: 0.4.15-DATEPLACEHOLDER
-Depends: libc6, libcurl3-gnutls, libfreetype6, libirrlicht1.8, libjsoncpp1, LEVELDB_PLACEHOLDER, liblua5.1-0, libluajit-5.1-2, libopenal1, libsqlite3-0, libstdc++6, libvorbisfile3, libx11-6, zlib1g
+Version: 5.4.0-DATEPLACEHOLDER
+Depends: libc6, libcurl3-gnutls, libfreetype6, libgl1, JPEG_PLACEHOLDER, JSONCPP_PLACEHOLDER, LEVELDB_PLACEHOLDER, libopenal1, libpng16-16, libsqlite3-0, libstdc++6, libvorbisfile3, libx11-6, libxxf86vm1, libzstd1, zlib1g
Maintainer: Loic Blot <loic.blot@unix-experience.fr>
Homepage: https://www.minetest.net/
Vcs-Git: https://github.com/minetest/minetest.git
@@ -12,15 +12,12 @@ Architecture: amd64
Build-Depends:
cmake,
gettext,
- libbz2-dev,
libcurl4-gnutls-dev,
libfreetype6-dev,
- libglu1-mesa-dev,
- libirrlicht-dev (>= 1.7.0),
+ libgl1-mesa-dev,
libjpeg-dev,
libjsoncpp-dev,
libleveldb-dev,
- libluajit-5.1-dev | liblua5.1-dev,
libogg-dev,
libopenal-dev,
libpng-dev,
@@ -28,7 +25,7 @@ Build-Depends:
libvorbis-dev,
libx11-dev,
zlib1g-dev
-Description: Multiplayer infinite-world block sandbox (server)
+Description: Multiplayer infinite-world block sandbox game
Minetest is a minecraft-inspired game written from scratch and licensed
under the LGPL (version 2.1 or later). It supports both survival and creative
modes along with multiplayer support, dynamic lighting, and an "infinite" map
diff --git a/misc/net.minetest.minetest.appdata.xml b/misc/net.minetest.minetest.appdata.xml
index 02e1139c2..a6b61448e 100644
--- a/misc/net.minetest.minetest.appdata.xml
+++ b/misc/net.minetest.minetest.appdata.xml
@@ -62,6 +62,6 @@
<translation type="gettext">minetest</translation>
<update_contact>sfan5@live.de</update_contact>
<releases>
- <release date="2021-10-23" version="5.4.2"/>
+ <release date="2022-01-30" version="5.5.0"/>
</releases>
</component>
diff --git a/po/ar/minetest.po b/po/ar/minetest.po
index 9b037bf47..fc4891024 100644
--- a/po/ar/minetest.po
+++ b/po/ar/minetest.po
@@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: minetest\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-02-23 19:03+0100\n"
-"PO-Revision-Date: 2021-03-19 20:18+0000\n"
+"POT-Creation-Date: 2022-01-25 23:19+0100\n"
+"PO-Revision-Date: 2021-12-05 13:51+0000\n"
"Last-Translator: abidin toumi <abidin24@disroot.org>\n"
"Language-Team: Arabic <https://hosted.weblate.org/projects/minetest/minetest/"
"ar/>\n"
@@ -18,7 +18,43 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 "
"&& n%100<=10 ? 3 : n%100>=11 ? 4 : 5;\n"
-"X-Generator: Weblate 4.5.2-dev\n"
+"X-Generator: Weblate 4.10-dev\n"
+
+#: builtin/client/chatcommands.lua
+msgid "Clear the out chat queue"
+msgstr "امسح طابور الرسائل الصادرة"
+
+#: builtin/client/chatcommands.lua
+msgid "Empty command."
+msgstr "أمر ÙØ§Ø±Øº."
+
+#: builtin/client/chatcommands.lua
+msgid "Exit to main menu"
+msgstr "اخرج للقائمة الرئيسة"
+
+#: builtin/client/chatcommands.lua
+msgid "Invalid command: "
+msgstr "أمر غير صالح: "
+
+#: builtin/client/chatcommands.lua
+msgid "Issued command: "
+msgstr ""
+
+#: builtin/client/chatcommands.lua
+msgid "List online players"
+msgstr "قائمة اللاعبين المتصلين"
+
+#: builtin/client/chatcommands.lua
+msgid "Online players: "
+msgstr "اللاعبون المتصلون: "
+
+#: builtin/client/chatcommands.lua
+msgid "The out chat queue is now empty."
+msgstr "طابور الرسائل الصادرة ÙØ§Ø±Øº."
+
+#: builtin/client/chatcommands.lua
+msgid "This command is disabled by server."
+msgstr "هذا الأمر معطل من الخادم."
#: builtin/client/death_formspec.lua src/client/game.cpp
msgid "Respawn"
@@ -28,11 +64,41 @@ msgstr "Ø£Ø¹ÙØ¯ الإحياء"
msgid "You died"
msgstr "Ù…ÙØª"
+#: builtin/common/chatcommands.lua
+msgid "Available commands:"
+msgstr "الأوامر Ø§Ù„Ù…ØªÙˆÙØ±Ø©:"
+
+#: builtin/common/chatcommands.lua
+msgid "Available commands: "
+msgstr "الأوامر المتاحة: "
+
+#: builtin/common/chatcommands.lua
+msgid "Command not available: "
+msgstr "الأوامر غير المتاحة: "
+
+#: builtin/common/chatcommands.lua
+msgid "Get help for commands"
+msgstr "احصل على تعليمات الأوامر"
+
+#: builtin/common/chatcommands.lua
+msgid ""
+"Use '.help <cmd>' to get more information, or '.help all' to list everything."
+msgstr ""
+"استخدم '.help <cmd>' للحصول على مزيد من المعلومات أو '.help all' لعرض كل شيء."
+
+#: builtin/common/chatcommands.lua
+msgid "[all | <cmd>]"
+msgstr "[all | <cmd>]"
+
#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp
msgid "OK"
msgstr "مواÙÙ‚"
#: builtin/fstk/ui.lua
+msgid "<none available>"
+msgstr "<ليس متاحًا>"
+
+#: builtin/fstk/ui.lua
msgid "An error occurred in a Lua script:"
msgstr "حدث خطأ ÙÙŠ برنامج Lua النصي:"
@@ -167,7 +233,7 @@ msgstr "الاعتماديتان \"$1\" و $2 ستثبتان."
#: builtin/mainmenu/dlg_contentstore.lua
msgid "$1 by $2"
-msgstr ""
+msgstr "$1 بواسطة $2"
#: builtin/mainmenu/dlg_contentstore.lua
msgid ""
@@ -187,7 +253,7 @@ msgstr "يحتاج $1 لكن لم ÙŠÙØ¹Ø«Ø± عليها."
#: builtin/mainmenu/dlg_contentstore.lua
msgid "$1 will be installed, and $2 dependencies will be skipped."
-msgstr ""
+msgstr "$1 Ø³ÙŠÙØ«Ø¨ØªØŒ واعتماديات $1 Ø³ØªÙØªØ¬Ø§Ù‡Ù„."
#: builtin/mainmenu/dlg_contentstore.lua
msgid "All packages"
@@ -203,7 +269,7 @@ msgstr "Ø¹ÙØ¯ للقائمة الرئيسة"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Base Game:"
-msgstr "اللعبة القاعدية"
+msgstr "اللعبة القاعدية :"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "ContentDB is not available when Minetest was compiled without cURL"
@@ -235,6 +301,11 @@ msgid "Install missing dependencies"
msgstr "ثبت الإعتماديات المÙقودة"
#: builtin/mainmenu/dlg_contentstore.lua
+#, fuzzy
+msgid "Install: Unsupported file type or broken archive"
+msgstr "يثبت: نوع المل٠\"$1\" غير مدعوم أو هو أرشي٠تالÙ"
+
+#: builtin/mainmenu/dlg_contentstore.lua
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Mods"
msgstr "التعديلات"
@@ -285,7 +356,7 @@ msgstr "حدÙّث الكل [$1]"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "View more information in a web browser"
-msgstr ""
+msgstr "اعرض مزيدًا من المعلومات عبر Ø§Ù„Ù…ØªØµÙØ­"
#: builtin/mainmenu/dlg_create_world.lua
msgid "A world named \"$1\" already exists"
@@ -313,11 +384,11 @@ msgstr "مواطن بيئية"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Caverns"
-msgstr "مغارات"
+msgstr "كهوÙ"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Caves"
-msgstr "كهوÙ"
+msgstr "مغارات"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Create"
@@ -401,7 +472,7 @@ msgstr "تدÙÙ‚ الطين"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Network of tunnels and caves"
-msgstr "شبكة Ø£Ù†ÙØ§Ù‚ وكهوÙ"
+msgstr "شبكة Ø£Ù†ÙØ§Ù‚ ومغارات"
#: builtin/mainmenu/dlg_create_world.lua
msgid "No game selected"
@@ -535,7 +606,7 @@ msgstr "< عد Ù„ØµÙØ­Ø© الإعدادات"
msgid "Browse"
msgstr "استعرض"
-#: builtin/mainmenu/dlg_settings_advanced.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_settings.lua
msgid "Disabled"
msgstr "عطÙّل"
@@ -561,7 +632,7 @@ msgstr "Ø§Ù„Ù…ÙØ¹Ø§Ø¯Ù„"
#: builtin/mainmenu/dlg_settings_advanced.lua
#, fuzzy
-msgid "Persistance"
+msgid "Persistence"
msgstr "استمرار"
#: builtin/mainmenu/dlg_settings_advanced.lua
@@ -580,7 +651,7 @@ msgstr "Ø¥Ø³ØªØ¹ÙØ¯ Ø§Ù„Ø¥ÙØªØ±Ø§Ø¶ÙŠ"
msgid "Scale"
msgstr "تكبير/تصغير"
-#: builtin/mainmenu/dlg_settings_advanced.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_online.lua
msgid "Search"
msgstr "إبحث"
@@ -673,14 +744,6 @@ msgid "Install Mod: Unable to find suitable folder name for modpack $1"
msgstr "تثبيت تعديل: لا يمكن العصور على اسم مجلد مناسب لحزمة التعديلات $1"
#: builtin/mainmenu/pkgmgr.lua
-msgid "Install: Unsupported file type \"$1\" or broken archive"
-msgstr "يثبت: نوع المل٠\"$1\" غير مدعوم أو هو أرشي٠تالÙ"
-
-#: builtin/mainmenu/pkgmgr.lua
-msgid "Install: file: \"$1\""
-msgstr "ثبت: الملÙ: \"$1\""
-
-#: builtin/mainmenu/pkgmgr.lua
msgid "Unable to find a valid mod or modpack"
msgstr "ÙØ´Ù„ إيجاد تعديل أو حزمة تعديلات صالحة"
@@ -712,6 +775,42 @@ msgstr "قائمة الخوادم العمومية معطلة"
msgid "Try reenabling public serverlist and check your internet connection."
msgstr "جرب إعادة تمكين قائمة الحوادم العامة وتحقق من إتصالك بالانترنت."
+#: builtin/mainmenu/tab_about.lua
+msgid "About"
+msgstr "حول"
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Active Contributors"
+msgstr "المساهمون النشطون"
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Active renderer:"
+msgstr "محرك التصيير النشط:"
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Core Developers"
+msgstr "المطورون الرئيسيون"
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Open User Data Directory"
+msgstr "Ø§ÙØªØ­ دليل بيانات المستخدم"
+
+#: builtin/mainmenu/tab_about.lua
+msgid ""
+"Opens the directory that contains user-provided worlds, games, mods,\n"
+"and texture packs in a file manager / explorer."
+msgstr ""
+"ÙŠÙØªØ­ الدليل الذي يحوي العوالم والألعاب والتعديلات \n"
+"وحزم الإكساء ÙÙŠ مدير Ø§Ù„Ù…Ù„ÙØ§Øª."
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Previous Contributors"
+msgstr "المساهمون السابقون"
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Previous Core Developers"
+msgstr "المطورون الرئيسيون السابقون"
+
#: builtin/mainmenu/tab_content.lua
msgid "Browse online content"
msgstr "ØªØµÙØ­ المحتوى عبر الانترنت"
@@ -752,38 +851,6 @@ msgstr "أزل الحزمة"
msgid "Use Texture Pack"
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 "Open User Data Directory"
-msgstr "Ø§ÙØªØ­ دليل بيانات المستخدم"
-
-#: builtin/mainmenu/tab_credits.lua
-msgid ""
-"Opens the directory that contains user-provided worlds, games, mods,\n"
-"and texture packs in a file manager / explorer."
-msgstr ""
-"ÙŠÙØªØ­ الدليل الذي يحوي العوالم والألعاب والتعديلات \n"
-"وحزم الإكساء ÙÙŠ مدير Ø§Ù„Ù…Ù„ÙØ§Øª."
-
-#: builtin/mainmenu/tab_credits.lua
-msgid "Previous Contributors"
-msgstr "المساهمون السابقون"
-
-#: builtin/mainmenu/tab_credits.lua
-msgid "Previous Core Developers"
-msgstr "المطورون الرئيسيون السابقون"
-
#: builtin/mainmenu/tab_local.lua
msgid "Announce Server"
msgstr "أعلن عن الخادوم"
@@ -813,7 +880,7 @@ msgstr "استض٠خدوم"
msgid "Install games from ContentDB"
msgstr "ثبت العابا من ContentDB"
-#: builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
msgid "Name"
msgstr "الاسم"
@@ -825,7 +892,7 @@ msgstr "جديد"
msgid "No world created or selected!"
msgstr "لم تنشئ او تحدد عالما!"
-#: builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
msgid "Password"
msgstr "كلمة المرور"
@@ -833,7 +900,7 @@ msgstr "كلمة المرور"
msgid "Play Game"
msgstr "إلعب"
-#: builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
msgid "Port"
msgstr "Ø§Ù„Ù…Ù†ÙØ°"
@@ -854,8 +921,12 @@ msgid "Start Game"
msgstr "ابدأ اللعبة"
#: builtin/mainmenu/tab_online.lua
-msgid "Address / Port"
-msgstr "العنوان \\ Ø§Ù„Ù…Ù†ÙØ°"
+msgid "Address"
+msgstr "عنوان"
+
+#: builtin/mainmenu/tab_online.lua src/client/keycode.cpp
+msgid "Clear"
+msgstr "امسح"
#: builtin/mainmenu/tab_online.lua
msgid "Connect"
@@ -865,34 +936,42 @@ msgstr "اتصل"
msgid "Creative mode"
msgstr "النمط الإبداعي"
+#. ~ PvP = Player versus Player
#: builtin/mainmenu/tab_online.lua
-msgid "Damage enabled"
-msgstr "الضرر ممكن"
+msgid "Damage / PvP"
+msgstr "الضرر / قتال اللاعبين"
#: builtin/mainmenu/tab_online.lua
msgid "Del. Favorite"
msgstr "Ø­Ø°Ù Ø§Ù„Ù…ÙØ¶Ù„Ø©"
#: builtin/mainmenu/tab_online.lua
-msgid "Favorite"
+msgid "Favorites"
msgstr "Ø§Ù„Ù…ÙØ¶Ù„Ø©"
#: builtin/mainmenu/tab_online.lua
-msgid "Join Game"
-msgstr "انضم للعبة"
+msgid "Incompatible Servers"
+msgstr "خوادم غير متواÙقة"
#: builtin/mainmenu/tab_online.lua
-msgid "Name / Password"
-msgstr "الاسم \\ كلمة المرور"
+msgid "Join Game"
+msgstr "انضم للعبة"
#: builtin/mainmenu/tab_online.lua
msgid "Ping"
msgstr ""
-#. ~ PvP = Player versus Player
#: builtin/mainmenu/tab_online.lua
-msgid "PvP enabled"
-msgstr "قتال اللاعبين ممكن"
+msgid "Public Servers"
+msgstr "خوادم عمومية"
+
+#: builtin/mainmenu/tab_online.lua
+msgid "Refresh"
+msgstr "Ø­Ø¯Ù‘ÙØ«"
+
+#: builtin/mainmenu/tab_online.lua
+msgid "Server Description"
+msgstr "وص٠الخادم"
#: builtin/mainmenu/tab_settings.lua
msgid "2x"
@@ -934,11 +1013,31 @@ msgstr "ØºÙŠÙØ± Ø§Ù„Ù…ÙØ§ØªÙŠØ­"
msgid "Connected Glass"
msgstr "زجاج متصل"
+#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
+msgid "Dynamic shadows"
+msgstr "ظلال ديناميكية"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Dynamic shadows: "
+msgstr "ظلال ديناميكية: "
+
#: builtin/mainmenu/tab_settings.lua
msgid "Fancy Leaves"
msgstr "اوراق Ø¨ØªÙØ§ØµÙŠÙ„ واضحة"
#: builtin/mainmenu/tab_settings.lua
+msgid "High"
+msgstr "عالي"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Low"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Medium"
+msgstr "متوسط"
+
+#: builtin/mainmenu/tab_settings.lua
msgid "Mipmap"
msgstr ""
@@ -1010,10 +1109,6 @@ msgstr "إضاءة سلسة"
msgid "Texturing:"
msgstr "الإكساء:"
-#: builtin/mainmenu/tab_settings.lua
-msgid "To enable shaders the OpenGL driver needs to be used."
-msgstr "لاستخدام المظللات يجب استخدام تعري٠OpenGL."
-
#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
msgid "Tone Mapping"
msgstr ""
@@ -1027,6 +1122,14 @@ msgid "Trilinear Filter"
msgstr "مرشح خطي ثلاثي"
#: builtin/mainmenu/tab_settings.lua
+msgid "Ultra High"
+msgstr "عالية جدا"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Very Low"
+msgstr "Ù…Ù†Ø®ÙØ¶Ø© جدًا"
+
+#: builtin/mainmenu/tab_settings.lua
msgid "Waving Leaves"
msgstr "اوراق متموجة"
@@ -1038,7 +1141,7 @@ msgstr "سوائل متموجة"
msgid "Waving Plants"
msgstr "نباتات متموجة"
-#: src/client/client.cpp
+#: src/client/client.cpp src/client/game.cpp
msgid "Connection timed out."
msgstr "انتهت مهلة الاتصال."
@@ -1067,8 +1170,8 @@ msgid "Connection error (timed out?)"
msgstr "خطأ ÙÙŠ الاتصال (انتهاء المهلة؟)"
#: src/client/clientlauncher.cpp
-msgid "Could not find or load game \""
-msgstr "لا يمكن إيجاد أو تحميل لعبة \""
+msgid "Could not find or load game: "
+msgstr "تعذر العثور على اللعبة أو تحميلها "
#: src/client/clientlauncher.cpp
msgid "Invalid gamespec."
@@ -1098,18 +1201,6 @@ msgstr "ÙØ´Ù„ ÙØªØ­ مل٠كلمة المرور المدخل: "
msgid "Provided world path doesn't exist: "
msgstr "مسار العالم المدخل غير موجود: "
-#. ~ DO NOT TRANSLATE THIS LITERALLY!
-#. This is a special string. Put either "no" or "yes"
-#. into the translation field (literally).
-#. Choose "yes" if the language requires use of the fallback
-#. font, "no" otherwise.
-#. The fallback font is (normally) required for languages with
-#. non-Latin script, like Chinese.
-#. When in doubt, test your translation.
-#: src/client/fontengine.cpp
-msgid "needs_fallback_font"
-msgstr "yes"
-
#: src/client/game.cpp
msgid ""
"\n"
@@ -1123,14 +1214,6 @@ msgid "- Address: "
msgstr "- العنوان: "
#: src/client/game.cpp
-msgid "- Creative Mode: "
-msgstr "- النمط الإبداعي: "
-
-#: src/client/game.cpp
-msgid "- Damage: "
-msgstr "- التضرر: "
-
-#: src/client/game.cpp
msgid "- Mode: "
msgstr "- النمط: "
@@ -1152,6 +1235,16 @@ msgid "- Server Name: "
msgstr "- اسم الخادم: "
#: src/client/game.cpp
+#, fuzzy
+msgid "A serialization error occurred:"
+msgstr "حدث خطأ ÙÙŠ التسلسل:"
+
+#: src/client/game.cpp
+#, c-format
+msgid "Access denied. Reason: %s"
+msgstr "رÙÙØ¶ Ø§Ù„Ù†ÙØ§Ø°. السبب: %s"
+
+#: src/client/game.cpp
msgid "Automatic forward disabled"
msgstr "المشي التلقائي معطل"
@@ -1160,6 +1253,22 @@ msgid "Automatic forward enabled"
msgstr "المشي التلقائي ممكن"
#: src/client/game.cpp
+msgid "Block bounds hidden"
+msgstr "حدود الكتل مخÙية"
+
+#: src/client/game.cpp
+msgid "Block bounds shown for all blocks"
+msgstr "حدود كل الكتل ظاهرة"
+
+#: src/client/game.cpp
+msgid "Block bounds shown for current block"
+msgstr "حدود الكتلة الحالية ظاهرة"
+
+#: src/client/game.cpp
+msgid "Block bounds shown for nearby blocks"
+msgstr "حدود الكتل القريبة ظاهرة"
+
+#: src/client/game.cpp
msgid "Camera update disabled"
msgstr "تحديث الكاميرا معطل"
@@ -1168,6 +1277,10 @@ msgid "Camera update enabled"
msgstr "تحديث الكاميرا Ù…ÙØ¹Ù„"
#: src/client/game.cpp
+msgid "Can't show block bounds (need 'basic_debug' privilege)"
+msgstr "تعذر إظهار حدود الكتل ( تحتاج امتياز 'basic_debug')"
+
+#: src/client/game.cpp
msgid "Change Password"
msgstr "غير كلمة المرور"
@@ -1180,6 +1293,10 @@ msgid "Cinematic mode enabled"
msgstr "الوضع السينمائي Ù…ÙØ¹Ù„"
#: src/client/game.cpp
+msgid "Client disconnected"
+msgstr "ÙÙØµÙ„ الاتصال عن العميل"
+
+#: src/client/game.cpp
msgid "Client side scripting is disabled"
msgstr "البرمجة النصية معطلة من جانب العميل"
@@ -1188,6 +1305,10 @@ msgid "Connecting to server..."
msgstr "يتصل بالخادوم…"
#: src/client/game.cpp
+msgid "Connection failed for unknown reason"
+msgstr "ÙØ´Ù„ الاتصال لسبب مجهول"
+
+#: src/client/game.cpp
msgid "Continue"
msgstr "تابع"
@@ -1225,6 +1346,11 @@ msgstr ""
"- -%s: دردشة\n"
#: src/client/game.cpp
+#, c-format
+msgid "Couldn't resolve address: %s"
+msgstr "تعذر تحليل العنوان:%s"
+
+#: src/client/game.cpp
msgid "Creating client..."
msgstr "ينشىء عميلا…"
@@ -1353,6 +1479,10 @@ msgid "Minimap currently disabled by game or mod"
msgstr "الخريطة المصغرة معطلة من قبل لعبة أو تعديل"
#: src/client/game.cpp
+msgid "Multiplayer"
+msgstr "متعدد اللاعبين"
+
+#: src/client/game.cpp
msgid "Noclip mode disabled"
msgstr "وضع العقبات Ù…ÙØ¹Ù„"
@@ -1426,6 +1556,21 @@ msgstr "الصوت غير مكتوم"
#: src/client/game.cpp
#, c-format
+msgid "The server is probably running a different version of %s."
+msgstr "ÙŠÙØ­ØªÙ…Ù„ أن نسخة الخادم Ù…Ø®ØªÙ„ÙØ© عن %s."
+
+#: src/client/game.cpp
+#, c-format
+msgid "Unable to connect to %s because IPv6 is disabled"
+msgstr "تعذر الاتصال بـ %s لأن IPv6 معطلة"
+
+#: src/client/game.cpp
+#, c-format
+msgid "Unable to listen on %s because IPv6 is disabled"
+msgstr ""
+
+#: src/client/game.cpp
+#, c-format
msgid "Viewing range changed to %d"
msgstr "غÙيرَ مدى الرؤية الى %d"
@@ -1494,13 +1639,8 @@ msgid "Caps Lock"
msgstr "Caps Lock"
#: src/client/keycode.cpp
-msgid "Clear"
-msgstr "امسح"
-
-#: src/client/keycode.cpp
-#, fuzzy
msgid "Control"
-msgstr "Control"
+msgstr "التحكم"
#: src/client/keycode.cpp
msgid "Down"
@@ -1516,17 +1656,15 @@ msgstr ""
#: src/client/keycode.cpp
msgid "Execute"
-msgstr ""
+msgstr "شغّل"
#: src/client/keycode.cpp
-#, fuzzy
msgid "Help"
-msgstr "Help"
+msgstr "مساعدة"
#: src/client/keycode.cpp
-#, fuzzy
msgid "Home"
-msgstr "Home"
+msgstr "الرئيسية"
#: src/client/keycode.cpp
#, fuzzy
@@ -1799,19 +1937,26 @@ msgid "Minimap hidden"
msgstr "الخريطة المصغرة مخÙية"
#: src/client/minimap.cpp
-#, fuzzy, c-format
+#, c-format
msgid "Minimap in radar mode, Zoom x%d"
-msgstr "الخريطة المصغرة ÙÙŠ وضع الرادار، تكبير x1"
+msgstr "الخريطة المصغرة ÙÙŠ وضع الرادار، تكبير x%d"
#: src/client/minimap.cpp
-#, fuzzy, c-format
+#, c-format
msgid "Minimap in surface mode, Zoom x%d"
-msgstr "الخريطة المصغرة ÙÙŠ وضع الأسطح، تكبير x1"
+msgstr "الخريطة المصغرة ÙÙŠ وضع الأسطح، تكبير x%d"
#: src/client/minimap.cpp
-#, fuzzy
msgid "Minimap in texture mode"
-msgstr "الخريطة المصغرة ÙÙŠ وضع الأسطح، تكبير x1"
+msgstr "الخريطة المصغرة ÙÙŠ وضع الاكساء"
+
+#: src/gui/guiChatConsole.cpp
+msgid "Failed to open webpage"
+msgstr "ÙØ´Ù„ ÙØªØ­ ØµÙØ­Ø© الويب"
+
+#: src/gui/guiChatConsole.cpp
+msgid "Opening webpage"
+msgstr "ÙŠÙØªØ­ ØµÙØ­Ø© الويب"
#: src/gui/guiConfirmRegistration.cpp src/gui/guiPasswordChange.cpp
msgid "Passwords do not match!"
@@ -1839,8 +1984,8 @@ msgid "Proceed"
msgstr "تابع"
#: src/gui/guiKeyChangeMenu.cpp
-msgid "\"Special\" = climb down"
-msgstr "\"خاص\" = التسلق نزولا"
+msgid "\"Aux1\" = climb down"
+msgstr "\"Aux1\" = التسلق نزولا"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Autoforward"
@@ -1851,10 +1996,18 @@ msgid "Automatic jumping"
msgstr "Ø§Ù„Ù‚ÙØ² التلقائي"
#: src/gui/guiKeyChangeMenu.cpp
+msgid "Aux1"
+msgstr "Aux1"
+
+#: src/gui/guiKeyChangeMenu.cpp
msgid "Backward"
msgstr "للخلÙ"
#: src/gui/guiKeyChangeMenu.cpp
+msgid "Block bounds"
+msgstr "حدود الكتلة"
+
+#: src/gui/guiKeyChangeMenu.cpp
msgid "Change camera"
msgstr "غير الكاميرا"
@@ -1872,11 +2025,11 @@ msgstr ""
#: src/gui/guiKeyChangeMenu.cpp
msgid "Dec. range"
-msgstr ""
+msgstr "قلل المدى"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Dec. volume"
-msgstr ""
+msgstr "قلل الحجم"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Double tap \"jump\" to toggle fly"
@@ -1892,11 +2045,11 @@ msgstr "للأمام"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Inc. range"
-msgstr ""
+msgstr "زد المدى"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Inc. volume"
-msgstr ""
+msgstr "زد الحجم"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Inventory"
@@ -1940,11 +2093,7 @@ msgstr "صوّر الشاشة"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Sneak"
-msgstr ""
-
-#: src/gui/guiKeyChangeMenu.cpp
-msgid "Special"
-msgstr "خاص"
+msgstr "تسلل"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Toggle HUD"
@@ -2007,8 +2156,9 @@ msgid "Muted"
msgstr "مكتوم"
#: src/gui/guiVolumeChange.cpp
-msgid "Sound Volume: "
-msgstr "حجم الصوت: "
+#, c-format
+msgid "Sound Volume: %d%%"
+msgstr "حجم الصوت: %d%%"
#. ~ Imperative, as in "Enter/type in text".
#. Don't forget the space.
@@ -2033,8 +2183,8 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"(Android) Use virtual joystick to trigger \"aux\" button.\n"
-"If enabled, virtual joystick will also tap \"aux\" button when out of main "
+"(Android) Use virtual joystick to trigger \"Aux1\" button.\n"
+"If enabled, virtual joystick will also tap \"Aux1\" button when out of main "
"circle."
msgstr ""
@@ -2091,11 +2241,11 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "3D clouds"
-msgstr ""
+msgstr "سحب ثلاثية الأبعاد"
#: src/settings_translation_file.cpp
msgid "3D mode"
-msgstr ""
+msgstr "وضع الشاشة ثلاثية الأبعاد"
#: src/settings_translation_file.cpp
msgid "3D mode parallax strength"
@@ -2157,7 +2307,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "A message to be displayed to all clients when the server crashes."
-msgstr ""
+msgstr "رسالة ستعرض عند انهيار الخادم."
#: src/settings_translation_file.cpp
msgid "A message to be displayed to all clients when the server shuts down."
@@ -2177,23 +2327,23 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Acceleration in air"
-msgstr ""
+msgstr "تسارع الطيران"
#: src/settings_translation_file.cpp
msgid "Acceleration of gravity, in nodes per second per second."
-msgstr ""
+msgstr "تسارع الجاذبية، عقدة/ثانية²."
#: src/settings_translation_file.cpp
msgid "Active Block Modifiers"
-msgstr ""
+msgstr "معدÙلات الكتل النشطة"
#: src/settings_translation_file.cpp
msgid "Active block management interval"
-msgstr ""
+msgstr "مهلة إدارة الكتل النشطة"
#: src/settings_translation_file.cpp
msgid "Active block range"
-msgstr ""
+msgstr "مدى الكتل النشطة"
#: src/settings_translation_file.cpp
msgid "Active object send range"
@@ -2205,6 +2355,10 @@ msgid ""
"Leave this blank to start a local server.\n"
"Note that the address field in the main menu overrides this setting."
msgstr ""
+"عنوان الخادم\n"
+"اتركه ÙØ§Ø±ØºÙ‹Ø§ Ù„Ø§Ø³ØªØ¶Ø§ÙØ© لعبة محلية.\n"
+"أدرك أن هذه القيمة Ø³ØªÙØªØ¬Ø§ÙˆØ² إذا كان حقل العنوان ÙÙŠ القائمة الرئيسية يحوي "
+"عنوانًا."
#: src/settings_translation_file.cpp
msgid "Adds particles when digging a node."
@@ -2217,6 +2371,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Adjust the detected display density, used for scaling UI elements."
+msgstr ""
+
+#: src/settings_translation_file.cpp
#, c-format
msgid ""
"Adjusts the density of the floatland layer.\n"
@@ -2228,9 +2386,10 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Advanced"
-msgstr ""
+msgstr "متقدم"
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
"Alters the light curve by applying 'gamma correction' to it.\n"
"Higher values make middle and lower light levels brighter.\n"
@@ -2238,6 +2397,11 @@ msgid ""
"This only has significant effect on daylight and artificial\n"
"light, it has very little effect on natural night light."
msgstr ""
+"يعدل منحنى الضوء عن طريق تطبيق \"تصحيح جاما\" عليه.\n"
+"القيم الأعلى تجعل مستويات الإضاءة المتوسطة والدنيا أكثر بريقًا.\n"
+"تترك القيمة \"1.0\" منحنى الضوء على حاله.\n"
+"لها تأثير كبير Ùقط على ضوء النهار والضوء الصناعي ØŒ ولها تأثير ضئيل للغاية "
+"على ضوء الليل الطبيعي."
#: src/settings_translation_file.cpp
msgid "Always fly and fast"
@@ -2249,11 +2413,11 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Amount of messages a player may send per 10 seconds."
-msgstr ""
+msgstr "عدد اارسائل المسموح بها لكل 10 ثوان."
#: src/settings_translation_file.cpp
msgid "Amplifies the valleys."
-msgstr ""
+msgstr "تضخيم الوديان."
#: src/settings_translation_file.cpp
msgid "Anisotropic filtering"
@@ -2261,15 +2425,15 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Announce server"
-msgstr ""
+msgstr "أعلن عن الخادم"
#: src/settings_translation_file.cpp
msgid "Announce to this serverlist."
-msgstr ""
+msgstr "أدرجه ÙÙŠ هذه القائمة."
#: src/settings_translation_file.cpp
msgid "Append item name"
-msgstr ""
+msgstr "ضمّن اسم العنصر"
#: src/settings_translation_file.cpp
msgid "Append item name to tooltip."
@@ -2291,7 +2455,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Ask to reconnect after crash"
-msgstr ""
+msgstr "اطلب إعادة الاتصال بعد انقطاعه"
#: src/settings_translation_file.cpp
msgid ""
@@ -2310,11 +2474,11 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Automatic forward key"
-msgstr ""
+msgstr "زر المشي التلقائي"
#: src/settings_translation_file.cpp
msgid "Automatically jump up single-node obstacles."
-msgstr ""
+msgstr "Ù‚ÙØ² تلقائي Ùوق العوائق التي Ø§Ø±ØªÙØ§Ø¹Ù‡Ø§ كتلة واحدة."
#: src/settings_translation_file.cpp
msgid "Automatically report to the serverlist."
@@ -2322,31 +2486,39 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Autosave screen size"
-msgstr ""
+msgstr "Ø­ÙØ¸ حجم الشاشة تلقائيًا"
#: src/settings_translation_file.cpp
msgid "Autoscaling mode"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Aux1 key"
+msgstr "Ù…ÙØªØ§Ø­ Aux1"
+
+#: src/settings_translation_file.cpp
+msgid "Aux1 key for climbing/descending"
+msgstr "Ù…ÙØªØ§Ø­ Aux1 للتسلق / للنزول"
+
+#: src/settings_translation_file.cpp
msgid "Backward key"
msgstr ""
#: src/settings_translation_file.cpp
msgid "Base ground level"
-msgstr ""
+msgstr "مستوى الأرض الأساسي"
#: src/settings_translation_file.cpp
msgid "Base terrain height."
-msgstr ""
+msgstr "Ø¥Ø±ØªÙØ§Ø¹ التضاريس الأساسي."
#: src/settings_translation_file.cpp
msgid "Basic"
-msgstr ""
+msgstr "أساسي"
#: src/settings_translation_file.cpp
msgid "Basic privileges"
-msgstr ""
+msgstr "الإمتيازات الأساسية"
#: src/settings_translation_file.cpp
msgid "Beach noise"
@@ -2358,7 +2530,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Bilinear filtering"
-msgstr ""
+msgstr "ترشيح خطي ثنائي"
#: src/settings_translation_file.cpp
msgid "Bind address"
@@ -2373,36 +2545,32 @@ msgid "Biome noise"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Bits per pixel (aka color depth) in fullscreen mode."
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Block send optimize distance"
msgstr ""
#: src/settings_translation_file.cpp
msgid "Bold and italic font path"
-msgstr ""
+msgstr "مسار الخطين العريض والمائل"
#: src/settings_translation_file.cpp
msgid "Bold and italic monospace font path"
-msgstr ""
+msgstr "مسار خطي monospace العريض والمائل"
#: src/settings_translation_file.cpp
msgid "Bold font path"
-msgstr ""
+msgstr "مسار الخط العريض"
#: src/settings_translation_file.cpp
msgid "Bold monospace font path"
-msgstr ""
+msgstr "مسار خط monospace العريض"
#: src/settings_translation_file.cpp
msgid "Build inside player"
-msgstr ""
+msgstr "ضع الكتلة ÙÙŠ موقع اللاعب"
#: src/settings_translation_file.cpp
msgid "Builtin"
-msgstr ""
+msgstr "مدمج"
#: src/settings_translation_file.cpp
msgid ""
@@ -2414,11 +2582,11 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Camera smoothing"
-msgstr ""
+msgstr "انسيابية حركة الكامير"
#: src/settings_translation_file.cpp
msgid "Camera smoothing in cinematic mode"
-msgstr ""
+msgstr "انسيابية حركة الكامير ÙÙŠ الوضع السنيمائي"
#: src/settings_translation_file.cpp
msgid "Camera update toggle key"
@@ -2438,7 +2606,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Cave width"
-msgstr ""
+msgstr "Ø¹ÙØ±Ø¶ المغارة"
#: src/settings_translation_file.cpp
msgid "Cave1 noise"
@@ -2475,12 +2643,21 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Chat font size"
+msgid "Chat command time message threshold"
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Chat commands"
+msgstr "الأوامر"
+
+#: src/settings_translation_file.cpp
+msgid "Chat font size"
+msgstr "حجم خط المحادثة"
+
+#: src/settings_translation_file.cpp
msgid "Chat key"
-msgstr ""
+msgstr "Ù…ÙØªØ§Ø­ المحادثة"
#: src/settings_translation_file.cpp
msgid "Chat log level"
@@ -2488,11 +2665,11 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Chat message count limit"
-msgstr ""
+msgstr "حدّ٠رسائل المحادثة"
#: src/settings_translation_file.cpp
msgid "Chat message format"
-msgstr ""
+msgstr "نسق٠رسائل المحادثة"
#: src/settings_translation_file.cpp
msgid "Chat message kick threshold"
@@ -2500,15 +2677,15 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Chat message max length"
-msgstr ""
+msgstr "الطول الأقصى لرسائل المحادثة"
#: src/settings_translation_file.cpp
msgid "Chat toggle key"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Chatcommands"
-msgstr ""
+msgid "Chat weblinks"
+msgstr "روابط المحادثة"
#: src/settings_translation_file.cpp
msgid "Chunk size"
@@ -2516,23 +2693,31 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Cinematic mode"
-msgstr ""
+msgstr "الوضع السنيمائي"
#: src/settings_translation_file.cpp
msgid "Cinematic mode key"
-msgstr ""
+msgstr "Ù…ÙØªØ§Ø­ الوضع السنيمائي"
#: src/settings_translation_file.cpp
msgid "Clean transparent textures"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Client"
+msgid ""
+"Clickable weblinks (middle-click or Ctrl+left-click) enabled in chat console "
+"output."
msgstr ""
+"روابط ويب قابلة للنقر (زر Ø§Ù„ÙØ£Ø±Ø© الأوسط أو زر Ø§Ù„ÙØ£Ø±Ø© الأيسر+Ctrl) Ù…ÙØ¹Ù„Ø© ÙÙŠ "
+"المحادثة."
+
+#: src/settings_translation_file.cpp
+msgid "Client"
+msgstr "عميل"
#: src/settings_translation_file.cpp
msgid "Client and Server"
-msgstr ""
+msgstr "عميل وخادم"
#: src/settings_translation_file.cpp
msgid "Client modding"
@@ -2548,15 +2733,15 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Climbing speed"
-msgstr ""
+msgstr "سرعة التسلق"
#: src/settings_translation_file.cpp
msgid "Cloud radius"
-msgstr ""
+msgstr "ØªÙØ§ØµÙŠÙ„ السحاب"
#: src/settings_translation_file.cpp
msgid "Clouds"
-msgstr ""
+msgstr "سحاب"
#: src/settings_translation_file.cpp
msgid "Clouds are a client side effect."
@@ -2564,11 +2749,15 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Clouds in menu"
-msgstr ""
+msgstr "سحب ÙÙŠ القائمة"
#: src/settings_translation_file.cpp
msgid "Colored fog"
-msgstr ""
+msgstr "ضباب ملون"
+
+#: src/settings_translation_file.cpp
+msgid "Colored shadows"
+msgstr "ظلال ملونة"
#: src/settings_translation_file.cpp
msgid ""
@@ -2598,16 +2787,40 @@ msgid "Command key"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Connect glass"
+msgid ""
+"Compression level to use when saving mapblocks to disk.\n"
+"-1 - use default compression level\n"
+"0 - least compression, fastest\n"
+"9 - best compression, slowest"
msgstr ""
+"مستوى ضغط Ù„Ø­ÙØ¸ المل٠mapblocks ÙÙŠ القرص.\n"
+"-1 - المستوى Ø§Ù„Ø§ÙØªØ±Ø§Ø¶ÙŠ\n"
+"0 - ضغط Ø¶Ø¹ÙŠÙØŒ سريع\n"
+"9 - ضغط قوي، بطيء"
#: src/settings_translation_file.cpp
-msgid "Connect to external media server"
+msgid ""
+"Compression level to use when sending mapblocks to the client.\n"
+"-1 - use default compression level\n"
+"0 - least compression, fastest\n"
+"9 - best compression, slowest"
msgstr ""
+"مستوى ضغط لإرسال مل٠mapblocks للعميل.\n"
+"-1 - المستوى Ø§Ù„Ø§ÙØªØ±Ø§Ø¶ÙŠ\n"
+"0 - ضغط Ø¶Ø¹ÙŠÙØŒ سريع\n"
+"9 - ضغط قوي، بطيء"
+
+#: 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 ""
+msgstr "زجاج متصل اذا كانت العقدة تدعمه."
#: src/settings_translation_file.cpp
msgid "Console alpha"
@@ -2645,7 +2858,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Controls"
-msgstr ""
+msgstr "التحكم"
#: src/settings_translation_file.cpp
msgid ""
@@ -2653,6 +2866,9 @@ msgid ""
"Examples:\n"
"72 = 20min, 360 = 4min, 1 = 24hour, 0 = day/night/whatever stays unchanged."
msgstr ""
+"يتحكم ÙÙŠ طول دورة النهار والليل.\n"
+"أمثلة:\n"
+"72 = 20 دقيقة ، 360 = 4 دقائق ، 1 = 24 ساعة ، 0 = نهار / ليل أبدي."
#: src/settings_translation_file.cpp
msgid "Controls sinking speed in liquid."
@@ -2675,11 +2891,11 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Crash message"
-msgstr ""
+msgstr "رسالة الانهيار"
#: src/settings_translation_file.cpp
msgid "Creative"
-msgstr ""
+msgstr "إبداعي"
#: src/settings_translation_file.cpp
msgid "Crosshair alpha"
@@ -2688,7 +2904,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"Crosshair alpha (opaqueness, between 0 and 255).\n"
-"Also controls the object crosshair color"
+"This also applies to the object crosshair."
msgstr ""
#: src/settings_translation_file.cpp
@@ -2707,7 +2923,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Damage"
-msgstr ""
+msgstr "ضرر"
#: src/settings_translation_file.cpp
msgid "Debug info toggle key"
@@ -2723,11 +2939,11 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Dec. volume key"
-msgstr ""
+msgstr "Ù…ÙØªØ§Ø­ تقليل الحجم"
#: src/settings_translation_file.cpp
msgid "Decrease this to increase liquid resistance to movement."
-msgstr ""
+msgstr "قلل منه لزيادة مقاومة الحركة ÙÙŠ السوائل."
#: src/settings_translation_file.cpp
msgid "Dedicated server step"
@@ -2735,59 +2951,62 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Default acceleration"
-msgstr ""
+msgstr "التسارع Ø§Ù„Ø§ÙØªØ±Ø§Ø¶ÙŠ"
#: src/settings_translation_file.cpp
msgid "Default game"
-msgstr ""
+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 ""
+"اللعبة Ø§Ù„Ø§ÙØªØ±Ø§Ø¶ÙŠØ© عند إنشاء عالم جديد.\n"
+"Ø³ÙŠÙØªØ¬Ø§ÙˆØ² هذا الخيار عند إنشاء عالم جديد من القائمة."
#: src/settings_translation_file.cpp
msgid "Default password"
-msgstr ""
+msgstr "كلمة المرور Ø§Ù„Ø§ÙØªØ±Ø§Ø¶ÙŠØ©"
#: src/settings_translation_file.cpp
msgid "Default privileges"
-msgstr ""
+msgstr "الامتيازات Ø§Ù„Ø§ÙØªØ±Ø§Ø¶ÙŠØ©"
#: src/settings_translation_file.cpp
msgid "Default report format"
-msgstr ""
+msgstr "نسق٠التقارير Ø§Ù„Ø§ÙØªØ±Ø§Ø¶ÙŠ"
#: src/settings_translation_file.cpp
msgid "Default stack size"
-msgstr ""
+msgstr "حجم المكدس Ø§Ù„Ø§ÙØªØ±Ø§Ø¶ÙŠ"
#: src/settings_translation_file.cpp
msgid ""
-"Default timeout for cURL, stated in milliseconds.\n"
-"Only has an effect if compiled with cURL."
+"Define shadow filtering quality.\n"
+"This simulates the soft shadows effect by applying a PCF or Poisson disk\n"
+"but also uses more resources."
msgstr ""
#: src/settings_translation_file.cpp
msgid "Defines areas where trees have apples."
-msgstr ""
+msgstr "يحدد المناطق التي تتواجد بها أشجار Ø§Ù„ØªÙØ§Ø­."
#: src/settings_translation_file.cpp
msgid "Defines areas with sandy beaches."
-msgstr ""
+msgstr "يحدد المناطق التي توجد بها شواطئ رملية."
#: src/settings_translation_file.cpp
msgid "Defines distribution of higher terrain and steepness of cliffs."
-msgstr ""
+msgstr "يحدد توزع التضاريس العالية والمنحدرات."
#: src/settings_translation_file.cpp
msgid "Defines distribution of higher terrain."
-msgstr ""
+msgstr "يحدد توزع التضاريس العالية."
#: src/settings_translation_file.cpp
msgid "Defines full size of caverns, smaller values create larger caverns."
-msgstr ""
+msgstr "يضبط حجم الكهو٠، كلما قلت القيمة زاد حجم الكهوÙ."
#: src/settings_translation_file.cpp
msgid "Defines large-scale river channel structure."
@@ -2795,15 +3014,15 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Defines location and terrain of optional hills and lakes."
-msgstr ""
+msgstr "يحدد تضاريس التلال والبحيرات الاختيارية وموقعها."
#: src/settings_translation_file.cpp
msgid "Defines the base ground level."
-msgstr ""
+msgstr "يحدد مستوى الأرض الأساسي."
#: src/settings_translation_file.cpp
msgid "Defines the depth of the river channel."
-msgstr ""
+msgstr "يحدد عمق الأنهار."
#: src/settings_translation_file.cpp
msgid "Defines the maximal player transfer distance in blocks (0 = unlimited)."
@@ -2819,7 +3038,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Defines tree areas and tree density."
-msgstr ""
+msgstr "يحدد مواقع الأشجار ÙˆÙƒØ«Ø§ÙØªÙ‡Ø§."
#: src/settings_translation_file.cpp
msgid ""
@@ -2829,19 +3048,20 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Delay in sending blocks after building"
-msgstr ""
+msgstr "تأخير إرسال الكتل بعد البناء"
#: src/settings_translation_file.cpp
msgid "Delay showing tooltips, stated in milliseconds."
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
msgid "Deprecated Lua API handling"
-msgstr ""
+msgstr "معالجة API Lua القديمة"
#: src/settings_translation_file.cpp
msgid "Depth below which you'll find giant caverns."
-msgstr ""
+msgstr "Ø¨ÙØ¹Ø¯ الكهو٠الكبيرة عن السطح."
#: src/settings_translation_file.cpp
msgid "Depth below which you'll find large caves."
@@ -2884,6 +3104,10 @@ msgid "Disallow empty passwords"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Display Density Scaling Factor"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Domain name of server, to be displayed in the serverlist."
msgstr ""
@@ -2928,6 +3152,19 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Enable Poisson disk filtering.\n"
+"On true uses Poisson disk to make \"soft shadows\". Otherwise uses PCF "
+"filtering."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable colored shadows.\n"
+"On true translucent nodes cast colored shadows. This is expensive."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Enable console window"
msgstr ""
@@ -3036,6 +3273,12 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Enables tradeoffs that reduce CPU load or increase rendering performance\n"
+"at the expense of minor visual glitches that do not impact game playability."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Engine profiling data print interval"
msgstr ""
@@ -3074,18 +3317,6 @@ msgid "Fallback font path"
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 ""
@@ -3103,7 +3334,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Fast movement (via the \"special\" key).\n"
+"Fast movement (via the \"Aux1\" key).\n"
"This requires the \"fast\" privilege on the server."
msgstr ""
@@ -3137,14 +3368,14 @@ 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."
+"which PNG optimizers usually discard, often resulting in dark or\n"
+"light edges to transparent textures. Apply a filter to clean that up\n"
+"at texture load time. This is automatically enabled if mipmapping is enabled."
msgstr ""
#: src/settings_translation_file.cpp
msgid "Filtering"
-msgstr ""
+msgstr "الترشيح"
#: src/settings_translation_file.cpp
msgid "First of 4 2D noises that together define hill/mountain range height."
@@ -3160,11 +3391,11 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Fixed virtual joystick"
-msgstr ""
+msgstr "عصا التحكم Ø§Ù„Ø§ÙØªØ±Ø§Ø¶ÙŠØ© ثابتة"
#: src/settings_translation_file.cpp
msgid "Floatland density"
-msgstr ""
+msgstr "ÙƒØ«Ø§ÙØ© الأرض الطاÙية"
#: src/settings_translation_file.cpp
msgid "Floatland maximum Y"
@@ -3192,7 +3423,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Fly key"
-msgstr ""
+msgstr "زر الطيران"
#: src/settings_translation_file.cpp
msgid "Flying"
@@ -3200,27 +3431,27 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Fog"
-msgstr ""
+msgstr "الضباب"
#: src/settings_translation_file.cpp
msgid "Fog start"
-msgstr ""
+msgstr "بداية الضباب"
#: src/settings_translation_file.cpp
msgid "Fog toggle key"
-msgstr ""
+msgstr "Ù…ÙØªØ§Ø­ تبديل ظهور الضباب"
#: src/settings_translation_file.cpp
msgid "Font bold by default"
-msgstr ""
+msgstr "الخط عريض Ø§ÙØªØ±Ø§Ø¶ÙŠÙ‹Ø§"
#: src/settings_translation_file.cpp
msgid "Font italic by default"
-msgstr ""
+msgstr "الخط مائل Ø§ÙØªØ±Ø§Ø¶ÙŠÙ‹Ø§"
#: src/settings_translation_file.cpp
msgid "Font shadow"
-msgstr ""
+msgstr "ظل الخط"
#: src/settings_translation_file.cpp
msgid "Font shadow alpha"
@@ -3228,18 +3459,18 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Font size"
-msgstr ""
+msgstr "حجم الخط"
#: src/settings_translation_file.cpp
-msgid "Font size of the default font in point (pt)."
+msgid "Font size divisible by"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Font size of the fallback font in point (pt)."
+msgid "Font size of the default font where 1 unit = 1 pixel at 96 DPI"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Font size of the monospace font in point (pt)."
+msgid "Font size of the monospace font where 1 unit = 1 pixel at 96 DPI"
msgstr ""
#: src/settings_translation_file.cpp
@@ -3250,6 +3481,17 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"For pixel-style fonts that do not scale well, this ensures that font sizes "
+"used\n"
+"with this font will always be divisible by this value, in pixels. For "
+"instance,\n"
+"a pixel font 16 pixels tall should have this set to 16, so it will only ever "
+"be\n"
+"sized 16, 32, 48, etc., so a mod requesting a size of 25 will get 32."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Format of player chat messages. The following strings are valid "
"placeholders:\n"
"@name, @message, @timestamp (optional)"
@@ -3308,10 +3550,6 @@ msgid "Fraction of the visible distance at which fog starts to be rendered"
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)."
@@ -3336,10 +3574,6 @@ msgid "Full screen"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Full screen BPP"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Fullscreen mode."
msgstr ""
@@ -3363,7 +3597,7 @@ msgstr ""
msgid ""
"Global map generation attributes.\n"
"In Mapgen v6 the 'decorations' flag controls all decorations except trees\n"
-"and junglegrass, in all other mapgens this flag controls all decorations."
+"and jungle grass, in all other mapgens this flag controls all decorations."
msgstr ""
#: src/settings_translation_file.cpp
@@ -3432,7 +3666,8 @@ msgid "Heat noise"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Height component of the initial window size."
+msgid ""
+"Height component of the initial window size. Ignored in fullscreen mode."
msgstr ""
#: src/settings_translation_file.cpp
@@ -3444,10 +3679,6 @@ msgid "Height select noise"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "High-precision FPU"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Hill steepness"
msgstr ""
@@ -3480,154 +3711,160 @@ msgid ""
"Horizontal acceleration in air when jumping or falling,\n"
"in nodes per second per second."
msgstr ""
+"التسارع الأÙقي عند الصقوط ÙˆØ§Ù„Ù‚ÙØ²ØŒ\n"
+"وحدتها عقدة/ثانية²."
#: src/settings_translation_file.cpp
msgid ""
"Horizontal and vertical acceleration in fast mode,\n"
"in nodes per second per second."
msgstr ""
+"التسارع الأÙقي والعمودي ÙÙŠ نمط السرعة،\n"
+"وحدتها عقدة/ثانية²."
#: src/settings_translation_file.cpp
msgid ""
"Horizontal and vertical acceleration on ground or when climbing,\n"
"in nodes per second per second."
msgstr ""
+"التسارع الأÙقي والعمودي أثناء التسلق،\n"
+"وحدتها عقدة/ثانية²."
#: src/settings_translation_file.cpp
msgid "Hotbar next key"
-msgstr ""
+msgstr "Ù…ÙØªØ§Ø­ العنصر التالي ÙÙŠ شريط الإجراءات"
#: src/settings_translation_file.cpp
msgid "Hotbar previous key"
-msgstr ""
+msgstr "Ù…ÙØªØ§Ø­ العنصر السابق ÙÙŠ شريط الإجراءات"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 1 key"
-msgstr ""
+msgstr "Ù…ÙØªØ§Ø­ الخانة 1 ÙÙŠ شريط الإجراءات"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 10 key"
-msgstr ""
+msgstr "Ù…ÙØªØ§Ø­ الخانة 10 ÙÙŠ شريط الإجراءات"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 11 key"
-msgstr ""
+msgstr "Ù…ÙØªØ§Ø­ الخانة 11 ÙÙŠ شريط الإجراءات"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 12 key"
-msgstr ""
+msgstr "Ù…ÙØªØ§Ø­ الخانة 21 ÙÙŠ شريط الإجراءات"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 13 key"
-msgstr ""
+msgstr "Ù…ÙØªØ§Ø­ الخانة 13 ÙÙŠ شريط الإجراءات"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 14 key"
-msgstr ""
+msgstr "Ù…ÙØªØ§Ø­ الخانة 14 ÙÙŠ شريط الإجراءات"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 15 key"
-msgstr ""
+msgstr "Ù…ÙØªØ§Ø­ الخانة 15 ÙÙŠ شريط الإجراءات"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 16 key"
-msgstr ""
+msgstr "Ù…ÙØªØ§Ø­ الخانة 16 ÙÙŠ شريط الإجراءات"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 17 key"
-msgstr ""
+msgstr "Ù…ÙØªØ§Ø­ الخانة 17 ÙÙŠ شريط الإجراءات"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 18 key"
-msgstr ""
+msgstr "Ù…ÙØªØ§Ø­ الخانة 18 ÙÙŠ شريط الإجراءات"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 19 key"
-msgstr ""
+msgstr "Ù…ÙØªØ§Ø­ الخانة 19 ÙÙŠ شريط الإجراءات"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 2 key"
-msgstr ""
+msgstr "Ù…ÙØªØ§Ø­ الخانة 2 ÙÙŠ شريط الإجراءات"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 20 key"
-msgstr ""
+msgstr "Ù…ÙØªØ§Ø­ الخانة 20 ÙÙŠ شريط الإجراءات"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 21 key"
-msgstr ""
+msgstr "Ù…ÙØªØ§Ø­ الخانة 21 ÙÙŠ شريط الإجراءات"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 22 key"
-msgstr ""
+msgstr "Ù…ÙØªØ§Ø­ الخانة 22 ÙÙŠ شريط الإجراءات"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 23 key"
-msgstr ""
+msgstr "Ù…ÙØªØ§Ø­ الخانة 23 ÙÙŠ شريط الإجراءات"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 24 key"
-msgstr ""
+msgstr "Ù…ÙØªØ§Ø­ الخانة 24 ÙÙŠ شريط الإجراءات"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 25 key"
-msgstr ""
+msgstr "Ù…ÙØªØ§Ø­ الخانة 25 ÙÙŠ شريط الإجراءات"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 26 key"
-msgstr ""
+msgstr "Ù…ÙØªØ§Ø­ الخانة 26 ÙÙŠ شريط الإجراءات"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 27 key"
-msgstr ""
+msgstr "Ù…ÙØªØ§Ø­ الخانة 27 ÙÙŠ شريط الإجراءات"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 28 key"
-msgstr ""
+msgstr "Ù…ÙØªØ§Ø­ الخانة 28 ÙÙŠ شريط الإجراءات"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 29 key"
-msgstr ""
+msgstr "Ù…ÙØªØ§Ø­ الخانة 29 ÙÙŠ شريط الإجراءات"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 3 key"
-msgstr ""
+msgstr "Ù…ÙØªØ§Ø­ الخانة 3 ÙÙŠ شريط الإجراءات"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 30 key"
-msgstr ""
+msgstr "Ù…ÙØªØ§Ø­ الخانة 30 ÙÙŠ شريط الإجراءات"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 31 key"
-msgstr ""
+msgstr "Ù…ÙØªØ§Ø­ الخانة 31 ÙÙŠ شريط الإجراءات"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 32 key"
-msgstr ""
+msgstr "Ù…ÙØªØ§Ø­ الخانة 32 ÙÙŠ شريط الإجراءات"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 4 key"
-msgstr ""
+msgstr "Ù…ÙØªØ§Ø­ الخانة 4 ÙÙŠ شريط الإجراءات"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 5 key"
-msgstr ""
+msgstr "Ù…ÙØªØ§Ø­ الخانة 5 ÙÙŠ شريط الإجراءات"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 6 key"
-msgstr ""
+msgstr "Ù…ÙØªØ§Ø­ الخانة 6 ÙÙŠ شريط الإجراءات"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 7 key"
-msgstr ""
+msgstr "Ù…ÙØªØ§Ø­ الخانة 7 ÙÙŠ شريط الإجراءات"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 8 key"
-msgstr ""
+msgstr "Ù…ÙØªØ§Ø­ الخانة 8 ÙÙŠ شريط الإجراءات"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 9 key"
-msgstr ""
+msgstr "Ù…ÙØªØ§Ø­ الخانة 9 ÙÙŠ شريط الإجراءات"
#: src/settings_translation_file.cpp
msgid "How deep to make rivers."
@@ -3639,6 +3876,9 @@ msgid ""
"If negative, liquid waves will move backwards.\n"
"Requires waving liquids to be enabled."
msgstr ""
+"سرعة موجات السوائل.كلما زادت القيمة زادت سرعتها.\n"
+"إذا كانت سالبة ØŒ ÙØ¥Ù† حركة الموجات ستكون لجهة المعاكسة .\n"
+"لاستخدامها ÙØ¹Ù‘Ù„ سوائل متموجة."
#: src/settings_translation_file.cpp
msgid ""
@@ -3660,28 +3900,33 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Humidity variation for biomes."
-msgstr ""
+msgstr "اختلا٠الرطوبة ÙÙŠ الحيوم."
#: src/settings_translation_file.cpp
+#, fuzzy
msgid "IPv6"
-msgstr ""
+msgstr "IPv6"
#: src/settings_translation_file.cpp
msgid "IPv6 server"
-msgstr ""
+msgstr "خادم IPv6"
#: 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 ""
+"إذا كان عدد الإطارات ÙÙŠ الثانية (FPS) يتجاوز هذه القيمة\n"
+"حدّه حتى لا تستهلك سرعة المعالج هباءً."
#: src/settings_translation_file.cpp
msgid ""
-"If disabled, \"special\" key is used to fly fast if both fly and fast mode "
-"are\n"
+"If disabled, \"Aux1\" key is used to fly fast if both fly and fast mode are\n"
"enabled."
msgstr ""
+"إذا تم تعطيله ØŒ ÙØ³ÙŠØªÙ… استخدام Ù…ÙØªØ§Ø­ \"Aux1\" للطيران بسرعة إذا كانت أوضاع "
+"الطيران والسرعة \n"
+"Ù…ÙØ¹Ù„Ø©."
#: src/settings_translation_file.cpp
msgid ""
@@ -3701,10 +3946,12 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"If enabled, \"special\" key instead of \"sneak\" key is used for climbing "
-"down and\n"
+"If enabled, \"Aux1\" key instead of \"Sneak\" key is used for climbing down "
+"and\n"
"descending."
msgstr ""
+"إذا ÙÙØ¹Ù‘Ù„ ØŒ سيستخدم Ù…ÙØªØ§Ø­ \"Aux1\" بدلاً من Ù…ÙØªØ§Ø­ \"التسلل\" للتحرك للتسلق "
+"والنزول."
#: src/settings_translation_file.cpp
msgid ""
@@ -3714,7 +3961,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "If enabled, disable cheat prevention in multiplayer."
-msgstr ""
+msgstr "إذا ÙÙØ¹Ù‘Ù„ØŒ سيعطل Ù…ÙƒØ§ÙØ­Ø© الغش ÙÙŠ وضع تعدد اللاعبين."
#: src/settings_translation_file.cpp
msgid ""
@@ -3748,6 +3995,12 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"If the execution of a chat command takes longer than this specified time in\n"
+"seconds, add the time information to the chat command message"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"If the file size of debug.txt exceeds the number of megabytes specified in\n"
"this setting when it is opened, the file is moved to debug.txt.1,\n"
"deleting an older debug.txt.1 if it exists.\n"
@@ -3793,7 +4046,7 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Instrument chatcommands on registration."
+msgid "Instrument chat commands on registration."
msgstr ""
#: src/settings_translation_file.cpp
@@ -3877,7 +4130,7 @@ msgid "Joystick button repetition interval"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Joystick deadzone"
+msgid "Joystick dead zone"
msgstr ""
#: src/settings_translation_file.cpp
@@ -4447,7 +4700,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Kick players who sent more than X messages per 10 seconds."
-msgstr ""
+msgstr "اطرد اللاعبين الذين أرسلوا أكثر من X رسالة ÙÙŠ 10 ثوانÙ."
#: src/settings_translation_file.cpp
msgid "Lake steepness"
@@ -4459,19 +4712,19 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Language"
-msgstr ""
+msgstr "اللغة"
#: src/settings_translation_file.cpp
msgid "Large cave depth"
-msgstr ""
+msgstr "عمق المغارات الكبيرة"
#: src/settings_translation_file.cpp
msgid "Large cave maximum number"
-msgstr ""
+msgstr "أقصى عدد للمغارات الكبيرة"
#: src/settings_translation_file.cpp
msgid "Large cave minimum number"
-msgstr ""
+msgstr "أقل عدد للمغارات الكبيرة"
#: src/settings_translation_file.cpp
msgid "Large cave proportion flooded"
@@ -4483,7 +4736,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Leaves style"
-msgstr ""
+msgstr "مظهر الأوراق"
#: src/settings_translation_file.cpp
msgid ""
@@ -4492,6 +4745,10 @@ msgid ""
"- Simple: only outer faces, if defined special_tiles are used\n"
"- Opaque: disable transparency"
msgstr ""
+"مظهر أوراق الشجر:\n"
+"- Ù…ÙØµÙ„: كل الوجوه مرئية\n"
+"- بسيط: الوجوه الخارجية Ùقط ØŒ إذا تم تحديد \"special_tiles\"\n"
+"- معتم: يعطل Ø§Ù„Ø´ÙØ§Ùية"
#: src/settings_translation_file.cpp
msgid "Left key"
@@ -4635,10 +4892,6 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Makes DirectX work with LuaJIT. Disable if it causes troubles."
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Makes all liquids opaque"
msgstr ""
@@ -4710,6 +4963,10 @@ msgid "Map save interval"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Map shadows update frames"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Mapblock limit"
msgstr ""
@@ -4818,6 +5075,10 @@ msgid "Maximum FPS when the window is not focused, or when the game is paused."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Maximum distance to render shadows."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Maximum forceloaded blocks"
msgstr ""
@@ -4923,7 +5184,15 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Maximum time in ms a file download (e.g. a mod download) may take."
+msgid ""
+"Maximum time a file download (e.g. a mod download) may take, stated in "
+"milliseconds."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum time an interactive request (e.g. server list fetch) may take, "
+"stated in milliseconds."
msgstr ""
#: src/settings_translation_file.cpp
@@ -4987,7 +5256,7 @@ msgid "Mod channels"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Modifies the size of the hudbar elements."
+msgid "Modifies the size of the HUD elements."
msgstr ""
#: src/settings_translation_file.cpp
@@ -4999,6 +5268,10 @@ msgid "Monospace font size"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Monospace font size divisible by"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Mountain height noise"
msgstr ""
@@ -5119,7 +5392,7 @@ 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"
+"This is a trade-off between SQLite transaction overhead and\n"
"memory consumption (4096=100MB, as a rule of thumb)."
msgstr ""
@@ -5138,21 +5411,18 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Opaqueness (alpha) of the shadow behind the fallback font, between 0 and 255."
-msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid ""
"Open the pause menu when the window's focus is lost. Does not pause if a "
"formspec is\n"
"open."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Optional override for chat weblink color."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid ""
-"Path of the fallback font.\n"
-"If “freetype†setting is enabled: Must be a TrueType font.\n"
-"If “freetype†setting is disabled: Must be a bitmap or XML vectors font.\n"
+"Path of the fallback font. Must be a TrueType font.\n"
"This font will be used for certain languages or if the default font is "
"unavailable."
msgstr ""
@@ -5175,17 +5445,13 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Path to the default font.\n"
-"If “freetype†setting is enabled: Must be a TrueType font.\n"
-"If “freetype†setting is disabled: Must be a bitmap or XML vectors font.\n"
+"Path to the default font. Must be a TrueType font.\n"
"The fallback font will be used if the font cannot be loaded."
msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Path to the monospace font.\n"
-"If “freetype†setting is enabled: Must be a TrueType font.\n"
-"If “freetype†setting is disabled: Must be a bitmap or XML vectors font.\n"
+"Path to the monospace font. Must be a TrueType font.\n"
"This font is used for e.g. the console and profiler screen."
msgstr ""
@@ -5240,6 +5506,10 @@ msgid "Player versus player"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Poisson filtering"
+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."
@@ -5284,9 +5554,9 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"Prometheus listener address.\n"
-"If minetest is compiled with ENABLE_PROMETHEUS option enabled,\n"
+"If Minetest is compiled with ENABLE_PROMETHEUS option enabled,\n"
"enable metrics listener for Prometheus on that address.\n"
-"Metrics can be fetch on http://127.0.0.1:30000/metrics"
+"Metrics can be fetched on http://127.0.0.1:30000/metrics"
msgstr ""
#: src/settings_translation_file.cpp
@@ -5575,6 +5845,32 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Set the shadow strength.\n"
+"Lower value means lighter shadows, higher value means darker shadows."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set the soft shadow radius size.\n"
+"Lower values mean sharper shadows, bigger values mean softer shadows.\n"
+"Minimum value: 1.0; maximum value: 10.0"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set the tilt of Sun/Moon orbit in degrees.\n"
+"Value of 0 means no tilt / vertical orbit.\n"
+"Minimum value: 0.0; maximum value: 60.0"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set to true to enable Shadow Mapping.\n"
+"Requires shaders to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Set to true to enable waving leaves.\n"
"Requires shaders to be enabled."
msgstr ""
@@ -5592,6 +5888,13 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Sets shadow texture quality to 32 bits.\n"
+"On false, 16 bits texture will be used.\n"
+"This can cause much more artifacts in the shadow."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Shader path"
msgstr ""
@@ -5604,15 +5907,29 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Shadow filter quality"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Shadow map max distance in nodes to render shadows"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Shadow map texture in 32 bits"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Shadow map texture size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid ""
"Shadow offset (in pixels) of the default font. If 0, then shadow will not be "
"drawn."
msgstr ""
#: src/settings_translation_file.cpp
-msgid ""
-"Shadow offset (in pixels) of the fallback font. If 0, then shadow will not "
-"be drawn."
+msgid "Shadow strength"
msgstr ""
#: src/settings_translation_file.cpp
@@ -5634,8 +5951,9 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Show nametag backgrounds by default"
-msgstr ""
+#, fuzzy
+msgid "Show name tag backgrounds by default"
+msgstr "الخط عريض Ø§ÙØªØ±Ø§Ø¶ÙŠÙ‹Ø§"
#: src/settings_translation_file.cpp
msgid "Shutdown message"
@@ -5659,6 +5977,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Sky Body Orbit Tilt"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Slice w"
msgstr ""
@@ -5713,15 +6035,11 @@ msgid "Sneaking speed, in nodes per second."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Sound"
-msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid "Special key"
+msgid "Soft shadow radius"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Special key for climbing/descending"
+msgid "Sound"
msgstr ""
#: src/settings_translation_file.cpp
@@ -5741,6 +6059,14 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Spread a complete update of shadow map over given amount of frames.\n"
+"Higher values might make shadows laggy, lower values\n"
+"will consume more resources.\n"
+"Minimum value: 1; maximum value: 16"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Spread of light curve boost range.\n"
"Controls the width of the range to be boosted.\n"
"Standard deviation of the light curve boost Gaussian."
@@ -5847,6 +6173,13 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Texture size to render the shadow map on.\n"
+"This must be a power of two.\n"
+"Bigger numbers create better shadows but it is also more expensive."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Textures on a node may be aligned either to the node or to the world.\n"
"The former mode suits better things like machines, furniture, etc., while\n"
"the latter makes stairs and microblocks fit surroundings better.\n"
@@ -5860,7 +6193,7 @@ msgid "The URL for the content repository"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "The deadzone of the joystick"
+msgid "The dead zone of the joystick"
msgstr ""
#: src/settings_translation_file.cpp
@@ -5918,7 +6251,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"The rendering back-end for Irrlicht.\n"
+"The rendering back-end.\n"
"A restart is required after changing this.\n"
"Note: On Android, stick with OGLES1 if unsure! App may fail to start "
"otherwise.\n"
@@ -5929,7 +6262,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"The sensitivity of the joystick axes for moving the\n"
-"ingame view frustum around."
+"in-game view frustum around."
msgstr ""
#: src/settings_translation_file.cpp
@@ -6023,6 +6356,10 @@ msgid "Touch screen threshold"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Tradeoffs for performance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Trees noise"
msgstr ""
@@ -6092,7 +6429,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Use mip mapping to scale textures. May slightly increase performance,\n"
+"Use mipmapping to scale textures. May slightly increase performance,\n"
"especially when using a high resolution texture pack.\n"
"Gamma correct downscaling is not supported."
msgstr ""
@@ -6205,7 +6542,7 @@ msgid "Viewing range"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Virtual joystick triggers aux button"
+msgid "Virtual joystick triggers Aux1 button"
msgstr ""
#: src/settings_translation_file.cpp
@@ -6276,6 +6613,10 @@ msgid "Waving plants"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Weblink color"
+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"
@@ -6296,23 +6637,15 @@ msgid ""
"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.\n"
+"memory. Powers of 2 are recommended. This setting is ONLY applied if\n"
+"bilinear/trilinear/anisotropic filtering is enabled.\n"
"This is also used as the base node texture size for world-aligned\n"
"texture autoscaling."
msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Whether FreeType fonts are used, requires FreeType support to be compiled "
-"in.\n"
-"If disabled, bitmap and XML vectors fonts are used instead."
-msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid ""
-"Whether nametag backgrounds should be shown by default.\n"
+"Whether name tag backgrounds should be shown by default.\n"
"Mods may still set a background."
msgstr ""
@@ -6354,7 +6687,7 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Width component of the initial window size."
+msgid "Width component of the initial window size. Ignored in fullscreen mode."
msgstr ""
#: src/settings_translation_file.cpp
@@ -6439,34 +6772,25 @@ msgid "Y-level of seabed."
msgstr ""
#: src/settings_translation_file.cpp
-msgid ""
-"ZLib compression level to use when saving mapblocks to disk.\n"
-"-1 - Zlib's default compression level\n"
-"0 - no compresson, fastest\n"
-"9 - best compression, slowest\n"
-"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)"
-msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid ""
-"ZLib compression level to use when sending mapblocks to the client.\n"
-"-1 - Zlib's default compression level\n"
-"0 - no compresson, fastest\n"
-"9 - best compression, slowest\n"
-"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)"
+msgid "cURL file download timeout"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "cURL file download timeout"
+msgid "cURL interactive timeout"
msgstr ""
#: src/settings_translation_file.cpp
msgid "cURL parallel limit"
msgstr ""
-#: src/settings_translation_file.cpp
-msgid "cURL timeout"
-msgstr ""
+#~ msgid "- Creative Mode: "
+#~ msgstr "- النمط الإبداعي: "
+
+#~ msgid "- Damage: "
+#~ msgstr "- التضرر: "
+
+#~ msgid "Address / Port"
+#~ msgstr "العنوان \\ Ø§Ù„Ù…Ù†ÙØ°"
#~ msgid "Are you sure to reset your singleplayer world?"
#~ msgstr "هل أنت متأكد من إعادة تعيين عالم اللاعب الوحيد؟"
@@ -6483,12 +6807,21 @@ msgstr ""
#~ msgid "Configure"
#~ msgstr "اضبط"
+#~ msgid "Credits"
+#~ msgstr "إشادات"
+
+#~ msgid "Damage enabled"
+#~ msgstr "الضرر ممكن"
+
#~ msgid "Downloading and installing $1, please wait..."
#~ msgstr "تنزيل وتثبيت $1, يرجى الإنتظار..."
#~ msgid "Generate Normal Maps"
#~ msgstr "ÙˆÙ„ÙØ¯ خرائط عادية"
+#~ msgid "Install: file: \"$1\""
+#~ msgstr "ثبت: الملÙ: \"$1\""
+
#~ msgid "Main"
#~ msgstr "الرئيسية"
@@ -6504,6 +6837,9 @@ msgstr ""
#~ msgid "Minimap in surface mode, Zoom x4"
#~ msgstr "الخريطة المصغرة ÙÙŠ وضع الأسطح، تكبير x4"
+#~ msgid "Name / Password"
+#~ msgstr "الاسم \\ كلمة المرور"
+
#~ msgid "Name/Password"
#~ msgstr "الاسم\\كلمة المرور"
@@ -6513,14 +6849,29 @@ msgstr ""
#~ msgid "Ok"
#~ msgstr "مواÙÙ‚"
+#~ msgid "PvP enabled"
+#~ msgstr "قتال اللاعبين ممكن"
+
#~ msgid "Reset singleplayer world"
#~ msgstr "أعد تعيين عالم اللاعب Ø§Ù„Ù…Ù†ÙØ±Ø¯"
+#~ msgid "Special"
+#~ msgstr "خاص"
+
#~ msgid "Start Singleplayer"
#~ msgstr "إلعب ÙØ±Ø¯ÙŠØ§"
+#~ msgid "To enable shaders the OpenGL driver needs to be used."
+#~ msgstr "لاستخدام المظللات يجب استخدام تعري٠OpenGL."
+
#~ msgid "View"
#~ msgstr "إعرض"
#~ msgid "Yes"
#~ msgstr "نعم"
+
+#~ msgid "You died."
+#~ msgstr "Ù…ÙØª"
+
+#~ msgid "needs_fallback_font"
+#~ msgstr "yes"
diff --git a/po/be/minetest.po b/po/be/minetest.po
index 8b597ca4b..d625a7c75 100644
--- a/po/be/minetest.po
+++ b/po/be/minetest.po
@@ -2,7 +2,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Belarusian (Minetest)\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-02-23 19:03+0100\n"
+"POT-Creation-Date: 2022-01-25 23:19+0100\n"
"PO-Revision-Date: 2019-11-19 23:04+0000\n"
"Last-Translator: Viktar Vauchkevich <victorenator@gmail.com>\n"
"Language-Team: Belarusian <https://hosted.weblate.org/projects/minetest/"
@@ -15,6 +15,48 @@ msgstr ""
"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
"X-Generator: Weblate 3.10-dev\n"
+#: builtin/client/chatcommands.lua
+#, fuzzy
+msgid "Clear the out chat queue"
+msgstr "МакÑімальны памер чаргі размовы"
+
+#: builtin/client/chatcommands.lua
+#, fuzzy
+msgid "Empty command."
+msgstr "Загады размовы"
+
+#: builtin/client/chatcommands.lua
+#, fuzzy
+msgid "Exit to main menu"
+msgstr "Выхад у меню"
+
+#: builtin/client/chatcommands.lua
+#, fuzzy
+msgid "Invalid command: "
+msgstr "Ð›Ð°ÐºÐ°Ð»ÑŒÐ½Ð°Ñ ÐºÐ°Ð¼Ð°Ð½Ð´Ð°"
+
+#: builtin/client/chatcommands.lua
+msgid "Issued command: "
+msgstr ""
+
+#: builtin/client/chatcommands.lua
+#, fuzzy
+msgid "List online players"
+msgstr "ÐÐ´Ð·Ñ–Ð½Ð¾Ñ‡Ð½Ð°Ñ Ð³ÑƒÐ»ÑŒÐ½Ñ"
+
+#: builtin/client/chatcommands.lua
+#, fuzzy
+msgid "Online players: "
+msgstr "ÐÐ´Ð·Ñ–Ð½Ð¾Ñ‡Ð½Ð°Ñ Ð³ÑƒÐ»ÑŒÐ½Ñ"
+
+#: builtin/client/chatcommands.lua
+msgid "The out chat queue is now empty."
+msgstr ""
+
+#: builtin/client/chatcommands.lua
+msgid "This command is disabled by server."
+msgstr ""
+
#: builtin/client/death_formspec.lua src/client/game.cpp
msgid "Respawn"
msgstr "Ðдрадзіцца"
@@ -23,11 +65,42 @@ msgstr "Ðдрадзіцца"
msgid "You died"
msgstr "Вы загінулі"
+#: builtin/common/chatcommands.lua
+#, fuzzy
+msgid "Available commands:"
+msgstr "Ð›Ð°ÐºÐ°Ð»ÑŒÐ½Ð°Ñ ÐºÐ°Ð¼Ð°Ð½Ð´Ð°"
+
+#: builtin/common/chatcommands.lua
+#, fuzzy
+msgid "Available commands: "
+msgstr "Ð›Ð°ÐºÐ°Ð»ÑŒÐ½Ð°Ñ ÐºÐ°Ð¼Ð°Ð½Ð´Ð°"
+
+#: builtin/common/chatcommands.lua
+msgid "Command not available: "
+msgstr ""
+
+#: builtin/common/chatcommands.lua
+msgid "Get help for commands"
+msgstr ""
+
+#: builtin/common/chatcommands.lua
+msgid ""
+"Use '.help <cmd>' to get more information, or '.help all' to list everything."
+msgstr ""
+
+#: builtin/common/chatcommands.lua
+msgid "[all | <cmd>]"
+msgstr ""
+
#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp
msgid "OK"
msgstr ""
#: builtin/fstk/ui.lua
+msgid "<none available>"
+msgstr ""
+
+#: builtin/fstk/ui.lua
msgid "An error occurred in a Lua script:"
msgstr "ÐдбылаÑÑ Ð¿Ð°Ð¼Ñ‹Ð»ÐºÐ° Ñž Lua-Ñкрыпце:"
@@ -234,6 +307,11 @@ msgid "Install missing dependencies"
msgstr "ÐеабавÑÐ·ÐºÐ¾Ð²Ñ‹Ñ Ð·Ð°Ð»ÐµÐ¶Ð½Ð°Ñці:"
#: builtin/mainmenu/dlg_contentstore.lua
+#, fuzzy
+msgid "Install: Unsupported file type or broken archive"
+msgstr "УÑталёўка: непадтрымліваемы файл тыпу \"$1\" або ÑапÑаваны архіў"
+
+#: builtin/mainmenu/dlg_contentstore.lua
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Mods"
msgstr "Мадыфікацыі"
@@ -554,7 +632,7 @@ msgstr "< Ðазад на Ñтаронку налад"
msgid "Browse"
msgstr "ПраглÑдзець"
-#: builtin/mainmenu/dlg_settings_advanced.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_settings.lua
msgid "Disabled"
msgstr "Ðдключаны"
@@ -579,7 +657,8 @@ msgid "Offset"
msgstr "Зрух"
#: builtin/mainmenu/dlg_settings_advanced.lua
-msgid "Persistance"
+#, fuzzy
+msgid "Persistence"
msgstr "СталаÑць"
#: builtin/mainmenu/dlg_settings_advanced.lua
@@ -598,7 +677,7 @@ msgstr "Ðднавіць прадвызначанае"
msgid "Scale"
msgstr "Маштаб"
-#: builtin/mainmenu/dlg_settings_advanced.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_online.lua
msgid "Search"
msgstr "Пошук"
@@ -693,14 +772,6 @@ msgstr ""
"мадыфікацый \"$1\""
#: builtin/mainmenu/pkgmgr.lua
-msgid "Install: Unsupported file type \"$1\" or broken archive"
-msgstr "УÑталёўка: непадтрымліваемы файл тыпу \"$1\" або ÑапÑаваны архіў"
-
-#: builtin/mainmenu/pkgmgr.lua
-msgid "Install: file: \"$1\""
-msgstr "УÑталёўка: файл: \"$1\""
-
-#: builtin/mainmenu/pkgmgr.lua
msgid "Unable to find a valid mod or modpack"
msgstr "Ðе атрымалаÑÑ Ð·Ð½Ð°Ð¹Ñці прыдатную мадыфікацыю альбо пакунак мадыфікацый"
@@ -735,6 +806,42 @@ msgstr ""
"ПаÑпрабуйце паўторна ўключыць ÑÐ¿Ñ–Ñ Ð¿ÑƒÐ±Ð»Ñ–Ñ‡Ð½Ñ‹Ñ… Ñервераў Ñ– праверце злучÑнне з "
"Ñецівам."
+#: builtin/mainmenu/tab_about.lua
+msgid "About"
+msgstr ""
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Active Contributors"
+msgstr "ÐÐºÑ‚Ñ‹ÑžÐ½Ñ‹Ñ ÑžÐ´Ð·ÐµÐ»ÑŒÐ½Ñ–ÐºÑ–"
+
+#: builtin/mainmenu/tab_about.lua
+#, fuzzy
+msgid "Active renderer:"
+msgstr "ÐдлеглаÑць Ð°Ð´Ð¿Ñ€Ð°ÑžÐ»ÐµÐ½Ð½Ñ Ð°ÐºÑ‚Ñ‹ÑžÐ½Ð°Ð³Ð° аб'екта"
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Core Developers"
+msgstr "ÐÑÐ½Ð¾ÑžÐ½Ñ‹Ñ Ñ€Ð°Ñпрацоўшчыкі"
+
+#: builtin/mainmenu/tab_about.lua
+#, fuzzy
+msgid "Open User Data Directory"
+msgstr "Ðбраць каталог"
+
+#: builtin/mainmenu/tab_about.lua
+msgid ""
+"Opens the directory that contains user-provided worlds, games, mods,\n"
+"and texture packs in a file manager / explorer."
+msgstr ""
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Previous Contributors"
+msgstr "Ð‘Ñ‹Ð»Ñ‹Ñ ÑžÐ´Ð·ÐµÐ»ÑŒÐ½Ñ–ÐºÑ–"
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Previous Core Developers"
+msgstr "Ð‘Ñ‹Ð»Ñ‹Ñ Ð°ÑÐ½Ð¾ÑžÐ½Ñ‹Ñ Ñ€Ð°Ñпрацоўшчыкі"
+
#: builtin/mainmenu/tab_content.lua
msgid "Browse online content"
msgstr "Пошук у Ñеціве"
@@ -775,37 +882,6 @@ msgstr "Выдаліць пакунак"
msgid "Use Texture Pack"
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
-#, fuzzy
-msgid "Open User Data Directory"
-msgstr "Ðбраць каталог"
-
-#: builtin/mainmenu/tab_credits.lua
-msgid ""
-"Opens the directory that contains user-provided worlds, games, mods,\n"
-"and texture packs in a file manager / explorer."
-msgstr ""
-
-#: builtin/mainmenu/tab_credits.lua
-msgid "Previous Contributors"
-msgstr "Ð‘Ñ‹Ð»Ñ‹Ñ ÑžÐ´Ð·ÐµÐ»ÑŒÐ½Ñ–ÐºÑ–"
-
-#: builtin/mainmenu/tab_credits.lua
-msgid "Previous Core Developers"
-msgstr "Ð‘Ñ‹Ð»Ñ‹Ñ Ð°ÑÐ½Ð¾ÑžÐ½Ñ‹Ñ Ñ€Ð°Ñпрацоўшчыкі"
-
#: builtin/mainmenu/tab_local.lua
msgid "Announce Server"
msgstr "ÐнанÑаваць Ñервер"
@@ -834,7 +910,7 @@ msgstr "Сервер"
msgid "Install games from ContentDB"
msgstr ""
-#: builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
msgid "Name"
msgstr ""
@@ -846,7 +922,7 @@ msgstr "Ðовы"
msgid "No world created or selected!"
msgstr "ÐÑма Ñтворанага альбо абранага Ñвету!"
-#: builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
#, fuzzy
msgid "Password"
msgstr "Ðовы пароль"
@@ -855,7 +931,7 @@ msgstr "Ðовы пароль"
msgid "Play Game"
msgstr "ГулÑць"
-#: builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
msgid "Port"
msgstr "Порт"
@@ -877,8 +953,13 @@ msgid "Start Game"
msgstr "Пачаць гульню"
#: builtin/mainmenu/tab_online.lua
-msgid "Address / Port"
-msgstr "ÐÐ´Ñ€Ð°Ñ / Порт"
+#, fuzzy
+msgid "Address"
+msgstr "- ÐдраÑ: "
+
+#: builtin/mainmenu/tab_online.lua src/client/keycode.cpp
+msgid "Clear"
+msgstr "ÐчыÑціць"
#: builtin/mainmenu/tab_online.lua
msgid "Connect"
@@ -888,34 +969,46 @@ msgstr "Злучыцца"
msgid "Creative mode"
msgstr "Творчы Ñ€Ñжым"
+#. ~ PvP = Player versus Player
#: builtin/mainmenu/tab_online.lua
-msgid "Damage enabled"
-msgstr "Пашкоджанні ўключаныÑ"
+#, fuzzy
+msgid "Damage / PvP"
+msgstr "Пашкоджанні"
#: builtin/mainmenu/tab_online.lua
msgid "Del. Favorite"
msgstr "Прыбраць з упадабанага"
#: builtin/mainmenu/tab_online.lua
-msgid "Favorite"
+#, fuzzy
+msgid "Favorites"
msgstr "Упадабанае"
#: builtin/mainmenu/tab_online.lua
-msgid "Join Game"
-msgstr "Далучыцца да гульні"
+msgid "Incompatible Servers"
+msgstr ""
#: builtin/mainmenu/tab_online.lua
-msgid "Name / Password"
-msgstr "Ð†Ð¼Ñ / Пароль"
+msgid "Join Game"
+msgstr "Далучыцца да гульні"
#: builtin/mainmenu/tab_online.lua
msgid "Ping"
msgstr "Пінг"
-#. ~ PvP = Player versus Player
#: builtin/mainmenu/tab_online.lua
-msgid "PvP enabled"
-msgstr "PvP уключаны"
+#, fuzzy
+msgid "Public Servers"
+msgstr "ÐнанÑаваць Ñервер"
+
+#: builtin/mainmenu/tab_online.lua
+msgid "Refresh"
+msgstr ""
+
+#: builtin/mainmenu/tab_online.lua
+#, fuzzy
+msgid "Server Description"
+msgstr "ÐпіÑанне Ñервера"
#: builtin/mainmenu/tab_settings.lua
msgid "2x"
@@ -957,11 +1050,32 @@ msgstr "ЗмÑніць клавішы"
msgid "Connected Glass"
msgstr "СуцÑльнае шкло"
+#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
+#, fuzzy
+msgid "Dynamic shadows"
+msgstr "Цень шрыфту"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Dynamic shadows: "
+msgstr ""
+
#: builtin/mainmenu/tab_settings.lua
msgid "Fancy Leaves"
msgstr "Ðздобленае ліÑце"
#: builtin/mainmenu/tab_settings.lua
+msgid "High"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Low"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Medium"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
msgid "Mipmap"
msgstr "MIP-Ñ‚ÑкÑтураванне"
@@ -1034,10 +1148,6 @@ msgstr "МÑккае аÑвÑтленне"
msgid "Texturing:"
msgstr "ТÑкÑтураванне:"
-#: builtin/mainmenu/tab_settings.lua
-msgid "To enable shaders the OpenGL driver needs to be used."
-msgstr "Ð”Ð»Ñ ÑžÐºÐ»ÑŽÑ‡ÑÐ½Ð½Ñ ÑˆÑйдÑраў неабходна выкарыÑтоўваць OpenGL."
-
#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
msgid "Tone Mapping"
msgstr "Танальнае адлюÑтраванне"
@@ -1051,6 +1161,14 @@ msgid "Trilinear Filter"
msgstr "Трылінейны фільтр"
#: builtin/mainmenu/tab_settings.lua
+msgid "Ultra High"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Very Low"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
msgid "Waving Leaves"
msgstr "Дрыготкае ліÑце"
@@ -1062,7 +1180,7 @@ msgstr "Калыханне вадкаÑцÑÑž"
msgid "Waving Plants"
msgstr "Ð”Ñ€Ñ‹Ð³Ð¾Ñ‚ÐºÑ–Ñ Ñ€Ð°Ñліны"
-#: src/client/client.cpp
+#: src/client/client.cpp src/client/game.cpp
msgid "Connection timed out."
msgstr "Таймаут злучÑннÑ."
@@ -1091,7 +1209,8 @@ msgid "Connection error (timed out?)"
msgstr "Памылка злучÑÐ½Ð½Ñ (таймаут?)"
#: src/client/clientlauncher.cpp
-msgid "Could not find or load game \""
+#, fuzzy
+msgid "Could not find or load game: "
msgstr "Ðемагчыма знайÑці ці загрузіць гульню \""
#: src/client/clientlauncher.cpp
@@ -1122,18 +1241,6 @@ msgstr "Ðе атрымалаÑÑ Ð°Ð´ÐºÑ€Ñ‹Ñ†ÑŒ пададзены файл пÐ
msgid "Provided world path doesn't exist: "
msgstr "Пададзены шлÑÑ… не Ñ–Ñнуе: "
-#. ~ DO NOT TRANSLATE THIS LITERALLY!
-#. This is a special string. Put either "no" or "yes"
-#. into the translation field (literally).
-#. Choose "yes" if the language requires use of the fallback
-#. font, "no" otherwise.
-#. The fallback font is (normally) required for languages with
-#. non-Latin script, like Chinese.
-#. When in doubt, test your translation.
-#: src/client/fontengine.cpp
-msgid "needs_fallback_font"
-msgstr "no"
-
#: src/client/game.cpp
msgid ""
"\n"
@@ -1147,14 +1254,6 @@ msgid "- Address: "
msgstr "- ÐдраÑ: "
#: src/client/game.cpp
-msgid "- Creative Mode: "
-msgstr "- Творчы Ñ€Ñжым: "
-
-#: src/client/game.cpp
-msgid "- Damage: "
-msgstr "- Пашкоджанні: "
-
-#: src/client/game.cpp
msgid "- Mode: "
msgstr "- РÑжым: "
@@ -1176,6 +1275,16 @@ msgid "- Server Name: "
msgstr "- Ðазва Ñервера: "
#: src/client/game.cpp
+#, fuzzy
+msgid "A serialization error occurred:"
+msgstr "ÐдбылаÑÑ Ð¿Ð°Ð¼Ñ‹Ð»ÐºÐ°:"
+
+#: src/client/game.cpp
+#, c-format
+msgid "Access denied. Reason: %s"
+msgstr ""
+
+#: src/client/game.cpp
msgid "Automatic forward disabled"
msgstr "Ðўтаматычны рух наперад адключаны"
@@ -1184,6 +1293,22 @@ msgid "Automatic forward enabled"
msgstr "Ðўтаматычны рух наперад уключаны"
#: src/client/game.cpp
+msgid "Block bounds hidden"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Block bounds shown for all blocks"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Block bounds shown for current block"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Block bounds shown for nearby blocks"
+msgstr ""
+
+#: src/client/game.cpp
msgid "Camera update disabled"
msgstr "Ðбнаўленне камеры адключана"
@@ -1192,6 +1317,10 @@ msgid "Camera update enabled"
msgstr "Ðбнаўленне камеры ўключана"
#: src/client/game.cpp
+msgid "Can't show block bounds (need 'basic_debug' privilege)"
+msgstr ""
+
+#: src/client/game.cpp
msgid "Change Password"
msgstr "ЗмÑніць пароль"
@@ -1204,6 +1333,11 @@ msgid "Cinematic mode enabled"
msgstr "Кінематаграфічны Ñ€Ñжым уключаны"
#: src/client/game.cpp
+#, fuzzy
+msgid "Client disconnected"
+msgstr "Модынг кліента"
+
+#: src/client/game.cpp
msgid "Client side scripting is disabled"
msgstr "КліентÑÐºÑ–Ñ Ð¼Ð°Ð´Ñ‹Ñ„Ñ–ÐºÐ°Ñ†Ñ‹Ñ– выключаныÑ"
@@ -1212,6 +1346,10 @@ msgid "Connecting to server..."
msgstr "ЗлучÑнне з Ñерверам…"
#: src/client/game.cpp
+msgid "Connection failed for unknown reason"
+msgstr ""
+
+#: src/client/game.cpp
msgid "Continue"
msgstr "ПрацÑгнуць"
@@ -1249,6 +1387,11 @@ msgstr ""
"- %s: размова\n"
#: src/client/game.cpp
+#, c-format
+msgid "Couldn't resolve address: %s"
+msgstr ""
+
+#: src/client/game.cpp
msgid "Creating client..."
msgstr "СтварÑнне кліента…"
@@ -1377,6 +1520,11 @@ msgid "Minimap currently disabled by game or mod"
msgstr "Мінімапа на дадзены момант Ð°Ð´ÐºÐ»ÑŽÑ‡Ð°Ð½Ð°Ñ Ð³ÑƒÐ»ÑŒÐ½Ñ‘Ð¹ альбо мадыфікацыÑй"
#: src/client/game.cpp
+#, fuzzy
+msgid "Multiplayer"
+msgstr "ÐÐ´Ð·Ñ–Ð½Ð¾Ñ‡Ð½Ð°Ñ Ð³ÑƒÐ»ÑŒÐ½Ñ"
+
+#: src/client/game.cpp
msgid "Noclip mode disabled"
msgstr "РÑжым руху Ñкрозь Ñцены адключаны"
@@ -1450,6 +1598,21 @@ msgstr "Гук уключаны"
#: src/client/game.cpp
#, c-format
+msgid "The server is probably running a different version of %s."
+msgstr ""
+
+#: src/client/game.cpp
+#, c-format
+msgid "Unable to connect to %s because IPv6 is disabled"
+msgstr ""
+
+#: src/client/game.cpp
+#, c-format
+msgid "Unable to listen on %s because IPv6 is disabled"
+msgstr ""
+
+#: src/client/game.cpp
+#, c-format
msgid "Viewing range changed to %d"
msgstr "БачнаÑць Ð·Ð¼ÐµÐ½ÐµÐ½Ð°Ñ Ð½Ð° %d"
@@ -1518,10 +1681,6 @@ msgid "Caps Lock"
msgstr "Caps Lock"
#: src/client/keycode.cpp
-msgid "Clear"
-msgstr "ÐчыÑціць"
-
-#: src/client/keycode.cpp
msgid "Control"
msgstr "Ctrl"
@@ -1787,6 +1946,15 @@ msgstr "Мінімапа Ñž Ñ€Ñжыме паверхні, павелічÑннÐ
msgid "Minimap in texture mode"
msgstr "Мінімальны памер Ñ‚ÑкÑтуры"
+#: src/gui/guiChatConsole.cpp
+#, fuzzy
+msgid "Failed to open webpage"
+msgstr "Ðе атрымалаÑÑ Ñпампаваць $1"
+
+#: src/gui/guiChatConsole.cpp
+msgid "Opening webpage"
+msgstr ""
+
#: src/gui/guiConfirmRegistration.cpp src/gui/guiPasswordChange.cpp
msgid "Passwords do not match!"
msgstr "Паролі не Ñупадаюць!"
@@ -1815,7 +1983,8 @@ msgid "Proceed"
msgstr "ПрацÑгнуць"
#: src/gui/guiKeyChangeMenu.cpp
-msgid "\"Special\" = climb down"
+#, fuzzy
+msgid "\"Aux1\" = climb down"
msgstr "«ÐдмыÑловаÑ» = злазіць"
#: src/gui/guiKeyChangeMenu.cpp
@@ -1827,10 +1996,18 @@ msgid "Automatic jumping"
msgstr "ÐўтаÑкок"
#: src/gui/guiKeyChangeMenu.cpp
+msgid "Aux1"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
msgid "Backward"
msgstr "Ðазад"
#: src/gui/guiKeyChangeMenu.cpp
+msgid "Block bounds"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
msgid "Change camera"
msgstr "ЗмÑніць камеру"
@@ -1920,10 +2097,6 @@ msgid "Sneak"
msgstr "КраÑціÑÑ"
#: src/gui/guiKeyChangeMenu.cpp
-msgid "Special"
-msgstr "ÐдмыÑловаÑ"
-
-#: src/gui/guiKeyChangeMenu.cpp
msgid "Toggle HUD"
msgstr "HUD"
@@ -1984,7 +2157,8 @@ msgid "Muted"
msgstr "Сцішаны"
#: src/gui/guiVolumeChange.cpp
-msgid "Sound Volume: "
+#, fuzzy, c-format
+msgid "Sound Volume: %d%%"
msgstr "ГучнаÑць: "
#. ~ Imperative, as in "Enter/type in text".
@@ -2010,9 +2184,10 @@ msgstr ""
"дотыку."
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
-"(Android) Use virtual joystick to trigger \"aux\" button.\n"
-"If enabled, virtual joystick will also tap \"aux\" button when out of main "
+"(Android) Use virtual joystick to trigger \"Aux1\" button.\n"
+"If enabled, virtual joystick will also tap \"Aux1\" button when out of main "
"circle."
msgstr ""
"(Android) ВыкарыÑтоўваць віртуальны джойÑцік Ð´Ð»Ñ Ð°ÐºÑ‚Ñ‹Ð²Ð°Ñ†Ñ‹Ñ– кнопкі \"aux\".\n"
@@ -2235,6 +2410,10 @@ msgstr ""
"(не толькі X11/Android), напрыклад, Ð´Ð»Ñ 4k-Ñкранаў."
#: src/settings_translation_file.cpp
+msgid "Adjust the detected display density, used for scaling UI elements."
+msgstr ""
+
+#: src/settings_translation_file.cpp
#, c-format
msgid ""
"Adjusts the density of the floatland layer.\n"
@@ -2359,6 +2538,16 @@ msgid "Autoscaling mode"
msgstr "РÑжым аўтамаштабаваннÑ"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Aux1 key"
+msgstr "Клавіша Ñкока"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Aux1 key for climbing/descending"
+msgstr "ÐдмыÑÐ»Ð¾Ð²Ð°Ñ ÐºÐ»Ð°Ð²Ñ–ÑˆÐ° Ð´Ð»Ñ ÐºÐ°Ñ€Ð°ÑканнÑ/ÑпуÑканнÑ"
+
+#: src/settings_translation_file.cpp
msgid "Backward key"
msgstr "Клавіша назад"
@@ -2403,10 +2592,6 @@ msgid "Biome noise"
msgstr "Шум біёму"
#: src/settings_translation_file.cpp
-msgid "Bits per pixel (aka color depth) in fullscreen mode."
-msgstr "Біты на пікÑель (Ð³Ð»Ñ‹Ð±Ñ–Ð½Ñ ÐºÐ¾Ð»ÐµÑ€Ñƒ) у поўнаÑкранным Ñ€Ñжыме."
-
-#: src/settings_translation_file.cpp
msgid "Block send optimize distance"
msgstr "ÐÐ¿Ñ‚Ñ‹Ð¼Ñ–Ð·Ð°Ð²Ð°Ð½Ð°Ñ Ð°Ð´Ð»ÐµÐ³Ð»Ð°Ñць Ð°Ð´Ð¿Ñ€Ð°ÑžÐ»ÐµÐ½Ð½Ñ Ð±Ð»Ð¾ÐºÐ°Ñž"
@@ -2516,6 +2701,16 @@ msgstr ""
#: src/settings_translation_file.cpp
#, fuzzy
+msgid "Chat command time message threshold"
+msgstr "МакÑÑ–Ð¼Ð°Ð»ÑŒÐ½Ð°Ñ ÐºÐ¾Ð»ÑŒÐºÐ°Ñць паведамленнÑÑž у размове Ð´Ð»Ñ Ð²Ñ‹ÐºÐ»ÑŽÑ‡ÑннÑ"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Chat commands"
+msgstr "Загады размовы"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
msgid "Chat font size"
msgstr "Памер шрыфту"
@@ -2549,8 +2744,9 @@ msgid "Chat toggle key"
msgstr "Клавіша пераключÑÐ½Ð½Ñ Ñ€Ð°Ð·Ð¼Ð¾Ð²Ñ‹"
#: src/settings_translation_file.cpp
-msgid "Chatcommands"
-msgstr "Загады размовы"
+#, fuzzy
+msgid "Chat weblinks"
+msgstr "Размова паказваецца"
#: src/settings_translation_file.cpp
msgid "Chunk size"
@@ -2569,6 +2765,12 @@ msgid "Clean transparent textures"
msgstr "ЧыÑÑ‚Ñ‹Ñ Ð¿Ñ€Ð°Ð·Ñ€Ñ‹ÑÑ‚Ñ‹Ñ Ñ‚ÑкÑтуры"
#: src/settings_translation_file.cpp
+msgid ""
+"Clickable weblinks (middle-click or Ctrl+left-click) enabled in chat console "
+"output."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Client"
msgstr "Кліент"
@@ -2613,6 +2815,11 @@ msgid "Colored fog"
msgstr "КалÑровы туман"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Colored shadows"
+msgstr "КалÑровы туман"
+
+#: src/settings_translation_file.cpp
msgid ""
"Comma-separated list of flags to hide in the content repository.\n"
"\"nonfree\" can be used to hide packages which do not qualify as 'free "
@@ -2652,6 +2859,22 @@ msgid "Command key"
msgstr "Клавіша загаду"
#: src/settings_translation_file.cpp
+msgid ""
+"Compression level to use when saving mapblocks to disk.\n"
+"-1 - use default compression level\n"
+"0 - least compression, fastest\n"
+"9 - best compression, slowest"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Compression level to use when sending mapblocks to the client.\n"
+"-1 - use default compression level\n"
+"0 - least compression, fastest\n"
+"9 - best compression, slowest"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Connect glass"
msgstr "СуцÑльнае шкло"
@@ -2747,7 +2970,7 @@ msgstr "ПразрыÑтаÑць перакрыжаваннÑ"
#, fuzzy
msgid ""
"Crosshair alpha (opaqueness, between 0 and 255).\n"
-"Also controls the object crosshair color"
+"This also applies to the object crosshair."
msgstr "ПразрыÑтаÑць Ð¿ÐµÑ€Ð°ÐºÑ€Ñ‹Ð¶Ð°Ð²Ð°Ð½Ð½Ñ (паміж 0 Ñ– 255)."
#: src/settings_translation_file.cpp
@@ -2828,11 +3051,10 @@ msgstr "ÐŸÑ€Ð°Ð´Ð²Ñ‹Ð·Ð½Ð°Ñ‡Ð°Ð½Ð°Ñ Ð³ÑƒÐ»ÑŒÐ½Ñ"
#: src/settings_translation_file.cpp
msgid ""
-"Default timeout for cURL, stated in milliseconds.\n"
-"Only has an effect if compiled with cURL."
+"Define shadow filtering quality.\n"
+"This simulates the soft shadows effect by applying a PCF or Poisson disk\n"
+"but also uses more resources."
msgstr ""
-"Прадвызначаны таймаўт Ð´Ð»Ñ cURL, зададзены Ñž міліÑекундах.\n"
-"Уплывае толькі пры кампілÑцыі з cURL."
#: src/settings_translation_file.cpp
msgid "Defines areas where trees have apples."
@@ -2960,6 +3182,10 @@ msgid "Disallow empty passwords"
msgstr "Забараніць пуÑÑ‚Ñ‹Ñ Ð¿Ð°Ñ€Ð¾Ð»Ñ–"
#: src/settings_translation_file.cpp
+msgid "Display Density Scaling Factor"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Domain name of server, to be displayed in the serverlist."
msgstr "Ð”Ð°Ð¼ÐµÐ½Ð½Ð°Ñ Ð½Ð°Ð·Ð²Ð° Ñервера, што будзе паказвацца Ñž ÑпіÑе Ñервераў."
@@ -3006,6 +3232,19 @@ msgstr ""
"ГÑта падтрымка ÑкÑÐ¿ÐµÑ€Ñ‹Ð¼ÐµÐ½Ñ‚Ð°Ð»ÑŒÐ½Ð°Ñ Ñ– API можа змÑніцца."
#: src/settings_translation_file.cpp
+msgid ""
+"Enable Poisson disk filtering.\n"
+"On true uses Poisson disk to make \"soft shadows\". Otherwise uses PCF "
+"filtering."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable colored shadows.\n"
+"On true translucent nodes cast colored shadows. This is expensive."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Enable console window"
msgstr "Уключаць акно канÑолі"
@@ -3132,6 +3371,12 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Enables tradeoffs that reduce CPU load or increase rendering performance\n"
+"at the expense of minor visual glitches that do not impact game playability."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Engine profiling data print interval"
msgstr "ІнтÑрвал Ð´Ñ€ÑƒÐºÐ°Ð²Ð°Ð½Ð½Ñ Ð´Ð°Ð½Ñ‹Ñ… прафілÑÐ²Ð°Ð½Ð½Ñ Ñ€ÑƒÑ…Ð°Ð²Ñ–ÐºÐ°"
@@ -3172,18 +3417,6 @@ msgid "Fallback font path"
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 "Клавіша шпаркаÑці"
@@ -3200,8 +3433,9 @@ msgid "Fast movement"
msgstr "Шпаркае перамÑшчÑнне"
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
-"Fast movement (via the \"special\" key).\n"
+"Fast movement (via the \"Aux1\" key).\n"
"This requires the \"fast\" privilege on the server."
msgstr ""
"Шпаркае перамÑшчÑнне (з дапамогай клавішы выкарыÑтаннÑ).\n"
@@ -3238,11 +3472,12 @@ msgid "Filmic tone mapping"
msgstr "Кінематаграфічнае танальнае адлюÑтраванне"
#: src/settings_translation_file.cpp
+#, fuzzy
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."
+"which PNG optimizers usually discard, often resulting in dark or\n"
+"light edges to transparent textures. Apply a filter to clean that up\n"
+"at texture load time. This is automatically enabled if mipmapping is enabled."
msgstr ""
"ÐÐ´Ñ„Ñ–Ð»ÑŒÑ‚Ñ€Ð°Ð²Ð°Ð½Ñ‹Ñ Ñ‚ÑкÑтуры могуць змешваць значÑнні RGB з цалкам празрыÑтымі "
"ÑуÑеднімі, ÑÐºÑ–Ñ PNG-аптымізатары звычайна адкідваюць, што чаÑам прыводзіць "
@@ -3346,15 +3581,15 @@ msgid "Font size"
msgstr "Памер шрыфту"
#: src/settings_translation_file.cpp
-msgid "Font size of the default font in point (pt)."
+msgid "Font size divisible by"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Font size of the fallback font in point (pt)."
+msgid "Font size of the default font where 1 unit = 1 pixel at 96 DPI"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Font size of the monospace font in point (pt)."
+msgid "Font size of the monospace font where 1 unit = 1 pixel at 96 DPI"
msgstr ""
#: src/settings_translation_file.cpp
@@ -3365,6 +3600,17 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"For pixel-style fonts that do not scale well, this ensures that font sizes "
+"used\n"
+"with this font will always be divisible by this value, in pixels. For "
+"instance,\n"
+"a pixel font 16 pixels tall should have this set to 16, so it will only ever "
+"be\n"
+"sized 16, 32, 48, etc., so a mod requesting a size of 25 will get 32."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Format of player chat messages. The following strings are valid "
"placeholders:\n"
"@name, @message, @timestamp (optional)"
@@ -3428,10 +3674,6 @@ msgid "Fraction of the visible distance at which fog starts to be rendered"
msgstr "ЧаÑтка бачнай адлеглаÑці, на Ñкой пачынае з'ÑўлÑцца туман"
#: src/settings_translation_file.cpp
-msgid "FreeType fonts"
-msgstr "Шрыфты FreeType"
-
-#: src/settings_translation_file.cpp
msgid ""
"From how far blocks are generated for clients, stated in mapblocks (16 "
"nodes)."
@@ -3464,10 +3706,6 @@ msgid "Full screen"
msgstr "Ðа ўвеÑÑŒ Ñкран"
#: src/settings_translation_file.cpp
-msgid "Full screen BPP"
-msgstr "Ð“Ð»Ñ‹Ð±Ñ–Ð½Ñ ÐºÐ¾Ð»ÐµÑ€Ñƒ Ñž поўнаÑкранным Ñ€Ñжыме (бітаў на пікÑель)"
-
-#: src/settings_translation_file.cpp
msgid "Fullscreen mode."
msgstr "ПоўнаÑкранны Ñ€Ñжым."
@@ -3488,10 +3726,11 @@ msgid "Global callbacks"
msgstr "Ð“Ð»Ð°Ð±Ð°Ð»ÑŒÐ½Ñ‹Ñ Ð·Ð²Ð°Ñ€Ð¾Ñ‚Ð½Ñ‹Ñ Ð²Ñ‹ÐºÐ»Ñ–ÐºÑ–"
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
"Global map generation attributes.\n"
"In Mapgen v6 the 'decorations' flag controls all decorations except trees\n"
-"and junglegrass, in all other mapgens this flag controls all decorations."
+"and jungle grass, in all other mapgens this flag controls all decorations."
msgstr ""
"Ð“Ð»Ð°Ð±Ð°Ð»ÑŒÐ½Ñ‹Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ñ‹ генерацыі мапы.\n"
"У генератары мапы 6 параметр «decorations» кіруе ÑžÑімі дÑкарацыÑмі,\n"
@@ -3578,7 +3817,9 @@ msgid "Heat noise"
msgstr "Цеплавы шум"
#: src/settings_translation_file.cpp
-msgid "Height component of the initial window size."
+#, fuzzy
+msgid ""
+"Height component of the initial window size. Ignored in fullscreen mode."
msgstr "Ð’Ñ‹ÑˆÑ‹Ð½Ñ Ð°ÐºÐ½Ð° Ð¿Ð°Ð´Ñ‡Ð°Ñ Ð·Ð°Ð¿ÑƒÑку."
#: src/settings_translation_file.cpp
@@ -3590,10 +3831,6 @@ msgid "Height select noise"
msgstr "Шум выбару вышыні"
#: src/settings_translation_file.cpp
-msgid "High-precision FPU"
-msgstr "Ð’Ñ‹Ñокадакладны FPU"
-
-#: src/settings_translation_file.cpp
msgid "Hill steepness"
msgstr "КрутаÑць пагоркаў"
@@ -3834,9 +4071,9 @@ msgstr ""
"каб не марнаваць дарма магутнаÑць працÑÑара."
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
-"If disabled, \"special\" key is used to fly fast if both fly and fast mode "
-"are\n"
+"If disabled, \"Aux1\" key is used to fly fast if both fly and fast mode are\n"
"enabled."
msgstr ""
"Калі выключана, то клавіша \"special\" выкарыÑтоўваецца Ð´Ð»Ñ Ñ…ÑƒÑ‚ÐºÐ°Ð³Ð° палёту, "
@@ -3866,9 +4103,10 @@ msgstr ""
"Ðа Ñерверы патрабуецца прывілей \"noclip\"."
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
-"If enabled, \"special\" key instead of \"sneak\" key is used for climbing "
-"down and\n"
+"If enabled, \"Aux1\" key instead of \"Sneak\" key is used for climbing down "
+"and\n"
"descending."
msgstr ""
"Калі ўключана, то Ð´Ð»Ñ ÑпуÑÐºÐ°Ð½Ð½Ñ Ñ– апуÑÐºÐ°Ð½Ð½Ñ Ð±ÑƒÐ´Ð·Ðµ выкарыÑтоўвацца клавіша "
@@ -3928,6 +4166,12 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"If the execution of a chat command takes longer than this specified time in\n"
+"seconds, add the time information to the chat command message"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"If the file size of debug.txt exceeds the number of megabytes specified in\n"
"this setting when it is opened, the file is moved to debug.txt.1,\n"
"deleting an older debug.txt.1 if it exists.\n"
@@ -3979,7 +4223,8 @@ msgstr ""
"Звычайна патрабуюцца толькі раÑпрацоўшчыкам Ñдра"
#: src/settings_translation_file.cpp
-msgid "Instrument chatcommands on registration."
+#, fuzzy
+msgid "Instrument chat commands on registration."
msgstr "Выконваць загады Ñž размове пры Ñ€ÑгіÑтрацыі."
#: src/settings_translation_file.cpp
@@ -4074,7 +4319,7 @@ msgstr "ІнтÑрвал паўтору кнопкі джойÑціка"
#: src/settings_translation_file.cpp
#, fuzzy
-msgid "Joystick deadzone"
+msgid "Joystick dead zone"
msgstr "Тып джойÑціка"
#: src/settings_translation_file.cpp
@@ -5107,11 +5352,6 @@ msgstr ""
"напрамку поглÑду."
#: src/settings_translation_file.cpp
-msgid "Makes DirectX work with LuaJIT. Disable if it causes troubles."
-msgstr ""
-"Прымушае DirectX працаваць з LuaJIT. Выключыце, калі гÑта выклікае праблемы."
-
-#: src/settings_translation_file.cpp
msgid "Makes all liquids opaque"
msgstr "Робіць уÑе вадкаÑці непразрыÑтымі"
@@ -5203,6 +5443,11 @@ msgid "Map save interval"
msgstr "ІнтÑрвал Ð·Ð°Ñ…Ð°Ð²Ð°Ð½Ð½Ñ Ð¼Ð°Ð¿Ñ‹"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Map shadows update frames"
+msgstr "ІнтÑрвал Ð°Ð±Ð½Ð°ÑžÐ»ÐµÐ½Ð½Ñ Ð²Ð°Ð´ÐºÐ°Ñці"
+
+#: src/settings_translation_file.cpp
msgid "Mapblock limit"
msgstr "Ліміт блокаў мапы"
@@ -5312,6 +5557,10 @@ msgid "Maximum FPS when the window is not focused, or when the game is paused."
msgstr "МакÑімальны FPS, калі Ð³ÑƒÐ»ÑŒÐ½Ñ Ð¿Ñ€Ñ‹Ð¿Ñ‹Ð½ÐµÐ½Ð°Ñ."
#: src/settings_translation_file.cpp
+msgid "Maximum distance to render shadows."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Maximum forceloaded blocks"
msgstr "МакÑÑ–Ð¼Ð°Ð»ÑŒÐ½Ð°Ñ ÐºÐ¾Ð»ÑŒÐºÐ°Ñць прымуÑова загружаемых блокаў"
@@ -5440,12 +5689,21 @@ msgstr ""
"0 - выключыць чаргу, -1 - зрабіць неабмежаванай."
#: src/settings_translation_file.cpp
-msgid "Maximum time in ms a file download (e.g. a mod download) may take."
+#, fuzzy
+msgid ""
+"Maximum time a file download (e.g. a mod download) may take, stated in "
+"milliseconds."
msgstr ""
"МакÑімальны Ñ‡Ð°Ñ Ñƒ міліÑекундах, Ñкі можа занÑць Ñпампоўванне файла\n"
"(напрыклад Ñпампоўванне мадыфікацыі)."
#: src/settings_translation_file.cpp
+msgid ""
+"Maximum time an interactive request (e.g. server list fetch) may take, "
+"stated in milliseconds."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Maximum users"
msgstr "МакÑÑ–Ð¼Ð°Ð»ÑŒÐ½Ð°Ñ ÐºÐ¾Ð»ÑŒÐºÐ°Ñць карыÑтальнікаў"
@@ -5507,7 +5765,8 @@ msgid "Mod channels"
msgstr "Каналы мадыфікацый"
#: src/settings_translation_file.cpp
-msgid "Modifies the size of the hudbar elements."
+#, fuzzy
+msgid "Modifies the size of the HUD elements."
msgstr "ЗмÑнÑе памер Ñлеметаў панÑлі HUD."
#: src/settings_translation_file.cpp
@@ -5519,6 +5778,11 @@ msgid "Monospace font size"
msgstr "Памер монашырыннага шрыфту"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Monospace font size divisible by"
+msgstr "Памер монашырыннага шрыфту"
+
+#: src/settings_translation_file.cpp
msgid "Mountain height noise"
msgstr "Шум вышыні гор"
@@ -5668,9 +5932,10 @@ msgstr ""
"'On_generated. Ð”Ð»Ñ Ð±Ð¾Ð»ÑŒÑˆÐ°Ñці карыÑтальнікаў найлепшым значÑннем можа быць 1."
#: src/settings_translation_file.cpp
+#, fuzzy
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"
+"This is a trade-off between SQLite transaction overhead and\n"
"memory consumption (4096=100MB, as a rule of thumb)."
msgstr ""
"КолькаÑць дадатковых блокаў, што могуць адначаÑова загружацца загадам /"
@@ -5693,11 +5958,6 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Opaqueness (alpha) of the shadow behind the fallback font, between 0 and 255."
-msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid ""
"Open the pause menu when the window's focus is lost. Does not pause if a "
"formspec is\n"
"open."
@@ -5706,10 +5966,12 @@ msgstr ""
"небудзь меню ўжо адкрыта."
#: src/settings_translation_file.cpp
+msgid "Optional override for chat weblink color."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid ""
-"Path of the fallback font.\n"
-"If “freetype†setting is enabled: Must be a TrueType font.\n"
-"If “freetype†setting is disabled: Must be a bitmap or XML vectors font.\n"
+"Path of the fallback font. Must be a TrueType font.\n"
"This font will be used for certain languages or if the default font is "
"unavailable."
msgstr ""
@@ -5734,17 +5996,13 @@ msgstr "ШлÑÑ… да каталога Ñ‚ÑкÑтур. УÑе Ñ‚ÑкÑтуры Ñ
#: src/settings_translation_file.cpp
msgid ""
-"Path to the default font.\n"
-"If “freetype†setting is enabled: Must be a TrueType font.\n"
-"If “freetype†setting is disabled: Must be a bitmap or XML vectors font.\n"
+"Path to the default font. Must be a TrueType font.\n"
"The fallback font will be used if the font cannot be loaded."
msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Path to the monospace font.\n"
-"If “freetype†setting is enabled: Must be a TrueType font.\n"
-"If “freetype†setting is disabled: Must be a bitmap or XML vectors font.\n"
+"Path to the monospace font. Must be a TrueType font.\n"
"This font is used for e.g. the console and profiler screen."
msgstr ""
@@ -5804,6 +6062,11 @@ msgid "Player versus player"
msgstr "Гулец Ñупраць гульца"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Poisson filtering"
+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."
@@ -5858,9 +6121,9 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"Prometheus listener address.\n"
-"If minetest is compiled with ENABLE_PROMETHEUS option enabled,\n"
+"If Minetest is compiled with ENABLE_PROMETHEUS option enabled,\n"
"enable metrics listener for Prometheus on that address.\n"
-"Metrics can be fetch on http://127.0.0.1:30000/metrics"
+"Metrics can be fetched on http://127.0.0.1:30000/metrics"
msgstr ""
#: src/settings_translation_file.cpp
@@ -6195,6 +6458,35 @@ msgstr ""
"кліентамі ў размову."
#: src/settings_translation_file.cpp
+msgid ""
+"Set the shadow strength.\n"
+"Lower value means lighter shadows, higher value means darker shadows."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set the soft shadow radius size.\n"
+"Lower values mean sharper shadows, bigger values mean softer shadows.\n"
+"Minimum value: 1.0; maximum value: 10.0"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set the tilt of Sun/Moon orbit in degrees.\n"
+"Value of 0 means no tilt / vertical orbit.\n"
+"Minimum value: 0.0; maximum value: 60.0"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid ""
+"Set to true to enable Shadow Mapping.\n"
+"Requires shaders to be enabled."
+msgstr ""
+"ЗначÑнне \"true\" уключае калыханне ліÑцÑ.\n"
+"Патрабуюцца ÑžÐºÐ»ÑŽÑ‡Ð°Ð½Ñ‹Ñ ÑˆÑйдÑры."
+
+#: src/settings_translation_file.cpp
#, fuzzy
msgid ""
"Set to true to enable waving leaves.\n"
@@ -6222,6 +6514,13 @@ msgstr ""
"Патрабуюцца ÑžÐºÐ»ÑŽÑ‡Ð°Ð½Ñ‹Ñ ÑˆÑйдÑры."
#: src/settings_translation_file.cpp
+msgid ""
+"Sets shadow texture quality to 32 bits.\n"
+"On false, 16 bits texture will be used.\n"
+"This can cause much more artifacts in the shadow."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Shader path"
msgstr "ШлÑÑ… да шÑйдÑраў"
@@ -6239,17 +6538,32 @@ msgstr ""
#: src/settings_translation_file.cpp
#, fuzzy
+msgid "Shadow filter quality"
+msgstr "ЯкаÑць здымкаў Ñкрана"
+
+#: src/settings_translation_file.cpp
+msgid "Shadow map max distance in nodes to render shadows"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Shadow map texture in 32 bits"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Shadow map texture size"
+msgstr "Мінімальны памер Ñ‚ÑкÑтуры"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
"Shadow offset (in pixels) of the default font. If 0, then shadow will not be "
"drawn."
msgstr "Зрух цені шрыфту. Калі 0, то цень не будзе паказвацца."
#: src/settings_translation_file.cpp
-#, fuzzy
-msgid ""
-"Shadow offset (in pixels) of the fallback font. If 0, then shadow will not "
-"be drawn."
-msgstr "Зрух цені шрыфту. Калі 0, то цень не будзе паказвацца."
+msgid "Shadow strength"
+msgstr ""
#: src/settings_translation_file.cpp
msgid "Shape of the minimap. Enabled = round, disabled = square."
@@ -6273,7 +6587,7 @@ msgstr ""
"ПаÑÐ»Ñ Ð·Ð¼ÐµÐ½Ñ‹ мовы патрÑбна перазапуÑціць гульню."
#: src/settings_translation_file.cpp
-msgid "Show nametag backgrounds by default"
+msgid "Show name tag backgrounds by default"
msgstr ""
#: src/settings_translation_file.cpp
@@ -6309,6 +6623,10 @@ msgstr ""
"з галоўнага патоку гульні, тым Ñамым памÑншаючы дрыжанне."
#: src/settings_translation_file.cpp
+msgid "Sky Body Orbit Tilt"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Slice w"
msgstr "ЧаÑтка W"
@@ -6367,16 +6685,13 @@ msgid "Sneaking speed, in nodes per second."
msgstr "ХуткаÑць крадкоў у вузлах за Ñекунду."
#: src/settings_translation_file.cpp
-msgid "Sound"
-msgstr "Гук"
-
-#: src/settings_translation_file.cpp
-msgid "Special key"
-msgstr "ÐдмыÑÐ»Ð¾Ð²Ð°Ñ ÐºÐ»Ð°Ð²Ñ–ÑˆÐ°"
+#, fuzzy
+msgid "Soft shadow radius"
+msgstr "ПразрыÑтаÑць цені шрыфту"
#: src/settings_translation_file.cpp
-msgid "Special key for climbing/descending"
-msgstr "ÐдмыÑÐ»Ð¾Ð²Ð°Ñ ÐºÐ»Ð°Ð²Ñ–ÑˆÐ° Ð´Ð»Ñ ÐºÐ°Ñ€Ð°ÑканнÑ/ÑпуÑканнÑ"
+msgid "Sound"
+msgstr "Гук"
#: src/settings_translation_file.cpp
msgid ""
@@ -6400,6 +6715,14 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Spread a complete update of shadow map over given amount of frames.\n"
+"Higher values might make shadows laggy, lower values\n"
+"will consume more resources.\n"
+"Minimum value: 1; maximum value: 16"
+msgstr ""
+
+#: src/settings_translation_file.cpp
#, fuzzy
msgid ""
"Spread of light curve boost range.\n"
@@ -6517,6 +6840,13 @@ msgstr "ШлÑÑ… да Ñ‚ÑкÑтур"
#: src/settings_translation_file.cpp
msgid ""
+"Texture size to render the shadow map on.\n"
+"This must be a power of two.\n"
+"Bigger numbers create better shadows but it is also more expensive."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Textures on a node may be aligned either to the node or to the world.\n"
"The former mode suits better things like machines, furniture, etc., while\n"
"the latter makes stairs and microblocks fit surroundings better.\n"
@@ -6538,7 +6868,7 @@ msgstr "URL Ñ€ÑпазіторыÑ"
#: src/settings_translation_file.cpp
#, fuzzy
-msgid "The deadzone of the joystick"
+msgid "The dead zone of the joystick"
msgstr "ІдÑнтыфікатар джойÑціка Ð´Ð»Ñ Ð²Ñ‹ÐºÐ°Ñ€Ñ‹ÑтаннÑ"
#: src/settings_translation_file.cpp
@@ -6610,7 +6940,7 @@ msgstr ""
#: src/settings_translation_file.cpp
#, fuzzy
msgid ""
-"The rendering back-end for Irrlicht.\n"
+"The rendering back-end.\n"
"A restart is required after changing this.\n"
"Note: On Android, stick with OGLES1 if unsure! App may fail to start "
"otherwise.\n"
@@ -6625,9 +6955,10 @@ msgstr ""
"з падтрымкай шÑйдÑраў."
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
"The sensitivity of the joystick axes for moving the\n"
-"ingame view frustum around."
+"in-game view frustum around."
msgstr "ÐдчувальнаÑць воÑÑÑž джойÑціка пры азіранні."
#: src/settings_translation_file.cpp
@@ -6744,6 +7075,10 @@ msgid "Touch screen threshold"
msgstr "Парог ÑÑнÑарнага Ñкрана"
#: src/settings_translation_file.cpp
+msgid "Tradeoffs for performance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Trees noise"
msgstr "Шум дрÑÑž"
@@ -6824,8 +7159,9 @@ msgid "Use bilinear filtering when scaling textures."
msgstr "ВыкарыÑтоўваць білінейную фільтрацыю пры маштабаванні Ñ‚ÑкÑтур."
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
-"Use mip mapping to scale textures. May slightly increase performance,\n"
+"Use mipmapping to scale textures. May slightly increase performance,\n"
"especially when using a high resolution texture pack.\n"
"Gamma correct downscaling is not supported."
msgstr ""
@@ -6946,7 +7282,8 @@ msgid "Viewing range"
msgstr "ДыÑпазон бачнаÑці"
#: src/settings_translation_file.cpp
-msgid "Virtual joystick triggers aux button"
+#, fuzzy
+msgid "Virtual joystick triggers Aux1 button"
msgstr "Ð”Ð°Ð´Ð°Ñ‚ÐºÐ¾Ð²Ð°Ñ ÐºÐ½Ð¾Ð¿ÐºÐ° трыгераў віртуальнага джойÑціка"
#: src/settings_translation_file.cpp
@@ -7029,6 +7366,11 @@ msgid "Waving plants"
msgstr "Калыханне раÑлін"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Weblink color"
+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"
@@ -7051,14 +7393,14 @@ msgstr ""
"ÑÐºÑ–Ñ Ð½Ðµ падтрымліваюць перадачу Ñ‚ÑкÑтур з апаратуры назад."
#: src/settings_translation_file.cpp
+#, fuzzy
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.\n"
+"memory. Powers of 2 are recommended. This setting is ONLY applied if\n"
+"bilinear/trilinear/anisotropic filtering is enabled.\n"
"This is also used as the base node texture size for world-aligned\n"
"texture autoscaling."
msgstr ""
@@ -7075,18 +7417,8 @@ msgstr ""
"ÑуÑветнага аўтамаÑÑˆÑ‚Ð°Ð±Ð°Ð²Ð°Ð½Ð½Ñ Ñ‚ÑкÑтур."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
-"Whether FreeType fonts are used, requires FreeType support to be compiled "
-"in.\n"
-"If disabled, bitmap and XML vectors fonts are used instead."
-msgstr ""
-"ВыкарыÑтанне шрыфтоў FreeType. Падтрымка FreeType муÑіць быць ÑƒÐºÐ»ÑŽÑ‡Ð°Ð½Ð°Ñ "
-"Ð¿Ð°Ð´Ñ‡Ð°Ñ ÐºÐ°Ð¼Ð¿Ñ–Ð»Ñцыі."
-
-#: src/settings_translation_file.cpp
-msgid ""
-"Whether nametag backgrounds should be shown by default.\n"
+"Whether name tag backgrounds should be shown by default.\n"
"Mods may still set a background."
msgstr ""
@@ -7133,7 +7465,8 @@ msgid ""
msgstr "Паказваць адладачную інфармацыю (тое ж, што і F5)."
#: src/settings_translation_file.cpp
-msgid "Width component of the initial window size."
+#, fuzzy
+msgid "Width component of the initial window size. Ignored in fullscreen mode."
msgstr "Ð¨Ñ‹Ñ€Ñ‹Ð½Ñ ÐºÐ°Ð¼Ð¿Ð°Ð½ÐµÐ½Ñ‚Ð° пачатковага памеру акна."
#: src/settings_translation_file.cpp
@@ -7232,34 +7565,23 @@ msgid "Y-level of seabed."
msgstr "Y-узровень марÑкога дна."
#: src/settings_translation_file.cpp
-msgid ""
-"ZLib compression level to use when saving mapblocks to disk.\n"
-"-1 - Zlib's default compression level\n"
-"0 - no compresson, fastest\n"
-"9 - best compression, slowest\n"
-"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)"
-msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid ""
-"ZLib compression level to use when sending mapblocks to the client.\n"
-"-1 - Zlib's default compression level\n"
-"0 - no compresson, fastest\n"
-"9 - best compression, slowest\n"
-"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "cURL file download timeout"
msgstr "Таймаўт ÑÐ¿Ð°Ð¼Ð¿Ð¾ÑžÐ²Ð°Ð½Ð½Ñ Ñ„Ð°Ð¹Ð»Ð° па cURL"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "cURL interactive timeout"
+msgstr "Таймаўт cURL"
+
+#: src/settings_translation_file.cpp
msgid "cURL parallel limit"
msgstr "Ліміт адначаÑовых злучÑннÑÑž cURL"
-#: src/settings_translation_file.cpp
-msgid "cURL timeout"
-msgstr "Таймаўт cURL"
+#~ msgid "- Creative Mode: "
+#~ msgstr "- Творчы Ñ€Ñжым: "
+
+#~ msgid "- Damage: "
+#~ msgstr "- Пашкоджанні: "
#~ msgid ""
#~ "0 = parallax occlusion with slope information (faster).\n"
@@ -7268,6 +7590,9 @@ msgstr "Таймаўт cURL"
#~ "0 = паралакÑÐ½Ð°Ñ Ð°ÐºÐ»ÑŽÐ·Ñ–Ñ Ñа звеÑткамі аб нахіле (хутка).\n"
#~ "1 = Ñ€Ñльефнае Ñ‚ÑкÑтураванне (павольней, але ÑкаÑней)."
+#~ msgid "Address / Port"
+#~ msgstr "ÐÐ´Ñ€Ð°Ñ / Порт"
+
#~ msgid ""
#~ "Adjust the gamma encoding for the light tables. Higher numbers are "
#~ "brighter.\n"
@@ -7286,6 +7611,9 @@ msgstr "Таймаўт cURL"
#~ msgid "Back"
#~ msgstr "Ðазад"
+#~ msgid "Bits per pixel (aka color depth) in fullscreen mode."
+#~ msgstr "Біты на пікÑель (Ð³Ð»Ñ‹Ð±Ñ–Ð½Ñ ÐºÐ¾Ð»ÐµÑ€Ñƒ) у поўнаÑкранным Ñ€Ñжыме."
+
#~ msgid "Bump Mapping"
#~ msgstr "ТÑкÑтураванне маÑкамі"
@@ -7330,13 +7658,26 @@ msgstr "Таймаўт cURL"
#~ msgstr ""
#~ "Кіруе шырынёй тунÑлÑÑž. Меншае значÑнне Ñтварае больш ÑˆÑ‹Ñ€Ð¾ÐºÑ–Ñ Ñ‚ÑƒÐ½Ñлі."
+#~ msgid "Credits"
+#~ msgstr "ПадзÑкі"
+
#~ msgid "Crosshair color (R,G,B)."
#~ msgstr "Колер Ð¿ÐµÑ€Ð°ÐºÑ€Ñ‹Ð¶Ð°Ð²Ð°Ð½Ð½Ñ (R,G,B)."
+#~ msgid "Damage enabled"
+#~ msgstr "Пашкоджанні ўключаныÑ"
+
#~ msgid "Darkness sharpness"
#~ msgstr "РÑзкаÑць цемры"
#~ msgid ""
+#~ "Default timeout for cURL, stated in milliseconds.\n"
+#~ "Only has an effect if compiled with cURL."
+#~ msgstr ""
+#~ "Прадвызначаны таймаўт Ð´Ð»Ñ cURL, зададзены Ñž міліÑекундах.\n"
+#~ "Уплывае толькі пры кампілÑцыі з cURL."
+
+#~ msgid ""
#~ "Defines areas of floatland smooth terrain.\n"
#~ "Smooth floatlands occur when noise > 0."
#~ msgstr ""
@@ -7402,6 +7743,15 @@ msgstr "Таймаўт cURL"
#~ msgid "FPS in pause menu"
#~ msgstr "FPS у меню паўзы"
+#~ msgid "Fallback font shadow"
+#~ msgstr "Цень Ñ€Ñзервовага шрыфту"
+
+#~ msgid "Fallback font shadow alpha"
+#~ msgstr "ПразрыÑтаÑць цені Ñ€Ñзервовага шрыфту"
+
+#~ msgid "Fallback font size"
+#~ msgstr "Памер Ñ€Ñзервовага шрыфту"
+
#~ msgid "Floatland base height noise"
#~ msgstr "Шум базавай вышыні лÑтучых аÑтравоў"
@@ -7411,6 +7761,12 @@ msgstr "Таймаўт cURL"
#~ msgid "Font shadow alpha (opaqueness, between 0 and 255)."
#~ msgstr "ПразрыÑтаÑць цені шрыфту (ад 0 да 255)."
+#~ msgid "FreeType fonts"
+#~ msgstr "Шрыфты FreeType"
+
+#~ msgid "Full screen BPP"
+#~ msgstr "Ð“Ð»Ñ‹Ð±Ñ–Ð½Ñ ÐºÐ¾Ð»ÐµÑ€Ñƒ Ñž поўнаÑкранным Ñ€Ñжыме (бітаў на пікÑель)"
+
#~ msgid "Gamma"
#~ msgstr "Гама"
@@ -7420,6 +7776,9 @@ msgstr "Таймаўт cURL"
#~ msgid "Generate normalmaps"
#~ msgstr "Ð“ÐµÐ½ÐµÑ€Ð°Ñ†Ñ‹Ñ Ð¼Ð°Ð¿Ñ‹ нармалÑÑž"
+#~ msgid "High-precision FPU"
+#~ msgstr "Ð’Ñ‹Ñокадакладны FPU"
+
#~ msgid "IPv6 support."
#~ msgstr "Падтрымка IPv6."
@@ -7430,6 +7789,9 @@ msgstr "Таймаўт cURL"
#~ "Калі ўключана адначаÑова з Ñ€Ñжымам палёту, то вызначае напрамак руху "
#~ "адноÑна кроку гульца."
+#~ msgid "Install: file: \"$1\""
+#~ msgstr "УÑталёўка: файл: \"$1\""
+
#~ msgid "Lava depth"
#~ msgstr "Ð“Ð»Ñ‹Ð±Ñ–Ð½Ñ Ð»Ð°Ð²Ñ‹"
@@ -7445,6 +7807,11 @@ msgstr "Таймаўт cURL"
#~ msgid "Main menu style"
#~ msgstr "Стыль галоўнага меню"
+#~ msgid "Makes DirectX work with LuaJIT. Disable if it causes troubles."
+#~ msgstr ""
+#~ "Прымушае DirectX працаваць з LuaJIT. Выключыце, калі гÑта выклікае "
+#~ "праблемы."
+
#~ msgid ""
#~ "Map generation attributes specific to Mapgen Carpathian.\n"
#~ "Flags that are not enabled are not modified from the default.\n"
@@ -7486,6 +7853,9 @@ msgstr "Таймаўт cURL"
#~ msgid "Minimap in surface mode, Zoom x4"
#~ msgstr "Мінімапа Ñž Ñ€Ñжыме паверхні, павелічÑнне Ñ…4"
+#~ msgid "Name / Password"
+#~ msgstr "Ð†Ð¼Ñ / Пароль"
+
#~ msgid "Name/Password"
#~ msgstr "ІмÑ/Пароль"
@@ -7540,6 +7910,9 @@ msgstr "Таймаўт cURL"
#~ msgid "Projecting dungeons"
#~ msgstr "Праектаванне падзÑмеллÑÑž"
+#~ msgid "PvP enabled"
+#~ msgstr "PvP уключаны"
+
#~ msgid "Reset singleplayer world"
#~ msgstr "Скінуць Ñвет адзіночнай гульні"
@@ -7549,6 +7922,18 @@ msgstr "Таймаўт cURL"
#~ msgid "Shadow limit"
#~ msgstr "Ліміт ценÑÑž"
+#, fuzzy
+#~ msgid ""
+#~ "Shadow offset (in pixels) of the fallback font. If 0, then shadow will "
+#~ "not be drawn."
+#~ msgstr "Зрух цені шрыфту. Калі 0, то цень не будзе паказвацца."
+
+#~ msgid "Special"
+#~ msgstr "ÐдмыÑловаÑ"
+
+#~ msgid "Special key"
+#~ msgstr "ÐдмыÑÐ»Ð¾Ð²Ð°Ñ ÐºÐ»Ð°Ð²Ñ–ÑˆÐ°"
+
#~ msgid "Start Singleplayer"
#~ msgstr "Пачаць адзіночную гульню"
@@ -7561,6 +7946,9 @@ msgstr "Таймаўт cURL"
#~ msgid "This font will be used for certain languages."
#~ msgstr "ГÑты шрыфт будзе выкарыÑтоўваецца Ð´Ð»Ñ Ð½ÐµÐºÐ°Ñ‚Ð¾Ñ€Ñ‹Ñ… моў."
+#~ msgid "To enable shaders the OpenGL driver needs to be used."
+#~ msgstr "Ð”Ð»Ñ ÑžÐºÐ»ÑŽÑ‡ÑÐ½Ð½Ñ ÑˆÑйдÑраў неабходна выкарыÑтоўваць OpenGL."
+
#~ msgid "Toggle Cinematic"
#~ msgstr "КінематаграфічнаÑць"
@@ -7581,6 +7969,15 @@ msgstr "Таймаўт cURL"
#~ msgid "Waving water"
#~ msgstr "ХвалÑванне вады"
+#, fuzzy
+#~ msgid ""
+#~ "Whether FreeType fonts are used, requires FreeType support to be compiled "
+#~ "in.\n"
+#~ "If disabled, bitmap and XML vectors fonts are used instead."
+#~ msgstr ""
+#~ "ВыкарыÑтанне шрыфтоў FreeType. Падтрымка FreeType муÑіць быць ÑƒÐºÐ»ÑŽÑ‡Ð°Ð½Ð°Ñ "
+#~ "Ð¿Ð°Ð´Ñ‡Ð°Ñ ÐºÐ°Ð¼Ð¿Ñ–Ð»Ñцыі."
+
#~ msgid "Whether dungeons occasionally project from the terrain."
#~ msgstr "Ð’Ñ‹Ñтуп падзÑмеллÑÑž па-над Ñ€Ñльефам."
@@ -7595,3 +7992,10 @@ msgstr "Таймаўт cURL"
#~ msgid "Yes"
#~ msgstr "Так"
+
+#, fuzzy
+#~ msgid "You died."
+#~ msgstr "Вы загінулі"
+
+#~ msgid "needs_fallback_font"
+#~ msgstr "no"
diff --git a/po/bg/minetest.po b/po/bg/minetest.po
index 62011a94a..fb3a096dc 100644
--- a/po/bg/minetest.po
+++ b/po/bg/minetest.po
@@ -7,9 +7,9 @@ msgid ""
msgstr ""
"Project-Id-Version: minetest\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-02-23 19:03+0100\n"
-"PO-Revision-Date: 2020-08-04 04:41+0000\n"
-"Last-Translator: atomicbeef <teddyg522@gmail.com>\n"
+"POT-Creation-Date: 2022-01-25 23:19+0100\n"
+"PO-Revision-Date: 2022-01-10 23:53+0000\n"
+"Last-Translator: 109247019824 <stoyan@gmx.com>\n"
"Language-Team: Bulgarian <https://hosted.weblate.org/projects/minetest/"
"minetest/bg/>\n"
"Language: bg\n"
@@ -17,59 +17,126 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 4.2-dev\n"
+"X-Generator: Weblate 4.10.1\n"
+
+#: builtin/client/chatcommands.lua
+msgid "Clear the out chat queue"
+msgstr "ИзчиÑтване на изходÑщата опашка на разговорите"
+
+#: builtin/client/chatcommands.lua
+msgid "Empty command."
+msgstr "Празна команда."
+
+#: builtin/client/chatcommands.lua
+msgid "Exit to main menu"
+msgstr "Главно меню"
+
+#: builtin/client/chatcommands.lua
+msgid "Invalid command: "
+msgstr "ÐедейÑтвителна команда: "
+
+#: builtin/client/chatcommands.lua
+msgid "Issued command: "
+msgstr "Подадена команда: "
+
+#: builtin/client/chatcommands.lua
+msgid "List online players"
+msgstr "Играчи на линиÑ"
+
+#: builtin/client/chatcommands.lua
+msgid "Online players: "
+msgstr "Играчи на линиÑ: "
+
+#: builtin/client/chatcommands.lua
+msgid "The out chat queue is now empty."
+msgstr "ИзходÑщата опашка на разговори е изпразнена."
+
+#: builtin/client/chatcommands.lua
+msgid "This command is disabled by server."
+msgstr "Командата е забранена от Ñървъра."
#: builtin/client/death_formspec.lua src/client/game.cpp
msgid "Respawn"
-msgstr "Прераждането"
+msgstr "Прераждане"
#: builtin/client/death_formspec.lua src/client/game.cpp
msgid "You died"
-msgstr "Ти умрÑ"
+msgstr "УмрÑхте"
+
+#: builtin/common/chatcommands.lua
+msgid "Available commands:"
+msgstr "ДоÑтъпни команди:"
+
+#: builtin/common/chatcommands.lua
+msgid "Available commands: "
+msgstr "ДоÑтъпни команди: "
+
+#: builtin/common/chatcommands.lua
+msgid "Command not available: "
+msgstr "ÐедоÑтъпни команди: "
+
+#: builtin/common/chatcommands.lua
+msgid "Get help for commands"
+msgstr "Помощ за командите"
+
+#: builtin/common/chatcommands.lua
+msgid ""
+"Use '.help <cmd>' to get more information, or '.help all' to list everything."
+msgstr ""
+"Въведете „.help <cmd>“ за повече Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð¸Ð»Ð¸ „.help all“ за ÑпиÑък Ñ "
+"вÑички команди."
+
+#: builtin/common/chatcommands.lua
+msgid "[all | <cmd>]"
+msgstr "[all | <команда>]"
#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp
msgid "OK"
msgstr "Добре"
#: builtin/fstk/ui.lua
+msgid "<none available>"
+msgstr "<нÑма доÑтъпни>"
+
+#: builtin/fstk/ui.lua
msgid "An error occurred in a Lua script:"
-msgstr "Имаше грешка в Lua Ñкрипт:"
+msgstr "Грешка в Ñкрипт на Lua:"
#: builtin/fstk/ui.lua
msgid "An error occurred:"
-msgstr "Имаше грешка:"
+msgstr "Възникна грешка:"
#: builtin/fstk/ui.lua
msgid "Main menu"
-msgstr "Главното меню"
+msgstr "Главно меню"
#: builtin/fstk/ui.lua
msgid "Reconnect"
-msgstr "ПовтарÑне на връзката"
+msgstr "Повторно Ñвързване"
#: builtin/fstk/ui.lua
msgid "The server has requested a reconnect:"
-msgstr "Сървърт поиÑка нова връзка:"
+msgstr "Сървърът поиÑка повторно Ñвързване:"
#: builtin/mainmenu/common.lua
msgid "Protocol version mismatch. "
-msgstr "ВерÑиÑта на протокола е грешна. "
+msgstr "Изданието на протокола не Ñъвпада. "
#: builtin/mainmenu/common.lua
msgid "Server enforces protocol version $1. "
-msgstr "Сървърт налага верÑÐ¸Ñ $1 на протокола. "
+msgstr "Сървърът налага издание $1 на протокола. "
#: builtin/mainmenu/common.lua
msgid "Server supports protocol versions between $1 and $2. "
-msgstr "Сървърът Ð¿Ð¾Ð´ÐºÑ€ÐµÐ¿Ñ Ð²ÐµÑ€Ñии на протокола между $1 и $2. "
+msgstr "Сървърът поддържа изданиÑта на протокола между $1 и $2. "
#: builtin/mainmenu/common.lua
msgid "We only support protocol version $1."
-msgstr "Ðие Ñамо подкрепÑме верÑÐ¸Ñ $1 на протокола."
+msgstr "Поддържаме Ñамо издание $1 на протокола."
#: builtin/mainmenu/common.lua
msgid "We support protocol versions between version $1 and $2."
-msgstr "Ðие подкрепÑме верÑии на протокола между $1 и $2."
+msgstr "Поддържаме Ñамо изданиÑта на протокола между $1 и $2."
#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/dlg_contentstore.lua
#: builtin/mainmenu/dlg_create_world.lua
@@ -89,35 +156,35 @@ msgstr "ЗавиÑимоÑти:"
#: builtin/mainmenu/dlg_config_world.lua
msgid "Disable all"
-msgstr "Деактивиране на вÑички"
+msgstr "Изключване вÑички"
#: builtin/mainmenu/dlg_config_world.lua
msgid "Disable modpack"
-msgstr "Деактивиране на модпака"
+msgstr "Изключване на пакет Ñ Ð¼Ð¾Ð´Ð¸Ñ„Ð¸ÐºÐ°Ñ†Ð¸Ð¸"
#: builtin/mainmenu/dlg_config_world.lua
msgid "Enable all"
-msgstr "Ðктиривране на вÑички"
+msgstr "Включване вÑички"
#: builtin/mainmenu/dlg_config_world.lua
msgid "Enable modpack"
-msgstr "Ðктивиране на модпака"
+msgstr "Включване на пакет Ñ Ð¼Ð¾Ð´Ð¸Ñ„Ð¸ÐºÐ°Ñ†Ð¸Ð¸"
#: builtin/mainmenu/dlg_config_world.lua
msgid ""
"Failed to enable mod \"$1\" as it contains disallowed characters. Only "
"characters [a-z0-9_] are allowed."
msgstr ""
-"Ðктивиране на мода \"$1\" беше неуÑпешно, защото Ñъдържа забранени Ñимволи. "
-"Само Ñимволите [a-z0-9_] Ñа разрешени."
+"Включването на модификациÑта „$1“ не е уÑпешно, защото Ñъдържа забранени "
+"Ñимволи. Разрешени Ñа Ñамо Ñимволите [a-z0-9_]."
#: builtin/mainmenu/dlg_config_world.lua
msgid "Find More Mods"
-msgstr "Ðамиране на Още Модове"
+msgstr "Още модификации"
#: builtin/mainmenu/dlg_config_world.lua
msgid "Mod:"
-msgstr "Мод:"
+msgstr "МодификациÑ:"
#: builtin/mainmenu/dlg_config_world.lua
msgid "No (optional) dependencies"
@@ -125,7 +192,7 @@ msgstr "ÐÑма (незадължителни) завиÑимоÑти"
#: builtin/mainmenu/dlg_config_world.lua
msgid "No game description provided."
-msgstr "ÐÑма опиÑание за играта."
+msgstr "Играта нÑма опиÑание."
#: builtin/mainmenu/dlg_config_world.lua
msgid "No hard dependencies"
@@ -133,7 +200,7 @@ msgstr "ÐÑма задължителни завиÑимоÑти"
#: builtin/mainmenu/dlg_config_world.lua
msgid "No modpack description provided."
-msgstr "ÐÑма опиÑание за модпака."
+msgstr "Пакетът Ñ Ð¼Ð¾Ð´Ð¸Ñ„Ð¸ÐºÐ°Ñ†Ð¸Ð¸ нÑма опиÑание."
#: builtin/mainmenu/dlg_config_world.lua
msgid "No optional dependencies"
@@ -146,7 +213,7 @@ msgstr "Ðезадължителни завиÑимоÑти:"
#: builtin/mainmenu/dlg_config_world.lua
#: builtin/mainmenu/dlg_settings_advanced.lua src/gui/guiKeyChangeMenu.cpp
msgid "Save"
-msgstr "ЗапиÑване"
+msgstr "Запазване"
#: builtin/mainmenu/dlg_config_world.lua
msgid "World:"
@@ -154,38 +221,39 @@ msgstr "СвÑÑ‚:"
#: builtin/mainmenu/dlg_config_world.lua
msgid "enabled"
-msgstr "Ðктивиран"
+msgstr "включен"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "\"$1\" already exists. Would you like to overwrite it?"
-msgstr ""
+msgstr "„$1“ вече ÑъщеÑтвува. Да бъде ли презапиÑан?"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "$1 and $2 dependencies will be installed."
-msgstr ""
+msgstr "$1 и $2 завиÑимоÑти ще бъдат инÑталирани."
#: builtin/mainmenu/dlg_contentstore.lua
msgid "$1 by $2"
-msgstr ""
+msgstr "$1 от $2"
#: builtin/mainmenu/dlg_contentstore.lua
msgid ""
"$1 downloading,\n"
"$2 queued"
msgstr ""
+"$1 Ñе изтеглÑÑ‚,\n"
+"$2 изчакват"
#: builtin/mainmenu/dlg_contentstore.lua
-#, fuzzy
msgid "$1 downloading..."
-msgstr "ИзтеглÑ..."
+msgstr "$1 Ñе изтеглÑт…"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "$1 required dependencies could not be found."
-msgstr ""
+msgstr "$1 задължителни завиÑимоÑти не могат да бъдат намерени."
#: builtin/mainmenu/dlg_contentstore.lua
msgid "$1 will be installed, and $2 dependencies will be skipped."
-msgstr ""
+msgstr "$1 ще бъдат инÑталирани, а $2 завиÑимоÑти ще бъдат пропуÑнати."
#: builtin/mainmenu/dlg_contentstore.lua
msgid "All packages"
@@ -193,27 +261,28 @@ msgstr "Ð’Ñички пакети"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Already installed"
-msgstr ""
+msgstr "Вече инÑталирано"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Back to Main Menu"
-msgstr "Обратно към Главното Меню"
+msgstr "Главно меню"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Base Game:"
-msgstr ""
+msgstr "ОÑновна игра:"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "ContentDB is not available when Minetest was compiled without cURL"
-msgstr "ContentDB не е налично когато Minetest е ÑÑŠÑтавен без cURL"
+msgstr ""
+"Съдържанието от ContentDB не е налично, когато Minetest е компилиран без cURL"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Downloading..."
-msgstr "ИзтеглÑ..."
+msgstr "ИзтеглÑне…"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Failed to download $1"
-msgstr "ИзтеглÑнето на $1 беше неуÑпешно"
+msgstr "Грешка при изтеглÑнето на $1"
#: builtin/mainmenu/dlg_contentstore.lua
#: builtin/mainmenu/dlg_settings_advanced.lua
@@ -225,72 +294,73 @@ msgid "Install"
msgstr "ИнÑталиране"
#: builtin/mainmenu/dlg_contentstore.lua
-#, fuzzy
msgid "Install $1"
-msgstr "ИнÑталиране"
+msgstr "ИнÑталиране $1"
#: builtin/mainmenu/dlg_contentstore.lua
-#, fuzzy
msgid "Install missing dependencies"
-msgstr "Ðезадължителни завиÑимоÑти:"
+msgstr "ИнÑталиране на липÑващи завиÑимоÑти"
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "Install: Unsupported file type or broken archive"
+msgstr "ИнÑталиране: Ðеподдържан вид на файл или повреден архив"
#: builtin/mainmenu/dlg_contentstore.lua
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Mods"
-msgstr "Модове"
+msgstr "Модификации"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "No packages could be retrieved"
-msgstr "Получаване на пакети беше неуÑпешно"
+msgstr "Пакетите не могат да бъдат получени"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "No results"
msgstr "ÐÑма резултати"
#: builtin/mainmenu/dlg_contentstore.lua
-#, fuzzy
msgid "No updates"
-msgstr "ÐктуализациÑ"
+msgstr "ÐÑма обновÑване"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Not found"
-msgstr ""
+msgstr "Ðе е намерено"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Overwrite"
-msgstr ""
+msgstr "ПрезапиÑване"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Please check that the base game is correct."
-msgstr ""
+msgstr "Уверете Ñе, че оÑновната игра е правилна."
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Queued"
-msgstr ""
+msgstr "Изчакващи"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Texture packs"
-msgstr "Пакети на текÑтури"
+msgstr "Пакети Ñ Ñ‚ÐµÐºÑтури"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Uninstall"
-msgstr "ДеинÑталиране"
+msgstr "Премахване"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Update"
-msgstr "ÐктуализациÑ"
+msgstr "ОбновÑване"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Update All [$1]"
-msgstr ""
+msgstr "ОбновÑване вÑички [$1]"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "View more information in a web browser"
-msgstr ""
+msgstr "Вижте повече в браузъра"
#: builtin/mainmenu/dlg_create_world.lua
msgid "A world named \"$1\" already exists"
-msgstr "Вече има ÑвÑÑ‚ Ñ Ð¸Ð¼ÐµÑ‚Ð¾ \"$1\""
+msgstr "СвÑÑ‚ Ñ Ð¸Ð¼ÐµÑ‚Ð¾ „$1“ вече ÑъщеÑтвува"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Additional terrain"
@@ -298,23 +368,23 @@ msgstr "Допълнителен терен"
#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
msgid "Altitude chill"
-msgstr "Студ от виÑочина"
+msgstr "ЗаÑтудÑване във виÑочина"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Altitude dry"
-msgstr "Сух от виÑочина"
+msgstr "ЗаÑушаване във виÑочина"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Biome blending"
-msgstr "СмеÑване между природни зони"
+msgstr "СмеÑване на биоми"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Biomes"
-msgstr "Природни зони"
+msgstr "Биоми"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Caverns"
-msgstr "Пещери"
+msgstr "Големи пещери"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Caves"
@@ -326,7 +396,7 @@ msgstr "Създаване"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Decorations"
-msgstr "УкраÑи"
+msgstr "Декорации"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Download a game, such as Minetest Game, from minetest.net"
@@ -334,7 +404,7 @@ msgstr "ИзтеглÑне на игра, например Minetest Game, от m
#: builtin/mainmenu/dlg_create_world.lua
msgid "Download one from minetest.net"
-msgstr "Изтегли един от minetest.net"
+msgstr "Изтеглете от minetest.net"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Dungeons"
@@ -346,11 +416,11 @@ msgstr "Равен терен"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Floating landmasses in the sky"
-msgstr "Земни маÑи в небето"
+msgstr "Плаващи земни маÑи в небето"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Floatlands (experimental)"
-msgstr "Земни маÑи в небето (екÑпериментално)"
+msgstr "ÐебеÑни оÑтрови (екÑпериментално)"
#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
msgid "Game"
@@ -358,11 +428,11 @@ msgstr "Игра"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Generate non-fractal terrain: Oceans and underground"
-msgstr "Създаване на нефрактален терен: Морета и под земÑта"
+msgstr "Създаване на нефрактален терен: Морета и подземен ÑвÑÑ‚"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Hills"
-msgstr "Хълми"
+msgstr "Хълмове"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Humid rivers"
@@ -370,7 +440,7 @@ msgstr "Влажни реки"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Increases humidity around rivers"
-msgstr "ÐараÑтва влажноÑÑ‚ около реки"
+msgstr "Увеличава влажноÑтта около реките"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Lakes"
@@ -378,19 +448,19 @@ msgstr "Езера"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Low humidity and high heat causes shallow or dry rivers"
-msgstr "ÐиÑка влажноÑÑ‚ и виÑока топлина причинÑва ниÑки или Ñухи реки"
+msgstr "ÐиÑката влажноÑÑ‚ и горещините причинÑват плитки или преÑъхнали реки"
#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
msgid "Mapgen"
-msgstr "Създаване на Ñвета"
+msgstr "Генератор на карти"
#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
msgid "Mapgen flags"
-msgstr "Флагове за Ñъздаване на Ñвета"
+msgstr "ÐаÑтройки на генератора"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Mapgen-specific flags"
-msgstr "Флагове ÑпеÑифични за Ñъздване на Ñвета"
+msgstr "Специфични за генератора наÑтройки"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Mountains"
@@ -410,11 +480,11 @@ msgstr "ÐÑма избрана игра"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Reduces heat with altitude"
-msgstr "ÐамалÑва топлина Ñ Ð²Ð¸Ñочина"
+msgstr "ÐамалÑва топлината във виÑочина"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Reduces humidity with altitude"
-msgstr "ÐамалÑва влажноÑÑ‚ Ñ Ð²Ð¸Ñочина"
+msgstr "ÐамалÑва влажноÑтта във виÑочина"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Rivers"
@@ -431,35 +501,35 @@ msgstr "Семе"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Smooth transition between biomes"
-msgstr "Гладка промÑна между природни зони"
+msgstr "Плавен преход между биомите"
#: builtin/mainmenu/dlg_create_world.lua
msgid ""
"Structures appearing on the terrain (no effect on trees and jungle grass "
"created by v6)"
msgstr ""
-"ПоÑвÑване на Ñтруктури на терена (нÑма ефект на трева от джунгла и дървета "
-"Ñъздадени от v6)"
+"Структури, поÑвÑващи Ñе върху терена (нÑма ефект върху дърветата и тревата в "
+"джунглата, Ñъздадени от v6)"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Structures appearing on the terrain, typically trees and plants"
-msgstr "ПоÑвÑване на Ñтруктури на терена, типично дървета и раÑтениÑ"
+msgstr "Структури, поÑвÑващи Ñе върху терена, обикновено дървета и раÑтениÑ"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Temperate, Desert"
-msgstr "Умерен, ПуÑтинÑ"
+msgstr "Умерен климат, пуÑтинÑ"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Temperate, Desert, Jungle"
-msgstr "Умерен, ПуÑтинÑ, Джунгла"
+msgstr "Умерен климат, пуÑтинÑ, джунгла"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Temperate, Desert, Jungle, Tundra, Taiga"
-msgstr "Умерен, ПуÑтинÑ, Джунгла, Тундра, Тайга"
+msgstr "Умерен климат, пуÑтинÑ, джунгла, тундра, тайга"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Terrain surface erosion"
-msgstr "Ð•Ñ€Ð¾Ð·Ð¸Ñ Ð½Ð° повърхноÑÑ‚ на терен"
+msgstr "Ð•Ñ€Ð¾Ð·Ð¸Ñ Ð½Ð° земната повърхноÑÑ‚"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Trees and jungle grass"
@@ -467,7 +537,7 @@ msgstr "Трева в джунглата и дървета"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Vary river depth"
-msgstr "Вариране на дълбочина на реки"
+msgstr "ПромÑна в дълбочината на реките"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Very large caverns deep in the underground"
@@ -475,7 +545,7 @@ msgstr "Много големи пещери дълбоко под земÑта"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Warning: The Development Test is meant for developers."
-msgstr "Внимание: ТеÑтът за Развитие е предназначен за разработници."
+msgstr "Внимание: ТеÑтът за разработка е предназначен за разработчици."
#: builtin/mainmenu/dlg_create_world.lua
msgid "World name"
@@ -483,29 +553,29 @@ msgstr "Име на Ñвета"
#: builtin/mainmenu/dlg_create_world.lua
msgid "You have no games installed."
-msgstr "ÐÑмаш инÑалирани игри."
+msgstr "ÐÑма инÑталирани игри."
#: builtin/mainmenu/dlg_delete_content.lua
msgid "Are you sure you want to delete \"$1\"?"
-msgstr "Сигурен ли Ñи че иÑкаш да изтриваш \"$1\"?"
+msgstr "Сигурни ли Ñте, че иÑкате да премахнете „$1“?"
#: builtin/mainmenu/dlg_delete_content.lua
#: builtin/mainmenu/dlg_delete_world.lua builtin/mainmenu/tab_local.lua
#: src/client/keycode.cpp
msgid "Delete"
-msgstr "Изтриване"
+msgstr "Премахване"
#: builtin/mainmenu/dlg_delete_content.lua
msgid "pkgmgr: failed to delete \"$1\""
-msgstr "pkgmgr: Изтриване на \"$1\" беше неуÑпешно"
+msgstr "pkgmgr: грешка при премахване на „$1“"
#: builtin/mainmenu/dlg_delete_content.lua
msgid "pkgmgr: invalid path \"$1\""
-msgstr "pkgmgr: Грешна пътека \"$1\""
+msgstr "pkgmgr: недейÑтвителен път „$1“"
#: builtin/mainmenu/dlg_delete_world.lua
msgid "Delete World \"$1\"?"
-msgstr "Да изтриe ли Ñвета \"$1\"?"
+msgstr "Премахване на Ñвета „$1“?"
#: builtin/mainmenu/dlg_rename_modpack.lua
msgid "Accept"
@@ -513,40 +583,39 @@ msgstr "Приемане"
#: builtin/mainmenu/dlg_rename_modpack.lua
msgid "Rename Modpack:"
-msgstr "Преименуване на модпак:"
+msgstr "Преименуване на пакет модификации:"
#: builtin/mainmenu/dlg_rename_modpack.lua
msgid ""
"This modpack has an explicit name given in its modpack.conf which will "
"override any renaming here."
msgstr ""
-"Този модпак има изрично име дадено в Ð½ÐµÐ³Ð¾Ð²Ð¸Ñ modpack.conf, което ще Ð¾Ñ‚Ð¼ÐµÐ½Ñ "
-"вÑÑко преименуване тука."
+"Този пакет Ñ Ð¼Ð¾Ð´Ð¸Ñ„Ð¸ÐºÐ°Ñ†Ð¸Ð¸ има изрично зададено име в modpack.conf, което ще "
+"отмени вÑÑко преименуване."
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "(No description of setting given)"
-msgstr ""
+msgstr "(ÐаÑтройката нÑма опиÑание)"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "2D Noise"
-msgstr ""
+msgstr "Двуизмерен шум"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "< Back to Settings page"
-msgstr ""
+msgstr "Главно меню"
#: builtin/mainmenu/dlg_settings_advanced.lua
-#, fuzzy
msgid "Browse"
-msgstr "Преглеждане"
+msgstr "Разглеждане"
-#: builtin/mainmenu/dlg_settings_advanced.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_settings.lua
msgid "Disabled"
msgstr "Изключено"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Edit"
-msgstr ""
+msgstr "Редактиране"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Enabled"
@@ -554,69 +623,68 @@ msgstr "Включено"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Lacunarity"
-msgstr ""
+msgstr "ЛакунарноÑÑ‚"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Octaves"
-msgstr ""
+msgstr "Октави"
#: builtin/mainmenu/dlg_settings_advanced.lua src/settings_translation_file.cpp
msgid "Offset"
-msgstr "ИзмеÑтване"
+msgstr "ОтмеÑтване"
#: builtin/mainmenu/dlg_settings_advanced.lua
-msgid "Persistance"
-msgstr ""
+#, fuzzy
+msgid "Persistence"
+msgstr "УÑтойчивоÑÑ‚"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Please enter a valid integer."
-msgstr ""
+msgstr "Въведете цÑло чиÑло."
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Please enter a valid number."
-msgstr ""
+msgstr "Въведете чиÑло."
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Restore Default"
-msgstr ""
+msgstr "По подразбиране"
#: builtin/mainmenu/dlg_settings_advanced.lua src/settings_translation_file.cpp
-#, fuzzy
msgid "Scale"
msgstr "Мащаб"
-#: builtin/mainmenu/dlg_settings_advanced.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_online.lua
msgid "Search"
msgstr "ТърÑене"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Select directory"
-msgstr ""
+msgstr "Избор на папка"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Select file"
-msgstr ""
+msgstr "Избор на файл"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Show technical names"
-msgstr ""
+msgstr "ТехничеÑки наименованиÑ"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "The value must be at least $1."
-msgstr ""
+msgstr "СтойноÑтта трÑбва да е най-малко $1."
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "The value must not be larger than $1."
-msgstr ""
+msgstr "СтойноÑтта трÑбва да е най-много $1."
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "X"
msgstr ""
#: builtin/mainmenu/dlg_settings_advanced.lua
-#, fuzzy
msgid "X spread"
-msgstr "РазпроÑтранение на Ð¥-оÑта"
+msgstr "Разпределение по X"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Y"
@@ -624,7 +692,7 @@ msgstr ""
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Y spread"
-msgstr "РазпроÑтранение на У-оÑта"
+msgstr "Разпределение по Y"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Z"
@@ -632,7 +700,7 @@ msgstr ""
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Z spread"
-msgstr ""
+msgstr "Разпределение по Z"
#. ~ "absvalue" is a noise parameter flag.
#. It is short for "absolute value".
@@ -647,7 +715,7 @@ msgstr ""
#. for noise settings in main menu -> "All Settings".
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "defaults"
-msgstr ""
+msgstr "подразбирани"
#. ~ "eased" is a noise parameter flag.
#. It is used to make the map smoother and
@@ -659,15 +727,15 @@ msgstr ""
#: builtin/mainmenu/pkgmgr.lua
msgid "$1 (Enabled)"
-msgstr ""
+msgstr "$1 (включено)"
#: builtin/mainmenu/pkgmgr.lua
msgid "$1 mods"
-msgstr ""
+msgstr "$1 модификации"
#: builtin/mainmenu/pkgmgr.lua
msgid "Failed to install $1 to $2"
-msgstr ""
+msgstr "Грешка при инÑталиране на $1 в $2"
#: builtin/mainmenu/pkgmgr.lua
msgid "Install Mod: Unable to find real mod name for: $1"
@@ -678,14 +746,6 @@ msgid "Install Mod: Unable to find suitable folder name for modpack $1"
msgstr ""
#: builtin/mainmenu/pkgmgr.lua
-msgid "Install: Unsupported file type \"$1\" or broken archive"
-msgstr ""
-
-#: builtin/mainmenu/pkgmgr.lua
-msgid "Install: file: \"$1\""
-msgstr ""
-
-#: builtin/mainmenu/pkgmgr.lua
msgid "Unable to find a valid mod or modpack"
msgstr ""
@@ -707,224 +767,241 @@ msgstr ""
#: builtin/mainmenu/serverlistmgr.lua src/client/game.cpp
msgid "Loading..."
-msgstr "Зарежда..."
+msgstr "Зареждане…"
#: builtin/mainmenu/serverlistmgr.lua
msgid "Public server list is disabled"
-msgstr ""
+msgstr "СпиÑъкът Ñ Ð¾Ð±Ñ‰ÐµÑтвени Ñървъри е изключен"
#: builtin/mainmenu/serverlistmgr.lua
msgid "Try reenabling public serverlist and check your internet connection."
msgstr ""
-"Опитай да включиш Ð¿ÑƒÐ±Ð»Ð¸Ñ‡Ð½Ð¸Ñ ÑпиÑък на Ñървъри отново и Ñи провай интернет "
-"връзката."
+"Включете ÑпиÑъка на общеÑтвени Ñървъри и проверете връзката Ñ Ð¸Ð½Ñ‚ÐµÑ€Ð½ÐµÑ‚."
+
+#: builtin/mainmenu/tab_about.lua
+msgid "About"
+msgstr "ОтноÑно"
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Active Contributors"
+msgstr "Ðктивни Ñътрудници"
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Active renderer:"
+msgstr "Ðктивен визуализатор:"
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Core Developers"
+msgstr "ОÑновни разработчици"
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Open User Data Directory"
+msgstr "Папка Ñ Ð´Ð°Ð½Ð½Ð¸"
+
+#: builtin/mainmenu/tab_about.lua
+msgid ""
+"Opens the directory that contains user-provided worlds, games, mods,\n"
+"and texture packs in a file manager / explorer."
+msgstr ""
+"ÐžÑ‚Ð²Ð°Ñ€Ñ Ð¿Ð°Ð¿ÐºÐ°Ñ‚Ð°, Ñъдържаща предоÑтавените от потребителÑ\n"
+"Ñветове, игри, модификации и текÑтури."
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Previous Contributors"
+msgstr "Предишни Ñътрудници"
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Previous Core Developers"
+msgstr "Предишни оÑновни разработчици"
#: builtin/mainmenu/tab_content.lua
msgid "Browse online content"
-msgstr ""
+msgstr "Преглед на Ñъдържание онлайн"
#: builtin/mainmenu/tab_content.lua
msgid "Content"
-msgstr ""
+msgstr "Съдържание"
#: builtin/mainmenu/tab_content.lua
msgid "Disable Texture Pack"
-msgstr ""
+msgstr "Изкл. на пакет Ñ Ñ‚ÐµÐºÑтури"
#: builtin/mainmenu/tab_content.lua
msgid "Information:"
-msgstr ""
+msgstr "ОпиÑание:"
#: builtin/mainmenu/tab_content.lua
msgid "Installed Packages:"
-msgstr ""
+msgstr "ИнÑталирани пакети:"
#: builtin/mainmenu/tab_content.lua
msgid "No dependencies."
-msgstr ""
+msgstr "ÐÑма завиÑимоÑти."
#: builtin/mainmenu/tab_content.lua
msgid "No package description available"
-msgstr ""
+msgstr "Пакетът нÑма опиÑание"
#: builtin/mainmenu/tab_content.lua
msgid "Rename"
-msgstr ""
+msgstr "Преименуване"
#: builtin/mainmenu/tab_content.lua
msgid "Uninstall Package"
-msgstr ""
+msgstr "Премахване на пакет"
#: builtin/mainmenu/tab_content.lua
msgid "Use Texture Pack"
-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 "Open User Data Directory"
-msgstr ""
-
-#: builtin/mainmenu/tab_credits.lua
-msgid ""
-"Opens the directory that contains user-provided worlds, games, mods,\n"
-"and texture packs in a file manager / explorer."
-msgstr ""
-
-#: builtin/mainmenu/tab_credits.lua
-msgid "Previous Contributors"
-msgstr ""
-
-#: builtin/mainmenu/tab_credits.lua
-msgid "Previous Core Developers"
-msgstr ""
+msgstr "Вкл. на пакет Ñ Ñ‚ÐµÐºÑтури"
#: builtin/mainmenu/tab_local.lua
msgid "Announce Server"
-msgstr ""
+msgstr "ОбÑвÑване на Ñървъра"
#: builtin/mainmenu/tab_local.lua
msgid "Bind Address"
-msgstr ""
+msgstr "ÐÐ´Ñ€ÐµÑ Ð·Ð° Ñвързване"
#: builtin/mainmenu/tab_local.lua
msgid "Creative Mode"
-msgstr ""
+msgstr "ТворчеÑки режим"
#: builtin/mainmenu/tab_local.lua
msgid "Enable Damage"
-msgstr ""
+msgstr "Получаване на щети"
#: builtin/mainmenu/tab_local.lua
msgid "Host Game"
-msgstr ""
+msgstr "Създаване на игра"
#: builtin/mainmenu/tab_local.lua
msgid "Host Server"
-msgstr ""
+msgstr "Създаване на Ñървър"
#: builtin/mainmenu/tab_local.lua
msgid "Install games from ContentDB"
-msgstr ""
+msgstr "ИнÑталиране на игри от ContentDB"
-#: builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
msgid "Name"
-msgstr ""
+msgstr "Име"
#: builtin/mainmenu/tab_local.lua
msgid "New"
-msgstr ""
+msgstr "Създаване"
#: builtin/mainmenu/tab_local.lua
msgid "No world created or selected!"
-msgstr ""
+msgstr "Ðе е Ñъздаден или избран ÑвÑÑ‚!"
-#: builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
msgid "Password"
-msgstr ""
+msgstr "Парола"
#: builtin/mainmenu/tab_local.lua
msgid "Play Game"
-msgstr ""
+msgstr "Започване на игра"
-#: builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
msgid "Port"
-msgstr ""
+msgstr "Порт"
#: builtin/mainmenu/tab_local.lua
msgid "Select Mods"
-msgstr ""
+msgstr "Модификации"
#: builtin/mainmenu/tab_local.lua
msgid "Select World:"
-msgstr ""
+msgstr "Избор на ÑвÑÑ‚:"
#: builtin/mainmenu/tab_local.lua
msgid "Server Port"
-msgstr ""
+msgstr "Порт на Ñървъра"
#: builtin/mainmenu/tab_local.lua
msgid "Start Game"
-msgstr ""
+msgstr "Създаване на игра"
#: builtin/mainmenu/tab_online.lua
-msgid "Address / Port"
-msgstr ""
+msgid "Address"
+msgstr "ÐдреÑ"
+
+#: builtin/mainmenu/tab_online.lua src/client/keycode.cpp
+msgid "Clear"
+msgstr "ИзчиÑтване"
#: builtin/mainmenu/tab_online.lua
msgid "Connect"
-msgstr ""
+msgstr "Свързване"
#: builtin/mainmenu/tab_online.lua
msgid "Creative mode"
-msgstr ""
+msgstr "ТворчеÑки режим"
+#. ~ PvP = Player versus Player
#: builtin/mainmenu/tab_online.lua
-msgid "Damage enabled"
-msgstr ""
+msgid "Damage / PvP"
+msgstr "Щети / PvP"
#: builtin/mainmenu/tab_online.lua
msgid "Del. Favorite"
-msgstr ""
+msgstr "Премах. любим"
#: builtin/mainmenu/tab_online.lua
-msgid "Favorite"
-msgstr ""
+msgid "Favorites"
+msgstr "Любими"
#: builtin/mainmenu/tab_online.lua
-msgid "Join Game"
-msgstr ""
+msgid "Incompatible Servers"
+msgstr "ÐеÑъвмеÑтими Ñървъри"
#: builtin/mainmenu/tab_online.lua
-msgid "Name / Password"
-msgstr ""
+msgid "Join Game"
+msgstr "Включване към игра"
#: builtin/mainmenu/tab_online.lua
msgid "Ping"
-msgstr ""
+msgstr "Ping"
-#. ~ PvP = Player versus Player
#: builtin/mainmenu/tab_online.lua
-msgid "PvP enabled"
-msgstr ""
+msgid "Public Servers"
+msgstr "ОбщеÑтвени Ñървъри"
+
+#: builtin/mainmenu/tab_online.lua
+msgid "Refresh"
+msgstr "Презареждане"
+
+#: builtin/mainmenu/tab_online.lua
+msgid "Server Description"
+msgstr "ОпиÑание на Ñървър"
#: builtin/mainmenu/tab_settings.lua
msgid "2x"
-msgstr ""
+msgstr "2x"
#: builtin/mainmenu/tab_settings.lua
msgid "3D Clouds"
-msgstr ""
+msgstr "Тримерни облаци"
#: builtin/mainmenu/tab_settings.lua
msgid "4x"
-msgstr ""
+msgstr "4x"
#: builtin/mainmenu/tab_settings.lua
msgid "8x"
-msgstr ""
+msgstr "8x"
#: builtin/mainmenu/tab_settings.lua
msgid "All Settings"
-msgstr ""
+msgstr "Ð’Ñички наÑтройки"
#: builtin/mainmenu/tab_settings.lua
msgid "Antialiasing:"
-msgstr ""
+msgstr "СглаÑÑне:"
#: builtin/mainmenu/tab_settings.lua
msgid "Autosave Screen Size"
-msgstr ""
+msgstr "Ðвт. запазване на размера"
#: builtin/mainmenu/tab_settings.lua
msgid "Bilinear Filter"
@@ -932,63 +1009,86 @@ msgstr ""
#: builtin/mainmenu/tab_settings.lua src/client/game.cpp
msgid "Change Keys"
-msgstr ""
+msgstr "ПромÑна на клавиши"
#: builtin/mainmenu/tab_settings.lua
msgid "Connected Glass"
-msgstr ""
+msgstr "Свързано Ñтъкло"
+
+#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
+msgid "Dynamic shadows"
+msgstr "Динамични Ñенки"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Dynamic shadows: "
+msgstr "Динамични Ñенки: "
#: builtin/mainmenu/tab_settings.lua
msgid "Fancy Leaves"
-msgstr ""
+msgstr "ЛукÑозни лиÑта"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "High"
+msgstr "Силни"
#: builtin/mainmenu/tab_settings.lua
+msgid "Low"
+msgstr "Слаби"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Medium"
+msgstr "Ðормални"
+
+#: builtin/mainmenu/tab_settings.lua
+#, fuzzy
msgid "Mipmap"
-msgstr ""
+msgstr "Миникарта"
#: builtin/mainmenu/tab_settings.lua
+#, fuzzy
msgid "Mipmap + Aniso. Filter"
-msgstr ""
+msgstr "Миникарта + анизо. филтър"
#: builtin/mainmenu/tab_settings.lua
msgid "No Filter"
-msgstr ""
+msgstr "Без филтър"
#: builtin/mainmenu/tab_settings.lua
+#, fuzzy
msgid "No Mipmap"
-msgstr ""
+msgstr "Без миникарта"
#: builtin/mainmenu/tab_settings.lua
msgid "Node Highlighting"
-msgstr ""
+msgstr "ОÑветÑване на възел"
#: builtin/mainmenu/tab_settings.lua
msgid "Node Outlining"
-msgstr ""
+msgstr "Ограждане на възел"
#: builtin/mainmenu/tab_settings.lua
msgid "None"
-msgstr ""
+msgstr "Без"
#: builtin/mainmenu/tab_settings.lua
msgid "Opaque Leaves"
-msgstr ""
+msgstr "Ðепрозрачни лиÑта"
#: builtin/mainmenu/tab_settings.lua
msgid "Opaque Water"
-msgstr ""
+msgstr "Ðепрозрачна вода"
#: builtin/mainmenu/tab_settings.lua
msgid "Particles"
-msgstr ""
+msgstr "ЧаÑтици"
#: builtin/mainmenu/tab_settings.lua
msgid "Screen:"
-msgstr ""
+msgstr "Екран:"
#: builtin/mainmenu/tab_settings.lua
msgid "Settings"
-msgstr ""
+msgstr "ÐаÑтройки"
#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
msgid "Shaders"
@@ -1005,19 +1105,15 @@ msgstr ""
#: builtin/mainmenu/tab_settings.lua
msgid "Simple Leaves"
-msgstr ""
+msgstr "Обикновени лиÑта"
#: builtin/mainmenu/tab_settings.lua
msgid "Smooth Lighting"
-msgstr ""
+msgstr "Гладко оÑветление"
#: builtin/mainmenu/tab_settings.lua
msgid "Texturing:"
-msgstr ""
-
-#: builtin/mainmenu/tab_settings.lua
-msgid "To enable shaders the OpenGL driver needs to be used."
-msgstr ""
+msgstr "ТекÑтуриране:"
#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
msgid "Tone Mapping"
@@ -1025,43 +1121,51 @@ msgstr ""
#: builtin/mainmenu/tab_settings.lua
msgid "Touchthreshold: (px)"
-msgstr ""
+msgstr "Праг на докоÑване: (px)"
#: builtin/mainmenu/tab_settings.lua
msgid "Trilinear Filter"
msgstr ""
#: builtin/mainmenu/tab_settings.lua
+msgid "Ultra High"
+msgstr "Много Ñилни"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Very Low"
+msgstr "Много Ñлаби"
+
+#: builtin/mainmenu/tab_settings.lua
msgid "Waving Leaves"
-msgstr ""
+msgstr "Поклащащи Ñе лиÑта"
#: builtin/mainmenu/tab_settings.lua
msgid "Waving Liquids"
-msgstr ""
+msgstr "Поклащащи Ñе течноÑти"
#: builtin/mainmenu/tab_settings.lua
msgid "Waving Plants"
-msgstr ""
+msgstr "Поклащащи Ñе раÑтениÑ"
-#: src/client/client.cpp
+#: src/client/client.cpp src/client/game.cpp
msgid "Connection timed out."
-msgstr ""
+msgstr "Времето за Ñвързване изтече."
#: src/client/client.cpp
msgid "Done!"
-msgstr ""
+msgstr "Готово!"
#: src/client/client.cpp
msgid "Initializing nodes"
-msgstr ""
+msgstr "Иницииране на възли"
#: src/client/client.cpp
msgid "Initializing nodes..."
-msgstr ""
+msgstr "Иницииране на възли…"
#: src/client/client.cpp
msgid "Loading textures..."
-msgstr ""
+msgstr "Зареждане на текÑтури…"
#: src/client/client.cpp
msgid "Rebuilding shaders..."
@@ -1069,11 +1173,11 @@ msgstr ""
#: src/client/clientlauncher.cpp
msgid "Connection error (timed out?)"
-msgstr ""
+msgstr "Грешка при Ñвързване (изтекло време?)"
#: src/client/clientlauncher.cpp
-msgid "Could not find or load game \""
-msgstr ""
+msgid "Could not find or load game: "
+msgstr "Ðе може да бъде намерена или заредена игра: "
#: src/client/clientlauncher.cpp
msgid "Invalid gamespec."
@@ -1081,118 +1185,140 @@ msgstr ""
#: src/client/clientlauncher.cpp
msgid "Main Menu"
-msgstr ""
+msgstr "Главно меню"
#: src/client/clientlauncher.cpp
msgid "No world selected and no address provided. Nothing to do."
-msgstr ""
+msgstr "ÐÑма избран ÑвÑÑ‚, нито зададен адреÑ. ÐÑма какво да бъде направено."
#: src/client/clientlauncher.cpp
msgid "Player name too long."
-msgstr ""
+msgstr "Името на играча е твърде дълго."
#: src/client/clientlauncher.cpp
msgid "Please choose a name!"
-msgstr ""
+msgstr "Изберете име!"
#: src/client/clientlauncher.cpp
msgid "Provided password file failed to open: "
-msgstr ""
+msgstr "Файлът Ñ Ð¿Ð°Ñ€Ð¾Ð»Ð¸ не Ñе отварÑ: "
#: src/client/clientlauncher.cpp
msgid "Provided world path doesn't exist: "
-msgstr ""
-
-#. ~ DO NOT TRANSLATE THIS LITERALLY!
-#. This is a special string. Put either "no" or "yes"
-#. into the translation field (literally).
-#. Choose "yes" if the language requires use of the fallback
-#. font, "no" otherwise.
-#. The fallback font is (normally) required for languages with
-#. non-Latin script, like Chinese.
-#. When in doubt, test your translation.
-#: src/client/fontengine.cpp
-msgid "needs_fallback_font"
-msgstr "no"
+msgstr "ЗададениÑÑ‚ път към Ñвета не ÑъщеÑтвува: "
#: src/client/game.cpp
msgid ""
"\n"
"Check debug.txt for details."
msgstr ""
+"\n"
+"Прегледайте debug.txt за повече информациÑ."
#: src/client/game.cpp
msgid "- Address: "
-msgstr ""
-
-#: src/client/game.cpp
-msgid "- Creative Mode: "
-msgstr ""
-
-#: src/client/game.cpp
-msgid "- Damage: "
-msgstr ""
+msgstr "- ÐдреÑ: "
#: src/client/game.cpp
msgid "- Mode: "
-msgstr ""
+msgstr "- Режим: "
#: src/client/game.cpp
msgid "- Port: "
-msgstr ""
+msgstr "- Порт: "
#: src/client/game.cpp
msgid "- Public: "
-msgstr ""
+msgstr "- ОбщеÑтвен: "
#. ~ PvP = Player versus Player
#: src/client/game.cpp
+#, fuzzy
msgid "- PvP: "
-msgstr ""
+msgstr "- PvP: "
#: src/client/game.cpp
msgid "- Server Name: "
-msgstr ""
+msgstr "- Име на Ñървър: "
+
+#: src/client/game.cpp
+#, fuzzy
+msgid "A serialization error occurred:"
+msgstr "Възникна грешка:"
+
+#: src/client/game.cpp
+#, c-format
+msgid "Access denied. Reason: %s"
+msgstr "ДоÑтъпът е отказан. Причина: %s"
#: src/client/game.cpp
msgid "Automatic forward disabled"
-msgstr ""
+msgstr "Ðвтоматичното движение напред е изключено"
#: src/client/game.cpp
msgid "Automatic forward enabled"
+msgstr "Ðвтоматичното движение напред е включено"
+
+#: src/client/game.cpp
+#, fuzzy
+msgid "Block bounds hidden"
+msgstr "Граници на блокове"
+
+#: src/client/game.cpp
+msgid "Block bounds shown for all blocks"
msgstr ""
#: src/client/game.cpp
-msgid "Camera update disabled"
+msgid "Block bounds shown for current block"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Block bounds shown for nearby blocks"
msgstr ""
#: src/client/game.cpp
+msgid "Camera update disabled"
+msgstr "ОпреÑнÑването на екрана при движение е изключено"
+
+#: src/client/game.cpp
msgid "Camera update enabled"
+msgstr "ОпреÑнÑването на екрана при движение е включено"
+
+#: src/client/game.cpp
+msgid "Can't show block bounds (need 'basic_debug' privilege)"
msgstr ""
#: src/client/game.cpp
msgid "Change Password"
-msgstr ""
+msgstr "ПромÑна на парола"
#: src/client/game.cpp
msgid "Cinematic mode disabled"
-msgstr ""
+msgstr "КинематографичниÑÑ‚ режим е изключен"
#: src/client/game.cpp
msgid "Cinematic mode enabled"
-msgstr ""
+msgstr "КинематографичниÑÑ‚ режим е включен"
+
+#: src/client/game.cpp
+msgid "Client disconnected"
+msgstr "Клиентът е изключен"
#: src/client/game.cpp
msgid "Client side scripting is disabled"
-msgstr ""
+msgstr "ИзпълнÑване на Ñкриптове от Ñтраната на клиента е изключено"
#: src/client/game.cpp
msgid "Connecting to server..."
-msgstr ""
+msgstr "Свързване ÑÑŠÑ Ñървър…"
+
+#: src/client/game.cpp
+msgid "Connection failed for unknown reason"
+msgstr "Грешка във връзката поради неизвеÑтна причина"
#: src/client/game.cpp
msgid "Continue"
-msgstr ""
+msgstr "Продължаване"
#: src/client/game.cpp
#, c-format
@@ -1212,14 +1338,33 @@ msgid ""
"- Mouse wheel: select item\n"
"- %s: chat\n"
msgstr ""
+"Управление:\n"
+"- %s: движение напред\n"
+"- %s: движение назад\n"
+"- %s: движение налÑво\n"
+"- %s: движение надÑÑно\n"
+"- %s: Ñкачане/катерене\n"
+"- %s: копаене/удар\n"
+"- %s: поÑтавÑне/използване\n"
+"- %s: промъкване/Ñлизане\n"
+"- %s: пуÑкане на предмет\n"
+"- %s: инвентар\n"
+"- мишка: завъртане/разглеждане\n"
+"- колелце на мишка: избор на предмет\n"
+"- %s: разговор\n"
#: src/client/game.cpp
-msgid "Creating client..."
+#, c-format
+msgid "Couldn't resolve address: %s"
msgstr ""
#: src/client/game.cpp
+msgid "Creating client..."
+msgstr "Създаване на клиент…"
+
+#: src/client/game.cpp
msgid "Creating server..."
-msgstr ""
+msgstr "Създаване на Ñървър…"
#: src/client/game.cpp
msgid "Debug info and profiler graph hidden"
@@ -1251,67 +1396,67 @@ msgstr ""
#: src/client/game.cpp
msgid "Disabled unlimited viewing range"
-msgstr ""
+msgstr "ÐеограничениÑÑ‚ обхват на видимоÑÑ‚ е изключен"
#: src/client/game.cpp
msgid "Enabled unlimited viewing range"
-msgstr ""
+msgstr "ÐеограничениÑÑ‚ обхват на видимоÑÑ‚ е включен"
#: src/client/game.cpp
msgid "Exit to Menu"
-msgstr ""
+msgstr "Изход към менюто"
#: src/client/game.cpp
msgid "Exit to OS"
-msgstr ""
+msgstr "Изход към ОС"
#: src/client/game.cpp
msgid "Fast mode disabled"
-msgstr ""
+msgstr "Режимът на бързо движение е изключен"
#: src/client/game.cpp
msgid "Fast mode enabled"
-msgstr ""
+msgstr "Режимът на бързо движение е включен"
#: src/client/game.cpp
msgid "Fast mode enabled (note: no 'fast' privilege)"
-msgstr ""
+msgstr "Режимът на бързо движение е включен (заб.: липÑва правото „fast“)"
#: src/client/game.cpp
msgid "Fly mode disabled"
-msgstr ""
+msgstr "Режимът на летене е изключен"
#: src/client/game.cpp
msgid "Fly mode enabled"
-msgstr ""
+msgstr "Режимът на летене е включен"
#: src/client/game.cpp
msgid "Fly mode enabled (note: no 'fly' privilege)"
-msgstr ""
+msgstr "Режимът на летене е включен (заб.: липÑва правото „fly“)"
#: src/client/game.cpp
msgid "Fog disabled"
-msgstr ""
+msgstr "Мъглата е изключена"
#: src/client/game.cpp
msgid "Fog enabled"
-msgstr ""
+msgstr "Мъглата е включена"
#: src/client/game.cpp
msgid "Game info:"
-msgstr ""
+msgstr "Ð˜Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð·Ð° играта:"
#: src/client/game.cpp
msgid "Game paused"
-msgstr ""
+msgstr "Играта е на пауза"
#: src/client/game.cpp
msgid "Hosting server"
-msgstr ""
+msgstr "Домакин на играта"
#: src/client/game.cpp
msgid "Item definitions..."
-msgstr ""
+msgstr "Дефиниции на предмети…"
#: src/client/game.cpp
msgid "KiB/s"
@@ -1319,7 +1464,7 @@ msgstr ""
#: src/client/game.cpp
msgid "Media..."
-msgstr ""
+msgstr "МедиÑ…"
#: src/client/game.cpp
msgid "MiB/s"
@@ -1327,160 +1472,175 @@ msgstr ""
#: src/client/game.cpp
msgid "Minimap currently disabled by game or mod"
-msgstr ""
+msgstr "Картата е ÑпрÑна или от играта, или от модификациÑ"
+
+#: src/client/game.cpp
+msgid "Multiplayer"
+msgstr "МножеÑтво играчи"
#: src/client/game.cpp
msgid "Noclip mode disabled"
-msgstr ""
+msgstr "Режимът „без изрÑзване“ е изключен"
#: src/client/game.cpp
msgid "Noclip mode enabled"
-msgstr ""
+msgstr "Режимът „без изрÑзване“ е включен"
#: src/client/game.cpp
msgid "Noclip mode enabled (note: no 'noclip' privilege)"
-msgstr ""
+msgstr "Режимът „без изрÑзване“ е включен (заб.: липÑва правото „noclip“)"
#: src/client/game.cpp
msgid "Node definitions..."
-msgstr ""
+msgstr "Дефиниции на възли…"
#: src/client/game.cpp
msgid "Off"
-msgstr ""
+msgstr "Изключено"
#: src/client/game.cpp
msgid "On"
-msgstr ""
+msgstr "Включено"
#: src/client/game.cpp
msgid "Pitch move mode disabled"
-msgstr ""
+msgstr "Режимът „промÑна на виÑочината“ е изключен"
#: src/client/game.cpp
msgid "Pitch move mode enabled"
-msgstr ""
+msgstr "Режимът „промÑна на виÑочината“ е включен"
#: src/client/game.cpp
msgid "Profiler graph shown"
-msgstr ""
+msgstr "Графиката на профилатора е показана"
#: src/client/game.cpp
msgid "Remote server"
-msgstr ""
+msgstr "Отдалечен Ñървър"
#: src/client/game.cpp
msgid "Resolving address..."
-msgstr ""
+msgstr "Ðамиране на адреÑ…"
#: src/client/game.cpp
msgid "Shutting down..."
-msgstr ""
+msgstr "Изключване…"
#: src/client/game.cpp
msgid "Singleplayer"
-msgstr ""
+msgstr "Един играч"
#: src/client/game.cpp
msgid "Sound Volume"
-msgstr ""
+msgstr "Сила на звука"
#: src/client/game.cpp
msgid "Sound muted"
-msgstr ""
+msgstr "Звукът е заглушен"
#: src/client/game.cpp
msgid "Sound system is disabled"
-msgstr ""
+msgstr "СиÑтемата за звук е изключена"
#: src/client/game.cpp
msgid "Sound system is not supported on this build"
-msgstr ""
+msgstr "Ð’ това издание не Ñе поддържа звукова ÑиÑтема"
#: src/client/game.cpp
msgid "Sound unmuted"
+msgstr "Звукът е пуÑнат"
+
+#: src/client/game.cpp
+#, c-format
+msgid "The server is probably running a different version of %s."
+msgstr "Сървърът вероÑтно използва друго издание на %s."
+
+#: src/client/game.cpp
+#, c-format
+msgid "Unable to connect to %s because IPv6 is disabled"
msgstr ""
#: src/client/game.cpp
#, c-format
-msgid "Viewing range changed to %d"
+msgid "Unable to listen on %s because IPv6 is disabled"
msgstr ""
#: src/client/game.cpp
#, c-format
+msgid "Viewing range changed to %d"
+msgstr "Обхватът на видимоÑтта е променен на %d"
+
+#: src/client/game.cpp
+#, c-format
msgid "Viewing range is at maximum: %d"
-msgstr ""
+msgstr "Обхватът на видимоÑтта е на ÑÐ²Ð¾Ñ Ð¼Ð°ÐºÑимум: %d"
#: src/client/game.cpp
#, c-format
msgid "Viewing range is at minimum: %d"
-msgstr ""
+msgstr "Обхватът на видимоÑтта е на ÑÐ²Ð¾Ñ Ð¼Ð¸Ð½Ð¸Ð¼ÑƒÐ¼: %d"
#: src/client/game.cpp
#, c-format
msgid "Volume changed to %d%%"
-msgstr ""
+msgstr "Силата на звука е променена на %d%%"
#: src/client/game.cpp
msgid "Wireframe shown"
-msgstr ""
+msgstr "Показани Ñа телените рамки"
#: src/client/game.cpp
msgid "Zoom currently disabled by game or mod"
-msgstr ""
+msgstr "Мащабирането е ÑпрÑно или от играта, или от модификациÑ"
#: src/client/game.cpp
msgid "ok"
-msgstr ""
+msgstr "добре"
#: src/client/gameui.cpp
msgid "Chat hidden"
-msgstr ""
+msgstr "Разговорите Ñа Ñкрити"
#: src/client/gameui.cpp
msgid "Chat shown"
-msgstr ""
+msgstr "Разговорите Ñа видими"
#: src/client/gameui.cpp
msgid "HUD hidden"
-msgstr ""
+msgstr "HUD Ñкрит"
#: src/client/gameui.cpp
msgid "HUD shown"
-msgstr ""
+msgstr "HUD видим"
#: src/client/gameui.cpp
msgid "Profiler hidden"
-msgstr ""
+msgstr "Профилаторът е Ñкрит"
#: src/client/gameui.cpp
#, c-format
msgid "Profiler shown (page %d of %d)"
-msgstr ""
+msgstr "Профилаторът е видим (Ñтраница %d от %d)"
#: src/client/keycode.cpp
msgid "Apps"
-msgstr ""
+msgstr "ПриложениÑ"
#: src/client/keycode.cpp
msgid "Backspace"
-msgstr ""
+msgstr "Backspace"
#: src/client/keycode.cpp
msgid "Caps Lock"
-msgstr ""
-
-#: src/client/keycode.cpp
-msgid "Clear"
-msgstr ""
+msgstr "Caps Lock"
#: src/client/keycode.cpp
msgid "Control"
-msgstr ""
+msgstr "Control"
#: src/client/keycode.cpp
msgid "Down"
-msgstr ""
+msgstr "Ðадолу"
#: src/client/keycode.cpp
msgid "End"
@@ -1528,27 +1688,27 @@ msgstr ""
#: src/client/keycode.cpp src/gui/guiKeyChangeMenu.cpp
msgid "Left"
-msgstr ""
+msgstr "ÐалÑво"
#: src/client/keycode.cpp
msgid "Left Button"
-msgstr ""
+msgstr "ЛÑв бутон"
#: src/client/keycode.cpp
msgid "Left Control"
-msgstr ""
+msgstr "ЛÑв Control"
#: src/client/keycode.cpp
msgid "Left Menu"
-msgstr ""
+msgstr "ЛÑв Menu"
#: src/client/keycode.cpp
msgid "Left Shift"
-msgstr ""
+msgstr "ЛÑв Shift"
#: src/client/keycode.cpp
msgid "Left Windows"
-msgstr ""
+msgstr "ЛÑв Windows"
#. ~ Key name, common on Windows keyboards
#: src/client/keycode.cpp
@@ -1557,7 +1717,7 @@ msgstr ""
#: src/client/keycode.cpp
msgid "Middle Button"
-msgstr ""
+msgstr "Среден бутон"
#: src/client/keycode.cpp
msgid "Num Lock"
@@ -1654,31 +1814,31 @@ msgstr ""
#: src/client/keycode.cpp src/gui/guiKeyChangeMenu.cpp
msgid "Right"
-msgstr ""
+msgstr "ДÑÑно"
#: src/client/keycode.cpp
msgid "Right Button"
-msgstr ""
+msgstr "ДеÑен бутон"
#: src/client/keycode.cpp
msgid "Right Control"
-msgstr ""
+msgstr "ДеÑен Control"
#: src/client/keycode.cpp
msgid "Right Menu"
-msgstr ""
+msgstr "ДеÑен Menu"
#: src/client/keycode.cpp
msgid "Right Shift"
-msgstr ""
+msgstr "ДеÑен Shift"
#: src/client/keycode.cpp
msgid "Right Windows"
-msgstr ""
+msgstr "ДеÑен Windows"
#: src/client/keycode.cpp
msgid "Scroll Lock"
-msgstr ""
+msgstr "Scroll Lock"
#. ~ Key name
#: src/client/keycode.cpp
@@ -1687,27 +1847,27 @@ msgstr ""
#: src/client/keycode.cpp
msgid "Shift"
-msgstr ""
+msgstr "Shift"
#: src/client/keycode.cpp
msgid "Sleep"
-msgstr ""
+msgstr "Sleep"
#: src/client/keycode.cpp
msgid "Snapshot"
-msgstr ""
+msgstr "Снимка на екрана"
#: src/client/keycode.cpp
msgid "Space"
-msgstr ""
+msgstr "Интервал"
#: src/client/keycode.cpp
msgid "Tab"
-msgstr ""
+msgstr "Табулатор"
#: src/client/keycode.cpp
msgid "Up"
-msgstr ""
+msgstr "Ðагоре"
#: src/client/keycode.cpp
msgid "X Button 1"
@@ -1719,33 +1879,41 @@ msgstr ""
#: src/client/keycode.cpp src/gui/guiKeyChangeMenu.cpp
msgid "Zoom"
-msgstr ""
+msgstr "Мащабиране"
#: src/client/minimap.cpp
msgid "Minimap hidden"
-msgstr ""
+msgstr "Картата е Ñкрита"
#: src/client/minimap.cpp
#, c-format
msgid "Minimap in radar mode, Zoom x%d"
-msgstr ""
+msgstr "Картата е в режим на радар, мащаб x%d"
#: src/client/minimap.cpp
#, c-format
msgid "Minimap in surface mode, Zoom x%d"
-msgstr ""
+msgstr "Картата е в режим на повърхноÑÑ‚, мащаб x%d"
#: src/client/minimap.cpp
msgid "Minimap in texture mode"
-msgstr ""
+msgstr "Картата е в режим на текÑтура"
+
+#: src/gui/guiChatConsole.cpp
+msgid "Failed to open webpage"
+msgstr "Грешка при отварÑне на Ñтраница"
+
+#: src/gui/guiChatConsole.cpp
+msgid "Opening webpage"
+msgstr "ОтварÑне на Ñтраница"
#: src/gui/guiConfirmRegistration.cpp src/gui/guiPasswordChange.cpp
msgid "Passwords do not match!"
-msgstr ""
+msgstr "Паролите не Ñъвпадат!"
#: src/gui/guiConfirmRegistration.cpp
msgid "Register and Join"
-msgstr ""
+msgstr "РегиÑтриране и вход"
#: src/gui/guiConfirmRegistration.cpp
#, c-format
@@ -1756,188 +1924,199 @@ msgid ""
"Please retype your password and click 'Register and Join' to confirm account "
"creation, or click 'Cancel' to abort."
msgstr ""
+"Ðа път Ñте да влезете в Ñървъра Ñ Ð¸Ð¼Ðµ „%s“ за първи път.\n"
+"Ðко продължите нова Ñметка Ñ Ñ‚ÐµÐ·Ð¸ данни ще бъде Ñъздадена на Ñървъра.\n"
+"Въведете паролата отново и натиÑнете „РегиÑтриране и вход“, за да потвърдите "
+"или „Отказ“ за връщане обратно."
#: src/gui/guiFormSpecMenu.cpp
msgid "Proceed"
-msgstr ""
+msgstr "Ðапред"
#: src/gui/guiKeyChangeMenu.cpp
-msgid "\"Special\" = climb down"
-msgstr ""
+msgid "\"Aux1\" = climb down"
+msgstr "„Aux1“ = Ñлизане"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Autoforward"
-msgstr ""
+msgstr "Ðвтоматично напред"
#: src/gui/guiKeyChangeMenu.cpp src/settings_translation_file.cpp
msgid "Automatic jumping"
-msgstr ""
+msgstr "Ðвтоматично Ñкачане"
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Aux1"
+msgstr "Aux1"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Backward"
-msgstr ""
+msgstr "Ðазад"
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Block bounds"
+msgstr "Граници на блокове"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Change camera"
-msgstr ""
+msgstr "ПромÑна на камера"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Chat"
-msgstr ""
+msgstr "Разговори"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Command"
-msgstr ""
+msgstr "Команда"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Console"
-msgstr ""
+msgstr "Конзола"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Dec. range"
-msgstr ""
+msgstr "Ðамал. на обхвата"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Dec. volume"
-msgstr ""
+msgstr "Ðамал. на звука"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Double tap \"jump\" to toggle fly"
-msgstr ""
+msgstr "Двоен „Ñкок“ превключва летене"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Drop"
-msgstr ""
+msgstr "ПуÑкане предмет"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Forward"
-msgstr ""
+msgstr "Ðапред"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Inc. range"
-msgstr ""
+msgstr "Увелич. на обхвата"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Inc. volume"
-msgstr ""
+msgstr "Увелич. на звука"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Inventory"
-msgstr ""
+msgstr "Инвентар"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Jump"
-msgstr ""
+msgstr "Скок"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Key already in use"
-msgstr ""
+msgstr "Клавишът вече Ñе ползва"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)"
msgstr ""
+"Клавишни комбинации (Ðко екранът изглежда Ñчупен махнете нещата от minetest."
+"conf)"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Local command"
-msgstr ""
+msgstr "МеÑтна команда"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Mute"
-msgstr ""
+msgstr "Заглушаване"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Next item"
-msgstr ""
+msgstr "След. предмет"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Prev. item"
-msgstr ""
+msgstr "Пред. предмет"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Range select"
-msgstr ""
+msgstr "Обхват видимоÑÑ‚"
#: src/gui/guiKeyChangeMenu.cpp src/settings_translation_file.cpp
msgid "Screenshot"
-msgstr ""
+msgstr "Снимка на екрана"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Sneak"
-msgstr ""
-
-#: src/gui/guiKeyChangeMenu.cpp
-msgid "Special"
-msgstr ""
+msgstr "Промъкване"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Toggle HUD"
-msgstr ""
+msgstr "Превкл. HUD"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Toggle chat log"
-msgstr ""
+msgstr "Превкл. разговори"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Toggle fast"
-msgstr ""
+msgstr "Превкл. бързина"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Toggle fly"
-msgstr ""
+msgstr "Превкл. полет"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Toggle fog"
-msgstr ""
+msgstr "Превкл. мъгла"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Toggle minimap"
-msgstr ""
+msgstr "Превкл. карта"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Toggle noclip"
-msgstr ""
+msgstr "Превкл. изрÑзване"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Toggle pitchmove"
-msgstr ""
+msgstr "Превкл. „pitchmove“"
#: src/gui/guiKeyChangeMenu.cpp
msgid "press key"
-msgstr ""
+msgstr "избор бутон"
#: src/gui/guiPasswordChange.cpp
msgid "Change"
-msgstr ""
+msgstr "ПроменÑне"
#: src/gui/guiPasswordChange.cpp
msgid "Confirm Password"
-msgstr ""
+msgstr "Потвърж. на парола"
#: src/gui/guiPasswordChange.cpp
msgid "New Password"
-msgstr ""
+msgstr "Ðова парола"
#: src/gui/guiPasswordChange.cpp
msgid "Old Password"
-msgstr ""
+msgstr "Стара парола"
#: src/gui/guiVolumeChange.cpp
msgid "Exit"
-msgstr ""
+msgstr "Изход"
#: src/gui/guiVolumeChange.cpp
msgid "Muted"
-msgstr ""
+msgstr "Без звук"
#: src/gui/guiVolumeChange.cpp
-msgid "Sound Volume: "
-msgstr ""
+#, c-format
+msgid "Sound Volume: %d%%"
+msgstr "Сила на звука: %d%%"
#. ~ Imperative, as in "Enter/type in text".
#. Don't forget the space.
#: src/gui/modalMenu.cpp
msgid "Enter "
-msgstr ""
+msgstr "Въведете "
#. ~ DO NOT TRANSLATE THIS LITERALLY!
#. This is a special string which needs to contain the translation's
@@ -1954,8 +2133,8 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"(Android) Use virtual joystick to trigger \"aux\" button.\n"
-"If enabled, virtual joystick will also tap \"aux\" button when out of main "
+"(Android) Use virtual joystick to trigger \"Aux1\" button.\n"
+"If enabled, virtual joystick will also tap \"Aux1\" button when out of main "
"circle."
msgstr ""
@@ -2138,6 +2317,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Adjust the detected display density, used for scaling UI elements."
+msgstr ""
+
+#: src/settings_translation_file.cpp
#, c-format
msgid ""
"Adjusts the density of the floatland layer.\n"
@@ -2235,21 +2418,29 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Automatically jump up single-node obstacles."
-msgstr ""
+msgstr "Ðвтоматично преÑкача препÑÑ‚ÑÑ‚Ð²Ð¸Ñ Ð¾Ñ‚ единични възли."
#: src/settings_translation_file.cpp
msgid "Automatically report to the serverlist."
-msgstr ""
+msgstr "Ðвтоматично докладване в ÑпиÑъка на Ñървърите."
#: src/settings_translation_file.cpp
msgid "Autosave screen size"
-msgstr ""
+msgstr "Ðвтоматично запазване на размера на екрана"
#: src/settings_translation_file.cpp
msgid "Autoscaling mode"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Aux1 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Aux1 key for climbing/descending"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Backward key"
msgstr ""
@@ -2283,7 +2474,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Bind address"
-msgstr ""
+msgstr "ÐÐ´Ñ€ÐµÑ Ð·Ð° Ñвързване"
#: src/settings_translation_file.cpp
msgid "Biome API temperature and humidity noise parameters"
@@ -2294,10 +2485,6 @@ msgid "Biome noise"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Bits per pixel (aka color depth) in fullscreen mode."
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Block send optimize distance"
msgstr ""
@@ -2396,6 +2583,15 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Chat command time message threshold"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Chat commands"
+msgstr "Команда"
+
+#: src/settings_translation_file.cpp
msgid "Chat font size"
msgstr ""
@@ -2428,8 +2624,9 @@ msgid "Chat toggle key"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Chatcommands"
-msgstr ""
+#, fuzzy
+msgid "Chat weblinks"
+msgstr "Разговорите Ñа видими"
#: src/settings_translation_file.cpp
msgid "Chunk size"
@@ -2448,6 +2645,12 @@ msgid "Clean transparent textures"
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Clickable weblinks (middle-click or Ctrl+left-click) enabled in chat console "
+"output."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Client"
msgstr ""
@@ -2492,6 +2695,10 @@ msgid "Colored fog"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Colored shadows"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid ""
"Comma-separated list of flags to hide in the content repository.\n"
"\"nonfree\" can be used to hide packages which do not qualify as 'free "
@@ -2519,6 +2726,22 @@ msgid "Command key"
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Compression level to use when saving mapblocks to disk.\n"
+"-1 - use default compression level\n"
+"0 - least compression, fastest\n"
+"9 - best compression, slowest"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Compression level to use when sending mapblocks to the client.\n"
+"-1 - use default compression level\n"
+"0 - least compression, fastest\n"
+"9 - best compression, slowest"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Connect glass"
msgstr ""
@@ -2528,19 +2751,19 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Connects glass if supported by node."
-msgstr ""
+msgstr "Свързва Ñтъкло, ако Ñе поддържа от възела."
#: src/settings_translation_file.cpp
msgid "Console alpha"
-msgstr ""
+msgstr "ПрозрачноÑÑ‚ на конзолата"
#: src/settings_translation_file.cpp
msgid "Console color"
-msgstr ""
+msgstr "ЦвÑÑ‚ на конзолата"
#: src/settings_translation_file.cpp
msgid "Console height"
-msgstr ""
+msgstr "ВиÑочина на конзолата"
#: src/settings_translation_file.cpp
msgid "ContentDB Flag Blacklist"
@@ -2574,10 +2797,14 @@ msgid ""
"Examples:\n"
"72 = 20min, 360 = 4min, 1 = 24hour, 0 = day/night/whatever stays unchanged."
msgstr ""
+"УправлÑва дължината на цикъла ден/нощ.\n"
+"Пример:\n"
+"72 = 20 мин, 360 = 4 мин, 1 = 24 чаÑа, 0 = ден/нощ/каквото е оÑтава без "
+"промÑна."
#: src/settings_translation_file.cpp
msgid "Controls sinking speed in liquid."
-msgstr ""
+msgstr "УправлÑва ÑкороÑтта на потъване в течноÑти."
#: src/settings_translation_file.cpp
msgid "Controls steepness/depth of lake depressions."
@@ -2609,7 +2836,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"Crosshair alpha (opaqueness, between 0 and 255).\n"
-"Also controls the object crosshair color"
+"This also applies to the object crosshair."
msgstr ""
#: src/settings_translation_file.cpp
@@ -2678,7 +2905,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Default report format"
-msgstr ""
+msgstr "Формат на отчета по подразбиране"
#: src/settings_translation_file.cpp
msgid "Default stack size"
@@ -2686,8 +2913,9 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Default timeout for cURL, stated in milliseconds.\n"
-"Only has an effect if compiled with cURL."
+"Define shadow filtering quality.\n"
+"This simulates the soft shadows effect by applying a PCF or Poisson disk\n"
+"but also uses more resources."
msgstr ""
#: src/settings_translation_file.cpp
@@ -2805,6 +3033,10 @@ msgid "Disallow empty passwords"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Display Density Scaling Factor"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Domain name of server, to be displayed in the serverlist."
msgstr ""
@@ -2849,6 +3081,19 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Enable Poisson disk filtering.\n"
+"On true uses Poisson disk to make \"soft shadows\". Otherwise uses PCF "
+"filtering."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable colored shadows.\n"
+"On true translucent nodes cast colored shadows. This is expensive."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Enable console window"
msgstr ""
@@ -2957,6 +3202,12 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Enables tradeoffs that reduce CPU load or increase rendering performance\n"
+"at the expense of minor visual glitches that do not impact game playability."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Engine profiling data print interval"
msgstr ""
@@ -2995,18 +3246,6 @@ msgid "Fallback font path"
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 ""
@@ -3024,7 +3263,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Fast movement (via the \"special\" key).\n"
+"Fast movement (via the \"Aux1\" key).\n"
"This requires the \"fast\" privilege on the server."
msgstr ""
@@ -3058,9 +3297,9 @@ 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."
+"which PNG optimizers usually discard, often resulting in dark or\n"
+"light edges to transparent textures. Apply a filter to clean that up\n"
+"at texture load time. This is automatically enabled if mipmapping is enabled."
msgstr ""
#: src/settings_translation_file.cpp
@@ -3152,15 +3391,15 @@ msgid "Font size"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Font size of the default font in point (pt)."
+msgid "Font size divisible by"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Font size of the fallback font in point (pt)."
+msgid "Font size of the default font where 1 unit = 1 pixel at 96 DPI"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Font size of the monospace font in point (pt)."
+msgid "Font size of the monospace font where 1 unit = 1 pixel at 96 DPI"
msgstr ""
#: src/settings_translation_file.cpp
@@ -3171,6 +3410,17 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"For pixel-style fonts that do not scale well, this ensures that font sizes "
+"used\n"
+"with this font will always be divisible by this value, in pixels. For "
+"instance,\n"
+"a pixel font 16 pixels tall should have this set to 16, so it will only ever "
+"be\n"
+"sized 16, 32, 48, etc., so a mod requesting a size of 25 will get 32."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Format of player chat messages. The following strings are valid "
"placeholders:\n"
"@name, @message, @timestamp (optional)"
@@ -3229,10 +3479,6 @@ msgid "Fraction of the visible distance at which fog starts to be rendered"
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)."
@@ -3257,10 +3503,6 @@ msgid "Full screen"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Full screen BPP"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Fullscreen mode."
msgstr ""
@@ -3284,7 +3526,7 @@ msgstr ""
msgid ""
"Global map generation attributes.\n"
"In Mapgen v6 the 'decorations' flag controls all decorations except trees\n"
-"and junglegrass, in all other mapgens this flag controls all decorations."
+"and jungle grass, in all other mapgens this flag controls all decorations."
msgstr ""
#: src/settings_translation_file.cpp
@@ -3353,7 +3595,8 @@ msgid "Heat noise"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Height component of the initial window size."
+msgid ""
+"Height component of the initial window size. Ignored in fullscreen mode."
msgstr ""
#: src/settings_translation_file.cpp
@@ -3365,10 +3608,6 @@ msgid "Height select noise"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "High-precision FPU"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Hill steepness"
msgstr ""
@@ -3599,8 +3838,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"If disabled, \"special\" key is used to fly fast if both fly and fast mode "
-"are\n"
+"If disabled, \"Aux1\" key is used to fly fast if both fly and fast mode are\n"
"enabled."
msgstr ""
@@ -3622,8 +3860,8 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"If enabled, \"special\" key instead of \"sneak\" key is used for climbing "
-"down and\n"
+"If enabled, \"Aux1\" key instead of \"Sneak\" key is used for climbing down "
+"and\n"
"descending."
msgstr ""
@@ -3669,6 +3907,12 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"If the execution of a chat command takes longer than this specified time in\n"
+"seconds, add the time information to the chat command message"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"If the file size of debug.txt exceeds the number of megabytes specified in\n"
"this setting when it is opened, the file is moved to debug.txt.1,\n"
"deleting an older debug.txt.1 if it exists.\n"
@@ -3714,7 +3958,7 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Instrument chatcommands on registration."
+msgid "Instrument chat commands on registration."
msgstr ""
#: src/settings_translation_file.cpp
@@ -3798,7 +4042,7 @@ msgid "Joystick button repetition interval"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Joystick deadzone"
+msgid "Joystick dead zone"
msgstr ""
#: src/settings_translation_file.cpp
@@ -4396,7 +4640,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Large cave proportion flooded"
-msgstr ""
+msgstr "ГолÑма чаÑÑ‚ от пещерите Ñа наводнени"
#: src/settings_translation_file.cpp
msgid "Large chat console key"
@@ -4556,10 +4800,6 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Makes DirectX work with LuaJIT. Disable if it causes troubles."
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Makes all liquids opaque"
msgstr ""
@@ -4631,6 +4871,10 @@ msgid "Map save interval"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Map shadows update frames"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Mapblock limit"
msgstr ""
@@ -4739,6 +4983,10 @@ msgid "Maximum FPS when the window is not focused, or when the game is paused."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Maximum distance to render shadows."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Maximum forceloaded blocks"
msgstr ""
@@ -4844,7 +5092,15 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Maximum time in ms a file download (e.g. a mod download) may take."
+msgid ""
+"Maximum time a file download (e.g. a mod download) may take, stated in "
+"milliseconds."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum time an interactive request (e.g. server list fetch) may take, "
+"stated in milliseconds."
msgstr ""
#: src/settings_translation_file.cpp
@@ -4908,7 +5164,7 @@ msgid "Mod channels"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Modifies the size of the hudbar elements."
+msgid "Modifies the size of the HUD elements."
msgstr ""
#: src/settings_translation_file.cpp
@@ -4920,6 +5176,10 @@ msgid "Monospace font size"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Monospace font size divisible by"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Mountain height noise"
msgstr ""
@@ -5040,7 +5300,7 @@ 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"
+"This is a trade-off between SQLite transaction overhead and\n"
"memory consumption (4096=100MB, as a rule of thumb)."
msgstr ""
@@ -5059,21 +5319,18 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Opaqueness (alpha) of the shadow behind the fallback font, between 0 and 255."
-msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid ""
"Open the pause menu when the window's focus is lost. Does not pause if a "
"formspec is\n"
"open."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Optional override for chat weblink color."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid ""
-"Path of the fallback font.\n"
-"If “freetype†setting is enabled: Must be a TrueType font.\n"
-"If “freetype†setting is disabled: Must be a bitmap or XML vectors font.\n"
+"Path of the fallback font. Must be a TrueType font.\n"
"This font will be used for certain languages or if the default font is "
"unavailable."
msgstr ""
@@ -5096,17 +5353,13 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Path to the default font.\n"
-"If “freetype†setting is enabled: Must be a TrueType font.\n"
-"If “freetype†setting is disabled: Must be a bitmap or XML vectors font.\n"
+"Path to the default font. Must be a TrueType font.\n"
"The fallback font will be used if the font cannot be loaded."
msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Path to the monospace font.\n"
-"If “freetype†setting is enabled: Must be a TrueType font.\n"
-"If “freetype†setting is disabled: Must be a bitmap or XML vectors font.\n"
+"Path to the monospace font. Must be a TrueType font.\n"
"This font is used for e.g. the console and profiler screen."
msgstr ""
@@ -5150,7 +5403,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Player name"
-msgstr ""
+msgstr "Име на играча"
#: src/settings_translation_file.cpp
msgid "Player transfer distance"
@@ -5161,6 +5414,10 @@ msgid "Player versus player"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Poisson filtering"
+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."
@@ -5205,14 +5462,14 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"Prometheus listener address.\n"
-"If minetest is compiled with ENABLE_PROMETHEUS option enabled,\n"
+"If Minetest is compiled with ENABLE_PROMETHEUS option enabled,\n"
"enable metrics listener for Prometheus on that address.\n"
-"Metrics can be fetch on http://127.0.0.1:30000/metrics"
+"Metrics can be fetched on http://127.0.0.1:30000/metrics"
msgstr ""
#: src/settings_translation_file.cpp
msgid "Proportion of large caves that contain liquid."
-msgstr ""
+msgstr "ЧаÑтта от големи пещери, които Ñъдържат течноÑÑ‚."
#: src/settings_translation_file.cpp
msgid ""
@@ -5247,7 +5504,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Remote port"
-msgstr ""
+msgstr "Отдалечен порт"
#: src/settings_translation_file.cpp
msgid ""
@@ -5458,7 +5715,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Server address"
-msgstr ""
+msgstr "ÐÐ´Ñ€ÐµÑ Ð½Ð° Ñървър"
#: src/settings_translation_file.cpp
msgid "Server description"
@@ -5470,7 +5727,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Server port"
-msgstr ""
+msgstr "Порт на Ñървъра"
#: src/settings_translation_file.cpp
msgid "Server side occlusion culling"
@@ -5496,6 +5753,32 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Set the shadow strength.\n"
+"Lower value means lighter shadows, higher value means darker shadows."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set the soft shadow radius size.\n"
+"Lower values mean sharper shadows, bigger values mean softer shadows.\n"
+"Minimum value: 1.0; maximum value: 10.0"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set the tilt of Sun/Moon orbit in degrees.\n"
+"Value of 0 means no tilt / vertical orbit.\n"
+"Minimum value: 0.0; maximum value: 60.0"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set to true to enable Shadow Mapping.\n"
+"Requires shaders to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Set to true to enable waving leaves.\n"
"Requires shaders to be enabled."
msgstr ""
@@ -5513,6 +5796,13 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Sets shadow texture quality to 32 bits.\n"
+"On false, 16 bits texture will be used.\n"
+"This can cause much more artifacts in the shadow."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Shader path"
msgstr ""
@@ -5525,15 +5815,29 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Shadow filter quality"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Shadow map max distance in nodes to render shadows"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Shadow map texture in 32 bits"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Shadow map texture size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid ""
"Shadow offset (in pixels) of the default font. If 0, then shadow will not be "
"drawn."
msgstr ""
#: src/settings_translation_file.cpp
-msgid ""
-"Shadow offset (in pixels) of the fallback font. If 0, then shadow will not "
-"be drawn."
+msgid "Shadow strength"
msgstr ""
#: src/settings_translation_file.cpp
@@ -5555,7 +5859,7 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Show nametag backgrounds by default"
+msgid "Show name tag backgrounds by default"
msgstr ""
#: src/settings_translation_file.cpp
@@ -5580,6 +5884,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Sky Body Orbit Tilt"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Slice w"
msgstr ""
@@ -5634,15 +5942,11 @@ msgid "Sneaking speed, in nodes per second."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Sound"
-msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid "Special key"
+msgid "Soft shadow radius"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Special key for climbing/descending"
+msgid "Sound"
msgstr ""
#: src/settings_translation_file.cpp
@@ -5662,6 +5966,14 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Spread a complete update of shadow map over given amount of frames.\n"
+"Higher values might make shadows laggy, lower values\n"
+"will consume more resources.\n"
+"Minimum value: 1; maximum value: 16"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Spread of light curve boost range.\n"
"Controls the width of the range to be boosted.\n"
"Standard deviation of the light curve boost Gaussian."
@@ -5768,6 +6080,13 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Texture size to render the shadow map on.\n"
+"This must be a power of two.\n"
+"Bigger numbers create better shadows but it is also more expensive."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Textures on a node may be aligned either to the node or to the world.\n"
"The former mode suits better things like machines, furniture, etc., while\n"
"the latter makes stairs and microblocks fit surroundings better.\n"
@@ -5781,7 +6100,7 @@ msgid "The URL for the content repository"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "The deadzone of the joystick"
+msgid "The dead zone of the joystick"
msgstr ""
#: src/settings_translation_file.cpp
@@ -5839,7 +6158,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"The rendering back-end for Irrlicht.\n"
+"The rendering back-end.\n"
"A restart is required after changing this.\n"
"Note: On Android, stick with OGLES1 if unsure! App may fail to start "
"otherwise.\n"
@@ -5850,7 +6169,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"The sensitivity of the joystick axes for moving the\n"
-"ingame view frustum around."
+"in-game view frustum around."
msgstr ""
#: src/settings_translation_file.cpp
@@ -5944,6 +6263,10 @@ msgid "Touch screen threshold"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Tradeoffs for performance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Trees noise"
msgstr ""
@@ -6013,7 +6336,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Use mip mapping to scale textures. May slightly increase performance,\n"
+"Use mipmapping to scale textures. May slightly increase performance,\n"
"especially when using a high resolution texture pack.\n"
"Gamma correct downscaling is not supported."
msgstr ""
@@ -6126,7 +6449,7 @@ msgid "Viewing range"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Virtual joystick triggers aux button"
+msgid "Virtual joystick triggers Aux1 button"
msgstr ""
#: src/settings_translation_file.cpp
@@ -6197,6 +6520,10 @@ msgid "Waving plants"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Weblink color"
+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"
@@ -6217,23 +6544,15 @@ msgid ""
"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.\n"
+"memory. Powers of 2 are recommended. This setting is ONLY applied if\n"
+"bilinear/trilinear/anisotropic filtering is enabled.\n"
"This is also used as the base node texture size for world-aligned\n"
"texture autoscaling."
msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Whether FreeType fonts are used, requires FreeType support to be compiled "
-"in.\n"
-"If disabled, bitmap and XML vectors fonts are used instead."
-msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid ""
-"Whether nametag backgrounds should be shown by default.\n"
+"Whether name tag backgrounds should be shown by default.\n"
"Mods may still set a background."
msgstr ""
@@ -6275,7 +6594,7 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Width component of the initial window size."
+msgid "Width component of the initial window size. Ignored in fullscreen mode."
msgstr ""
#: src/settings_translation_file.cpp
@@ -6360,34 +6679,31 @@ msgid "Y-level of seabed."
msgstr ""
#: src/settings_translation_file.cpp
-msgid ""
-"ZLib compression level to use when saving mapblocks to disk.\n"
-"-1 - Zlib's default compression level\n"
-"0 - no compresson, fastest\n"
-"9 - best compression, slowest\n"
-"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)"
-msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid ""
-"ZLib compression level to use when sending mapblocks to the client.\n"
-"-1 - Zlib's default compression level\n"
-"0 - no compresson, fastest\n"
-"9 - best compression, slowest\n"
-"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)"
+msgid "cURL file download timeout"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "cURL file download timeout"
+msgid "cURL interactive timeout"
msgstr ""
#: src/settings_translation_file.cpp
msgid "cURL parallel limit"
msgstr ""
-#: src/settings_translation_file.cpp
-msgid "cURL timeout"
-msgstr ""
+#~ msgid "- Creative Mode: "
+#~ msgstr "- ТворчеÑки режим: "
+
+#~ msgid "- Damage: "
+#~ msgstr "- Щети: "
+
+#~ msgid "Install: file: \"$1\""
+#~ msgstr "ИнÑталиране: файл: „$1“"
#~ msgid "View"
#~ msgstr "Гледане"
+
+#~ msgid "You died."
+#~ msgstr "УмрÑхте."
+
+#~ msgid "needs_fallback_font"
+#~ msgstr "no"
diff --git a/po/ca/minetest.po b/po/ca/minetest.po
index f9aecf265..b23999744 100644
--- a/po/ca/minetest.po
+++ b/po/ca/minetest.po
@@ -2,7 +2,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Catalan (Minetest)\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-02-23 19:03+0100\n"
+"POT-Creation-Date: 2022-01-25 23:19+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Catalan <https://hosted.weblate.org/projects/minetest/"
@@ -14,6 +14,47 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 3.9-dev\n"
+#: builtin/client/chatcommands.lua
+msgid "Clear the out chat queue"
+msgstr ""
+
+#: builtin/client/chatcommands.lua
+#, fuzzy
+msgid "Empty command."
+msgstr "Comands de xat"
+
+#: builtin/client/chatcommands.lua
+#, fuzzy
+msgid "Exit to main menu"
+msgstr "Eixir al menú"
+
+#: builtin/client/chatcommands.lua
+#, fuzzy
+msgid "Invalid command: "
+msgstr "Comands de xat"
+
+#: builtin/client/chatcommands.lua
+msgid "Issued command: "
+msgstr ""
+
+#: builtin/client/chatcommands.lua
+#, fuzzy
+msgid "List online players"
+msgstr "Un jugador"
+
+#: builtin/client/chatcommands.lua
+#, fuzzy
+msgid "Online players: "
+msgstr "Un jugador"
+
+#: builtin/client/chatcommands.lua
+msgid "The out chat queue is now empty."
+msgstr ""
+
+#: builtin/client/chatcommands.lua
+msgid "This command is disabled by server."
+msgstr ""
+
#: builtin/client/death_formspec.lua src/client/game.cpp
msgid "Respawn"
msgstr "Reaparèixer"
@@ -23,11 +64,42 @@ msgstr "Reaparèixer"
msgid "You died"
msgstr "Has mort."
+#: builtin/common/chatcommands.lua
+#, fuzzy
+msgid "Available commands:"
+msgstr "Comands de xat"
+
+#: builtin/common/chatcommands.lua
+#, fuzzy
+msgid "Available commands: "
+msgstr "Comands de xat"
+
+#: builtin/common/chatcommands.lua
+msgid "Command not available: "
+msgstr ""
+
+#: builtin/common/chatcommands.lua
+msgid "Get help for commands"
+msgstr ""
+
+#: builtin/common/chatcommands.lua
+msgid ""
+"Use '.help <cmd>' to get more information, or '.help all' to list everything."
+msgstr ""
+
+#: builtin/common/chatcommands.lua
+msgid "[all | <cmd>]"
+msgstr ""
+
#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp
msgid "OK"
msgstr ""
#: builtin/fstk/ui.lua
+msgid "<none available>"
+msgstr ""
+
+#: builtin/fstk/ui.lua
#, fuzzy
msgid "An error occurred in a Lua script:"
msgstr "S'ha produït un error en un script Lua, com per exemple un mod."
@@ -247,6 +319,13 @@ msgid "Install missing dependencies"
msgstr "Dependències opcionals:"
#: builtin/mainmenu/dlg_contentstore.lua
+#, fuzzy
+msgid "Install: Unsupported file type or broken archive"
+msgstr ""
+"\n"
+"Instal·lar mod: Format de arxiu \"$1\" no suportat o arxiu corrupte"
+
+#: builtin/mainmenu/dlg_contentstore.lua
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Mods"
msgstr "Mods"
@@ -566,7 +645,7 @@ msgstr "< Torna a la pàgina de configuració"
msgid "Browse"
msgstr "Navegar"
-#: builtin/mainmenu/dlg_settings_advanced.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_settings.lua
msgid "Disabled"
msgstr "Desactivat"
@@ -591,7 +670,7 @@ msgid "Offset"
msgstr ""
#: builtin/mainmenu/dlg_settings_advanced.lua
-msgid "Persistance"
+msgid "Persistence"
msgstr ""
#: builtin/mainmenu/dlg_settings_advanced.lua
@@ -610,7 +689,7 @@ msgstr "Restablir per defecte"
msgid "Scale"
msgstr ""
-#: builtin/mainmenu/dlg_settings_advanced.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_online.lua
msgid "Search"
msgstr "Buscar"
@@ -712,18 +791,6 @@ msgstr ""
#: builtin/mainmenu/pkgmgr.lua
#, fuzzy
-msgid "Install: Unsupported file type \"$1\" or broken archive"
-msgstr ""
-"\n"
-"Instal·lar mod: Format de arxiu \"$1\" no suportat o arxiu corrupte"
-
-#: builtin/mainmenu/pkgmgr.lua
-#, fuzzy
-msgid "Install: file: \"$1\""
-msgstr "Instal·lar mod: Arxiu: \"$1\""
-
-#: builtin/mainmenu/pkgmgr.lua
-#, fuzzy
msgid "Unable to find a valid mod or modpack"
msgstr ""
"Instal·lar mod: Impossible de trobar el nom de la carpeta adequat per al "
@@ -763,6 +830,42 @@ msgstr ""
"Intenta tornar a habilitar la llista de servidors públics i comprovi la seva "
"connexió a Internet ."
+#: builtin/mainmenu/tab_about.lua
+msgid "About"
+msgstr ""
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Active Contributors"
+msgstr "Col·laboradors Actius"
+
+#: builtin/mainmenu/tab_about.lua
+#, fuzzy
+msgid "Active renderer:"
+msgstr "Rang d'enviament de l'objecte actiu"
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Core Developers"
+msgstr "Desenvolupadors del nucli"
+
+#: builtin/mainmenu/tab_about.lua
+#, fuzzy
+msgid "Open User Data Directory"
+msgstr "Selecciona el fitxer del mod:"
+
+#: builtin/mainmenu/tab_about.lua
+msgid ""
+"Opens the directory that contains user-provided worlds, games, mods,\n"
+"and texture packs in a file manager / explorer."
+msgstr ""
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Previous Contributors"
+msgstr "Antics Col·laboradors"
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Previous Core Developers"
+msgstr "Antics Desenvolupadors del nucli"
+
#: builtin/mainmenu/tab_content.lua
msgid "Browse online content"
msgstr ""
@@ -810,37 +913,6 @@ msgstr "Desinstal·lar el mod seleccionat"
msgid "Use Texture Pack"
msgstr "Textures"
-#: builtin/mainmenu/tab_credits.lua
-msgid "Active Contributors"
-msgstr "Col·laboradors Actius"
-
-#: builtin/mainmenu/tab_credits.lua
-msgid "Core Developers"
-msgstr "Desenvolupadors del nucli"
-
-#: builtin/mainmenu/tab_credits.lua
-msgid "Credits"
-msgstr "Crèdits"
-
-#: builtin/mainmenu/tab_credits.lua
-#, fuzzy
-msgid "Open User Data Directory"
-msgstr "Selecciona el fitxer del mod:"
-
-#: builtin/mainmenu/tab_credits.lua
-msgid ""
-"Opens the directory that contains user-provided worlds, games, mods,\n"
-"and texture packs in a file manager / explorer."
-msgstr ""
-
-#: builtin/mainmenu/tab_credits.lua
-msgid "Previous Contributors"
-msgstr "Antics Col·laboradors"
-
-#: builtin/mainmenu/tab_credits.lua
-msgid "Previous Core Developers"
-msgstr "Antics Desenvolupadors del nucli"
-
#: builtin/mainmenu/tab_local.lua
msgid "Announce Server"
msgstr "Anunciar servidor"
@@ -871,7 +943,7 @@ msgstr "Servidor"
msgid "Install games from ContentDB"
msgstr ""
-#: builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
msgid "Name"
msgstr ""
@@ -883,7 +955,7 @@ msgstr "Nou"
msgid "No world created or selected!"
msgstr "No s'ha creat ningun món o no s'ha seleccionat!"
-#: builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
#, fuzzy
msgid "Password"
msgstr "Nova contrasenya"
@@ -892,7 +964,7 @@ msgstr "Nova contrasenya"
msgid "Play Game"
msgstr "Jugar Joc"
-#: builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
msgid "Port"
msgstr "Port"
@@ -915,8 +987,13 @@ msgid "Start Game"
msgstr "Ocultar Joc"
#: builtin/mainmenu/tab_online.lua
-msgid "Address / Port"
-msgstr "Adreça / Port"
+#, fuzzy
+msgid "Address"
+msgstr "Adreça BIND"
+
+#: builtin/mainmenu/tab_online.lua src/client/keycode.cpp
+msgid "Clear"
+msgstr "Netejar"
#: builtin/mainmenu/tab_online.lua
msgid "Connect"
@@ -926,35 +1003,47 @@ msgstr "Connectar"
msgid "Creative mode"
msgstr "Mode creatiu"
+#. ~ PvP = Player versus Player
#: builtin/mainmenu/tab_online.lua
-msgid "Damage enabled"
-msgstr "Dany activat"
+#, fuzzy
+msgid "Damage / PvP"
+msgstr "Dany"
#: builtin/mainmenu/tab_online.lua
msgid "Del. Favorite"
msgstr "Esborra preferit"
#: builtin/mainmenu/tab_online.lua
-msgid "Favorite"
+#, fuzzy
+msgid "Favorites"
msgstr "Preferit"
#: builtin/mainmenu/tab_online.lua
+msgid "Incompatible Servers"
+msgstr ""
+
+#: builtin/mainmenu/tab_online.lua
#, fuzzy
msgid "Join Game"
msgstr "Ocultar Joc"
#: builtin/mainmenu/tab_online.lua
-msgid "Name / Password"
-msgstr "Nom / Contrasenya"
-
-#: builtin/mainmenu/tab_online.lua
msgid "Ping"
msgstr "Ping"
-#. ~ PvP = Player versus Player
#: builtin/mainmenu/tab_online.lua
-msgid "PvP enabled"
-msgstr "PvP activat"
+#, fuzzy
+msgid "Public Servers"
+msgstr "Anunciar servidor"
+
+#: builtin/mainmenu/tab_online.lua
+msgid "Refresh"
+msgstr ""
+
+#: builtin/mainmenu/tab_online.lua
+#, fuzzy
+msgid "Server Description"
+msgstr "Port del Servidor"
#: builtin/mainmenu/tab_settings.lua
msgid "2x"
@@ -998,11 +1087,31 @@ msgstr "Configurar Controls"
msgid "Connected Glass"
msgstr "Vidres connectats"
+#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
+msgid "Dynamic shadows"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Dynamic shadows: "
+msgstr ""
+
#: builtin/mainmenu/tab_settings.lua
msgid "Fancy Leaves"
msgstr "Fulles Boniques"
#: builtin/mainmenu/tab_settings.lua
+msgid "High"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Low"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Medium"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
msgid "Mipmap"
msgstr "Mipmap"
@@ -1074,10 +1183,6 @@ msgstr "Il·luminació suau"
msgid "Texturing:"
msgstr "Texturització:"
-#: builtin/mainmenu/tab_settings.lua
-msgid "To enable shaders the OpenGL driver needs to be used."
-msgstr "Per habilitar les ombres el controlador OpenGL ha ser utilitzat."
-
#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
msgid "Tone Mapping"
msgstr ""
@@ -1092,6 +1197,14 @@ msgid "Trilinear Filter"
msgstr "Filtratge Trilineal"
#: builtin/mainmenu/tab_settings.lua
+msgid "Ultra High"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Very Low"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
msgid "Waving Leaves"
msgstr "Moviment de les Fulles"
@@ -1104,7 +1217,7 @@ msgstr "Moviment de les Fulles"
msgid "Waving Plants"
msgstr "Moviment de Plantes"
-#: src/client/client.cpp
+#: src/client/client.cpp src/client/game.cpp
msgid "Connection timed out."
msgstr "Temps d'espera de la connexió esgotat."
@@ -1133,7 +1246,8 @@ msgid "Connection error (timed out?)"
msgstr "Error de connexió (¿temps esgotat?)"
#: src/client/clientlauncher.cpp
-msgid "Could not find or load game \""
+#, fuzzy
+msgid "Could not find or load game: "
msgstr "No es pot trobar o carregar el joc \""
#: src/client/clientlauncher.cpp
@@ -1164,18 +1278,6 @@ msgstr ""
msgid "Provided world path doesn't exist: "
msgstr "La ruta del món especificat no existeix: "
-#. ~ DO NOT TRANSLATE THIS LITERALLY!
-#. This is a special string. Put either "no" or "yes"
-#. into the translation field (literally).
-#. Choose "yes" if the language requires use of the fallback
-#. font, "no" otherwise.
-#. The fallback font is (normally) required for languages with
-#. non-Latin script, like Chinese.
-#. When in doubt, test your translation.
-#: src/client/fontengine.cpp
-msgid "needs_fallback_font"
-msgstr "no"
-
#: src/client/game.cpp
msgid ""
"\n"
@@ -1190,16 +1292,6 @@ msgid "- Address: "
msgstr "Adreça BIND"
#: src/client/game.cpp
-#, fuzzy
-msgid "- Creative Mode: "
-msgstr "Mode Creatiu"
-
-#: src/client/game.cpp
-#, fuzzy
-msgid "- Damage: "
-msgstr "Dany"
-
-#: src/client/game.cpp
msgid "- Mode: "
msgstr ""
@@ -1224,6 +1316,16 @@ msgstr ""
#: src/client/game.cpp
#, fuzzy
+msgid "A serialization error occurred:"
+msgstr "Ha ocorregut un error:"
+
+#: src/client/game.cpp
+#, c-format
+msgid "Access denied. Reason: %s"
+msgstr ""
+
+#: src/client/game.cpp
+#, fuzzy
msgid "Automatic forward disabled"
msgstr "Tecla Avançar"
@@ -1233,6 +1335,22 @@ msgid "Automatic forward enabled"
msgstr "Tecla Avançar"
#: src/client/game.cpp
+msgid "Block bounds hidden"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Block bounds shown for all blocks"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Block bounds shown for current block"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Block bounds shown for nearby blocks"
+msgstr ""
+
+#: src/client/game.cpp
#, fuzzy
msgid "Camera update disabled"
msgstr "Tecla alternativa per a l'actualització de la càmera"
@@ -1243,6 +1361,10 @@ msgid "Camera update enabled"
msgstr "Tecla alternativa per a l'actualització de la càmera"
#: src/client/game.cpp
+msgid "Can't show block bounds (need 'basic_debug' privilege)"
+msgstr ""
+
+#: src/client/game.cpp
msgid "Change Password"
msgstr "Canviar contrasenya"
@@ -1257,6 +1379,11 @@ msgid "Cinematic mode enabled"
msgstr "Tecla mode cinematogràfic"
#: src/client/game.cpp
+#, fuzzy
+msgid "Client disconnected"
+msgstr "Client"
+
+#: src/client/game.cpp
msgid "Client side scripting is disabled"
msgstr ""
@@ -1265,6 +1392,10 @@ msgid "Connecting to server..."
msgstr "Connectant al servidor ..."
#: src/client/game.cpp
+msgid "Connection failed for unknown reason"
+msgstr ""
+
+#: src/client/game.cpp
msgid "Continue"
msgstr "Continuar"
@@ -1299,6 +1430,11 @@ msgstr ""
"- T: xat\n"
#: src/client/game.cpp
+#, c-format
+msgid "Couldn't resolve address: %s"
+msgstr ""
+
+#: src/client/game.cpp
msgid "Creating client..."
msgstr "Creant client ..."
@@ -1434,6 +1570,11 @@ msgid "Minimap currently disabled by game or mod"
msgstr ""
#: src/client/game.cpp
+#, fuzzy
+msgid "Multiplayer"
+msgstr "Un jugador"
+
+#: src/client/game.cpp
msgid "Noclip mode disabled"
msgstr ""
@@ -1511,6 +1652,21 @@ msgstr "Volum del so"
#: src/client/game.cpp
#, c-format
+msgid "The server is probably running a different version of %s."
+msgstr ""
+
+#: src/client/game.cpp
+#, c-format
+msgid "Unable to connect to %s because IPv6 is disabled"
+msgstr ""
+
+#: src/client/game.cpp
+#, c-format
+msgid "Unable to listen on %s because IPv6 is disabled"
+msgstr ""
+
+#: src/client/game.cpp
+#, c-format
msgid "Viewing range changed to %d"
msgstr ""
@@ -1581,10 +1737,6 @@ msgid "Caps Lock"
msgstr ""
#: src/client/keycode.cpp
-msgid "Clear"
-msgstr "Netejar"
-
-#: src/client/keycode.cpp
msgid "Control"
msgstr "Control"
@@ -1856,6 +2008,15 @@ msgstr ""
msgid "Minimap in texture mode"
msgstr ""
+#: src/gui/guiChatConsole.cpp
+#, fuzzy
+msgid "Failed to open webpage"
+msgstr "Error al instal·lar $1 en $2"
+
+#: src/gui/guiChatConsole.cpp
+msgid "Opening webpage"
+msgstr ""
+
#: src/gui/guiConfirmRegistration.cpp src/gui/guiPasswordChange.cpp
msgid "Passwords do not match!"
msgstr "Les contrasenyes no coincideixen!"
@@ -1880,7 +2041,7 @@ msgstr "Continuar"
#: src/gui/guiKeyChangeMenu.cpp
#, fuzzy
-msgid "\"Special\" = climb down"
+msgid "\"Aux1\" = climb down"
msgstr "\"Utilitzar\" = Descendir"
#: src/gui/guiKeyChangeMenu.cpp
@@ -1893,10 +2054,18 @@ msgid "Automatic jumping"
msgstr ""
#: src/gui/guiKeyChangeMenu.cpp
+msgid "Aux1"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
msgid "Backward"
msgstr "Arrere"
#: src/gui/guiKeyChangeMenu.cpp
+msgid "Block bounds"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
#, fuzzy
msgid "Change camera"
msgstr "Configurar controls"
@@ -1991,10 +2160,6 @@ msgid "Sneak"
msgstr "Discreció"
#: src/gui/guiKeyChangeMenu.cpp
-msgid "Special"
-msgstr ""
-
-#: src/gui/guiKeyChangeMenu.cpp
#, fuzzy
msgid "Toggle HUD"
msgstr "Activar volar"
@@ -2061,7 +2226,8 @@ msgid "Muted"
msgstr "Utilitza la tecla"
#: src/gui/guiVolumeChange.cpp
-msgid "Sound Volume: "
+#, fuzzy, c-format
+msgid "Sound Volume: %d%%"
msgstr "Volum de so: "
#. ~ Imperative, as in "Enter/type in text".
@@ -2085,8 +2251,8 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"(Android) Use virtual joystick to trigger \"aux\" button.\n"
-"If enabled, virtual joystick will also tap \"aux\" button when out of main "
+"(Android) Use virtual joystick to trigger \"Aux1\" button.\n"
+"If enabled, virtual joystick will also tap \"Aux1\" button when out of main "
"circle."
msgstr ""
@@ -2298,6 +2464,10 @@ msgstr ""
"X11/Sols Android) Ex. per a pantalles amb 4K."
#: src/settings_translation_file.cpp
+msgid "Adjust the detected display density, used for scaling UI elements."
+msgstr ""
+
+#: src/settings_translation_file.cpp
#, c-format
msgid ""
"Adjusts the density of the floatland layer.\n"
@@ -2414,6 +2584,16 @@ msgid "Autoscaling mode"
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Aux1 key"
+msgstr "Tecla botar"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Aux1 key for climbing/descending"
+msgstr "Utilitzar la tecla \"utilitzar\" per escalar/descendir"
+
+#: src/settings_translation_file.cpp
msgid "Backward key"
msgstr "Tecla de retrocés"
@@ -2460,10 +2640,6 @@ msgid "Biome noise"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Bits per pixel (aka color depth) in fullscreen mode."
-msgstr "Bits per píxel (profunditat de color) en el mode de pantalla completa."
-
-#: src/settings_translation_file.cpp
msgid "Block send optimize distance"
msgstr ""
@@ -2568,6 +2744,15 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Chat command time message threshold"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Chat commands"
+msgstr "Comands de xat"
+
+#: src/settings_translation_file.cpp
#, fuzzy
msgid "Chat font size"
msgstr "Mida del chunk"
@@ -2603,8 +2788,8 @@ msgid "Chat toggle key"
msgstr "Tecla alternativa per al xat"
#: src/settings_translation_file.cpp
-msgid "Chatcommands"
-msgstr "Comands de xat"
+msgid "Chat weblinks"
+msgstr ""
#: src/settings_translation_file.cpp
msgid "Chunk size"
@@ -2623,6 +2808,12 @@ msgid "Clean transparent textures"
msgstr "Netejar textures transparents"
#: src/settings_translation_file.cpp
+msgid ""
+"Clickable weblinks (middle-click or Ctrl+left-click) enabled in chat console "
+"output."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Client"
msgstr "Client"
@@ -2669,6 +2860,11 @@ msgid "Colored fog"
msgstr "Boira de color"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Colored shadows"
+msgstr "Boira de color"
+
+#: src/settings_translation_file.cpp
msgid ""
"Comma-separated list of flags to hide in the content repository.\n"
"\"nonfree\" can be used to hide packages which do not qualify as 'free "
@@ -2703,6 +2899,22 @@ msgid "Command key"
msgstr "Tecla comandament"
#: src/settings_translation_file.cpp
+msgid ""
+"Compression level to use when saving mapblocks to disk.\n"
+"-1 - use default compression level\n"
+"0 - least compression, fastest\n"
+"9 - best compression, slowest"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Compression level to use when sending mapblocks to the client.\n"
+"-1 - use default compression level\n"
+"0 - least compression, fastest\n"
+"9 - best compression, slowest"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Connect glass"
msgstr "Connectar vidre"
@@ -2801,7 +3013,7 @@ msgstr "Punt de mira Alpha"
#: src/settings_translation_file.cpp
msgid ""
"Crosshair alpha (opaqueness, between 0 and 255).\n"
-"Also controls the object crosshair color"
+"This also applies to the object crosshair."
msgstr ""
#: src/settings_translation_file.cpp
@@ -2882,11 +3094,10 @@ msgstr "Joc per defecte"
#: src/settings_translation_file.cpp
msgid ""
-"Default timeout for cURL, stated in milliseconds.\n"
-"Only has an effect if compiled with cURL."
+"Define shadow filtering quality.\n"
+"This simulates the soft shadows effect by applying a PCF or Poisson disk\n"
+"but also uses more resources."
msgstr ""
-"Temporització per defecte per a cURL, manifestat en mil·lisegons.\n"
-"Només té un efecte si és compilat amb cURL."
#: src/settings_translation_file.cpp
msgid "Defines areas where trees have apples."
@@ -3006,6 +3217,10 @@ msgid "Disallow empty passwords"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Display Density Scaling Factor"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Domain name of server, to be displayed in the serverlist."
msgstr ""
@@ -3051,6 +3266,19 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Enable Poisson disk filtering.\n"
+"On true uses Poisson disk to make \"soft shadows\". Otherwise uses PCF "
+"filtering."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable colored shadows.\n"
+"On true translucent nodes cast colored shadows. This is expensive."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Enable console window"
msgstr ""
@@ -3159,6 +3387,12 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Enables tradeoffs that reduce CPU load or increase rendering performance\n"
+"at the expense of minor visual glitches that do not impact game playability."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Engine profiling data print interval"
msgstr ""
@@ -3197,18 +3431,6 @@ msgid "Fallback font path"
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 ""
@@ -3227,7 +3449,7 @@ msgstr "Moviment ràpid"
#: src/settings_translation_file.cpp
#, fuzzy
msgid ""
-"Fast movement (via the \"special\" key).\n"
+"Fast movement (via the \"Aux1\" key).\n"
"This requires the \"fast\" privilege on the server."
msgstr ""
"Moviment ràpid (via utilitzar clau).\n"
@@ -3263,9 +3485,9 @@ 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."
+"which PNG optimizers usually discard, often resulting in dark or\n"
+"light edges to transparent textures. Apply a filter to clean that up\n"
+"at texture load time. This is automatically enabled if mipmapping is enabled."
msgstr ""
#: src/settings_translation_file.cpp
@@ -3358,15 +3580,15 @@ msgid "Font size"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Font size of the default font in point (pt)."
+msgid "Font size divisible by"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Font size of the fallback font in point (pt)."
+msgid "Font size of the default font where 1 unit = 1 pixel at 96 DPI"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Font size of the monospace font in point (pt)."
+msgid "Font size of the monospace font where 1 unit = 1 pixel at 96 DPI"
msgstr ""
#: src/settings_translation_file.cpp
@@ -3377,6 +3599,17 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"For pixel-style fonts that do not scale well, this ensures that font sizes "
+"used\n"
+"with this font will always be divisible by this value, in pixels. For "
+"instance,\n"
+"a pixel font 16 pixels tall should have this set to 16, so it will only ever "
+"be\n"
+"sized 16, 32, 48, etc., so a mod requesting a size of 25 will get 32."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Format of player chat messages. The following strings are valid "
"placeholders:\n"
"@name, @message, @timestamp (optional)"
@@ -3435,10 +3668,6 @@ msgid "Fraction of the visible distance at which fog starts to be rendered"
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)."
@@ -3463,10 +3692,6 @@ msgid "Full screen"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Full screen BPP"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Fullscreen mode."
msgstr ""
@@ -3490,7 +3715,7 @@ msgstr ""
msgid ""
"Global map generation attributes.\n"
"In Mapgen v6 the 'decorations' flag controls all decorations except trees\n"
-"and junglegrass, in all other mapgens this flag controls all decorations."
+"and jungle grass, in all other mapgens this flag controls all decorations."
msgstr ""
#: src/settings_translation_file.cpp
@@ -3562,7 +3787,8 @@ msgid "Heat noise"
msgstr "Soroll de cova #1"
#: src/settings_translation_file.cpp
-msgid "Height component of the initial window size."
+msgid ""
+"Height component of the initial window size. Ignored in fullscreen mode."
msgstr ""
#: src/settings_translation_file.cpp
@@ -3575,10 +3801,6 @@ msgid "Height select noise"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "High-precision FPU"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Hill steepness"
msgstr ""
@@ -3813,8 +4035,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"If disabled, \"special\" key is used to fly fast if both fly and fast mode "
-"are\n"
+"If disabled, \"Aux1\" key is used to fly fast if both fly and fast mode are\n"
"enabled."
msgstr ""
@@ -3836,8 +4057,8 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"If enabled, \"special\" key instead of \"sneak\" key is used for climbing "
-"down and\n"
+"If enabled, \"Aux1\" key instead of \"Sneak\" key is used for climbing down "
+"and\n"
"descending."
msgstr ""
@@ -3883,6 +4104,12 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"If the execution of a chat command takes longer than this specified time in\n"
+"seconds, add the time information to the chat command message"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"If the file size of debug.txt exceeds the number of megabytes specified in\n"
"this setting when it is opened, the file is moved to debug.txt.1,\n"
"deleting an older debug.txt.1 if it exists.\n"
@@ -3929,7 +4156,7 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Instrument chatcommands on registration."
+msgid "Instrument chat commands on registration."
msgstr ""
#: src/settings_translation_file.cpp
@@ -4014,7 +4241,7 @@ msgid "Joystick button repetition interval"
msgstr "Interval de repetició del click dret"
#: src/settings_translation_file.cpp
-msgid "Joystick deadzone"
+msgid "Joystick dead zone"
msgstr ""
#: src/settings_translation_file.cpp
@@ -4993,10 +5220,6 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Makes DirectX work with LuaJIT. Disable if it causes troubles."
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Makes all liquids opaque"
msgstr ""
@@ -5068,6 +5291,10 @@ msgid "Map save interval"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Map shadows update frames"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Mapblock limit"
msgstr ""
@@ -5185,6 +5412,10 @@ msgid "Maximum FPS when the window is not focused, or when the game is paused."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Maximum distance to render shadows."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Maximum forceloaded blocks"
msgstr ""
@@ -5290,7 +5521,15 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Maximum time in ms a file download (e.g. a mod download) may take."
+msgid ""
+"Maximum time a file download (e.g. a mod download) may take, stated in "
+"milliseconds."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum time an interactive request (e.g. server list fetch) may take, "
+"stated in milliseconds."
msgstr ""
#: src/settings_translation_file.cpp
@@ -5354,7 +5593,7 @@ msgid "Mod channels"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Modifies the size of the hudbar elements."
+msgid "Modifies the size of the HUD elements."
msgstr ""
#: src/settings_translation_file.cpp
@@ -5366,6 +5605,10 @@ msgid "Monospace font size"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Monospace font size divisible by"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Mountain height noise"
msgstr ""
@@ -5487,7 +5730,7 @@ 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"
+"This is a trade-off between SQLite transaction overhead and\n"
"memory consumption (4096=100MB, as a rule of thumb)."
msgstr ""
@@ -5506,21 +5749,18 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Opaqueness (alpha) of the shadow behind the fallback font, between 0 and 255."
-msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid ""
"Open the pause menu when the window's focus is lost. Does not pause if a "
"formspec is\n"
"open."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Optional override for chat weblink color."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid ""
-"Path of the fallback font.\n"
-"If “freetype†setting is enabled: Must be a TrueType font.\n"
-"If “freetype†setting is disabled: Must be a bitmap or XML vectors font.\n"
+"Path of the fallback font. Must be a TrueType font.\n"
"This font will be used for certain languages or if the default font is "
"unavailable."
msgstr ""
@@ -5543,17 +5783,13 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Path to the default font.\n"
-"If “freetype†setting is enabled: Must be a TrueType font.\n"
-"If “freetype†setting is disabled: Must be a bitmap or XML vectors font.\n"
+"Path to the default font. Must be a TrueType font.\n"
"The fallback font will be used if the font cannot be loaded."
msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Path to the monospace font.\n"
-"If “freetype†setting is enabled: Must be a TrueType font.\n"
-"If “freetype†setting is disabled: Must be a bitmap or XML vectors font.\n"
+"Path to the monospace font. Must be a TrueType font.\n"
"This font is used for e.g. the console and profiler screen."
msgstr ""
@@ -5611,6 +5847,11 @@ msgid "Player versus player"
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Poisson filtering"
+msgstr "Filtre bilineal"
+
+#: src/settings_translation_file.cpp
msgid ""
"Port to connect to (UDP).\n"
"Note that the port field in the main menu overrides this setting."
@@ -5655,9 +5896,9 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"Prometheus listener address.\n"
-"If minetest is compiled with ENABLE_PROMETHEUS option enabled,\n"
+"If Minetest is compiled with ENABLE_PROMETHEUS option enabled,\n"
"enable metrics listener for Prometheus on that address.\n"
-"Metrics can be fetch on http://127.0.0.1:30000/metrics"
+"Metrics can be fetched on http://127.0.0.1:30000/metrics"
msgstr ""
#: src/settings_translation_file.cpp
@@ -5970,6 +6211,32 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Set the shadow strength.\n"
+"Lower value means lighter shadows, higher value means darker shadows."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set the soft shadow radius size.\n"
+"Lower values mean sharper shadows, bigger values mean softer shadows.\n"
+"Minimum value: 1.0; maximum value: 10.0"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set the tilt of Sun/Moon orbit in degrees.\n"
+"Value of 0 means no tilt / vertical orbit.\n"
+"Minimum value: 0.0; maximum value: 60.0"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set to true to enable Shadow Mapping.\n"
+"Requires shaders to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Set to true to enable waving leaves.\n"
"Requires shaders to be enabled."
msgstr ""
@@ -5987,6 +6254,13 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Sets shadow texture quality to 32 bits.\n"
+"On false, 16 bits texture will be used.\n"
+"This can cause much more artifacts in the shadow."
+msgstr ""
+
+#: src/settings_translation_file.cpp
#, fuzzy
msgid "Shader path"
msgstr "Ombres"
@@ -6000,15 +6274,29 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Shadow filter quality"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Shadow map max distance in nodes to render shadows"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Shadow map texture in 32 bits"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Shadow map texture size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid ""
"Shadow offset (in pixels) of the default font. If 0, then shadow will not be "
"drawn."
msgstr ""
#: src/settings_translation_file.cpp
-msgid ""
-"Shadow offset (in pixels) of the fallback font. If 0, then shadow will not "
-"be drawn."
+msgid "Shadow strength"
msgstr ""
#: src/settings_translation_file.cpp
@@ -6030,7 +6318,7 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Show nametag backgrounds by default"
+msgid "Show name tag backgrounds by default"
msgstr ""
#: src/settings_translation_file.cpp
@@ -6055,6 +6343,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Sky Body Orbit Tilt"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Slice w"
msgstr ""
@@ -6113,18 +6405,13 @@ msgid "Sneaking speed, in nodes per second."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Sound"
-msgstr ""
-
-#: src/settings_translation_file.cpp
#, fuzzy
-msgid "Special key"
-msgstr "Tecla sigil"
+msgid "Soft shadow radius"
+msgstr "Radi del núvol"
#: src/settings_translation_file.cpp
-#, fuzzy
-msgid "Special key for climbing/descending"
-msgstr "Utilitzar la tecla \"utilitzar\" per escalar/descendir"
+msgid "Sound"
+msgstr ""
#: src/settings_translation_file.cpp
msgid ""
@@ -6143,6 +6430,14 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Spread a complete update of shadow map over given amount of frames.\n"
+"Higher values might make shadows laggy, lower values\n"
+"will consume more resources.\n"
+"Minimum value: 1; maximum value: 16"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Spread of light curve boost range.\n"
"Controls the width of the range to be boosted.\n"
"Standard deviation of the light curve boost Gaussian."
@@ -6250,6 +6545,13 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Texture size to render the shadow map on.\n"
+"This must be a power of two.\n"
+"Bigger numbers create better shadows but it is also more expensive."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Textures on a node may be aligned either to the node or to the world.\n"
"The former mode suits better things like machines, furniture, etc., while\n"
"the latter makes stairs and microblocks fit surroundings better.\n"
@@ -6263,7 +6565,7 @@ msgid "The URL for the content repository"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "The deadzone of the joystick"
+msgid "The dead zone of the joystick"
msgstr ""
#: src/settings_translation_file.cpp
@@ -6321,7 +6623,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"The rendering back-end for Irrlicht.\n"
+"The rendering back-end.\n"
"A restart is required after changing this.\n"
"Note: On Android, stick with OGLES1 if unsure! App may fail to start "
"otherwise.\n"
@@ -6332,7 +6634,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"The sensitivity of the joystick axes for moving the\n"
-"ingame view frustum around."
+"in-game view frustum around."
msgstr ""
#: src/settings_translation_file.cpp
@@ -6433,6 +6735,10 @@ msgid "Touch screen threshold"
msgstr "Llindar tàctil (px)"
#: src/settings_translation_file.cpp
+msgid "Tradeoffs for performance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Trees noise"
msgstr ""
@@ -6503,7 +6809,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Use mip mapping to scale textures. May slightly increase performance,\n"
+"Use mipmapping to scale textures. May slightly increase performance,\n"
"especially when using a high resolution texture pack.\n"
"Gamma correct downscaling is not supported."
msgstr ""
@@ -6617,7 +6923,7 @@ msgid "Viewing range"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Virtual joystick triggers aux button"
+msgid "Virtual joystick triggers Aux1 button"
msgstr ""
#: src/settings_translation_file.cpp
@@ -6692,6 +6998,10 @@ msgid "Waving plants"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Weblink color"
+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"
@@ -6712,23 +7022,15 @@ msgid ""
"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.\n"
+"memory. Powers of 2 are recommended. This setting is ONLY applied if\n"
+"bilinear/trilinear/anisotropic filtering is enabled.\n"
"This is also used as the base node texture size for world-aligned\n"
"texture autoscaling."
msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Whether FreeType fonts are used, requires FreeType support to be compiled "
-"in.\n"
-"If disabled, bitmap and XML vectors fonts are used instead."
-msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid ""
-"Whether nametag backgrounds should be shown by default.\n"
+"Whether name tag backgrounds should be shown by default.\n"
"Mods may still set a background."
msgstr ""
@@ -6770,7 +7072,7 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Width component of the initial window size."
+msgid "Width component of the initial window size. Ignored in fullscreen mode."
msgstr ""
#: src/settings_translation_file.cpp
@@ -6859,34 +7161,24 @@ msgid "Y-level of seabed."
msgstr ""
#: src/settings_translation_file.cpp
-msgid ""
-"ZLib compression level to use when saving mapblocks to disk.\n"
-"-1 - Zlib's default compression level\n"
-"0 - no compresson, fastest\n"
-"9 - best compression, slowest\n"
-"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)"
-msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid ""
-"ZLib compression level to use when sending mapblocks to the client.\n"
-"-1 - Zlib's default compression level\n"
-"0 - no compresson, fastest\n"
-"9 - best compression, slowest\n"
-"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)"
+msgid "cURL file download timeout"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "cURL file download timeout"
+msgid "cURL interactive timeout"
msgstr ""
#: src/settings_translation_file.cpp
msgid "cURL parallel limit"
msgstr ""
-#: src/settings_translation_file.cpp
-msgid "cURL timeout"
-msgstr ""
+#, fuzzy
+#~ msgid "- Creative Mode: "
+#~ msgstr "Mode Creatiu"
+
+#, fuzzy
+#~ msgid "- Damage: "
+#~ msgstr "Dany"
#~ msgid ""
#~ "0 = parallax occlusion with slope information (faster).\n"
@@ -6895,6 +7187,9 @@ msgstr ""
#~ "0 = oclusió de la paral.laxi amb informació d'inclinació (més ràpid).\n"
#~ "1 = mapa de relleu (més lent, més precís)."
+#~ msgid "Address / Port"
+#~ msgstr "Adreça / Port"
+
#, fuzzy
#~ msgid ""
#~ "Adjust the gamma encoding for the light tables. Higher numbers are "
@@ -6911,6 +7206,10 @@ msgstr ""
#~ msgid "Back"
#~ msgstr "Enrere"
+#~ msgid "Bits per pixel (aka color depth) in fullscreen mode."
+#~ msgstr ""
+#~ "Bits per píxel (profunditat de color) en el mode de pantalla completa."
+
#~ msgid "Bump Mapping"
#~ msgstr "Mapat de relleu"
@@ -6927,9 +7226,22 @@ msgstr ""
#~ msgstr ""
#~ "Controla l'amplada dels túnels, un valor més petit crea túnels més amples."
+#~ msgid "Credits"
+#~ msgstr "Crèdits"
+
#~ msgid "Crosshair color (R,G,B)."
#~ msgstr "Color del punt de mira (R, G, B)."
+#~ msgid "Damage enabled"
+#~ msgstr "Dany activat"
+
+#~ msgid ""
+#~ "Default timeout for cURL, stated in milliseconds.\n"
+#~ "Only has an effect if compiled with cURL."
+#~ msgstr ""
+#~ "Temporització per defecte per a cURL, manifestat en mil·lisegons.\n"
+#~ "Només té un efecte si és compilat amb cURL."
+
#, fuzzy
#~ msgid "Downloading and installing $1, please wait..."
#~ msgstr "Descarregant $1, si us plau esperi ..."
@@ -6941,6 +7253,10 @@ msgstr ""
#~ msgid "Generate Normal Maps"
#~ msgstr "Generar Mapes Normals"
+#, fuzzy
+#~ msgid "Install: file: \"$1\""
+#~ msgstr "Instal·lar mod: Arxiu: \"$1\""
+
#~ msgid "Main"
#~ msgstr "Principal"
@@ -6948,6 +7264,9 @@ msgstr ""
#~ msgid "Main menu style"
#~ msgstr "Menú principal"
+#~ msgid "Name / Password"
+#~ msgstr "Nom / Contrasenya"
+
#~ msgid "Name/Password"
#~ msgstr "Nom/Contrasenya"
@@ -6964,6 +7283,9 @@ msgstr ""
#~ msgid "Parallax occlusion scale"
#~ msgstr "Oclusió de paral·laxi"
+#~ msgid "PvP enabled"
+#~ msgstr "PvP activat"
+
#, fuzzy
#~ msgid "Reset singleplayer world"
#~ msgstr "Reiniciar el mon individual"
@@ -6972,11 +7294,25 @@ msgstr ""
#~ msgid "Select Package File:"
#~ msgstr "Selecciona el fitxer del mod:"
+#, fuzzy
+#~ msgid "Special key"
+#~ msgstr "Tecla sigil"
+
#~ msgid "Start Singleplayer"
#~ msgstr "Començar Un Jugador"
+#~ msgid "To enable shaders the OpenGL driver needs to be used."
+#~ msgstr "Per habilitar les ombres el controlador OpenGL ha ser utilitzat."
+
#~ msgid "Toggle Cinematic"
#~ msgstr "Activar Cinematogràfic"
#~ msgid "Yes"
#~ msgstr "Sí"
+
+#, fuzzy
+#~ msgid "You died."
+#~ msgstr "Has mort."
+
+#~ msgid "needs_fallback_font"
+#~ msgstr "no"
diff --git a/po/cs/minetest.po b/po/cs/minetest.po
index 1bb3a4336..811c39f06 100644
--- a/po/cs/minetest.po
+++ b/po/cs/minetest.po
@@ -2,9 +2,9 @@ msgid ""
msgstr ""
"Project-Id-Version: Czech (Minetest)\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-02-23 19:03+0100\n"
-"PO-Revision-Date: 2021-02-03 04:31+0000\n"
-"Last-Translator: Vít Skalický <vit.skalicky@email.cz>\n"
+"POT-Creation-Date: 2022-01-25 23:19+0100\n"
+"PO-Revision-Date: 2021-11-22 18:50+0000\n"
+"Last-Translator: Ondřej Pfrogner <ondrej.andre.pfrogner@gmail.com>\n"
"Language-Team: Czech <https://hosted.weblate.org/projects/minetest/minetest/"
"cs/>\n"
"Language: cs\n"
@@ -12,7 +12,43 @@ msgstr ""
"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 4.5-dev\n"
+"X-Generator: Weblate 4.10-dev\n"
+
+#: builtin/client/chatcommands.lua
+msgid "Clear the out chat queue"
+msgstr "Vyprázdnit frontu odchozího chatu"
+
+#: builtin/client/chatcommands.lua
+msgid "Empty command."
+msgstr "Prázdný příkaz."
+
+#: builtin/client/chatcommands.lua
+msgid "Exit to main menu"
+msgstr "Odejít do hlavní nabídky"
+
+#: builtin/client/chatcommands.lua
+msgid "Invalid command: "
+msgstr "Neplatný příkaz: "
+
+#: builtin/client/chatcommands.lua
+msgid "Issued command: "
+msgstr "Zadaný příkaz: "
+
+#: builtin/client/chatcommands.lua
+msgid "List online players"
+msgstr "Vypsat pÅ™ipojené hráÄe"
+
+#: builtin/client/chatcommands.lua
+msgid "Online players: "
+msgstr "PÅ™ipojení hráÄi: "
+
+#: builtin/client/chatcommands.lua
+msgid "The out chat queue is now empty."
+msgstr "Fronta odchozího chatu je nyní prázdná."
+
+#: builtin/client/chatcommands.lua
+msgid "This command is disabled by server."
+msgstr "Server zakázal tento příkaz."
#: builtin/client/death_formspec.lua src/client/game.cpp
msgid "Respawn"
@@ -22,9 +58,41 @@ msgstr "Oživit"
msgid "You died"
msgstr "Zemřel jsi"
+#: builtin/common/chatcommands.lua
+msgid "Available commands:"
+msgstr "Příkazy k dispozici:"
+
+#: builtin/common/chatcommands.lua
+msgid "Available commands: "
+msgstr "Příkazy k dispozici: "
+
+#: builtin/common/chatcommands.lua
+msgid "Command not available: "
+msgstr "Příkaz není k dispozici: "
+
+#: builtin/common/chatcommands.lua
+msgid "Get help for commands"
+msgstr "Získat nápovědu pro příkazy"
+
+#: builtin/common/chatcommands.lua
+msgid ""
+"Use '.help <cmd>' to get more information, or '.help all' to list everything."
+msgstr ""
+"Použij \".help <příkaz>\" pro obdržení více informací, nebo \".help all\" "
+"pro celý výpis."
+
+#: builtin/common/chatcommands.lua
+msgid "[all | <cmd>]"
+msgstr "[all | <příkaz>]"
+
#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp
msgid "OK"
-msgstr "OK"
+msgstr "Dobře"
+
+#: builtin/fstk/ui.lua
+#, fuzzy
+msgid "<none available>"
+msgstr "Příkaz není k dispozici: "
#: builtin/fstk/ui.lua
msgid "An error occurred in a Lua script:"
@@ -44,7 +112,7 @@ msgstr "Znovu se připojit"
#: builtin/fstk/ui.lua
msgid "The server has requested a reconnect:"
-msgstr "Server vyžaduje znovupřipojení se:"
+msgstr "Server vyžaduje opětovné připojení:"
#: builtin/mainmenu/common.lua
msgid "Protocol version mismatch. "
@@ -157,7 +225,7 @@ msgstr "\"$1\" již existuje. Chcete jej přepsat?"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "$1 and $2 dependencies will be installed."
-msgstr ""
+msgstr "Budou nainstalovány závislosti $1 a $2."
#: builtin/mainmenu/dlg_contentstore.lua
msgid "$1 by $2"
@@ -177,38 +245,36 @@ msgstr "$1 se stahuje..."
#: builtin/mainmenu/dlg_contentstore.lua
msgid "$1 required dependencies could not be found."
-msgstr ""
+msgstr "$1 požadovaných závislostí nebylo nalezeno."
#: builtin/mainmenu/dlg_contentstore.lua
msgid "$1 will be installed, and $2 dependencies will be skipped."
-msgstr ""
+msgstr "$1 závislostí bude nainstalováno a $2 bude vynecháno."
#: builtin/mainmenu/dlg_contentstore.lua
msgid "All packages"
msgstr "VÅ¡echny balíÄky"
#: builtin/mainmenu/dlg_contentstore.lua
-#, fuzzy
msgid "Already installed"
-msgstr "Klávesa je již používána"
+msgstr "Již nainstalováno"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Back to Main Menu"
msgstr "Zpět do hlavní nabídky"
#: builtin/mainmenu/dlg_contentstore.lua
-#, fuzzy
msgid "Base Game:"
-msgstr "Založit hru"
+msgstr "Základní hra:"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "ContentDB is not available when Minetest was compiled without cURL"
msgstr ""
+"ContentDB není přístupná pokud byl Minetest kompilován bez použití cURL"
#: builtin/mainmenu/dlg_contentstore.lua
-#, fuzzy
msgid "Downloading..."
-msgstr "Nahrávám..."
+msgstr "Stahuji..."
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Failed to download $1"
@@ -224,14 +290,18 @@ msgid "Install"
msgstr "Instalovat"
#: builtin/mainmenu/dlg_contentstore.lua
-#, fuzzy
msgid "Install $1"
-msgstr "Instalovat"
+msgstr "Instalovat $1"
#: builtin/mainmenu/dlg_contentstore.lua
-#, fuzzy
msgid "Install missing dependencies"
-msgstr "Volitelné závislosti:"
+msgstr "Instalovat chybějící závislosti"
+
+#: builtin/mainmenu/dlg_contentstore.lua
+#, fuzzy
+msgid "Install: Unsupported file type or broken archive"
+msgstr ""
+"Instalace rozšíření: poškozený archiv nebo nepodporovaný typ souboru \"$1\""
#: builtin/mainmenu/dlg_contentstore.lua
#: builtin/mainmenu/dlg_settings_advanced.lua
@@ -247,25 +317,24 @@ msgid "No results"
msgstr "Žádné výsledky"
#: builtin/mainmenu/dlg_contentstore.lua
-#, fuzzy
msgid "No updates"
-msgstr "Aktualizovat"
+msgstr "Žádné aktualizace"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Not found"
-msgstr ""
+msgstr "Nenalezeno"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Overwrite"
-msgstr ""
+msgstr "Přepsat"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Please check that the base game is correct."
-msgstr ""
+msgstr "Ověř prosím, zda je základní hra v pořádku."
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Queued"
-msgstr ""
+msgstr "Ve frontÄ›"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Texture packs"
@@ -281,57 +350,51 @@ msgstr "Aktualizovat"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Update All [$1]"
-msgstr ""
+msgstr "Aktualizovat vše [$1]"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "View more information in a web browser"
-msgstr ""
+msgstr "Zobrazit více informací v prohlížeÄi"
#: builtin/mainmenu/dlg_create_world.lua
msgid "A world named \"$1\" already exists"
-msgstr "Svět s názvem \"$1\" už existuje"
+msgstr "Svět s názvem \"$1\" již existuje"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Additional terrain"
-msgstr ""
+msgstr "Další terén"
#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
msgid "Altitude chill"
-msgstr "Výškové ochlazení"
+msgstr "Teplota (výšková)"
#: builtin/mainmenu/dlg_create_world.lua
-#, fuzzy
msgid "Altitude dry"
-msgstr "Výškové ochlazení"
+msgstr "Vlhkost (výšková)"
#: builtin/mainmenu/dlg_create_world.lua
-#, fuzzy
msgid "Biome blending"
-msgstr "Šum biomů"
+msgstr "Prolínání biomů"
#: builtin/mainmenu/dlg_create_world.lua
-#, fuzzy
msgid "Biomes"
-msgstr "Šum biomů"
+msgstr "Biomy"
#: builtin/mainmenu/dlg_create_world.lua
-#, fuzzy
msgid "Caverns"
-msgstr "Šum jeskynních dutin"
+msgstr "Jeskyně (velké)"
#: builtin/mainmenu/dlg_create_world.lua
-#, fuzzy
msgid "Caves"
-msgstr "Oktávy"
+msgstr "Jeskyně (malé)"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Create"
msgstr "Vytvořit"
#: builtin/mainmenu/dlg_create_world.lua
-#, fuzzy
msgid "Decorations"
-msgstr "Iterace"
+msgstr "Dekorace"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Download a game, such as Minetest Game, from minetest.net"
@@ -342,23 +405,20 @@ msgid "Download one from minetest.net"
msgstr "Stáhněte si jednu z minetest.net"
#: builtin/mainmenu/dlg_create_world.lua
-#, fuzzy
msgid "Dungeons"
-msgstr "Šum hřbetů"
+msgstr "Žaláře"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Flat terrain"
-msgstr ""
+msgstr "Plochý terén"
#: builtin/mainmenu/dlg_create_world.lua
-#, fuzzy
msgid "Floating landmasses in the sky"
-msgstr "Koncentrace hor na létajících ostrovech"
+msgstr "Krajina vznášející se na nebi"
#: builtin/mainmenu/dlg_create_world.lua
-#, fuzzy
msgid "Floatlands (experimental)"
-msgstr "Výška létajících ostrovů"
+msgstr "Létající ostrovy (experimentální)"
#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
msgid "Game"
@@ -366,28 +426,27 @@ msgstr "Hra"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Generate non-fractal terrain: Oceans and underground"
-msgstr ""
+msgstr "Generovat terén bez použití fraktálů: Oceány a podzemí"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Hills"
-msgstr ""
+msgstr "Kopce"
#: builtin/mainmenu/dlg_create_world.lua
-#, fuzzy
msgid "Humid rivers"
-msgstr "OvladaÄ grafiky"
+msgstr "Vodnost řek"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Increases humidity around rivers"
-msgstr ""
+msgstr "Zvyšuje vlhkost v okolí řek"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Lakes"
-msgstr ""
+msgstr "Jezera"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Low humidity and high heat causes shallow or dry rivers"
-msgstr ""
+msgstr "Nízká vlhkost a vysoké teploty mají za následek mÄ›lké Äi vyschlé Å™eky"
#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
msgid "Mapgen"
@@ -395,24 +454,23 @@ msgstr "Generátor mapy"
#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
msgid "Mapgen flags"
-msgstr "Nastavení generátoru mapy"
+msgstr "Nastavení pro Generátor mapy"
#: builtin/mainmenu/dlg_create_world.lua
-#, fuzzy
msgid "Mapgen-specific flags"
-msgstr "Mapgen údolí"
+msgstr "Nastavení pro Generátor mapy"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Mountains"
-msgstr ""
+msgstr "Hory"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Mud flow"
-msgstr ""
+msgstr "Eroze"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Network of tunnels and caves"
-msgstr ""
+msgstr "Jeskynní systém"
#: builtin/mainmenu/dlg_create_world.lua
msgid "No game selected"
@@ -420,20 +478,19 @@ msgstr "Není vybrána žádná hra"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Reduces heat with altitude"
-msgstr ""
+msgstr "Snižuje teplotu a nadmořskou výšku"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Reduces humidity with altitude"
-msgstr ""
+msgstr "Snižuje vlhkost s rostoucí nadmořskou výškou"
#: builtin/mainmenu/dlg_create_world.lua
-#, fuzzy
msgid "Rivers"
-msgstr "Velikost řeky"
+msgstr "Řeky"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Sea level rivers"
-msgstr ""
+msgstr "Řeky v úrovni mořské hladiny"
#: builtin/mainmenu/dlg_create_world.lua
#: builtin/mainmenu/dlg_settings_advanced.lua
@@ -442,51 +499,51 @@ msgstr "Seedové Äíslo"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Smooth transition between biomes"
-msgstr ""
+msgstr "Pozvolný přechod mezi biomy"
#: builtin/mainmenu/dlg_create_world.lua
msgid ""
"Structures appearing on the terrain (no effect on trees and jungle grass "
"created by v6)"
msgstr ""
+"Povrchové struktury (nemá vliv na stromy a tropickou trávu vytvořené ve v6 a "
+"později)"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Structures appearing on the terrain, typically trees and plants"
-msgstr ""
+msgstr "Povrchové struktury, především stromy a rostliny"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Temperate, Desert"
-msgstr ""
+msgstr "Mírné, Poušť"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Temperate, Desert, Jungle"
-msgstr ""
+msgstr "Mírné, Poušť, Džungle"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Temperate, Desert, Jungle, Tundra, Taiga"
-msgstr ""
+msgstr "Mírné, Poušť, Džungle, Tundra, Tajga"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Terrain surface erosion"
-msgstr ""
+msgstr "Povrchová eroze"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Trees and jungle grass"
-msgstr ""
+msgstr "Stromy a tropická tráva"
#: builtin/mainmenu/dlg_create_world.lua
-#, fuzzy
msgid "Vary river depth"
-msgstr "Hloubka řeky"
+msgstr "Proměnná hloubka řek"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Very large caverns deep in the underground"
-msgstr ""
+msgstr "Veliké jeskyně hluboko pod zemí"
#: builtin/mainmenu/dlg_create_world.lua
-#, fuzzy
msgid "Warning: The Development Test is meant for developers."
-msgstr "Varování: \"Minimal development test\" je zamýšlen pouze pro vývojáře."
+msgstr "Varování: Development Test je urÄen pro vývojáře."
#: builtin/mainmenu/dlg_create_world.lua
msgid "World name"
@@ -550,7 +607,7 @@ msgstr "< Zpět do Nastavení"
msgid "Browse"
msgstr "Procházet"
-#: builtin/mainmenu/dlg_settings_advanced.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_settings.lua
msgid "Disabled"
msgstr "Vypnuto"
@@ -575,7 +632,8 @@ msgid "Offset"
msgstr "Odstup"
#: builtin/mainmenu/dlg_settings_advanced.lua
-msgid "Persistance"
+#, fuzzy
+msgid "Persistence"
msgstr "Urputnost"
#: builtin/mainmenu/dlg_settings_advanced.lua
@@ -594,7 +652,7 @@ msgstr "Obnovit výchozí"
msgid "Scale"
msgstr "Přiblížení"
-#: builtin/mainmenu/dlg_settings_advanced.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_online.lua
msgid "Search"
msgstr "Hledat"
@@ -688,15 +746,6 @@ msgstr ""
"balíÄek $1"
#: builtin/mainmenu/pkgmgr.lua
-msgid "Install: Unsupported file type \"$1\" or broken archive"
-msgstr ""
-"Instalace rozšíření: poškozený archiv nebo nepodporovaný typ souboru \"$1\""
-
-#: builtin/mainmenu/pkgmgr.lua
-msgid "Install: file: \"$1\""
-msgstr "Instalace: soubor: \"$1\""
-
-#: builtin/mainmenu/pkgmgr.lua
msgid "Unable to find a valid mod or modpack"
msgstr "Platné rozšíření nebylo nalezeno"
@@ -721,9 +770,8 @@ msgid "Loading..."
msgstr "Nahrávám..."
#: builtin/mainmenu/serverlistmgr.lua
-#, fuzzy
msgid "Public server list is disabled"
-msgstr "Uživatelské skripty nejsou povoleny"
+msgstr "Seznam veřejných serverů je vypnut"
#: builtin/mainmenu/serverlistmgr.lua
msgid "Try reenabling public serverlist and check your internet connection."
@@ -731,6 +779,42 @@ msgstr ""
"Zkuste znovu povolit seznam veřejných serverů a zkontrolujte své internetové "
"připojení."
+#: builtin/mainmenu/tab_about.lua
+msgid "About"
+msgstr "O nás"
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Active Contributors"
+msgstr "Aktivní přispěvatelé"
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Active renderer:"
+msgstr "Aktivní renderer:"
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Core Developers"
+msgstr "Hlavní vývojáři"
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Open User Data Directory"
+msgstr "Otevřít uživatelský adresář"
+
+#: builtin/mainmenu/tab_about.lua
+msgid ""
+"Opens the directory that contains user-provided worlds, games, mods,\n"
+"and texture packs in a file manager / explorer."
+msgstr ""
+"Ve správci souborů otevře adresář obsahující uživatelské světy, hry,\n"
+"mody a balíÄky textur."
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Previous Contributors"
+msgstr "Bývalí přispěvatelé"
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Previous Core Developers"
+msgstr "Bývalí klíÄoví vývojáři"
+
#: builtin/mainmenu/tab_content.lua
msgid "Browse online content"
msgstr "Procházet online obsah"
@@ -771,37 +855,6 @@ msgstr "Odinstalovat balíÄek"
msgid "Use Texture Pack"
msgstr "Použít Rozšíření Textur"
-#: builtin/mainmenu/tab_credits.lua
-msgid "Active Contributors"
-msgstr "Aktivní přispěvatelé"
-
-#: builtin/mainmenu/tab_credits.lua
-msgid "Core Developers"
-msgstr "Hlavní vývojáři"
-
-#: builtin/mainmenu/tab_credits.lua
-msgid "Credits"
-msgstr "Autoři"
-
-#: builtin/mainmenu/tab_credits.lua
-#, fuzzy
-msgid "Open User Data Directory"
-msgstr "Vyberte adresář"
-
-#: builtin/mainmenu/tab_credits.lua
-msgid ""
-"Opens the directory that contains user-provided worlds, games, mods,\n"
-"and texture packs in a file manager / explorer."
-msgstr ""
-
-#: builtin/mainmenu/tab_credits.lua
-msgid "Previous Contributors"
-msgstr "Bývalí přispěvatelé"
-
-#: builtin/mainmenu/tab_credits.lua
-msgid "Previous Core Developers"
-msgstr "Bývalí klíÄoví vývojáři"
-
#: builtin/mainmenu/tab_local.lua
msgid "Announce Server"
msgstr "Uveřejnit server"
@@ -828,11 +881,11 @@ msgstr "Založit server"
#: builtin/mainmenu/tab_local.lua
msgid "Install games from ContentDB"
-msgstr ""
+msgstr "Instalovat hry z ContentDB"
-#: builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
msgid "Name"
-msgstr ""
+msgstr "Jméno"
#: builtin/mainmenu/tab_local.lua
msgid "New"
@@ -842,23 +895,21 @@ msgstr "Nový"
msgid "No world created or selected!"
msgstr "Žádný svět nebyl vytvořen ani vybrán!"
-#: builtin/mainmenu/tab_local.lua
-#, fuzzy
+#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
msgid "Password"
-msgstr "Nové heslo"
+msgstr "Heslo"
#: builtin/mainmenu/tab_local.lua
msgid "Play Game"
msgstr "Spustit hru"
-#: builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
msgid "Port"
msgstr "Port"
#: builtin/mainmenu/tab_local.lua
-#, fuzzy
msgid "Select Mods"
-msgstr "Vyberte svět:"
+msgstr "Vybrat mody"
#: builtin/mainmenu/tab_local.lua
msgid "Select World:"
@@ -873,8 +924,12 @@ msgid "Start Game"
msgstr "Spustit hru"
#: builtin/mainmenu/tab_online.lua
-msgid "Address / Port"
-msgstr "Adresa / Port"
+msgid "Address"
+msgstr "Adresa"
+
+#: builtin/mainmenu/tab_online.lua src/client/keycode.cpp
+msgid "Clear"
+msgstr "VyÄistit"
#: builtin/mainmenu/tab_online.lua
msgid "Connect"
@@ -884,34 +939,42 @@ msgstr "Připojit"
msgid "Creative mode"
msgstr "Kreativní mód"
+#. ~ PvP = Player versus Player
#: builtin/mainmenu/tab_online.lua
-msgid "Damage enabled"
-msgstr "Zranění povoleno"
+msgid "Damage / PvP"
+msgstr "Zranění / PvP"
#: builtin/mainmenu/tab_online.lua
msgid "Del. Favorite"
msgstr "Smazat oblíbené"
#: builtin/mainmenu/tab_online.lua
-msgid "Favorite"
+msgid "Favorites"
msgstr "Oblíbené"
#: builtin/mainmenu/tab_online.lua
-msgid "Join Game"
-msgstr "Připojit se ke hře"
+msgid "Incompatible Servers"
+msgstr "Nekompatibilní server"
#: builtin/mainmenu/tab_online.lua
-msgid "Name / Password"
-msgstr "Jméno / Heslo"
+msgid "Join Game"
+msgstr "Připojit se ke hře"
#: builtin/mainmenu/tab_online.lua
msgid "Ping"
msgstr "Ping"
-#. ~ PvP = Player versus Player
#: builtin/mainmenu/tab_online.lua
-msgid "PvP enabled"
-msgstr "PvP (hrÃ¡Ä proti hráÄi) povoleno"
+msgid "Public Servers"
+msgstr "Veřejné servery"
+
+#: builtin/mainmenu/tab_online.lua
+msgid "Refresh"
+msgstr "Obnovit"
+
+#: builtin/mainmenu/tab_online.lua
+msgid "Server Description"
+msgstr "Popis serveru"
#: builtin/mainmenu/tab_settings.lua
msgid "2x"
@@ -953,13 +1016,33 @@ msgstr "Změnit klávesy"
msgid "Connected Glass"
msgstr "Propojené sklo"
+#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
+msgid "Dynamic shadows"
+msgstr "Dynamické stíny"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Dynamic shadows: "
+msgstr "Dynamické stíny: "
+
#: builtin/mainmenu/tab_settings.lua
msgid "Fancy Leaves"
msgstr "Vícevrstevné listí"
#: builtin/mainmenu/tab_settings.lua
+msgid "High"
+msgstr "Vysoké"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Low"
+msgstr "Nízké"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Medium"
+msgstr "Střední"
+
+#: builtin/mainmenu/tab_settings.lua
msgid "Mipmap"
-msgstr "Mipmapy zapnuté"
+msgstr "Mipmapy"
#: builtin/mainmenu/tab_settings.lua
msgid "Mipmap + Aniso. Filter"
@@ -1010,9 +1093,8 @@ msgid "Shaders"
msgstr "Shadery"
#: builtin/mainmenu/tab_settings.lua
-#, fuzzy
msgid "Shaders (experimental)"
-msgstr "Výška létajících ostrovů"
+msgstr "Shader (experimentální)"
#: builtin/mainmenu/tab_settings.lua
msgid "Shaders (unavailable)"
@@ -1030,10 +1112,6 @@ msgstr "Plynulé osvětlení"
msgid "Texturing:"
msgstr "Texturování:"
-#: builtin/mainmenu/tab_settings.lua
-msgid "To enable shaders the OpenGL driver needs to be used."
-msgstr "Pro zapnutí shaderů musíte používat OpenGL ovladaÄ."
-
#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
msgid "Tone Mapping"
msgstr "Tone mapping"
@@ -1047,6 +1125,14 @@ msgid "Trilinear Filter"
msgstr "Trilineární filtr"
#: builtin/mainmenu/tab_settings.lua
+msgid "Ultra High"
+msgstr "Velmi vysoké"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Very Low"
+msgstr "Vylmi nízké"
+
+#: builtin/mainmenu/tab_settings.lua
msgid "Waving Leaves"
msgstr "Vlnění listů"
@@ -1058,7 +1144,7 @@ msgstr "Vlnění Kapalin"
msgid "Waving Plants"
msgstr "Vlnění rostlin"
-#: src/client/client.cpp
+#: src/client/client.cpp src/client/game.cpp
msgid "Connection timed out."
msgstr "VyprÅ¡el Äasový limit pÅ™ipojení."
@@ -1087,7 +1173,8 @@ msgid "Connection error (timed out?)"
msgstr "Chyba spojení (vyprÅ¡el Äas?)"
#: src/client/clientlauncher.cpp
-msgid "Could not find or load game \""
+#, fuzzy
+msgid "Could not find or load game: "
msgstr "Hru nebylo možné nahrát nebo najít \""
#: src/client/clientlauncher.cpp
@@ -1119,18 +1206,6 @@ msgstr "Soubor s heslem nebylo možné otevřít: "
msgid "Provided world path doesn't exist: "
msgstr "Uvedená cesta ke světu neexistuje: "
-#. ~ DO NOT TRANSLATE THIS LITERALLY!
-#. This is a special string. Put either "no" or "yes"
-#. into the translation field (literally).
-#. Choose "yes" if the language requires use of the fallback
-#. font, "no" otherwise.
-#. The fallback font is (normally) required for languages with
-#. non-Latin script, like Chinese.
-#. When in doubt, test your translation.
-#: src/client/fontengine.cpp
-msgid "needs_fallback_font"
-msgstr "no"
-
#: src/client/game.cpp
msgid ""
"\n"
@@ -1144,14 +1219,6 @@ msgid "- Address: "
msgstr "- Adresa: "
#: src/client/game.cpp
-msgid "- Creative Mode: "
-msgstr "- Kreativní mód: "
-
-#: src/client/game.cpp
-msgid "- Damage: "
-msgstr "- Zranění: "
-
-#: src/client/game.cpp
msgid "- Mode: "
msgstr "- Mód: "
@@ -1173,6 +1240,16 @@ msgid "- Server Name: "
msgstr "- Název serveru: "
#: src/client/game.cpp
+#, fuzzy
+msgid "A serialization error occurred:"
+msgstr "Nastala chyba:"
+
+#: src/client/game.cpp
+#, c-format
+msgid "Access denied. Reason: %s"
+msgstr ""
+
+#: src/client/game.cpp
msgid "Automatic forward disabled"
msgstr "Automatický posun vpřed zakázán"
@@ -1181,6 +1258,23 @@ msgid "Automatic forward enabled"
msgstr "Automatický posun vpřed povolen"
#: src/client/game.cpp
+#, fuzzy
+msgid "Block bounds hidden"
+msgstr "OhraniÄení bloku"
+
+#: src/client/game.cpp
+msgid "Block bounds shown for all blocks"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Block bounds shown for current block"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Block bounds shown for nearby blocks"
+msgstr ""
+
+#: src/client/game.cpp
msgid "Camera update disabled"
msgstr "Aktualizace kamery (pohledu) zakázána"
@@ -1189,6 +1283,10 @@ msgid "Camera update enabled"
msgstr "Aktualizace kamery (pohledu) povolena"
#: src/client/game.cpp
+msgid "Can't show block bounds (need 'basic_debug' privilege)"
+msgstr ""
+
+#: src/client/game.cpp
msgid "Change Password"
msgstr "Změnit heslo"
@@ -1201,6 +1299,11 @@ msgid "Cinematic mode enabled"
msgstr "Filmový režim povolen"
#: src/client/game.cpp
+#, fuzzy
+msgid "Client disconnected"
+msgstr "Lokální mody"
+
+#: src/client/game.cpp
msgid "Client side scripting is disabled"
msgstr "Uživatelské skripty nejsou povoleny"
@@ -1209,11 +1312,15 @@ msgid "Connecting to server..."
msgstr "Připojuji se k serveru..."
#: src/client/game.cpp
+msgid "Connection failed for unknown reason"
+msgstr ""
+
+#: src/client/game.cpp
msgid "Continue"
msgstr "PokraÄovat"
#: src/client/game.cpp
-#, fuzzy, c-format
+#, c-format
msgid ""
"Controls:\n"
"- %s: move forwards\n"
@@ -1236,16 +1343,21 @@ msgstr ""
"- %s: pohyb doleva\n"
"- %s: pohyb doprava\n"
"- %s: skok/výstup\n"
+"- %s: těžit/uhodit\n"
+"- %s: umístit/použít\n"
"- %s: plížení/sestup\n"
-"- %s: zahození věci\n"
+"- %s: zahození předmětu\n"
"- %s: inventář\n"
"- MyÅ¡: otáÄení/rozhlížení\n"
-"- Levé tl. myši: těžit/uhodit\n"
-"- Pravé tl. myši: položit/použít\n"
-"- KoleÄko myÅ¡i: výbÄ›r pÅ™ihrádky\n"
+"- KoleÄko myÅ¡i: výbÄ›r pÅ™edmÄ›tu\n"
"- %s: chat\n"
#: src/client/game.cpp
+#, c-format
+msgid "Couldn't resolve address: %s"
+msgstr ""
+
+#: src/client/game.cpp
msgid "Creating client..."
msgstr "Vytvářím klienta..."
@@ -1374,6 +1486,10 @@ msgid "Minimap currently disabled by game or mod"
msgstr "Minimapa je aktuálně zakázána"
#: src/client/game.cpp
+msgid "Multiplayer"
+msgstr "Multiplayer"
+
+#: src/client/game.cpp
msgid "Noclip mode disabled"
msgstr "Režim bez ořezu zakázán"
@@ -1423,7 +1539,7 @@ msgstr "Vypínání..."
#: src/client/game.cpp
msgid "Singleplayer"
-msgstr "Místní hra"
+msgstr "Singleplayer"
#: src/client/game.cpp
msgid "Sound Volume"
@@ -1435,11 +1551,11 @@ msgstr "Zvuk vypnut"
#: src/client/game.cpp
msgid "Sound system is disabled"
-msgstr ""
+msgstr "Zvukový systém je vypnutý"
#: src/client/game.cpp
msgid "Sound system is not supported on this build"
-msgstr ""
+msgstr "Zvukový systém není v této verzi podporovaný"
#: src/client/game.cpp
msgid "Sound unmuted"
@@ -1447,6 +1563,21 @@ msgstr "Zvuk zapnut"
#: src/client/game.cpp
#, c-format
+msgid "The server is probably running a different version of %s."
+msgstr ""
+
+#: src/client/game.cpp
+#, c-format
+msgid "Unable to connect to %s because IPv6 is disabled"
+msgstr ""
+
+#: src/client/game.cpp
+#, c-format
+msgid "Unable to listen on %s because IPv6 is disabled"
+msgstr ""
+
+#: src/client/game.cpp
+#, c-format
msgid "Viewing range changed to %d"
msgstr "Omezení dohlédnutí upraveno na %d"
@@ -1515,10 +1646,6 @@ msgid "Caps Lock"
msgstr "Caps Lock"
#: src/client/keycode.cpp
-msgid "Clear"
-msgstr "VyÄistit"
-
-#: src/client/keycode.cpp
msgid "Control"
msgstr "Control"
@@ -1770,19 +1897,27 @@ msgid "Minimap hidden"
msgstr "Minimapa je skryta"
#: src/client/minimap.cpp
-#, fuzzy, c-format
+#, c-format
msgid "Minimap in radar mode, Zoom x%d"
-msgstr "Minimapa v režimu radar, Přiblížení x1"
+msgstr "Minimapa v režimu Radar, Přiblížení x%d"
#: src/client/minimap.cpp
-#, fuzzy, c-format
+#, c-format
msgid "Minimap in surface mode, Zoom x%d"
-msgstr "Minimapa v režimu povrch, Přiblížení x1"
+msgstr "Minimapa v režimu Povrch, Přiblížení x%d"
#: src/client/minimap.cpp
-#, fuzzy
msgid "Minimap in texture mode"
-msgstr "Minimální velikost textury k filtrování"
+msgstr "Minimapa v režimu Textura"
+
+#: src/gui/guiChatConsole.cpp
+#, fuzzy
+msgid "Failed to open webpage"
+msgstr "Selhalo stažení $1"
+
+#: src/gui/guiChatConsole.cpp
+msgid "Opening webpage"
+msgstr ""
#: src/gui/guiConfirmRegistration.cpp src/gui/guiPasswordChange.cpp
msgid "Passwords do not match!"
@@ -1812,8 +1947,8 @@ msgid "Proceed"
msgstr "PokraÄovat"
#: src/gui/guiKeyChangeMenu.cpp
-msgid "\"Special\" = climb down"
-msgstr "„Speciální“ = sestoupit dolů"
+msgid "\"Aux1\" = climb down"
+msgstr "\"Aux1\" = sestoupit"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Autoforward"
@@ -1824,10 +1959,18 @@ msgid "Automatic jumping"
msgstr "Automaticky skákat"
#: src/gui/guiKeyChangeMenu.cpp
+msgid "Aux1"
+msgstr "Aux1"
+
+#: src/gui/guiKeyChangeMenu.cpp
msgid "Backward"
msgstr "Vzad"
#: src/gui/guiKeyChangeMenu.cpp
+msgid "Block bounds"
+msgstr "OhraniÄení bloku"
+
+#: src/gui/guiKeyChangeMenu.cpp
msgid "Change camera"
msgstr "Změnit nastavení kamery"
@@ -1918,10 +2061,6 @@ msgid "Sneak"
msgstr "Plížit se"
#: src/gui/guiKeyChangeMenu.cpp
-msgid "Special"
-msgstr "Speciální"
-
-#: src/gui/guiKeyChangeMenu.cpp
msgid "Toggle HUD"
msgstr "Zapnout/Vypnout ovládací prvky"
@@ -1982,7 +2121,8 @@ msgid "Muted"
msgstr "Ztlumeno"
#: src/gui/guiVolumeChange.cpp
-msgid "Sound Volume: "
+#, fuzzy, c-format
+msgid "Sound Volume: %d%%"
msgstr "Hlasitost: "
#. ~ Imperative, as in "Enter/type in text".
@@ -2008,12 +2148,12 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"(Android) Use virtual joystick to trigger \"aux\" button.\n"
-"If enabled, virtual joystick will also tap \"aux\" button when out of main "
+"(Android) Use virtual joystick to trigger \"Aux1\" button.\n"
+"If enabled, virtual joystick will also tap \"Aux1\" button when out of main "
"circle."
msgstr ""
-"(Android) Použít virtuální joystick pro stisknutí tlaÄítka 'aux'.\n"
-"Pokud je povoleno, virtuální joystick automaticky stiskne tlaÄítko 'aux' "
+"(Android) Použít virtuální joystick pro stisk tlaÄítka \"Aux1\".\n"
+"Pokud je povoleno, virtuální joystick automaticky stiskne tlaÄítko \"Aux1\" "
"pokud je mimo hlavní kruh."
#: src/settings_translation_file.cpp
@@ -2091,9 +2231,8 @@ msgid "3D mode"
msgstr "Režim 3D zobrazení"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "3D mode parallax strength"
-msgstr "Síla parallax occlusion"
+msgstr "Intezita Parallax ve 3D modu"
#: src/settings_translation_file.cpp
msgid "3D noise defining giant caverns."
@@ -2114,6 +2253,11 @@ msgid ""
"to be adjusted, as floatland tapering functions best when this noise has\n"
"a value range of approximately -2.0 to 2.0."
msgstr ""
+"3D šum definující strukturu létajících ostrovů.\n"
+"Pokud je odlišný od výchozího, může být nutné upravit\n"
+"\"měřítko\" šumu (výchozí 0.7), jelikož zužování (obrácené hory)\n"
+"létajících ostrovů funguje nejlépe pokud je šum v rozmezí přibližně -2.0 až "
+"2.0."
#: src/settings_translation_file.cpp
msgid "3D noise defining structure of river canyon walls."
@@ -2129,7 +2273,7 @@ msgstr "3D šum definující horské převisy, atp. Typicky malé odchylky."
#: src/settings_translation_file.cpp
msgid "3D noise that determines number of dungeons per mapchunk."
-msgstr "3D Å¡um, který definuje poÄet žalářů na kusu mapy."
+msgstr "3D Å¡um definující poÄet žalářů na kusu mapy."
#: src/settings_translation_file.cpp
msgid ""
@@ -2178,12 +2322,11 @@ msgstr "Interval Aktivní Blokové Modifikace (ABM)"
#: src/settings_translation_file.cpp
msgid "ABM time budget"
-msgstr ""
+msgstr "ABM použitelný Äas"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Absolute limit of queued blocks to emerge"
-msgstr "Maximální poÄet emerge front"
+msgstr "Maximální poÄet pÅ™ipravených bloků ve frontÄ›"
#: src/settings_translation_file.cpp
msgid "Acceleration in air"
@@ -2232,6 +2375,10 @@ msgstr ""
"například s 4k obrazovkami."
#: src/settings_translation_file.cpp
+msgid "Adjust the detected display density, used for scaling UI elements."
+msgstr ""
+
+#: src/settings_translation_file.cpp
#, c-format
msgid ""
"Adjusts the density of the floatland layer.\n"
@@ -2240,6 +2387,11 @@ msgid ""
"Value = 2.0 (can be higher depending on 'mgv7_np_floatland', always test\n"
"to be sure) creates a solid floatland layer."
msgstr ""
+"Upravit hustotu roviny létajících ostrovů.\n"
+"Zvýšením hodnoty se zvýší hustota. Hodnota může být kladná i záporná.\n"
+"Hodnota = 0.0: 50% světa tvoří létajících ostrovy.\n"
+"Hodnota = 2.0 (může být i vyšší v závislosti na “mgv7_np_floatland“,\n"
+"nutno vždy otestovat) vytvoří souvislou vrstvu létajících ostrovů."
#: src/settings_translation_file.cpp
msgid "Advanced"
@@ -2253,6 +2405,11 @@ msgid ""
"This only has significant effect on daylight and artificial\n"
"light, it has very little effect on natural night light."
msgstr ""
+"Změní křivku světla použitím \"gamma korekce\".\n"
+"Vysoké hodnoty zesvětlí málo a středně osvětlené prostory.\n"
+"Hodnota \"1.0\" nastaví výchozí křivku.\n"
+"Tato úprava slouží především pro úpravu denního\n"
+"a umÄ›lého osvÄ›tlení a má pouze malý dopad na noÄní osvÄ›tlení."
#: src/settings_translation_file.cpp
msgid "Always fly and fast"
@@ -2279,9 +2436,8 @@ msgid "Announce server"
msgstr "Zveřejnit server"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Announce to this serverlist."
-msgstr "Zveřejnit server"
+msgstr "Oznámit tomuto seznamu serverů."
#: src/settings_translation_file.cpp
msgid "Append item name"
@@ -2312,7 +2468,6 @@ msgid "Ask to reconnect after crash"
msgstr "Zeptat se na znovupřipojení po havárii"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"At this distance the server will aggressively optimize which blocks are sent "
"to\n"
@@ -2326,29 +2481,26 @@ msgid ""
"optimization.\n"
"Stated in mapblocks (16 nodes)."
msgstr ""
-"V této vzdálenosti bude server agresivně optimalizovat, které bloky pošle "
-"klientům.\n"
-"Malé hodnoty mohou mírně zvýšit rychlost, mohou však také způsobit viditelné "
-"nedostatky ve vykreslování.\n"
-"(nÄ›které bloky, zvláštÄ› pod vodou, v jeskyních a obÄas i na zemi, nebudou "
-"vykresleny)\n"
-"Nastavení této hodnoty na více než max_block_send_distance zakáže "
-"optimalizaci.\n"
-"Jednotkou je mapblok (16 bloků)"
+"V této vzdálenosti bude server razantně optimalizovat výběr bloků,\n"
+"které pošle klientům.\n"
+"Malé hodnoty mohou zlepšit výkon, však mohou také způsobit chyby\n"
+"ve vykreslování (některé bloky, zvláště pod vodou, v jeskyních\n"
+"a někdy i na zemi, nebudou vykresleny).\n"
+"Nastavení této hodnoty vyšší než max_block_send_distance zakáže vypne\n"
+"tuto optimalizaci.\n"
+"Jednotkou je mapblok (16 bloků)."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Automatic forward key"
-msgstr "Vpřed"
+msgstr "Automaticky vpřed klávesa"
#: src/settings_translation_file.cpp
msgid "Automatically jump up single-node obstacles."
msgstr "Automaticky vyskoÄit na pÅ™ekážky vysoké 1 blok."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Automatically report to the serverlist."
-msgstr "Automaticky hlásit seznamu serverů."
+msgstr "Automaticky nahlásit do seznamu serverů."
#: src/settings_translation_file.cpp
msgid "Autosave screen size"
@@ -2359,25 +2511,30 @@ msgid "Autoscaling mode"
msgstr "Režim automatického přiblížení"
#: src/settings_translation_file.cpp
+msgid "Aux1 key"
+msgstr "Aux1 klávesa"
+
+#: src/settings_translation_file.cpp
+msgid "Aux1 key for climbing/descending"
+msgstr "Aux1 klávesa pro výstup/sestup"
+
+#: src/settings_translation_file.cpp
msgid "Backward key"
msgstr "Vzad"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Base ground level"
-msgstr "Výška povrchu země"
+msgstr "Základní úroveň povrchu"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Base terrain height."
-msgstr "Základní výška terénu"
+msgstr "Základní výška terénu."
#: src/settings_translation_file.cpp
msgid "Basic"
msgstr "Základní"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Basic privileges"
msgstr "Základní práva"
@@ -2406,32 +2563,24 @@ msgid "Biome noise"
msgstr "Šum biomů"
#: src/settings_translation_file.cpp
-msgid "Bits per pixel (aka color depth) in fullscreen mode."
-msgstr "Bitová hloubka (bity na pixel) v celoobrazovkovém režimu."
-
-#: src/settings_translation_file.cpp
msgid "Block send optimize distance"
msgstr "Optimalizace vzdálenosti vysílání bloku"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Bold and italic font path"
-msgstr "Cesta k neproporcionálnímu písmu"
+msgstr "Cesta k tuÄnému písmu s kurzívou"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Bold and italic monospace font path"
-msgstr "Cesta k neproporcionálnímu písmu"
+msgstr "Cesta k tuÄnému proporcionálnímu písmu s kurzívou"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Bold font path"
-msgstr "Cesta k písmu"
+msgstr "Cesta k tuÄnému písmu"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Bold monospace font path"
-msgstr "Cesta k neproporcionálnímu písmu"
+msgstr "Cesta k proporcionálnímu písmu"
#: src/settings_translation_file.cpp
msgid "Build inside player"
@@ -2463,7 +2612,7 @@ msgstr "Klávesa pro přepínání aktualizace pohledu"
#: src/settings_translation_file.cpp
msgid "Cave noise"
-msgstr "Šum jeskyní"
+msgstr "Šum v jeskynních"
#: src/settings_translation_file.cpp
msgid "Cave noise #1"
@@ -2475,7 +2624,7 @@ msgstr "Šum v jeskynních 2"
#: src/settings_translation_file.cpp
msgid "Cave width"
-msgstr "Šířka jeskyně"
+msgstr "Šířka jeskyní"
#: src/settings_translation_file.cpp
msgid "Cave1 noise"
@@ -2502,43 +2651,49 @@ msgid "Cavern threshold"
msgstr "Práh jeskynních dutin"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Cavern upper limit"
-msgstr "Limit jeskynních dutin"
+msgstr "Horní hranice jeskynních dutin"
#: src/settings_translation_file.cpp
msgid ""
"Center of light curve boost range.\n"
"Where 0.0 is minimum light level, 1.0 is maximum light level."
msgstr ""
+"Střed posílené křivky světla.\n"
+"0.0 odpovídá nejnižší úrovni, 1.0 odpovídá nejvyšší úrovni světla."
+
+#: src/settings_translation_file.cpp
+msgid "Chat command time message threshold"
+msgstr "Doba do zobrazení Äasu pro příkaz v chatu"
#: src/settings_translation_file.cpp
#, fuzzy
+msgid "Chat commands"
+msgstr "Příkazy"
+
+#: src/settings_translation_file.cpp
msgid "Chat font size"
-msgstr "Velikost písma"
+msgstr "Velikost písma v chatu"
#: src/settings_translation_file.cpp
msgid "Chat key"
msgstr "Klávesa chatu"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Chat log level"
-msgstr "Úroveň minimální důležitosti ladících informací"
+msgstr "Úroveň důležitosti ladících informací"
#: src/settings_translation_file.cpp
msgid "Chat message count limit"
msgstr "Omezení poÄtu zpráv v Chatu"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Chat message format"
-msgstr "Zpráva o havárii"
+msgstr "Formát zpráv v chatu"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Chat message kick threshold"
-msgstr "Práh pouštního šumu"
+msgstr "Doba do vyhození zprávy z chatu"
#: src/settings_translation_file.cpp
msgid "Chat message max length"
@@ -2549,8 +2704,9 @@ msgid "Chat toggle key"
msgstr "Klávesa zobrazení chatu"
#: src/settings_translation_file.cpp
-msgid "Chatcommands"
-msgstr "Příkazy"
+#, fuzzy
+msgid "Chat weblinks"
+msgstr "Chat zobrazen"
#: src/settings_translation_file.cpp
msgid "Chunk size"
@@ -2569,6 +2725,12 @@ msgid "Clean transparent textures"
msgstr "Vynulovat průhledné textury"
#: src/settings_translation_file.cpp
+msgid ""
+"Clickable weblinks (middle-click or Ctrl+left-click) enabled in chat console "
+"output."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Client"
msgstr "Klient"
@@ -2581,9 +2743,8 @@ msgid "Client modding"
msgstr "Lokální mody"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Client side modding restrictions"
-msgstr "Lokální mody"
+msgstr "Omezení modování na straně klienta"
#: src/settings_translation_file.cpp
msgid "Client side node lookup range restriction"
@@ -2614,6 +2775,10 @@ msgid "Colored fog"
msgstr "Barevná mlha"
#: src/settings_translation_file.cpp
+msgid "Colored shadows"
+msgstr "Zbarvené stíny"
+
+#: src/settings_translation_file.cpp
msgid ""
"Comma-separated list of flags to hide in the content repository.\n"
"\"nonfree\" can be used to hide packages which do not qualify as 'free "
@@ -2623,6 +2788,13 @@ msgid ""
"These flags are independent from Minetest versions,\n"
"so see a full list at https://content.minetest.net/help/content_flags/"
msgstr ""
+"Seznam nastavení ve formátu CSV sloužící k filtrování obsahu repozitáře.\n"
+"\"nesvobodné\" slouží pro skrytí balíÄků, které se podle definice Free "
+"Software Foundation\n"
+"neřadí do \"svobodného softwaru\".\n"
+"Můžete také zadat hodnocení obsahu.\n"
+"Tato nastavení jsou nezávislá na versi Minetestu,\n"
+"kompletní seznam na: https://content.minetest.net/help/content_flags/"
#: src/settings_translation_file.cpp
msgid ""
@@ -2646,6 +2818,22 @@ msgid "Command key"
msgstr "CMD ⌘"
#: src/settings_translation_file.cpp
+msgid ""
+"Compression level to use when saving mapblocks to disk.\n"
+"-1 - use default compression level\n"
+"0 - least compression, fastest\n"
+"9 - best compression, slowest"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Compression level to use when sending mapblocks to the client.\n"
+"-1 - use default compression level\n"
+"0 - least compression, fastest\n"
+"9 - best compression, slowest"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Connect glass"
msgstr "Propojené sklo"
@@ -2671,16 +2859,15 @@ msgstr "Šírka konzole"
#: src/settings_translation_file.cpp
msgid "ContentDB Flag Blacklist"
-msgstr ""
+msgstr "ContentDB: Černá listina"
#: src/settings_translation_file.cpp
msgid "ContentDB Max Concurrent Downloads"
-msgstr ""
+msgstr "ContentDB Max. souběžných stahování"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "ContentDB URL"
-msgstr "PokraÄovat"
+msgstr "ContentDB-URL"
#: src/settings_translation_file.cpp
msgid "Continuous forward"
@@ -2691,25 +2878,26 @@ msgid ""
"Continuous forward movement, toggled by autoforward key.\n"
"Press the autoforward key again or the backwards movement to disable."
msgstr ""
+"Nepřetržitý pohyb vpřed zapnutý klávesou Automaticky vpřed.\n"
+"Stisk klávesy Automaticky vpřed nebo Dozadu, pohyb zruší."
#: src/settings_translation_file.cpp
msgid "Controls"
msgstr "Ovládání"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Controls length of day/night cycle.\n"
"Examples:\n"
"72 = 20min, 360 = 4min, 1 = 24hour, 0 = day/night/whatever stays unchanged."
msgstr ""
"Ovládání délky denního cyklu.\n"
-"Příklad: 72 = 20 minut, 360 = 4 minutý, 1 = 24 hodin, 0 = zůstává pouze noc "
-"nebo den."
+"Příklad:\n"
+"72 = 20 minut, 360 = 4 minuty, 1 = 24 hodin, 0 = zůstává pouze noc nebo den."
#: src/settings_translation_file.cpp
msgid "Controls sinking speed in liquid."
-msgstr "Ovládá rychlost potápění v kapalinách."
+msgstr "Stanovuje rychlost potápění v kapalinách."
#: src/settings_translation_file.cpp
msgid "Controls steepness/depth of lake depressions."
@@ -2725,6 +2913,9 @@ msgid ""
"Value >= 10.0 completely disables generation of tunnels and avoids the\n"
"intensive noise calculations."
msgstr ""
+"Stanovuje šířku tunelů. Nižší hodnota vytváří širší tunely.\n"
+"Hodnota >= 10.0 úplnÄ› vypne generování tunelů, Äímž se zruší\n"
+"nároÄné výpoÄty Å¡umu."
#: src/settings_translation_file.cpp
msgid "Crash message"
@@ -2742,8 +2933,10 @@ msgstr "Průhlednost zaměřovaÄe"
#, fuzzy
msgid ""
"Crosshair alpha (opaqueness, between 0 and 255).\n"
-"Also controls the object crosshair color"
-msgstr "Průhlednost zaměřovaÄe (mezi 0 a 255)."
+"This also applies to the object crosshair."
+msgstr ""
+"Průhlednost zaměřovaÄe (0 až 255).\n"
+"Také urÄuje barvu zaměřovaÄe"
#: src/settings_translation_file.cpp
msgid "Crosshair color"
@@ -2754,6 +2947,8 @@ msgid ""
"Crosshair color (R,G,B).\n"
"Also controls the object crosshair color"
msgstr ""
+"Barva zaměřovaÄe (R,G,B).\n"
+"Také urÄuje barvu zaměřovaÄe"
#: src/settings_translation_file.cpp
msgid "DPI"
@@ -2768,9 +2963,8 @@ msgid "Debug info toggle key"
msgstr "Klávesa pro zobrazení ladících informací"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Debug log file size threshold"
-msgstr "Práh pouštního šumu"
+msgstr "Práh velikosti souboru s ladícími informacemi"
#: src/settings_translation_file.cpp
msgid "Debug log level"
@@ -2782,7 +2976,7 @@ msgstr "Klávesa snížení hlasitosti"
#: src/settings_translation_file.cpp
msgid "Decrease this to increase liquid resistance to movement."
-msgstr ""
+msgstr "Snižte toto pro zvýšení odporu kapalin vůÄi pohybu."
#: src/settings_translation_file.cpp
msgid "Dedicated server step"
@@ -2817,17 +3011,19 @@ msgid "Default report format"
msgstr "Výchozí formát reportů"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Default stack size"
-msgstr "Výchozí hra"
+msgstr "Výchozí velikost hromádky"
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
-"Default timeout for cURL, stated in milliseconds.\n"
-"Only has an effect if compiled with cURL."
+"Define shadow filtering quality.\n"
+"This simulates the soft shadows effect by applying a PCF or Poisson disk\n"
+"but also uses more resources."
msgstr ""
-"Výchozí Äasový limit požadavku pro cURL, v milisekundách.\n"
-"Má vliv, pouze pokud byl program sestaven s cURL."
+"UrÄit kvalitu filtrování stínů\n"
+"Simuluje efekt měkkých stínů použitím PCF nebo Poissonova disku,\n"
+"za využívá většího výkonu."
#: src/settings_translation_file.cpp
msgid "Defines areas where trees have apples."
@@ -2838,14 +3034,12 @@ msgid "Defines areas with sandy beaches."
msgstr "UrÄuje oblasti s písÄitými plážemi."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Defines distribution of higher terrain and steepness of cliffs."
-msgstr "UrÄuje oblasti vyššího terénu (cliff-top) a ovlivňuje strmost útesů."
+msgstr "UrÄuje rozmístÄ›ní vyššího terénu a strmých útesů."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Defines distribution of higher terrain."
-msgstr "UrÄuje oblasti spadající pod 'terrain_higher' (cliff-top terén)."
+msgstr "UrÄuje rozmístÄ›ní vyššího terénu."
#: src/settings_translation_file.cpp
msgid "Defines full size of caverns, smaller values create larger caverns."
@@ -2862,28 +3056,24 @@ msgid "Defines location and terrain of optional hills and lakes."
msgstr "UrÄuje pozici a terén možných hor a jezer."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Defines the base ground level."
-msgstr "UrÄuje lesní oblasti a hustotu stromového porostu."
+msgstr "UrÄuje základní úroveň povrchu."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Defines the depth of the river channel."
-msgstr "UrÄuje lesní oblasti a hustotu stromového porostu."
+msgstr "UrÄuje hloubku říÄního koryta."
#: src/settings_translation_file.cpp
msgid "Defines the maximal player transfer distance in blocks (0 = unlimited)."
msgstr "UrÄuje maximální posun hráÄe v blocích (0 = neomezený)."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Defines the width of the river channel."
-msgstr "UrÄuje makroskopickou strukturu koryta Å™eky."
+msgstr "UrÄuje šířku říÄního koryta."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Defines the width of the river valley."
-msgstr "UrÄuje oblasti, kde stromy nesou plody."
+msgstr "UrÄuje šířku údolí Å™eky."
#: src/settings_translation_file.cpp
msgid "Defines tree areas and tree density."
@@ -2911,13 +3101,12 @@ msgid "Deprecated Lua API handling"
msgstr "Zacházení se zastaralým Lua API"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Depth below which you'll find giant caverns."
-msgstr "Hloubka pod kterou najdete velké jeskyně."
+msgstr "Hloubka, pod kterou se nachází velké jeskynní dutiny."
#: src/settings_translation_file.cpp
msgid "Depth below which you'll find large caves."
-msgstr "Hloubka pod kterou najdete velké jeskyně."
+msgstr "Hloubka, pod kterou se nachází velké jeskyně."
#: src/settings_translation_file.cpp
msgid ""
@@ -2932,22 +3121,20 @@ msgid "Desert noise threshold"
msgstr "Práh pouštního šumu"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Deserts occur when np_biome exceeds this value.\n"
"When the 'snowbiomes' flag is enabled, this is ignored."
msgstr ""
"Pouště se objeví v místech, kde 'np_biome' přesahuje tuto hodnotu.\n"
-"Pokud je zapnutý nový systém biomů, toto nastavení nemá vliv."
+"Ignorováno, pokud je zapnuté nastavení \"snowbiomes\"."
#: src/settings_translation_file.cpp
msgid "Desynchronize block animation"
msgstr "Nesynchronizovat animace bloků"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Dig key"
-msgstr "Klávesa doprava"
+msgstr "Klávesa těžení"
#: src/settings_translation_file.cpp
msgid "Digging particles"
@@ -2962,6 +3149,10 @@ msgid "Disallow empty passwords"
msgstr "Zakázat prázdná hesla"
#: src/settings_translation_file.cpp
+msgid "Display Density Scaling Factor"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Domain name of server, to be displayed in the serverlist."
msgstr "Doménové jméno serveru zobrazované na seznamu serverů."
@@ -2978,28 +3169,28 @@ msgid "Drop item key"
msgstr "Klávesa vyhození předmětu"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Dump the mapgen debug information."
-msgstr "Vypsat ladící informace mapgenu."
+msgstr "Vypsat ladící informace z Generátoru mapy."
#: src/settings_translation_file.cpp
msgid "Dungeon maximum Y"
-msgstr ""
+msgstr "Horní hranice Y pro žaláře"
#: src/settings_translation_file.cpp
msgid "Dungeon minimum Y"
-msgstr ""
+msgstr "Dolní hranice Y pro žaláře"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Dungeon noise"
-msgstr "Šum hřbetů"
+msgstr "Šum žalářů"
#: src/settings_translation_file.cpp
msgid ""
"Enable IPv6 support (for both client and server).\n"
"Required for IPv6 connections to work at all."
msgstr ""
+"Zapnout podporu IPv6 (pro klienta i server).\n"
+"Požadováno pro IPv6 připojení."
#: src/settings_translation_file.cpp
msgid ""
@@ -3010,23 +3201,41 @@ msgstr ""
"Tato funkce je experimentální a její API se může změnit."
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid ""
+"Enable Poisson disk filtering.\n"
+"On true uses Poisson disk to make \"soft shadows\". Otherwise uses PCF "
+"filtering."
+msgstr ""
+"Zapnout filtrování Poissoným diskem.\n"
+"Pokud je zapnuto, využívá Poissonův disk pro generování \"měkkých stínů\". V "
+"opaÄném případÄ› je využito filtrování PCF."
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid ""
+"Enable colored shadows.\n"
+"On true translucent nodes cast colored shadows. This is expensive."
+msgstr ""
+"Zanout zbarvené stíny.\n"
+"Po zapnutí vrhají průhledné předměty zbarvené stíny. Toto má velký vliv na "
+"výkon."
+
+#: src/settings_translation_file.cpp
msgid "Enable console window"
msgstr "Povolit konzolové okno"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Enable creative mode for all players"
-msgstr "Zapnout kreativní mód pro nové mapy."
+msgstr "Zapnout kreativní mód pro vÅ¡echny hráÄe"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Enable joysticks"
msgstr "Zapnout joysticky"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Enable mod channels support."
-msgstr "Zapnout zabezpeÄení módů"
+msgstr ""
#: src/settings_translation_file.cpp
msgid "Enable mod security"
@@ -3042,13 +3251,15 @@ msgstr "Povolit náhodný uživatelský vstup (pouze pro testování)."
#: src/settings_translation_file.cpp
msgid "Enable register confirmation"
-msgstr ""
+msgstr "Zapnout potvrzení registrace"
#: src/settings_translation_file.cpp
msgid ""
"Enable register confirmation when connecting to server.\n"
"If disabled, new account will be registered automatically."
msgstr ""
+"Zapnout potvrzení registrace pro připojení na server.\n"
+"Pokud je toto vypnuto, je nový úÄet registrován automaticky."
#: src/settings_translation_file.cpp
msgid ""
@@ -3087,6 +3298,8 @@ msgid ""
"Enable vertex buffer objects.\n"
"This should greatly improve graphics performance."
msgstr ""
+"Zapnout objekty vyrovnávací paměti vertexů.\n"
+"Toto by mělo výrazně zlepšit grafický výkon."
#: src/settings_translation_file.cpp
msgid ""
@@ -3097,15 +3310,14 @@ msgstr ""
"Např.: 0 pro žádné, 1.0 pro normální a 2.0 pro dvojité klepání."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Enable/disable running an IPv6 server.\n"
"Ignored if bind_address is set.\n"
"Needs enable_ipv6 to be enabled."
msgstr ""
-"Povolit/zakázat spouštění IPv6 serveru. IPv6 server může podle\n"
-"systémového nastevení být omezen pouze na klienty s IPv6.\n"
-"Nemá vliv, pokud je 'bind_address' nastaveno."
+"Povolit/zakázat spuštění IPv6 serveru.\n"
+"Ignorováno, pokud je 'bind_address' nastaveno.\n"
+"Je třeba mít povoleno enable_ipv6."
#: src/settings_translation_file.cpp
msgid ""
@@ -3114,6 +3326,10 @@ msgid ""
"appearance of high dynamic range images. Mid-range contrast is slightly\n"
"enhanced, highlights and shadows are gradually compressed."
msgstr ""
+"Zapíná Hableho \"Uncharted 2\" filmové mapování odstínů.\n"
+"Simuluje křivku odstínu fotografického filmu a tím přibližný vzhled\n"
+"obrázků s vysokým dynamickým rozsahem (HDR). Kontrast středních\n"
+"hodnot je lehce zvýšený, vysoké a nízké hodnoty jsou postupně komprimovány."
#: src/settings_translation_file.cpp
msgid "Enables animation of inventory items."
@@ -3134,6 +3350,16 @@ msgid ""
"sound controls will be non-functional.\n"
"Changing this setting requires a restart."
msgstr ""
+"Zapíná zvukový systém.\n"
+"Vypnutí má za náledek úplné ztlumení všech zvuků\n"
+"a zvukového ovládání ve hře.\n"
+"Změna tohoto nastavení vyžaduje restart."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enables tradeoffs that reduce CPU load or increase rendering performance\n"
+"at the expense of minor visual glitches that do not impact game playability."
+msgstr ""
#: src/settings_translation_file.cpp
msgid "Engine profiling data print interval"
@@ -3152,10 +3378,16 @@ msgid ""
"Values < 1.0 (for example 0.25) create a more defined surface level with\n"
"flatter lowlands, suitable for a solid floatland layer."
msgstr ""
+"Exponent pro zužování létajících ostrovů. Mění míru zúžení.\n"
+"Hodnota = 1.0 vytvoří rovnoměrné přímé zúžení.\n"
+"Hodnoty > 1.0 vytvoří hladké zúžení vhodné pro výchozí oddělené\n"
+"létající ostrovy.\n"
+"Hodnoty < 1.0 (např. 0.25) vytvoří výraznější úroveň povrchu\n"
+"s rovinatějšími nížinami, vhodné pro souvislou vrstvu létajících ostrovů."
#: src/settings_translation_file.cpp
msgid "FPS when unfocused or paused"
-msgstr ""
+msgstr "Snímky za sekundu (FPS) pÅ™i pauze Äi hÅ™e běžící na pozadí"
#: src/settings_translation_file.cpp
msgid "FSAA"
@@ -3170,21 +3402,8 @@ msgid "Fall bobbing factor"
msgstr "SouÄinitel houpání pohledu pÅ™i pádu"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Fallback font path"
-msgstr "Záložní písmo"
-
-#: src/settings_translation_file.cpp
-msgid "Fallback font shadow"
-msgstr "Stín záložního písma"
-
-#: src/settings_translation_file.cpp
-msgid "Fallback font shadow alpha"
-msgstr "Průhlednost stínu záložního písma"
-
-#: src/settings_translation_file.cpp
-msgid "Fallback font size"
-msgstr "Velikost záložního písma"
+msgstr "Cesta k záložnímu písmu"
#: src/settings_translation_file.cpp
msgid "Fast key"
@@ -3203,12 +3422,11 @@ msgid "Fast movement"
msgstr "Turbo režim pohybu"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
-"Fast movement (via the \"special\" key).\n"
+"Fast movement (via the \"Aux1\" key).\n"
"This requires the \"fast\" privilege on the server."
msgstr ""
-"Turbo režim pohybu (pomocí klávesy použít).\n"
+"Turbo režim pohybu (pomocí klávesy \"Aux1\").\n"
"Vyžaduje na serveru přidělené právo \"fast\"."
#: src/settings_translation_file.cpp
@@ -3220,17 +3438,15 @@ msgid "Field of view in degrees."
msgstr "Úhel pohledu ve stupních."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"File in client/serverlist/ that contains your favorite servers displayed in "
"the\n"
"Multiplayer Tab."
msgstr ""
"Soubor v client/serverlist/, který obsahuje oblíbené servery zobrazené na "
-"záložce 'Online hra'."
+"záložce 'Multiplayer'."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Filler depth"
msgstr "Hloubka výplně"
@@ -3243,28 +3459,26 @@ msgid "Filmic tone mapping"
msgstr "Filmový tone mapping"
#: src/settings_translation_file.cpp
-#, fuzzy
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."
+"which PNG optimizers usually discard, often resulting in dark or\n"
+"light edges to transparent textures. Apply a filter to clean that up\n"
+"at texture load time. This is automatically enabled if mipmapping is enabled."
msgstr ""
"Okraje filtrovaných textur se mohou mísit s průhlednými sousedními pixely,\n"
-"které PNG optimizery obvykle zahazují. To může vyústit v tmavý nebo světlý\n"
-"lem okolo hran. Zapnutí tohoto filtru problém Å™eší pÅ™i naÄítání textur."
+"které PNG optimizery obvykle zahazují. To může vyústit v tmavé nebo světlé\n"
+"okraje hran. Zapnutí tohoto filtru problém Å™eší pÅ™i naÄítání textur.\n"
+"Toto nastavení je automaticky zapnuto, pokud je povoleno Mip-Mapování."
#: src/settings_translation_file.cpp
msgid "Filtering"
msgstr "Filtrování"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "First of 4 2D noises that together define hill/mountain range height."
-msgstr "První ze dvou 3D šumů, které dohromady definují tunely."
+msgstr "První ze 4 2D šumů, které dohromady definují rozsah výšek kopců/hor."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "First of two 3D noises that together define tunnels."
msgstr "První ze dvou 3D šumů, které dohromady definují tunely."
@@ -3274,42 +3488,35 @@ msgstr "Fixované seedové Äislo"
#: src/settings_translation_file.cpp
msgid "Fixed virtual joystick"
-msgstr ""
+msgstr "Nepohyblivý virtuální joystick"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Floatland density"
-msgstr "Koncentrace hor na létajících ostrovech"
+msgstr "Hustota létajících ostrovů"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Floatland maximum Y"
-msgstr "Výška hor na létajících ostrovech"
+msgstr "Létajících ostrovy: Max. Y"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Floatland minimum Y"
-msgstr "Výška hor na létajících ostrovech"
+msgstr "Létajících ostrovy: Min. Y"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Floatland noise"
-msgstr "Základní šum létajících ostrovů"
+msgstr "Šum létajících ostrovů"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Floatland taper exponent"
-msgstr "Koncentrace hor na létajících ostrovech"
+msgstr "Exponent zúžení létajících ostrovů"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Floatland tapering distance"
-msgstr "Základní šum létajících ostrovů"
+msgstr "Vzdálenost zužování létajících ostrovů"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Floatland water level"
-msgstr "Výška létajících ostrovů"
+msgstr "Hladina vody na létajících ostrovech"
#: src/settings_translation_file.cpp
msgid "Fly key"
@@ -3324,7 +3531,6 @@ msgid "Fog"
msgstr "Mlha"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Fog start"
msgstr "ZaÄátek mlhy"
@@ -3334,11 +3540,11 @@ msgstr "Klávesa pro přepnutí mlhy"
#: src/settings_translation_file.cpp
msgid "Font bold by default"
-msgstr ""
+msgstr "TuÄné písmo jako výchozí"
#: src/settings_translation_file.cpp
msgid "Font italic by default"
-msgstr ""
+msgstr "Kurzíva jako výchozí"
#: src/settings_translation_file.cpp
msgid "Font shadow"
@@ -3353,22 +3559,37 @@ msgid "Font size"
msgstr "Velikost písma"
#: src/settings_translation_file.cpp
-msgid "Font size of the default font in point (pt)."
+msgid "Font size divisible by"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Font size of the fallback font in point (pt)."
-msgstr ""
+#, fuzzy
+msgid "Font size of the default font where 1 unit = 1 pixel at 96 DPI"
+msgstr "Velikost výchozího písma v bodech (pt)."
#: src/settings_translation_file.cpp
-msgid "Font size of the monospace font in point (pt)."
-msgstr ""
+#, fuzzy
+msgid "Font size of the monospace font where 1 unit = 1 pixel at 96 DPI"
+msgstr "Velikost proporcionálního písma v bodech (pt)."
#: src/settings_translation_file.cpp
msgid ""
"Font size of the recent chat text and chat prompt in point (pt).\n"
"Value 0 will use the default font size."
msgstr ""
+"Velikost písma posledního textu a výzvy v chatu v bodech (pt).\n"
+"Výchozí velikost písma se nastaví hodnotou 0."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"For pixel-style fonts that do not scale well, this ensures that font sizes "
+"used\n"
+"with this font will always be divisible by this value, in pixels. For "
+"instance,\n"
+"a pixel font 16 pixels tall should have this set to 16, so it will only ever "
+"be\n"
+"sized 16, 32, 48, etc., so a mod requesting a size of 25 will get 32."
+msgstr ""
#: src/settings_translation_file.cpp
msgid ""
@@ -3376,6 +3597,8 @@ msgid ""
"placeholders:\n"
"@name, @message, @timestamp (optional)"
msgstr ""
+"Formát hráÄovy zprávy v chatu. ŘetÄ›zec níže obsahuje platné zástupce:\n"
+"@name, @message, @timestamp (optional)"
#: src/settings_translation_file.cpp
msgid "Format of screenshots."
@@ -3383,50 +3606,45 @@ msgstr "Formát snímků obrazovky."
#: src/settings_translation_file.cpp
msgid "Formspec Default Background Color"
-msgstr ""
+msgstr "Konzole Výchozí barva pozadí"
#: src/settings_translation_file.cpp
msgid "Formspec Default Background Opacity"
-msgstr ""
+msgstr "Konzole Výchozí průhlednost pozadí"
#: src/settings_translation_file.cpp
msgid "Formspec Full-Screen Background Color"
-msgstr ""
+msgstr "Konzole Barva pozadí při zobrazení na celé obrazovce"
#: src/settings_translation_file.cpp
msgid "Formspec Full-Screen Background Opacity"
-msgstr ""
+msgstr "Konzole Průhlednost pozadí při zobrazení na celé obrazovce"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Formspec default background color (R,G,B)."
-msgstr "Barva (R,G,B) pozadí herní chatovací konzole."
+msgstr "Konzole Výchozí barva pozadí (R,G,B)."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Formspec default background opacity (between 0 and 255)."
-msgstr ""
-"Průhlednost pozadí herní chatovací konzole (neprůhlednost, mezi 0 a 255)."
+msgstr "Konzole Výchozí průhlednost pozadí (0 až 255)."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Formspec full-screen background color (R,G,B)."
-msgstr "Barva (R,G,B) pozadí herní chatovací konzole."
+msgstr "Konzole Barva pozadí při zobrazení na celou obrazovku (R,G,B)."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Formspec full-screen background opacity (between 0 and 255)."
msgstr ""
-"Průhlednost pozadí herní chatovací konzole (neprůhlednost, mezi 0 a 255)."
+"Konzole Průhlednost pozadí při zobrazení na celou obrazovku (0 až 255)."
#: src/settings_translation_file.cpp
msgid "Forward key"
msgstr "Vpřed"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Fourth of 4 2D noises that together define hill/mountain range height."
-msgstr "První ze dvou 3D šumů, které dohromady definují tunely."
+msgstr ""
+"ÄŒtvrtý ze ÄtyÅ™ 2D Å¡umů, které dohromady definují rozsah výšek kopců/hor."
#: src/settings_translation_file.cpp
msgid "Fractal type"
@@ -3437,24 +3655,19 @@ msgid "Fraction of the visible distance at which fog starts to be rendered"
msgstr "Podíl viditelné vzdálenosti, na kterém zaÄne být mlha vykreslována"
#: src/settings_translation_file.cpp
-#, fuzzy
-msgid "FreeType fonts"
-msgstr "Písma Freetype"
-
-#: src/settings_translation_file.cpp
msgid ""
"From how far blocks are generated for clients, stated in mapblocks (16 "
"nodes)."
msgstr ""
-"Maximální vzdálenost, ve které jsou klientům generovány bloky, urÄená\n"
-"v mapblocích (16 bloků)."
+"Vzdálenost, ve které jsou klientům generovány bloky, urÄená v mapblocích (16 "
+"bloků)."
#: src/settings_translation_file.cpp
msgid ""
"From how far blocks are sent to clients, stated in mapblocks (16 nodes)."
msgstr ""
-"Maximální vzdálenost, ve které jsou klientům odeslány bloky, urÄená\n"
-"v mapblocích (16 bloků)."
+"Vzdálenost, ze které jsou klientům odesílány bloky, urÄená v mapblocích (16 "
+"bloků)."
#: src/settings_translation_file.cpp
msgid ""
@@ -3464,16 +3677,17 @@ msgid ""
"to maintain active objects up to this distance in the direction the\n"
"player is looking. (This can avoid mobs suddenly disappearing from view)"
msgstr ""
+"Vzdálenost, na kterou má klient inforamace o objektech,\n"
+"urÄená v mapblocích (16 bloků).\n"
+"Nastavení této hodnoty výše než active_block_range umožní serveru\n"
+"udržet v pamÄ›ti aktivní objekty až do této vzdálenosti ve smÄ›ru hráÄova\n"
+"pohledu. (Toto může předejít náhlému mizení postav)"
#: src/settings_translation_file.cpp
msgid "Full screen"
msgstr "Celá obrazovka"
#: src/settings_translation_file.cpp
-msgid "Full screen BPP"
-msgstr "Bitová hloubka v celoobrazovkovém režimu"
-
-#: src/settings_translation_file.cpp
msgid "Fullscreen mode."
msgstr "Celoobrazovkový režim."
@@ -3498,26 +3712,28 @@ msgstr "Globální callback funkce"
msgid ""
"Global map generation attributes.\n"
"In Mapgen v6 the 'decorations' flag controls all decorations except trees\n"
-"and junglegrass, in all other mapgens this flag controls all decorations."
+"and jungle grass, in all other mapgens this flag controls all decorations."
msgstr ""
"Globální parametry generování mapy.\n"
-"V mapgenu v6 ovládal příznak 'decorations' všechny dekorace kromě\n"
-"stromů a tropické trávy. V ostatních mapgenech tento příznak řídí\n"
-"všechny dekorace.\n"
-"Neuvedené příznaky zůstávají ve výchozím stavu.\n"
-"Příznaky zaÄínající na 'no' slouží k zakázání možnosti."
+"V Generátoru mapy v6 ovládá nastavení \"decorations\" všechny dekorace\n"
+"kromě stromů a tropické trávy, ve všech ostatních verzích Generátoru mapy\n"
+"ovládá toto nastavení všechny dekorace."
#: src/settings_translation_file.cpp
msgid ""
"Gradient of light curve at maximum light level.\n"
"Controls the contrast of the highest light levels."
msgstr ""
+"Gradient křivky světla na nejvyšší úrovni světla.\n"
+"UrÄuje kontrast nejvyšších svÄ›telných hodnot."
#: src/settings_translation_file.cpp
msgid ""
"Gradient of light curve at minimum light level.\n"
"Controls the contrast of the lowest light levels."
msgstr ""
+"Gradient křivky světla na nejnižší úrovni světla.\n"
+"UrÄuje kontrast nejnižších svÄ›telných hodnot."
#: src/settings_translation_file.cpp
msgid "Graphics"
@@ -3532,14 +3748,12 @@ msgid "Ground level"
msgstr "Výška povrchu země"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Ground noise"
-msgstr "Výška povrchu země"
+msgstr "Å um povrchu"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "HTTP mods"
-msgstr "HTTP mody"
+msgstr "HTTP režimy"
#: src/settings_translation_file.cpp
msgid "HUD scale factor"
@@ -3550,7 +3764,6 @@ msgid "HUD toggle key"
msgstr "Klávesa pro přepnutí HUD (Head-Up Display)"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Handling for deprecated Lua API calls:\n"
"- none: Do not log deprecated calls\n"
@@ -3558,7 +3771,7 @@ msgid ""
"- error: abort on usage of deprecated call (suggested for mod developers)."
msgstr ""
"Zacházení s voláními zastaralého Lua API:\n"
-"- legacy: pokusí se napodobit staré chování (výchozí pro release).\n"
+"- none: Nezaznamenávat zastaralá volání\n"
"- log: pokusí se napodobit staré chování a zaznamená backtrace volání\n"
" (výchozí pro debug).\n"
"- error: pÅ™i volání zastaralé funkce skonÄit (doporuÄeno vývojářům modů)."
@@ -3585,8 +3798,11 @@ msgid "Heat noise"
msgstr "Tepelný šum"
#: src/settings_translation_file.cpp
-msgid "Height component of the initial window size."
-msgstr "Výšková Äást poÄáteÄní velikosti okna."
+msgid ""
+"Height component of the initial window size. Ignored in fullscreen mode."
+msgstr ""
+"Výškový parametr poÄáteÄní velikosti okna. Ignorováno v režimu na celé "
+"obrazovce."
#: src/settings_translation_file.cpp
msgid "Height noise"
@@ -3597,10 +3813,6 @@ msgid "Height select noise"
msgstr "Šum vybírání výšky"
#: src/settings_translation_file.cpp
-msgid "High-precision FPU"
-msgstr "VýpoÄty ve FPU s vysokou pÅ™esností"
-
-#: src/settings_translation_file.cpp
msgid "Hill steepness"
msgstr "Strmost kopců"
@@ -3609,24 +3821,20 @@ msgid "Hill threshold"
msgstr "Práh kopců"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Hilliness1 noise"
-msgstr "Tepelný šum"
+msgstr "Å um kopcovitosti1"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Hilliness2 noise"
-msgstr "Tepelný šum"
+msgstr "Å um kopcovitosti2"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Hilliness3 noise"
-msgstr "Tepelný šum"
+msgstr "Å um kopcovitosti3"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Hilliness4 noise"
-msgstr "Tepelný šum"
+msgstr "Å um kopcovitosti4"
#: src/settings_translation_file.cpp
msgid "Homepage of server, to be displayed in the serverlist."
@@ -3637,18 +3845,24 @@ msgid ""
"Horizontal acceleration in air when jumping or falling,\n"
"in nodes per second per second."
msgstr ""
+"Horizontální zrychlení ve vzduchu při skoku nebo pádu,\n"
+"urÄeno v blocích za sekundu za sekundu."
#: src/settings_translation_file.cpp
msgid ""
"Horizontal and vertical acceleration in fast mode,\n"
"in nodes per second per second."
msgstr ""
+"Horizontální a vertikální zrychlení v rychlém režimu,\n"
+"urÄeno v blocích za sekundu za sekundu."
#: src/settings_translation_file.cpp
msgid ""
"Horizontal and vertical acceleration on ground or when climbing,\n"
"in nodes per second per second."
msgstr ""
+"Horizontální a vertikální zrychlení na zemi nebo při lezení,\n"
+"urÄeno v blocích za sekundu za sekundu."
#: src/settings_translation_file.cpp
msgid "Hotbar next key"
@@ -3659,169 +3873,136 @@ msgid "Hotbar previous key"
msgstr "Klávesa pro předchozí věc v liště předmětů"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Hotbar slot 1 key"
-msgstr "Klávesa pro následující věc v liště předmětů"
+msgstr "Klávesa pro přihrádku 1 v liště předmětů"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Hotbar slot 10 key"
-msgstr "Klávesa pro následující věc v liště předmětů"
+msgstr "Klávesa pro přihrádku 10 v liště předmětů"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Hotbar slot 11 key"
-msgstr "Klávesa pro následující věc v liště předmětů"
+msgstr "Klávesa pro přihrádku 11 v liště předmětů"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Hotbar slot 12 key"
-msgstr "Klávesa pro následující věc v liště předmětů"
+msgstr "Klávesa pro přihrádku 12 v liště předmětů"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Hotbar slot 13 key"
-msgstr "Klávesa pro následující věc v liště předmětů"
+msgstr "Klávesa pro přihrádku 13 v liště předmětů"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Hotbar slot 14 key"
-msgstr "Klávesa pro následující věc v liště předmětů"
+msgstr "Klávesa pro přihrádku 14 v liště předmětů"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Hotbar slot 15 key"
-msgstr "Klávesa pro následující věc v liště předmětů"
+msgstr "Klávesa pro přihrádku 15 v liště předmětů"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Hotbar slot 16 key"
-msgstr "Klávesa pro následující věc v liště předmětů"
+msgstr "Klávesa pro přihrádku 16 v liště předmětů"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Hotbar slot 17 key"
-msgstr "Klávesa pro následující věc v liště předmětů"
+msgstr "Klávesa pro přihrádku 17 v liště předmětů"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Hotbar slot 18 key"
-msgstr "Klávesa pro následující věc v liště předmětů"
+msgstr "Klávesa pro přihrádku 18 v liště předmětů"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Hotbar slot 19 key"
-msgstr "Klávesa pro následující věc v liště předmětů"
+msgstr "Klávesa pro přihrádku 19 v liště předmětů"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Hotbar slot 2 key"
-msgstr "Klávesa pro následující věc v liště předmětů"
+msgstr "Klávesa pro přihrádku 2 v liště předmětů"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Hotbar slot 20 key"
-msgstr "Klávesa pro následující věc v liště předmětů"
+msgstr "Klávesa pro přihrádku 20 v liště předmětů"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Hotbar slot 21 key"
-msgstr "Klávesa pro následující věc v liště předmětů"
+msgstr "Klávesa pro přihrádku 21 v liště předmětů"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Hotbar slot 22 key"
-msgstr "Klávesa pro následující věc v liště předmětů"
+msgstr "Klávesa pro přihrádku 22 v liště předmětů"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Hotbar slot 23 key"
-msgstr "Klávesa pro následující věc v liště předmětů"
+msgstr "Klávesa pro přihrádku 23 v liště předmětů"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Hotbar slot 24 key"
-msgstr "Klávesa pro následující věc v liště předmětů"
+msgstr "Klávesa pro přihrádku 24 v liště předmětů"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Hotbar slot 25 key"
-msgstr "Klávesa pro následující věc v liště předmětů"
+msgstr "Klávesa pro přihrádku 25 v liště předmětů"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Hotbar slot 26 key"
-msgstr "Klávesa pro následující věc v liště předmětů"
+msgstr "Klávesa pro přihrádku 26 v liště předmětů"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Hotbar slot 27 key"
-msgstr "Klávesa pro následující věc v liště předmětů"
+msgstr "Klávesa pro přihrádku 27 v liště předmětů"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Hotbar slot 28 key"
-msgstr "Klávesa pro následující věc v liště předmětů"
+msgstr "Klávesa pro přihrádku 28 v liště předmětů"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Hotbar slot 29 key"
-msgstr "Klávesa pro následující věc v liště předmětů"
+msgstr "Klávesa pro přihrádku 29 v liště předmětů"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Hotbar slot 3 key"
-msgstr "Klávesa pro následující věc v liště předmětů"
+msgstr "Klávesa pro přihrádku 3 v liště předmětů"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Hotbar slot 30 key"
-msgstr "Klávesa pro následující věc v liště předmětů"
+msgstr "Klávesa pro přihrádku 30 v liště předmětů"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Hotbar slot 31 key"
-msgstr "Klávesa pro následující věc v liště předmětů"
+msgstr "Klávesa pro přihrádku 31 v liště předmětů"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Hotbar slot 32 key"
-msgstr "Klávesa pro následující věc v liště předmětů"
+msgstr "Klávesa pro přihrádku 32 v liště předmětů"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Hotbar slot 4 key"
-msgstr "Klávesa pro následující věc v liště předmětů"
+msgstr "Klávesa pro přihrádku 4 v liště předmětů"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Hotbar slot 5 key"
-msgstr "Klávesa pro následující věc v liště předmětů"
+msgstr "Klávesa pro přihrádku 5 v liště předmětů"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Hotbar slot 6 key"
-msgstr "Klávesa pro následující věc v liště předmětů"
+msgstr "Klávesa pro přihrádku 6 v liště předmětů"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Hotbar slot 7 key"
-msgstr "Klávesa pro následující věc v liště předmětů"
+msgstr "Klávesa pro přihrádku 7 v liště předmětů"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Hotbar slot 8 key"
-msgstr "Klávesa pro následující věc v liště předmětů"
+msgstr "Klávesa pro přihrádku 8 v liště předmětů"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Hotbar slot 9 key"
-msgstr "Klávesa pro následující věc v liště předmětů"
+msgstr "Klávesa pro přihrádku 9 v liště předmětů"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "How deep to make rivers."
-msgstr "Jak hluboké dělat řeky"
+msgstr "Jak hluboké dělat řeky."
#: src/settings_translation_file.cpp
msgid ""
@@ -3829,6 +4010,9 @@ msgid ""
"If negative, liquid waves will move backwards.\n"
"Requires waving liquids to be enabled."
msgstr ""
+"Rychlost pohybu vln v kapalinách. Vyšší = rychlejší.\n"
+"Záporné hodnoty vytvoří vlny jdoucí pozpátku.\n"
+"Vyžaduje zapnuté vlnění kapalin."
#: src/settings_translation_file.cpp
msgid ""
@@ -3839,9 +4023,8 @@ msgstr ""
"Vyšší hodnota zlepší rychlost programu, ale také způsobí větší spotřebu RAM."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "How wide to make rivers."
-msgstr "Jak široké dělat řeky"
+msgstr "Jak široké dělat řeky."
#: src/settings_translation_file.cpp
msgid "Humidity blend noise"
@@ -3872,15 +4055,12 @@ msgstr ""
"omezit ji vyÄkáváním, aby se zbyteÄnÄ› neplýtvalo výkonem CPU."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
-"If disabled, \"special\" key is used to fly fast if both fly and fast mode "
-"are\n"
+"If disabled, \"Aux1\" key is used to fly fast if both fly and fast mode are\n"
"enabled."
msgstr ""
-"V zakázaném stavu způsobí, že klávesa \"použít\" je použita k aktivaci "
-"turba\n"
-"v režimu létání."
+"Pokud je vypnuto, klávesa \"Aux1\" je , při zapnutém létání\n"
+"a rychlém režimu, použita k rychlému létání."
#: src/settings_translation_file.cpp
msgid ""
@@ -3906,14 +4086,13 @@ msgstr ""
"K tomu je potřeba mít na serveru oprávnění \"noclip\"."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
-"If enabled, \"special\" key instead of \"sneak\" key is used for climbing "
-"down and\n"
+"If enabled, \"Aux1\" key instead of \"Sneak\" key is used for climbing down "
+"and\n"
"descending."
msgstr ""
-"Když zapnuto, místo klávesy \"plížit se\" se ke slézání a potápění používá "
-"klávese \"použít\"."
+"Pokud je zapnuto, je klávesa \"Aux1\" využita pro sestup\n"
+"namísto klávesy \"Plížení\"."
#: src/settings_translation_file.cpp
msgid ""
@@ -3940,6 +4119,8 @@ msgid ""
"If enabled, makes move directions relative to the player's pitch when flying "
"or swimming."
msgstr ""
+"Pokud je zapnuto, je směr pohybu, při létání nebo plavání, závislý na úhlu "
+"hráÄova pohledu."
#: src/settings_translation_file.cpp
msgid "If enabled, new players cannot join with an empty password."
@@ -3961,6 +4142,16 @@ msgid ""
"limited\n"
"to this distance from the player to the node."
msgstr ""
+"Pokud je omezení CSM pro vzdálenost bloků povoleno, jsou volání get_node\n"
+"omezena na tuto vzdálenost hráÄe od bloku."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"If the execution of a chat command takes longer than this specified time in\n"
+"seconds, add the time information to the chat command message"
+msgstr ""
+"Pokud je doba výkonu příkazu z chatu delší než zadaný Äas v sekundách,\n"
+"pÅ™idej informaci o Äase do příkazu v chatu"
#: src/settings_translation_file.cpp
msgid ""
@@ -3969,6 +4160,11 @@ msgid ""
"deleting an older debug.txt.1 if it exists.\n"
"debug.txt is only moved if this setting is positive."
msgstr ""
+"Pokud velikost souboru debug.txt po otevÅ™ení pÅ™esáhne poÄet megabytů urÄený\n"
+"tímto nastavením, bude soubor přesunut do debug.txt.1 (toto vymaže původní "
+"debug.txt.1,\n"
+"pokud existuje).\n"
+"debug.txt je přesunut pouze pokud je toto nastavení platné."
#: src/settings_translation_file.cpp
msgid "If this is set, players will always (re)spawn at the given position."
@@ -3984,8 +4180,7 @@ msgstr "Ve hře"
#: src/settings_translation_file.cpp
msgid "In-game chat console background alpha (opaqueness, between 0 and 255)."
-msgstr ""
-"Průhlednost pozadí herní chatovací konzole (neprůhlednost, mezi 0 a 255)."
+msgstr "Průhlednost pozadí herní chatovací konzole (neprůhlednost, 0 až 255)."
#: src/settings_translation_file.cpp
msgid "In-game chat console background color (R,G,B)."
@@ -4003,7 +4198,7 @@ msgstr "Klávesa zvýšení hlasitosti"
#: src/settings_translation_file.cpp
msgid "Initial vertical speed when jumping, in nodes per second."
-msgstr ""
+msgstr "PoÄáteÄní vertikální rychlost skoku v blocích za sekundu."
#: src/settings_translation_file.cpp
msgid ""
@@ -4014,7 +4209,8 @@ msgstr ""
"Obvykle využíváno jen vývojáři jádra/builtin"
#: src/settings_translation_file.cpp
-msgid "Instrument chatcommands on registration."
+#, fuzzy
+msgid "Instrument chat commands on registration."
msgstr "Instrumentovat chatovací přikazy při registraci."
#: src/settings_translation_file.cpp
@@ -4068,14 +4264,12 @@ msgid "Invert vertical mouse movement."
msgstr "Obrátit svislý pohyb myši."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Italic font path"
-msgstr "Cesta k neproporcionálnímu písmu"
+msgstr "Cesta k písmu s kurzívou"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Italic monospace font path"
-msgstr "Cesta k neproporcionálnímu písmu"
+msgstr "Cesta k proporcionálnímu písmu s kurzívou"
#: src/settings_translation_file.cpp
msgid "Item entity TTL"
@@ -4092,6 +4286,10 @@ msgid ""
"increases processing load.\n"
"At iterations = 20 this mapgen has a similar load to mapgen V7."
msgstr ""
+"Opakování rekurzivní funkce.\n"
+"Zvýšení hodnoty vede ke zlepšení detailů, ale také zvyšuje nároky na výkon.\n"
+"Při opakování = 20 má tento Generátor mapy podobné nároky jako\n"
+"Generátor mapy v7."
#: src/settings_translation_file.cpp
msgid "Joystick ID"
@@ -4103,20 +4301,18 @@ msgstr "Interval opakování tlaÄítek joysticku"
#: src/settings_translation_file.cpp
#, fuzzy
-msgid "Joystick deadzone"
-msgstr "Typ joysticku"
+msgid "Joystick dead zone"
+msgstr "Mrtvá zóna joysticku"
#: src/settings_translation_file.cpp
msgid "Joystick frustum sensitivity"
msgstr "Citlivost otáÄení pohledu joystickem"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Joystick type"
msgstr "Typ joysticku"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Julia set only.\n"
"W component of hypercomplex constant.\n"
@@ -4124,44 +4320,47 @@ msgid ""
"Has no effect on 3D fractals.\n"
"Range roughly -2 to 2."
msgstr ""
-"Julia udává jen: W komponet hyperkomplexu konstantní urÄení tvaru Julie.\n"
-"Nemá efekt na 3D fraktálech.\n"
-"Rozsah zhruba -2 až 2."
+"Pouze pro set Julia.\n"
+"Komponenta W hyperkomplexní konstanty.\n"
+"Mění tvar fraktálu.\n"
+"Nemá žádný vliv na 3D fraktály.\n"
+"Rozmezí přibližně -2 až 2."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Julia set only.\n"
"X component of hypercomplex constant.\n"
"Alters the shape of the fractal.\n"
"Range roughly -2 to 2."
msgstr ""
-"Julia udává jen: komponet X hyperkomplexu konstantího udávání tvaru julie.\n"
-"Rozsah zhruba -2 až 2."
+"Pouze pro set Julia.\n"
+"Komponenta X hyperkomplexní konstanty.\n"
+"Mění tvar fraktálu.\n"
+"Rozmezí přibližně -2 až 2."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Julia set only.\n"
"Y component of hypercomplex constant.\n"
"Alters the shape of the fractal.\n"
"Range roughly -2 to 2."
msgstr ""
-"Julia udává jen: W komponet hyperkomplexu konstantní urÄení tvaru Julie.\n"
-"Nemá efekt na 3D fraktálech.\n"
-"Rozsah zhruba -2 až 2."
+"Pouze pro set Julia.\n"
+"Komponenta Y hyperkomplexní konstanty.\n"
+"Mění tvar fraktálu.\n"
+"Rozmezí přibližně -2 až 2."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Julia set only.\n"
"Z component of hypercomplex constant.\n"
"Alters the shape of the fractal.\n"
"Range roughly -2 to 2."
msgstr ""
-"Julia udává jen: W komponet hyperkomplexu konstantní urÄení tvaru Julie.\n"
-"Nemá efekt na 3D fraktálech.\n"
-"Rozsah zhruba -2 až 2."
+"Pouze pro set Julia.\n"
+"Komponenta Z hyperkomplexní konstanty.\n"
+"Mění tvar fraktálu.\n"
+"Rozmezí přibližně -2 až 2."
#: src/settings_translation_file.cpp
msgid "Julia w"
@@ -4208,13 +4407,12 @@ msgstr ""
"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Key for digging.\n"
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
-"klávesy pro snížení hlasitosti.\n"
+"Klávesa pro těžení\n"
"viz. http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
@@ -4244,6 +4442,9 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
+"Klávesa pro zvýšení hlasitosti\n"
+"viz. http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
msgid ""
@@ -4251,6 +4452,9 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
+"Klávesa pro skok.\n"
+"viz. See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
msgid ""
@@ -4258,16 +4462,19 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
+"Klávesa pro rychlý pohyb v rychlém režimu.\n"
+"viz. http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Key for moving the player backward.\n"
"Will also disable autoforward, when active.\n"
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
-"Klávesa pro odhození právě drženého předmětu.\n"
+"Klávesa pro pohyb hráÄe zpÄ›t.\n"
+"Také vypne automatický pohyb vpřed, pokud je zapnutý.\n"
"viz. http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
@@ -4277,6 +4484,9 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
+"Klávesa pro pohyb hráÄe vpÅ™ed.\n"
+"viz. http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
msgid ""
@@ -4284,6 +4494,9 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
+"Klávesa pro pohyb hráÄe doleva.\n"
+"viz. http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
msgid ""
@@ -4291,6 +4504,9 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
+"Klávesa pro pohyb hráÄe doprava.\n"
+"viz. http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
msgid ""
@@ -4298,6 +4514,9 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
+"Klávesa pro ztlumení hry.\n"
+"viz. http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
msgid ""
@@ -4305,6 +4524,9 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
+"Klávesa pro otevÅ™ení okna chatu za úÄelem zadání příkazů.\n"
+"viz. http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
msgid ""
@@ -4857,15 +5079,15 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Kick players who sent more than X messages per 10 seconds."
-msgstr ""
+msgstr "Vyhodit hráÄe, který poslal více jak X zpráv bÄ›hem 10 sekund."
#: src/settings_translation_file.cpp
msgid "Lake steepness"
-msgstr ""
+msgstr "Strmost jezer"
#: src/settings_translation_file.cpp
msgid "Lake threshold"
-msgstr ""
+msgstr "Strmost jezer"
#: src/settings_translation_file.cpp
msgid "Language"
@@ -4873,19 +5095,19 @@ msgstr "Jazyk"
#: src/settings_translation_file.cpp
msgid "Large cave depth"
-msgstr "Hloubka velké jeskyně"
+msgstr "Hloubka velkých jeskyní"
#: src/settings_translation_file.cpp
msgid "Large cave maximum number"
-msgstr ""
+msgstr "Horní hranice velkých jeskyní"
#: src/settings_translation_file.cpp
msgid "Large cave minimum number"
-msgstr ""
+msgstr "Spodní hranice velkých jeskyní"
#: src/settings_translation_file.cpp
msgid "Large cave proportion flooded"
-msgstr ""
+msgstr "Poměr zatopení velkých jeskyní"
#: src/settings_translation_file.cpp
msgid "Large chat console key"
@@ -4902,6 +5124,11 @@ msgid ""
"- Simple: only outer faces, if defined special_tiles are used\n"
"- Opaque: disable transparency"
msgstr ""
+"Styl listí:\n"
+"- Vícevrstevné: všechny plochy jsou viditelné\n"
+"- Jednoduché: pouze vnější plochy, pokud je definováno special_tiles, jsou "
+"použity\n"
+"- Neprůhledné: vypne průhlednost"
#: src/settings_translation_file.cpp
msgid "Left key"
@@ -4913,24 +5140,28 @@ msgid ""
"updated over\n"
"network."
msgstr ""
+"Frekvence aktualizece objektů na serveru.\n"
+"UrÄeno v délce jedné periody."
#: src/settings_translation_file.cpp
msgid ""
"Length of liquid waves.\n"
"Requires waving liquids to be enabled."
msgstr ""
+"Délka vln v kapalinách.\n"
+"Vyžaduje zapnuté vlnění kapalin."
#: src/settings_translation_file.cpp
msgid "Length of time between Active Block Modifier (ABM) execution cycles"
-msgstr ""
+msgstr "Frekvence vykonání cyklů Active Block Modifieru (ABM)"
#: src/settings_translation_file.cpp
msgid "Length of time between NodeTimer execution cycles"
-msgstr ""
+msgstr "Frekvence vykonání cyklů ÄŒasovaÄeBloku"
#: src/settings_translation_file.cpp
msgid "Length of time between active block management cycles"
-msgstr ""
+msgstr "Frekvence vykonání cyklů aktivní správy bloků"
#: src/settings_translation_file.cpp
msgid ""
@@ -4943,30 +5174,38 @@ msgid ""
"- info\n"
"- verbose"
msgstr ""
+"Úroveň ladících informací zapsaných do debug.txt:\n"
+"- <nothing> (žádné ladící informace)\n"
+"- none (zprávy budou vypsány bez patÅ™iÄné úrovnÄ›)\n"
+"- error (chyba)\n"
+"- warning (varování)\n"
+"- action (akce)\n"
+"- info (informace)\n"
+"- verbose (slovnÄ›)"
#: src/settings_translation_file.cpp
msgid "Light curve boost"
-msgstr ""
+msgstr "Posílení křivky světla"
#: src/settings_translation_file.cpp
msgid "Light curve boost center"
-msgstr ""
+msgstr "Posílení křivky světla Středy"
#: src/settings_translation_file.cpp
msgid "Light curve boost spread"
-msgstr ""
+msgstr "Posílení křivky světla Šíření"
#: src/settings_translation_file.cpp
msgid "Light curve gamma"
-msgstr ""
+msgstr "Křivka světla Gamma"
#: src/settings_translation_file.cpp
msgid "Light curve high gradient"
-msgstr ""
+msgstr "Křivka světla Vysoký gradient"
#: src/settings_translation_file.cpp
msgid "Light curve low gradient"
-msgstr ""
+msgstr "Křivka světla Nízký gradient"
#: src/settings_translation_file.cpp
msgid ""
@@ -4974,6 +5213,9 @@ msgid ""
"Only mapchunks completely within the mapgen limit are generated.\n"
"Value is stored per-world."
msgstr ""
+"Limit generování mapy v blocích, ve všech 6 směrech od (0,0,0).\n"
+"Generují se pouze kusy nacházející se kompletně v zadaném limitu.\n"
+"Tato hodnota je unikátní pro každý svět."
#: src/settings_translation_file.cpp
msgid ""
@@ -4983,39 +5225,43 @@ msgid ""
"- Downloads performed by main menu (e.g. mod manager).\n"
"Only has an effect if compiled with cURL."
msgstr ""
+"Omezuje poÄet paralelních HTTP požadavků. Má vliv na:\n"
+"- NaÄítání multimédií, pokud server používá nastavení remote_media.\n"
+"- Stahování seznamu serverů a oznámení na serveru.\n"
+"- Stahování prováděná přes hlavní nabídku (např. Správce modů).\n"
+"Má vliv pouze v případě kompilace přes cURL."
#: src/settings_translation_file.cpp
msgid "Liquid fluidity"
-msgstr ""
+msgstr "Tekutost kapalin"
#: src/settings_translation_file.cpp
msgid "Liquid fluidity smoothing"
-msgstr ""
+msgstr "Vyhlazení tekutosti kapalin"
#: src/settings_translation_file.cpp
msgid "Liquid loop max"
-msgstr ""
+msgstr "Horní hranice kapalinového cyklu"
#: src/settings_translation_file.cpp
msgid "Liquid queue purge time"
-msgstr ""
+msgstr "Doba vymazání fronty kapalin"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Liquid sinking"
-msgstr "Rychlost sestupu"
+msgstr "Rychlost stékání kapalin"
#: src/settings_translation_file.cpp
msgid "Liquid update interval in seconds."
-msgstr ""
+msgstr "Frekvence aktualizace kapalin v sekundách."
#: src/settings_translation_file.cpp
msgid "Liquid update tick"
-msgstr ""
+msgstr "Jeden cyklus aktualizace kapalin"
#: src/settings_translation_file.cpp
msgid "Load the game profiler"
-msgstr ""
+msgstr "NaÄíst profilování hry"
#: src/settings_translation_file.cpp
msgid ""
@@ -5023,19 +5269,21 @@ msgid ""
"Provides a /profiler command to access the compiled profile.\n"
"Useful for mod developers and server operators."
msgstr ""
+"NaÄíst profilování hry pro sbÄ›r profilovacích dat.\n"
+"Umožňuje použít příkaz /profiler pro přístup ke zkopilovanému profilu.\n"
+"UžiteÄné pro vývojáře modů a provozovatele serverů."
#: src/settings_translation_file.cpp
msgid "Loading Block Modifiers"
-msgstr ""
+msgstr "Loading Block Modifiery"
#: src/settings_translation_file.cpp
msgid "Lower Y limit of dungeons."
-msgstr ""
+msgstr "Spodní hranice Y pro žaláře."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Lower Y limit of floatlands."
-msgstr "Maximální poÄet emerge front"
+msgstr "Spodní hranice Y pro létající ostrovy."
#: src/settings_translation_file.cpp
msgid "Main menu script"
@@ -5045,57 +5293,46 @@ msgstr "Skript hlavní nabídky"
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 ""
+"Barva mlhy a oblohy záleží na denní době (svítání/soumrak) a na směru "
+"pohledu."
#: src/settings_translation_file.cpp
msgid "Makes all liquids opaque"
-msgstr ""
+msgstr "Udělá všechny kapaliny neprůhledné"
#: src/settings_translation_file.cpp
msgid "Map Compression Level for Disk Storage"
-msgstr ""
+msgstr "Úroveň komprese mapy pro pevné úložiště"
#: src/settings_translation_file.cpp
msgid "Map Compression Level for Network Transfer"
-msgstr ""
+msgstr "Úroveň komprese mapy pro přenost internetem"
#: src/settings_translation_file.cpp
msgid "Map directory"
-msgstr ""
+msgstr "Směr mapy"
#: src/settings_translation_file.cpp
msgid "Map generation attributes specific to Mapgen Carpathian."
-msgstr ""
+msgstr "Parametry generování mapy pro Generátor mapy - Carpathian."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Map generation attributes specific to Mapgen Flat.\n"
"Occasional lakes and hills can be added to the flat world."
msgstr ""
-"Globální parametry generování mapy.\n"
-"V mapgenu v6 ovládal příznak 'decorations' všechny dekorace kromě\n"
-"stromů a tropické trávy. V ostatních mapgenech tento příznak řídí\n"
-"všechny dekorace.\n"
-"Neuvedené příznaky zůstávají ve výchozím stavu.\n"
-"Příznaky zaÄínající na 'no' slouží k zakázání možnosti."
+"Parametry generování mapy pro Generátor mapy - Plocha.\n"
+"Do plochého svÄ›ta je možné pÅ™idat obÄasná jezera a kopce."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Map generation attributes specific to Mapgen Fractal.\n"
"'terrain' enables the generation of non-fractal terrain:\n"
"ocean, islands and underground."
msgstr ""
-"Globální parametry generování mapy.\n"
-"V mapgenu v6 ovládal příznak 'decorations' všechny dekorace kromě\n"
-"stromů a tropické trávy. V ostatních mapgenech tento příznak řídí\n"
-"všechny dekorace.\n"
-"Neuvedené příznaky zůstávají ve výchozím stavu.\n"
-"Příznaky zaÄínající na 'no' slouží k zakázání možnosti."
+"Parametry generování mapy pro Generátor mapy - Fraktál.\n"
+"\"terén\" umožňuje generování \"nefraktálového\" terénu:\n"
+"oceány, ostrovy a podzemí."
#: src/settings_translation_file.cpp
msgid ""
@@ -5106,148 +5343,145 @@ msgid ""
"to become shallower and occasionally dry.\n"
"'altitude_dry': Reduces humidity with altitude."
msgstr ""
+"Parametry generování mapy pro Generátor mapy - Údolí.\n"
+"„altitude_chill“: Snižuje teplotu s nadmořskou výškou.\n"
+"„humid_rivers“: Zvyšuje vlhkost podél řek.\n"
+"„vary_river_depth“: Pokud zapnuto, nízká vlhkost a vysoká teplota\n"
+"budou mít za následek mÄ›lÄí nebo místy úplnÄ› vyschlé Å™eky.\n"
+"„altitude_dry“: Snižuje vlhkost s nadmořskou výškou."
#: src/settings_translation_file.cpp
msgid "Map generation attributes specific to Mapgen v5."
-msgstr ""
+msgstr "Parametry generování mapy pro Generátor mapy v5."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Map generation attributes specific to Mapgen v6.\n"
"The 'snowbiomes' flag enables the new 5 biome system.\n"
"When the 'snowbiomes' flag is enabled jungles are automatically enabled and\n"
"the 'jungles' flag is ignored."
msgstr ""
-"Globální parametry generování mapy.\n"
-"V mapgenu v6 ovládal příznak 'decorations' všechny dekorace kromě\n"
-"stromů a tropické trávy. V ostatních mapgenech tento příznak řídí\n"
-"všechny dekorace.\n"
-"Neuvedené příznaky zůstávají ve výchozím stavu.\n"
-"Příznaky zaÄínající na 'no' slouží k zakázání možnosti."
+"Parametry generování mapy pro Generátor mapy v6.\n"
+"Nastavení \"snowbiomes\" umožňuje systém 5 biomů.\n"
+"Pokud je nastavení \"snowbiomes\" zapnuto, džungle jsou automaticky\n"
+"zapnuty a nastavení \"jungles\" je ignorováno."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Map generation attributes specific to Mapgen v7.\n"
"'ridges': Rivers.\n"
"'floatlands': Floating land masses in the atmosphere.\n"
"'caverns': Giant caves deep underground."
msgstr ""
-"Globální parametry generování mapy.\n"
-"V mapgenu v6 ovládal příznak 'decorations' všechny dekorace kromě\n"
-"stromů a tropické trávy. V ostatních mapgenech tento příznak řídí\n"
-"všechny dekorace.\n"
-"Neuvedené příznaky zůstávají ve výchozím stavu.\n"
-"Příznaky zaÄínající na 'no' slouží k zakázání možnosti."
+"Parametry generování mapy v Generátoru mapy v7.\n"
+"'hřebeny': Rivers.\n"
+"'létající ostrovy': Ostrovy vznášející se v prostoru.\n"
+"'jeskynní dutiny': Obrovské jeskyně hluboko v podzemí."
#: src/settings_translation_file.cpp
msgid "Map generation limit"
-msgstr ""
+msgstr "Limit generování mapy"
#: src/settings_translation_file.cpp
msgid "Map save interval"
msgstr "Interval ukládání mapy"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Map shadows update frames"
+msgstr "Doba aktualizace mapy"
+
+#: src/settings_translation_file.cpp
msgid "Mapblock limit"
-msgstr ""
+msgstr "Limit mapbloků"
#: src/settings_translation_file.cpp
msgid "Mapblock mesh generation delay"
-msgstr ""
+msgstr "Prodleva generování sítě mapbloků"
#: src/settings_translation_file.cpp
msgid "Mapblock mesh generator's MapBlock cache size in MB"
-msgstr ""
+msgstr "Velikost cache paměti v MB Generátoru mapy pro Mapbloky"
#: src/settings_translation_file.cpp
msgid "Mapblock unload timeout"
-msgstr ""
+msgstr "Časový limit pro vymazání Mapbloku z paměti"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Mapgen Carpathian"
-msgstr "Mapgen plochy"
+msgstr "Generátor mapy - Carpathian"
#: src/settings_translation_file.cpp
msgid "Mapgen Carpathian specific flags"
-msgstr ""
+msgstr "Nastavení pro Generátor mapy - Carpathian"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Mapgen Flat"
-msgstr "Mapgen plochy"
+msgstr "Generátor mapy - Plocha"
#: src/settings_translation_file.cpp
msgid "Mapgen Flat specific flags"
-msgstr ""
+msgstr "Nastavení Generátory mapy - Plocha"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Mapgen Fractal"
-msgstr "Mapgen plochy"
+msgstr "Generátor mapy - Fraktál"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Mapgen Fractal specific flags"
-msgstr "Mapgen údolí"
+msgstr "Nastavení pro Generátor mapy - Fraktál"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Mapgen V5"
-msgstr "Mapgen v5"
+msgstr "Generátor mapy V5"
#: src/settings_translation_file.cpp
msgid "Mapgen V5 specific flags"
-msgstr ""
+msgstr "Nastavení pro Generátor mapy v5"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Mapgen V6"
-msgstr "Mapgen v6"
+msgstr "Generátor mapy v6"
#: src/settings_translation_file.cpp
msgid "Mapgen V6 specific flags"
-msgstr ""
+msgstr "Nastavení pro Generátor mapy v6"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Mapgen V7"
-msgstr "Mapgen v7"
+msgstr "Generátor mapy v7"
#: src/settings_translation_file.cpp
msgid "Mapgen V7 specific flags"
-msgstr ""
+msgstr "Nastavení pro Generátor mapy v7"
#: src/settings_translation_file.cpp
msgid "Mapgen Valleys"
msgstr "Mapgen údolí"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Mapgen Valleys specific flags"
-msgstr "Mapgen údolí"
+msgstr "Nastavení pro Generátor mapy - Údolí"
#: src/settings_translation_file.cpp
msgid "Mapgen debug"
-msgstr "Ladění generátoru mapy"
+msgstr "Ladění Generátoru mapy"
#: src/settings_translation_file.cpp
msgid "Mapgen name"
-msgstr "Jméno generátoru mapy"
+msgstr "Jméno Generátoru mapy"
#: src/settings_translation_file.cpp
msgid "Max block generate distance"
-msgstr ""
+msgstr "Horní hranice vzdálenosti pro generování bloků"
#: src/settings_translation_file.cpp
msgid "Max block send distance"
-msgstr ""
+msgstr "Horní hranice vzdálenosti pro posílání bloků"
#: src/settings_translation_file.cpp
msgid "Max liquids processed per step."
-msgstr ""
+msgstr "Horní hranice poÄtu kapalin zpracovaných za jeden krok."
#: src/settings_translation_file.cpp
msgid "Max. clearobjects extra blocks"
@@ -5266,6 +5500,10 @@ msgid "Maximum FPS when the window is not focused, or when the game is paused."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Maximum distance to render shadows."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Maximum forceloaded blocks"
msgstr ""
@@ -5275,11 +5513,11 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Maximum limit of random number of large caves per mapchunk."
-msgstr ""
+msgstr "Horní hranice pro náhodný poÄet velkých jeskyní na kus mapy."
#: src/settings_translation_file.cpp
msgid "Maximum limit of random number of small caves per mapchunk."
-msgstr ""
+msgstr "Horní hranice pro náhodný poÄet malých jeskyní na kus mapy."
#: src/settings_translation_file.cpp
msgid ""
@@ -5371,7 +5609,15 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Maximum time in ms a file download (e.g. a mod download) may take."
+msgid ""
+"Maximum time a file download (e.g. a mod download) may take, stated in "
+"milliseconds."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum time an interactive request (e.g. server list fetch) may take, "
+"stated in milliseconds."
msgstr ""
#: src/settings_translation_file.cpp
@@ -5416,11 +5662,11 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Minimum limit of random number of large caves per mapchunk."
-msgstr ""
+msgstr "Spodní hranice pro náhodný poÄet velkých jeskyní na kus mapy."
#: src/settings_translation_file.cpp
msgid "Minimum limit of random number of small caves per mapchunk."
-msgstr ""
+msgstr "Spodní hranice pro náhodný poÄet malých jeskyní na kus mapy."
#: src/settings_translation_file.cpp
#, fuzzy
@@ -5436,7 +5682,7 @@ msgid "Mod channels"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Modifies the size of the hudbar elements."
+msgid "Modifies the size of the HUD elements."
msgstr ""
#: src/settings_translation_file.cpp
@@ -5448,6 +5694,11 @@ msgid "Monospace font size"
msgstr "Velikost neproporcionálního písma"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Monospace font size divisible by"
+msgstr "Velikost neproporcionálního písma"
+
+#: src/settings_translation_file.cpp
msgid "Mountain height noise"
msgstr ""
@@ -5569,7 +5820,7 @@ 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"
+"This is a trade-off between SQLite transaction overhead and\n"
"memory consumption (4096=100MB, as a rule of thumb)."
msgstr ""
@@ -5588,21 +5839,18 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Opaqueness (alpha) of the shadow behind the fallback font, between 0 and 255."
-msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid ""
"Open the pause menu when the window's focus is lost. Does not pause if a "
"formspec is\n"
"open."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Optional override for chat weblink color."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid ""
-"Path of the fallback font.\n"
-"If “freetype†setting is enabled: Must be a TrueType font.\n"
-"If “freetype†setting is disabled: Must be a bitmap or XML vectors font.\n"
+"Path of the fallback font. Must be a TrueType font.\n"
"This font will be used for certain languages or if the default font is "
"unavailable."
msgstr ""
@@ -5625,17 +5873,13 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Path to the default font.\n"
-"If “freetype†setting is enabled: Must be a TrueType font.\n"
-"If “freetype†setting is disabled: Must be a bitmap or XML vectors font.\n"
+"Path to the default font. Must be a TrueType font.\n"
"The fallback font will be used if the font cannot be loaded."
msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Path to the monospace font.\n"
-"If “freetype†setting is enabled: Must be a TrueType font.\n"
-"If “freetype†setting is disabled: Must be a bitmap or XML vectors font.\n"
+"Path to the monospace font. Must be a TrueType font.\n"
"This font is used for e.g. the console and profiler screen."
msgstr ""
@@ -5693,6 +5937,11 @@ msgid "Player versus player"
msgstr "HrÃ¡Ä proti hráÄi (PvP)"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Poisson filtering"
+msgstr "Bilineární filtrování"
+
+#: src/settings_translation_file.cpp
msgid ""
"Port to connect to (UDP).\n"
"Note that the port field in the main menu overrides this setting."
@@ -5737,14 +5986,14 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"Prometheus listener address.\n"
-"If minetest is compiled with ENABLE_PROMETHEUS option enabled,\n"
+"If Minetest is compiled with ENABLE_PROMETHEUS option enabled,\n"
"enable metrics listener for Prometheus on that address.\n"
-"Metrics can be fetch on http://127.0.0.1:30000/metrics"
+"Metrics can be fetched on http://127.0.0.1:30000/metrics"
msgstr ""
#: src/settings_translation_file.cpp
msgid "Proportion of large caves that contain liquid."
-msgstr ""
+msgstr "Poměr velkých jeskyní s kapalinami."
#: src/settings_translation_file.cpp
msgid ""
@@ -6059,6 +6308,35 @@ msgid "Set the maximum character length of a chat message sent by clients."
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Set the shadow strength.\n"
+"Lower value means lighter shadows, higher value means darker shadows."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set the soft shadow radius size.\n"
+"Lower values mean sharper shadows, bigger values mean softer shadows.\n"
+"Minimum value: 1.0; maximum value: 10.0"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set the tilt of Sun/Moon orbit in degrees.\n"
+"Value of 0 means no tilt / vertical orbit.\n"
+"Minimum value: 0.0; maximum value: 60.0"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid ""
+"Set to true to enable Shadow Mapping.\n"
+"Requires shaders to be enabled."
+msgstr ""
+"Zapne parallax occlusion mapping.\n"
+"Nastavení vyžaduje zapnuté shadery."
+
+#: src/settings_translation_file.cpp
#, fuzzy
msgid ""
"Set to true to enable waving leaves.\n"
@@ -6086,6 +6364,13 @@ msgstr ""
"Nastavení vyžaduje zapnuté shadery."
#: src/settings_translation_file.cpp
+msgid ""
+"Sets shadow texture quality to 32 bits.\n"
+"On false, 16 bits texture will be used.\n"
+"This can cause much more artifacts in the shadow."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Shader path"
msgstr "Cesta k shaderům"
@@ -6099,17 +6384,32 @@ msgstr ""
#: src/settings_translation_file.cpp
#, fuzzy
+msgid "Shadow filter quality"
+msgstr "Kvalita snímků obrazovky"
+
+#: src/settings_translation_file.cpp
+msgid "Shadow map max distance in nodes to render shadows"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Shadow map texture in 32 bits"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Shadow map texture size"
+msgstr "Minimální velikost textury k filtrování"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
"Shadow offset (in pixels) of the default font. If 0, then shadow will not be "
"drawn."
msgstr "Odsazení stínu písma, pokud je nastaveno na 0, stín nebude vykreslen."
#: src/settings_translation_file.cpp
-#, fuzzy
-msgid ""
-"Shadow offset (in pixels) of the fallback font. If 0, then shadow will not "
-"be drawn."
-msgstr "Odsazení stínu písma, pokud je nastaveno na 0, stín nebude vykreslen."
+msgid "Shadow strength"
+msgstr ""
#: src/settings_translation_file.cpp
msgid "Shape of the minimap. Enabled = round, disabled = square."
@@ -6130,8 +6430,9 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Show nametag backgrounds by default"
-msgstr ""
+#, fuzzy
+msgid "Show name tag backgrounds by default"
+msgstr "TuÄné písmo jako výchozí"
#: src/settings_translation_file.cpp
msgid "Shutdown message"
@@ -6146,6 +6447,12 @@ msgid ""
"Altering this value is for special usage, leaving it unchanged is\n"
"recommended."
msgstr ""
+"Velikost kusů mapy vytovřených Generátorem mapy v mapblocích (16 bloků).\n"
+"VAROVÃNÃ!: Hodnota vyšší než 5 nepÅ™ináší žádné zlepÅ¡ení\n"
+"a zvyšuje riziko problémů.\n"
+"Snížení hodnoty zvýší husotou jeskyní a žalářů.\n"
+"ZmÄ›na hodnoty je pro zvláštní případy, jinak je doporuÄeno\n"
+"nechat ji na výchozí hodnotě."
#: src/settings_translation_file.cpp
msgid ""
@@ -6155,6 +6462,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Sky Body Orbit Tilt"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Slice w"
msgstr ""
@@ -6164,11 +6475,11 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Small cave maximum number"
-msgstr ""
+msgstr "Horní hranice poÄtu malých jeskyní"
#: src/settings_translation_file.cpp
msgid "Small cave minimum number"
-msgstr ""
+msgstr "Spodní hranice poÄtu malých jeskyní"
#: src/settings_translation_file.cpp
msgid "Small-scale humidity variation for blending biomes on borders."
@@ -6210,18 +6521,13 @@ msgid "Sneaking speed, in nodes per second."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Sound"
-msgstr "Zvuk"
-
-#: src/settings_translation_file.cpp
#, fuzzy
-msgid "Special key"
-msgstr "Klávesa plížení"
+msgid "Soft shadow radius"
+msgstr "Průhlednost stínu písma"
#: src/settings_translation_file.cpp
-#, fuzzy
-msgid "Special key for climbing/descending"
-msgstr "Klávesa pro výstup/sestup"
+msgid "Sound"
+msgstr "Zvuk"
#: src/settings_translation_file.cpp
msgid ""
@@ -6240,6 +6546,14 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Spread a complete update of shadow map over given amount of frames.\n"
+"Higher values might make shadows laggy, lower values\n"
+"will consume more resources.\n"
+"Minimum value: 1; maximum value: 16"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Spread of light curve boost range.\n"
"Controls the width of the range to be boosted.\n"
"Standard deviation of the light curve boost Gaussian."
@@ -6348,6 +6662,13 @@ msgstr "Cesta k texturám"
#: src/settings_translation_file.cpp
msgid ""
+"Texture size to render the shadow map on.\n"
+"This must be a power of two.\n"
+"Bigger numbers create better shadows but it is also more expensive."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Textures on a node may be aligned either to the node or to the world.\n"
"The former mode suits better things like machines, furniture, etc., while\n"
"the latter makes stairs and microblocks fit surroundings better.\n"
@@ -6361,7 +6682,7 @@ msgid "The URL for the content repository"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "The deadzone of the joystick"
+msgid "The dead zone of the joystick"
msgstr ""
#: src/settings_translation_file.cpp
@@ -6419,7 +6740,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"The rendering back-end for Irrlicht.\n"
+"The rendering back-end.\n"
"A restart is required after changing this.\n"
"Note: On Android, stick with OGLES1 if unsure! App may fail to start "
"otherwise.\n"
@@ -6430,7 +6751,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"The sensitivity of the joystick axes for moving the\n"
-"ingame view frustum around."
+"in-game view frustum around."
msgstr ""
#: src/settings_translation_file.cpp
@@ -6526,6 +6847,10 @@ msgid "Touch screen threshold"
msgstr "Práh šumu pláže"
#: src/settings_translation_file.cpp
+msgid "Tradeoffs for performance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Trees noise"
msgstr ""
@@ -6596,7 +6921,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Use mip mapping to scale textures. May slightly increase performance,\n"
+"Use mipmapping to scale textures. May slightly increase performance,\n"
"especially when using a high resolution texture pack.\n"
"Gamma correct downscaling is not supported."
msgstr ""
@@ -6652,7 +6977,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Variation of number of caves."
-msgstr ""
+msgstr "Variace poÄtu jeskyní."
#: src/settings_translation_file.cpp
msgid ""
@@ -6711,7 +7036,7 @@ msgid "Viewing range"
msgstr "Vzdálenost dohledu"
#: src/settings_translation_file.cpp
-msgid "Virtual joystick triggers aux button"
+msgid "Virtual joystick triggers Aux1 button"
msgstr ""
#: src/settings_translation_file.cpp
@@ -6789,6 +7114,11 @@ msgid "Waving plants"
msgstr "Vlnění rostlin"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Weblink color"
+msgstr "Barva obrysu bloku"
+
+#: 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"
@@ -6809,23 +7139,15 @@ msgid ""
"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.\n"
+"memory. Powers of 2 are recommended. This setting is ONLY applied if\n"
+"bilinear/trilinear/anisotropic filtering is enabled.\n"
"This is also used as the base node texture size for world-aligned\n"
"texture autoscaling."
msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Whether FreeType fonts are used, requires FreeType support to be compiled "
-"in.\n"
-"If disabled, bitmap and XML vectors fonts are used instead."
-msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid ""
-"Whether nametag backgrounds should be shown by default.\n"
+"Whether name tag backgrounds should be shown by default.\n"
"Mods may still set a background."
msgstr ""
@@ -6867,8 +7189,9 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Width component of the initial window size."
-msgstr ""
+#, fuzzy
+msgid "Width component of the initial window size. Ignored in fullscreen mode."
+msgstr "Výšková Äást poÄáteÄní velikosti okna."
#: src/settings_translation_file.cpp
msgid "Width of the selection box lines around nodes."
@@ -6917,13 +7240,13 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Y of upper limit of large caves."
-msgstr "Maximální poÄet emerge front"
+msgstr "Hodnota Y pro horní hranici velkých jeskyní."
#: src/settings_translation_file.cpp
msgid "Y-distance over which caverns expand to full size."
msgstr ""
+"Vzdálenost Y, přes kterou se jeskynní dutiny rozšíří do plné velikosti."
#: src/settings_translation_file.cpp
msgid ""
@@ -6939,7 +7262,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Y-level of cavern upper limit."
-msgstr ""
+msgstr "Úroveň Y horní hranice jeskynních dutin."
#: src/settings_translation_file.cpp
msgid "Y-level of higher terrain that creates cliffs."
@@ -6954,34 +7277,23 @@ msgid "Y-level of seabed."
msgstr ""
#: src/settings_translation_file.cpp
-msgid ""
-"ZLib compression level to use when saving mapblocks to disk.\n"
-"-1 - Zlib's default compression level\n"
-"0 - no compresson, fastest\n"
-"9 - best compression, slowest\n"
-"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)"
-msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid ""
-"ZLib compression level to use when sending mapblocks to the client.\n"
-"-1 - Zlib's default compression level\n"
-"0 - no compresson, fastest\n"
-"9 - best compression, slowest\n"
-"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)"
+msgid "cURL file download timeout"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "cURL file download timeout"
-msgstr ""
+#, fuzzy
+msgid "cURL interactive timeout"
+msgstr "cURL timeout"
#: src/settings_translation_file.cpp
msgid "cURL parallel limit"
msgstr "cURL limit paralelních stahování"
-#: src/settings_translation_file.cpp
-msgid "cURL timeout"
-msgstr "cURL timeout"
+#~ msgid "- Creative Mode: "
+#~ msgstr "- Kreativní mód: "
+
+#~ msgid "- Damage: "
+#~ msgstr "- Zranění: "
#~ msgid ""
#~ "0 = parallax occlusion with slope information (faster).\n"
@@ -6990,6 +7302,9 @@ msgstr "cURL timeout"
#~ "0 = parallax occlusion s informacemi o sklonu (rychlejší).\n"
#~ "1 = mapování reliéfu (pomalejší, ale přesnější)."
+#~ msgid "Address / Port"
+#~ msgstr "Adresa / Port"
+
#~ msgid ""
#~ "Adjust the gamma encoding for the light tables. Higher numbers are "
#~ "brighter.\n"
@@ -7005,6 +7320,9 @@ msgstr "cURL timeout"
#~ msgid "Back"
#~ msgstr "Zpět"
+#~ msgid "Bits per pixel (aka color depth) in fullscreen mode."
+#~ msgstr "Bitová hloubka (bity na pixel) v celoobrazovkovém režimu."
+
#~ msgid "Bump Mapping"
#~ msgstr "Bump mapping"
@@ -7028,9 +7346,22 @@ msgstr "cURL timeout"
#~ msgid "Controls width of tunnels, a smaller value creates wider tunnels."
#~ msgstr "Ovládá šířku tunelů, menší hodnota vytváří širší tunely."
+#~ msgid "Credits"
+#~ msgstr "Autoři"
+
#~ msgid "Crosshair color (R,G,B)."
#~ msgstr "Barva zaměřovaÄe (R,G,B)."
+#~ msgid "Damage enabled"
+#~ msgstr "Zranění povoleno"
+
+#~ msgid ""
+#~ "Default timeout for cURL, stated in milliseconds.\n"
+#~ "Only has an effect if compiled with cURL."
+#~ msgstr ""
+#~ "Výchozí Äasový limit požadavku pro cURL, v milisekundách.\n"
+#~ "Má vliv, pouze pokud byl program sestaven s cURL."
+
#~ msgid ""
#~ "Defines areas of floatland smooth terrain.\n"
#~ "Smooth floatlands occur when noise > 0."
@@ -7088,12 +7419,27 @@ msgstr "cURL timeout"
#~ msgid "FPS in pause menu"
#~ msgstr "FPS v menu pauzy"
+#~ msgid "Fallback font shadow"
+#~ msgstr "Stín záložního písma"
+
+#~ msgid "Fallback font shadow alpha"
+#~ msgstr "Průhlednost stínu záložního písma"
+
+#~ msgid "Fallback font size"
+#~ msgstr "Velikost záložního písma"
+
#~ msgid "Floatland base height noise"
#~ msgstr "Šum základní výšky létajících ostrovů"
#~ msgid "Font shadow alpha (opaqueness, between 0 and 255)."
#~ msgstr "Neprůhlednost stínu písma (od 0 do 255)."
+#~ msgid "FreeType fonts"
+#~ msgstr "Písma Freetype"
+
+#~ msgid "Full screen BPP"
+#~ msgstr "Bitová hloubka v celoobrazovkovém režimu"
+
#~ msgid "Gamma"
#~ msgstr "Gamma"
@@ -7103,12 +7449,18 @@ msgstr "cURL timeout"
#~ msgid "Generate normalmaps"
#~ msgstr "Generovat normálové mapy"
+#~ msgid "High-precision FPU"
+#~ msgstr "VýpoÄty ve FPU s vysokou pÅ™esností"
+
#~ msgid "IPv6 support."
#~ msgstr ""
#~ "Nastavuje reálnou délku dne.\n"
#~ "NapÅ™.: 72 = 20 minut, 360 = 4 minuty, 1 = 24 hodin, 0 = Äas zůstává stále "
#~ "stejný."
+#~ msgid "Install: file: \"$1\""
+#~ msgstr "Instalace: soubor: \"$1\""
+
#, fuzzy
#~ msgid "Lava depth"
#~ msgstr "Hloubka velké jeskyně"
@@ -7132,6 +7484,9 @@ msgstr "cURL timeout"
#~ msgid "Minimap in surface mode, Zoom x4"
#~ msgstr "Minimapa v režimu povrch, Přiblížení x4"
+#~ msgid "Name / Password"
+#~ msgstr "Jméno / Heslo"
+
#~ msgid "Name/Password"
#~ msgstr "Jméno/Heslo"
@@ -7160,6 +7515,9 @@ msgstr "cURL timeout"
#~ msgid "Parallax occlusion scale"
#~ msgstr "Škála parallax occlusion"
+#~ msgid "PvP enabled"
+#~ msgstr "PvP (hrÃ¡Ä proti hráÄi) povoleno"
+
#~ msgid "Reset singleplayer world"
#~ msgstr "Reset místního světa"
@@ -7167,12 +7525,29 @@ msgstr "cURL timeout"
#~ msgid "Select Package File:"
#~ msgstr "Vybrat soubor s modem:"
+#, fuzzy
+#~ msgid ""
+#~ "Shadow offset (in pixels) of the fallback font. If 0, then shadow will "
+#~ "not be drawn."
+#~ msgstr ""
+#~ "Odsazení stínu písma, pokud je nastaveno na 0, stín nebude vykreslen."
+
+#~ msgid "Special"
+#~ msgstr "Speciální"
+
+#, fuzzy
+#~ msgid "Special key"
+#~ msgstr "Klávesa plížení"
+
#~ msgid "Start Singleplayer"
#~ msgstr "Start místní hry"
#~ msgid "Strength of generated normalmaps."
#~ msgstr "Síla vygenerovaných normálových map."
+#~ msgid "To enable shaders the OpenGL driver needs to be used."
+#~ msgstr "Pro zapnutí shaderů musíte používat OpenGL ovladaÄ."
+
#~ msgid "Toggle Cinematic"
#~ msgstr "Plynulá kamera"
@@ -7184,3 +7559,9 @@ msgstr "cURL timeout"
#~ msgid "Yes"
#~ msgstr "Ano"
+
+#~ msgid "You died."
+#~ msgstr "Zemřel jsi."
+
+#~ msgid "needs_fallback_font"
+#~ msgstr "no"
diff --git a/po/da/minetest.po b/po/da/minetest.po
index 5a11a9779..732d9f304 100644
--- a/po/da/minetest.po
+++ b/po/da/minetest.po
@@ -2,9 +2,9 @@ msgid ""
msgstr ""
"Project-Id-Version: Danish (Minetest)\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-02-23 19:03+0100\n"
-"PO-Revision-Date: 2020-03-31 10:14+0000\n"
-"Last-Translator: sfan5 <sfan5@live.de>\n"
+"POT-Creation-Date: 2022-01-25 23:19+0100\n"
+"PO-Revision-Date: 2022-01-26 12:17+0000\n"
+"Last-Translator: Thomas Wagner Nielsen <thomas@viawords.com>\n"
"Language-Team: Danish <https://hosted.weblate.org/projects/minetest/minetest/"
"da/>\n"
"Language: da\n"
@@ -12,7 +12,46 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 4.0-dev\n"
+"X-Generator: Weblate 4.11-dev\n"
+
+#: builtin/client/chatcommands.lua
+msgid "Clear the out chat queue"
+msgstr ""
+
+#: builtin/client/chatcommands.lua
+#, fuzzy
+msgid "Empty command."
+msgstr "Snakkekommandoer"
+
+#: builtin/client/chatcommands.lua
+#, fuzzy
+msgid "Exit to main menu"
+msgstr "Afslut til menu"
+
+#: builtin/client/chatcommands.lua
+msgid "Invalid command: "
+msgstr "Ugyldig kommando: "
+
+#: builtin/client/chatcommands.lua
+msgid "Issued command: "
+msgstr ""
+
+#: builtin/client/chatcommands.lua
+#, fuzzy
+msgid "List online players"
+msgstr "Enlig spiller"
+
+#: builtin/client/chatcommands.lua
+msgid "Online players: "
+msgstr "Online-spillere: "
+
+#: builtin/client/chatcommands.lua
+msgid "The out chat queue is now empty."
+msgstr ""
+
+#: builtin/client/chatcommands.lua
+msgid "This command is disabled by server."
+msgstr ""
#: builtin/client/death_formspec.lua src/client/game.cpp
msgid "Respawn"
@@ -22,11 +61,40 @@ msgstr "Genopstå"
msgid "You died"
msgstr "Du døde"
+#: builtin/common/chatcommands.lua
+msgid "Available commands:"
+msgstr "Tilgængelige kommandoer:"
+
+#: builtin/common/chatcommands.lua
+msgid "Available commands: "
+msgstr "Tilgængelige kommandoer: "
+
+#: builtin/common/chatcommands.lua
+msgid "Command not available: "
+msgstr ""
+
+#: builtin/common/chatcommands.lua
+msgid "Get help for commands"
+msgstr ""
+
+#: builtin/common/chatcommands.lua
+msgid ""
+"Use '.help <cmd>' to get more information, or '.help all' to list everything."
+msgstr ""
+
+#: builtin/common/chatcommands.lua
+msgid "[all | <cmd>]"
+msgstr ""
+
#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp
msgid "OK"
msgstr ""
#: builtin/fstk/ui.lua
+msgid "<none available>"
+msgstr ""
+
+#: builtin/fstk/ui.lua
#, fuzzy
msgid "An error occurred in a Lua script:"
msgstr "Der skete en fejl i Lua scriptet, muligvis af et mod:"
@@ -116,9 +184,8 @@ msgid "Mod:"
msgstr "Mod:"
#: builtin/mainmenu/dlg_config_world.lua
-#, fuzzy
msgid "No (optional) dependencies"
-msgstr "Valgfrie afhængigheder:"
+msgstr "Ingen (valgfrie) afhængigheder"
#: builtin/mainmenu/dlg_config_world.lua
msgid "No game description provided."
@@ -238,6 +305,13 @@ msgid "Install missing dependencies"
msgstr "Valgfrie afhængigheder:"
#: builtin/mainmenu/dlg_contentstore.lua
+#, fuzzy
+msgid "Install: Unsupported file type or broken archive"
+msgstr ""
+"Installer mod: Filtypen \"$1\" er enten ikke understøttet, ellers er arkivet "
+"korrupt"
+
+#: builtin/mainmenu/dlg_contentstore.lua
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Mods"
msgstr "Mods"
@@ -557,7 +631,7 @@ msgstr "< Tilbage til siden Indstillinger"
msgid "Browse"
msgstr "Gennemse"
-#: builtin/mainmenu/dlg_settings_advanced.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_settings.lua
msgid "Disabled"
msgstr "Deaktiveret"
@@ -583,7 +657,8 @@ msgid "Offset"
msgstr ""
#: builtin/mainmenu/dlg_settings_advanced.lua
-msgid "Persistance"
+#, fuzzy
+msgid "Persistence"
msgstr "Persistens"
#: builtin/mainmenu/dlg_settings_advanced.lua
@@ -602,7 +677,7 @@ msgstr "Gendan standard"
msgid "Scale"
msgstr "Skala"
-#: builtin/mainmenu/dlg_settings_advanced.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_online.lua
msgid "Search"
msgstr "Søg"
@@ -695,16 +770,6 @@ msgstr ""
"Installer mod: Kunne ikke finde passende mappe navn for samling af mods $1"
#: builtin/mainmenu/pkgmgr.lua
-msgid "Install: Unsupported file type \"$1\" or broken archive"
-msgstr ""
-"Installer mod: Filtypen \"$1\" er enten ikke understøttet, ellers er arkivet "
-"korrupt"
-
-#: builtin/mainmenu/pkgmgr.lua
-msgid "Install: file: \"$1\""
-msgstr "Installer mod: Fil: \"$1\""
-
-#: builtin/mainmenu/pkgmgr.lua
msgid "Unable to find a valid mod or modpack"
msgstr "Kan ikke finde en korrekt mod eller samling af mods"
@@ -738,6 +803,42 @@ msgstr ""
"Prøv at slå den offentlige serverliste fra og til, og tjek din internet "
"forbindelse."
+#: builtin/mainmenu/tab_about.lua
+msgid "About"
+msgstr ""
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Active Contributors"
+msgstr "Aktive bidragere"
+
+#: builtin/mainmenu/tab_about.lua
+#, fuzzy
+msgid "Active renderer:"
+msgstr "Aktivt objektafsendelsesinterval"
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Core Developers"
+msgstr "Primære udviklere"
+
+#: builtin/mainmenu/tab_about.lua
+#, fuzzy
+msgid "Open User Data Directory"
+msgstr "Vælg mappe"
+
+#: builtin/mainmenu/tab_about.lua
+msgid ""
+"Opens the directory that contains user-provided worlds, games, mods,\n"
+"and texture packs in a file manager / explorer."
+msgstr ""
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Previous Contributors"
+msgstr "Tidligere bidragere"
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Previous Core Developers"
+msgstr "Tidligere primære udviklere"
+
#: builtin/mainmenu/tab_content.lua
msgid "Browse online content"
msgstr "Gennemse online indhold"
@@ -778,37 +879,6 @@ msgstr "Afinstaller den valgte pakke"
msgid "Use Texture Pack"
msgstr "Anvend teksturpakker"
-#: builtin/mainmenu/tab_credits.lua
-msgid "Active Contributors"
-msgstr "Aktive bidragere"
-
-#: builtin/mainmenu/tab_credits.lua
-msgid "Core Developers"
-msgstr "Primære udviklere"
-
-#: builtin/mainmenu/tab_credits.lua
-msgid "Credits"
-msgstr "Skabt af"
-
-#: builtin/mainmenu/tab_credits.lua
-#, fuzzy
-msgid "Open User Data Directory"
-msgstr "Vælg mappe"
-
-#: builtin/mainmenu/tab_credits.lua
-msgid ""
-"Opens the directory that contains user-provided worlds, games, mods,\n"
-"and texture packs in a file manager / explorer."
-msgstr ""
-
-#: builtin/mainmenu/tab_credits.lua
-msgid "Previous Contributors"
-msgstr "Tidligere bidragere"
-
-#: builtin/mainmenu/tab_credits.lua
-msgid "Previous Core Developers"
-msgstr "Tidligere primære udviklere"
-
#: builtin/mainmenu/tab_local.lua
msgid "Announce Server"
msgstr "Meddelelsesserver"
@@ -837,7 +907,7 @@ msgstr "Host Server"
msgid "Install games from ContentDB"
msgstr ""
-#: builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
msgid "Name"
msgstr ""
@@ -849,7 +919,7 @@ msgstr "Ny"
msgid "No world created or selected!"
msgstr "Ingen verden oprettet eller valgt!"
-#: builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
#, fuzzy
msgid "Password"
msgstr "Nyt kodeord"
@@ -858,7 +928,7 @@ msgstr "Nyt kodeord"
msgid "Play Game"
msgstr "Start spil"
-#: builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
msgid "Port"
msgstr "Port"
@@ -881,8 +951,13 @@ msgid "Start Game"
msgstr "Vær vært for spil"
#: builtin/mainmenu/tab_online.lua
-msgid "Address / Port"
-msgstr "Adresse/port"
+#, fuzzy
+msgid "Address"
+msgstr "Adresse"
+
+#: builtin/mainmenu/tab_online.lua src/client/keycode.cpp
+msgid "Clear"
+msgstr "Ryd"
#: builtin/mainmenu/tab_online.lua
msgid "Connect"
@@ -892,35 +967,47 @@ msgstr "Forbind"
msgid "Creative mode"
msgstr "Kreativ tilstand"
+#. ~ PvP = Player versus Player
#: builtin/mainmenu/tab_online.lua
-msgid "Damage enabled"
-msgstr "Skade aktiveret"
+#, fuzzy
+msgid "Damage / PvP"
+msgstr "Skade"
#: builtin/mainmenu/tab_online.lua
msgid "Del. Favorite"
msgstr "Slet favorit"
#: builtin/mainmenu/tab_online.lua
-msgid "Favorite"
+#, fuzzy
+msgid "Favorites"
msgstr "Favorit"
#: builtin/mainmenu/tab_online.lua
+msgid "Incompatible Servers"
+msgstr ""
+
+#: builtin/mainmenu/tab_online.lua
#, fuzzy
msgid "Join Game"
msgstr "Vær vært for spil"
#: builtin/mainmenu/tab_online.lua
-msgid "Name / Password"
-msgstr "Navn/adgangskode"
-
-#: builtin/mainmenu/tab_online.lua
msgid "Ping"
msgstr "Ping"
-#. ~ PvP = Player versus Player
#: builtin/mainmenu/tab_online.lua
-msgid "PvP enabled"
-msgstr "Spiller mod spiller aktiveret"
+#, fuzzy
+msgid "Public Servers"
+msgstr "Meddelelsesserver"
+
+#: builtin/mainmenu/tab_online.lua
+msgid "Refresh"
+msgstr ""
+
+#: builtin/mainmenu/tab_online.lua
+#, fuzzy
+msgid "Server Description"
+msgstr "Serverbeskrivelse"
#: builtin/mainmenu/tab_settings.lua
msgid "2x"
@@ -964,11 +1051,32 @@ msgstr "Skift tastatur-bindinger"
msgid "Connected Glass"
msgstr "Forbundet glas"
+#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
+#, fuzzy
+msgid "Dynamic shadows"
+msgstr "Fontskygge"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Dynamic shadows: "
+msgstr ""
+
#: builtin/mainmenu/tab_settings.lua
msgid "Fancy Leaves"
msgstr "Smukke blade"
#: builtin/mainmenu/tab_settings.lua
+msgid "High"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Low"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Medium"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
#, fuzzy
msgid "Mipmap"
msgstr "Mipmap"
@@ -1042,10 +1150,6 @@ msgstr "Glat belysning"
msgid "Texturing:"
msgstr "Teksturering:"
-#: builtin/mainmenu/tab_settings.lua
-msgid "To enable shaders the OpenGL driver needs to be used."
-msgstr "For at aktivere dybdeskabere skal OpenGL-driveren bruges."
-
#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
msgid "Tone Mapping"
msgstr "Toneoversættelse"
@@ -1060,6 +1164,14 @@ msgid "Trilinear Filter"
msgstr "Tri-lineær filtréring"
#: builtin/mainmenu/tab_settings.lua
+msgid "Ultra High"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Very Low"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
msgid "Waving Leaves"
msgstr "Bølgende blade"
@@ -1072,7 +1184,7 @@ msgstr "Bølgende blade"
msgid "Waving Plants"
msgstr "Bølgende planter"
-#: src/client/client.cpp
+#: src/client/client.cpp src/client/game.cpp
msgid "Connection timed out."
msgstr "Forbindelses fejl (tidsfristen udløb)."
@@ -1101,8 +1213,8 @@ 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 \""
+msgid "Could not find or load game: "
+msgstr "Kunne ikke finde eller indlæse spillet: "
#: src/client/clientlauncher.cpp
msgid "Invalid gamespec."
@@ -1133,18 +1245,6 @@ msgstr ""
msgid "Provided world path doesn't exist: "
msgstr "Angivne sti til verdenen findes ikke: "
-#. ~ DO NOT TRANSLATE THIS LITERALLY!
-#. This is a special string. Put either "no" or "yes"
-#. into the translation field (literally).
-#. Choose "yes" if the language requires use of the fallback
-#. font, "no" otherwise.
-#. The fallback font is (normally) required for languages with
-#. non-Latin script, like Chinese.
-#. When in doubt, test your translation.
-#: src/client/fontengine.cpp
-msgid "needs_fallback_font"
-msgstr "no"
-
#: src/client/game.cpp
msgid ""
"\n"
@@ -1158,14 +1258,6 @@ msgid "- Address: "
msgstr "- Adresse: "
#: src/client/game.cpp
-msgid "- Creative Mode: "
-msgstr "- Kreativ tilstand: "
-
-#: src/client/game.cpp
-msgid "- Damage: "
-msgstr "- Skade: "
-
-#: src/client/game.cpp
msgid "- Mode: "
msgstr "- Tilstand: "
@@ -1188,6 +1280,16 @@ msgstr "- Servernavn: "
#: src/client/game.cpp
#, fuzzy
+msgid "A serialization error occurred:"
+msgstr "Der skete en fejl:"
+
+#: src/client/game.cpp
+#, c-format
+msgid "Access denied. Reason: %s"
+msgstr ""
+
+#: src/client/game.cpp
+#, fuzzy
msgid "Automatic forward disabled"
msgstr "Fremadtast"
@@ -1197,6 +1299,22 @@ msgid "Automatic forward enabled"
msgstr "Fremadtast"
#: src/client/game.cpp
+msgid "Block bounds hidden"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Block bounds shown for all blocks"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Block bounds shown for current block"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Block bounds shown for nearby blocks"
+msgstr ""
+
+#: src/client/game.cpp
#, fuzzy
msgid "Camera update disabled"
msgstr "Tast til ændring af kameraopdatering"
@@ -1207,6 +1325,10 @@ msgid "Camera update enabled"
msgstr "Tast til ændring af kameraopdatering"
#: src/client/game.cpp
+msgid "Can't show block bounds (need 'basic_debug' privilege)"
+msgstr ""
+
+#: src/client/game.cpp
msgid "Change Password"
msgstr "Skift kodeord"
@@ -1221,6 +1343,11 @@ msgid "Cinematic mode enabled"
msgstr "Tast for filmisk tilstand"
#: src/client/game.cpp
+#, fuzzy
+msgid "Client disconnected"
+msgstr "Klient modding"
+
+#: src/client/game.cpp
msgid "Client side scripting is disabled"
msgstr ""
@@ -1229,6 +1356,10 @@ msgid "Connecting to server..."
msgstr "Forbinder til server..."
#: src/client/game.cpp
+msgid "Connection failed for unknown reason"
+msgstr ""
+
+#: src/client/game.cpp
msgid "Continue"
msgstr "Fortsæt"
@@ -1266,6 +1397,11 @@ msgstr ""
"- %s: snakke (chat)\n"
#: src/client/game.cpp
+#, c-format
+msgid "Couldn't resolve address: %s"
+msgstr ""
+
+#: src/client/game.cpp
msgid "Creating client..."
msgstr "Opretter klient ..."
@@ -1402,6 +1538,11 @@ msgid "Minimap currently disabled by game or mod"
msgstr ""
#: src/client/game.cpp
+#, fuzzy
+msgid "Multiplayer"
+msgstr "Enlig spiller"
+
+#: src/client/game.cpp
msgid "Noclip mode disabled"
msgstr ""
@@ -1477,6 +1618,21 @@ msgid "Sound unmuted"
msgstr "Lydniveau"
#: src/client/game.cpp
+#, c-format
+msgid "The server is probably running a different version of %s."
+msgstr ""
+
+#: src/client/game.cpp
+#, c-format
+msgid "Unable to connect to %s because IPv6 is disabled"
+msgstr ""
+
+#: src/client/game.cpp
+#, c-format
+msgid "Unable to listen on %s because IPv6 is disabled"
+msgstr ""
+
+#: src/client/game.cpp
#, fuzzy, c-format
msgid "Viewing range changed to %d"
msgstr "Lydstyrke ændret til %d%%"
@@ -1548,10 +1704,6 @@ msgid "Caps Lock"
msgstr "Caps Lock"
#: src/client/keycode.cpp
-msgid "Clear"
-msgstr "Ryd"
-
-#: src/client/keycode.cpp
msgid "Control"
msgstr "Control"
@@ -1817,6 +1969,15 @@ msgstr ""
msgid "Minimap in texture mode"
msgstr ""
+#: src/gui/guiChatConsole.cpp
+#, fuzzy
+msgid "Failed to open webpage"
+msgstr "Kunne ikke hente $1"
+
+#: src/gui/guiChatConsole.cpp
+msgid "Opening webpage"
+msgstr ""
+
#: src/gui/guiConfirmRegistration.cpp src/gui/guiPasswordChange.cpp
msgid "Passwords do not match!"
msgstr "Kodeordene er ikke ens!"
@@ -1841,7 +2002,7 @@ msgstr "Fortsæt"
#: src/gui/guiKeyChangeMenu.cpp
#, fuzzy
-msgid "\"Special\" = climb down"
+msgid "\"Aux1\" = climb down"
msgstr "\"Brug\" = klatre ned"
#: src/gui/guiKeyChangeMenu.cpp
@@ -1854,10 +2015,18 @@ msgid "Automatic jumping"
msgstr ""
#: src/gui/guiKeyChangeMenu.cpp
+msgid "Aux1"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
msgid "Backward"
msgstr "Baglæns"
#: src/gui/guiKeyChangeMenu.cpp
+msgid "Block bounds"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
#, fuzzy
msgid "Change camera"
msgstr "Skift bindinger"
@@ -1951,10 +2120,6 @@ msgid "Sneak"
msgstr "Snige"
#: src/gui/guiKeyChangeMenu.cpp
-msgid "Special"
-msgstr ""
-
-#: src/gui/guiKeyChangeMenu.cpp
#, fuzzy
msgid "Toggle HUD"
msgstr "Omstil flyvning"
@@ -2021,8 +2186,9 @@ msgid "Muted"
msgstr "Lydløs"
#: src/gui/guiVolumeChange.cpp
-msgid "Sound Volume: "
-msgstr "Lydstyrke: "
+#, fuzzy, c-format
+msgid "Sound Volume: %d%%"
+msgstr "Lydstyrke: %d%%"
#. ~ Imperative, as in "Enter/type in text".
#. Don't forget the space.
@@ -2045,8 +2211,8 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"(Android) Use virtual joystick to trigger \"aux\" button.\n"
-"If enabled, virtual joystick will also tap \"aux\" button when out of main "
+"(Android) Use virtual joystick to trigger \"Aux1\" button.\n"
+"If enabled, virtual joystick will also tap \"Aux1\" button when out of main "
"circle."
msgstr ""
@@ -2257,6 +2423,10 @@ msgstr ""
"4k-skærme."
#: src/settings_translation_file.cpp
+msgid "Adjust the detected display density, used for scaling UI elements."
+msgstr ""
+
+#: src/settings_translation_file.cpp
#, c-format
msgid ""
"Adjusts the density of the floatland layer.\n"
@@ -2373,6 +2543,16 @@ msgid "Autoscaling mode"
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Aux1 key"
+msgstr "Hop-tast"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Aux1 key for climbing/descending"
+msgstr "Tast brugt til at klatre op/ned"
+
+#: src/settings_translation_file.cpp
msgid "Backward key"
msgstr "Tilbage-tast"
@@ -2422,10 +2602,6 @@ msgid "Biome noise"
msgstr "Biom støj"
#: src/settings_translation_file.cpp
-msgid "Bits per pixel (aka color depth) in fullscreen mode."
-msgstr "Bit per billedpunkt (a.k.a. farvedybde) i fuldskærmtilstand."
-
-#: src/settings_translation_file.cpp
msgid "Block send optimize distance"
msgstr ""
@@ -2533,6 +2709,16 @@ msgstr ""
#: src/settings_translation_file.cpp
#, fuzzy
+msgid "Chat command time message threshold"
+msgstr "Ørkenstøjtærskel"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Chat commands"
+msgstr "Snakkekommandoer"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
msgid "Chat font size"
msgstr "Skriftstørrelse"
@@ -2568,8 +2754,8 @@ msgid "Chat toggle key"
msgstr "Tast for snak (chat)"
#: src/settings_translation_file.cpp
-msgid "Chatcommands"
-msgstr "Snakkekommandoer"
+msgid "Chat weblinks"
+msgstr ""
#: src/settings_translation_file.cpp
msgid "Chunk size"
@@ -2588,6 +2774,12 @@ msgid "Clean transparent textures"
msgstr "Rene gennemsigtige teksturer"
#: src/settings_translation_file.cpp
+msgid ""
+"Clickable weblinks (middle-click or Ctrl+left-click) enabled in chat console "
+"output."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Client"
msgstr "Klient"
@@ -2634,6 +2826,11 @@ msgid "Colored fog"
msgstr "Farvet tåge"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Colored shadows"
+msgstr "Farvet tåge"
+
+#: src/settings_translation_file.cpp
msgid ""
"Comma-separated list of flags to hide in the content repository.\n"
"\"nonfree\" can be used to hide packages which do not qualify as 'free "
@@ -2668,6 +2865,22 @@ msgid "Command key"
msgstr "Kommandotast"
#: src/settings_translation_file.cpp
+msgid ""
+"Compression level to use when saving mapblocks to disk.\n"
+"-1 - use default compression level\n"
+"0 - least compression, fastest\n"
+"9 - best compression, slowest"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Compression level to use when sending mapblocks to the client.\n"
+"-1 - use default compression level\n"
+"0 - least compression, fastest\n"
+"9 - best compression, slowest"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Connect glass"
msgstr "Forbind glas"
@@ -2764,7 +2977,7 @@ msgstr "Crosshair alpha"
#, fuzzy
msgid ""
"Crosshair alpha (opaqueness, between 0 and 255).\n"
-"Also controls the object crosshair color"
+"This also applies to the object crosshair."
msgstr "Crosshair alpha (uigennemsigtighed, mellem 0 og 255)."
#: src/settings_translation_file.cpp
@@ -2844,11 +3057,10 @@ msgstr "Standard spil"
#: src/settings_translation_file.cpp
msgid ""
-"Default timeout for cURL, stated in milliseconds.\n"
-"Only has an effect if compiled with cURL."
+"Define shadow filtering quality.\n"
+"This simulates the soft shadows effect by applying a PCF or Poisson disk\n"
+"but also uses more resources."
msgstr ""
-"Standardtidsudløb for cURL, angivet i millisekunder.\n"
-"Har kun effekt hvis kompileret med cURL."
#: src/settings_translation_file.cpp
msgid "Defines areas where trees have apples."
@@ -2975,6 +3187,10 @@ msgid "Disallow empty passwords"
msgstr "Tillad ikke tomme adgangskoder"
#: src/settings_translation_file.cpp
+msgid "Display Density Scaling Factor"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Domain name of server, to be displayed in the serverlist."
msgstr "Domænenavn for server, til visning i serverlisten."
@@ -3022,6 +3238,19 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Enable Poisson disk filtering.\n"
+"On true uses Poisson disk to make \"soft shadows\". Otherwise uses PCF "
+"filtering."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable colored shadows.\n"
+"On true translucent nodes cast colored shadows. This is expensive."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Enable console window"
msgstr "Aktivér konsolvindue"
@@ -3148,6 +3377,12 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Enables tradeoffs that reduce CPU load or increase rendering performance\n"
+"at the expense of minor visual glitches that do not impact game playability."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Engine profiling data print interval"
msgstr "Udskrivningsinterval for motorprofileringsdata"
@@ -3188,18 +3423,6 @@ msgid "Fallback font path"
msgstr "Reserveskrifttype"
#: src/settings_translation_file.cpp
-msgid "Fallback font shadow"
-msgstr "Skygge for reserveskrifttypen"
-
-#: src/settings_translation_file.cpp
-msgid "Fallback font shadow alpha"
-msgstr "Skyggealfa for reserveskrifttypen"
-
-#: src/settings_translation_file.cpp
-msgid "Fallback font size"
-msgstr "Størrelse for reserveskrifttypen"
-
-#: src/settings_translation_file.cpp
msgid "Fast key"
msgstr "Hurtigtast"
@@ -3218,7 +3441,7 @@ msgstr "Hurtig bevægelse"
#: src/settings_translation_file.cpp
#, fuzzy
msgid ""
-"Fast movement (via the \"special\" key).\n"
+"Fast movement (via the \"Aux1\" key).\n"
"This requires the \"fast\" privilege on the server."
msgstr ""
"Hurtig bevægelse (via tast).\n"
@@ -3260,9 +3483,9 @@ msgstr "Filmisk toneoversættelse"
#, fuzzy
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."
+"which PNG optimizers usually discard, often resulting in dark or\n"
+"light edges to transparent textures. Apply a filter to clean that up\n"
+"at texture load time. This is automatically enabled if mipmapping is enabled."
msgstr ""
"Filtrerede teksturer kan blande RGB-værdier med fuldt gennemsigtige naboer,\n"
"som PNG-optimeringsprogrammer normalt fjerner, undertiden resulterende i "
@@ -3368,15 +3591,15 @@ msgid "Font size"
msgstr "Skriftstørrelse"
#: src/settings_translation_file.cpp
-msgid "Font size of the default font in point (pt)."
+msgid "Font size divisible by"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Font size of the fallback font in point (pt)."
+msgid "Font size of the default font where 1 unit = 1 pixel at 96 DPI"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Font size of the monospace font in point (pt)."
+msgid "Font size of the monospace font where 1 unit = 1 pixel at 96 DPI"
msgstr ""
#: src/settings_translation_file.cpp
@@ -3387,6 +3610,17 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"For pixel-style fonts that do not scale well, this ensures that font sizes "
+"used\n"
+"with this font will always be divisible by this value, in pixels. For "
+"instance,\n"
+"a pixel font 16 pixels tall should have this set to 16, so it will only ever "
+"be\n"
+"sized 16, 32, 48, etc., so a mod requesting a size of 25 will get 32."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Format of player chat messages. The following strings are valid "
"placeholders:\n"
"@name, @message, @timestamp (optional)"
@@ -3454,11 +3688,6 @@ msgid "Fraction of the visible distance at which fog starts to be rendered"
msgstr ""
#: src/settings_translation_file.cpp
-#, fuzzy
-msgid "FreeType fonts"
-msgstr "Freetype-skrifttyper"
-
-#: src/settings_translation_file.cpp
msgid ""
"From how far blocks are generated for clients, stated in mapblocks (16 "
"nodes)."
@@ -3487,10 +3716,6 @@ msgid "Full screen"
msgstr "Fuld skærm"
#: src/settings_translation_file.cpp
-msgid "Full screen BPP"
-msgstr "Fuldskærm BPP"
-
-#: src/settings_translation_file.cpp
msgid "Fullscreen mode."
msgstr "Fuldskærmstilstand."
@@ -3515,7 +3740,7 @@ msgstr "Globale tilbagekald"
msgid ""
"Global map generation attributes.\n"
"In Mapgen v6 the 'decorations' flag controls all decorations except trees\n"
-"and junglegrass, in all other mapgens this flag controls all decorations."
+"and jungle grass, in all other mapgens this flag controls all decorations."
msgstr ""
"Globale kortoprettelsesattributter.\n"
"I Mapgen v6 kontrollerer flaget »decorations« alle dekorationer undtagen "
@@ -3606,7 +3831,9 @@ msgid "Heat noise"
msgstr "Varmestøj"
#: src/settings_translation_file.cpp
-msgid "Height component of the initial window size."
+#, fuzzy
+msgid ""
+"Height component of the initial window size. Ignored in fullscreen mode."
msgstr "Højdekomponent for den oprindelige vinduestørrelse."
#: src/settings_translation_file.cpp
@@ -3619,10 +3846,6 @@ msgid "Height select noise"
msgstr "Højde Vælg støj"
#: src/settings_translation_file.cpp
-msgid "High-precision FPU"
-msgstr "Højpræcisions FPU"
-
-#: src/settings_translation_file.cpp
msgid "Hill steepness"
msgstr "Bakkestejlhed"
@@ -3864,8 +4087,7 @@ msgstr ""
#: src/settings_translation_file.cpp
#, fuzzy
msgid ""
-"If disabled, \"special\" key is used to fly fast if both fly and fast mode "
-"are\n"
+"If disabled, \"Aux1\" key is used to fly fast if both fly and fast mode are\n"
"enabled."
msgstr ""
"Hvis deaktiveret bruges »brug«-tasten til at flyve hurtig hvis både flyvning "
@@ -3893,8 +4115,8 @@ msgstr ""
#: src/settings_translation_file.cpp
#, fuzzy
msgid ""
-"If enabled, \"special\" key instead of \"sneak\" key is used for climbing "
-"down and\n"
+"If enabled, \"Aux1\" key instead of \"Sneak\" key is used for climbing down "
+"and\n"
"descending."
msgstr ""
"Hvis aktiveret bruges »brug«-tasten i stedet for »snig«-tasten til at klatre "
@@ -3951,6 +4173,12 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"If the execution of a chat command takes longer than this specified time in\n"
+"seconds, add the time information to the chat command message"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"If the file size of debug.txt exceeds the number of megabytes specified in\n"
"this setting when it is opened, the file is moved to debug.txt.1,\n"
"deleting an older debug.txt.1 if it exists.\n"
@@ -4003,7 +4231,8 @@ msgstr ""
"Er normalt kun krævet af kerne/indbygningsbidragydere"
#: src/settings_translation_file.cpp
-msgid "Instrument chatcommands on registration."
+#, fuzzy
+msgid "Instrument chat commands on registration."
msgstr "Udstyr chatkommandoer ved registrering."
#: src/settings_translation_file.cpp
@@ -4093,7 +4322,7 @@ msgid "Joystick button repetition interval"
msgstr "Joystick-knaps gentagelsesinterval"
#: src/settings_translation_file.cpp
-msgid "Joystick deadzone"
+msgid "Joystick dead zone"
msgstr ""
#: src/settings_translation_file.cpp
@@ -5164,11 +5393,6 @@ msgstr ""
"sete retning."
#: src/settings_translation_file.cpp
-msgid "Makes DirectX work with LuaJIT. Disable if it causes troubles."
-msgstr ""
-"FÃ¥r DirectX til at fungere med LuaJIT. Deaktiver hvis det giver problemer."
-
-#: src/settings_translation_file.cpp
msgid "Makes all liquids opaque"
msgstr ""
@@ -5262,6 +5486,11 @@ msgid "Map save interval"
msgstr "Interval for kortlagring"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Map shadows update frames"
+msgstr "Væskeopdateringsudløsning"
+
+#: src/settings_translation_file.cpp
msgid "Mapblock limit"
msgstr "Kortblokbegrænsning"
@@ -5385,6 +5614,10 @@ msgid "Maximum FPS when the window is not focused, or when the game is paused."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Maximum distance to render shadows."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Maximum forceloaded blocks"
msgstr ""
@@ -5490,7 +5723,15 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Maximum time in ms a file download (e.g. a mod download) may take."
+msgid ""
+"Maximum time a file download (e.g. a mod download) may take, stated in "
+"milliseconds."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum time an interactive request (e.g. server list fetch) may take, "
+"stated in milliseconds."
msgstr ""
#: src/settings_translation_file.cpp
@@ -5556,7 +5797,7 @@ msgid "Mod channels"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Modifies the size of the hudbar elements."
+msgid "Modifies the size of the HUD elements."
msgstr ""
#: src/settings_translation_file.cpp
@@ -5568,6 +5809,10 @@ msgid "Monospace font size"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Monospace font size divisible by"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Mountain height noise"
msgstr ""
@@ -5690,7 +5935,7 @@ 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"
+"This is a trade-off between SQLite transaction overhead and\n"
"memory consumption (4096=100MB, as a rule of thumb)."
msgstr ""
@@ -5709,21 +5954,18 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Opaqueness (alpha) of the shadow behind the fallback font, between 0 and 255."
-msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid ""
"Open the pause menu when the window's focus is lost. Does not pause if a "
"formspec is\n"
"open."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Optional override for chat weblink color."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid ""
-"Path of the fallback font.\n"
-"If “freetype†setting is enabled: Must be a TrueType font.\n"
-"If “freetype†setting is disabled: Must be a bitmap or XML vectors font.\n"
+"Path of the fallback font. Must be a TrueType font.\n"
"This font will be used for certain languages or if the default font is "
"unavailable."
msgstr ""
@@ -5746,17 +5988,13 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Path to the default font.\n"
-"If “freetype†setting is enabled: Must be a TrueType font.\n"
-"If “freetype†setting is disabled: Must be a bitmap or XML vectors font.\n"
+"Path to the default font. Must be a TrueType font.\n"
"The fallback font will be used if the font cannot be loaded."
msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Path to the monospace font.\n"
-"If “freetype†setting is enabled: Must be a TrueType font.\n"
-"If “freetype†setting is disabled: Must be a bitmap or XML vectors font.\n"
+"Path to the monospace font. Must be a TrueType font.\n"
"This font is used for e.g. the console and profiler screen."
msgstr ""
@@ -5815,6 +6053,11 @@ msgid "Player versus player"
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Poisson filtering"
+msgstr "Bilineær filtrering"
+
+#: src/settings_translation_file.cpp
msgid ""
"Port to connect to (UDP).\n"
"Note that the port field in the main menu overrides this setting."
@@ -5859,9 +6102,9 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"Prometheus listener address.\n"
-"If minetest is compiled with ENABLE_PROMETHEUS option enabled,\n"
+"If Minetest is compiled with ENABLE_PROMETHEUS option enabled,\n"
"enable metrics listener for Prometheus on that address.\n"
-"Metrics can be fetch on http://127.0.0.1:30000/metrics"
+"Metrics can be fetched on http://127.0.0.1:30000/metrics"
msgstr ""
#: src/settings_translation_file.cpp
@@ -6181,6 +6424,35 @@ msgid "Set the maximum character length of a chat message sent by clients."
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Set the shadow strength.\n"
+"Lower value means lighter shadows, higher value means darker shadows."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set the soft shadow radius size.\n"
+"Lower values mean sharper shadows, bigger values mean softer shadows.\n"
+"Minimum value: 1.0; maximum value: 10.0"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set the tilt of Sun/Moon orbit in degrees.\n"
+"Value of 0 means no tilt / vertical orbit.\n"
+"Minimum value: 0.0; maximum value: 60.0"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid ""
+"Set to true to enable Shadow Mapping.\n"
+"Requires shaders to be enabled."
+msgstr ""
+"Sat til true (sand) aktiverer bølgende blade.\n"
+"Kræver at dybdeskabere er aktiveret."
+
+#: src/settings_translation_file.cpp
#, fuzzy
msgid ""
"Set to true to enable waving leaves.\n"
@@ -6208,6 +6480,13 @@ msgstr ""
"Kræver at dybdeskabere er aktiveret."
#: src/settings_translation_file.cpp
+msgid ""
+"Sets shadow texture quality to 32 bits.\n"
+"On false, 16 bits texture will be used.\n"
+"This can cause much more artifacts in the shadow."
+msgstr ""
+
+#: src/settings_translation_file.cpp
#, fuzzy
msgid "Shader path"
msgstr "Shader sti"
@@ -6226,6 +6505,23 @@ msgstr ""
#: src/settings_translation_file.cpp
#, fuzzy
+msgid "Shadow filter quality"
+msgstr "Skærmbilledkvalitet"
+
+#: src/settings_translation_file.cpp
+msgid "Shadow map max distance in nodes to render shadows"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Shadow map texture in 32 bits"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Shadow map texture size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
"Shadow offset (in pixels) of the default font. If 0, then shadow will not be "
"drawn."
@@ -6233,12 +6529,8 @@ msgstr ""
"Forskydning for skrifttypeskygge, hvis 0 så vil skygge ikke blive tegnet."
#: src/settings_translation_file.cpp
-#, fuzzy
-msgid ""
-"Shadow offset (in pixels) of the fallback font. If 0, then shadow will not "
-"be drawn."
+msgid "Shadow strength"
msgstr ""
-"Forskydning for skrifttypeskygge, hvis 0 så vil skygge ikke blive tegnet."
#: src/settings_translation_file.cpp
msgid "Shape of the minimap. Enabled = round, disabled = square."
@@ -6259,7 +6551,7 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Show nametag backgrounds by default"
+msgid "Show name tag backgrounds by default"
msgstr ""
#: src/settings_translation_file.cpp
@@ -6284,6 +6576,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Sky Body Orbit Tilt"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Slice w"
msgstr ""
@@ -6339,18 +6635,13 @@ msgid "Sneaking speed, in nodes per second."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Sound"
-msgstr "Lyd"
-
-#: src/settings_translation_file.cpp
#, fuzzy
-msgid "Special key"
-msgstr "Snigetast"
+msgid "Soft shadow radius"
+msgstr "Alfa for skrifttypeskygge"
#: src/settings_translation_file.cpp
-#, fuzzy
-msgid "Special key for climbing/descending"
-msgstr "Tast brugt til at klatre op/ned"
+msgid "Sound"
+msgstr "Lyd"
#: src/settings_translation_file.cpp
msgid ""
@@ -6369,6 +6660,14 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Spread a complete update of shadow map over given amount of frames.\n"
+"Higher values might make shadows laggy, lower values\n"
+"will consume more resources.\n"
+"Minimum value: 1; maximum value: 16"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Spread of light curve boost range.\n"
"Controls the width of the range to be boosted.\n"
"Standard deviation of the light curve boost Gaussian."
@@ -6480,6 +6779,13 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Texture size to render the shadow map on.\n"
+"This must be a power of two.\n"
+"Bigger numbers create better shadows but it is also more expensive."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Textures on a node may be aligned either to the node or to the world.\n"
"The former mode suits better things like machines, furniture, etc., while\n"
"the latter makes stairs and microblocks fit surroundings better.\n"
@@ -6493,7 +6799,7 @@ msgid "The URL for the content repository"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "The deadzone of the joystick"
+msgid "The dead zone of the joystick"
msgstr ""
#: src/settings_translation_file.cpp
@@ -6552,7 +6858,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"The rendering back-end for Irrlicht.\n"
+"The rendering back-end.\n"
"A restart is required after changing this.\n"
"Note: On Android, stick with OGLES1 if unsure! App may fail to start "
"otherwise.\n"
@@ -6563,7 +6869,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"The sensitivity of the joystick axes for moving the\n"
-"ingame view frustum around."
+"in-game view frustum around."
msgstr ""
#: src/settings_translation_file.cpp
@@ -6659,6 +6965,10 @@ msgid "Touch screen threshold"
msgstr "Strandstøjtærskel"
#: src/settings_translation_file.cpp
+msgid "Tradeoffs for performance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Trees noise"
msgstr ""
@@ -6729,7 +7039,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Use mip mapping to scale textures. May slightly increase performance,\n"
+"Use mipmapping to scale textures. May slightly increase performance,\n"
"especially when using a high resolution texture pack.\n"
"Gamma correct downscaling is not supported."
msgstr ""
@@ -6845,7 +7155,7 @@ msgid "Viewing range"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Virtual joystick triggers aux button"
+msgid "Virtual joystick triggers Aux1 button"
msgstr ""
#: src/settings_translation_file.cpp
@@ -6923,6 +7233,10 @@ msgid "Waving plants"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Weblink color"
+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"
@@ -6943,23 +7257,15 @@ msgid ""
"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.\n"
+"memory. Powers of 2 are recommended. This setting is ONLY applied if\n"
+"bilinear/trilinear/anisotropic filtering is enabled.\n"
"This is also used as the base node texture size for world-aligned\n"
"texture autoscaling."
msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Whether FreeType fonts are used, requires FreeType support to be compiled "
-"in.\n"
-"If disabled, bitmap and XML vectors fonts are used instead."
-msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid ""
-"Whether nametag backgrounds should be shown by default.\n"
+"Whether name tag backgrounds should be shown by default.\n"
"Mods may still set a background."
msgstr ""
@@ -7001,8 +7307,9 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Width component of the initial window size."
-msgstr ""
+#, fuzzy
+msgid "Width component of the initial window size. Ignored in fullscreen mode."
+msgstr "Højdekomponent for den oprindelige vinduestørrelse."
#: src/settings_translation_file.cpp
msgid "Width of the selection box lines around nodes."
@@ -7088,34 +7395,23 @@ msgid "Y-level of seabed."
msgstr ""
#: src/settings_translation_file.cpp
-msgid ""
-"ZLib compression level to use when saving mapblocks to disk.\n"
-"-1 - Zlib's default compression level\n"
-"0 - no compresson, fastest\n"
-"9 - best compression, slowest\n"
-"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)"
-msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid ""
-"ZLib compression level to use when sending mapblocks to the client.\n"
-"-1 - Zlib's default compression level\n"
-"0 - no compresson, fastest\n"
-"9 - best compression, slowest\n"
-"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)"
+msgid "cURL file download timeout"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "cURL file download timeout"
-msgstr ""
+#, fuzzy
+msgid "cURL interactive timeout"
+msgstr "cURL-tidsudløb"
#: src/settings_translation_file.cpp
msgid "cURL parallel limit"
msgstr ""
-#: src/settings_translation_file.cpp
-msgid "cURL timeout"
-msgstr "cURL-tidsudløb"
+#~ msgid "- Creative Mode: "
+#~ msgstr "- Kreativ tilstand: "
+
+#~ msgid "- Damage: "
+#~ msgstr "- Skade: "
#~ msgid ""
#~ "0 = parallax occlusion with slope information (faster).\n"
@@ -7124,6 +7420,9 @@ msgstr "cURL-tidsudløb"
#~ "0 = parallax-okklusion med kurveinformation (hurtigere).\n"
#~ "1 = relief-oversættelse (langsommere, mere præcis)."
+#~ msgid "Address / Port"
+#~ msgstr "Adresse/port"
+
#~ msgid ""
#~ "Adjust the gamma encoding for the light tables. Higher numbers are "
#~ "brighter.\n"
@@ -7138,6 +7437,9 @@ msgstr "cURL-tidsudløb"
#~ msgid "Back"
#~ msgstr "Tilbage"
+#~ msgid "Bits per pixel (aka color depth) in fullscreen mode."
+#~ msgstr "Bit per billedpunkt (a.k.a. farvedybde) i fuldskærmtilstand."
+
#, fuzzy
#~ msgid "Bump Mapping"
#~ msgstr "Bump Mapping"
@@ -7156,14 +7458,27 @@ msgstr "cURL-tidsudløb"
#~ msgstr ""
#~ "Styrer bredden af tunneller. En lavere værdi giver bredere tunneller."
+#~ msgid "Credits"
+#~ msgstr "Skabt af"
+
#~ msgid "Crosshair color (R,G,B)."
#~ msgstr "Crosshair-farve (R,G,B)."
+#~ msgid "Damage enabled"
+#~ msgstr "Skade aktiveret"
+
#, fuzzy
#~ msgid "Darkness sharpness"
#~ msgstr "Søstejlhed"
#~ msgid ""
+#~ "Default timeout for cURL, stated in milliseconds.\n"
+#~ "Only has an effect if compiled with cURL."
+#~ msgstr ""
+#~ "Standardtidsudløb for cURL, angivet i millisekunder.\n"
+#~ "Har kun effekt hvis kompileret med cURL."
+
+#~ msgid ""
#~ "Defines sampling step of texture.\n"
#~ "A higher value results in smoother normal maps."
#~ msgstr ""
@@ -7214,9 +7529,25 @@ msgstr "cURL-tidsudløb"
#~ msgid "FPS in pause menu"
#~ msgstr "FPS i pausemenu"
+#~ msgid "Fallback font shadow"
+#~ msgstr "Skygge for reserveskrifttypen"
+
+#~ msgid "Fallback font shadow alpha"
+#~ msgstr "Skyggealfa for reserveskrifttypen"
+
+#~ msgid "Fallback font size"
+#~ msgstr "Størrelse for reserveskrifttypen"
+
#~ msgid "Font shadow alpha (opaqueness, between 0 and 255)."
#~ msgstr "Alfa for skrifttypeskygge (uigennemsigtighed, mellem 0 og 255)."
+#, fuzzy
+#~ msgid "FreeType fonts"
+#~ msgstr "Freetype-skrifttyper"
+
+#~ msgid "Full screen BPP"
+#~ msgstr "Fuldskærm BPP"
+
#~ msgid "Gamma"
#~ msgstr "Gamma"
@@ -7227,9 +7558,15 @@ msgstr "cURL-tidsudløb"
#~ msgid "Generate normalmaps"
#~ msgstr "Opret normalkort"
+#~ msgid "High-precision FPU"
+#~ msgstr "Højpræcisions FPU"
+
#~ msgid "IPv6 support."
#~ msgstr "Understøttelse af IPv6."
+#~ msgid "Install: file: \"$1\""
+#~ msgstr "Installer mod: Fil: \"$1\""
+
#, fuzzy
#~ msgid "Lava depth"
#~ msgstr "Dybde for stor hule"
@@ -7244,6 +7581,13 @@ msgstr "cURL-tidsudløb"
#~ msgid "Main menu style"
#~ msgstr "Hovedmenuskript"
+#~ msgid "Makes DirectX work with LuaJIT. Disable if it causes troubles."
+#~ msgstr ""
+#~ "FÃ¥r DirectX til at fungere med LuaJIT. Deaktiver hvis det giver problemer."
+
+#~ msgid "Name / Password"
+#~ msgstr "Navn/adgangskode"
+
#~ msgid "Name/Password"
#~ msgstr "Navn/kodeord"
@@ -7260,6 +7604,9 @@ msgstr "cURL-tidsudløb"
#~ msgid "Parallax occlusion scale"
#~ msgstr "Parallax-okklusion"
+#~ msgid "PvP enabled"
+#~ msgstr "Spiller mod spiller aktiveret"
+
#~ msgid "Reset singleplayer world"
#~ msgstr "Nulstil spillerverden"
@@ -7270,11 +7617,32 @@ msgstr "cURL-tidsudløb"
#~ msgid "Shadow limit"
#~ msgstr "Skygge grænse"
+#, fuzzy
+#~ msgid ""
+#~ "Shadow offset (in pixels) of the fallback font. If 0, then shadow will "
+#~ "not be drawn."
+#~ msgstr ""
+#~ "Forskydning for skrifttypeskygge, hvis 0 så vil skygge ikke blive tegnet."
+
+#, fuzzy
+#~ msgid "Special key"
+#~ msgstr "Snigetast"
+
#~ msgid "Start Singleplayer"
#~ msgstr "Enlig spiller"
+#~ msgid "To enable shaders the OpenGL driver needs to be used."
+#~ msgstr "For at aktivere dybdeskabere skal OpenGL-driveren bruges."
+
#~ msgid "Toggle Cinematic"
#~ msgstr "Aktiver filmisk"
#~ msgid "Yes"
#~ msgstr "Ja"
+
+#, fuzzy
+#~ msgid "You died."
+#~ msgstr "Du døde"
+
+#~ msgid "needs_fallback_font"
+#~ msgstr "no"
diff --git a/po/de/minetest.po b/po/de/minetest.po
index f3894fe6f..972359a32 100644
--- a/po/de/minetest.po
+++ b/po/de/minetest.po
@@ -2,8 +2,8 @@ msgid ""
msgstr ""
"Project-Id-Version: German (Minetest)\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-02-23 19:03+0100\n"
-"PO-Revision-Date: 2021-03-02 15:50+0000\n"
+"POT-Creation-Date: 2022-01-25 23:19+0100\n"
+"PO-Revision-Date: 2022-01-29 21:28+0000\n"
"Last-Translator: Wuzzy <almikes@aol.com>\n"
"Language-Team: German <https://hosted.weblate.org/projects/minetest/minetest/"
"de/>\n"
@@ -12,7 +12,43 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 4.5\n"
+"X-Generator: Weblate 4.11-dev\n"
+
+#: builtin/client/chatcommands.lua
+msgid "Clear the out chat queue"
+msgstr "Die ausgehende Chatwarteschlange leeren"
+
+#: builtin/client/chatcommands.lua
+msgid "Empty command."
+msgstr "Leerer Befehl."
+
+#: builtin/client/chatcommands.lua
+msgid "Exit to main menu"
+msgstr "Zum Hauptmenü verlassen"
+
+#: builtin/client/chatcommands.lua
+msgid "Invalid command: "
+msgstr "Ungültiger Befehl: "
+
+#: builtin/client/chatcommands.lua
+msgid "Issued command: "
+msgstr "Befehl erteilt: "
+
+#: builtin/client/chatcommands.lua
+msgid "List online players"
+msgstr "Online spielende Spieler auflisten"
+
+#: builtin/client/chatcommands.lua
+msgid "Online players: "
+msgstr "Online-Spieler: "
+
+#: builtin/client/chatcommands.lua
+msgid "The out chat queue is now empty."
+msgstr "Die ausgehende Chatwarteschlange ist nun leer."
+
+#: builtin/client/chatcommands.lua
+msgid "This command is disabled by server."
+msgstr "Dieser Befehl ist vom Server deaktiviert."
#: builtin/client/death_formspec.lua src/client/game.cpp
msgid "Respawn"
@@ -22,11 +58,42 @@ msgstr "Wiederbeleben"
msgid "You died"
msgstr "Sie sind gestorben"
+#: builtin/common/chatcommands.lua
+msgid "Available commands:"
+msgstr "Verfügbare Befehle:"
+
+#: builtin/common/chatcommands.lua
+msgid "Available commands: "
+msgstr "Verfügbare Befehle: "
+
+#: builtin/common/chatcommands.lua
+msgid "Command not available: "
+msgstr "Befehl nicht verfügbar: "
+
+#: builtin/common/chatcommands.lua
+msgid "Get help for commands"
+msgstr "Hilfe für Befehle erhalten"
+
+#: builtin/common/chatcommands.lua
+msgid ""
+"Use '.help <cmd>' to get more information, or '.help all' to list everything."
+msgstr ""
+"„.help <Befehl>“ benutzen, um mehr Informationen zu erhalten, oder „.help "
+"all“ benutzen, um alles aufzulisten."
+
+#: builtin/common/chatcommands.lua
+msgid "[all | <cmd>]"
+msgstr "[all | <Befehl>]"
+
#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp
msgid "OK"
msgstr "OK"
#: builtin/fstk/ui.lua
+msgid "<none available>"
+msgstr "<keine verfügbar>"
+
+#: builtin/fstk/ui.lua
msgid "An error occurred in a Lua script:"
msgstr "In einem Lua-Skript ist ein Fehler aufgetreten:"
@@ -230,6 +297,10 @@ msgid "Install missing dependencies"
msgstr "Fehlende Abhängigkeiten installieren"
#: builtin/mainmenu/dlg_contentstore.lua
+msgid "Install: Unsupported file type or broken archive"
+msgstr "Installation: Nicht unterstützter Dateityp oder kaputtes Archiv"
+
+#: builtin/mainmenu/dlg_contentstore.lua
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Mods"
msgstr "Mods"
@@ -272,7 +343,7 @@ msgstr "Deinstallieren"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Update"
-msgstr "Aktualisieren"
+msgstr "Update"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Update All [$1]"
@@ -490,7 +561,7 @@ msgstr "Sind Sie sicher, dass „$1“ gelöscht werden soll?"
#: builtin/mainmenu/dlg_delete_world.lua builtin/mainmenu/tab_local.lua
#: src/client/keycode.cpp
msgid "Delete"
-msgstr "Entfernen"
+msgstr "Löschen"
#: builtin/mainmenu/dlg_delete_content.lua
msgid "pkgmgr: failed to delete \"$1\""
@@ -536,7 +607,7 @@ msgstr "< Einstellungsseite"
msgid "Browse"
msgstr "Durchsuchen"
-#: builtin/mainmenu/dlg_settings_advanced.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_settings.lua
msgid "Disabled"
msgstr "Deaktiviert"
@@ -561,7 +632,7 @@ msgid "Offset"
msgstr "Versatz"
#: builtin/mainmenu/dlg_settings_advanced.lua
-msgid "Persistance"
+msgid "Persistence"
msgstr "Persistenz"
#: builtin/mainmenu/dlg_settings_advanced.lua
@@ -580,7 +651,7 @@ msgstr "Zurücksetzen"
msgid "Scale"
msgstr "Skalierung"
-#: builtin/mainmenu/dlg_settings_advanced.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_online.lua
msgid "Search"
msgstr "Suchen"
@@ -674,15 +745,6 @@ msgstr ""
"gefunden werden"
#: builtin/mainmenu/pkgmgr.lua
-msgid "Install: Unsupported file type \"$1\" or broken archive"
-msgstr ""
-"Installation: Nicht unterstützter Dateityp „$1“ oder fehlerhaftes Archiv"
-
-#: builtin/mainmenu/pkgmgr.lua
-msgid "Install: file: \"$1\""
-msgstr "Installation: Datei: „$1“"
-
-#: builtin/mainmenu/pkgmgr.lua
msgid "Unable to find a valid mod or modpack"
msgstr "Keine gültige Mod oder Modpack gefunden"
@@ -716,6 +778,42 @@ msgstr ""
"Versuchen Sie die öffentliche Serverliste neu zu laden und prüfen Sie Ihre "
"Internetverbindung."
+#: builtin/mainmenu/tab_about.lua
+msgid "About"
+msgstr "Über"
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Active Contributors"
+msgstr "Aktive Mitwirkende"
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Active renderer:"
+msgstr "Aktiver Renderer:"
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Core Developers"
+msgstr "Hauptentwickler"
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Open User Data Directory"
+msgstr "Benutzerdatenverzeichnis öffnen"
+
+#: builtin/mainmenu/tab_about.lua
+msgid ""
+"Opens the directory that contains user-provided worlds, games, mods,\n"
+"and texture packs in a file manager / explorer."
+msgstr ""
+"Öffnet das Verzeichnis, welches die Welten, Spiele, Mods und\n"
+"Texturenpakete des Benutzers enthält, im Datei-Manager."
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Previous Contributors"
+msgstr "Frühere Mitwirkende"
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Previous Core Developers"
+msgstr "Ehemalige Hauptentwickler"
+
#: builtin/mainmenu/tab_content.lua
msgid "Browse online content"
msgstr "Onlineinhalte durchsuchen"
@@ -756,38 +854,6 @@ msgstr "Paket deinstallieren"
msgid "Use Texture Pack"
msgstr "Texturenpaket benutzen"
-#: builtin/mainmenu/tab_credits.lua
-msgid "Active Contributors"
-msgstr "Aktive Mitwirkende"
-
-#: 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 "Open User Data Directory"
-msgstr "Benutzerdatenverzeichnis öffnen"
-
-#: builtin/mainmenu/tab_credits.lua
-msgid ""
-"Opens the directory that contains user-provided worlds, games, mods,\n"
-"and texture packs in a file manager / explorer."
-msgstr ""
-"Öffnet das Verzeichnis, welches die Welten, Spiele, Mods und\n"
-"Texturenpakete des Benutzers enthält, im Datei-Manager."
-
-#: builtin/mainmenu/tab_credits.lua
-msgid "Previous Contributors"
-msgstr "Frühere Mitwirkende"
-
-#: builtin/mainmenu/tab_credits.lua
-msgid "Previous Core Developers"
-msgstr "Ehemalige Hauptentwickler"
-
#: builtin/mainmenu/tab_local.lua
msgid "Announce Server"
msgstr "Server veröffentlichen"
@@ -816,7 +882,7 @@ msgstr "Server hosten"
msgid "Install games from ContentDB"
msgstr "Spiele aus ContentDB installieren"
-#: builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
msgid "Name"
msgstr "Name"
@@ -828,7 +894,7 @@ msgstr "Neu"
msgid "No world created or selected!"
msgstr "Keine Welt angegeben oder ausgewählt!"
-#: builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
msgid "Password"
msgstr "Passwort"
@@ -836,7 +902,7 @@ msgstr "Passwort"
msgid "Play Game"
msgstr "Spiel starten"
-#: builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
msgid "Port"
msgstr "Port"
@@ -857,8 +923,12 @@ msgid "Start Game"
msgstr "Spiel starten"
#: builtin/mainmenu/tab_online.lua
-msgid "Address / Port"
-msgstr "Adresse / Port"
+msgid "Address"
+msgstr "Adresse"
+
+#: builtin/mainmenu/tab_online.lua src/client/keycode.cpp
+msgid "Clear"
+msgstr "Clear"
#: builtin/mainmenu/tab_online.lua
msgid "Connect"
@@ -868,34 +938,42 @@ msgstr "Verbinden"
msgid "Creative mode"
msgstr "Kreativmodus"
+#. ~ PvP = Player versus Player
#: builtin/mainmenu/tab_online.lua
-msgid "Damage enabled"
-msgstr "Schaden aktiviert"
+msgid "Damage / PvP"
+msgstr "Schaden / PvP"
#: builtin/mainmenu/tab_online.lua
msgid "Del. Favorite"
msgstr "Favorit löschen"
#: builtin/mainmenu/tab_online.lua
-msgid "Favorite"
-msgstr "Favorit"
+msgid "Favorites"
+msgstr "Favoriten"
#: builtin/mainmenu/tab_online.lua
-msgid "Join Game"
-msgstr "Spiel beitreten"
+msgid "Incompatible Servers"
+msgstr "Inkompatible Server"
#: builtin/mainmenu/tab_online.lua
-msgid "Name / Password"
-msgstr "Name / Passwort"
+msgid "Join Game"
+msgstr "Spiel beitreten"
#: builtin/mainmenu/tab_online.lua
msgid "Ping"
msgstr "Latenz"
-#. ~ PvP = Player versus Player
#: builtin/mainmenu/tab_online.lua
-msgid "PvP enabled"
-msgstr "Spielerkampf aktiviert"
+msgid "Public Servers"
+msgstr "Öffentliche Server"
+
+#: builtin/mainmenu/tab_online.lua
+msgid "Refresh"
+msgstr "Neu laden"
+
+#: builtin/mainmenu/tab_online.lua
+msgid "Server Description"
+msgstr "Serverbeschreibung"
#: builtin/mainmenu/tab_settings.lua
msgid "2x"
@@ -937,11 +1015,31 @@ msgstr "Tastenbelegung"
msgid "Connected Glass"
msgstr "Verbundenes Glas"
+#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
+msgid "Dynamic shadows"
+msgstr "Dynamische Schatten"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Dynamic shadows: "
+msgstr "Dynamische Schatten: "
+
#: builtin/mainmenu/tab_settings.lua
msgid "Fancy Leaves"
msgstr "Schöne Blätter"
#: builtin/mainmenu/tab_settings.lua
+msgid "High"
+msgstr "Hoch"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Low"
+msgstr "Niedrig"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Medium"
+msgstr "Mittel"
+
+#: builtin/mainmenu/tab_settings.lua
msgid "Mipmap"
msgstr "Mipmap"
@@ -967,7 +1065,7 @@ msgstr "Blöcke umranden"
#: builtin/mainmenu/tab_settings.lua
msgid "None"
-msgstr "Keines"
+msgstr "Keine"
#: builtin/mainmenu/tab_settings.lua
msgid "Opaque Leaves"
@@ -1013,10 +1111,6 @@ msgstr "Weiches Licht"
msgid "Texturing:"
msgstr "Texturierung:"
-#: builtin/mainmenu/tab_settings.lua
-msgid "To enable shaders the OpenGL driver needs to be used."
-msgstr "Um Shader zu aktivieren, muss der OpenGL-Treiber genutzt werden."
-
#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
msgid "Tone Mapping"
msgstr "Dynamikkompression"
@@ -1030,6 +1124,14 @@ msgid "Trilinear Filter"
msgstr "Trilinearer Filter"
#: builtin/mainmenu/tab_settings.lua
+msgid "Ultra High"
+msgstr "Sehr hoch"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Very Low"
+msgstr "Sehr niedrig"
+
+#: builtin/mainmenu/tab_settings.lua
msgid "Waving Leaves"
msgstr "Wehende Blätter"
@@ -1041,7 +1143,7 @@ msgstr "Flüssigkeitswellen"
msgid "Waving Plants"
msgstr "Wehende Pflanzen"
-#: src/client/client.cpp
+#: src/client/client.cpp src/client/game.cpp
msgid "Connection timed out."
msgstr "Verbindungsfehler, Zeitüberschreitung."
@@ -1051,7 +1153,7 @@ msgstr "Fertig!"
#: src/client/client.cpp
msgid "Initializing nodes"
-msgstr "Initialisiere Blöcke"
+msgstr "Blöcke initialisieren"
#: src/client/client.cpp
msgid "Initializing nodes..."
@@ -1063,15 +1165,15 @@ msgstr "Lade Texturen …"
#: src/client/client.cpp
msgid "Rebuilding shaders..."
-msgstr "Shader wiederherstellen …"
+msgstr "Shader erneuern…"
#: src/client/clientlauncher.cpp
msgid "Connection error (timed out?)"
msgstr "Verbindungsfehler (Zeitüberschreitung?)"
#: src/client/clientlauncher.cpp
-msgid "Could not find or load game \""
-msgstr "Spiel konnte nicht gefunden oder geladen werden: \""
+msgid "Could not find or load game: "
+msgstr "Spiel konnte nicht gefunden oder geladen werden: "
#: src/client/clientlauncher.cpp
msgid "Invalid gamespec."
@@ -1101,18 +1203,6 @@ msgstr "Fehler beim Öffnen der angegebenen Passwortdatei: "
msgid "Provided world path doesn't exist: "
msgstr "Angegebener Weltpfad existiert nicht: "
-#. ~ DO NOT TRANSLATE THIS LITERALLY!
-#. This is a special string. Put either "no" or "yes"
-#. into the translation field (literally).
-#. Choose "yes" if the language requires use of the fallback
-#. font, "no" otherwise.
-#. The fallback font is (normally) required for languages with
-#. non-Latin script, like Chinese.
-#. When in doubt, test your translation.
-#: src/client/fontengine.cpp
-msgid "needs_fallback_font"
-msgstr "no"
-
#: src/client/game.cpp
msgid ""
"\n"
@@ -1126,14 +1216,6 @@ msgid "- Address: "
msgstr "- Adresse: "
#: src/client/game.cpp
-msgid "- Creative Mode: "
-msgstr "- Kreativmodus: "
-
-#: src/client/game.cpp
-msgid "- Damage: "
-msgstr "- Schaden: "
-
-#: src/client/game.cpp
msgid "- Mode: "
msgstr "- Modus: "
@@ -1155,6 +1237,15 @@ msgid "- Server Name: "
msgstr "- Servername: "
#: src/client/game.cpp
+msgid "A serialization error occurred:"
+msgstr "Ein Serialisierungsfehler ist aufgetreten:"
+
+#: src/client/game.cpp
+#, c-format
+msgid "Access denied. Reason: %s"
+msgstr "Zugriff verweigert. Grund: %s"
+
+#: src/client/game.cpp
msgid "Automatic forward disabled"
msgstr "Vorwärtsautomatik deaktiviert"
@@ -1163,6 +1254,22 @@ msgid "Automatic forward enabled"
msgstr "Vorwärtsautomatik aktiviert"
#: src/client/game.cpp
+msgid "Block bounds hidden"
+msgstr "Blockgrenzen verborgen"
+
+#: src/client/game.cpp
+msgid "Block bounds shown for all blocks"
+msgstr "Blockgrenzen für alle Blöcke angezeigt"
+
+#: src/client/game.cpp
+msgid "Block bounds shown for current block"
+msgstr "Blockgrenzen für aktuellen Block angezeigt"
+
+#: src/client/game.cpp
+msgid "Block bounds shown for nearby blocks"
+msgstr "Blockgrenzen für Blöcke in Nähe angezeigt"
+
+#: src/client/game.cpp
msgid "Camera update disabled"
msgstr "Kameraaktualisierung deaktiviert"
@@ -1171,6 +1278,11 @@ msgid "Camera update enabled"
msgstr "Kameraaktualisierung aktiviert"
#: src/client/game.cpp
+msgid "Can't show block bounds (need 'basic_debug' privilege)"
+msgstr ""
+"Blockgrenzen können nicht gezeigt werden („basic_debug“-Privileg benötigt)"
+
+#: src/client/game.cpp
msgid "Change Password"
msgstr "Passwort ändern"
@@ -1183,12 +1295,20 @@ msgid "Cinematic mode enabled"
msgstr "Filmmodus aktiviert"
#: src/client/game.cpp
+msgid "Client disconnected"
+msgstr "Client getrennt"
+
+#: src/client/game.cpp
msgid "Client side scripting is disabled"
msgstr "Clientseitige Skripte sind deaktiviert"
#: src/client/game.cpp
msgid "Connecting to server..."
-msgstr "Verbinde mit Server …"
+msgstr "Mit Server verbinden …"
+
+#: src/client/game.cpp
+msgid "Connection failed for unknown reason"
+msgstr "Verbindung aus unbekanntem Grund fehlgeschlagen"
#: src/client/game.cpp
msgid "Continue"
@@ -1228,6 +1348,11 @@ msgstr ""
"- %s: Chat\n"
#: src/client/game.cpp
+#, c-format
+msgid "Couldn't resolve address: %s"
+msgstr "Adresse konnte nicht aufgelöst werden: %s"
+
+#: src/client/game.cpp
msgid "Creating client..."
msgstr "Client erstellen …"
@@ -1301,7 +1426,7 @@ msgstr "Schnellmodus aktiviert"
#: src/client/game.cpp
msgid "Fast mode enabled (note: no 'fast' privilege)"
-msgstr "Schnellmodus aktiviert (Achtung: Kein „fast“-Privileg)"
+msgstr "Schnellmodus aktiviert (Hinweis: Kein „fast“-Privileg)"
#: src/client/game.cpp
msgid "Fly mode disabled"
@@ -1313,7 +1438,7 @@ msgstr "Flugmodus aktiviert"
#: src/client/game.cpp
msgid "Fly mode enabled (note: no 'fly' privilege)"
-msgstr "Flugmodus aktiviert (Achtung: Kein „fly“-Privileg)"
+msgstr "Flugmodus aktiviert (Hinweis: Kein „fly“-Privileg)"
#: src/client/game.cpp
msgid "Fog disabled"
@@ -1356,6 +1481,10 @@ msgid "Minimap currently disabled by game or mod"
msgstr "Übersichtskarte momentan von Spiel oder Mod deaktiviert"
#: src/client/game.cpp
+msgid "Multiplayer"
+msgstr "Mehrspieler"
+
+#: src/client/game.cpp
msgid "Noclip mode disabled"
msgstr "Geistmodus deaktiviert"
@@ -1365,7 +1494,7 @@ msgstr "Geistmodus aktiviert"
#: src/client/game.cpp
msgid "Noclip mode enabled (note: no 'noclip' privilege)"
-msgstr "Geistmodus aktiviert (Achtung: Kein „noclip“-Privileg)"
+msgstr "Geistmodus aktiviert (Hinweis: Kein „noclip“-Privileg)"
#: src/client/game.cpp
msgid "Node definitions..."
@@ -1429,6 +1558,22 @@ msgstr "Ton nicht mehr stumm"
#: src/client/game.cpp
#, c-format
+msgid "The server is probably running a different version of %s."
+msgstr "Auf dem Server läuft möglicherweise eine andere Version von %s."
+
+#: src/client/game.cpp
+#, c-format
+msgid "Unable to connect to %s because IPv6 is disabled"
+msgstr ""
+"Verbindung konnte nicht zu %s aufgebaut werden, weil IPv6 deaktiviert ist"
+
+#: src/client/game.cpp
+#, c-format
+msgid "Unable to listen on %s because IPv6 is disabled"
+msgstr "Konnte nicht auf %s lauschen, weil IPv6 deaktiviert ist"
+
+#: src/client/game.cpp
+#, c-format
msgid "Viewing range changed to %d"
msgstr "Sichtweite geändert auf %d"
@@ -1497,10 +1642,6 @@ msgid "Caps Lock"
msgstr "Feststellt."
#: src/client/keycode.cpp
-msgid "Clear"
-msgstr "Clear"
-
-#: src/client/keycode.cpp
msgid "Control"
msgstr "Strg"
@@ -1765,6 +1906,14 @@ msgstr "Übersichtskarte im Bodenmodus, Zoom ×%d"
msgid "Minimap in texture mode"
msgstr "Übersichtskarte im Texturmodus"
+#: src/gui/guiChatConsole.cpp
+msgid "Failed to open webpage"
+msgstr "Fehler beim Öffnen der Webseite"
+
+#: src/gui/guiChatConsole.cpp
+msgid "Opening webpage"
+msgstr "Webseite öffnen"
+
#: src/gui/guiConfirmRegistration.cpp src/gui/guiPasswordChange.cpp
msgid "Passwords do not match!"
msgstr "Passwörter stimmen nicht überein!"
@@ -1795,8 +1944,8 @@ msgid "Proceed"
msgstr "Fortsetzen"
#: src/gui/guiKeyChangeMenu.cpp
-msgid "\"Special\" = climb down"
-msgstr "„Spezial“ = runter"
+msgid "\"Aux1\" = climb down"
+msgstr "„Aux1“ = runter"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Autoforward"
@@ -1807,10 +1956,18 @@ msgid "Automatic jumping"
msgstr "Auto-Springen"
#: src/gui/guiKeyChangeMenu.cpp
+msgid "Aux1"
+msgstr "Aux1"
+
+#: src/gui/guiKeyChangeMenu.cpp
msgid "Backward"
msgstr "Rückwärts"
#: src/gui/guiKeyChangeMenu.cpp
+msgid "Block bounds"
+msgstr "Blockgrenzen"
+
+#: src/gui/guiKeyChangeMenu.cpp
msgid "Change camera"
msgstr "Kamerawechsel"
@@ -1901,10 +2058,6 @@ msgid "Sneak"
msgstr "Schleichen"
#: src/gui/guiKeyChangeMenu.cpp
-msgid "Special"
-msgstr "Spezial"
-
-#: src/gui/guiKeyChangeMenu.cpp
msgid "Toggle HUD"
msgstr "HUD an/aus"
@@ -1965,8 +2118,9 @@ msgid "Muted"
msgstr "Stumm"
#: src/gui/guiVolumeChange.cpp
-msgid "Sound Volume: "
-msgstr "Tonlautstärke: "
+#, c-format
+msgid "Sound Volume: %d%%"
+msgstr "Tonlautstärke: %d%%"
#. ~ Imperative, as in "Enter/type in text".
#. Don't forget the space.
@@ -1992,13 +2146,13 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"(Android) Use virtual joystick to trigger \"aux\" button.\n"
-"If enabled, virtual joystick will also tap \"aux\" button when out of main "
+"(Android) Use virtual joystick to trigger \"Aux1\" button.\n"
+"If enabled, virtual joystick will also tap \"Aux1\" button when out of main "
"circle."
msgstr ""
-"(Android) Den virtuellen Joystick benutzen, um die „Aux“-Taste zu "
+"(Android) Den virtuellen Joystick benutzen, um die „Aux1“-Taste zu "
"betätigen.\n"
-"Falls aktiviert, wird der virtuelle Joystick außerdem die „Aux“-Taste "
+"Falls aktiviert, wird der virtuelle Joystick außerdem die „Aux1“-Taste "
"drücken, wenn er sich außerhalb des Hauptkreises befindet."
#: src/settings_translation_file.cpp
@@ -2235,6 +2389,12 @@ msgid ""
msgstr "DPI des Bildschirms (nicht für X11/Android) z.B. für 4K-Bildschirme."
#: src/settings_translation_file.cpp
+msgid "Adjust the detected display density, used for scaling UI elements."
+msgstr ""
+"Die erfasste Anzeigendichte anpassen, benutzt für die Skalierung von UI-"
+"Elementen."
+
+#: src/settings_translation_file.cpp
#, c-format
msgid ""
"Adjusts the density of the floatland layer.\n"
@@ -2373,6 +2533,14 @@ msgid "Autoscaling mode"
msgstr "Autoskalierungsmodus"
#: src/settings_translation_file.cpp
+msgid "Aux1 key"
+msgstr "Aux1-Taste"
+
+#: src/settings_translation_file.cpp
+msgid "Aux1 key for climbing/descending"
+msgstr "Aux1-Taste zum Klettern/Sinken"
+
+#: src/settings_translation_file.cpp
msgid "Backward key"
msgstr "Rückwärtstaste"
@@ -2417,10 +2585,6 @@ msgid "Biome noise"
msgstr "Biomrauschen"
#: src/settings_translation_file.cpp
-msgid "Bits per pixel (aka color depth) in fullscreen mode."
-msgstr "Bits pro Pixel (Farbtiefe) im Vollbildmodus."
-
-#: src/settings_translation_file.cpp
msgid "Block send optimize distance"
msgstr "Distanz für Sendeoptimierungen von Kartenblöcken"
@@ -2527,6 +2691,14 @@ msgstr ""
"Wobei 0.0 die minimale Lichtstufe und 1.0 die höchste Lichtstufe ist."
#: src/settings_translation_file.cpp
+msgid "Chat command time message threshold"
+msgstr "Chatbefehlzeitnachrichtenschwellwert"
+
+#: src/settings_translation_file.cpp
+msgid "Chat commands"
+msgstr "Chatbefehle"
+
+#: src/settings_translation_file.cpp
msgid "Chat font size"
msgstr "Chat-Schriftgröße"
@@ -2559,8 +2731,8 @@ msgid "Chat toggle key"
msgstr "Taste zum Umschalten des Chatprotokolls"
#: src/settings_translation_file.cpp
-msgid "Chatcommands"
-msgstr "Chatbefehle"
+msgid "Chat weblinks"
+msgstr "Chatweblinks"
#: src/settings_translation_file.cpp
msgid "Chunk size"
@@ -2579,6 +2751,14 @@ msgid "Clean transparent textures"
msgstr "Transparente Texturen säubern"
#: src/settings_translation_file.cpp
+msgid ""
+"Clickable weblinks (middle-click or Ctrl+left-click) enabled in chat console "
+"output."
+msgstr ""
+"Anklickbare Weblinks (Mittelklick oder Strg+Linksklick) werden in der "
+"Chatkonsolenausgabe aktiviert."
+
+#: src/settings_translation_file.cpp
msgid "Client"
msgstr "Client"
@@ -2623,6 +2803,10 @@ msgid "Colored fog"
msgstr "Gefärbter Nebel"
#: src/settings_translation_file.cpp
+msgid "Colored shadows"
+msgstr "Gefärbte Schatten"
+
+#: src/settings_translation_file.cpp
msgid ""
"Comma-separated list of flags to hide in the content repository.\n"
"\"nonfree\" can be used to hide packages which do not qualify as 'free "
@@ -2666,6 +2850,31 @@ msgid "Command key"
msgstr "Befehlstaste"
#: src/settings_translation_file.cpp
+msgid ""
+"Compression level to use when saving mapblocks to disk.\n"
+"-1 - use default compression level\n"
+"0 - least compression, fastest\n"
+"9 - best compression, slowest"
+msgstr ""
+"Zu verwendendes Kompressionsniveau, wenn Kartenblöcke auf den Datenträger "
+"gespeichert werden.\n"
+"-1 - Standard-Kompressionsniveau benutzen\n"
+"0 - geringste Kompression, am schnellsten\n"
+"9 - beste Kompression, am langsamsten"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Compression level to use when sending mapblocks to the client.\n"
+"-1 - use default compression level\n"
+"0 - least compression, fastest\n"
+"9 - best compression, slowest"
+msgstr ""
+"Kompressionsniveau für Kartenblöcke, die zu Clients gesendet werden.\n"
+"-1 - Standard-Kompressionsniveau benutzen\n"
+"0 - keine Kompression, am schnellsten\n"
+"9 - beste Kompression, am langsamsten"
+
+#: src/settings_translation_file.cpp
msgid "Connect glass"
msgstr "Verbundenes Glas"
@@ -2766,10 +2975,10 @@ msgstr "Fadenkreuzundurchsichtigkeit"
#: src/settings_translation_file.cpp
msgid ""
"Crosshair alpha (opaqueness, between 0 and 255).\n"
-"Also controls the object crosshair color"
+"This also applies to the object crosshair."
msgstr ""
-"Fadenkreuzundurchsichtigkeit (Wert zwischen 0 und 255).\n"
-"Gilt auch für das Objektfadenkreuz"
+"Fadenkreuz-Alpha (Undurchsichtigkeit, zwischen 0 und 255).\n"
+"Gilt auch für das Objektfadenkreuz."
#: src/settings_translation_file.cpp
msgid "Crosshair color"
@@ -2851,11 +3060,14 @@ msgstr "Standardstapelgröße"
#: src/settings_translation_file.cpp
msgid ""
-"Default timeout for cURL, stated in milliseconds.\n"
-"Only has an effect if compiled with cURL."
+"Define shadow filtering quality.\n"
+"This simulates the soft shadows effect by applying a PCF or Poisson disk\n"
+"but also uses more resources."
msgstr ""
-"Standardzeitlimit für cURL, in Millisekunden.\n"
-"Hat nur eine Wirkung, wenn mit cURL kompiliert wurde."
+"Definiert die Schattenfilterqualität.\n"
+"Dies simuliert den weichen Schatteneffekt, indem eine PCF- oder Poisson-"
+"Scheibe angewendet wird,\n"
+"aber dies verbraucht auch mehr Ressourcen."
#: src/settings_translation_file.cpp
msgid "Defines areas where trees have apples."
@@ -2985,6 +3197,10 @@ msgid "Disallow empty passwords"
msgstr "Leere Passwörter verbieten"
#: src/settings_translation_file.cpp
+msgid "Display Density Scaling Factor"
+msgstr "Anzeigendichtenskalierungsfaktor"
+
+#: src/settings_translation_file.cpp
msgid "Domain name of server, to be displayed in the serverlist."
msgstr "Domainname des Servers. Wird in der Serverliste angezeigt."
@@ -3033,6 +3249,25 @@ msgstr ""
"Diese Unterstützung ist experimentell und die API kann sich ändern."
#: src/settings_translation_file.cpp
+msgid ""
+"Enable Poisson disk filtering.\n"
+"On true uses Poisson disk to make \"soft shadows\". Otherwise uses PCF "
+"filtering."
+msgstr ""
+"Aktiviert eine Poisson-Scheibenfilterung.\n"
+"Falls aktiv, werden Poisson-Scheiben verwendet, um „weiche Schatten“ zu "
+"erzeugen. Ansonsten wird die PCF-Filterung benutzt."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable colored shadows.\n"
+"On true translucent nodes cast colored shadows. This is expensive."
+msgstr ""
+"Aktiviert gefärbte Schatten. \n"
+"Falls aktiv, werden transluzente Blöcke gefärbte Schatten werfen. Dies ist "
+"rechenintensiv."
+
+#: src/settings_translation_file.cpp
msgid "Enable console window"
msgstr "Konsolenfenster aktivieren"
@@ -3177,6 +3412,16 @@ msgstr ""
"Die Änderung dieser Einstellung benötigt einen Neustart."
#: src/settings_translation_file.cpp
+msgid ""
+"Enables tradeoffs that reduce CPU load or increase rendering performance\n"
+"at the expense of minor visual glitches that do not impact game playability."
+msgstr ""
+"Aktiviert Kompromisse, die die CPU-Last verringern oder die Rendering-"
+"Leistung erhöhen\n"
+"auf Kosten kleinerer visueller Fehler, die die Spielbarkeit nicht "
+"beeinträchtigen."
+
+#: src/settings_translation_file.cpp
msgid "Engine profiling data print interval"
msgstr "Engine-Profiling-Datenausgabeintervall"
@@ -3224,18 +3469,6 @@ msgid "Fallback font path"
msgstr "Ersatzschriftpfad"
#: src/settings_translation_file.cpp
-msgid "Fallback font shadow"
-msgstr "Ersatzschriftschatten"
-
-#: src/settings_translation_file.cpp
-msgid "Fallback font shadow alpha"
-msgstr "Undurchsichtigkeit des Ersatzschriftschattens"
-
-#: src/settings_translation_file.cpp
-msgid "Fallback font size"
-msgstr "Ersatzschriftgröße"
-
-#: src/settings_translation_file.cpp
msgid "Fast key"
msgstr "Schnelltaste"
@@ -3253,10 +3486,10 @@ msgstr "Schnell bewegen"
#: src/settings_translation_file.cpp
msgid ""
-"Fast movement (via the \"special\" key).\n"
+"Fast movement (via the \"Aux1\" key).\n"
"This requires the \"fast\" privilege on the server."
msgstr ""
-"Schnelle Bewegung (mit der „Spezial“-Taste).\n"
+"Schnelle Bewegung (mit der „Aux1“-Taste).\n"
"Dazu wird das „fast“-Privileg auf dem Server benötigt."
#: src/settings_translation_file.cpp
@@ -3291,15 +3524,16 @@ msgstr "Filmische Dynamikkompression"
#: 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."
+"which PNG optimizers usually discard, often resulting in dark or\n"
+"light edges to transparent textures. Apply a filter to clean that up\n"
+"at texture load time. This is automatically enabled if mipmapping is enabled."
msgstr ""
-"Gefilterte Texturen können RGB-Werte mit 100% transparenten Nachbarn,\n"
+"Gefilterte Texturen können RGB-Werte mit voll transparenten Nachbarn,\n"
"die PNG-Optimierer üblicherweise verwerfen, mischen. Manchmal\n"
"resultiert dies in einer dunklen oder hellen Kante bei transparenten\n"
-"Texturen. Aktivieren Sie diesen Filter, um dies beim Laden der\n"
-"Texturen aufzuräumen."
+"Texturen. Aktivieren Sie einen Filter, um dies beim Laden der\n"
+"Texturen aufzuräumen. Dies wird automatisch aktiviert, falls Mipmapping "
+"aktiviert ist."
#: src/settings_translation_file.cpp
msgid "Filtering"
@@ -3392,16 +3626,17 @@ msgid "Font size"
msgstr "Schriftgröße"
#: src/settings_translation_file.cpp
-msgid "Font size of the default font in point (pt)."
-msgstr "Schriftgröße der Standardschrift in Punkt (pt)."
+msgid "Font size divisible by"
+msgstr "Schriftgröße teilbar durch"
#: src/settings_translation_file.cpp
-msgid "Font size of the fallback font in point (pt)."
-msgstr "Schriftgröße der Ersatzschrift in Punkt (pt)."
+msgid "Font size of the default font where 1 unit = 1 pixel at 96 DPI"
+msgstr "Schriftgröße der Standardschrift, wobei 1 Einheit = 1 Pixel bei 96 DPI"
#: src/settings_translation_file.cpp
-msgid "Font size of the monospace font in point (pt)."
-msgstr "Schriftgröße der Festbreitenschrift in Punkt (pt)."
+msgid "Font size of the monospace font where 1 unit = 1 pixel at 96 DPI"
+msgstr ""
+"Schriftgröße der Festbreitenschrift, wobei 1 Einheit = 1 Pixel bei 96 DPI"
#: src/settings_translation_file.cpp
msgid ""
@@ -3414,6 +3649,26 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"For pixel-style fonts that do not scale well, this ensures that font sizes "
+"used\n"
+"with this font will always be divisible by this value, in pixels. For "
+"instance,\n"
+"a pixel font 16 pixels tall should have this set to 16, so it will only ever "
+"be\n"
+"sized 16, 32, 48, etc., so a mod requesting a size of 25 will get 32."
+msgstr ""
+"Bei Schriften im Pixelstil, die sich nicht gut skalieren lassen, stellt dies "
+"sicher,\n"
+"dass die mit dieser Schrift verwendeten Schriftgrößen immer durch diesen "
+"Wert\n"
+"in Pixeln teilbar ist. Zum Beispiel: Eine Pixelschrift mit einer Höhe von 16 "
+"Pixeln\n"
+"sollte auf 16 gesetzt werden, so dass sie immer nur die Größe 16, 32, 48 "
+"usw. hat,\n"
+"damit eine Mod, die eine Größe von 25 anfordert, 32 erhält."
+
+#: src/settings_translation_file.cpp
+msgid ""
"Format of player chat messages. The following strings are valid "
"placeholders:\n"
"@name, @message, @timestamp (optional)"
@@ -3483,10 +3738,6 @@ msgstr ""
"rendern"
#: src/settings_translation_file.cpp
-msgid "FreeType fonts"
-msgstr "FreeType-Schriften"
-
-#: src/settings_translation_file.cpp
msgid ""
"From how far blocks are generated for clients, stated in mapblocks (16 "
"nodes)."
@@ -3524,10 +3775,6 @@ msgid "Full screen"
msgstr "Vollbild"
#: src/settings_translation_file.cpp
-msgid "Full screen BPP"
-msgstr "Vollbildfarbtiefe"
-
-#: src/settings_translation_file.cpp
msgid "Fullscreen mode."
msgstr "Vollbildmodus."
@@ -3551,7 +3798,7 @@ msgstr "Globale Rückruffunktionen"
msgid ""
"Global map generation attributes.\n"
"In Mapgen v6 the 'decorations' flag controls all decorations except trees\n"
-"and junglegrass, in all other mapgens this flag controls all decorations."
+"and jungle grass, in all other mapgens this flag controls all decorations."
msgstr ""
"Globale Kartengenerierungsattribute.\n"
"Im Kartengenerator v6 wird das „decorations“-Flag alle Dekorationen außer\n"
@@ -3641,8 +3888,10 @@ msgid "Heat noise"
msgstr "Hitzenrauschen"
#: src/settings_translation_file.cpp
-msgid "Height component of the initial window size."
-msgstr "Höhenkomponente der anfänglichen Fenstergröße."
+msgid ""
+"Height component of the initial window size. Ignored in fullscreen mode."
+msgstr ""
+"Höhenkomponente der anfänglichen Fenstergröße. Im Vollbildmodus ignoriert."
#: src/settings_translation_file.cpp
msgid "Height noise"
@@ -3653,10 +3902,6 @@ msgid "Height select noise"
msgstr "Höhenauswahlrauschen"
#: src/settings_translation_file.cpp
-msgid "High-precision FPU"
-msgstr "Hochpräzisions-FPU"
-
-#: src/settings_translation_file.cpp
msgid "Hill steepness"
msgstr "Hügelsteilheilt"
@@ -3902,11 +4147,10 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"If disabled, \"special\" key is used to fly fast if both fly and fast mode "
-"are\n"
+"If disabled, \"Aux1\" key is used to fly fast if both fly and fast mode are\n"
"enabled."
msgstr ""
-"Falls deaktiviert, wird die „Spezial“-Taste benutzt, um schnell zu fliegen,\n"
+"Falls deaktiviert, wird die „Aux1“-Taste benutzt, um schnell zu fliegen,\n"
"wenn sowohl Flug- als auch Schnellmodus aktiviert sind."
#: src/settings_translation_file.cpp
@@ -3936,11 +4180,11 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"If enabled, \"special\" key instead of \"sneak\" key is used for climbing "
-"down and\n"
+"If enabled, \"Aux1\" key instead of \"Sneak\" key is used for climbing down "
+"and\n"
"descending."
msgstr ""
-"Falls aktiviert, wird die „Spezial“-Taste statt der „Schleichen“-Taste zum\n"
+"Falls aktiviert, wird die „Aux1“-Taste statt der „Schleichen“-Taste zum\n"
"Herunterklettern und Sinken benutzt."
#: src/settings_translation_file.cpp
@@ -4002,6 +4246,15 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"If the execution of a chat command takes longer than this specified time in\n"
+"seconds, add the time information to the chat command message"
+msgstr ""
+"Falls die Ausführung eines Chatbefehls länger als diese angegebene Zeit in\n"
+"Sekunden braucht, wird die Zeitinformation an die Chatbefehlsnachricht "
+"angehängt"
+
+#: src/settings_translation_file.cpp
+msgid ""
"If the file size of debug.txt exceeds the number of megabytes specified in\n"
"this setting when it is opened, the file is moved to debug.txt.1,\n"
"deleting an older debug.txt.1 if it exists.\n"
@@ -4061,7 +4314,7 @@ msgstr ""
"Dies wird normalerweise nur von Haupt-/builtin-Entwicklern benötigt"
#: src/settings_translation_file.cpp
-msgid "Instrument chatcommands on registration."
+msgid "Instrument chat commands on registration."
msgstr "Chatbefehle bei ihrer Registrierung instrumentieren."
#: src/settings_translation_file.cpp
@@ -4157,7 +4410,7 @@ msgid "Joystick button repetition interval"
msgstr "Joystick-Button-Wiederholungsrate"
#: src/settings_translation_file.cpp
-msgid "Joystick deadzone"
+msgid "Joystick dead zone"
msgstr "Joystick-Totbereich"
#: src/settings_translation_file.cpp
@@ -5185,12 +5438,6 @@ msgstr ""
"und Blickrichtung abhängig machen."
#: src/settings_translation_file.cpp
-msgid "Makes DirectX work with LuaJIT. Disable if it causes troubles."
-msgstr ""
-"DirectX mit LuaJIT zusammenarbeiten lassen. Deaktivieren Sie dies, falls es "
-"Probleme verursacht."
-
-#: src/settings_translation_file.cpp
msgid "Makes all liquids opaque"
msgstr "Macht alle Flüssigkeiten undurchsichtig"
@@ -5283,6 +5530,10 @@ msgid "Map save interval"
msgstr "Speicherintervall der Karte"
#: src/settings_translation_file.cpp
+msgid "Map shadows update frames"
+msgstr "Kartenschatten-Aktualisierungsframes"
+
+#: src/settings_translation_file.cpp
msgid "Mapblock limit"
msgstr "Kartenblock-Grenze"
@@ -5393,6 +5644,10 @@ msgstr ""
"Spiel pausiert ist."
#: src/settings_translation_file.cpp
+msgid "Maximum distance to render shadows."
+msgstr "Maximale Distanz zum Rendern von Schatten."
+
+#: src/settings_translation_file.cpp
msgid "Maximum forceloaded blocks"
msgstr "Maximal zwangsgeladene Kartenblöcke"
@@ -5528,10 +5783,20 @@ msgstr ""
"zu begrenzen."
#: src/settings_translation_file.cpp
-msgid "Maximum time in ms a file download (e.g. a mod download) may take."
+msgid ""
+"Maximum time a file download (e.g. a mod download) may take, stated in "
+"milliseconds."
+msgstr ""
+"Maximale Zeit in Millisekunden, die das Herunterladen einer Datei (z.B. "
+"einer Mod) dauern darf."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum time an interactive request (e.g. server list fetch) may take, "
+"stated in milliseconds."
msgstr ""
-"Maximale Zeit in ms, die das Herunterladen einer Datei (z.B. einer Mod) "
-"dauern darf."
+"Maximale Zeit in Millisekunden, die eine interaktive Anfrage (z.B. "
+"Serverlistenanfrage) brauchen darf."
#: src/settings_translation_file.cpp
msgid "Maximum users"
@@ -5597,8 +5862,8 @@ msgid "Mod channels"
msgstr "Mod-Kanäle"
#: src/settings_translation_file.cpp
-msgid "Modifies the size of the hudbar elements."
-msgstr "Modifiziert die Größe der HUD-Leistenelemente."
+msgid "Modifies the size of the HUD elements."
+msgstr "Modifiziert die Größe der HUD-Elemente."
#: src/settings_translation_file.cpp
msgid "Monospace font path"
@@ -5609,6 +5874,10 @@ msgid "Monospace font size"
msgstr "Größe der Festbreitenschrift"
#: src/settings_translation_file.cpp
+msgid "Monospace font size divisible by"
+msgstr "Festbreitenschriftgröße teilbar durch"
+
+#: src/settings_translation_file.cpp
msgid "Mountain height noise"
msgstr "Berghöhenrauschen"
@@ -5756,7 +6025,7 @@ 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"
+"This is a trade-off between SQLite transaction overhead and\n"
"memory consumption (4096=100MB, as a rule of thumb)."
msgstr ""
"Anzahl der zusätzlichen Kartenblöcke, welche mit /clearobjects gleichzeitig\n"
@@ -5780,13 +6049,6 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Opaqueness (alpha) of the shadow behind the fallback font, between 0 and 255."
-msgstr ""
-"Undurchsichtigkeit (Alpha) des Schattens hinter der Ersatzschrift, zwischen "
-"0 und 255."
-
-#: src/settings_translation_file.cpp
-msgid ""
"Open the pause menu when the window's focus is lost. Does not pause if a "
"formspec is\n"
"open."
@@ -5795,18 +6057,16 @@ msgstr ""
"Wird nicht pausieren, wenn ein Formspec geöffnet ist."
#: src/settings_translation_file.cpp
+msgid "Optional override for chat weblink color."
+msgstr "Optionaler manueller Wert für die Farbe von Chat-Weblinks."
+
+#: src/settings_translation_file.cpp
msgid ""
-"Path of the fallback font.\n"
-"If “freetype†setting is enabled: Must be a TrueType font.\n"
-"If “freetype†setting is disabled: Must be a bitmap or XML vectors font.\n"
+"Path of the fallback font. Must be a TrueType font.\n"
"This font will be used for certain languages or if the default font is "
"unavailable."
msgstr ""
-"Pfad der Ersatzschrift.\n"
-"Falls die „freetype“-Einstellung aktiviert ist: Muss eine TrueType-Schrift "
-"sein.\n"
-"Falls die „freetype“-Einstellung deaktiviert ist: Muss eine Bitmap- oder XML-"
-"Vektor-Schrift sein.\n"
+"Pfad der Ersatzschrift. Muss eine TrueType-Schrift sein.\n"
"Diese Schrift wird für bestimmte Sprachen benutzt, oder, wenn die "
"Standardschrift nicht verfügbar ist."
@@ -5834,31 +6094,19 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Path to the default font.\n"
-"If “freetype†setting is enabled: Must be a TrueType font.\n"
-"If “freetype†setting is disabled: Must be a bitmap or XML vectors font.\n"
+"Path to the default font. Must be a TrueType font.\n"
"The fallback font will be used if the font cannot be loaded."
msgstr ""
-"Pfad der Standardschrift.\n"
-"Falls die „freetype“-Einstellung aktiviert ist: Muss eine TrueType-Schrift "
-"sein.\n"
-"Falls die „freetype“-Einstellung deaktiviert ist: Muss eine Bitmap- oder XML-"
-"Vektor-Schrift sein.\n"
+"Pfad der Standardschrift. Muss eine TrueType-Schrift sein.\n"
"Die Ersatzschrift wird benutzt, falls diese Schrift nicht geladen werden "
"kann."
#: src/settings_translation_file.cpp
msgid ""
-"Path to the monospace font.\n"
-"If “freetype†setting is enabled: Must be a TrueType font.\n"
-"If “freetype†setting is disabled: Must be a bitmap or XML vectors font.\n"
+"Path to the monospace font. Must be a TrueType font.\n"
"This font is used for e.g. the console and profiler screen."
msgstr ""
-"Pfad der Festbreitenschrift.\n"
-"Falls die „freetype“-Einstellung aktiviert ist: Muss eine TrueType-Schrift "
-"sein.\n"
-"Falls die „freetype“-Einstellung deaktiviert ist: Muss eine Bitmap- oder XML-"
-"Vektor-Schrift sein.\n"
+"Pfad der Festbreitenschrift. Muss eine TrueType-Schrift sein.\n"
"Diese Schrift wird z.B. für die Konsole und die Profiler-Anzeige benutzt."
#: src/settings_translation_file.cpp
@@ -5914,6 +6162,10 @@ msgid "Player versus player"
msgstr "Spielerkampf"
#: src/settings_translation_file.cpp
+msgid "Poisson filtering"
+msgstr "Poissonfilter"
+
+#: src/settings_translation_file.cpp
msgid ""
"Port to connect to (UDP).\n"
"Note that the port field in the main menu overrides this setting."
@@ -5968,9 +6220,9 @@ msgstr "Prometheus-Lauschadresse"
#: src/settings_translation_file.cpp
msgid ""
"Prometheus listener address.\n"
-"If minetest is compiled with ENABLE_PROMETHEUS option enabled,\n"
+"If Minetest is compiled with ENABLE_PROMETHEUS option enabled,\n"
"enable metrics listener for Prometheus on that address.\n"
-"Metrics can be fetch on http://127.0.0.1:30000/metrics"
+"Metrics can be fetched on http://127.0.0.1:30000/metrics"
msgstr ""
"Prometheus-Lauschadresse.\n"
"Falls Minetest mit der ENABLE_PROMETEUS-Option kompiliert wurde,\n"
@@ -6313,6 +6565,44 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Set the shadow strength.\n"
+"Lower value means lighter shadows, higher value means darker shadows."
+msgstr ""
+"Setzt die Schattenstärke.\n"
+"Ein niedrigerer Wert führt zu schwächeren Schatten, ein höherer Wert führt "
+"zu dunkleren Schatten."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set the soft shadow radius size.\n"
+"Lower values mean sharper shadows, bigger values mean softer shadows.\n"
+"Minimum value: 1.0; maximum value: 10.0"
+msgstr ""
+"Setzt den Radius von weichen Schatten.\n"
+"Niedrigere Werte führen zu schärferen Schatten, größere Werte führen zu "
+"weicheren Schatten.\n"
+"Minimalwert: 1.0; Maximalwert: 10.0"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set the tilt of Sun/Moon orbit in degrees.\n"
+"Value of 0 means no tilt / vertical orbit.\n"
+"Minimum value: 0.0; maximum value: 60.0"
+msgstr ""
+"Setzt die Neigung vom Sonnen-/Mondorbit in Grad.\n"
+"0 = keine Neigung / vertikaler Orbit.\n"
+"Minimalwert: 0.0; Maximalwert: 60.0"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set to true to enable Shadow Mapping.\n"
+"Requires shaders to be enabled."
+msgstr ""
+"Auf „wahr“ setzen, um Shadow-Mapping zu aktivieren.\n"
+"Dafür müssen Shader aktiviert sein."
+
+#: src/settings_translation_file.cpp
+msgid ""
"Set to true to enable waving leaves.\n"
"Requires shaders to be enabled."
msgstr ""
@@ -6336,6 +6626,16 @@ msgstr ""
"Dafür müssen Shader aktiviert sein."
#: src/settings_translation_file.cpp
+msgid ""
+"Sets shadow texture quality to 32 bits.\n"
+"On false, 16 bits texture will be used.\n"
+"This can cause much more artifacts in the shadow."
+msgstr ""
+"Setzt die Schattentexturqualität auf 32 Bits.\n"
+"Falls aktiviert, werden 16-Bit-Texturen benutzt.\n"
+"Dies kann zu viel mehr Artefakten im Schatten führen."
+
+#: src/settings_translation_file.cpp
msgid "Shader path"
msgstr "Shader-Pfad"
@@ -6352,6 +6652,22 @@ msgstr ""
"Das funktioniert nur mit dem OpenGL-Grafik-Backend."
#: src/settings_translation_file.cpp
+msgid "Shadow filter quality"
+msgstr "Schattenfilterqualität"
+
+#: src/settings_translation_file.cpp
+msgid "Shadow map max distance in nodes to render shadows"
+msgstr "Maximale Schattenrenderdistanz von Schattenkarten in Blöcken"
+
+#: src/settings_translation_file.cpp
+msgid "Shadow map texture in 32 bits"
+msgstr "Schattenkartentextur in 32 Bits"
+
+#: src/settings_translation_file.cpp
+msgid "Shadow map texture size"
+msgstr "Schattenkartentexturengröße"
+
+#: src/settings_translation_file.cpp
msgid ""
"Shadow offset (in pixels) of the default font. If 0, then shadow will not be "
"drawn."
@@ -6360,12 +6676,8 @@ msgstr ""
"der Schatten nicht gezeichnet."
#: src/settings_translation_file.cpp
-msgid ""
-"Shadow offset (in pixels) of the fallback font. If 0, then shadow will not "
-"be drawn."
-msgstr ""
-"Versatz des Schattens hinter der Ersatzschrift (in Pixeln). Falls 0, wird "
-"der Schatten nicht gezeichnet."
+msgid "Shadow strength"
+msgstr "Schattenstärke"
#: src/settings_translation_file.cpp
msgid "Shape of the minimap. Enabled = round, disabled = square."
@@ -6388,8 +6700,8 @@ msgstr ""
"Nach Änderung ist ein Neustart erforderlich."
#: src/settings_translation_file.cpp
-msgid "Show nametag backgrounds by default"
-msgstr "Namensschildhintergründe standardmäßig anzeigen"
+msgid "Show name tag backgrounds by default"
+msgstr "Standardmäßig Hintergründe für Namensschilder anzeigen"
#: src/settings_translation_file.cpp
msgid "Shutdown message"
@@ -6425,6 +6737,10 @@ msgstr ""
"reduziert."
#: src/settings_translation_file.cpp
+msgid "Sky Body Orbit Tilt"
+msgstr "Himmelskörperorbitneigung"
+
+#: src/settings_translation_file.cpp
msgid "Slice w"
msgstr "w-Ausschnitt"
@@ -6483,16 +6799,12 @@ msgid "Sneaking speed, in nodes per second."
msgstr "Schleichgeschwindigkeit, in Blöcken pro Sekunde."
#: src/settings_translation_file.cpp
-msgid "Sound"
-msgstr "Ton"
+msgid "Soft shadow radius"
+msgstr "Weicher-Schatten-Radius"
#: src/settings_translation_file.cpp
-msgid "Special key"
-msgstr "Spezialtaste"
-
-#: src/settings_translation_file.cpp
-msgid "Special key for climbing/descending"
-msgstr "Spezialtaste zum Klettern/Sinken"
+msgid "Sound"
+msgstr "Ton"
#: src/settings_translation_file.cpp
msgid ""
@@ -6521,6 +6833,19 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Spread a complete update of shadow map over given amount of frames.\n"
+"Higher values might make shadows laggy, lower values\n"
+"will consume more resources.\n"
+"Minimum value: 1; maximum value: 16"
+msgstr ""
+"Eine vollständige Aktualisierung der Schattenkarte über der angegebenen\n"
+"Anzahl Frames ausbreiten. Höhere Werte können dazu führen, dass\n"
+"Schatten langsamer reagieren,\n"
+"niedrigere Werte sind rechenintensiver.\n"
+"Minimalwert: 1; Maximalwert: 16"
+
+#: src/settings_translation_file.cpp
+msgid ""
"Spread of light curve boost range.\n"
"Controls the width of the range to be boosted.\n"
"Standard deviation of the light curve boost Gaussian."
@@ -6651,6 +6976,16 @@ msgstr "Texturenpfad"
#: src/settings_translation_file.cpp
msgid ""
+"Texture size to render the shadow map on.\n"
+"This must be a power of two.\n"
+"Bigger numbers create better shadows but it is also more expensive."
+msgstr ""
+"Texturengröße zum Rendern der Schattenkarte.\n"
+"Dies muss eine Zweierpotenz sein.\n"
+"Größere Werte erzeugen bessere Schatten, aber dies ist auch rechenintensiver."
+
+#: src/settings_translation_file.cpp
+msgid ""
"Textures on a node may be aligned either to the node or to the world.\n"
"The former mode suits better things like machines, furniture, etc., while\n"
"the latter makes stairs and microblocks fit surroundings better.\n"
@@ -6673,7 +7008,7 @@ msgid "The URL for the content repository"
msgstr "Die URL für den Inhaltespeicher"
#: src/settings_translation_file.cpp
-msgid "The deadzone of the joystick"
+msgid "The dead zone of the joystick"
msgstr "Der Totbereich des Joysticks"
#: src/settings_translation_file.cpp
@@ -6751,14 +7086,14 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"The rendering back-end for Irrlicht.\n"
+"The rendering back-end.\n"
"A restart is required after changing this.\n"
"Note: On Android, stick with OGLES1 if unsure! App may fail to start "
"otherwise.\n"
"On other platforms, OpenGL is recommended.\n"
"Shaders are supported by OpenGL (desktop only) and OGLES2 (experimental)"
msgstr ""
-"Das Renderer-Backend für Irrlicht.\n"
+"Das Renderer-Backend.\n"
"Ein Neustart ist erforderlich, wenn dies geändert wird.\n"
"Anmerkung: Auf Android belassen Sie dies bei OGLES1, wenn Sie sich unsicher "
"sind.\n"
@@ -6770,7 +7105,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"The sensitivity of the joystick axes for moving the\n"
-"ingame view frustum around."
+"in-game view frustum around."
msgstr ""
"Die Empfindlichkeit der Joystick-Achsen, um den\n"
"Pyramidenstumpf der Spielansicht herumzubewegen."
@@ -6898,6 +7233,10 @@ msgid "Touch screen threshold"
msgstr "Touchscreenschwellwert"
#: src/settings_translation_file.cpp
+msgid "Tradeoffs for performance"
+msgstr "Kompromisse für Performanz"
+
+#: src/settings_translation_file.cpp
msgid "Trees noise"
msgstr "Bäumerauschen"
@@ -6980,7 +7319,7 @@ msgstr "Bilineare Filterung bei der Skalierung von Texturen benutzen."
#: src/settings_translation_file.cpp
msgid ""
-"Use mip mapping to scale textures. May slightly increase performance,\n"
+"Use mipmapping to scale textures. May slightly increase performance,\n"
"especially when using a high resolution texture pack.\n"
"Gamma correct downscaling is not supported."
msgstr ""
@@ -7112,8 +7451,8 @@ msgid "Viewing range"
msgstr "Sichtweite"
#: src/settings_translation_file.cpp
-msgid "Virtual joystick triggers aux button"
-msgstr "Virtueller Joystick löst Aux-Taste aus"
+msgid "Virtual joystick triggers Aux1 button"
+msgstr "Virtueller Joystick löst Aux1-Taste aus"
#: src/settings_translation_file.cpp
msgid "Volume"
@@ -7192,6 +7531,10 @@ msgid "Waving plants"
msgstr "Wehende Pflanzen"
#: src/settings_translation_file.cpp
+msgid "Weblink color"
+msgstr "Weblinkfarbe"
+
+#: 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"
@@ -7222,9 +7565,8 @@ msgid ""
"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.\n"
+"memory. Powers of 2 are recommended. This setting is ONLY applied if\n"
+"bilinear/trilinear/anisotropic filtering is enabled.\n"
"This is also used as the base node texture size for world-aligned\n"
"texture autoscaling."
msgstr ""
@@ -7234,27 +7576,14 @@ msgstr ""
"die\n"
"minimale Texturengröße für die vergrößerten Texturen; höhere Werte führen\n"
"zu einem schärferen Aussehen, aber erfordern mehr Speicher. Zweierpotenzen\n"
-"werden empfohlen. Ein Wert größer als 1 könnte keinen sichtbaren Effekt\n"
-"hervorbringen, es sei denn, der bilineare, trilineare oder anisotropische "
-"Filter\n"
-"ist aktiviert.\n"
+"werden empfohlen. Diese Einstellung trifft NUR dann in Kraft, falls\n"
+"der bilineare/trilineare/anisotrope Filter aktiviert ist.\n"
"Dies wird außerdem verwendet als die Basisblocktexturengröße für\n"
"welt-ausgerichtete automatische Texturenskalierung."
#: src/settings_translation_file.cpp
msgid ""
-"Whether FreeType fonts are used, requires FreeType support to be compiled "
-"in.\n"
-"If disabled, bitmap and XML vectors fonts are used instead."
-msgstr ""
-"Ob FreeType-Schriften benutzt werden. Dafür muss FreeType-Unterstüzung "
-"einkompiliert worden sein.\n"
-"Falls deaktiviert, werden stattdessen Bitmap- und XML-Vektor-Schriften "
-"benutzt."
-
-#: src/settings_translation_file.cpp
-msgid ""
-"Whether nametag backgrounds should be shown by default.\n"
+"Whether name tag backgrounds should be shown by default.\n"
"Mods may still set a background."
msgstr ""
"Ob Namensschildhintergründe standardmäßig angezeigt werden sollen.\n"
@@ -7313,8 +7642,9 @@ msgstr ""
"Drücken von F5)."
#: src/settings_translation_file.cpp
-msgid "Width component of the initial window size."
-msgstr "Breiten-Komponente der anfänglichen Fenstergröße."
+msgid "Width component of the initial window size. Ignored in fullscreen mode."
+msgstr ""
+"Breiten-Komponente der anfänglichen Fenstergröße. Im Vollbildmodus ignoriert."
#: src/settings_translation_file.cpp
msgid "Width of the selection box lines around nodes."
@@ -7419,46 +7749,22 @@ msgid "Y-level of seabed."
msgstr "Y-Höhe vom Meeresgrund."
#: src/settings_translation_file.cpp
-msgid ""
-"ZLib compression level to use when saving mapblocks to disk.\n"
-"-1 - Zlib's default compression level\n"
-"0 - no compresson, fastest\n"
-"9 - best compression, slowest\n"
-"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)"
-msgstr ""
-"ZLib-Kompressionsniveau für Kartenblöcke im Festspeicher.\n"
-"-1 - Zlib-Standard-Kompressionsniveau\n"
-"0 - keine Kompression, am schnellsten\n"
-"9 - beste Kompression, am langsamsten\n"
-"(Niveaus 1-3 verwenden Zlibs „schnelles“ Verfahren, 4-9 das normale "
-"Verfahren)"
-
-#: src/settings_translation_file.cpp
-msgid ""
-"ZLib compression level to use when sending mapblocks to the client.\n"
-"-1 - Zlib's default compression level\n"
-"0 - no compresson, fastest\n"
-"9 - best compression, slowest\n"
-"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)"
-msgstr ""
-"ZLib-Kompressionsniveau für Kartenblöcke, die zu Clients gesendet werden.\n"
-"-1 - Zlib-Standard-Kompressionsniveau\n"
-"0 - keine Kompression, am schnellsten\n"
-"9 - beste Kompression, am langsamsten\n"
-"(Niveaus 1-3 verwenden Zlibs „schnelles“ Verfahren, 4-9 das normale "
-"Verfahren)"
-
-#: src/settings_translation_file.cpp
msgid "cURL file download timeout"
msgstr "cURL-Dateidownload-Zeitüberschreitung"
#: src/settings_translation_file.cpp
+msgid "cURL interactive timeout"
+msgstr "cURL-Interaktiv-Zeitüberschreitung"
+
+#: src/settings_translation_file.cpp
msgid "cURL parallel limit"
msgstr "cURL-Parallel-Begrenzung"
-#: src/settings_translation_file.cpp
-msgid "cURL timeout"
-msgstr "cURL-Zeitüberschreitung"
+#~ msgid "- Creative Mode: "
+#~ msgstr "- Kreativmodus: "
+
+#~ msgid "- Damage: "
+#~ msgstr "- Schaden: "
#~ msgid ""
#~ "0 = parallax occlusion with slope information (faster).\n"
@@ -7467,6 +7773,9 @@ msgstr "cURL-Zeitüberschreitung"
#~ "0 = Parallax-Mapping mit Stufeninformation (schneller).\n"
#~ "1 = Relief-Mapping (langsamer, genauer)."
+#~ msgid "Address / Port"
+#~ msgstr "Adresse / Port"
+
#~ msgid ""
#~ "Adjust the gamma encoding for the light tables. Higher numbers are "
#~ "brighter.\n"
@@ -7486,6 +7795,9 @@ msgstr "cURL-Zeitüberschreitung"
#~ msgid "Back"
#~ msgstr "Rücktaste"
+#~ msgid "Bits per pixel (aka color depth) in fullscreen mode."
+#~ msgstr "Bits pro Pixel (Farbtiefe) im Vollbildmodus."
+
#~ msgid "Bump Mapping"
#~ msgstr "Bumpmapping"
@@ -7528,13 +7840,26 @@ msgstr "cURL-Zeitüberschreitung"
#~ "Legt die Breite von Tunneln fest; ein kleinerer Wert erzeugt breitere "
#~ "Tunnel."
+#~ msgid "Credits"
+#~ msgstr "Mitwirkende"
+
#~ msgid "Crosshair color (R,G,B)."
#~ msgstr "Fadenkreuzfarbe (R,G,B)."
+#~ msgid "Damage enabled"
+#~ msgstr "Schaden aktiviert"
+
#~ msgid "Darkness sharpness"
#~ msgstr "Dunkelheits-Steilheit"
#~ msgid ""
+#~ "Default timeout for cURL, stated in milliseconds.\n"
+#~ "Only has an effect if compiled with cURL."
+#~ msgstr ""
+#~ "Standardzeitlimit für cURL, in Millisekunden.\n"
+#~ "Hat nur eine Wirkung, wenn mit cURL kompiliert wurde."
+
+#~ msgid ""
#~ "Defines areas of floatland smooth terrain.\n"
#~ "Smooth floatlands occur when noise > 0."
#~ msgstr ""
@@ -7604,6 +7929,15 @@ msgstr "cURL-Zeitüberschreitung"
#~ msgid "FPS in pause menu"
#~ msgstr "Bildwiederholrate im Pausenmenü"
+#~ msgid "Fallback font shadow"
+#~ msgstr "Ersatzschriftschatten"
+
+#~ msgid "Fallback font shadow alpha"
+#~ msgstr "Undurchsichtigkeit des Ersatzschriftschattens"
+
+#~ msgid "Fallback font size"
+#~ msgstr "Ersatzschriftgröße"
+
#~ msgid "Floatland base height noise"
#~ msgstr "Schwebeland-Basishöhenrauschen"
@@ -7614,6 +7948,15 @@ msgstr "cURL-Zeitüberschreitung"
#~ msgstr ""
#~ "Undurchsichtigkeit des Schattens der Schrift (Wert zwischen 0 und 255)."
+#~ msgid "Font size of the fallback font in point (pt)."
+#~ msgstr "Schriftgröße der Ersatzschrift in Punkt (pt)."
+
+#~ msgid "FreeType fonts"
+#~ msgstr "FreeType-Schriften"
+
+#~ msgid "Full screen BPP"
+#~ msgstr "Vollbildfarbtiefe"
+
#~ msgid "Gamma"
#~ msgstr "Gamma"
@@ -7623,9 +7966,15 @@ msgstr "cURL-Zeitüberschreitung"
#~ msgid "Generate normalmaps"
#~ msgstr "Normalmaps generieren"
+#~ msgid "High-precision FPU"
+#~ msgstr "Hochpräzisions-FPU"
+
#~ msgid "IPv6 support."
#~ msgstr "IPv6-Unterstützung."
+#~ msgid "Install: file: \"$1\""
+#~ msgstr "Installation: Datei: „$1“"
+
#~ msgid "Lava depth"
#~ msgstr "Lavatiefe"
@@ -7641,6 +7990,11 @@ msgstr "cURL-Zeitüberschreitung"
#~ msgid "Main menu style"
#~ msgstr "Hauptmenü-Stil"
+#~ msgid "Makes DirectX work with LuaJIT. Disable if it causes troubles."
+#~ msgstr ""
+#~ "DirectX mit LuaJIT zusammenarbeiten lassen. Deaktivieren Sie dies, falls "
+#~ "es Probleme verursacht."
+
#~ msgid "Minimap in radar mode, Zoom x2"
#~ msgstr "Übersichtskarte im Radarmodus, Zoom ×2"
@@ -7653,6 +8007,9 @@ msgstr "cURL-Zeitüberschreitung"
#~ msgid "Minimap in surface mode, Zoom x4"
#~ msgstr "Übersichtskarte im Bodenmodus, Zoom ×4"
+#~ msgid "Name / Password"
+#~ msgstr "Name / Passwort"
+
#~ msgid "Name/Password"
#~ msgstr "Name/Passwort"
@@ -7671,6 +8028,13 @@ msgstr "cURL-Zeitüberschreitung"
#~ msgid "Ok"
#~ msgstr "OK"
+#~ msgid ""
+#~ "Opaqueness (alpha) of the shadow behind the fallback font, between 0 and "
+#~ "255."
+#~ msgstr ""
+#~ "Undurchsichtigkeit (Alpha) des Schattens hinter der Ersatzschrift, "
+#~ "zwischen 0 und 255."
+
#~ msgid "Overall bias of parallax occlusion effect, usually scale/2."
#~ msgstr ""
#~ "Startwert des Parallax-Occlusion-Effektes, üblicherweise Skalierung "
@@ -7709,15 +8073,43 @@ msgstr "cURL-Zeitüberschreitung"
#~ msgid "Projecting dungeons"
#~ msgstr "Herausragende Verliese"
+#~ msgid "PvP enabled"
+#~ msgstr "Spielerkampf aktiviert"
+
#~ msgid "Reset singleplayer world"
#~ msgstr "Einzelspielerwelt zurücksetzen"
#~ msgid "Select Package File:"
#~ msgstr "Paket-Datei auswählen:"
+#~ msgid ""
+#~ "Set the shadow update time.\n"
+#~ "Lower value means shadows and map updates faster, but it consume more "
+#~ "resources.\n"
+#~ "Minimun value 0.001 seconds max value 0.2 seconds"
+#~ msgstr ""
+#~ "Setzt die Schattenupdatezeit.\n"
+#~ "Ein niedrigerer Wert bedeutet, dass Schatten und die Karte schneller "
+#~ "aktualisiert werden, aber dies verbraucht mehr Ressourcen.\n"
+#~ "Minimalwert: 0.001 Sekunden. Maximalwert: 0.2 Sekunden.\n"
+#~ "(Beachten Sie die englische Notation mit Punkt als Dezimaltrennzeichen.)"
+
#~ msgid "Shadow limit"
#~ msgstr "Schattenbegrenzung"
+#~ msgid ""
+#~ "Shadow offset (in pixels) of the fallback font. If 0, then shadow will "
+#~ "not be drawn."
+#~ msgstr ""
+#~ "Versatz des Schattens hinter der Ersatzschrift (in Pixeln). Falls 0, wird "
+#~ "der Schatten nicht gezeichnet."
+
+#~ msgid "Special"
+#~ msgstr "Spezial"
+
+#~ msgid "Special key"
+#~ msgstr "Spezialtaste"
+
#~ msgid "Start Singleplayer"
#~ msgstr "Einzelspieler starten"
@@ -7730,6 +8122,9 @@ msgstr "cURL-Zeitüberschreitung"
#~ msgid "This font will be used for certain languages."
#~ msgstr "Diese Schrift wird von bestimmten Sprachen benutzt."
+#~ msgid "To enable shaders the OpenGL driver needs to be used."
+#~ msgstr "Um Shader zu aktivieren, muss der OpenGL-Treiber genutzt werden."
+
#~ msgid "Toggle Cinematic"
#~ msgstr "Filmmodus umschalten"
@@ -7753,6 +8148,16 @@ msgstr "cURL-Zeitüberschreitung"
#~ msgid "Waving water"
#~ msgstr "Wasserwellen"
+#~ msgid ""
+#~ "Whether FreeType fonts are used, requires FreeType support to be compiled "
+#~ "in.\n"
+#~ "If disabled, bitmap and XML vectors fonts are used instead."
+#~ msgstr ""
+#~ "Ob FreeType-Schriften benutzt werden. Dafür muss FreeType-Unterstüzung "
+#~ "einkompiliert worden sein.\n"
+#~ "Falls deaktiviert, werden stattdessen Bitmap- und XML-Vektor-Schriften "
+#~ "benutzt."
+
#~ msgid "Whether dungeons occasionally project from the terrain."
#~ msgstr "Ob Verliese manchmal aus dem Gelände herausragen."
@@ -7769,3 +8174,9 @@ msgstr "cURL-Zeitüberschreitung"
#~ msgid "Yes"
#~ msgstr "Ja"
+
+#~ msgid "You died."
+#~ msgstr "Sie sind gestorben."
+
+#~ msgid "needs_fallback_font"
+#~ msgstr "no"
diff --git a/po/dv/minetest.po b/po/dv/minetest.po
index 4c4b53954..2ae55d9e9 100644
--- a/po/dv/minetest.po
+++ b/po/dv/minetest.po
@@ -2,7 +2,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Dhivehi (Minetest)\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-02-23 19:03+0100\n"
+"POT-Creation-Date: 2022-01-25 23:19+0100\n"
"PO-Revision-Date: 2019-11-10 15:04+0000\n"
"Last-Translator: Krock <mk939@ymail.com>\n"
"Language-Team: Dhivehi <https://hosted.weblate.org/projects/minetest/"
@@ -14,6 +14,43 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 3.10-dev\n"
+#: builtin/client/chatcommands.lua
+msgid "Clear the out chat queue"
+msgstr ""
+
+#: builtin/client/chatcommands.lua
+msgid "Empty command."
+msgstr ""
+
+#: builtin/client/chatcommands.lua
+#, fuzzy
+msgid "Exit to main menu"
+msgstr "Þ‰Þ¬Þ‡Þ¨Þ‚Þ° Þ‰Þ¬Þ‚Þ«"
+
+#: builtin/client/chatcommands.lua
+msgid "Invalid command: "
+msgstr ""
+
+#: builtin/client/chatcommands.lua
+msgid "Issued command: "
+msgstr ""
+
+#: builtin/client/chatcommands.lua
+msgid "List online players"
+msgstr ""
+
+#: builtin/client/chatcommands.lua
+msgid "Online players: "
+msgstr ""
+
+#: builtin/client/chatcommands.lua
+msgid "The out chat queue is now empty."
+msgstr ""
+
+#: builtin/client/chatcommands.lua
+msgid "This command is disabled by server."
+msgstr ""
+
#: builtin/client/death_formspec.lua src/client/game.cpp
msgid "Respawn"
msgstr "Þ‡Þ¦ÞÞªÞ‚Þ° ÞÞ°Þ•Þ¦Þ‡ÞªÞ‚Þ°ÞˆÞ­"
@@ -22,11 +59,40 @@ msgstr "Þ‡Þ¦ÞÞªÞ‚Þ° ÞÞ°Þ•Þ¦Þ‡ÞªÞ‚Þ°ÞˆÞ­"
msgid "You died"
msgstr "Þ‰Þ¦ÞƒÞªÞˆÞ©"
+#: builtin/common/chatcommands.lua
+msgid "Available commands:"
+msgstr ""
+
+#: builtin/common/chatcommands.lua
+msgid "Available commands: "
+msgstr ""
+
+#: builtin/common/chatcommands.lua
+msgid "Command not available: "
+msgstr ""
+
+#: builtin/common/chatcommands.lua
+msgid "Get help for commands"
+msgstr ""
+
+#: builtin/common/chatcommands.lua
+msgid ""
+"Use '.help <cmd>' to get more information, or '.help all' to list everything."
+msgstr ""
+
+#: builtin/common/chatcommands.lua
+msgid "[all | <cmd>]"
+msgstr ""
+
#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp
msgid "OK"
msgstr ""
#: builtin/fstk/ui.lua
+msgid "<none available>"
+msgstr ""
+
+#: builtin/fstk/ui.lua
#, fuzzy
msgid "An error occurred in a Lua script:"
msgstr "Þ‰Þ®Þ‘Þ¬Þ‡Þ°ÞŠÞ¦Þ‹Þ¦ ÞÞªÞ‡Þ­ ÞÞ°Þ†Þ°ÞƒÞ¨Þ•Þ°Þ“Þ¬Þ‡Þ°ÞŽÞ¦Þ‡Þ¨ Þ‰Þ¦Þ‡Þ°ÞÞ¦ÞÞ¦Þ‡Þ¬Þ‡Þ° Þ–Þ¬Þ€Þ¨Þ‡Þ°Þ–Þ¬:"
@@ -236,6 +302,10 @@ msgid "Install missing dependencies"
msgstr "ÞÞ§Þ’Þ¨Þ‰ÞªÞ‚Þ«Þ‚Þ° Þ‘Þ¨Þ•Þ¬Þ‚Þ°Þ‘Þ¬Þ‚Þ°Þީތައް:"
#: builtin/mainmenu/dlg_contentstore.lua
+msgid "Install: Unsupported file type or broken archive"
+msgstr ""
+
+#: builtin/mainmenu/dlg_contentstore.lua
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Mods"
msgstr "މޮޑްތައް"
@@ -539,7 +609,7 @@ msgstr "Þ‡Þ¦Þ‚Þ„ÞªÞƒÞ§ ÞÞ¬Þ“Þ¨Þ‚Þ°ÞŽÞ°ÞÞ° ÞÞ¦ÞŠÞªÞ€Þ§Þ‡Þ¦ÞÞ°>"
msgid "Browse"
msgstr "ÞŠÞªÞ‚Þ°Þ†Þ®ÞÞ° Þ€Þ¯Þ‹Þ§"
-#: builtin/mainmenu/dlg_settings_advanced.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_settings.lua
msgid "Disabled"
msgstr "Þ‡Þ®ÞŠÞ°Þ†Þ®ÞÞ°ÞŠÞ¦"
@@ -564,7 +634,7 @@ msgid "Offset"
msgstr ""
#: builtin/mainmenu/dlg_settings_advanced.lua
-msgid "Persistance"
+msgid "Persistence"
msgstr ""
#: builtin/mainmenu/dlg_settings_advanced.lua
@@ -583,7 +653,7 @@ msgstr "Þ‘Þ¨ÞŠÞ¯ÞÞ°Þ“Þ¦Þ‡Þ¦ÞÞ° ÞƒÞ¦Þ‡Þ°Þ‹ÞªÞ†ÞªÞƒÞ­"
msgid "Scale"
msgstr ""
-#: builtin/mainmenu/dlg_settings_advanced.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_online.lua
msgid "Search"
msgstr "Þ€Þ¯Þ‹Þ§"
@@ -678,15 +748,6 @@ msgid "Install Mod: Unable to find suitable folder name for modpack $1"
msgstr ""
#: builtin/mainmenu/pkgmgr.lua
-msgid "Install: Unsupported file type \"$1\" or broken archive"
-msgstr ""
-
-#: builtin/mainmenu/pkgmgr.lua
-#, fuzzy
-msgid "Install: file: \"$1\""
-msgstr "Þ‰Þ®Þ‘Þ° Þ‡Þ¦ÞšÞ§: ÞŠÞ¦Þ‡Þ¨ÞÞ°:\"1$\""
-
-#: builtin/mainmenu/pkgmgr.lua
msgid "Unable to find a valid mod or modpack"
msgstr ""
@@ -722,6 +783,41 @@ msgstr ""
msgid "Try reenabling public serverlist and check your internet connection."
msgstr "Þ•Þ¦Þ„Þ°ÞÞ¨Þ†Þ° ÞÞ§ÞˆÞ¦Þƒ ÞÞ¨ÞÞ°Þ“Þª Þ‡Þ¦ÞÞªÞ‚Þ° Þ–Þ¦Þ‡Þ°ÞÞ¦ÞˆÞ§.Þ‡Þ¦Þ‹Þ¨ Þ‡Þ¨Þ‚Þ°Þ“Þ¦Þ‚Þ¬Þ“Þ° Þ†Þ¦Þ‚Þ¬Þ†Þ°ÞÞ¦Þ‚Þ° Þ—Þ¬Þ†Þ°Þ†ÞªÞƒÞ¦Þ‡Þ°ÞˆÞ§."
+#: builtin/mainmenu/tab_about.lua
+msgid "About"
+msgstr ""
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Active Contributors"
+msgstr ""
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Active renderer:"
+msgstr ""
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Core Developers"
+msgstr ""
+
+#: builtin/mainmenu/tab_about.lua
+#, fuzzy
+msgid "Open User Data Directory"
+msgstr "Þ‰Þ®Þ‘Þ°ÞŽÞ¬ ÞŠÞ¦Þ‡Þ¨ÞÞ° އިހްތިޔާރުކުރޭ:"
+
+#: builtin/mainmenu/tab_about.lua
+msgid ""
+"Opens the directory that contains user-provided worlds, games, mods,\n"
+"and texture packs in a file manager / explorer."
+msgstr ""
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Previous Contributors"
+msgstr ""
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Previous Core Developers"
+msgstr ""
+
#: builtin/mainmenu/tab_content.lua
msgid "Browse online content"
msgstr ""
@@ -766,37 +862,6 @@ msgstr "އިހްތިޔާރުކުރެވިފައިވާ Þ‰Þ®Þ‘Þ° Þ‘Þ¨ÞÞ©Þ“Þ°Þ†ÞªÞƒ
msgid "Use Texture Pack"
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
-#, fuzzy
-msgid "Open User Data Directory"
-msgstr "Þ‰Þ®Þ‘Þ°ÞŽÞ¬ ÞŠÞ¦Þ‡Þ¨ÞÞ° އިހްތިޔާރުކުރޭ:"
-
-#: builtin/mainmenu/tab_credits.lua
-msgid ""
-"Opens the directory that contains user-provided worlds, games, mods,\n"
-"and texture packs in a file manager / explorer."
-msgstr ""
-
-#: builtin/mainmenu/tab_credits.lua
-msgid "Previous Contributors"
-msgstr ""
-
-#: builtin/mainmenu/tab_credits.lua
-msgid "Previous Core Developers"
-msgstr ""
-
#: builtin/mainmenu/tab_local.lua
msgid "Announce Server"
msgstr "ÞÞ§ÞˆÞ¦Þƒ Þ‡Þ¨Þ‡ÞªÞÞ§Þ‚Þ°Þ†ÞªÞƒÞ­"
@@ -825,7 +890,7 @@ msgstr "ÞÞ§ÞˆÞ¦ÞƒÞ‡Þ¬Þ‡Þ° Þ€Þ®ÞÞ°Þ“Þ°Þ†ÞªÞƒÞ­"
msgid "Install games from ContentDB"
msgstr ""
-#: builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
msgid "Name"
msgstr ""
@@ -837,7 +902,7 @@ msgstr "Þ‡Þ¦Þ‡Þª"
msgid "No world created or selected!"
msgstr "Þ‡Þ¬Þ‡Þ°ÞˆÞ¬ÞÞ° Þ‹ÞªÞ‚Þ¨Þ”Þ¬Þ‡Þ¬Þ‡Þ° Þ‡ÞªÞŠÞ¬Þ‹Þ¨ÞŠÞ¦Þ‡Þ¬Þ‡Þ° ނުވަތަ އިހްތިޔާރުވެފައެއް Þ‚Þ¬Þ Þ°!"
-#: builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
#, fuzzy
msgid "Password"
msgstr "Þ•Þ§ÞÞ°ÞˆÞ¯Þ‘Þ° / Þ‚Þ¦Þ‚Þ°"
@@ -846,7 +911,7 @@ msgstr "Þ•Þ§ÞÞ°ÞˆÞ¯Þ‘Þ° / Þ‚Þ¦Þ‚Þ°"
msgid "Play Game"
msgstr "ÞŽÞ­Þ‰Þ° Þ†ÞªÞ…Þ­"
-#: builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
msgid "Port"
msgstr "Þ•Þ¯Þ“Þ°"
@@ -869,9 +934,14 @@ msgid "Start Game"
msgstr "ÞŽÞ­Þ‰Þ° Þ€Þ®ÞÞ°Þ“Þ°Þ†ÞªÞƒÞ­"
#: builtin/mainmenu/tab_online.lua
-msgid "Address / Port"
+#, fuzzy
+msgid "Address"
msgstr "Þ‡Þ¬Þ‘Þ°ÞƒÞ¬ÞÞ° / Þ•Þ¯Þ“Þ°"
+#: builtin/mainmenu/tab_online.lua src/client/keycode.cpp
+msgid "Clear"
+msgstr ""
+
#: builtin/mainmenu/tab_online.lua
msgid "Connect"
msgstr "Þ†Þ¦Þ‚Þ¬Þ†Þ°Þ“Þ°Þ†ÞªÞƒÞ­"
@@ -880,35 +950,46 @@ msgstr "Þ†Þ¦Þ‚Þ¬Þ†Þ°Þ“Þ°Þ†ÞªÞƒÞ­"
msgid "Creative mode"
msgstr "Þ†Þ°ÞƒÞ¨Þ‡Þ­Þ“Þ¨ÞˆÞ° Þ‰Þ¯Þ‘Þ°"
+#. ~ PvP = Player versus Player
#: builtin/mainmenu/tab_online.lua
-msgid "Damage enabled"
-msgstr "Þ‡Þ¦Þ‚Þ¨Þ”Þ§ÞˆÞªÞ‚Þ° Þ–Þ¦Þ‡Þ°ÞÞ§ÞŠÞ¦Þ‡Þ¨"
+msgid "Damage / PvP"
+msgstr ""
#: builtin/mainmenu/tab_online.lua
msgid "Del. Favorite"
msgstr "Þ‡Þ¬Þ‚Þ°Þ‰Þ¬ ÞŽÞ¦Þ”Þ§Þ‚ÞªÞˆÞ­"
#: builtin/mainmenu/tab_online.lua
-msgid "Favorite"
+#, fuzzy
+msgid "Favorites"
msgstr "Þ‡Þ¬Þ‚Þ°Þ‰Þ¬ ÞŽÞ¦Þ”Þ§ÞˆÞ­"
#: builtin/mainmenu/tab_online.lua
+msgid "Incompatible Servers"
+msgstr ""
+
+#: builtin/mainmenu/tab_online.lua
#, fuzzy
msgid "Join Game"
msgstr "ÞŽÞ­Þ‰Þ° Þ€Þ®ÞÞ°Þ“Þ°Þ†ÞªÞƒÞ­"
#: builtin/mainmenu/tab_online.lua
-msgid "Name / Password"
-msgstr "Þ•Þ§ÞÞ°ÞˆÞ¯Þ‘Þ° / Þ‚Þ¦Þ‚Þ°"
+msgid "Ping"
+msgstr ""
#: builtin/mainmenu/tab_online.lua
-msgid "Ping"
+#, fuzzy
+msgid "Public Servers"
+msgstr "ÞÞ§ÞˆÞ¦Þƒ Þ‡Þ¨Þ‡ÞªÞÞ§Þ‚Þ°Þ†ÞªÞƒÞ­"
+
+#: builtin/mainmenu/tab_online.lua
+msgid "Refresh"
msgstr ""
-#. ~ PvP = Player versus Player
#: builtin/mainmenu/tab_online.lua
-msgid "PvP enabled"
-msgstr "Þ•Þ©.ÞˆÞ©.Þ•Þ© Þ–Þ¦Þ‡Þ°ÞÞ§"
+#, fuzzy
+msgid "Server Description"
+msgstr "ÞÞ§ÞˆÞ¦Þƒ Þ•Þ¯Þ“Þ°"
#: builtin/mainmenu/tab_settings.lua
msgid "2x"
@@ -950,11 +1031,31 @@ msgstr ""
msgid "Connected Glass"
msgstr ""
+#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
+msgid "Dynamic shadows"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Dynamic shadows: "
+msgstr ""
+
#: builtin/mainmenu/tab_settings.lua
msgid "Fancy Leaves"
msgstr ""
#: builtin/mainmenu/tab_settings.lua
+msgid "High"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Low"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Medium"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
msgid "Mipmap"
msgstr ""
@@ -1026,10 +1127,6 @@ msgstr ""
msgid "Texturing:"
msgstr ""
-#: builtin/mainmenu/tab_settings.lua
-msgid "To enable shaders the OpenGL driver needs to be used."
-msgstr ""
-
#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
msgid "Tone Mapping"
msgstr ""
@@ -1043,6 +1140,14 @@ msgid "Trilinear Filter"
msgstr ""
#: builtin/mainmenu/tab_settings.lua
+msgid "Ultra High"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Very Low"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
msgid "Waving Leaves"
msgstr ""
@@ -1054,7 +1159,7 @@ msgstr ""
msgid "Waving Plants"
msgstr ""
-#: src/client/client.cpp
+#: src/client/client.cpp src/client/game.cpp
msgid "Connection timed out."
msgstr ""
@@ -1083,7 +1188,7 @@ msgid "Connection error (timed out?)"
msgstr ""
#: src/client/clientlauncher.cpp
-msgid "Could not find or load game \""
+msgid "Could not find or load game: "
msgstr ""
#: src/client/clientlauncher.cpp
@@ -1114,18 +1219,6 @@ msgstr ""
msgid "Provided world path doesn't exist: "
msgstr ""
-#. ~ DO NOT TRANSLATE THIS LITERALLY!
-#. This is a special string. Put either "no" or "yes"
-#. into the translation field (literally).
-#. Choose "yes" if the language requires use of the fallback
-#. font, "no" otherwise.
-#. The fallback font is (normally) required for languages with
-#. non-Latin script, like Chinese.
-#. When in doubt, test your translation.
-#: src/client/fontengine.cpp
-msgid "needs_fallback_font"
-msgstr "yes"
-
#: src/client/game.cpp
msgid ""
"\n"
@@ -1137,14 +1230,6 @@ msgid "- Address: "
msgstr ""
#: src/client/game.cpp
-msgid "- Creative Mode: "
-msgstr ""
-
-#: src/client/game.cpp
-msgid "- Damage: "
-msgstr ""
-
-#: src/client/game.cpp
msgid "- Mode: "
msgstr ""
@@ -1166,6 +1251,16 @@ msgid "- Server Name: "
msgstr ""
#: src/client/game.cpp
+#, fuzzy
+msgid "A serialization error occurred:"
+msgstr "Þ‰Þ®Þ‘Þ¬Þ‡Þ°ÞŠÞ¦Þ‹Þ¦ ÞÞªÞ‡Þ­ ÞÞ°Þ†Þ°ÞƒÞ¨Þ•Þ°Þ“Þ¬Þ‡Þ°ÞŽÞ¦Þ‡Þ¨ Þ‰Þ¦Þ‡Þ°ÞÞ¦ÞÞ¦Þ‡Þ¬Þ‡Þ° Þ‹Þ¨Þ‰Þ§ÞˆÞ¬Þ‡Þ°Þ–Þ¬:"
+
+#: src/client/game.cpp
+#, c-format
+msgid "Access denied. Reason: %s"
+msgstr ""
+
+#: src/client/game.cpp
msgid "Automatic forward disabled"
msgstr ""
@@ -1175,6 +1270,22 @@ msgid "Automatic forward enabled"
msgstr "Þ‡Þ¦Þ‚Þ¨Þ”Þ§ÞˆÞªÞ‚Þ° Þ–Þ¦Þ‡Þ°ÞÞ§ÞŠÞ¦Þ‡Þ¨"
#: src/client/game.cpp
+msgid "Block bounds hidden"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Block bounds shown for all blocks"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Block bounds shown for current block"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Block bounds shown for nearby blocks"
+msgstr ""
+
+#: src/client/game.cpp
msgid "Camera update disabled"
msgstr ""
@@ -1184,6 +1295,10 @@ msgid "Camera update enabled"
msgstr "Þ‡Þ¦Þ‚Þ¨Þ”Þ§ÞˆÞªÞ‚Þ° Þ–Þ¦Þ‡Þ°ÞÞ§ÞŠÞ¦Þ‡Þ¨"
#: src/client/game.cpp
+msgid "Can't show block bounds (need 'basic_debug' privilege)"
+msgstr ""
+
+#: src/client/game.cpp
msgid "Change Password"
msgstr ""
@@ -1197,6 +1312,10 @@ msgid "Cinematic mode enabled"
msgstr "Þ‡Þ¦Þ‚Þ¨Þ”Þ§ÞˆÞªÞ‚Þ° Þ–Þ¦Þ‡Þ°ÞÞ§ÞŠÞ¦Þ‡Þ¨"
#: src/client/game.cpp
+msgid "Client disconnected"
+msgstr ""
+
+#: src/client/game.cpp
msgid "Client side scripting is disabled"
msgstr ""
@@ -1205,6 +1324,10 @@ msgid "Connecting to server..."
msgstr ""
#: src/client/game.cpp
+msgid "Connection failed for unknown reason"
+msgstr ""
+
+#: src/client/game.cpp
msgid "Continue"
msgstr ""
@@ -1228,6 +1351,11 @@ msgid ""
msgstr ""
#: src/client/game.cpp
+#, c-format
+msgid "Couldn't resolve address: %s"
+msgstr ""
+
+#: src/client/game.cpp
msgid "Creating client..."
msgstr ""
@@ -1360,6 +1488,10 @@ msgid "Minimap currently disabled by game or mod"
msgstr ""
#: src/client/game.cpp
+msgid "Multiplayer"
+msgstr ""
+
+#: src/client/game.cpp
msgid "Noclip mode disabled"
msgstr ""
@@ -1434,6 +1566,21 @@ msgstr ""
#: src/client/game.cpp
#, c-format
+msgid "The server is probably running a different version of %s."
+msgstr ""
+
+#: src/client/game.cpp
+#, c-format
+msgid "Unable to connect to %s because IPv6 is disabled"
+msgstr ""
+
+#: src/client/game.cpp
+#, c-format
+msgid "Unable to listen on %s because IPv6 is disabled"
+msgstr ""
+
+#: src/client/game.cpp
+#, c-format
msgid "Viewing range changed to %d"
msgstr ""
@@ -1502,10 +1649,6 @@ msgid "Caps Lock"
msgstr ""
#: src/client/keycode.cpp
-msgid "Clear"
-msgstr ""
-
-#: src/client/keycode.cpp
msgid "Control"
msgstr ""
@@ -1770,6 +1913,15 @@ msgstr ""
msgid "Minimap in texture mode"
msgstr ""
+#: src/gui/guiChatConsole.cpp
+#, fuzzy
+msgid "Failed to open webpage"
+msgstr "$1 Þ‚Þ­Þ…ÞªÞ‚Þª"
+
+#: src/gui/guiChatConsole.cpp
+msgid "Opening webpage"
+msgstr ""
+
#: src/gui/guiConfirmRegistration.cpp src/gui/guiPasswordChange.cpp
msgid "Passwords do not match!"
msgstr ""
@@ -1793,7 +1945,7 @@ msgid "Proceed"
msgstr ""
#: src/gui/guiKeyChangeMenu.cpp
-msgid "\"Special\" = climb down"
+msgid "\"Aux1\" = climb down"
msgstr ""
#: src/gui/guiKeyChangeMenu.cpp
@@ -1805,10 +1957,18 @@ msgid "Automatic jumping"
msgstr ""
#: src/gui/guiKeyChangeMenu.cpp
+msgid "Aux1"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
msgid "Backward"
msgstr ""
#: src/gui/guiKeyChangeMenu.cpp
+msgid "Block bounds"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
#, fuzzy
msgid "Change camera"
msgstr "ފިތްތައް Þ„Þ¦Þ‹Þ¦ÞÞªÞ†ÞªÞƒÞ­"
@@ -1898,10 +2058,6 @@ msgid "Sneak"
msgstr ""
#: src/gui/guiKeyChangeMenu.cpp
-msgid "Special"
-msgstr ""
-
-#: src/gui/guiKeyChangeMenu.cpp
msgid "Toggle HUD"
msgstr ""
@@ -1962,7 +2118,8 @@ msgid "Muted"
msgstr ""
#: src/gui/guiVolumeChange.cpp
-msgid "Sound Volume: "
+#, c-format
+msgid "Sound Volume: %d%%"
msgstr ""
#. ~ Imperative, as in "Enter/type in text".
@@ -1986,8 +2143,8 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"(Android) Use virtual joystick to trigger \"aux\" button.\n"
-"If enabled, virtual joystick will also tap \"aux\" button when out of main "
+"(Android) Use virtual joystick to trigger \"Aux1\" button.\n"
+"If enabled, virtual joystick will also tap \"Aux1\" button when out of main "
"circle."
msgstr ""
@@ -2173,6 +2330,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Adjust the detected display density, used for scaling UI elements."
+msgstr ""
+
+#: src/settings_translation_file.cpp
#, c-format
msgid ""
"Adjusts the density of the floatland layer.\n"
@@ -2286,6 +2447,14 @@ msgid "Autoscaling mode"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Aux1 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Aux1 key for climbing/descending"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Backward key"
msgstr ""
@@ -2330,10 +2499,6 @@ msgid "Biome noise"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Bits per pixel (aka color depth) in fullscreen mode."
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Block send optimize distance"
msgstr ""
@@ -2432,6 +2597,14 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Chat command time message threshold"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Chat commands"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Chat font size"
msgstr ""
@@ -2464,7 +2637,7 @@ msgid "Chat toggle key"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Chatcommands"
+msgid "Chat weblinks"
msgstr ""
#: src/settings_translation_file.cpp
@@ -2484,6 +2657,12 @@ msgid "Clean transparent textures"
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Clickable weblinks (middle-click or Ctrl+left-click) enabled in chat console "
+"output."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Client"
msgstr ""
@@ -2528,6 +2707,10 @@ msgid "Colored fog"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Colored shadows"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid ""
"Comma-separated list of flags to hide in the content repository.\n"
"\"nonfree\" can be used to hide packages which do not qualify as 'free "
@@ -2555,6 +2738,22 @@ msgid "Command key"
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Compression level to use when saving mapblocks to disk.\n"
+"-1 - use default compression level\n"
+"0 - least compression, fastest\n"
+"9 - best compression, slowest"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Compression level to use when sending mapblocks to the client.\n"
+"-1 - use default compression level\n"
+"0 - least compression, fastest\n"
+"9 - best compression, slowest"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Connect glass"
msgstr ""
@@ -2646,7 +2845,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"Crosshair alpha (opaqueness, between 0 and 255).\n"
-"Also controls the object crosshair color"
+"This also applies to the object crosshair."
msgstr ""
#: src/settings_translation_file.cpp
@@ -2725,8 +2924,9 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Default timeout for cURL, stated in milliseconds.\n"
-"Only has an effect if compiled with cURL."
+"Define shadow filtering quality.\n"
+"This simulates the soft shadows effect by applying a PCF or Poisson disk\n"
+"but also uses more resources."
msgstr ""
#: src/settings_translation_file.cpp
@@ -2844,6 +3044,10 @@ msgid "Disallow empty passwords"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Display Density Scaling Factor"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Domain name of server, to be displayed in the serverlist."
msgstr ""
@@ -2888,6 +3092,19 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Enable Poisson disk filtering.\n"
+"On true uses Poisson disk to make \"soft shadows\". Otherwise uses PCF "
+"filtering."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable colored shadows.\n"
+"On true translucent nodes cast colored shadows. This is expensive."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Enable console window"
msgstr ""
@@ -2996,6 +3213,12 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Enables tradeoffs that reduce CPU load or increase rendering performance\n"
+"at the expense of minor visual glitches that do not impact game playability."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Engine profiling data print interval"
msgstr ""
@@ -3034,18 +3257,6 @@ msgid "Fallback font path"
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 ""
@@ -3063,7 +3274,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Fast movement (via the \"special\" key).\n"
+"Fast movement (via the \"Aux1\" key).\n"
"This requires the \"fast\" privilege on the server."
msgstr ""
@@ -3097,9 +3308,9 @@ 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."
+"which PNG optimizers usually discard, often resulting in dark or\n"
+"light edges to transparent textures. Apply a filter to clean that up\n"
+"at texture load time. This is automatically enabled if mipmapping is enabled."
msgstr ""
#: src/settings_translation_file.cpp
@@ -3191,15 +3402,15 @@ msgid "Font size"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Font size of the default font in point (pt)."
+msgid "Font size divisible by"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Font size of the fallback font in point (pt)."
+msgid "Font size of the default font where 1 unit = 1 pixel at 96 DPI"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Font size of the monospace font in point (pt)."
+msgid "Font size of the monospace font where 1 unit = 1 pixel at 96 DPI"
msgstr ""
#: src/settings_translation_file.cpp
@@ -3210,6 +3421,17 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"For pixel-style fonts that do not scale well, this ensures that font sizes "
+"used\n"
+"with this font will always be divisible by this value, in pixels. For "
+"instance,\n"
+"a pixel font 16 pixels tall should have this set to 16, so it will only ever "
+"be\n"
+"sized 16, 32, 48, etc., so a mod requesting a size of 25 will get 32."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Format of player chat messages. The following strings are valid "
"placeholders:\n"
"@name, @message, @timestamp (optional)"
@@ -3268,10 +3490,6 @@ msgid "Fraction of the visible distance at which fog starts to be rendered"
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)."
@@ -3296,10 +3514,6 @@ msgid "Full screen"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Full screen BPP"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Fullscreen mode."
msgstr ""
@@ -3323,7 +3537,7 @@ msgstr ""
msgid ""
"Global map generation attributes.\n"
"In Mapgen v6 the 'decorations' flag controls all decorations except trees\n"
-"and junglegrass, in all other mapgens this flag controls all decorations."
+"and jungle grass, in all other mapgens this flag controls all decorations."
msgstr ""
#: src/settings_translation_file.cpp
@@ -3392,7 +3606,8 @@ msgid "Heat noise"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Height component of the initial window size."
+msgid ""
+"Height component of the initial window size. Ignored in fullscreen mode."
msgstr ""
#: src/settings_translation_file.cpp
@@ -3404,10 +3619,6 @@ msgid "Height select noise"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "High-precision FPU"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Hill steepness"
msgstr ""
@@ -3638,8 +3849,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"If disabled, \"special\" key is used to fly fast if both fly and fast mode "
-"are\n"
+"If disabled, \"Aux1\" key is used to fly fast if both fly and fast mode are\n"
"enabled."
msgstr ""
@@ -3661,8 +3871,8 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"If enabled, \"special\" key instead of \"sneak\" key is used for climbing "
-"down and\n"
+"If enabled, \"Aux1\" key instead of \"Sneak\" key is used for climbing down "
+"and\n"
"descending."
msgstr ""
@@ -3708,6 +3918,12 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"If the execution of a chat command takes longer than this specified time in\n"
+"seconds, add the time information to the chat command message"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"If the file size of debug.txt exceeds the number of megabytes specified in\n"
"this setting when it is opened, the file is moved to debug.txt.1,\n"
"deleting an older debug.txt.1 if it exists.\n"
@@ -3753,7 +3969,7 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Instrument chatcommands on registration."
+msgid "Instrument chat commands on registration."
msgstr ""
#: src/settings_translation_file.cpp
@@ -3837,7 +4053,7 @@ msgid "Joystick button repetition interval"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Joystick deadzone"
+msgid "Joystick dead zone"
msgstr ""
#: src/settings_translation_file.cpp
@@ -4595,10 +4811,6 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Makes DirectX work with LuaJIT. Disable if it causes troubles."
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Makes all liquids opaque"
msgstr ""
@@ -4670,6 +4882,10 @@ msgid "Map save interval"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Map shadows update frames"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Mapblock limit"
msgstr ""
@@ -4784,6 +5000,10 @@ msgid "Maximum FPS when the window is not focused, or when the game is paused."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Maximum distance to render shadows."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Maximum forceloaded blocks"
msgstr ""
@@ -4889,7 +5109,15 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Maximum time in ms a file download (e.g. a mod download) may take."
+msgid ""
+"Maximum time a file download (e.g. a mod download) may take, stated in "
+"milliseconds."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum time an interactive request (e.g. server list fetch) may take, "
+"stated in milliseconds."
msgstr ""
#: src/settings_translation_file.cpp
@@ -4953,7 +5181,7 @@ msgid "Mod channels"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Modifies the size of the hudbar elements."
+msgid "Modifies the size of the HUD elements."
msgstr ""
#: src/settings_translation_file.cpp
@@ -4965,6 +5193,10 @@ msgid "Monospace font size"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Monospace font size divisible by"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Mountain height noise"
msgstr ""
@@ -5088,7 +5320,7 @@ 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"
+"This is a trade-off between SQLite transaction overhead and\n"
"memory consumption (4096=100MB, as a rule of thumb)."
msgstr ""
@@ -5107,21 +5339,18 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Opaqueness (alpha) of the shadow behind the fallback font, between 0 and 255."
-msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid ""
"Open the pause menu when the window's focus is lost. Does not pause if a "
"formspec is\n"
"open."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Optional override for chat weblink color."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid ""
-"Path of the fallback font.\n"
-"If “freetype†setting is enabled: Must be a TrueType font.\n"
-"If “freetype†setting is disabled: Must be a bitmap or XML vectors font.\n"
+"Path of the fallback font. Must be a TrueType font.\n"
"This font will be used for certain languages or if the default font is "
"unavailable."
msgstr ""
@@ -5144,17 +5373,13 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Path to the default font.\n"
-"If “freetype†setting is enabled: Must be a TrueType font.\n"
-"If “freetype†setting is disabled: Must be a bitmap or XML vectors font.\n"
+"Path to the default font. Must be a TrueType font.\n"
"The fallback font will be used if the font cannot be loaded."
msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Path to the monospace font.\n"
-"If “freetype†setting is enabled: Must be a TrueType font.\n"
-"If “freetype†setting is disabled: Must be a bitmap or XML vectors font.\n"
+"Path to the monospace font. Must be a TrueType font.\n"
"This font is used for e.g. the console and profiler screen."
msgstr ""
@@ -5209,6 +5434,10 @@ msgid "Player versus player"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Poisson filtering"
+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."
@@ -5253,9 +5482,9 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"Prometheus listener address.\n"
-"If minetest is compiled with ENABLE_PROMETHEUS option enabled,\n"
+"If Minetest is compiled with ENABLE_PROMETHEUS option enabled,\n"
"enable metrics listener for Prometheus on that address.\n"
-"Metrics can be fetch on http://127.0.0.1:30000/metrics"
+"Metrics can be fetched on http://127.0.0.1:30000/metrics"
msgstr ""
#: src/settings_translation_file.cpp
@@ -5544,6 +5773,32 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Set the shadow strength.\n"
+"Lower value means lighter shadows, higher value means darker shadows."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set the soft shadow radius size.\n"
+"Lower values mean sharper shadows, bigger values mean softer shadows.\n"
+"Minimum value: 1.0; maximum value: 10.0"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set the tilt of Sun/Moon orbit in degrees.\n"
+"Value of 0 means no tilt / vertical orbit.\n"
+"Minimum value: 0.0; maximum value: 60.0"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set to true to enable Shadow Mapping.\n"
+"Requires shaders to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Set to true to enable waving leaves.\n"
"Requires shaders to be enabled."
msgstr ""
@@ -5561,6 +5816,13 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Sets shadow texture quality to 32 bits.\n"
+"On false, 16 bits texture will be used.\n"
+"This can cause much more artifacts in the shadow."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Shader path"
msgstr ""
@@ -5573,15 +5835,29 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Shadow filter quality"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Shadow map max distance in nodes to render shadows"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Shadow map texture in 32 bits"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Shadow map texture size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid ""
"Shadow offset (in pixels) of the default font. If 0, then shadow will not be "
"drawn."
msgstr ""
#: src/settings_translation_file.cpp
-msgid ""
-"Shadow offset (in pixels) of the fallback font. If 0, then shadow will not "
-"be drawn."
+msgid "Shadow strength"
msgstr ""
#: src/settings_translation_file.cpp
@@ -5603,7 +5879,7 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Show nametag backgrounds by default"
+msgid "Show name tag backgrounds by default"
msgstr ""
#: src/settings_translation_file.cpp
@@ -5628,6 +5904,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Sky Body Orbit Tilt"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Slice w"
msgstr ""
@@ -5682,15 +5962,11 @@ msgid "Sneaking speed, in nodes per second."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Sound"
-msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid "Special key"
+msgid "Soft shadow radius"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Special key for climbing/descending"
+msgid "Sound"
msgstr ""
#: src/settings_translation_file.cpp
@@ -5710,6 +5986,14 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Spread a complete update of shadow map over given amount of frames.\n"
+"Higher values might make shadows laggy, lower values\n"
+"will consume more resources.\n"
+"Minimum value: 1; maximum value: 16"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Spread of light curve boost range.\n"
"Controls the width of the range to be boosted.\n"
"Standard deviation of the light curve boost Gaussian."
@@ -5816,6 +6100,13 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Texture size to render the shadow map on.\n"
+"This must be a power of two.\n"
+"Bigger numbers create better shadows but it is also more expensive."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Textures on a node may be aligned either to the node or to the world.\n"
"The former mode suits better things like machines, furniture, etc., while\n"
"the latter makes stairs and microblocks fit surroundings better.\n"
@@ -5829,7 +6120,7 @@ msgid "The URL for the content repository"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "The deadzone of the joystick"
+msgid "The dead zone of the joystick"
msgstr ""
#: src/settings_translation_file.cpp
@@ -5887,7 +6178,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"The rendering back-end for Irrlicht.\n"
+"The rendering back-end.\n"
"A restart is required after changing this.\n"
"Note: On Android, stick with OGLES1 if unsure! App may fail to start "
"otherwise.\n"
@@ -5898,7 +6189,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"The sensitivity of the joystick axes for moving the\n"
-"ingame view frustum around."
+"in-game view frustum around."
msgstr ""
#: src/settings_translation_file.cpp
@@ -5992,6 +6283,10 @@ msgid "Touch screen threshold"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Tradeoffs for performance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Trees noise"
msgstr ""
@@ -6061,7 +6356,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Use mip mapping to scale textures. May slightly increase performance,\n"
+"Use mipmapping to scale textures. May slightly increase performance,\n"
"especially when using a high resolution texture pack.\n"
"Gamma correct downscaling is not supported."
msgstr ""
@@ -6174,7 +6469,7 @@ msgid "Viewing range"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Virtual joystick triggers aux button"
+msgid "Virtual joystick triggers Aux1 button"
msgstr ""
#: src/settings_translation_file.cpp
@@ -6245,6 +6540,10 @@ msgid "Waving plants"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Weblink color"
+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"
@@ -6265,23 +6564,15 @@ msgid ""
"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.\n"
+"memory. Powers of 2 are recommended. This setting is ONLY applied if\n"
+"bilinear/trilinear/anisotropic filtering is enabled.\n"
"This is also used as the base node texture size for world-aligned\n"
"texture autoscaling."
msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Whether FreeType fonts are used, requires FreeType support to be compiled "
-"in.\n"
-"If disabled, bitmap and XML vectors fonts are used instead."
-msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid ""
-"Whether nametag backgrounds should be shown by default.\n"
+"Whether name tag backgrounds should be shown by default.\n"
"Mods may still set a background."
msgstr ""
@@ -6323,7 +6614,7 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Width component of the initial window size."
+msgid "Width component of the initial window size. Ignored in fullscreen mode."
msgstr ""
#: src/settings_translation_file.cpp
@@ -6409,38 +6700,23 @@ msgid "Y-level of seabed."
msgstr ""
#: src/settings_translation_file.cpp
-msgid ""
-"ZLib compression level to use when saving mapblocks to disk.\n"
-"-1 - Zlib's default compression level\n"
-"0 - no compresson, fastest\n"
-"9 - best compression, slowest\n"
-"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)"
-msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid ""
-"ZLib compression level to use when sending mapblocks to the client.\n"
-"-1 - Zlib's default compression level\n"
-"0 - no compresson, fastest\n"
-"9 - best compression, slowest\n"
-"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "cURL file download timeout"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "cURL parallel limit"
+msgid "cURL interactive timeout"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "cURL timeout"
+msgid "cURL parallel limit"
msgstr ""
#~ msgid "Configure"
#~ msgstr "Þ„Þ¦Þ‹Þ¦ÞÞªÞŽÞ¬Þ‚Þ­"
+#~ msgid "Damage enabled"
+#~ msgstr "Þ‡Þ¦Þ‚Þ¨Þ”Þ§ÞˆÞªÞ‚Þ° Þ–Þ¦Þ‡Þ°ÞÞ§ÞŠÞ¦Þ‡Þ¨"
+
#~ msgid "Downloading and installing $1, please wait..."
#~ msgstr "$1 Þ‘Þ¦Þ‡ÞªÞ‚Þ°ÞÞ¯Þ‘Þ®Þ†Þ®ÞÞ° Þ‡Þ¨Þ‚Þ°ÞÞ°Þ“Þ¯ÞÞ°Þ†ÞªÞƒÞ¦Þ‚Þ©ØŒ Þ‰Þ¦Þ‘ÞªÞ†ÞªÞƒÞ¦Þ‡Þ°ÞˆÞ§..."
@@ -6448,15 +6724,32 @@ msgstr ""
#~ msgstr "Þ•Þ¯ÞÞ° Þ‰Þ¬Þ‚Þ«ÞŽÞ¦Þ‡Þ¨ Þ‡Þ¬ÞŠÞ°.Þ•Þ©.Þ‡Þ¬ÞÞ°"
#, fuzzy
+#~ msgid "Install: file: \"$1\""
+#~ msgstr "Þ‰Þ®Þ‘Þ° Þ‡Þ¦ÞšÞ§: ÞŠÞ¦Þ‡Þ¨ÞÞ°:\"1$\""
+
+#, fuzzy
#~ msgid "Main menu style"
#~ msgstr "Þ‰Þ¬Þ‡Þ¨Þ‚Þ° Þ‰Þ¬Þ‚Þ« ÞÞ°Þ†Þ°ÞƒÞ¨Þ•Þ°Þ“Þ°"
+#~ msgid "Name / Password"
+#~ msgstr "Þ•Þ§ÞÞ°ÞˆÞ¯Þ‘Þ° / Þ‚Þ¦Þ‚Þ°"
+
#~ msgid "No"
#~ msgstr "Þ‚Þ«Þ‚Þ°"
#~ msgid "Ok"
#~ msgstr "emme rangalhu"
+#~ msgid "PvP enabled"
+#~ msgstr "Þ•Þ©.ÞˆÞ©.Þ•Þ© Þ–Þ¦Þ‡Þ°ÞÞ§"
+
#, fuzzy
#~ msgid "Select Package File:"
#~ msgstr "Þ‰Þ®Þ‘Þ°ÞŽÞ¬ ÞŠÞ¦Þ‡Þ¨ÞÞ° އިހްތިޔާރުކުރޭ:"
+
+#, fuzzy
+#~ msgid "You died."
+#~ msgstr "Þ‰Þ¦ÞƒÞªÞˆÞ©"
+
+#~ msgid "needs_fallback_font"
+#~ msgstr "yes"
diff --git a/po/el/minetest.po b/po/el/minetest.po
index 3ae9d7017..2bf5854e6 100644
--- a/po/el/minetest.po
+++ b/po/el/minetest.po
@@ -2,9 +2,9 @@ msgid ""
msgstr ""
"Project-Id-Version: Greek (Minetest)\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-02-23 19:03+0100\n"
-"PO-Revision-Date: 2021-03-22 18:29+0000\n"
-"Last-Translator: Michalis <michalisntovas@yahoo.gr>\n"
+"POT-Creation-Date: 2022-01-25 23:19+0100\n"
+"PO-Revision-Date: 2021-06-07 14:33+0000\n"
+"Last-Translator: THANOS SIOURDAKIS <siourdakisthanos@gmail.com>\n"
"Language-Team: Greek <https://hosted.weblate.org/projects/minetest/minetest/"
"el/>\n"
"Language: el\n"
@@ -12,7 +12,44 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 4.5.2-dev\n"
+"X-Generator: Weblate 4.7-dev\n"
+
+#: builtin/client/chatcommands.lua
+msgid "Clear the out chat queue"
+msgstr ""
+
+#: builtin/client/chatcommands.lua
+msgid "Empty command."
+msgstr ""
+
+#: builtin/client/chatcommands.lua
+#, fuzzy
+msgid "Exit to main menu"
+msgstr "Έξοδος στο ΜενοÏ"
+
+#: builtin/client/chatcommands.lua
+msgid "Invalid command: "
+msgstr ""
+
+#: builtin/client/chatcommands.lua
+msgid "Issued command: "
+msgstr ""
+
+#: builtin/client/chatcommands.lua
+msgid "List online players"
+msgstr ""
+
+#: builtin/client/chatcommands.lua
+msgid "Online players: "
+msgstr ""
+
+#: builtin/client/chatcommands.lua
+msgid "The out chat queue is now empty."
+msgstr ""
+
+#: builtin/client/chatcommands.lua
+msgid "This command is disabled by server."
+msgstr ""
#: builtin/client/death_formspec.lua src/client/game.cpp
msgid "Respawn"
@@ -22,11 +59,40 @@ msgstr ""
msgid "You died"
msgstr "Πέθανες"
+#: builtin/common/chatcommands.lua
+msgid "Available commands:"
+msgstr ""
+
+#: builtin/common/chatcommands.lua
+msgid "Available commands: "
+msgstr ""
+
+#: builtin/common/chatcommands.lua
+msgid "Command not available: "
+msgstr ""
+
+#: builtin/common/chatcommands.lua
+msgid "Get help for commands"
+msgstr ""
+
+#: builtin/common/chatcommands.lua
+msgid ""
+"Use '.help <cmd>' to get more information, or '.help all' to list everything."
+msgstr ""
+
+#: builtin/common/chatcommands.lua
+msgid "[all | <cmd>]"
+msgstr ""
+
#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp
msgid "OK"
msgstr "Εντάξει"
#: builtin/fstk/ui.lua
+msgid "<none available>"
+msgstr ""
+
+#: builtin/fstk/ui.lua
msgid "An error occurred in a Lua script:"
msgstr "Ένα σφάλμα Ï€Ïοέκυψε σε ένα σενάÏιο Lua:"
@@ -151,7 +217,7 @@ msgstr "ενεÏγοποιήθηκε"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "\"$1\" already exists. Would you like to overwrite it?"
-msgstr ""
+msgstr "Το \"$1\" ήδη υπάÏχει. Θέλετε να το αντικαταστήσετε;"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "$1 and $2 dependencies will be installed."
@@ -168,7 +234,6 @@ msgid ""
msgstr ""
#: builtin/mainmenu/dlg_contentstore.lua
-#, fuzzy
msgid "$1 downloading..."
msgstr "Λήψη ..."
@@ -219,13 +284,17 @@ msgstr "Εγκατάσταση"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Install $1"
-msgstr ""
+msgstr "Εγκατάσταση $1"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Install missing dependencies"
msgstr ""
#: builtin/mainmenu/dlg_contentstore.lua
+msgid "Install: Unsupported file type or broken archive"
+msgstr ""
+
+#: builtin/mainmenu/dlg_contentstore.lua
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Mods"
msgstr ""
@@ -525,9 +594,9 @@ msgstr ""
msgid "Browse"
msgstr "ΠεÏιήγηση"
-#: builtin/mainmenu/dlg_settings_advanced.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_settings.lua
msgid "Disabled"
-msgstr ""
+msgstr "ΑπενεÏγοποιημένο"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Edit"
@@ -550,7 +619,7 @@ msgid "Offset"
msgstr ""
#: builtin/mainmenu/dlg_settings_advanced.lua
-msgid "Persistance"
+msgid "Persistence"
msgstr ""
#: builtin/mainmenu/dlg_settings_advanced.lua
@@ -569,7 +638,7 @@ msgstr ""
msgid "Scale"
msgstr ""
-#: builtin/mainmenu/dlg_settings_advanced.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_online.lua
msgid "Search"
msgstr "Αναζήτηση"
@@ -595,7 +664,7 @@ msgstr ""
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "X"
-msgstr ""
+msgstr "X"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "X spread"
@@ -603,7 +672,7 @@ msgstr ""
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Y"
-msgstr ""
+msgstr "Y"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Y spread"
@@ -611,7 +680,7 @@ msgstr ""
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Z"
-msgstr ""
+msgstr "Z"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Z spread"
@@ -661,14 +730,6 @@ msgid "Install Mod: Unable to find suitable folder name for modpack $1"
msgstr ""
#: builtin/mainmenu/pkgmgr.lua
-msgid "Install: Unsupported file type \"$1\" or broken archive"
-msgstr ""
-
-#: builtin/mainmenu/pkgmgr.lua
-msgid "Install: file: \"$1\""
-msgstr "Εγκατάσταση: αÏχείο: \"$1\""
-
-#: builtin/mainmenu/pkgmgr.lua
msgid "Unable to find a valid mod or modpack"
msgstr ""
@@ -702,6 +763,40 @@ msgstr ""
"Δοκιμάστε να ενεÏγοποιήσετε ξανά τη δημόσια λίστα διακομιστών και ελέγξτε τη "
"σÏνδεσή σας στο διαδίκτυο."
+#: builtin/mainmenu/tab_about.lua
+msgid "About"
+msgstr ""
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Active Contributors"
+msgstr ""
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Active renderer:"
+msgstr ""
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Core Developers"
+msgstr ""
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Open User Data Directory"
+msgstr ""
+
+#: builtin/mainmenu/tab_about.lua
+msgid ""
+"Opens the directory that contains user-provided worlds, games, mods,\n"
+"and texture packs in a file manager / explorer."
+msgstr ""
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Previous Contributors"
+msgstr ""
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Previous Core Developers"
+msgstr ""
+
#: builtin/mainmenu/tab_content.lua
msgid "Browse online content"
msgstr "ΠεÏιήγηση Î´Î¹Î±Î´Î¹ÎºÏ„Ï…Î±ÎºÎ¿Ï Ï€ÎµÏιεχομένου"
@@ -736,42 +831,12 @@ msgstr "Μετονομασία"
#: builtin/mainmenu/tab_content.lua
msgid "Uninstall Package"
-msgstr ""
+msgstr "Απεγκατάσταση πακέτου"
#: builtin/mainmenu/tab_content.lua
msgid "Use Texture Pack"
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 "Open User Data Directory"
-msgstr ""
-
-#: builtin/mainmenu/tab_credits.lua
-msgid ""
-"Opens the directory that contains user-provided worlds, games, mods,\n"
-"and texture packs in a file manager / explorer."
-msgstr ""
-
-#: builtin/mainmenu/tab_credits.lua
-msgid "Previous Contributors"
-msgstr ""
-
-#: builtin/mainmenu/tab_credits.lua
-msgid "Previous Core Developers"
-msgstr ""
-
#: builtin/mainmenu/tab_local.lua
msgid "Announce Server"
msgstr ""
@@ -798,9 +863,9 @@ msgstr ""
#: builtin/mainmenu/tab_local.lua
msgid "Install games from ContentDB"
-msgstr ""
+msgstr "Εγκατάσταση παιχνιδιών από το ContentDB"
-#: builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
msgid "Name"
msgstr "Όνομα"
@@ -812,7 +877,7 @@ msgstr "Îέο"
msgid "No world created or selected!"
msgstr ""
-#: builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
msgid "Password"
msgstr "Κωδικός"
@@ -820,7 +885,7 @@ msgstr "Κωδικός"
msgid "Play Game"
msgstr ""
-#: builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
msgid "Port"
msgstr "ΘήÏα"
@@ -841,8 +906,13 @@ msgid "Start Game"
msgstr "Εκκίνηση ΠαιχνιδιοÏ"
#: builtin/mainmenu/tab_online.lua
-msgid "Address / Port"
-msgstr "ΔιεÏθυνση ΑποθετηÏίου"
+#, fuzzy
+msgid "Address"
+msgstr "- ΔιεÏθυνση: "
+
+#: builtin/mainmenu/tab_online.lua src/client/keycode.cpp
+msgid "Clear"
+msgstr "ΕκκαθάÏιση"
#: builtin/mainmenu/tab_online.lua
msgid "Connect"
@@ -852,8 +922,9 @@ msgstr "ΣÏνδεση"
msgid "Creative mode"
msgstr ""
+#. ~ PvP = Player versus Player
#: builtin/mainmenu/tab_online.lua
-msgid "Damage enabled"
+msgid "Damage / PvP"
msgstr ""
#: builtin/mainmenu/tab_online.lua
@@ -861,41 +932,49 @@ msgid "Del. Favorite"
msgstr ""
#: builtin/mainmenu/tab_online.lua
-msgid "Favorite"
+msgid "Favorites"
msgstr ""
#: builtin/mainmenu/tab_online.lua
-msgid "Join Game"
+msgid "Incompatible Servers"
msgstr ""
#: builtin/mainmenu/tab_online.lua
-msgid "Name / Password"
-msgstr "Όνομα / Κωδικός"
+msgid "Join Game"
+msgstr ""
#: builtin/mainmenu/tab_online.lua
msgid "Ping"
msgstr ""
-#. ~ PvP = Player versus Player
#: builtin/mainmenu/tab_online.lua
-msgid "PvP enabled"
+msgid "Public Servers"
+msgstr ""
+
+#: builtin/mainmenu/tab_online.lua
+msgid "Refresh"
msgstr ""
+#: builtin/mainmenu/tab_online.lua
+#, fuzzy
+msgid "Server Description"
+msgstr "ΠεÏιγÏαφή διακομιστή"
+
#: builtin/mainmenu/tab_settings.lua
msgid "2x"
msgstr ""
#: builtin/mainmenu/tab_settings.lua
msgid "3D Clouds"
-msgstr ""
+msgstr "3D ΣÏννεφα"
#: builtin/mainmenu/tab_settings.lua
msgid "4x"
-msgstr ""
+msgstr "4x"
#: builtin/mainmenu/tab_settings.lua
msgid "8x"
-msgstr ""
+msgstr "8x"
#: builtin/mainmenu/tab_settings.lua
msgid "All Settings"
@@ -921,11 +1000,31 @@ msgstr "Αλλαγή πλήκτÏων"
msgid "Connected Glass"
msgstr ""
+#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
+msgid "Dynamic shadows"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Dynamic shadows: "
+msgstr ""
+
#: builtin/mainmenu/tab_settings.lua
msgid "Fancy Leaves"
msgstr ""
#: builtin/mainmenu/tab_settings.lua
+msgid "High"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Low"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Medium"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
msgid "Mipmap"
msgstr ""
@@ -967,7 +1066,7 @@ msgstr ""
#: builtin/mainmenu/tab_settings.lua
msgid "Screen:"
-msgstr ""
+msgstr "Οθόνη:"
#: builtin/mainmenu/tab_settings.lua
msgid "Settings"
@@ -997,10 +1096,6 @@ msgstr ""
msgid "Texturing:"
msgstr ""
-#: builtin/mainmenu/tab_settings.lua
-msgid "To enable shaders the OpenGL driver needs to be used."
-msgstr ""
-
#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
msgid "Tone Mapping"
msgstr ""
@@ -1014,6 +1109,14 @@ msgid "Trilinear Filter"
msgstr ""
#: builtin/mainmenu/tab_settings.lua
+msgid "Ultra High"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Very Low"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
msgid "Waving Leaves"
msgstr ""
@@ -1025,7 +1128,7 @@ msgstr ""
msgid "Waving Plants"
msgstr ""
-#: src/client/client.cpp
+#: src/client/client.cpp src/client/game.cpp
msgid "Connection timed out."
msgstr ""
@@ -1054,7 +1157,7 @@ msgid "Connection error (timed out?)"
msgstr ""
#: src/client/clientlauncher.cpp
-msgid "Could not find or load game \""
+msgid "Could not find or load game: "
msgstr ""
#: src/client/clientlauncher.cpp
@@ -1085,18 +1188,6 @@ msgstr ""
msgid "Provided world path doesn't exist: "
msgstr ""
-#. ~ DO NOT TRANSLATE THIS LITERALLY!
-#. This is a special string. Put either "no" or "yes"
-#. into the translation field (literally).
-#. Choose "yes" if the language requires use of the fallback
-#. font, "no" otherwise.
-#. The fallback font is (normally) required for languages with
-#. non-Latin script, like Chinese.
-#. When in doubt, test your translation.
-#: src/client/fontengine.cpp
-msgid "needs_fallback_font"
-msgstr "needs_fallback_font"
-
#: src/client/game.cpp
msgid ""
"\n"
@@ -1108,14 +1199,6 @@ msgid "- Address: "
msgstr "- ΔιεÏθυνση: "
#: src/client/game.cpp
-msgid "- Creative Mode: "
-msgstr ""
-
-#: src/client/game.cpp
-msgid "- Damage: "
-msgstr ""
-
-#: src/client/game.cpp
msgid "- Mode: "
msgstr ""
@@ -1125,7 +1208,7 @@ msgstr "- ΘήÏα: "
#: src/client/game.cpp
msgid "- Public: "
-msgstr ""
+msgstr "- Δημόσιο: "
#. ~ PvP = Player versus Player
#: src/client/game.cpp
@@ -1137,6 +1220,16 @@ msgid "- Server Name: "
msgstr "- Όνομα Διακομιστή: "
#: src/client/game.cpp
+#, fuzzy
+msgid "A serialization error occurred:"
+msgstr "ΠαÏουσιάστηκε σφάλμα:"
+
+#: src/client/game.cpp
+#, c-format
+msgid "Access denied. Reason: %s"
+msgstr ""
+
+#: src/client/game.cpp
msgid "Automatic forward disabled"
msgstr ""
@@ -1145,6 +1238,22 @@ msgid "Automatic forward enabled"
msgstr ""
#: src/client/game.cpp
+msgid "Block bounds hidden"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Block bounds shown for all blocks"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Block bounds shown for current block"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Block bounds shown for nearby blocks"
+msgstr ""
+
+#: src/client/game.cpp
msgid "Camera update disabled"
msgstr ""
@@ -1153,6 +1262,10 @@ msgid "Camera update enabled"
msgstr ""
#: src/client/game.cpp
+msgid "Can't show block bounds (need 'basic_debug' privilege)"
+msgstr ""
+
+#: src/client/game.cpp
msgid "Change Password"
msgstr ""
@@ -1165,6 +1278,10 @@ msgid "Cinematic mode enabled"
msgstr ""
#: src/client/game.cpp
+msgid "Client disconnected"
+msgstr ""
+
+#: src/client/game.cpp
msgid "Client side scripting is disabled"
msgstr ""
@@ -1173,6 +1290,10 @@ msgid "Connecting to server..."
msgstr ""
#: src/client/game.cpp
+msgid "Connection failed for unknown reason"
+msgstr ""
+
+#: src/client/game.cpp
msgid "Continue"
msgstr "Συνέχεια"
@@ -1196,6 +1317,11 @@ msgid ""
msgstr ""
#: src/client/game.cpp
+#, c-format
+msgid "Couldn't resolve address: %s"
+msgstr ""
+
+#: src/client/game.cpp
msgid "Creating client..."
msgstr ""
@@ -1312,6 +1438,10 @@ msgid "Minimap currently disabled by game or mod"
msgstr ""
#: src/client/game.cpp
+msgid "Multiplayer"
+msgstr ""
+
+#: src/client/game.cpp
msgid "Noclip mode disabled"
msgstr ""
@@ -1385,6 +1515,21 @@ msgstr ""
#: src/client/game.cpp
#, c-format
+msgid "The server is probably running a different version of %s."
+msgstr ""
+
+#: src/client/game.cpp
+#, c-format
+msgid "Unable to connect to %s because IPv6 is disabled"
+msgstr ""
+
+#: src/client/game.cpp
+#, c-format
+msgid "Unable to listen on %s because IPv6 is disabled"
+msgstr ""
+
+#: src/client/game.cpp
+#, c-format
msgid "Viewing range changed to %d"
msgstr ""
@@ -1442,7 +1587,7 @@ msgstr ""
#: src/client/keycode.cpp
msgid "Apps"
-msgstr ""
+msgstr "ΕφαÏμογές"
#: src/client/keycode.cpp
msgid "Backspace"
@@ -1453,10 +1598,6 @@ msgid "Caps Lock"
msgstr ""
#: src/client/keycode.cpp
-msgid "Clear"
-msgstr "ΕκκαθάÏιση"
-
-#: src/client/keycode.cpp
msgid "Control"
msgstr ""
@@ -1466,7 +1607,7 @@ msgstr "Κάτω"
#: src/client/keycode.cpp
msgid "End"
-msgstr ""
+msgstr "Τέλος"
#: src/client/keycode.cpp
msgid "Erase EOF"
@@ -1506,7 +1647,7 @@ msgstr ""
#: src/client/keycode.cpp
msgid "Insert"
-msgstr ""
+msgstr "Εισαγωγή"
#: src/client/keycode.cpp src/gui/guiKeyChangeMenu.cpp
msgid "Left"
@@ -1547,63 +1688,63 @@ msgstr ""
#: src/client/keycode.cpp
msgid "Numpad *"
-msgstr ""
+msgstr "Numpad *"
#: src/client/keycode.cpp
msgid "Numpad +"
-msgstr ""
+msgstr "Numpad +"
#: src/client/keycode.cpp
msgid "Numpad -"
-msgstr ""
+msgstr "Numpad -"
#: src/client/keycode.cpp
msgid "Numpad ."
-msgstr ""
+msgstr "Numpad ."
#: src/client/keycode.cpp
msgid "Numpad /"
-msgstr ""
+msgstr "Numpad /"
#: src/client/keycode.cpp
msgid "Numpad 0"
-msgstr ""
+msgstr "Numpad 0"
#: src/client/keycode.cpp
msgid "Numpad 1"
-msgstr ""
+msgstr "Numpad 1"
#: src/client/keycode.cpp
msgid "Numpad 2"
-msgstr ""
+msgstr "Numpad 2"
#: src/client/keycode.cpp
msgid "Numpad 3"
-msgstr ""
+msgstr "Numpad 3"
#: src/client/keycode.cpp
msgid "Numpad 4"
-msgstr ""
+msgstr "Numpad 4"
#: src/client/keycode.cpp
msgid "Numpad 5"
-msgstr ""
+msgstr "Numpad 5"
#: src/client/keycode.cpp
msgid "Numpad 6"
-msgstr ""
+msgstr "Numpad 6"
#: src/client/keycode.cpp
msgid "Numpad 7"
-msgstr ""
+msgstr "Numpad 7"
#: src/client/keycode.cpp
msgid "Numpad 8"
-msgstr ""
+msgstr "Numpad 8"
#: src/client/keycode.cpp
msgid "Numpad 9"
-msgstr ""
+msgstr "Numpad 9"
#: src/client/keycode.cpp
msgid "OEM Clear"
@@ -1632,7 +1773,7 @@ msgstr "ΕκτÏπωση"
#: src/client/keycode.cpp
msgid "Return"
-msgstr ""
+msgstr "ΕπιστÏοφή"
#: src/client/keycode.cpp src/gui/guiKeyChangeMenu.cpp
msgid "Right"
@@ -1665,7 +1806,7 @@ msgstr ""
#. ~ Key name
#: src/client/keycode.cpp
msgid "Select"
-msgstr ""
+msgstr "Επιλογή"
#: src/client/keycode.cpp
msgid "Shift"
@@ -1721,6 +1862,14 @@ msgstr ""
msgid "Minimap in texture mode"
msgstr ""
+#: src/gui/guiChatConsole.cpp
+msgid "Failed to open webpage"
+msgstr ""
+
+#: src/gui/guiChatConsole.cpp
+msgid "Opening webpage"
+msgstr ""
+
#: src/gui/guiConfirmRegistration.cpp src/gui/guiPasswordChange.cpp
msgid "Passwords do not match!"
msgstr ""
@@ -1744,7 +1893,7 @@ msgid "Proceed"
msgstr ""
#: src/gui/guiKeyChangeMenu.cpp
-msgid "\"Special\" = climb down"
+msgid "\"Aux1\" = climb down"
msgstr ""
#: src/gui/guiKeyChangeMenu.cpp
@@ -1756,10 +1905,18 @@ msgid "Automatic jumping"
msgstr ""
#: src/gui/guiKeyChangeMenu.cpp
+msgid "Aux1"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
msgid "Backward"
msgstr ""
#: src/gui/guiKeyChangeMenu.cpp
+msgid "Block bounds"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
msgid "Change camera"
msgstr ""
@@ -1848,10 +2005,6 @@ msgid "Sneak"
msgstr ""
#: src/gui/guiKeyChangeMenu.cpp
-msgid "Special"
-msgstr ""
-
-#: src/gui/guiKeyChangeMenu.cpp
msgid "Toggle HUD"
msgstr ""
@@ -1912,8 +2065,9 @@ msgid "Muted"
msgstr "Σε σίγαση"
#: src/gui/guiVolumeChange.cpp
-msgid "Sound Volume: "
-msgstr ""
+#, fuzzy, c-format
+msgid "Sound Volume: %d%%"
+msgstr "Ένταση ήχου: "
#. ~ Imperative, as in "Enter/type in text".
#. Don't forget the space.
@@ -1936,8 +2090,8 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"(Android) Use virtual joystick to trigger \"aux\" button.\n"
-"If enabled, virtual joystick will also tap \"aux\" button when out of main "
+"(Android) Use virtual joystick to trigger \"Aux1\" button.\n"
+"If enabled, virtual joystick will also tap \"Aux1\" button when out of main "
"circle."
msgstr ""
@@ -1994,7 +2148,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "3D clouds"
-msgstr ""
+msgstr "3D σÏννεφα"
#: src/settings_translation_file.cpp
msgid "3D mode"
@@ -2120,6 +2274,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Adjust the detected display density, used for scaling UI elements."
+msgstr ""
+
+#: src/settings_translation_file.cpp
#, c-format
msgid ""
"Adjusts the density of the floatland layer.\n"
@@ -2232,6 +2390,14 @@ msgid "Autoscaling mode"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Aux1 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Aux1 key for climbing/descending"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Backward key"
msgstr ""
@@ -2276,10 +2442,6 @@ msgid "Biome noise"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Bits per pixel (aka color depth) in fullscreen mode."
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Block send optimize distance"
msgstr ""
@@ -2378,6 +2540,15 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Chat command time message threshold"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Chat commands"
+msgstr "Εντολή"
+
+#: src/settings_translation_file.cpp
msgid "Chat font size"
msgstr ""
@@ -2410,7 +2581,7 @@ msgid "Chat toggle key"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Chatcommands"
+msgid "Chat weblinks"
msgstr ""
#: src/settings_translation_file.cpp
@@ -2430,6 +2601,12 @@ msgid "Clean transparent textures"
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Clickable weblinks (middle-click or Ctrl+left-click) enabled in chat console "
+"output."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Client"
msgstr ""
@@ -2474,6 +2651,10 @@ msgid "Colored fog"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Colored shadows"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid ""
"Comma-separated list of flags to hide in the content repository.\n"
"\"nonfree\" can be used to hide packages which do not qualify as 'free "
@@ -2501,6 +2682,22 @@ msgid "Command key"
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Compression level to use when saving mapblocks to disk.\n"
+"-1 - use default compression level\n"
+"0 - least compression, fastest\n"
+"9 - best compression, slowest"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Compression level to use when sending mapblocks to the client.\n"
+"-1 - use default compression level\n"
+"0 - least compression, fastest\n"
+"9 - best compression, slowest"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Connect glass"
msgstr ""
@@ -2591,7 +2788,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"Crosshair alpha (opaqueness, between 0 and 255).\n"
-"Also controls the object crosshair color"
+"This also applies to the object crosshair."
msgstr ""
#: src/settings_translation_file.cpp
@@ -2668,8 +2865,9 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Default timeout for cURL, stated in milliseconds.\n"
-"Only has an effect if compiled with cURL."
+"Define shadow filtering quality.\n"
+"This simulates the soft shadows effect by applying a PCF or Poisson disk\n"
+"but also uses more resources."
msgstr ""
#: src/settings_translation_file.cpp
@@ -2787,6 +2985,10 @@ msgid "Disallow empty passwords"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Display Density Scaling Factor"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Domain name of server, to be displayed in the serverlist."
msgstr ""
@@ -2831,6 +3033,19 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Enable Poisson disk filtering.\n"
+"On true uses Poisson disk to make \"soft shadows\". Otherwise uses PCF "
+"filtering."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable colored shadows.\n"
+"On true translucent nodes cast colored shadows. This is expensive."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Enable console window"
msgstr ""
@@ -2939,6 +3154,12 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Enables tradeoffs that reduce CPU load or increase rendering performance\n"
+"at the expense of minor visual glitches that do not impact game playability."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Engine profiling data print interval"
msgstr ""
@@ -2977,18 +3198,6 @@ msgid "Fallback font path"
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 ""
@@ -3006,7 +3215,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Fast movement (via the \"special\" key).\n"
+"Fast movement (via the \"Aux1\" key).\n"
"This requires the \"fast\" privilege on the server."
msgstr ""
@@ -3040,9 +3249,9 @@ 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."
+"which PNG optimizers usually discard, often resulting in dark or\n"
+"light edges to transparent textures. Apply a filter to clean that up\n"
+"at texture load time. This is automatically enabled if mipmapping is enabled."
msgstr ""
#: src/settings_translation_file.cpp
@@ -3134,15 +3343,15 @@ msgid "Font size"
msgstr "Μέγεθος γÏαμματοσειÏάς"
#: src/settings_translation_file.cpp
-msgid "Font size of the default font in point (pt)."
+msgid "Font size divisible by"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Font size of the fallback font in point (pt)."
+msgid "Font size of the default font where 1 unit = 1 pixel at 96 DPI"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Font size of the monospace font in point (pt)."
+msgid "Font size of the monospace font where 1 unit = 1 pixel at 96 DPI"
msgstr ""
#: src/settings_translation_file.cpp
@@ -3153,6 +3362,17 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"For pixel-style fonts that do not scale well, this ensures that font sizes "
+"used\n"
+"with this font will always be divisible by this value, in pixels. For "
+"instance,\n"
+"a pixel font 16 pixels tall should have this set to 16, so it will only ever "
+"be\n"
+"sized 16, 32, 48, etc., so a mod requesting a size of 25 will get 32."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Format of player chat messages. The following strings are valid "
"placeholders:\n"
"@name, @message, @timestamp (optional)"
@@ -3211,10 +3431,6 @@ msgid "Fraction of the visible distance at which fog starts to be rendered"
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)."
@@ -3239,10 +3455,6 @@ msgid "Full screen"
msgstr "ΠλήÏης οθόνη"
#: src/settings_translation_file.cpp
-msgid "Full screen BPP"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Fullscreen mode."
msgstr ""
@@ -3266,7 +3478,7 @@ msgstr ""
msgid ""
"Global map generation attributes.\n"
"In Mapgen v6 the 'decorations' flag controls all decorations except trees\n"
-"and junglegrass, in all other mapgens this flag controls all decorations."
+"and jungle grass, in all other mapgens this flag controls all decorations."
msgstr ""
#: src/settings_translation_file.cpp
@@ -3335,7 +3547,8 @@ msgid "Heat noise"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Height component of the initial window size."
+msgid ""
+"Height component of the initial window size. Ignored in fullscreen mode."
msgstr ""
#: src/settings_translation_file.cpp
@@ -3347,10 +3560,6 @@ msgid "Height select noise"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "High-precision FPU"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Hill steepness"
msgstr ""
@@ -3581,8 +3790,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"If disabled, \"special\" key is used to fly fast if both fly and fast mode "
-"are\n"
+"If disabled, \"Aux1\" key is used to fly fast if both fly and fast mode are\n"
"enabled."
msgstr ""
@@ -3604,8 +3812,8 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"If enabled, \"special\" key instead of \"sneak\" key is used for climbing "
-"down and\n"
+"If enabled, \"Aux1\" key instead of \"Sneak\" key is used for climbing down "
+"and\n"
"descending."
msgstr ""
@@ -3651,6 +3859,12 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"If the execution of a chat command takes longer than this specified time in\n"
+"seconds, add the time information to the chat command message"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"If the file size of debug.txt exceeds the number of megabytes specified in\n"
"this setting when it is opened, the file is moved to debug.txt.1,\n"
"deleting an older debug.txt.1 if it exists.\n"
@@ -3696,7 +3910,7 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Instrument chatcommands on registration."
+msgid "Instrument chat commands on registration."
msgstr ""
#: src/settings_translation_file.cpp
@@ -3780,7 +3994,7 @@ msgid "Joystick button repetition interval"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Joystick deadzone"
+msgid "Joystick dead zone"
msgstr ""
#: src/settings_translation_file.cpp
@@ -4538,10 +4752,6 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Makes DirectX work with LuaJIT. Disable if it causes troubles."
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Makes all liquids opaque"
msgstr ""
@@ -4613,6 +4823,10 @@ msgid "Map save interval"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Map shadows update frames"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Mapblock limit"
msgstr ""
@@ -4721,6 +4935,10 @@ msgid "Maximum FPS when the window is not focused, or when the game is paused."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Maximum distance to render shadows."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Maximum forceloaded blocks"
msgstr ""
@@ -4826,7 +5044,15 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Maximum time in ms a file download (e.g. a mod download) may take."
+msgid ""
+"Maximum time a file download (e.g. a mod download) may take, stated in "
+"milliseconds."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum time an interactive request (e.g. server list fetch) may take, "
+"stated in milliseconds."
msgstr ""
#: src/settings_translation_file.cpp
@@ -4890,7 +5116,7 @@ msgid "Mod channels"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Modifies the size of the hudbar elements."
+msgid "Modifies the size of the HUD elements."
msgstr ""
#: src/settings_translation_file.cpp
@@ -4902,6 +5128,10 @@ msgid "Monospace font size"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Monospace font size divisible by"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Mountain height noise"
msgstr ""
@@ -5022,7 +5252,7 @@ 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"
+"This is a trade-off between SQLite transaction overhead and\n"
"memory consumption (4096=100MB, as a rule of thumb)."
msgstr ""
@@ -5041,21 +5271,18 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Opaqueness (alpha) of the shadow behind the fallback font, between 0 and 255."
-msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid ""
"Open the pause menu when the window's focus is lost. Does not pause if a "
"formspec is\n"
"open."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Optional override for chat weblink color."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid ""
-"Path of the fallback font.\n"
-"If “freetype†setting is enabled: Must be a TrueType font.\n"
-"If “freetype†setting is disabled: Must be a bitmap or XML vectors font.\n"
+"Path of the fallback font. Must be a TrueType font.\n"
"This font will be used for certain languages or if the default font is "
"unavailable."
msgstr ""
@@ -5078,17 +5305,13 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Path to the default font.\n"
-"If “freetype†setting is enabled: Must be a TrueType font.\n"
-"If “freetype†setting is disabled: Must be a bitmap or XML vectors font.\n"
+"Path to the default font. Must be a TrueType font.\n"
"The fallback font will be used if the font cannot be loaded."
msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Path to the monospace font.\n"
-"If “freetype†setting is enabled: Must be a TrueType font.\n"
-"If “freetype†setting is disabled: Must be a bitmap or XML vectors font.\n"
+"Path to the monospace font. Must be a TrueType font.\n"
"This font is used for e.g. the console and profiler screen."
msgstr ""
@@ -5143,6 +5366,10 @@ msgid "Player versus player"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Poisson filtering"
+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."
@@ -5187,9 +5414,9 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"Prometheus listener address.\n"
-"If minetest is compiled with ENABLE_PROMETHEUS option enabled,\n"
+"If Minetest is compiled with ENABLE_PROMETHEUS option enabled,\n"
"enable metrics listener for Prometheus on that address.\n"
-"Metrics can be fetch on http://127.0.0.1:30000/metrics"
+"Metrics can be fetched on http://127.0.0.1:30000/metrics"
msgstr ""
#: src/settings_translation_file.cpp
@@ -5436,23 +5663,23 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Server URL"
-msgstr ""
+msgstr "URL διακομιστή"
#: src/settings_translation_file.cpp
msgid "Server address"
-msgstr ""
+msgstr "ΔιεÏθυνση διακομιστή"
#: src/settings_translation_file.cpp
msgid "Server description"
-msgstr ""
+msgstr "ΠεÏιγÏαφή διακομιστή"
#: src/settings_translation_file.cpp
msgid "Server name"
-msgstr ""
+msgstr "Όνομα διακομιστή"
#: src/settings_translation_file.cpp
msgid "Server port"
-msgstr ""
+msgstr "ΘÏÏα διακομιστή"
#: src/settings_translation_file.cpp
msgid "Server side occlusion culling"
@@ -5478,6 +5705,32 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Set the shadow strength.\n"
+"Lower value means lighter shadows, higher value means darker shadows."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set the soft shadow radius size.\n"
+"Lower values mean sharper shadows, bigger values mean softer shadows.\n"
+"Minimum value: 1.0; maximum value: 10.0"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set the tilt of Sun/Moon orbit in degrees.\n"
+"Value of 0 means no tilt / vertical orbit.\n"
+"Minimum value: 0.0; maximum value: 60.0"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set to true to enable Shadow Mapping.\n"
+"Requires shaders to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Set to true to enable waving leaves.\n"
"Requires shaders to be enabled."
msgstr ""
@@ -5495,6 +5748,13 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Sets shadow texture quality to 32 bits.\n"
+"On false, 16 bits texture will be used.\n"
+"This can cause much more artifacts in the shadow."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Shader path"
msgstr ""
@@ -5507,15 +5767,29 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Shadow filter quality"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Shadow map max distance in nodes to render shadows"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Shadow map texture in 32 bits"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Shadow map texture size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid ""
"Shadow offset (in pixels) of the default font. If 0, then shadow will not be "
"drawn."
msgstr ""
#: src/settings_translation_file.cpp
-msgid ""
-"Shadow offset (in pixels) of the fallback font. If 0, then shadow will not "
-"be drawn."
+msgid "Shadow strength"
msgstr ""
#: src/settings_translation_file.cpp
@@ -5537,7 +5811,7 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Show nametag backgrounds by default"
+msgid "Show name tag backgrounds by default"
msgstr ""
#: src/settings_translation_file.cpp
@@ -5562,6 +5836,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Sky Body Orbit Tilt"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Slice w"
msgstr ""
@@ -5616,16 +5894,12 @@ msgid "Sneaking speed, in nodes per second."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Sound"
+msgid "Soft shadow radius"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Special key"
-msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid "Special key for climbing/descending"
-msgstr ""
+msgid "Sound"
+msgstr "Ήχος"
#: src/settings_translation_file.cpp
msgid ""
@@ -5644,6 +5918,14 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Spread a complete update of shadow map over given amount of frames.\n"
+"Higher values might make shadows laggy, lower values\n"
+"will consume more resources.\n"
+"Minimum value: 1; maximum value: 16"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Spread of light curve boost range.\n"
"Controls the width of the range to be boosted.\n"
"Standard deviation of the light curve boost Gaussian."
@@ -5750,6 +6032,13 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Texture size to render the shadow map on.\n"
+"This must be a power of two.\n"
+"Bigger numbers create better shadows but it is also more expensive."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Textures on a node may be aligned either to the node or to the world.\n"
"The former mode suits better things like machines, furniture, etc., while\n"
"the latter makes stairs and microblocks fit surroundings better.\n"
@@ -5763,7 +6052,7 @@ msgid "The URL for the content repository"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "The deadzone of the joystick"
+msgid "The dead zone of the joystick"
msgstr ""
#: src/settings_translation_file.cpp
@@ -5821,7 +6110,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"The rendering back-end for Irrlicht.\n"
+"The rendering back-end.\n"
"A restart is required after changing this.\n"
"Note: On Android, stick with OGLES1 if unsure! App may fail to start "
"otherwise.\n"
@@ -5832,7 +6121,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"The sensitivity of the joystick axes for moving the\n"
-"ingame view frustum around."
+"in-game view frustum around."
msgstr ""
#: src/settings_translation_file.cpp
@@ -5926,6 +6215,10 @@ msgid "Touch screen threshold"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Tradeoffs for performance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Trees noise"
msgstr ""
@@ -5995,7 +6288,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Use mip mapping to scale textures. May slightly increase performance,\n"
+"Use mipmapping to scale textures. May slightly increase performance,\n"
"especially when using a high resolution texture pack.\n"
"Gamma correct downscaling is not supported."
msgstr ""
@@ -6108,12 +6401,12 @@ msgid "Viewing range"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Virtual joystick triggers aux button"
+msgid "Virtual joystick triggers Aux1 button"
msgstr ""
#: src/settings_translation_file.cpp
msgid "Volume"
-msgstr ""
+msgstr "Ένταση"
#: src/settings_translation_file.cpp
msgid ""
@@ -6179,6 +6472,10 @@ msgid "Waving plants"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Weblink color"
+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"
@@ -6199,23 +6496,15 @@ msgid ""
"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.\n"
+"memory. Powers of 2 are recommended. This setting is ONLY applied if\n"
+"bilinear/trilinear/anisotropic filtering is enabled.\n"
"This is also used as the base node texture size for world-aligned\n"
"texture autoscaling."
msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Whether FreeType fonts are used, requires FreeType support to be compiled "
-"in.\n"
-"If disabled, bitmap and XML vectors fonts are used instead."
-msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid ""
-"Whether nametag backgrounds should be shown by default.\n"
+"Whether name tag backgrounds should be shown by default.\n"
"Mods may still set a background."
msgstr ""
@@ -6257,7 +6546,7 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Width component of the initial window size."
+msgid "Width component of the initial window size. Ignored in fullscreen mode."
msgstr ""
#: src/settings_translation_file.cpp
@@ -6342,34 +6631,38 @@ msgid "Y-level of seabed."
msgstr ""
#: src/settings_translation_file.cpp
-msgid ""
-"ZLib compression level to use when saving mapblocks to disk.\n"
-"-1 - Zlib's default compression level\n"
-"0 - no compresson, fastest\n"
-"9 - best compression, slowest\n"
-"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)"
-msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid ""
-"ZLib compression level to use when sending mapblocks to the client.\n"
-"-1 - Zlib's default compression level\n"
-"0 - no compresson, fastest\n"
-"9 - best compression, slowest\n"
-"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)"
+msgid "cURL file download timeout"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "cURL file download timeout"
+msgid "cURL interactive timeout"
msgstr ""
#: src/settings_translation_file.cpp
msgid "cURL parallel limit"
msgstr ""
-#: src/settings_translation_file.cpp
-msgid "cURL timeout"
-msgstr ""
+#~ msgid "Address / Port"
+#~ msgstr "ΔιεÏθυνση / ΘήÏα"
+
+#~ msgid "Credits"
+#~ msgstr "Μνείες"
+
+#~ msgid "Install: file: \"$1\""
+#~ msgstr "Εγκατάσταση: αÏχείο: \"$1\""
+
+#~ msgid "Name / Password"
+#~ msgstr "Όνομα / Κωδικός"
#~ msgid "Ok"
#~ msgstr "Οκ"
+
+#~ msgid "Special key"
+#~ msgstr "Ειδικό πλήκτÏο"
+
+#, fuzzy
+#~ msgid "You died."
+#~ msgstr "Πέθανες"
+
+#~ msgid "needs_fallback_font"
+#~ msgstr "needs_fallback_font"
diff --git a/po/eo/minetest.po b/po/eo/minetest.po
index 60e276136..cbb13b904 100644
--- a/po/eo/minetest.po
+++ b/po/eo/minetest.po
@@ -2,9 +2,9 @@ msgid ""
msgstr ""
"Project-Id-Version: Esperanto (Minetest)\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-02-23 19:03+0100\n"
-"PO-Revision-Date: 2021-03-07 07:10+0000\n"
-"Last-Translator: Tirifto <tirifto@posteo.cz>\n"
+"POT-Creation-Date: 2022-01-25 23:19+0100\n"
+"PO-Revision-Date: 2021-10-05 08:09+0000\n"
+"Last-Translator: phlostically <phlostically@mailinator.com>\n"
"Language-Team: Esperanto <https://hosted.weblate.org/projects/minetest/"
"minetest/eo/>\n"
"Language: eo\n"
@@ -12,7 +12,44 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 4.5.1\n"
+"X-Generator: Weblate 4.9-dev\n"
+
+#: builtin/client/chatcommands.lua
+#, fuzzy
+msgid "Clear the out chat queue"
+msgstr "Maksimumo da atendantaj elaj mesaÄoj"
+
+#: builtin/client/chatcommands.lua
+msgid "Empty command."
+msgstr "Malplena komando."
+
+#: builtin/client/chatcommands.lua
+msgid "Exit to main menu"
+msgstr "Eliri al ĉefmenuo"
+
+#: builtin/client/chatcommands.lua
+msgid "Invalid command: "
+msgstr "Nevalida komando: "
+
+#: builtin/client/chatcommands.lua
+msgid "Issued command: "
+msgstr "Donita komando: "
+
+#: builtin/client/chatcommands.lua
+msgid "List online players"
+msgstr "Listigi enretajn ludantojn"
+
+#: builtin/client/chatcommands.lua
+msgid "Online players: "
+msgstr "Enretaj ludantoj: "
+
+#: builtin/client/chatcommands.lua
+msgid "The out chat queue is now empty."
+msgstr ""
+
+#: builtin/client/chatcommands.lua
+msgid "This command is disabled by server."
+msgstr "Ĉi tiun komandon malÅaltis servilo."
#: builtin/client/death_formspec.lua src/client/game.cpp
msgid "Respawn"
@@ -22,11 +59,41 @@ msgstr "RenaskiÄi"
msgid "You died"
msgstr "Vi mortis"
+#: builtin/common/chatcommands.lua
+msgid "Available commands:"
+msgstr "Uzeblaj komandoj:"
+
+#: builtin/common/chatcommands.lua
+msgid "Available commands: "
+msgstr "Uzeblaj komandoj: "
+
+#: builtin/common/chatcommands.lua
+msgid "Command not available: "
+msgstr "Komando ne uzeblas: "
+
+#: builtin/common/chatcommands.lua
+msgid "Get help for commands"
+msgstr "Trovu helpon pri komandoj"
+
+#: builtin/common/chatcommands.lua
+msgid ""
+"Use '.help <cmd>' to get more information, or '.help all' to list everything."
+msgstr ""
+
+#: builtin/common/chatcommands.lua
+msgid "[all | <cmd>]"
+msgstr "[all | <komando>]"
+
#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp
msgid "OK"
msgstr "Bone"
#: builtin/fstk/ui.lua
+#, fuzzy
+msgid "<none available>"
+msgstr "Komando ne uzeblas: "
+
+#: builtin/fstk/ui.lua
msgid "An error occurred in a Lua script:"
msgstr "Eraris Lua-skripto:"
@@ -128,7 +195,7 @@ msgstr "Sen dependaĵoj"
#: builtin/mainmenu/dlg_config_world.lua
msgid "No modpack description provided."
-msgstr "Neniu priskrib ode modifaĵaro estas donita."
+msgstr "Neniu priskribo de modifaĵaro estas donita."
#: builtin/mainmenu/dlg_config_world.lua
msgid "No optional dependencies"
@@ -153,52 +220,51 @@ msgstr "Åaltita"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "\"$1\" already exists. Would you like to overwrite it?"
-msgstr ""
+msgstr "«$ 1» jam ekzistas. Ĉu superskribi Äin?"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "$1 and $2 dependencies will be installed."
-msgstr ""
+msgstr "Dependaĵoj $1 kaj $2 estos instalitaj."
#: builtin/mainmenu/dlg_contentstore.lua
msgid "$1 by $2"
-msgstr ""
+msgstr "$1 de $2"
#: builtin/mainmenu/dlg_contentstore.lua
msgid ""
"$1 downloading,\n"
"$2 queued"
msgstr ""
+"elÅutante $1,\n"
+"atendante $2"
#: builtin/mainmenu/dlg_contentstore.lua
-#, fuzzy
msgid "$1 downloading..."
-msgstr "ElÅutante…"
+msgstr "ElÅutante $1…"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "$1 required dependencies could not be found."
-msgstr ""
+msgstr "$1 nepraj dependaĵoj ne estis troveblaj."
#: builtin/mainmenu/dlg_contentstore.lua
msgid "$1 will be installed, and $2 dependencies will be skipped."
-msgstr ""
+msgstr "$ 1 estos instalita, ignorante $2 dependaĵojn."
#: builtin/mainmenu/dlg_contentstore.lua
msgid "All packages"
msgstr "Ĉiuj pakaĵoj"
#: builtin/mainmenu/dlg_contentstore.lua
-#, fuzzy
msgid "Already installed"
-msgstr "Klavo jam estas uzata"
+msgstr "Jam instalita"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Back to Main Menu"
-msgstr "Reeniri al ĉefmenuo"
+msgstr "Reen al ĉefmenuo"
#: builtin/mainmenu/dlg_contentstore.lua
-#, fuzzy
msgid "Base Game:"
-msgstr "Gastigi ludon"
+msgstr "Baza Ludo:"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "ContentDB is not available when Minetest was compiled without cURL"
@@ -222,14 +288,17 @@ msgid "Install"
msgstr "Instali"
#: builtin/mainmenu/dlg_contentstore.lua
-#, fuzzy
msgid "Install $1"
-msgstr "Instali"
+msgstr "Instali $1"
#: builtin/mainmenu/dlg_contentstore.lua
-#, fuzzy
msgid "Install missing dependencies"
-msgstr "Malnepraj dependaĵoj:"
+msgstr "Instali mankantajn dependaĵojn"
+
+#: builtin/mainmenu/dlg_contentstore.lua
+#, fuzzy
+msgid "Install: Unsupported file type or broken archive"
+msgstr "Instalo: Nesubtenata dosierspeco «$1» aŭ rompita arĥivo"
#: builtin/mainmenu/dlg_contentstore.lua
#: builtin/mainmenu/dlg_settings_advanced.lua
@@ -245,26 +314,24 @@ msgid "No results"
msgstr "Neniuj rezultoj"
#: builtin/mainmenu/dlg_contentstore.lua
-#, fuzzy
msgid "No updates"
-msgstr "Äœisdatigi"
+msgstr "Neniuj Äisdatigoj"
#: builtin/mainmenu/dlg_contentstore.lua
-#, fuzzy
msgid "Not found"
-msgstr "Silentigi sonon"
+msgstr "Ne trovita"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Overwrite"
-msgstr ""
+msgstr "Superskribi"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Please check that the base game is correct."
-msgstr ""
+msgstr "Bonvolu kontroli, ke la baza ludo estas Äusta."
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Queued"
-msgstr ""
+msgstr "Atendata"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Texture packs"
@@ -280,11 +347,11 @@ msgstr "Äœisdatigi"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Update All [$1]"
-msgstr ""
+msgstr "Ĝisdatigi Ĉiujn [$1]"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "View more information in a web browser"
-msgstr ""
+msgstr "Vidi pli da informoj per TTT-legilo"
#: builtin/mainmenu/dlg_create_world.lua
msgid "A world named \"$1\" already exists"
@@ -538,7 +605,7 @@ msgstr "< Reiri al agorda paÄo"
msgid "Browse"
msgstr "Foliumi"
-#: builtin/mainmenu/dlg_settings_advanced.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_settings.lua
msgid "Disabled"
msgstr "MalÅaltita"
@@ -563,7 +630,8 @@ msgid "Offset"
msgstr "DeÅovo"
#: builtin/mainmenu/dlg_settings_advanced.lua
-msgid "Persistance"
+#, fuzzy
+msgid "Persistence"
msgstr "Persisteco"
#: builtin/mainmenu/dlg_settings_advanced.lua
@@ -582,7 +650,7 @@ msgstr "Restarigi pravaloron"
msgid "Scale"
msgstr "Skalo"
-#: builtin/mainmenu/dlg_settings_advanced.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_online.lua
msgid "Search"
msgstr "Serĉi"
@@ -675,14 +743,6 @@ msgstr ""
"Instali modifaĵon: Ne povas trovi Äustan dosierujan nomon por modifaĵaro $1"
#: builtin/mainmenu/pkgmgr.lua
-msgid "Install: Unsupported file type \"$1\" or broken archive"
-msgstr "Instalo: Nesubtenata dosierspeco «$1» aŭ rompita arĥivo"
-
-#: builtin/mainmenu/pkgmgr.lua
-msgid "Install: file: \"$1\""
-msgstr "Instali: dosiero: «$1»"
-
-#: builtin/mainmenu/pkgmgr.lua
msgid "Unable to find a valid mod or modpack"
msgstr "Ne povas trovi validan modifaĵon aŭ modifaĵaron"
@@ -707,15 +767,50 @@ msgid "Loading..."
msgstr "Enlegante…"
#: builtin/mainmenu/serverlistmgr.lua
-#, fuzzy
msgid "Public server list is disabled"
-msgstr "Klient-flanka skriptado malÅaltita"
+msgstr "Listo de publikaj serviloj estas malÅaltita"
#: builtin/mainmenu/serverlistmgr.lua
msgid "Try reenabling public serverlist and check your internet connection."
msgstr ""
"Provu reÅalti la publikan liston de serviloj kaj kontroli vian retkonekton."
+#: builtin/mainmenu/tab_about.lua
+msgid "About"
+msgstr "Pri"
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Active Contributors"
+msgstr "Aktivaj kontribuantoj"
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Active renderer:"
+msgstr "Aktiva bildigilo:"
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Core Developers"
+msgstr "Kernprogramistoj"
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Open User Data Directory"
+msgstr "Malfermi dosierujon de datenoj de uzanto"
+
+#: builtin/mainmenu/tab_about.lua
+msgid ""
+"Opens the directory that contains user-provided worlds, games, mods,\n"
+"and texture packs in a file manager / explorer."
+msgstr ""
+"Malfermi per dosieradministrilo la dosierujon, kiu enhavas la mondojn,\n"
+"ludojn, modifaĵojn, kaj teksturojn provizitajn de la uzanto."
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Previous Contributors"
+msgstr "Eksaj kontribuistoj"
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Previous Core Developers"
+msgstr "Eksaj kernprogramistoj"
+
#: builtin/mainmenu/tab_content.lua
msgid "Browse online content"
msgstr "Foliumi enretan enhavon"
@@ -756,37 +851,6 @@ msgstr "Malinstali pakaĵon"
msgid "Use Texture Pack"
msgstr "Uzi teksturaron"
-#: builtin/mainmenu/tab_credits.lua
-msgid "Active Contributors"
-msgstr "Aktivaj kontribuantoj"
-
-#: builtin/mainmenu/tab_credits.lua
-msgid "Core Developers"
-msgstr "Kernprogramistoj"
-
-#: builtin/mainmenu/tab_credits.lua
-msgid "Credits"
-msgstr "Kontribuantaro"
-
-#: builtin/mainmenu/tab_credits.lua
-#, fuzzy
-msgid "Open User Data Directory"
-msgstr "Elekti dosierujon"
-
-#: builtin/mainmenu/tab_credits.lua
-msgid ""
-"Opens the directory that contains user-provided worlds, games, mods,\n"
-"and texture packs in a file manager / explorer."
-msgstr ""
-
-#: 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_local.lua
msgid "Announce Server"
msgstr "Enlistigi servilon"
@@ -815,9 +879,9 @@ msgstr "Gastigi servilon"
msgid "Install games from ContentDB"
msgstr "Instali ludojn de ContentDB"
-#: builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
msgid "Name"
-msgstr ""
+msgstr "Nomo"
#: builtin/mainmenu/tab_local.lua
msgid "New"
@@ -827,23 +891,21 @@ msgstr "Nova"
msgid "No world created or selected!"
msgstr "Neniu mondo estas kreita aÅ­ elektita!"
-#: builtin/mainmenu/tab_local.lua
-#, fuzzy
+#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
msgid "Password"
-msgstr "Nova pasvorto"
+msgstr "Pasvorto"
#: builtin/mainmenu/tab_local.lua
msgid "Play Game"
msgstr "Ludi"
-#: builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
msgid "Port"
msgstr "Pordo"
#: builtin/mainmenu/tab_local.lua
-#, fuzzy
msgid "Select Mods"
-msgstr "Elektu mondon:"
+msgstr "Elektu Modifaĵojn"
#: builtin/mainmenu/tab_local.lua
msgid "Select World:"
@@ -858,8 +920,12 @@ msgid "Start Game"
msgstr "Ekigi ludon"
#: builtin/mainmenu/tab_online.lua
-msgid "Address / Port"
-msgstr "Adreso / Pordo"
+msgid "Address"
+msgstr "Adreso"
+
+#: builtin/mainmenu/tab_online.lua src/client/keycode.cpp
+msgid "Clear"
+msgstr "Vakigo"
#: builtin/mainmenu/tab_online.lua
msgid "Connect"
@@ -869,34 +935,44 @@ msgstr "Konekti"
msgid "Creative mode"
msgstr "Krea reÄimo"
+#. ~ PvP = Player versus Player
#: builtin/mainmenu/tab_online.lua
-msgid "Damage enabled"
-msgstr "Difektado estas Åaltita"
+#, fuzzy
+msgid "Damage / PvP"
+msgstr "Difekto"
#: builtin/mainmenu/tab_online.lua
msgid "Del. Favorite"
msgstr "Forigi Åataton"
#: builtin/mainmenu/tab_online.lua
-msgid "Favorite"
+#, fuzzy
+msgid "Favorites"
msgstr "Åœati"
#: builtin/mainmenu/tab_online.lua
-msgid "Join Game"
-msgstr "AliÄi al ludo"
+msgid "Incompatible Servers"
+msgstr "Neakordaj serviloj"
#: builtin/mainmenu/tab_online.lua
-msgid "Name / Password"
-msgstr "Nomo / Pasvorto"
+msgid "Join Game"
+msgstr "AliÄi al ludo"
#: builtin/mainmenu/tab_online.lua
msgid "Ping"
msgstr "Retprokrasto"
-#. ~ PvP = Player versus Player
#: builtin/mainmenu/tab_online.lua
-msgid "PvP enabled"
-msgstr "Dueloj Åaltitas"
+msgid "Public Servers"
+msgstr "Publikaj serviloj"
+
+#: builtin/mainmenu/tab_online.lua
+msgid "Refresh"
+msgstr "ReÅargi"
+
+#: builtin/mainmenu/tab_online.lua
+msgid "Server Description"
+msgstr "Priskribo pri servilo"
#: builtin/mainmenu/tab_settings.lua
msgid "2x"
@@ -938,11 +1014,31 @@ msgstr "ÅœanÄi klavojn"
msgid "Connected Glass"
msgstr "Ligata vitro"
+#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
+msgid "Dynamic shadows"
+msgstr "Dinamikaj ombroj"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Dynamic shadows: "
+msgstr "Dinamikaj ombroj: "
+
#: builtin/mainmenu/tab_settings.lua
msgid "Fancy Leaves"
msgstr "Åœikaj folioj"
#: builtin/mainmenu/tab_settings.lua
+msgid "High"
+msgstr "Alta"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Low"
+msgstr "Malalta"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Medium"
+msgstr "Mezalta"
+
+#: builtin/mainmenu/tab_settings.lua
msgid "Mipmap"
msgstr "Etmapo"
@@ -995,9 +1091,8 @@ msgid "Shaders"
msgstr "Ombrigiloj"
#: builtin/mainmenu/tab_settings.lua
-#, fuzzy
msgid "Shaders (experimental)"
-msgstr "Fluginsuloj (eksperimentaj)"
+msgstr "Ombrigiloj (eksperimentaj)"
#: builtin/mainmenu/tab_settings.lua
msgid "Shaders (unavailable)"
@@ -1015,10 +1110,6 @@ msgstr "Glata lumado"
msgid "Texturing:"
msgstr "Teksturado:"
-#: builtin/mainmenu/tab_settings.lua
-msgid "To enable shaders the OpenGL driver needs to be used."
-msgstr "Por uzi ombrigilojn, OpenGL-pelilo estas necesa."
-
#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
msgid "Tone Mapping"
msgstr "Nuanca mapado"
@@ -1032,6 +1123,14 @@ msgid "Trilinear Filter"
msgstr "Trilineara filtrilo"
#: builtin/mainmenu/tab_settings.lua
+msgid "Ultra High"
+msgstr "Altega"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Very Low"
+msgstr "Malaltega"
+
+#: builtin/mainmenu/tab_settings.lua
msgid "Waving Leaves"
msgstr "Ondantaj foliaĵoj"
@@ -1043,7 +1142,7 @@ msgstr "Ondantaj fluaĵoj"
msgid "Waving Plants"
msgstr "Ondantaj plantoj"
-#: src/client/client.cpp
+#: src/client/client.cpp src/client/game.cpp
msgid "Connection timed out."
msgstr "Konekto eltempiÄis."
@@ -1072,7 +1171,8 @@ msgid "Connection error (timed out?)"
msgstr "Konekta eraro (ĉu eltempiÄo?)"
#: src/client/clientlauncher.cpp
-msgid "Could not find or load game \""
+#, fuzzy
+msgid "Could not find or load game: "
msgstr "Ne povis trovi aÅ­ enlegi ludon \""
#: src/client/clientlauncher.cpp
@@ -1103,18 +1203,6 @@ msgstr "Malsukcesis malfermi donitan pasvortan dosieron: "
msgid "Provided world path doesn't exist: "
msgstr "Donita monda dosierindiko ne ekzistas: "
-#. ~ DO NOT TRANSLATE THIS LITERALLY!
-#. This is a special string. Put either "no" or "yes"
-#. into the translation field (literally).
-#. Choose "yes" if the language requires use of the fallback
-#. font, "no" otherwise.
-#. The fallback font is (normally) required for languages with
-#. non-Latin script, like Chinese.
-#. When in doubt, test your translation.
-#: src/client/fontengine.cpp
-msgid "needs_fallback_font"
-msgstr "no"
-
#: src/client/game.cpp
msgid ""
"\n"
@@ -1128,14 +1216,6 @@ msgid "- Address: "
msgstr "– Adreso: "
#: src/client/game.cpp
-msgid "- Creative Mode: "
-msgstr "– Krea reÄimo: "
-
-#: src/client/game.cpp
-msgid "- Damage: "
-msgstr "– Difekto: "
-
-#: src/client/game.cpp
msgid "- Mode: "
msgstr "– ReÄimo: "
@@ -1157,6 +1237,16 @@ msgid "- Server Name: "
msgstr "– Nomo de servilo: "
#: src/client/game.cpp
+#, fuzzy
+msgid "A serialization error occurred:"
+msgstr "Eraro okazis:"
+
+#: src/client/game.cpp
+#, c-format
+msgid "Access denied. Reason: %s"
+msgstr ""
+
+#: src/client/game.cpp
msgid "Automatic forward disabled"
msgstr "Memaga pluigo malÅaltita"
@@ -1165,6 +1255,22 @@ msgid "Automatic forward enabled"
msgstr "Memaga pluigo Åaltita"
#: src/client/game.cpp
+msgid "Block bounds hidden"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Block bounds shown for all blocks"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Block bounds shown for current block"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Block bounds shown for nearby blocks"
+msgstr ""
+
+#: src/client/game.cpp
msgid "Camera update disabled"
msgstr "Äœisdatigo de vidpunkto malÅaltita"
@@ -1173,6 +1279,10 @@ msgid "Camera update enabled"
msgstr "Äœisdatigo de vidpunkto Åaltita"
#: src/client/game.cpp
+msgid "Can't show block bounds (need 'basic_debug' privilege)"
+msgstr ""
+
+#: src/client/game.cpp
msgid "Change Password"
msgstr "ÅœanÄi pasvorton"
@@ -1185,6 +1295,11 @@ msgid "Cinematic mode enabled"
msgstr "Glita vidpunkto Åaltita"
#: src/client/game.cpp
+#, fuzzy
+msgid "Client disconnected"
+msgstr "Klienta modifado"
+
+#: src/client/game.cpp
msgid "Client side scripting is disabled"
msgstr "Klient-flanka skriptado malÅaltita"
@@ -1193,11 +1308,15 @@ msgid "Connecting to server..."
msgstr "Konektante al servilo…"
#: src/client/game.cpp
+msgid "Connection failed for unknown reason"
+msgstr ""
+
+#: src/client/game.cpp
msgid "Continue"
msgstr "DaÅ­rigi"
#: src/client/game.cpp
-#, fuzzy, c-format
+#, c-format
msgid ""
"Controls:\n"
"- %s: move forwards\n"
@@ -1220,16 +1339,21 @@ msgstr ""
"– %s: moviÄi maldekstren\n"
"– %s: moviÄi dekstren\n"
"– %s: salti/supreniri\n"
+"- %s: fosi/bati\n"
+"- %s: meti/uzi\n"
"– %s: kaÅiri/malsupreniri\n"
"– %s: demeti portaĵojn\n"
"– %s: portaĵujo\n"
"– Muso: turniÄi/rigardi\n"
-"– Musklavo maldekstra: fosi/bati\n"
-"– Musklavo dekstra: meti/uzi\n"
"– Musrado: elekti portaĵon\n"
"– %s: babili\n"
#: src/client/game.cpp
+#, c-format
+msgid "Couldn't resolve address: %s"
+msgstr ""
+
+#: src/client/game.cpp
msgid "Creating client..."
msgstr "Kreante klienton…"
@@ -1358,6 +1482,10 @@ msgid "Minimap currently disabled by game or mod"
msgstr "Mapeto nuntempe malÅaltita de ludo aÅ­ modifaĵo"
#: src/client/game.cpp
+msgid "Multiplayer"
+msgstr "Ludo por pluraj ludantoj"
+
+#: src/client/game.cpp
msgid "Noclip mode disabled"
msgstr "Trapasa reÄimo malÅaltita"
@@ -1431,6 +1559,21 @@ msgstr "Malsilentigite"
#: src/client/game.cpp
#, c-format
+msgid "The server is probably running a different version of %s."
+msgstr ""
+
+#: src/client/game.cpp
+#, c-format
+msgid "Unable to connect to %s because IPv6 is disabled"
+msgstr ""
+
+#: src/client/game.cpp
+#, c-format
+msgid "Unable to listen on %s because IPv6 is disabled"
+msgstr ""
+
+#: src/client/game.cpp
+#, c-format
msgid "Viewing range changed to %d"
msgstr "Vidodistanco agordita al %d"
@@ -1499,10 +1642,6 @@ msgid "Caps Lock"
msgstr "Majuskla baskulo"
#: src/client/keycode.cpp
-msgid "Clear"
-msgstr "Vakigo"
-
-#: src/client/keycode.cpp
msgid "Control"
msgstr "Stiro"
@@ -1754,19 +1893,27 @@ msgid "Minimap hidden"
msgstr "Mapeto kaÅita"
#: src/client/minimap.cpp
-#, fuzzy, c-format
+#, c-format
msgid "Minimap in radar mode, Zoom x%d"
-msgstr "Mapeto en radara reÄimo, zomo ×1"
+msgstr "Mapeto en radara reÄimo, zomo ×%d"
#: src/client/minimap.cpp
-#, fuzzy, c-format
+#, c-format
msgid "Minimap in surface mode, Zoom x%d"
-msgstr "Mapeto en supraĵa reÄimo, zomo ×1"
+msgstr "Mapeto en supraĵa reÄimo, zomo ×%d"
#: src/client/minimap.cpp
-#, fuzzy
msgid "Minimap in texture mode"
-msgstr "Minimuma grandeco de teksturoj"
+msgstr "Mapeto en tekstura reÄimo"
+
+#: src/gui/guiChatConsole.cpp
+#, fuzzy
+msgid "Failed to open webpage"
+msgstr "Malsukcesis elÅuti $1"
+
+#: src/gui/guiChatConsole.cpp
+msgid "Opening webpage"
+msgstr ""
#: src/gui/guiConfirmRegistration.cpp src/gui/guiPasswordChange.cpp
msgid "Passwords do not match!"
@@ -1795,7 +1942,8 @@ msgid "Proceed"
msgstr "DaÅ­rigi"
#: src/gui/guiKeyChangeMenu.cpp
-msgid "\"Special\" = climb down"
+#, fuzzy
+msgid "\"Aux1\" = climb down"
msgstr "«Speciala» = malsupreniri"
#: src/gui/guiKeyChangeMenu.cpp
@@ -1807,10 +1955,18 @@ msgid "Automatic jumping"
msgstr "Memaga saltado"
#: src/gui/guiKeyChangeMenu.cpp
+msgid "Aux1"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
msgid "Backward"
msgstr "MalantaÅ­en"
#: src/gui/guiKeyChangeMenu.cpp
+msgid "Block bounds"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
msgid "Change camera"
msgstr "ÅœanÄi vidpunkton"
@@ -1900,10 +2056,6 @@ msgid "Sneak"
msgstr "KaÅiri"
#: src/gui/guiKeyChangeMenu.cpp
-msgid "Special"
-msgstr "Speciala"
-
-#: src/gui/guiKeyChangeMenu.cpp
msgid "Toggle HUD"
msgstr "Baskuligi travidan fasadon"
@@ -1964,7 +2116,8 @@ msgid "Muted"
msgstr "Silentigita"
#: src/gui/guiVolumeChange.cpp
-msgid "Sound Volume: "
+#, fuzzy, c-format
+msgid "Sound Volume: %d%%"
msgstr "LaÅ­teco: "
#. ~ Imperative, as in "Enter/type in text".
@@ -1989,9 +2142,10 @@ msgstr ""
"Se malÅaltita, virtuala stirstango centriÄos je la unua tuÅo."
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
-"(Android) Use virtual joystick to trigger \"aux\" button.\n"
-"If enabled, virtual joystick will also tap \"aux\" button when out of main "
+"(Android) Use virtual joystick to trigger \"Aux1\" button.\n"
+"If enabled, virtual joystick will also tap \"Aux1\" button when out of main "
"circle."
msgstr ""
"(Android) Uzi virtualan stirstangon por agigi la butonon «aux».\n"
@@ -2165,7 +2319,7 @@ msgstr "Intertempo de ABM (aktiva modifilo de monderoj)"
#: src/settings_translation_file.cpp
msgid "ABM time budget"
-msgstr ""
+msgstr "TempobuÄeto de ABM (aktiva modifilo de monderoj)"
#: src/settings_translation_file.cpp
msgid "Absolute limit of queued blocks to emerge"
@@ -2218,6 +2372,10 @@ msgstr ""
"kvarmilaj ekranoj."
#: src/settings_translation_file.cpp
+msgid "Adjust the detected display density, used for scaling UI elements."
+msgstr ""
+
+#: src/settings_translation_file.cpp
#, c-format
msgid ""
"Adjusts the density of the floatland layer.\n"
@@ -2350,6 +2508,16 @@ msgid "Autoscaling mode"
msgstr "ReÄimo de memaga skalado"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Aux1 key"
+msgstr "Salta klavo"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Aux1 key for climbing/descending"
+msgstr "Speciala klavo por supreniri/malsupreniri"
+
+#: src/settings_translation_file.cpp
msgid "Backward key"
msgstr "MalantaÅ­en"
@@ -2394,10 +2562,6 @@ msgid "Biome noise"
msgstr "Klimata bruo"
#: src/settings_translation_file.cpp
-msgid "Bits per pixel (aka color depth) in fullscreen mode."
-msgstr "Bitoj bildere (aÅ­ kolornombro) en tutekrana reÄimo."
-
-#: src/settings_translation_file.cpp
msgid "Block send optimize distance"
msgstr "Optimuma distanco de monder-sendado"
@@ -2503,6 +2667,16 @@ msgstr ""
"Kie 0.0 estas minimuma lumnivelo, 1.0 estas maksimuma numnivelo."
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Chat command time message threshold"
+msgstr "Sojlo de babilaj mesaÄoj antaÅ­ forpelo"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Chat commands"
+msgstr "Babilaj komandoj"
+
+#: src/settings_translation_file.cpp
msgid "Chat font size"
msgstr "Grandeco de babiluja tiparo"
@@ -2535,8 +2709,9 @@ msgid "Chat toggle key"
msgstr "Babila baskula klavo"
#: src/settings_translation_file.cpp
-msgid "Chatcommands"
-msgstr "Babilaj komandoj"
+#, fuzzy
+msgid "Chat weblinks"
+msgstr "Babilo montrita"
#: src/settings_translation_file.cpp
msgid "Chunk size"
@@ -2555,6 +2730,12 @@ msgid "Clean transparent textures"
msgstr "Puraj travideblaj teksturoj"
#: src/settings_translation_file.cpp
+msgid ""
+"Clickable weblinks (middle-click or Ctrl+left-click) enabled in chat console "
+"output."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Client"
msgstr "Kliento"
@@ -2599,6 +2780,10 @@ msgid "Colored fog"
msgstr "Kolora nebulo"
#: src/settings_translation_file.cpp
+msgid "Colored shadows"
+msgstr "Koloraj ombroj"
+
+#: src/settings_translation_file.cpp
msgid ""
"Comma-separated list of flags to hide in the content repository.\n"
"\"nonfree\" can be used to hide packages which do not qualify as 'free "
@@ -2640,6 +2825,38 @@ msgid "Command key"
msgstr "Komanda klavo"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid ""
+"Compression level to use when saving mapblocks to disk.\n"
+"-1 - use default compression level\n"
+"0 - least compression, fastest\n"
+"9 - best compression, slowest"
+msgstr ""
+"Nivelo de desigo per ZLib uzota por densigi mondopecojn dum konservado sur "
+"disko.\n"
+"-1 - la implicita nivelo de densigo per Zlib\n"
+"0 - neniu densigo, plej rapida\n"
+"9 - plej bona densigo, plej malrapida\n"
+"(niveloj 1-3 uzas la \"rapidan\" metodon de Zlib; 4-9 uzas la ordinaran "
+"metodon)"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid ""
+"Compression level to use when sending mapblocks to the client.\n"
+"-1 - use default compression level\n"
+"0 - least compression, fastest\n"
+"9 - best compression, slowest"
+msgstr ""
+"Nivelo de desigo per ZLib uzota por densigi mondopecojn dum sendado al "
+"kliento.\n"
+"-1 - la implicita nivelo de densigo per Zlib\n"
+"0 - neniu densigo, plej rapida\n"
+"9 - plej bona densigo, plej malrapida\n"
+"(niveloj 1-3 uzas la \"rapidan\" metodon de Zlib; 4-9 uzas la ordinaran "
+"metodon)"
+
+#: src/settings_translation_file.cpp
msgid "Connect glass"
msgstr "Kunfandi vitron"
@@ -2669,7 +2886,7 @@ msgstr "Malpermesitaj flagoj de ContentDB"
#: src/settings_translation_file.cpp
msgid "ContentDB Max Concurrent Downloads"
-msgstr ""
+msgstr "Maksimuma nombro de samtempaj elÅutoj de ContentDB"
#: src/settings_translation_file.cpp
msgid "ContentDB URL"
@@ -2739,8 +2956,10 @@ msgstr "Travidebleco de celilo"
#, fuzzy
msgid ""
"Crosshair alpha (opaqueness, between 0 and 255).\n"
-"Also controls the object crosshair color"
-msgstr "Travidebleco de celilo (maltravidebleco, inter 0 kaj 255)."
+"This also applies to the object crosshair."
+msgstr ""
+"Travidebleco de celilo (maltravidebleco, inter 0 kaj 255).\n"
+"AnkaÅ­ determinas la koloron de la celilo de objekto"
#: src/settings_translation_file.cpp
msgid "Crosshair color"
@@ -2751,6 +2970,8 @@ msgid ""
"Crosshair color (R,G,B).\n"
"Also controls the object crosshair color"
msgstr ""
+"Koloro de celilo (RuÄo, Verdo, Bluo).\n"
+"AnkaÅ­ determinas la koloron de la celilo de objekto"
#: src/settings_translation_file.cpp
msgid "DPI"
@@ -2818,11 +3039,10 @@ msgstr "Implicita grandeco de la kolumno"
#: src/settings_translation_file.cpp
msgid ""
-"Default timeout for cURL, stated in milliseconds.\n"
-"Only has an effect if compiled with cURL."
+"Define shadow filtering quality.\n"
+"This simulates the soft shadows effect by applying a PCF or Poisson disk\n"
+"but also uses more resources."
msgstr ""
-"Implicita tempolimo por cURL, milisekunde.\n"
-"Nur efektiviÄas programtradukite kun cURL."
#: src/settings_translation_file.cpp
msgid "Defines areas where trees have apples."
@@ -2934,9 +3154,8 @@ msgid "Desynchronize block animation"
msgstr "Malsamtempigi bildmovon de monderoj"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Dig key"
-msgstr "Dekstren-klavo"
+msgstr "Klavo por fosi"
#: src/settings_translation_file.cpp
msgid "Digging particles"
@@ -2951,6 +3170,10 @@ msgid "Disallow empty passwords"
msgstr "Malpermesi malplenajn pasvortojn"
#: src/settings_translation_file.cpp
+msgid "Display Density Scaling Factor"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Domain name of server, to be displayed in the serverlist."
msgstr "Domajna nomo de servilo montrota en la listo de serviloj."
@@ -2999,13 +3222,25 @@ msgstr ""
"Tiu ĉi funkcio estas prova kaj la API eble ÅanÄontas."
#: src/settings_translation_file.cpp
+msgid ""
+"Enable Poisson disk filtering.\n"
+"On true uses Poisson disk to make \"soft shadows\". Otherwise uses PCF "
+"filtering."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable colored shadows.\n"
+"On true translucent nodes cast colored shadows. This is expensive."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Enable console window"
msgstr "Åœalti konzolan fenestron"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Enable creative mode for all players"
-msgstr "Åœalti krean reÄimon por novaj mapoj."
+msgstr "Åœalti krean reÄimon por ĉiuj ludantoj"
#: src/settings_translation_file.cpp
msgid "Enable joysticks"
@@ -3056,7 +3291,7 @@ msgid ""
"expecting."
msgstr ""
"Åœalti por malpermesi konekton de malnovaj klientoj.\n"
-"Malnovaj klientoj estas kongruaj tiel, ke ili ne fiaskas konektante al novaj "
+"Malnovaj klientoj estas akordaj tiel, ke ili ne fiaskas konektante al novaj "
"serviloj,\n"
"sed eble ili ne subtenos ĉiujn atendatajn funkciojn."
@@ -3134,6 +3369,12 @@ msgstr ""
"ÅœanÄo de ĉi tiu agordo postulos restartigon."
#: src/settings_translation_file.cpp
+msgid ""
+"Enables tradeoffs that reduce CPU load or increase rendering performance\n"
+"at the expense of minor visual glitches that do not impact game playability."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Engine profiling data print interval"
msgstr "Intervalo inter presoj de profilaj datenoj de la motoro"
@@ -3159,9 +3400,8 @@ msgstr ""
"pli plataj malaltejoj, taŭgaj por solida tavolo de fluginsulaĵo."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "FPS when unfocused or paused"
-msgstr "Maksimumaj KS paÅ­ze."
+msgstr "Maksimuma nombro de kadroj en sekundo dum paÅ­zo aÅ­ sen fokuso"
#: src/settings_translation_file.cpp
msgid "FSAA"
@@ -3180,18 +3420,6 @@ msgid "Fallback font path"
msgstr "Dosierindiko al reenpaÅa tiparo"
#: src/settings_translation_file.cpp
-msgid "Fallback font shadow"
-msgstr "Ombro de reenpaÅa tiparo"
-
-#: src/settings_translation_file.cpp
-msgid "Fallback font shadow alpha"
-msgstr "Travidebleco de ombro de la reenpaÅa tiparo"
-
-#: src/settings_translation_file.cpp
-msgid "Fallback font size"
-msgstr "Grando de reenpaÅa tiparo"
-
-#: src/settings_translation_file.cpp
msgid "Fast key"
msgstr "Rapida klavo"
@@ -3208,8 +3436,9 @@ msgid "Fast movement"
msgstr "Rapida moviÄo"
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
-"Fast movement (via the \"special\" key).\n"
+"Fast movement (via the \"Aux1\" key).\n"
"This requires the \"fast\" privilege on the server."
msgstr ""
"Rapida moviÄo (per la klavo «speciala»).\n"
@@ -3246,11 +3475,12 @@ msgid "Filmic tone mapping"
msgstr "Filmeca mapado de tono"
#: src/settings_translation_file.cpp
+#, fuzzy
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."
+"which PNG optimizers usually discard, often resulting in dark or\n"
+"light edges to transparent textures. Apply a filter to clean that up\n"
+"at texture load time. This is automatically enabled if mipmapping is enabled."
msgstr ""
"Filtritaj teksturoj povas intermiksi RVB valorojn kun plene travideblaj\n"
"apud-bilderoj, kiujn PNG bonigiloj kutime forigas, farante helan aÅ­\n"
@@ -3348,15 +3578,17 @@ msgid "Font size"
msgstr "Tipara grandeco"
#: src/settings_translation_file.cpp
-msgid "Font size of the default font in point (pt)."
-msgstr "Grando de la implicita tiparo, punkte (pt)."
+msgid "Font size divisible by"
+msgstr ""
#: src/settings_translation_file.cpp
-msgid "Font size of the fallback font in point (pt)."
-msgstr "Grandeco de la reenpaÅa tiparo, punkte (pt)."
+#, fuzzy
+msgid "Font size of the default font where 1 unit = 1 pixel at 96 DPI"
+msgstr "Grando de la implicita tiparo, punkte (pt)."
#: src/settings_translation_file.cpp
-msgid "Font size of the monospace font in point (pt)."
+#, fuzzy
+msgid "Font size of the monospace font where 1 unit = 1 pixel at 96 DPI"
msgstr "Grandeco de la egallarÄa tiparo, punkte (pt)."
#: src/settings_translation_file.cpp
@@ -3369,6 +3601,17 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"For pixel-style fonts that do not scale well, this ensures that font sizes "
+"used\n"
+"with this font will always be divisible by this value, in pixels. For "
+"instance,\n"
+"a pixel font 16 pixels tall should have this set to 16, so it will only ever "
+"be\n"
+"sized 16, 32, 48, etc., so a mod requesting a size of 25 will get 32."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Format of player chat messages. The following strings are valid "
"placeholders:\n"
"@name, @message, @timestamp (optional)"
@@ -3430,10 +3673,6 @@ msgid "Fraction of the visible distance at which fog starts to be rendered"
msgstr "Ono de la videbla distanco, ekde kiu nebulo bildiÄas"
#: src/settings_translation_file.cpp
-msgid "FreeType fonts"
-msgstr "Tiparoj «FreeType»"
-
-#: src/settings_translation_file.cpp
msgid ""
"From how far blocks are generated for clients, stated in mapblocks (16 "
"nodes)."
@@ -3466,10 +3705,6 @@ msgid "Full screen"
msgstr "Tutekrane"
#: src/settings_translation_file.cpp
-msgid "Full screen BPP"
-msgstr "Kolornombro tutekrane"
-
-#: src/settings_translation_file.cpp
msgid "Fullscreen mode."
msgstr "Tutekrana reÄimo."
@@ -3490,10 +3725,11 @@ msgid "Global callbacks"
msgstr "Mallokaj revokoj"
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
"Global map generation attributes.\n"
"In Mapgen v6 the 'decorations' flag controls all decorations except trees\n"
-"and junglegrass, in all other mapgens this flag controls all decorations."
+"and jungle grass, in all other mapgens this flag controls all decorations."
msgstr ""
"Ĉieaj atributoj de mondestigo.\n"
"En mondestigo v6, la parametro «decorations» regas ĉiujn ornamojn\n"
@@ -3545,7 +3781,6 @@ msgid "HUD toggle key"
msgstr "Baskula klavo por travida fasado"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Handling for deprecated Lua API calls:\n"
"- none: Do not log deprecated calls\n"
@@ -3553,10 +3788,9 @@ msgid ""
"- error: abort on usage of deprecated call (suggested for mod developers)."
msgstr ""
"Traktado de evitindaj Lua-API-vokoj:\n"
-"- hereda: (provi) imiti la malnovan konduton (norma por eldono).\n"
-"- protokola: imiti kaj protokoli respuron de evitindaj vokoj (norma por "
-"erarserĉado).\n"
-"- erara: ĉesigi je evitinda voko (proponata al evoluigistoj de modifaĵoj)."
+"- none: ne prokoli evitindajn vokojn\n"
+"- log: imiti kaj protokoli respuron de evitindaj vokoj (implicita).\n"
+"- error: ĉesigi je evitinda voko (proponata al evoluigistoj de modifaĵoj)."
#: src/settings_translation_file.cpp
msgid ""
@@ -3580,7 +3814,9 @@ msgid "Heat noise"
msgstr "Varmeca bruo"
#: src/settings_translation_file.cpp
-msgid "Height component of the initial window size."
+#, fuzzy
+msgid ""
+"Height component of the initial window size. Ignored in fullscreen mode."
msgstr "Alteco de la fenestro je Äia komenca grando."
#: src/settings_translation_file.cpp
@@ -3592,10 +3828,6 @@ msgid "Height select noise"
msgstr "Bruo de elekto de alto"
#: src/settings_translation_file.cpp
-msgid "High-precision FPU"
-msgstr "Preciza glitkoma datentraktilo (FPU)"
-
-#: src/settings_translation_file.cpp
msgid "Hill steepness"
msgstr "Kruteco de montetoj"
@@ -3628,7 +3860,7 @@ msgid ""
"Horizontal acceleration in air when jumping or falling,\n"
"in nodes per second per second."
msgstr ""
-"Horizontala akcelo en aero dum saltado aÅ­ falado,\n"
+"Horizontala akcelo en aero dum saltado aÅ­ falado, \n"
"en monderoj sekunde sekunde."
#: src/settings_translation_file.cpp
@@ -3834,13 +4066,13 @@ msgid ""
"If FPS would go higher than this, limit it by sleeping\n"
"to not waste CPU power for no benefit."
msgstr ""
-"Se filmeroj sekunde superas ĉi tion, limigu ilin per dormo,\n"
-"por ne malÅpari vane potencon de datentraktilo."
+"Se la nombro de kadroj superas ĉi tion, limigu ilin per dormo,\n"
+"por ne malÅpari vane potencon de procesoro."
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
-"If disabled, \"special\" key is used to fly fast if both fly and fast mode "
-"are\n"
+"If disabled, \"Aux1\" key is used to fly fast if both fly and fast mode are\n"
"enabled."
msgstr ""
"MalÅaltite, postulas uzon de la «speciala» klavo se ambaÅ­ la fluga kaj\n"
@@ -3869,9 +4101,10 @@ msgstr ""
"Por tio necesas la rajto «noclip» servile."
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
-"If enabled, \"special\" key instead of \"sneak\" key is used for climbing "
-"down and\n"
+"If enabled, \"Aux1\" key instead of \"Sneak\" key is used for climbing down "
+"and\n"
"descending."
msgstr ""
"Åœaltite, klavo «uzi» estas uzata anstataÅ­ klavo «kaÅiri» por malsupreniro."
@@ -3929,6 +4162,12 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"If the execution of a chat command takes longer than this specified time in\n"
+"seconds, add the time information to the chat command message"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"If the file size of debug.txt exceeds the number of megabytes specified in\n"
"this setting when it is opened, the file is moved to debug.txt.1,\n"
"deleting an older debug.txt.1 if it exists.\n"
@@ -3981,7 +4220,8 @@ msgstr ""
"Ĉi tion normale bezonas nur evoluigistoj de kerno/primitivoj"
#: src/settings_translation_file.cpp
-msgid "Instrument chatcommands on registration."
+#, fuzzy
+msgid "Instrument chat commands on registration."
msgstr "Ekzameni babilajn komandojn je registriÄo."
#: src/settings_translation_file.cpp
@@ -4002,6 +4242,7 @@ msgstr ""
msgid ""
"Instrument the action function of Loading Block Modifiers on registration."
msgstr ""
+"Ekzameni la agan funkcion de Åœargaj Modifiloj de Monderoj je registriÄo."
#: src/settings_translation_file.cpp
msgid "Instrument the methods of entities on registration."
@@ -4074,8 +4315,8 @@ msgstr "Ripeta periodo de stirstangaj klavoj"
#: src/settings_translation_file.cpp
#, fuzzy
-msgid "Joystick deadzone"
-msgstr "Speco de stirstango"
+msgid "Joystick dead zone"
+msgstr "Nerespondema zono de stirstango"
#: src/settings_translation_file.cpp
msgid "Joystick frustum sensitivity"
@@ -4180,13 +4421,12 @@ msgstr ""
"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Key for digging.\n"
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
-"Klavo por salti.\n"
+"Klavo por fosi.\n"
"Vidu http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
@@ -4333,13 +4573,12 @@ msgstr ""
"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Key for placing.\n"
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
-"Klavo por salti.\n"
+"Klavo por meti.\n"
"Vidu http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
@@ -5005,7 +5244,7 @@ msgstr "Alta transiro de luma kurbo"
#: src/settings_translation_file.cpp
msgid "Light curve low gradient"
-msgstr ""
+msgstr "Malalta transiro de luma kurbo"
#: src/settings_translation_file.cpp
msgid ""
@@ -5075,7 +5314,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Loading Block Modifiers"
-msgstr "Enlegante Modifilojn de Monderoj"
+msgstr "Åœargaj Modifiloj de Monderoj"
#: src/settings_translation_file.cpp
msgid "Lower Y limit of dungeons."
@@ -5097,21 +5336,16 @@ msgstr ""
"kaj direkto de rigardo."
#: src/settings_translation_file.cpp
-msgid "Makes DirectX work with LuaJIT. Disable if it causes troubles."
-msgstr ""
-"Funkciigas programaron «DirectX» kun «LuaJIT». MalÅaltu okaze de problemoj."
-
-#: src/settings_translation_file.cpp
msgid "Makes all liquids opaque"
msgstr "Igas fluaĵojn netravideblaj"
#: src/settings_translation_file.cpp
msgid "Map Compression Level for Disk Storage"
-msgstr ""
+msgstr "Nivelo de densigo de mondopecoj por konservado sur disko"
#: src/settings_translation_file.cpp
msgid "Map Compression Level for Network Transfer"
-msgstr ""
+msgstr "Nivelo de densigo de mondopecoj por sendado tra reto"
#: src/settings_translation_file.cpp
msgid "Map directory"
@@ -5192,16 +5426,21 @@ msgid "Map save interval"
msgstr "Intervaloj inter konservoj de mondo"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Map shadows update frames"
+msgstr "Longeco de fluaĵa agociklo"
+
+#: src/settings_translation_file.cpp
msgid "Mapblock limit"
msgstr "Mondopeca limo"
#: src/settings_translation_file.cpp
msgid "Mapblock mesh generation delay"
-msgstr ""
+msgstr "Prokrasto de estigo de maÅoj de mondopecoj"
#: src/settings_translation_file.cpp
msgid "Mapblock mesh generator's MapBlock cache size in MB"
-msgstr ""
+msgstr "Grando (en megabitokoj) de la kaÅmemoro de la estiganto de mondopecoj"
#: src/settings_translation_file.cpp
msgid "Mapblock unload timeout"
@@ -5293,12 +5532,17 @@ msgstr "Maksimumaj paketoj iteracie"
#: src/settings_translation_file.cpp
msgid "Maximum FPS"
-msgstr "Maksimumaj KS"
+msgstr "Maksimuma nombro de kadroj en sekundo"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Maximum FPS when the window is not focused, or when the game is paused."
-msgstr "Maksimumaj KS paÅ­ze."
+msgstr ""
+"Maksimuma nombro de kadroj en sekundo, kiam la fokuso mankas al la fenestro, "
+"aÅ­ dum paÅ­zo de la ludo."
+
+#: src/settings_translation_file.cpp
+msgid "Maximum distance to render shadows."
+msgstr ""
#: src/settings_translation_file.cpp
msgid "Maximum forceloaded blocks"
@@ -5362,6 +5606,9 @@ msgid ""
"be queued.\n"
"This should be lower than curl_parallel_limit."
msgstr ""
+"Maksimuma nombro de samtempaj elÅutoj. ElÅutoj superantaj ĉi tiun limon "
+"estos atendataj.\n"
+"Tiu nombro devas esti malpli granda ol curl_parallel_limit."
#: src/settings_translation_file.cpp
msgid "Maximum number of forceloaded mapblocks."
@@ -5427,11 +5674,20 @@ msgstr ""
"0 malÅaltas envicigon, kaj -1 senlimigas Äin."
#: src/settings_translation_file.cpp
-msgid "Maximum time in ms a file download (e.g. a mod download) may take."
+#, fuzzy
+msgid ""
+"Maximum time a file download (e.g. a mod download) may take, stated in "
+"milliseconds."
msgstr ""
"Maksimuma tempo (en milisekundoj) por elÅuto de dosiero (ekz. modifaĵo)."
#: src/settings_translation_file.cpp
+msgid ""
+"Maximum time an interactive request (e.g. server list fetch) may take, "
+"stated in milliseconds."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Maximum users"
msgstr "Maksimuma nombro da uzantoj"
@@ -5492,7 +5748,8 @@ msgid "Mod channels"
msgstr "Kanaloj por modifaĵoj"
#: src/settings_translation_file.cpp
-msgid "Modifies the size of the hudbar elements."
+#, fuzzy
+msgid "Modifies the size of the HUD elements."
msgstr "ÅœanÄas la grandecon de eroj de la travida fasado."
#: src/settings_translation_file.cpp
@@ -5504,6 +5761,11 @@ msgid "Monospace font size"
msgstr "Grandeco de egalspaca tiparo"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Monospace font size divisible by"
+msgstr "Grandeco de egalspaca tiparo"
+
+#: src/settings_translation_file.cpp
msgid "Mountain height noise"
msgstr "Bruo de monta alteco"
@@ -5620,7 +5882,6 @@ msgid "Number of emerge threads"
msgstr "Nombro da mondestigaj fadenoj"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Number of emerge threads to use.\n"
"Value 0:\n"
@@ -5634,9 +5895,6 @@ msgid ""
"'on_generated'. For many users the optimum setting may be '1'."
msgstr ""
"Nombro de uzotaj fadenoj enlegontaj.\n"
-"AVERTO: Nun ekzistas pluraj eraroj, kiuj povus estigi kolapson kiam\n"
-"«num_emerge_threads» pli grandas ol 1. Äœis ĉi tiu averto foriÄos, ni\n"
-"forte rekomendas ke ĉi tiu valoro restu je la norma «1».\n"
"Valoro 0:\n"
"- Memaga elekto. La nombro de fadenoj enlegontaj estos\n"
"- 'nombro de datentraktiloj - 2', kun suba limo de 1.\n"
@@ -5651,9 +5909,10 @@ msgstr ""
"uzantoj, la optimuma agordo eble estos «1»."
#: src/settings_translation_file.cpp
+#, fuzzy
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"
+"This is a trade-off between SQLite transaction overhead and\n"
"memory consumption (4096=100MB, as a rule of thumb)."
msgstr ""
"Nombro da aldonaj mondopecoj legontaj de «/clearobjects» je unu fojo.\n"
@@ -5676,12 +5935,6 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Opaqueness (alpha) of the shadow behind the fallback font, between 0 and 255."
-msgstr ""
-"Netravidebleco (alfa) de la ombro post la reenpaÅa tiparo, inter 0 kaj 255."
-
-#: src/settings_translation_file.cpp
-msgid ""
"Open the pause menu when the window's focus is lost. Does not pause if a "
"formspec is\n"
"open."
@@ -5691,10 +5944,13 @@ msgstr ""
"fenestro estas malfermita."
#: src/settings_translation_file.cpp
+msgid "Optional override for chat weblink color."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
-"Path of the fallback font.\n"
-"If “freetype†setting is enabled: Must be a TrueType font.\n"
-"If “freetype†setting is disabled: Must be a bitmap or XML vectors font.\n"
+"Path of the fallback font. Must be a TrueType font.\n"
"This font will be used for certain languages or if the default font is "
"unavailable."
msgstr ""
@@ -5726,10 +5982,9 @@ msgid "Path to texture directory. All textures are first searched from here."
msgstr "Dosierindiko al teksturoj. Ĉiuj teksturoj estas unue serĉataj tie."
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
-"Path to the default font.\n"
-"If “freetype†setting is enabled: Must be a TrueType font.\n"
-"If “freetype†setting is disabled: Must be a bitmap or XML vectors font.\n"
+"Path to the default font. Must be a TrueType font.\n"
"The fallback font will be used if the font cannot be loaded."
msgstr ""
"Dosierindiko al la implicita tiparo.\n"
@@ -5739,10 +5994,9 @@ msgstr ""
"La reenpaÅa tiparo uziÄos se la tiparo ne povas enlegiÄi."
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
-"Path to the monospace font.\n"
-"If “freetype†setting is enabled: Must be a TrueType font.\n"
-"If “freetype†setting is disabled: Must be a bitmap or XML vectors font.\n"
+"Path to the monospace font. Must be a TrueType font.\n"
"This font is used for e.g. the console and profiler screen."
msgstr ""
"Dosierindiko al la egallarÄa tiparo.\n"
@@ -5757,12 +6011,11 @@ msgstr "PaÅ­zigi je perdita fokuso de la fenestro"
#: src/settings_translation_file.cpp
msgid "Per-player limit of queued blocks load from disk"
-msgstr ""
+msgstr "Limo de atendataj monderoj Åargotaj el disko por unu ludanto"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Per-player limit of queued blocks to generate"
-msgstr "Limo de viceroj estigotaj"
+msgstr "Limo de viceroj estigotaj por unu ludanto"
#: src/settings_translation_file.cpp
msgid "Physics"
@@ -5777,14 +6030,12 @@ msgid "Pitch move mode"
msgstr "Celilsekva reÄimo"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Place key"
-msgstr "Fluga klavo"
+msgstr "Klavo por meti"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Place repetition interval"
-msgstr "Periodo inter ripetoj de dekstra klako"
+msgstr "Intertempo inter ripetaj metoj"
#: src/settings_translation_file.cpp
msgid ""
@@ -5807,6 +6058,10 @@ msgid "Player versus player"
msgstr "Ludanto kontraÅ­ ludanto"
#: src/settings_translation_file.cpp
+msgid "Poisson filtering"
+msgstr "Poisson-filtrado"
+
+#: src/settings_translation_file.cpp
msgid ""
"Port to connect to (UDP).\n"
"Note that the port field in the main menu overrides this setting."
@@ -5854,15 +6109,20 @@ msgstr "Profilado"
#: src/settings_translation_file.cpp
msgid "Prometheus listener address"
-msgstr ""
+msgstr "AÅ­skulta adreso de Prometheus"
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
"Prometheus listener address.\n"
-"If minetest is compiled with ENABLE_PROMETHEUS option enabled,\n"
+"If Minetest is compiled with ENABLE_PROMETHEUS option enabled,\n"
"enable metrics listener for Prometheus on that address.\n"
-"Metrics can be fetch on http://127.0.0.1:30000/metrics"
+"Metrics can be fetched on http://127.0.0.1:30000/metrics"
msgstr ""
+"AÅ­skulta adreso de Prometheus.\n"
+"Se Minetest estas tradukita kun la elekteblo ENABLE_PROMETHEUS Åaltita,\n"
+"ÅaltiÄos aÅ­skultado de mezuriloj por Prometheus ĉe tiu adreso.\n"
+"Mezuriloj disponeblos ĉe http://127.0.0.1:30000/metrics"
#: src/settings_translation_file.cpp
msgid "Proportion of large caves that contain liquid."
@@ -6195,6 +6455,35 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Set the shadow strength.\n"
+"Lower value means lighter shadows, higher value means darker shadows."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set the soft shadow radius size.\n"
+"Lower values mean sharper shadows, bigger values mean softer shadows.\n"
+"Minimum value: 1.0; maximum value: 10.0"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set the tilt of Sun/Moon orbit in degrees.\n"
+"Value of 0 means no tilt / vertical orbit.\n"
+"Minimum value: 0.0; maximum value: 60.0"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid ""
+"Set to true to enable Shadow Mapping.\n"
+"Requires shaders to be enabled."
+msgstr ""
+"Åœaltu por ebligi ondantajn foliojn.\n"
+"Bezonas ombrigilojn."
+
+#: src/settings_translation_file.cpp
+msgid ""
"Set to true to enable waving leaves.\n"
"Requires shaders to be enabled."
msgstr ""
@@ -6218,6 +6507,13 @@ msgstr ""
"Bezonas Åalton de ombrigiloj."
#: src/settings_translation_file.cpp
+msgid ""
+"Sets shadow texture quality to 32 bits.\n"
+"On false, 16 bits texture will be used.\n"
+"This can cause much more artifacts in the shadow."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Shader path"
msgstr "Indiko al ombrigiloj"
@@ -6233,6 +6529,24 @@ msgstr ""
"Ĉi tio funkcias nur kun la bildiga internaĵo de «OpenGL»."
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Shadow filter quality"
+msgstr "Ekrankopia kvalito"
+
+#: src/settings_translation_file.cpp
+msgid "Shadow map max distance in nodes to render shadows"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Shadow map texture in 32 bits"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Shadow map texture size"
+msgstr "Minimuma grandeco de teksturoj"
+
+#: src/settings_translation_file.cpp
msgid ""
"Shadow offset (in pixels) of the default font. If 0, then shadow will not be "
"drawn."
@@ -6240,11 +6554,8 @@ msgstr ""
"DeÅovo de ombro de la norma tiparo. Se Äi estas 0, la ombro ne desegniÄos."
#: src/settings_translation_file.cpp
-msgid ""
-"Shadow offset (in pixels) of the fallback font. If 0, then shadow will not "
-"be drawn."
-msgstr ""
-"DeÅovo de tipara ombro (en bilderoj); se Äi estas 0, la ombro ne desegniÄos."
+msgid "Shadow strength"
+msgstr "Forto de ombro"
#: src/settings_translation_file.cpp
msgid "Shape of the minimap. Enabled = round, disabled = square."
@@ -6259,18 +6570,17 @@ msgid "Show entity selection boxes"
msgstr "Montri elektujojn de estoj"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Show entity selection boxes\n"
"A restart is required after changing this."
msgstr ""
-"Agordi la lingvon. Lasu malplena por uzi la sisteman.\n"
+"Montri elektujojn de estoj\n"
"Rerulo necesas post la ÅanÄo."
#: src/settings_translation_file.cpp
#, fuzzy
-msgid "Show nametag backgrounds by default"
-msgstr "Implice grasa tiparo"
+msgid "Show name tag backgrounds by default"
+msgstr "Implicite montri fonojn de nometikedoj"
#: src/settings_translation_file.cpp
msgid "Shutdown message"
@@ -6303,6 +6613,10 @@ msgstr ""
"kopiatajn de la ĉefa fadeno, malhelpante skuadon."
#: src/settings_translation_file.cpp
+msgid "Sky Body Orbit Tilt"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Slice w"
msgstr "Tranĉo w"
@@ -6320,7 +6634,7 @@ msgstr "Minimuma nombro de etaj kavernoj"
#: src/settings_translation_file.cpp
msgid "Small-scale humidity variation for blending biomes on borders."
-msgstr ""
+msgstr "Malgranda variado de malsekeco por kontinuigi klimatojn ĉe limoj."
#: src/settings_translation_file.cpp
msgid "Small-scale temperature variation for blending biomes on borders."
@@ -6359,16 +6673,12 @@ msgid "Sneaking speed, in nodes per second."
msgstr "Rapido de kaÅirado, en monderoj sekunde."
#: src/settings_translation_file.cpp
-msgid "Sound"
-msgstr "Sono"
-
-#: src/settings_translation_file.cpp
-msgid "Special key"
-msgstr "Speciala klavo"
+msgid "Soft shadow radius"
+msgstr "Radiuso de mola ombro"
#: src/settings_translation_file.cpp
-msgid "Special key for climbing/descending"
-msgstr "Speciala klavo por supreniri/malsupreniri"
+msgid "Sound"
+msgstr "Sono"
#: src/settings_translation_file.cpp
msgid ""
@@ -6388,6 +6698,17 @@ msgid ""
"Note that mods or games may explicitly set a stack for certain (or all) "
"items."
msgstr ""
+"Specifas la implicitajn kolumnograndojn de monderoj, portaĵoj kaj iloj.\n"
+"Notu, ke modifaĵoj aŭ ludoj povas eksplicite agordi kolumnograndojn por iuj "
+"(aŭ ĉiuj) portaĵoj."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Spread a complete update of shadow map over given amount of frames.\n"
+"Higher values might make shadows laggy, lower values\n"
+"will consume more resources.\n"
+"Minimum value: 1; maximum value: 16"
+msgstr ""
#: src/settings_translation_file.cpp
msgid ""
@@ -6416,9 +6737,8 @@ msgid "Step mountain spread noise"
msgstr "Bruo de disvastiÄo de terasaj montoj"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Strength of 3D mode parallax."
-msgstr "Potenco de paralakso."
+msgstr "Potenco de paralakso en tridimensia reÄimo."
#: src/settings_translation_file.cpp
msgid ""
@@ -6451,6 +6771,18 @@ msgid ""
"server-intensive extreme water flow and to avoid vast flooding of the\n"
"world surface below."
msgstr ""
+"Surfaca nivelo de ebla akvo sur solida fluginsula tavolo.\n"
+"Tia akvo estas malÅaltita implicite kaj ĉeestos nur se ĉi tiu valoro estas\n"
+"pli granda ol 'mgv7_floatland_ymax' - 'mgv7_floatland_taper' (la komenco de "
+"la\n"
+"supra maldikiÄo).\n"
+"***AVERTO, EBLA DANÄœERO AL MONDOJ KAJ SERVILA RENDIMENTO***:\n"
+"Se vi ebligas akvon sur fluginsuloj, la fluginsuloj devas esti solidaj "
+"tavoloj.\n"
+"Por tio, la agordo 'mgv7_floatland_density' devas esti '2.0' (aÅ­ alia\n"
+"postulata valoro depende de 'mgv7_np_floatland'). Tio evitos\n"
+"servil-intensan ekstreman akvofluon kaj vastan inundadon de la\n"
+"suba mondsurfaco."
#: src/settings_translation_file.cpp
msgid "Synchronous SQLite"
@@ -6510,6 +6842,13 @@ msgstr "Indiko al teksturoj"
#: src/settings_translation_file.cpp
msgid ""
+"Texture size to render the shadow map on.\n"
+"This must be a power of two.\n"
+"Bigger numbers create better shadows but it is also more expensive."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Textures on a node may be aligned either to the node or to the world.\n"
"The former mode suits better things like machines, furniture, etc., while\n"
"the latter makes stairs and microblocks fit surroundings better.\n"
@@ -6530,8 +6869,8 @@ msgstr "URL al la deponejo de enhavo"
#: src/settings_translation_file.cpp
#, fuzzy
-msgid "The deadzone of the joystick"
-msgstr "Identigilo de la uzota stirstango"
+msgid "The dead zone of the joystick"
+msgstr "La nerespondema zono de la stirstango"
#: src/settings_translation_file.cpp
msgid ""
@@ -6596,29 +6935,37 @@ msgid ""
"maintained.\n"
"This should be configured together with active_object_send_range_blocks."
msgstr ""
+"La volumena radiuso, mezurita en mondopecoj (16 monderoj),\n"
+"de monderoj ĉirkaŭ ĉiu ludanto submetataj al la trajtoj de aktivaj "
+"monderoj. \n"
+"En aktivaj monderoj, objektoj enlegiÄas kaj aktivaj modifiloj de monderoj "
+"(ABM) ruliÄas.\n"
+"Ĉi tio ankaÅ­ estas la minimuma vidodistanco, en kiu teniÄas aktivaj objektoj "
+"(estuloj).\n"
+"Ĉi tio devas esti agordita kune kun active_object_send_range_blocks."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
-"The rendering back-end for Irrlicht.\n"
+"The rendering back-end.\n"
"A restart is required after changing this.\n"
"Note: On Android, stick with OGLES1 if unsure! App may fail to start "
"otherwise.\n"
"On other platforms, OpenGL is recommended.\n"
"Shaders are supported by OpenGL (desktop only) and OGLES2 (experimental)"
msgstr ""
-"La bildiga internaĵo por Irrlicht.\n"
-"Rerulo necesas post ĉi tiu ÅanÄo.\n"
+"La bildiga internaĵo.\n"
+"Relanĉo necesas post ĉi tiu ÅanÄo.\n"
"Rimarko: Sur Androido, restu ĉe OGLES1, se vi ne certas! Aplikaĵo alie "
"povus\n"
-"malsukcesi ruliÄon. Sur aliaj sistemoj, OpenGL estas rekomendata, kaj "
-"nuntempe\n"
-"estas la sola pelilo subtenanta ombrigilojn."
+"malsukcesi ruliÄon. Sur aliaj sistemoj, OpenGL estas rekomendata.\n"
+"Ombrigiloj estas subtenataj de OpenGL (nur sur tablaj komputiloj) kaj OGLES2 "
+"(eksperimente)"
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
"The sensitivity of the joystick axes for moving the\n"
-"ingame view frustum around."
+"in-game view frustum around."
msgstr ""
"Sentemo de la stirstangaj aksoj por movadi la\n"
"enludan vidamplekson."
@@ -6650,6 +6997,8 @@ msgid ""
"The time budget allowed for ABMs to execute on each step\n"
"(as a fraction of the ABM Interval)"
msgstr ""
+"TempobuÄeto por rulado de ABM (aktiva modifilo de monderoj) dum ĉiu paÅo\n"
+"(kiel frakcio de la intertempo de ABM)"
#: src/settings_translation_file.cpp
msgid ""
@@ -6660,12 +7009,12 @@ msgstr ""
"de stirstangaj klavoj."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"The time in seconds it takes between repeated node placements when holding\n"
"the place button."
msgstr ""
-"Tempo (en sekundoj) inter ripetaj klakoj dum premo de la dekstra musbutono."
+"Tempo (en sekundoj) inter ripetaj metoj de monderoj dum premado de\n"
+"la butono por meti."
#: src/settings_translation_file.cpp
msgid "The type of joystick"
@@ -6734,6 +7083,10 @@ msgid "Touch screen threshold"
msgstr "Sojlo de tuÅekrano"
#: src/settings_translation_file.cpp
+msgid "Tradeoffs for performance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Trees noise"
msgstr "Bruo de arboj"
@@ -6788,9 +7141,8 @@ msgid "Upper Y limit of dungeons."
msgstr "Supra Y-limo de forgeskeloj."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Upper Y limit of floatlands."
-msgstr "Supra Y-limo de forgeskeloj."
+msgstr "Supra Y-limo de fluginsuloj."
#: src/settings_translation_file.cpp
msgid "Use 3D cloud look instead of flat."
@@ -6809,8 +7161,9 @@ msgid "Use bilinear filtering when scaling textures."
msgstr "Uzi dulinearan filtradon skalante teksturojn."
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
-"Use mip mapping to scale textures. May slightly increase performance,\n"
+"Use mipmapping to scale textures. May slightly increase performance,\n"
"especially when using a high resolution texture pack.\n"
"Gamma correct downscaling is not supported."
msgstr ""
@@ -6828,6 +7181,14 @@ msgid ""
"If set to 0, MSAA is disabled.\n"
"A restart is required after changing this option."
msgstr ""
+"Uzi multspecimenan glatigon (MSAA) por glatigi randojn de monderoj.\n"
+"Tiu algoritmo glatigas la tridimensian vidon, ne malklarigante la bildon.\n"
+"Tamen, Äi ne ÅanÄas la internon de teksturoj\n"
+"(kio estas speciale rimarkebla pri travideblaj teksturoj).\n"
+"Videblaj spacoj aperas inter monderoj, se ombrigiloj estas malÅaltitaj.\n"
+"Se la valoro de ĉi tiu elekteblo estas 0, multspecimena glatigo estas "
+"malÅaltita.\n"
+"Vi devas relanĉi post ÅanÄo de ĉi tiu elekteblo."
#: src/settings_translation_file.cpp
msgid "Use trilinear filtering when scaling textures."
@@ -6859,7 +7220,7 @@ msgstr "Deklivo de valoj"
#: src/settings_translation_file.cpp
msgid "Variation of biome filler depth."
-msgstr ""
+msgstr "Vario de profundoj de surfacoj de klimato."
#: src/settings_translation_file.cpp
msgid "Variation of maximum mountain height (in nodes)."
@@ -6931,7 +7292,8 @@ msgid "Viewing range"
msgstr "Vidodistanco"
#: src/settings_translation_file.cpp
-msgid "Virtual joystick triggers aux button"
+#, fuzzy
+msgid "Virtual joystick triggers Aux1 button"
msgstr "Virtuala stirstango premas specialan klavon"
#: src/settings_translation_file.cpp
@@ -7010,6 +7372,11 @@ msgid "Waving plants"
msgstr "Ondantaj plantoj"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Weblink color"
+msgstr "Koloro de elektujo"
+
+#: 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"
@@ -7032,14 +7399,14 @@ msgstr ""
"bone elÅutadon de teksturoj de la aparataro."
#: src/settings_translation_file.cpp
+#, fuzzy
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.\n"
+"memory. Powers of 2 are recommended. This setting is ONLY applied if\n"
+"bilinear/trilinear/anisotropic filtering is enabled.\n"
"This is also used as the base node texture size for world-aligned\n"
"texture autoscaling."
msgstr ""
@@ -7054,19 +7421,13 @@ msgstr ""
"grandigado de monde laÅ­igitaj teksturoj."
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
-"Whether FreeType fonts are used, requires FreeType support to be compiled "
-"in.\n"
-"If disabled, bitmap and XML vectors fonts are used instead."
-msgstr ""
-"Ĉu tiparoj de FreeType uziÄas; postulas entradukitan subtenon de FreeType.\n"
-"MalÅaltite, ĉi tio anstataÅ­e uzigas tiparojn bitbildajn kaj XML-vektorajn."
-
-#: src/settings_translation_file.cpp
-msgid ""
-"Whether nametag backgrounds should be shown by default.\n"
+"Whether name tag backgrounds should be shown by default.\n"
"Mods may still set a background."
msgstr ""
+"Ĉu implicite montri fonojn de nometikedoj.\n"
+"Modifaĵoj malgraŭ tio povas agordi fonojn."
#: src/settings_translation_file.cpp
msgid "Whether node texture animations should be desynchronized per mapblock."
@@ -7115,8 +7476,9 @@ msgstr ""
"Ĉu montri erarserĉajn informojn de la kliento (efikas samkiel premo de F5)."
#: src/settings_translation_file.cpp
-msgid "Width component of the initial window size."
-msgstr "LarÄeco de la fenestro je Äia komenca grando."
+msgid "Width component of the initial window size. Ignored in fullscreen mode."
+msgstr ""
+"LarÄo de la fenestro je Äia komenca grando. Ignorata en plenekrana reÄimo."
#: src/settings_translation_file.cpp
msgid "Width of the selection box lines around nodes."
@@ -7161,7 +7523,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "World-aligned textures mode"
-msgstr "ReÄimo de monde laÅ­igitaj tekstruoj"
+msgstr "ReÄimo de monde laÅ­igitaj teksturoj"
#: src/settings_translation_file.cpp
msgid "Y of flat ground."
@@ -7190,6 +7552,10 @@ msgid ""
"For a solid floatland layer, this controls the height of hills/mountains.\n"
"Must be less than or equal to half the distance between the Y limits."
msgstr ""
+"Y-distanco, ekde kiu fluginsuloj maldikiÄas de plena denso al nenio.\n"
+"MaldikiÄo komenciÄas ĉe ĉi tiu distanco de la Y-limo.\n"
+"Sur solida fluginsula tavolo, tio regas la altojn de montetoj/montoj.\n"
+"Devas esti ne pli ol duono de la distanco inter la Y-limoj."
#: src/settings_translation_file.cpp
msgid "Y-level of average terrain surface."
@@ -7212,34 +7578,22 @@ msgid "Y-level of seabed."
msgstr "Y-nivelo de marplanko."
#: src/settings_translation_file.cpp
-msgid ""
-"ZLib compression level to use when saving mapblocks to disk.\n"
-"-1 - Zlib's default compression level\n"
-"0 - no compresson, fastest\n"
-"9 - best compression, slowest\n"
-"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)"
-msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid ""
-"ZLib compression level to use when sending mapblocks to the client.\n"
-"-1 - Zlib's default compression level\n"
-"0 - no compresson, fastest\n"
-"9 - best compression, slowest\n"
-"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "cURL file download timeout"
msgstr "Tempolimo de dosiere elÅuto de cURL"
#: src/settings_translation_file.cpp
+msgid "cURL interactive timeout"
+msgstr "Interaga tempolimo de cURL"
+
+#: src/settings_translation_file.cpp
msgid "cURL parallel limit"
msgstr "Samtempa limo de cURL"
-#: src/settings_translation_file.cpp
-msgid "cURL timeout"
-msgstr "cURL tempolimo"
+#~ msgid "- Creative Mode: "
+#~ msgstr "– Krea reÄimo: "
+
+#~ msgid "- Damage: "
+#~ msgstr "– Difekto: "
#~ msgid ""
#~ "0 = parallax occlusion with slope information (faster).\n"
@@ -7248,6 +7602,9 @@ msgstr "cURL tempolimo"
#~ "0 = paralaksa ombrigo kun klinaj informoj (pli rapida).\n"
#~ "1 = reliefa mapado (pli preciza)."
+#~ msgid "Address / Port"
+#~ msgstr "Adreso / Pordo"
+
#~ msgid ""
#~ "Adjust the gamma encoding for the light tables. Higher numbers are "
#~ "brighter.\n"
@@ -7267,6 +7624,9 @@ msgstr "cURL tempolimo"
#~ msgid "Back"
#~ msgstr "Reeniri"
+#~ msgid "Bits per pixel (aka color depth) in fullscreen mode."
+#~ msgstr "Bitoj bildere (aÅ­ kolornombro) en tutekrana reÄimo."
+
#~ msgid "Bump Mapping"
#~ msgstr "Tubera mapado"
@@ -7306,13 +7666,26 @@ msgstr "cURL tempolimo"
#~ "Regas larÄecon de tuneloj; pli malgranda valoro kreas pri larÄajn "
#~ "tunelojn."
+#~ msgid "Credits"
+#~ msgstr "Kontribuantaro"
+
#~ msgid "Crosshair color (R,G,B)."
#~ msgstr "Koloro de celilo (R,V,B)."
+#~ msgid "Damage enabled"
+#~ msgstr "Difektado estas Åaltita"
+
#~ msgid "Darkness sharpness"
#~ msgstr "Akreco de mallumo"
#~ msgid ""
+#~ "Default timeout for cURL, stated in milliseconds.\n"
+#~ "Only has an effect if compiled with cURL."
+#~ msgstr ""
+#~ "Implicita tempolimo por cURL, milisekunde.\n"
+#~ "Nur efektiviÄas programtradukite kun cURL."
+
+#~ msgid ""
#~ "Defines areas of floatland smooth terrain.\n"
#~ "Smooth floatlands occur when noise > 0."
#~ msgstr ""
@@ -7376,6 +7749,15 @@ msgstr "cURL tempolimo"
#~ msgid "FPS in pause menu"
#~ msgstr "Kadroj sekunde en paÅ­za menuo"
+#~ msgid "Fallback font shadow"
+#~ msgstr "Ombro de reenpaÅa tiparo"
+
+#~ msgid "Fallback font shadow alpha"
+#~ msgstr "Travidebleco de ombro de la reenpaÅa tiparo"
+
+#~ msgid "Fallback font size"
+#~ msgstr "Grando de reenpaÅa tiparo"
+
#~ msgid "Floatland base height noise"
#~ msgstr "Bruo de baza alteco de fluginsuloj"
@@ -7385,6 +7767,15 @@ msgstr "cURL tempolimo"
#~ msgid "Font shadow alpha (opaqueness, between 0 and 255)."
#~ msgstr "Maltravidebleco de tipara ombro (inter 0 kaj 255)."
+#~ msgid "Font size of the fallback font in point (pt)."
+#~ msgstr "Grandeco de la reenpaÅa tiparo, punkte (pt)."
+
+#~ msgid "FreeType fonts"
+#~ msgstr "Tiparoj «FreeType»"
+
+#~ msgid "Full screen BPP"
+#~ msgstr "Kolornombro tutekrane"
+
#~ msgid "Gamma"
#~ msgstr "HelÄustigo"
@@ -7394,9 +7785,15 @@ msgstr "cURL tempolimo"
#~ msgid "Generate normalmaps"
#~ msgstr "Estigi normalmapojn"
+#~ msgid "High-precision FPU"
+#~ msgstr "Preciza glitkoma datentraktilo (FPU)"
+
#~ msgid "IPv6 support."
#~ msgstr "Subteno de IPv6."
+#~ msgid "Install: file: \"$1\""
+#~ msgstr "Instali: dosiero: «$1»"
+
#~ msgid "Lava depth"
#~ msgstr "Lafo-profundeco"
@@ -7412,6 +7809,11 @@ msgstr "cURL tempolimo"
#~ msgid "Main menu style"
#~ msgstr "Stilo de ĉefmenuo"
+#~ msgid "Makes DirectX work with LuaJIT. Disable if it causes troubles."
+#~ msgstr ""
+#~ "Funkciigas programaron «DirectX» kun «LuaJIT». MalÅaltu okaze de "
+#~ "problemoj."
+
#~ msgid "Minimap in radar mode, Zoom x2"
#~ msgstr "Mapeto en radara reÄimo, zomo ×2"
@@ -7424,6 +7826,9 @@ msgstr "cURL tempolimo"
#~ msgid "Minimap in surface mode, Zoom x4"
#~ msgstr "Mapeto en supraĵa reÄimo, zomo ×4"
+#~ msgid "Name / Password"
+#~ msgstr "Nomo / Pasvorto"
+
#~ msgid "Name/Password"
#~ msgstr "Nomo/Pasvorto"
@@ -7442,6 +7847,13 @@ msgstr "cURL tempolimo"
#~ msgid "Ok"
#~ msgstr "Bone"
+#~ msgid ""
+#~ "Opaqueness (alpha) of the shadow behind the fallback font, between 0 and "
+#~ "255."
+#~ msgstr ""
+#~ "Netravidebleco (alfa) de la ombro post la reenpaÅa tiparo, inter 0 kaj "
+#~ "255."
+
#~ msgid "Overall bias of parallax occlusion effect, usually scale/2."
#~ msgstr "Entuta ekarto de la efiko de paralaksa ombrigo, kutime skalo/2."
@@ -7478,6 +7890,9 @@ msgstr "cURL tempolimo"
#~ msgid "Projecting dungeons"
#~ msgstr "Planante forgeskelojn"
+#~ msgid "PvP enabled"
+#~ msgstr "Dueloj Åaltitas"
+
#~ msgid "Reset singleplayer world"
#~ msgstr "Rekomenci mondon por unu ludanto"
@@ -7487,6 +7902,19 @@ msgstr "cURL tempolimo"
#~ msgid "Shadow limit"
#~ msgstr "Limo por ombroj"
+#~ msgid ""
+#~ "Shadow offset (in pixels) of the fallback font. If 0, then shadow will "
+#~ "not be drawn."
+#~ msgstr ""
+#~ "DeÅovo de tipara ombro (en bilderoj); se Äi estas 0, la ombro ne "
+#~ "desegniÄos."
+
+#~ msgid "Special"
+#~ msgstr "Speciala"
+
+#~ msgid "Special key"
+#~ msgstr "Speciala klavo"
+
#~ msgid "Start Singleplayer"
#~ msgstr "Komenci ludon por unu"
@@ -7496,6 +7924,9 @@ msgstr "cURL tempolimo"
#~ msgid "This font will be used for certain languages."
#~ msgstr "Tiu ĉi tiparo uziÄos por iuj lingvoj."
+#~ msgid "To enable shaders the OpenGL driver needs to be used."
+#~ msgstr "Por uzi ombrigilojn, OpenGL-pelilo estas necesa."
+
#~ msgid "Toggle Cinematic"
#~ msgstr "Baskuligi glitan vidpunkton"
@@ -7518,6 +7949,15 @@ msgstr "cURL tempolimo"
#~ msgid "Waving water"
#~ msgstr "Ondanta akvo"
+#~ msgid ""
+#~ "Whether FreeType fonts are used, requires FreeType support to be compiled "
+#~ "in.\n"
+#~ "If disabled, bitmap and XML vectors fonts are used instead."
+#~ msgstr ""
+#~ "Ĉu tiparoj de FreeType uziÄas; postulas entradukitan subtenon de "
+#~ "FreeType.\n"
+#~ "MalÅaltite, ĉi tio anstataÅ­e uzigas tiparojn bitbildajn kaj XML-vektorajn."
+
#, fuzzy
#~ msgid "Y of upper limit of lava in large caves."
#~ msgstr "Y de supera limo de grandaj kvazaÅ­-hazardaj kavernoj."
@@ -7527,3 +7967,9 @@ msgstr "cURL tempolimo"
#~ msgid "Yes"
#~ msgstr "Jes"
+
+#~ msgid "You died."
+#~ msgstr "Vi mortis."
+
+#~ msgid "needs_fallback_font"
+#~ msgstr "no"
diff --git a/po/es/minetest.po b/po/es/minetest.po
index 1c75633cc..c0248b97a 100644
--- a/po/es/minetest.po
+++ b/po/es/minetest.po
@@ -2,9 +2,9 @@ msgid ""
msgstr ""
"Project-Id-Version: Spanish (Minetest)\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-02-23 19:03+0100\n"
-"PO-Revision-Date: 2021-04-08 18:26+0000\n"
-"Last-Translator: David Leal <halfpacho@gmail.com>\n"
+"POT-Creation-Date: 2022-01-25 23:19+0100\n"
+"PO-Revision-Date: 2022-01-23 18:54+0000\n"
+"Last-Translator: rubenwardy <rw@rubenwardy.com>\n"
"Language-Team: Spanish <https://hosted.weblate.org/projects/minetest/"
"minetest/es/>\n"
"Language: es\n"
@@ -12,7 +12,43 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 4.6-dev\n"
+"X-Generator: Weblate 4.11-dev\n"
+
+#: builtin/client/chatcommands.lua
+msgid "Clear the out chat queue"
+msgstr "Vaciar la cola de chat de salida"
+
+#: builtin/client/chatcommands.lua
+msgid "Empty command."
+msgstr "Comando vacío."
+
+#: builtin/client/chatcommands.lua
+msgid "Exit to main menu"
+msgstr "Salir al menú principal"
+
+#: builtin/client/chatcommands.lua
+msgid "Invalid command: "
+msgstr "Comando inválido: "
+
+#: builtin/client/chatcommands.lua
+msgid "Issued command: "
+msgstr "Comando emitido: "
+
+#: builtin/client/chatcommands.lua
+msgid "List online players"
+msgstr "Listar jugadores conectados"
+
+#: builtin/client/chatcommands.lua
+msgid "Online players: "
+msgstr "Jugadores conectados: "
+
+#: builtin/client/chatcommands.lua
+msgid "The out chat queue is now empty."
+msgstr "La cola de salida del chat está ahora vacía."
+
+#: builtin/client/chatcommands.lua
+msgid "This command is disabled by server."
+msgstr "Este comando está deshabilitado por el servidor."
#: builtin/client/death_formspec.lua src/client/game.cpp
msgid "Respawn"
@@ -22,11 +58,43 @@ msgstr "Reaparecer"
msgid "You died"
msgstr "Has muerto"
+#: builtin/common/chatcommands.lua
+msgid "Available commands:"
+msgstr "Comandos disponibles:"
+
+#: builtin/common/chatcommands.lua
+msgid "Available commands: "
+msgstr "Comandos disponibles: "
+
+#: builtin/common/chatcommands.lua
+msgid "Command not available: "
+msgstr "Comando no disponible: "
+
+#: builtin/common/chatcommands.lua
+msgid "Get help for commands"
+msgstr "Obtener ayuda para los comandos"
+
+#: builtin/common/chatcommands.lua
+msgid ""
+"Use '.help <cmd>' to get more information, or '.help all' to list everything."
+msgstr ""
+"Usa '.help <cmd>' para obtener más información, o '.help all' para mostrar "
+"todo."
+
+#: builtin/common/chatcommands.lua
+msgid "[all | <cmd>]"
+msgstr "[all | <cmd>]"
+
#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp
msgid "OK"
msgstr "Aceptar"
#: builtin/fstk/ui.lua
+#, fuzzy
+msgid "<none available>"
+msgstr "Comando no disponible: "
+
+#: builtin/fstk/ui.lua
msgid "An error occurred in a Lua script:"
msgstr "Ha ocurrido un error en un script de Lua:"
@@ -230,6 +298,11 @@ msgid "Install missing dependencies"
msgstr "Instalar dependencias faltantes"
#: builtin/mainmenu/dlg_contentstore.lua
+#, fuzzy
+msgid "Install: Unsupported file type or broken archive"
+msgstr "Instalar: Formato de archivo \"$1\" no soportado o archivo corrupto"
+
+#: builtin/mainmenu/dlg_contentstore.lua
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Mods"
msgstr "Mods"
@@ -536,7 +609,7 @@ msgstr "< Volver a la página de configuración"
msgid "Browse"
msgstr "Explorar"
-#: builtin/mainmenu/dlg_settings_advanced.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_settings.lua
msgid "Disabled"
msgstr "Desactivado"
@@ -561,7 +634,8 @@ msgid "Offset"
msgstr "Compensado"
#: builtin/mainmenu/dlg_settings_advanced.lua
-msgid "Persistance"
+#, fuzzy
+msgid "Persistence"
msgstr "Persistencia"
#: builtin/mainmenu/dlg_settings_advanced.lua
@@ -580,7 +654,7 @@ msgstr "Restablecer por defecto"
msgid "Scale"
msgstr "Escala"
-#: builtin/mainmenu/dlg_settings_advanced.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_online.lua
msgid "Search"
msgstr "Buscar"
@@ -674,14 +748,6 @@ msgstr ""
"paquete de mod $1"
#: builtin/mainmenu/pkgmgr.lua
-msgid "Install: Unsupported file type \"$1\" or broken archive"
-msgstr "Instalar: Formato de archivo \"$1\" no soportado o archivo corrupto"
-
-#: builtin/mainmenu/pkgmgr.lua
-msgid "Install: file: \"$1\""
-msgstr "Instalar: Archivo: \"$1\""
-
-#: builtin/mainmenu/pkgmgr.lua
msgid "Unable to find a valid mod or modpack"
msgstr "Imposible encontrar un mod o paquete de mod"
@@ -715,6 +781,42 @@ msgstr ""
"Intente rehabilitar la lista de servidores públicos y verifique su conexión "
"a Internet."
+#: builtin/mainmenu/tab_about.lua
+msgid "About"
+msgstr "Acerca de"
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Active Contributors"
+msgstr "Colaboradores activos"
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Active renderer:"
+msgstr "Renderizador activo:"
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Core Developers"
+msgstr "Desarrolladores principales"
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Open User Data Directory"
+msgstr "Abrir Directorio de Datos de Usuario"
+
+#: builtin/mainmenu/tab_about.lua
+msgid ""
+"Opens the directory that contains user-provided worlds, games, mods,\n"
+"and texture packs in a file manager / explorer."
+msgstr ""
+"Abre el directorio que contiene los mundos, juegos, mods, y paquetes de\n"
+"textura, del usuario, en un gestor / explorador de archivos."
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Previous Contributors"
+msgstr "Antiguos colaboradores"
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Previous Core Developers"
+msgstr "Antiguos desarrolladores principales"
+
#: builtin/mainmenu/tab_content.lua
msgid "Browse online content"
msgstr "Explorar contenido en línea"
@@ -755,38 +857,6 @@ msgstr "Desinstalar el paquete"
msgid "Use Texture Pack"
msgstr "Usar el paqu. de texturas"
-#: builtin/mainmenu/tab_credits.lua
-msgid "Active Contributors"
-msgstr "Colaboradores activos"
-
-#: 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 "Open User Data Directory"
-msgstr "Abrir Directorio de Datos de Usuario"
-
-#: builtin/mainmenu/tab_credits.lua
-msgid ""
-"Opens the directory that contains user-provided worlds, games, mods,\n"
-"and texture packs in a file manager / explorer."
-msgstr ""
-"Abre el directorio que contiene los mundos, juegos, mods, y paquetes de\n"
-"textura, del usuario, en un gestor / explorador de archivos."
-
-#: builtin/mainmenu/tab_credits.lua
-msgid "Previous Contributors"
-msgstr "Antiguos colaboradores"
-
-#: builtin/mainmenu/tab_credits.lua
-msgid "Previous Core Developers"
-msgstr "Antiguos desarrolladores principales"
-
#: builtin/mainmenu/tab_local.lua
msgid "Announce Server"
msgstr "Anunciar servidor"
@@ -815,7 +885,7 @@ msgstr "Hospedar servidor"
msgid "Install games from ContentDB"
msgstr "Instalar juegos desde ContentDB"
-#: builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
msgid "Name"
msgstr "Nombre"
@@ -827,7 +897,7 @@ msgstr "Nuevo"
msgid "No world created or selected!"
msgstr "¡No se ha dado un nombre al mundo o no se ha seleccionado uno!"
-#: builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
msgid "Password"
msgstr "Contraseña"
@@ -835,7 +905,7 @@ msgstr "Contraseña"
msgid "Play Game"
msgstr "Jugar juego"
-#: builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
msgid "Port"
msgstr "Puerto"
@@ -856,8 +926,12 @@ msgid "Start Game"
msgstr "Empezar juego"
#: builtin/mainmenu/tab_online.lua
-msgid "Address / Port"
-msgstr "Dirección / puerto"
+msgid "Address"
+msgstr "Dirección"
+
+#: builtin/mainmenu/tab_online.lua src/client/keycode.cpp
+msgid "Clear"
+msgstr "Limpiar"
#: builtin/mainmenu/tab_online.lua
msgid "Connect"
@@ -867,34 +941,42 @@ msgstr "Conectar"
msgid "Creative mode"
msgstr "Modo creativo"
+#. ~ PvP = Player versus Player
#: builtin/mainmenu/tab_online.lua
-msgid "Damage enabled"
-msgstr "Daño activado"
+msgid "Damage / PvP"
+msgstr "Daño / PvP"
#: builtin/mainmenu/tab_online.lua
msgid "Del. Favorite"
msgstr "Borrar Fav."
#: builtin/mainmenu/tab_online.lua
-msgid "Favorite"
-msgstr "Favorito"
+msgid "Favorites"
+msgstr "Favoritos"
#: builtin/mainmenu/tab_online.lua
-msgid "Join Game"
-msgstr "Unirse al juego"
+msgid "Incompatible Servers"
+msgstr "Servidores Incompatibles"
#: builtin/mainmenu/tab_online.lua
-msgid "Name / Password"
-msgstr "Nombre / contraseña"
+msgid "Join Game"
+msgstr "Unirse al juego"
#: builtin/mainmenu/tab_online.lua
msgid "Ping"
msgstr "Ping"
-#. ~ PvP = Player versus Player
#: builtin/mainmenu/tab_online.lua
-msgid "PvP enabled"
-msgstr "PvP activado"
+msgid "Public Servers"
+msgstr "Servidores Públicos"
+
+#: builtin/mainmenu/tab_online.lua
+msgid "Refresh"
+msgstr "Actualizar"
+
+#: builtin/mainmenu/tab_online.lua
+msgid "Server Description"
+msgstr "Descripción del Servidor"
#: builtin/mainmenu/tab_settings.lua
msgid "2x"
@@ -936,11 +1018,31 @@ msgstr "Configurar teclas"
msgid "Connected Glass"
msgstr "Vidrio conectado"
+#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
+msgid "Dynamic shadows"
+msgstr "Sombras dinámicas"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Dynamic shadows: "
+msgstr "Sombras dinámicas: "
+
#: builtin/mainmenu/tab_settings.lua
msgid "Fancy Leaves"
msgstr "Hojas elegantes"
#: builtin/mainmenu/tab_settings.lua
+msgid "High"
+msgstr "Alto"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Low"
+msgstr "Bajo"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Medium"
+msgstr "Medio"
+
+#: builtin/mainmenu/tab_settings.lua
msgid "Mipmap"
msgstr "Mipmap"
@@ -966,7 +1068,7 @@ msgstr "Marcar nodos"
#: builtin/mainmenu/tab_settings.lua
msgid "None"
-msgstr "Ninguno"
+msgstr ""
#: builtin/mainmenu/tab_settings.lua
msgid "Opaque Leaves"
@@ -986,7 +1088,7 @@ msgstr "Pantalla:"
#: builtin/mainmenu/tab_settings.lua
msgid "Settings"
-msgstr "Configuración"
+msgstr "Ajustes"
#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
msgid "Shaders"
@@ -1012,10 +1114,6 @@ msgstr "Iluminación suave"
msgid "Texturing:"
msgstr "Texturizado:"
-#: builtin/mainmenu/tab_settings.lua
-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 src/settings_translation_file.cpp
msgid "Tone Mapping"
msgstr "Mapeado de tonos"
@@ -1029,6 +1127,14 @@ msgid "Trilinear Filter"
msgstr "Filtrado trilineal"
#: builtin/mainmenu/tab_settings.lua
+msgid "Ultra High"
+msgstr "Ultra Alto"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Very Low"
+msgstr "Muy bajo"
+
+#: builtin/mainmenu/tab_settings.lua
msgid "Waving Leaves"
msgstr "Movimiento de hojas"
@@ -1040,7 +1146,7 @@ msgstr "Movimiento de líquidos"
msgid "Waving Plants"
msgstr "Movimiento de plantas"
-#: src/client/client.cpp
+#: src/client/client.cpp src/client/game.cpp
msgid "Connection timed out."
msgstr "Tiempo de espera de la conexión agotado."
@@ -1069,7 +1175,8 @@ msgid "Connection error (timed out?)"
msgstr "Error de conexión (¿tiempo agotado?)"
#: src/client/clientlauncher.cpp
-msgid "Could not find or load game \""
+#, fuzzy
+msgid "Could not find or load game: "
msgstr "No se puede encontrar o cargar el juego \""
#: src/client/clientlauncher.cpp
@@ -1102,18 +1209,6 @@ msgstr "Fallo para abrir el archivo con la contraseña proveída: "
msgid "Provided world path doesn't exist: "
msgstr "La ruta del mundo especificada no existe: "
-#. ~ DO NOT TRANSLATE THIS LITERALLY!
-#. This is a special string. Put either "no" or "yes"
-#. into the translation field (literally).
-#. Choose "yes" if the language requires use of the fallback
-#. font, "no" otherwise.
-#. The fallback font is (normally) required for languages with
-#. non-Latin script, like Chinese.
-#. When in doubt, test your translation.
-#: src/client/fontengine.cpp
-msgid "needs_fallback_font"
-msgstr "no"
-
#: src/client/game.cpp
msgid ""
"\n"
@@ -1127,14 +1222,6 @@ msgid "- Address: "
msgstr "- Dirección: "
#: src/client/game.cpp
-msgid "- Creative Mode: "
-msgstr "- Modo creativo: "
-
-#: src/client/game.cpp
-msgid "- Damage: "
-msgstr "- Daño: "
-
-#: src/client/game.cpp
msgid "- Mode: "
msgstr "- Modo: "
@@ -1156,6 +1243,16 @@ msgid "- Server Name: "
msgstr "- Nombre del servidor: "
#: src/client/game.cpp
+#, fuzzy
+msgid "A serialization error occurred:"
+msgstr "Ha ocurrido un error:"
+
+#: src/client/game.cpp
+#, c-format
+msgid "Access denied. Reason: %s"
+msgstr ""
+
+#: src/client/game.cpp
msgid "Automatic forward disabled"
msgstr "Avance automático desactivado"
@@ -1164,6 +1261,23 @@ msgid "Automatic forward enabled"
msgstr "Avance automático activado"
#: src/client/game.cpp
+#, fuzzy
+msgid "Block bounds hidden"
+msgstr "Límites de bloque"
+
+#: src/client/game.cpp
+msgid "Block bounds shown for all blocks"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Block bounds shown for current block"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Block bounds shown for nearby blocks"
+msgstr ""
+
+#: src/client/game.cpp
msgid "Camera update disabled"
msgstr "Actualización de la cámara desactivada"
@@ -1172,8 +1286,12 @@ msgid "Camera update enabled"
msgstr "Actualización de la cámara activada"
#: src/client/game.cpp
+msgid "Can't show block bounds (need 'basic_debug' privilege)"
+msgstr ""
+
+#: src/client/game.cpp
msgid "Change Password"
-msgstr "Cambiar contraseña"
+msgstr ""
#: src/client/game.cpp
msgid "Cinematic mode disabled"
@@ -1184,6 +1302,11 @@ msgid "Cinematic mode enabled"
msgstr "Modo cinematográfico activado"
#: src/client/game.cpp
+#, fuzzy
+msgid "Client disconnected"
+msgstr "Customización del cliente"
+
+#: src/client/game.cpp
msgid "Client side scripting is disabled"
msgstr "El Scripting en el lado del cliente está desactivado"
@@ -1192,6 +1315,10 @@ msgid "Connecting to server..."
msgstr "Conectando al servidor..."
#: src/client/game.cpp
+msgid "Connection failed for unknown reason"
+msgstr ""
+
+#: src/client/game.cpp
msgid "Continue"
msgstr "Continuar"
@@ -1229,6 +1356,11 @@ msgstr ""
"- %s: chat\n"
#: src/client/game.cpp
+#, c-format
+msgid "Couldn't resolve address: %s"
+msgstr ""
+
+#: src/client/game.cpp
msgid "Creating client..."
msgstr "Creando cliente..."
@@ -1357,6 +1489,10 @@ msgid "Minimap currently disabled by game or mod"
msgstr "El minimapa se encuentra actualmente desactivado por el juego o un mod"
#: src/client/game.cpp
+msgid "Multiplayer"
+msgstr "Multijugador"
+
+#: src/client/game.cpp
msgid "Noclip mode disabled"
msgstr "Modo 'Noclip' desactivado"
@@ -1430,6 +1566,21 @@ msgstr "Sonido no silenciado"
#: src/client/game.cpp
#, c-format
+msgid "The server is probably running a different version of %s."
+msgstr ""
+
+#: src/client/game.cpp
+#, c-format
+msgid "Unable to connect to %s because IPv6 is disabled"
+msgstr ""
+
+#: src/client/game.cpp
+#, c-format
+msgid "Unable to listen on %s because IPv6 is disabled"
+msgstr ""
+
+#: src/client/game.cpp
+#, c-format
msgid "Viewing range changed to %d"
msgstr "Rango de visión cambiado a %d"
@@ -1498,10 +1649,6 @@ msgid "Caps Lock"
msgstr "Bloq. Mayús"
#: src/client/keycode.cpp
-msgid "Clear"
-msgstr "Limpiar"
-
-#: src/client/keycode.cpp
msgid "Control"
msgstr "Control"
@@ -1766,6 +1913,15 @@ msgstr "Minimapa en modo superficie, Zoom x%d"
msgid "Minimap in texture mode"
msgstr "Minimapa en modo textura"
+#: src/gui/guiChatConsole.cpp
+#, fuzzy
+msgid "Failed to open webpage"
+msgstr "Fallo al descargar $1"
+
+#: src/gui/guiChatConsole.cpp
+msgid "Opening webpage"
+msgstr ""
+
#: src/gui/guiConfirmRegistration.cpp src/gui/guiPasswordChange.cpp
msgid "Passwords do not match!"
msgstr "¡Las contraseñas no coinciden!"
@@ -1794,8 +1950,8 @@ msgid "Proceed"
msgstr "Continuar"
#: src/gui/guiKeyChangeMenu.cpp
-msgid "\"Special\" = climb down"
-msgstr "\"Especial\" = Descender"
+msgid "\"Aux1\" = climb down"
+msgstr "\"Aux1\" = bajar"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Autoforward"
@@ -1806,10 +1962,18 @@ msgid "Automatic jumping"
msgstr "Salto automático"
#: src/gui/guiKeyChangeMenu.cpp
+msgid "Aux1"
+msgstr "Aux1"
+
+#: src/gui/guiKeyChangeMenu.cpp
msgid "Backward"
msgstr "Atrás"
#: src/gui/guiKeyChangeMenu.cpp
+msgid "Block bounds"
+msgstr "Límites de bloque"
+
+#: src/gui/guiKeyChangeMenu.cpp
msgid "Change camera"
msgstr "Cambiar cámara"
@@ -1900,10 +2064,6 @@ msgid "Sneak"
msgstr "Caminar"
#: src/gui/guiKeyChangeMenu.cpp
-msgid "Special"
-msgstr "Especial"
-
-#: src/gui/guiKeyChangeMenu.cpp
msgid "Toggle HUD"
msgstr "Alternar el HUD"
@@ -1964,7 +2124,8 @@ msgid "Muted"
msgstr "Silenciado"
#: src/gui/guiVolumeChange.cpp
-msgid "Sound Volume: "
+#, fuzzy, c-format
+msgid "Sound Volume: %d%%"
msgstr "Volumen del sonido: "
#. ~ Imperative, as in "Enter/type in text".
@@ -1990,9 +2151,10 @@ msgstr ""
"al tocar."
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
-"(Android) Use virtual joystick to trigger \"aux\" button.\n"
-"If enabled, virtual joystick will also tap \"aux\" button when out of main "
+"(Android) Use virtual joystick to trigger \"Aux1\" button.\n"
+"If enabled, virtual joystick will also tap \"Aux1\" button when out of main "
"circle."
msgstr ""
"(Android) Usar palanca virtual para activar el botón \"aux\".\n"
@@ -2231,6 +2393,10 @@ msgstr ""
"sólo), por ejemplo para pantallas 4K."
#: src/settings_translation_file.cpp
+msgid "Adjust the detected display density, used for scaling UI elements."
+msgstr ""
+
+#: src/settings_translation_file.cpp
#, c-format
msgid ""
"Adjusts the density of the floatland layer.\n"
@@ -2368,6 +2534,14 @@ msgid "Autoscaling mode"
msgstr "Modo de autoescalado"
#: src/settings_translation_file.cpp
+msgid "Aux1 key"
+msgstr "Tecla Aux1"
+
+#: src/settings_translation_file.cpp
+msgid "Aux1 key for climbing/descending"
+msgstr "Tecla Aux1 para subir/bajar"
+
+#: src/settings_translation_file.cpp
msgid "Backward key"
msgstr "Tecla retroceso"
@@ -2412,12 +2586,6 @@ msgid "Biome noise"
msgstr "Ruido de bioma"
#: src/settings_translation_file.cpp
-msgid "Bits per pixel (aka color depth) in fullscreen mode."
-msgstr ""
-"Bits por píxel (también conocido como profundidad de color) en modo de "
-"pantalla completa."
-
-#: src/settings_translation_file.cpp
msgid "Block send optimize distance"
msgstr "Optimizar la distancia del envío de bloques"
@@ -2524,6 +2692,16 @@ msgstr ""
"Cuando 0.0 es el nivel mínimo de luz, 1.0 es el nivel de luz máximo."
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Chat command time message threshold"
+msgstr "Umbral de expulsión por mensajes"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Chat commands"
+msgstr "Comandos de Chat"
+
+#: src/settings_translation_file.cpp
msgid "Chat font size"
msgstr "Tamaño de la fuente del chat"
@@ -2556,8 +2734,9 @@ msgid "Chat toggle key"
msgstr "Tecla alternativa para el chat"
#: src/settings_translation_file.cpp
-msgid "Chatcommands"
-msgstr "Comandos de Chat"
+#, fuzzy
+msgid "Chat weblinks"
+msgstr "Chat visible"
#: src/settings_translation_file.cpp
msgid "Chunk size"
@@ -2576,6 +2755,12 @@ msgid "Clean transparent textures"
msgstr "Limpiar texturas transparentes"
#: src/settings_translation_file.cpp
+msgid ""
+"Clickable weblinks (middle-click or Ctrl+left-click) enabled in chat console "
+"output."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Client"
msgstr "Cliente"
@@ -2620,6 +2805,10 @@ msgid "Colored fog"
msgstr "Niebla colorida"
#: src/settings_translation_file.cpp
+msgid "Colored shadows"
+msgstr "Sombras coloridas"
+
+#: src/settings_translation_file.cpp
msgid ""
"Comma-separated list of flags to hide in the content repository.\n"
"\"nonfree\" can be used to hide packages which do not qualify as 'free "
@@ -2661,6 +2850,22 @@ msgid "Command key"
msgstr "Tecla comando"
#: src/settings_translation_file.cpp
+msgid ""
+"Compression level to use when saving mapblocks to disk.\n"
+"-1 - use default compression level\n"
+"0 - least compression, fastest\n"
+"9 - best compression, slowest"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Compression level to use when sending mapblocks to the client.\n"
+"-1 - use default compression level\n"
+"0 - least compression, fastest\n"
+"9 - best compression, slowest"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Connect glass"
msgstr "Conectar vidrio"
@@ -2760,9 +2965,10 @@ msgid "Crosshair alpha"
msgstr "Opacidad del punto de mira"
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
"Crosshair alpha (opaqueness, between 0 and 255).\n"
-"Also controls the object crosshair color"
+"This also applies to the object crosshair."
msgstr ""
"Alfa del punto de mira (opacidad, entre 0 y 255).\n"
"También controla el color del objeto punto de mira"
@@ -2845,11 +3051,10 @@ msgstr "Tamaño por defecto del stack (Montón)"
#: src/settings_translation_file.cpp
msgid ""
-"Default timeout for cURL, stated in milliseconds.\n"
-"Only has an effect if compiled with cURL."
+"Define shadow filtering quality.\n"
+"This simulates the soft shadows effect by applying a PCF or Poisson disk\n"
+"but also uses more resources."
msgstr ""
-"Tiempo de espera predeterminado para cURL, en milisegundos.\n"
-"Sólo tiene efecto si está compilado con cURL."
#: src/settings_translation_file.cpp
msgid "Defines areas where trees have apples."
@@ -2978,6 +3183,10 @@ msgid "Disallow empty passwords"
msgstr "No permitir contraseñas vacías"
#: src/settings_translation_file.cpp
+msgid "Display Density Scaling Factor"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Domain name of server, to be displayed in the serverlist."
msgstr ""
"Nombre de dominio del servidor, será mostrado en la lista de servidores."
@@ -3027,6 +3236,27 @@ msgstr ""
"El soporte es experimental y la API puede cambiar."
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid ""
+"Enable Poisson disk filtering.\n"
+"On true uses Poisson disk to make \"soft shadows\". Otherwise uses PCF "
+"filtering."
+msgstr ""
+"Habilitar filtrado \"poisson disk\".\n"
+"Si el valor es \"verdadero\", utiliza \"poisson disk\" para proyectar "
+"sombras suaves. De otro modo utiliza filtrado PCF."
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid ""
+"Enable colored shadows.\n"
+"On true translucent nodes cast colored shadows. This is expensive."
+msgstr ""
+"Habilitar las sombras a color.\n"
+"Si el valor es verdadero los nodos traslúcidos proyectarán sombras a color. "
+"Esta opción usa muchos recursos."
+
+#: src/settings_translation_file.cpp
msgid "Enable console window"
msgstr "Habilitar la ventana de la consola"
@@ -3163,6 +3393,12 @@ msgstr ""
"Cambiar esta configuración requiere un reinicio."
#: src/settings_translation_file.cpp
+msgid ""
+"Enables tradeoffs that reduce CPU load or increase rendering performance\n"
+"at the expense of minor visual glitches that do not impact game playability."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Engine profiling data print interval"
msgstr "Intervalo de impresión de datos del perfil del motor"
@@ -3210,18 +3446,6 @@ msgid "Fallback font path"
msgstr "Ruta de la fuente alternativa"
#: src/settings_translation_file.cpp
-msgid "Fallback font shadow"
-msgstr "Sombra de la fuente de reserva"
-
-#: src/settings_translation_file.cpp
-msgid "Fallback font shadow alpha"
-msgstr "Alfa de la sombra de la fuente de reserva"
-
-#: src/settings_translation_file.cpp
-msgid "Fallback font size"
-msgstr "Tamaño de la fuente de reserva"
-
-#: src/settings_translation_file.cpp
msgid "Fast key"
msgstr "Tecla rápida"
@@ -3239,10 +3463,10 @@ msgstr "Movimiento rápido"
#: src/settings_translation_file.cpp
msgid ""
-"Fast movement (via the \"special\" key).\n"
+"Fast movement (via the \"Aux1\" key).\n"
"This requires the \"fast\" privilege on the server."
msgstr ""
-"Movimiento rápido (por medio de tecla de \"Uso\").\n"
+"Movimiento rápido (por medio de tecla de \"Aux1\").\n"
"Requiere privilegio \"fast\" (rápido) en el servidor."
#: src/settings_translation_file.cpp
@@ -3276,11 +3500,12 @@ msgid "Filmic tone mapping"
msgstr "Mapa de tonos fílmico"
#: src/settings_translation_file.cpp
+#, fuzzy
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."
+"which PNG optimizers usually discard, often resulting in dark or\n"
+"light edges to transparent textures. Apply a filter to clean that up\n"
+"at texture load time. This is automatically enabled if mipmapping is enabled."
msgstr ""
"Las texturas filtradas pueden mezclar valores RGB con sus vecinos "
"completamente transparentes, \n"
@@ -3378,15 +3603,17 @@ msgid "Font size"
msgstr "Tamaño de la fuente"
#: src/settings_translation_file.cpp
-msgid "Font size of the default font in point (pt)."
-msgstr "Tamaño de la fuente por defecto en punto (pt)."
+msgid "Font size divisible by"
+msgstr ""
#: src/settings_translation_file.cpp
-msgid "Font size of the fallback font in point (pt)."
-msgstr "Tamaño de la fuente de reserva en punto (pt)."
+#, fuzzy
+msgid "Font size of the default font where 1 unit = 1 pixel at 96 DPI"
+msgstr "Tamaño de la fuente por defecto en punto (pt)."
#: src/settings_translation_file.cpp
-msgid "Font size of the monospace font in point (pt)."
+#, fuzzy
+msgid "Font size of the monospace font where 1 unit = 1 pixel at 96 DPI"
msgstr "Tamaño de la fuente del monoespacio en punto (pt)."
#: src/settings_translation_file.cpp
@@ -3400,6 +3627,17 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"For pixel-style fonts that do not scale well, this ensures that font sizes "
+"used\n"
+"with this font will always be divisible by this value, in pixels. For "
+"instance,\n"
+"a pixel font 16 pixels tall should have this set to 16, so it will only ever "
+"be\n"
+"sized 16, 32, 48, etc., so a mod requesting a size of 25 will get 32."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Format of player chat messages. The following strings are valid "
"placeholders:\n"
"@name, @message, @timestamp (optional)"
@@ -3463,10 +3701,6 @@ msgstr ""
"Fracción de la distancia visible en la que la niebla se empieza a renderizar"
#: src/settings_translation_file.cpp
-msgid "FreeType fonts"
-msgstr "Fuentes FreeType"
-
-#: src/settings_translation_file.cpp
msgid ""
"From how far blocks are generated for clients, stated in mapblocks (16 "
"nodes)."
@@ -3501,10 +3735,6 @@ msgid "Full screen"
msgstr "Pantalla completa"
#: src/settings_translation_file.cpp
-msgid "Full screen BPP"
-msgstr "Profundidad de color en pantalla completa"
-
-#: src/settings_translation_file.cpp
msgid "Fullscreen mode."
msgstr "Modo de pantalla completa."
@@ -3525,10 +3755,11 @@ msgid "Global callbacks"
msgstr "Llamadas globales"
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
"Global map generation attributes.\n"
"In Mapgen v6 the 'decorations' flag controls all decorations except trees\n"
-"and junglegrass, in all other mapgens this flag controls all decorations."
+"and jungle grass, in all other mapgens this flag controls all decorations."
msgstr ""
"Atributos del generador de mapas globales.\n"
"En el generador de mapas V6 la opción (o marcador) \"decorations\" controla "
@@ -3589,8 +3820,8 @@ msgid ""
msgstr ""
"Manejo de llamadas a la API de Lua en desuso:\n"
"- none: no registrar llamadas en desuso.\n"
-"- log: imitar y registrar la pista de seguimiento de la llamada en desuso ("
-"predeterminado para la depuración).\n"
+"- log: imitar y registrar la pista de seguimiento de la llamada en desuso "
+"(predeterminado para la depuración).\n"
"- error: abortar el uso de la llamada en desuso (sugerido para "
"desarrolladores de mods)."
@@ -3617,7 +3848,9 @@ msgid "Heat noise"
msgstr "Calor del ruido"
#: src/settings_translation_file.cpp
-msgid "Height component of the initial window size."
+#, fuzzy
+msgid ""
+"Height component of the initial window size. Ignored in fullscreen mode."
msgstr "Componente de altura del tamaño inicial de la ventana."
#: src/settings_translation_file.cpp
@@ -3629,10 +3862,6 @@ msgid "Height select noise"
msgstr "Altura del ruido seleccionado"
#: src/settings_translation_file.cpp
-msgid "High-precision FPU"
-msgstr "Alta-precisión FPU"
-
-#: src/settings_translation_file.cpp
msgid "Hill steepness"
msgstr "Pendiente de la colina"
@@ -3878,13 +4107,12 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"If disabled, \"special\" key is used to fly fast if both fly and fast mode "
-"are\n"
+"If disabled, \"Aux1\" key is used to fly fast if both fly and fast mode are\n"
"enabled."
msgstr ""
-"Si está desactivado, la tecla \"especial\" se utiliza para volar rápido si "
-"tanto el modo de vuelo como el modo rápido están\n"
-"habilitados."
+"Si está desactivado, la tecla \"Aux1\" se utiliza para volar rápido si el "
+"modo\n"
+"de vuelo y el modo rápido están habilitados."
#: src/settings_translation_file.cpp
msgid ""
@@ -3912,9 +4140,10 @@ msgstr ""
"Requiere del privilegio \"noclip\" en el servidor."
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
-"If enabled, \"special\" key instead of \"sneak\" key is used for climbing "
-"down and\n"
+"If enabled, \"Aux1\" key instead of \"Sneak\" key is used for climbing down "
+"and\n"
"descending."
msgstr ""
"Si está activada, la tecla \"especial\" en lugar de la tecla \"sneak\" se "
@@ -3979,6 +4208,14 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"If the execution of a chat command takes longer than this specified time in\n"
+"seconds, add the time information to the chat command message"
+msgstr ""
+"Si la ejecución de un comando toma más tiempo del especificado en\n"
+"segundos, agrega la información del tiempo al mensaje del comando"
+
+#: src/settings_translation_file.cpp
+msgid ""
"If the file size of debug.txt exceeds the number of megabytes specified in\n"
"this setting when it is opened, the file is moved to debug.txt.1,\n"
"deleting an older debug.txt.1 if it exists.\n"
@@ -4034,7 +4271,8 @@ msgstr ""
"Esto solo suele ser necesario para los colaboradores principales o integrados"
#: src/settings_translation_file.cpp
-msgid "Instrument chatcommands on registration."
+#, fuzzy
+msgid "Instrument chat commands on registration."
msgstr "Instrumento de comandos del chat en el registro."
#: src/settings_translation_file.cpp
@@ -4129,7 +4367,8 @@ msgid "Joystick button repetition interval"
msgstr "Intervalo de repetición del botón del Joystick"
#: src/settings_translation_file.cpp
-msgid "Joystick deadzone"
+#, fuzzy
+msgid "Joystick dead zone"
msgstr "Zona muerta del joystick"
#: src/settings_translation_file.cpp
@@ -5073,8 +5312,8 @@ msgid ""
"Only mapchunks completely within the mapgen limit are generated.\n"
"Value is stored per-world."
msgstr ""
-"Límite de la generación de mapa, en nodos, en todas las 6 direcciones desde ("
-"0, 0, 0).\n"
+"Límite de la generación de mapa, en nodos, en todas las 6 direcciones desde "
+"(0, 0, 0).\n"
"Solo se generan fragmentos de mapa completamente dentro del límite de "
"generación de mapas.\n"
"Los valores se guardan por mundo."
@@ -5160,11 +5399,6 @@ msgstr ""
"(amanecer / atardecer) y la dirección de vista."
#: src/settings_translation_file.cpp
-msgid "Makes DirectX work with LuaJIT. Disable if it causes troubles."
-msgstr ""
-"Hace que DirectX funcione con LuaJIT. Desactivar si ocasiona problemas."
-
-#: src/settings_translation_file.cpp
msgid "Makes all liquids opaque"
msgstr "Vuelve opacos a todos los líquidos"
@@ -5211,11 +5445,11 @@ msgid ""
"to become shallower and occasionally dry.\n"
"'altitude_dry': Reduces humidity with altitude."
msgstr ""
-"Atributos de generación de mapas específicos del generador de mapas Valleys."
-"\n"
+"Atributos de generación de mapas específicos del generador de mapas "
+"Valleys.\n"
"'altitude_chill': Reduce el calor con la altitud.\n"
"'humid_rivers': Aumenta la humedad alrededor de ríos.\n"
-"'vary_river_depth': Si está activo, la baja humedad y alto calor causan que "
+"'vary_river_depth': Si está activo, la baja humedad y alto calor causan que\n"
"los ríos sean poco profundos y ocasionalmente secos.\n"
"'altitude_dry': Reduce la humedad con la altitud."
@@ -5224,40 +5458,29 @@ msgid "Map generation attributes specific to Mapgen v5."
msgstr "Atributos de generación de mapas específicos al generador de mapas v5."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Map generation attributes specific to Mapgen v6.\n"
"The 'snowbiomes' flag enables the new 5 biome system.\n"
"When the 'snowbiomes' flag is enabled jungles are automatically enabled and\n"
"the 'jungles' flag is ignored."
msgstr ""
-"Atributos del generador de mapas globales.\n"
-"En el generador de mapas V6 la opción (o marcador) \"decorations\" controla "
-"todos los elementos decorativos excepto los árboles y la hierba de la "
-"jungla, en todos los otros generadores de mapas esta opción controla todas "
-"las decoraciones.\n"
-"Las opciones que no son incluidas en el texto con la cadena de opciones no "
-"serán modificadas y mantendrán su valor por defecto.\n"
-"Las opciones que comienzan con el prefijo \"no\" son utilizadas para "
-"inhabilitar esas opciones."
+"Atributos específicos para la generación de Mapgen v6.\n"
+"La opción 'snowbiomes' activa el nuevo sistema de generación de 5 biomas.\n"
+"Cuando la opción 'snowbiomes' está activada, las junglas se activan "
+"automáticamente y\n"
+"la opción 'jungles' es ignorada."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Map generation attributes specific to Mapgen v7.\n"
"'ridges': Rivers.\n"
"'floatlands': Floating land masses in the atmosphere.\n"
"'caverns': Giant caves deep underground."
msgstr ""
-"Atributos del generador de mapas globales.\n"
-"En el generador de mapas V6 la opción (o marcador) \"decorations\" controla "
-"todos los elementos decorativos excepto los árboles y la hierba de la "
-"jungla, en todos los otros generadores de mapas esta opción controla todas "
-"las decoraciones.\n"
-"Las opciones que no son incluidas en el texto con la cadena de opciones no "
-"serán modificadas y mantendrán su valor por defecto.\n"
-"Las opciones que comienzan con el prefijo \"no\" son utilizadas para "
-"inhabilitar esas opciones."
+"Atributos específicos para la generación de Mapgen v7.\n"
+"'ridges': Rios.\n"
+"'floatlands': Masas de tierra flotantes en la atmósfera.\n"
+"'caverns': Cavernas gigantes subterráneo profundo."
#: src/settings_translation_file.cpp
msgid "Map generation limit"
@@ -5268,20 +5491,26 @@ msgid "Map save interval"
msgstr "Intervalo de guardado de mapa"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Map shadows update frames"
+msgstr "Tiempo de actualización de mapa"
+
+#: src/settings_translation_file.cpp
msgid "Mapblock limit"
-msgstr ""
+msgstr "Limite del Mapblock"
#: src/settings_translation_file.cpp
msgid "Mapblock mesh generation delay"
-msgstr ""
+msgstr "Retraso de generación de la malla del Mapblock"
#: src/settings_translation_file.cpp
msgid "Mapblock mesh generator's MapBlock cache size in MB"
msgstr ""
+"Tamaño de cache en MB del Mapblock del generador de la malla del Mapblock"
#: src/settings_translation_file.cpp
msgid "Mapblock unload timeout"
-msgstr ""
+msgstr "Expirado de descarga de Mapblock"
#: src/settings_translation_file.cpp
msgid "Mapgen Carpathian"
@@ -5363,11 +5592,11 @@ msgstr "Líquidos máximos procesados por paso."
#: src/settings_translation_file.cpp
msgid "Max. clearobjects extra blocks"
-msgstr ""
+msgstr "Bloques extra máximos de clearobjects"
#: src/settings_translation_file.cpp
msgid "Max. packets per iteration"
-msgstr ""
+msgstr "Máximos paquetes por iteración"
#: src/settings_translation_file.cpp
msgid "Maximum FPS"
@@ -5378,26 +5607,34 @@ msgid "Maximum FPS when the window is not focused, or when the game is paused."
msgstr "FPS máximo cuando el juego está pausado."
#: src/settings_translation_file.cpp
+msgid "Maximum distance to render shadows."
+msgstr "Distancia máxima para renderizar las sombras."
+
+#: src/settings_translation_file.cpp
msgid "Maximum forceloaded blocks"
-msgstr ""
+msgstr "Máximos bloques cargados a la fuerza"
#: src/settings_translation_file.cpp
msgid "Maximum hotbar width"
-msgstr ""
+msgstr "Anchura máxima de la barra de acceso rápido"
#: src/settings_translation_file.cpp
msgid "Maximum limit of random number of large caves per mapchunk."
-msgstr ""
+msgstr "Límite máximo de grandes cuevas aleatorias por chunk."
#: src/settings_translation_file.cpp
msgid "Maximum limit of random number of small caves per mapchunk."
msgstr ""
+"Límite máximo de número aleatorio de cavernas pequeñas por pedazo de mapa."
#: src/settings_translation_file.cpp
msgid ""
"Maximum liquid resistance. Controls deceleration when entering liquid at\n"
"high speed."
msgstr ""
+"Resistencia de líquidos máxima. Controla la deceleración al entrar en un "
+"líquido a:\n"
+"alta velocidad."
#: src/settings_translation_file.cpp
msgid ""
@@ -5412,18 +5649,24 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Maximum number of blocks that can be queued for loading."
msgstr ""
+"Número máximo de bloques que pueden ser añadidos a la cola para cargarse."
#: src/settings_translation_file.cpp
msgid ""
"Maximum number of blocks to be queued that are to be generated.\n"
"This limit is enforced per player."
msgstr ""
+"Número máximo de bloques para ser añadidos a la cola para ser generados.\n"
+"Este límite se cumple por jugador."
#: src/settings_translation_file.cpp
msgid ""
"Maximum number of blocks to be queued that are to be loaded from file.\n"
"This limit is enforced per player."
msgstr ""
+"Número máximo de bloques para ser añadidos a a cola para cargarse desde un "
+"archivo.\n"
+"Este límite se cumple por jugador."
#: src/settings_translation_file.cpp
msgid ""
@@ -5431,16 +5674,22 @@ msgid ""
"be queued.\n"
"This should be lower than curl_parallel_limit."
msgstr ""
+"Número máximo de descargas simultáneas. Las descargas que sobrepasen este "
+"límite se añadirán a la cola.\n"
+"Esto debería ser menor que curl_parallel_limit."
#: src/settings_translation_file.cpp
msgid "Maximum number of forceloaded mapblocks."
-msgstr ""
+msgstr "Número máximo de bloques de mapa cargados forzosamente."
#: 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 ""
+"Número máximo de bloques de mapa para el cliente para ser mantenidos en la "
+"memoria.\n"
+"Establecer a -1 para cantidad ilimitada."
#: src/settings_translation_file.cpp
msgid ""
@@ -5448,49 +5697,68 @@ msgid ""
"try reducing it, but don't reduce it to a number below double of targeted\n"
"client number."
msgstr ""
+"Número máximo de paquetes enviados por paso de envío. Si tiene una conexión\n"
+"lenta, intente reducirlo, pero no lo reduzca a un número menor al doble del\n"
+"número de cliente objetivo."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Maximum number of players that can be connected simultaneously."
-msgstr "Cantidad de bloques que flotan simultáneamente por cliente."
+msgstr "Número máximo de jugadores que se pueden conectar simultáneamente."
#: src/settings_translation_file.cpp
msgid "Maximum number of recent chat messages to show"
-msgstr ""
+msgstr "Número máximo de mensajes del chat recientes a mostrar"
#: src/settings_translation_file.cpp
msgid "Maximum number of statically stored objects in a block."
-msgstr ""
+msgstr "Número máximo de objetos almacenados estáticamente en un bloque."
#: src/settings_translation_file.cpp
msgid "Maximum objects per block"
-msgstr ""
+msgstr "Objetos máximos por bloque"
#: 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 ""
+"Proporción máxima de la ventana actual a ser usada para la barra de acceso "
+"rápido.\n"
+"Útil si hay algo para ser mostrado a la derecha o a la izquierda de la barra "
+"de acceso rápido."
#: src/settings_translation_file.cpp
msgid "Maximum simultaneous block sends per client"
-msgstr ""
+msgstr "Envíos de bloque simultáneos máximos por cliente"
#: src/settings_translation_file.cpp
msgid "Maximum size of the out chat queue"
-msgstr ""
+msgstr "Tamaño máximo de la cola de salida del chat"
#: src/settings_translation_file.cpp
msgid ""
"Maximum size of the out chat queue.\n"
"0 to disable queueing and -1 to make the queue size unlimited."
msgstr ""
+"Tamaño máximo de la cola del chat externo.\n"
+"0 para desactivar el añadido a la cola y -1 para hacer el tamaño de la cola "
+"ilimitado."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum time a file download (e.g. a mod download) may take, stated in "
+"milliseconds."
+msgstr ""
+"Tiempo máximo que puede tardar la descarga de archivo (p.ej. una descarga de "
+"mod) en milisegundos."
#: src/settings_translation_file.cpp
-msgid "Maximum time in ms a file download (e.g. a mod download) may take."
+msgid ""
+"Maximum time an interactive request (e.g. server list fetch) may take, "
+"stated in milliseconds."
msgstr ""
-"Tiempo máximo en ms que puede demorar una descarga (por ejemplo, la descarga "
-"de un mod)."
+"Tiempo máximo que puede tardar la solicitud interactiva (p.ej. una búsqueda "
+"de lista de servidores) en milisegundos."
#: src/settings_translation_file.cpp
msgid "Maximum users"
@@ -5539,11 +5807,11 @@ msgstr "Ruido 3D que determina la cantidad de mazmorras por chunk."
#: src/settings_translation_file.cpp
msgid "Minimum limit of random number of small caves per mapchunk."
-msgstr ""
+msgstr "Límite mínimo del número aleatorio de cavernas pequeñas por mapchunk."
#: src/settings_translation_file.cpp
msgid "Minimum texture size"
-msgstr ""
+msgstr "Tamaño mínimo de textura"
#: src/settings_translation_file.cpp
#, fuzzy
@@ -5555,7 +5823,7 @@ msgid "Mod channels"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Modifies the size of the hudbar elements."
+msgid "Modifies the size of the HUD elements."
msgstr ""
#: src/settings_translation_file.cpp
@@ -5567,6 +5835,11 @@ msgid "Monospace font size"
msgstr "Tamaño de fuente monoespaciada"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Monospace font size divisible by"
+msgstr "Tamaño de fuente monoespaciada"
+
+#: src/settings_translation_file.cpp
msgid "Mountain height noise"
msgstr ""
@@ -5580,7 +5853,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Mountain zero level"
-msgstr ""
+msgstr "Nivel cero de montañas"
#: src/settings_translation_file.cpp
msgid "Mouse sensitivity"
@@ -5634,7 +5907,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Near plane"
-msgstr ""
+msgstr "Plano cercano"
#: src/settings_translation_file.cpp
msgid "Network"
@@ -5691,7 +5964,7 @@ 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"
+"This is a trade-off between SQLite transaction overhead and\n"
"memory consumption (4096=100MB, as a rule of thumb)."
msgstr ""
@@ -5710,21 +5983,18 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Opaqueness (alpha) of the shadow behind the fallback font, between 0 and 255."
-msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid ""
"Open the pause menu when the window's focus is lost. Does not pause if a "
"formspec is\n"
"open."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Optional override for chat weblink color."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid ""
-"Path of the fallback font.\n"
-"If “freetype†setting is enabled: Must be a TrueType font.\n"
-"If “freetype†setting is disabled: Must be a bitmap or XML vectors font.\n"
+"Path of the fallback font. Must be a TrueType font.\n"
"This font will be used for certain languages or if the default font is "
"unavailable."
msgstr ""
@@ -5747,17 +6017,13 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Path to the default font.\n"
-"If “freetype†setting is enabled: Must be a TrueType font.\n"
-"If “freetype†setting is disabled: Must be a bitmap or XML vectors font.\n"
+"Path to the default font. Must be a TrueType font.\n"
"The fallback font will be used if the font cannot be loaded."
msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Path to the monospace font.\n"
-"If “freetype†setting is enabled: Must be a TrueType font.\n"
-"If “freetype†setting is disabled: Must be a bitmap or XML vectors font.\n"
+"Path to the monospace font. Must be a TrueType font.\n"
"This font is used for e.g. the console and profiler screen."
msgstr ""
@@ -5816,10 +6082,17 @@ msgid "Player versus player"
msgstr "Jugador contra jugador"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Poisson filtering"
+msgstr "Filtrado bilineal"
+
+#: 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 ""
+"Puerto de conectarse (UDP).\n"
+"Nota que el campo de puerto en el menú principal anula esta configuración."
#: src/settings_translation_file.cpp
msgid ""
@@ -5829,7 +6102,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Prevent mods from doing insecure things like running shell commands."
-msgstr ""
+msgstr "Evitar que mods hagan cosas inseguras como ejecutar comandos de shell."
#: src/settings_translation_file.cpp
msgid ""
@@ -5843,7 +6116,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Profiler"
-msgstr ""
+msgstr "Perfilador"
#: src/settings_translation_file.cpp
msgid "Profiler toggle key"
@@ -5860,9 +6133,9 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"Prometheus listener address.\n"
-"If minetest is compiled with ENABLE_PROMETHEUS option enabled,\n"
+"If Minetest is compiled with ENABLE_PROMETHEUS option enabled,\n"
"enable metrics listener for Prometheus on that address.\n"
-"Metrics can be fetch on http://127.0.0.1:30000/metrics"
+"Metrics can be fetched on http://127.0.0.1:30000/metrics"
msgstr ""
#: src/settings_translation_file.cpp
@@ -5882,7 +6155,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Random input"
-msgstr ""
+msgstr "Entrada aleatoria"
#: src/settings_translation_file.cpp
msgid "Range select key"
@@ -5893,17 +6166,16 @@ msgid "Recent Chat Messages"
msgstr ""
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Regular font path"
-msgstr "Ruta de fuentes"
+msgstr "Ruta de fuente regular"
#: src/settings_translation_file.cpp
msgid "Remote media"
-msgstr ""
+msgstr "Medios remotos"
#: src/settings_translation_file.cpp
msgid "Remote port"
-msgstr ""
+msgstr "Puerto remoto"
#: src/settings_translation_file.cpp
msgid ""
@@ -5913,7 +6185,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Replaces the default main menu with a custom one."
-msgstr ""
+msgstr "Sustituye el menú principal por defecto con uno personalizado."
#: src/settings_translation_file.cpp
#, fuzzy
@@ -6177,6 +6449,35 @@ msgid "Set the maximum character length of a chat message sent by clients."
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Set the shadow strength.\n"
+"Lower value means lighter shadows, higher value means darker shadows."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set the soft shadow radius size.\n"
+"Lower values mean sharper shadows, bigger values mean softer shadows.\n"
+"Minimum value: 1.0; maximum value: 10.0"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set the tilt of Sun/Moon orbit in degrees.\n"
+"Value of 0 means no tilt / vertical orbit.\n"
+"Minimum value: 0.0; maximum value: 60.0"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid ""
+"Set to true to enable Shadow Mapping.\n"
+"Requires shaders to be enabled."
+msgstr ""
+"Habilita mapeado de oclusión de paralaje.\n"
+"Requiere habilitar sombreadores."
+
+#: src/settings_translation_file.cpp
#, fuzzy
msgid ""
"Set to true to enable waving leaves.\n"
@@ -6204,6 +6505,13 @@ msgstr ""
"Requiere habilitar sombreadores."
#: src/settings_translation_file.cpp
+msgid ""
+"Sets shadow texture quality to 32 bits.\n"
+"On false, 16 bits texture will be used.\n"
+"This can cause much more artifacts in the shadow."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Shader path"
msgstr "Ruta de sombreador"
@@ -6217,17 +6525,31 @@ msgstr ""
#: src/settings_translation_file.cpp
#, fuzzy
+msgid "Shadow filter quality"
+msgstr "Calidad de captura de pantalla"
+
+#: src/settings_translation_file.cpp
+msgid "Shadow map max distance in nodes to render shadows"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Shadow map texture in 32 bits"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Shadow map texture size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
"Shadow offset (in pixels) of the default font. If 0, then shadow will not be "
"drawn."
msgstr "Compensado de sombra de fuente, si es 0 no se dibujará la sombra."
#: src/settings_translation_file.cpp
-#, fuzzy
-msgid ""
-"Shadow offset (in pixels) of the fallback font. If 0, then shadow will not "
-"be drawn."
-msgstr "Compensado de sombra de fuente, si es 0 no se dibujará la sombra."
+msgid "Shadow strength"
+msgstr ""
#: src/settings_translation_file.cpp
msgid "Shape of the minimap. Enabled = round, disabled = square."
@@ -6249,7 +6571,7 @@ msgstr ""
#: src/settings_translation_file.cpp
#, fuzzy
-msgid "Show nametag backgrounds by default"
+msgid "Show name tag backgrounds by default"
msgstr "Fuente en negrita por defecto"
#: src/settings_translation_file.cpp
@@ -6274,6 +6596,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Sky Body Orbit Tilt"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Slice w"
msgstr ""
@@ -6329,16 +6655,13 @@ msgid "Sneaking speed, in nodes per second."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Sound"
-msgstr "Sonido"
-
-#: src/settings_translation_file.cpp
-msgid "Special key"
-msgstr "Tecla especial"
+#, fuzzy
+msgid "Soft shadow radius"
+msgstr "Alfa de sombra de la fuente"
#: src/settings_translation_file.cpp
-msgid "Special key for climbing/descending"
-msgstr ""
+msgid "Sound"
+msgstr "Sonido"
#: src/settings_translation_file.cpp
msgid ""
@@ -6357,6 +6680,14 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Spread a complete update of shadow map over given amount of frames.\n"
+"Higher values might make shadows laggy, lower values\n"
+"will consume more resources.\n"
+"Minimum value: 1; maximum value: 16"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Spread of light curve boost range.\n"
"Controls the width of the range to be boosted.\n"
"Standard deviation of the light curve boost Gaussian."
@@ -6464,6 +6795,13 @@ msgstr "Ruta de la textura"
#: src/settings_translation_file.cpp
msgid ""
+"Texture size to render the shadow map on.\n"
+"This must be a power of two.\n"
+"Bigger numbers create better shadows but it is also more expensive."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Textures on a node may be aligned either to the node or to the world.\n"
"The former mode suits better things like machines, furniture, etc., while\n"
"the latter makes stairs and microblocks fit surroundings better.\n"
@@ -6477,7 +6815,7 @@ msgid "The URL for the content repository"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "The deadzone of the joystick"
+msgid "The dead zone of the joystick"
msgstr ""
#: src/settings_translation_file.cpp
@@ -6535,7 +6873,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"The rendering back-end for Irrlicht.\n"
+"The rendering back-end.\n"
"A restart is required after changing this.\n"
"Note: On Android, stick with OGLES1 if unsure! App may fail to start "
"otherwise.\n"
@@ -6546,7 +6884,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"The sensitivity of the joystick axes for moving the\n"
-"ingame view frustum around."
+"in-game view frustum around."
msgstr ""
#: src/settings_translation_file.cpp
@@ -6642,6 +6980,10 @@ msgid "Touch screen threshold"
msgstr "Límite de ruido de playa"
#: src/settings_translation_file.cpp
+msgid "Tradeoffs for performance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Trees noise"
msgstr ""
@@ -6711,7 +7053,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Use mip mapping to scale textures. May slightly increase performance,\n"
+"Use mipmapping to scale textures. May slightly increase performance,\n"
"especially when using a high resolution texture pack.\n"
"Gamma correct downscaling is not supported."
msgstr ""
@@ -6825,7 +7167,7 @@ msgid "Viewing range"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Virtual joystick triggers aux button"
+msgid "Virtual joystick triggers Aux1 button"
msgstr ""
#: src/settings_translation_file.cpp
@@ -6903,6 +7245,10 @@ msgid "Waving plants"
msgstr "Movimiento de plantas"
#: src/settings_translation_file.cpp
+msgid "Weblink color"
+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"
@@ -6923,23 +7269,15 @@ msgid ""
"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.\n"
+"memory. Powers of 2 are recommended. This setting is ONLY applied if\n"
+"bilinear/trilinear/anisotropic filtering is enabled.\n"
"This is also used as the base node texture size for world-aligned\n"
"texture autoscaling."
msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Whether FreeType fonts are used, requires FreeType support to be compiled "
-"in.\n"
-"If disabled, bitmap and XML vectors fonts are used instead."
-msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid ""
-"Whether nametag backgrounds should be shown by default.\n"
+"Whether name tag backgrounds should be shown by default.\n"
"Mods may still set a background."
msgstr ""
@@ -6981,8 +7319,9 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Width component of the initial window size."
-msgstr ""
+#, fuzzy
+msgid "Width component of the initial window size. Ignored in fullscreen mode."
+msgstr "Componente de altura del tamaño inicial de la ventana."
#: src/settings_translation_file.cpp
msgid "Width of the selection box lines around nodes."
@@ -7066,34 +7405,23 @@ msgid "Y-level of seabed."
msgstr ""
#: src/settings_translation_file.cpp
-msgid ""
-"ZLib compression level to use when saving mapblocks to disk.\n"
-"-1 - Zlib's default compression level\n"
-"0 - no compresson, fastest\n"
-"9 - best compression, slowest\n"
-"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)"
-msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid ""
-"ZLib compression level to use when sending mapblocks to the client.\n"
-"-1 - Zlib's default compression level\n"
-"0 - no compresson, fastest\n"
-"9 - best compression, slowest\n"
-"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "cURL file download timeout"
msgstr "Tiempo de espera de descarga por cURL"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "cURL interactive timeout"
+msgstr "Tiempo de espera de cURL"
+
+#: src/settings_translation_file.cpp
msgid "cURL parallel limit"
msgstr "Límite de cURL en paralelo"
-#: src/settings_translation_file.cpp
-msgid "cURL timeout"
-msgstr "Tiempo de espera de cURL"
+#~ msgid "- Creative Mode: "
+#~ msgstr "- Modo creativo: "
+
+#~ msgid "- Damage: "
+#~ msgstr "- Daño: "
#~ msgid ""
#~ "0 = parallax occlusion with slope information (faster).\n"
@@ -7102,6 +7430,9 @@ msgstr "Tiempo de espera de cURL"
#~ "0 = oclusión de paralaje con información de inclinación (más rápido).\n"
#~ "1 = mapa de relieve (más lento, más preciso)."
+#~ msgid "Address / Port"
+#~ msgstr "Dirección / puerto"
+
#~ msgid ""
#~ "Adjust the gamma encoding for the light tables. Higher numbers are "
#~ "brighter.\n"
@@ -7122,6 +7453,11 @@ msgstr "Tiempo de espera de cURL"
#~ msgid "Back"
#~ msgstr "Atrás"
+#~ msgid "Bits per pixel (aka color depth) in fullscreen mode."
+#~ msgstr ""
+#~ "Bits por píxel (también conocido como profundidad de color) en modo de "
+#~ "pantalla completa."
+
#~ msgid "Bump Mapping"
#~ msgstr "Mapeado de relieve"
@@ -7158,14 +7494,27 @@ msgstr "Tiempo de espera de cURL"
#~ msgstr ""
#~ "Controla el ancho de los túneles, un valor menor crea túneles más anchos."
+#~ msgid "Credits"
+#~ msgstr "Créditos"
+
#~ msgid "Crosshair color (R,G,B)."
#~ msgstr "Color de la cruz (R,G,B)."
+#~ msgid "Damage enabled"
+#~ msgstr "Daño activado"
+
#, fuzzy
#~ msgid "Darkness sharpness"
#~ msgstr "Agudeza de la obscuridad"
#~ msgid ""
+#~ "Default timeout for cURL, stated in milliseconds.\n"
+#~ "Only has an effect if compiled with cURL."
+#~ msgstr ""
+#~ "Tiempo de espera predeterminado para cURL, en milisegundos.\n"
+#~ "Sólo tiene efecto si está compilado con cURL."
+
+#~ msgid ""
#~ "Defines areas of floatland smooth terrain.\n"
#~ "Smooth floatlands occur when noise > 0."
#~ msgstr ""
@@ -7225,6 +7574,15 @@ msgstr "Tiempo de espera de cURL"
#~ msgid "FPS in pause menu"
#~ msgstr "FPS (cuadros/s) en el menú de pausa"
+#~ msgid "Fallback font shadow"
+#~ msgstr "Sombra de la fuente de reserva"
+
+#~ msgid "Fallback font shadow alpha"
+#~ msgstr "Alfa de la sombra de la fuente de reserva"
+
+#~ msgid "Fallback font size"
+#~ msgstr "Tamaño de la fuente de reserva"
+
#~ msgid "Floatland base height noise"
#~ msgstr "Ruido de altura base para tierra flotante"
@@ -7234,6 +7592,15 @@ msgstr "Tiempo de espera de cURL"
#~ msgid "Font shadow alpha (opaqueness, between 0 and 255)."
#~ msgstr "Alfa de sombra de fuentes (opacidad, entre 0 y 255)."
+#~ msgid "Font size of the fallback font in point (pt)."
+#~ msgstr "Tamaño de la fuente de reserva en punto (pt)."
+
+#~ msgid "FreeType fonts"
+#~ msgstr "Fuentes FreeType"
+
+#~ msgid "Full screen BPP"
+#~ msgstr "Profundidad de color en pantalla completa"
+
#~ msgid "Gamma"
#~ msgstr "Gamma"
@@ -7243,9 +7610,15 @@ msgstr "Tiempo de espera de cURL"
#~ msgid "Generate normalmaps"
#~ msgstr "Generar mapas normales"
+#~ msgid "High-precision FPU"
+#~ msgstr "Alta-precisión FPU"
+
#~ msgid "IPv6 support."
#~ msgstr "soporte IPv6."
+#~ msgid "Install: file: \"$1\""
+#~ msgstr "Instalar: Archivo: \"$1\""
+
#, fuzzy
#~ msgid "Lava depth"
#~ msgstr "Características de la Lava"
@@ -7256,6 +7629,10 @@ msgstr "Tiempo de espera de cURL"
#~ msgid "Main menu style"
#~ msgstr "Estilo del menú principal"
+#~ msgid "Makes DirectX work with LuaJIT. Disable if it causes troubles."
+#~ msgstr ""
+#~ "Hace que DirectX funcione con LuaJIT. Desactivar si ocasiona problemas."
+
#~ msgid "Minimap in radar mode, Zoom x2"
#~ msgstr "Minimapa en modo radar, Zoom x2"
@@ -7268,6 +7645,9 @@ msgstr "Tiempo de espera de cURL"
#~ msgid "Minimap in surface mode, Zoom x4"
#~ msgstr "Minimapa en modo superficie, Zoom x4"
+#~ msgid "Name / Password"
+#~ msgstr "Nombre / contraseña"
+
#~ msgid "Name/Password"
#~ msgstr "Nombre / contraseña"
@@ -7303,18 +7683,37 @@ msgstr "Tiempo de espera de cURL"
#~ msgid "Path to save screenshots at."
#~ msgstr "Ruta para guardar las capturas de pantalla."
+#~ msgid "PvP enabled"
+#~ msgstr "PvP activado"
+
#~ msgid "Reset singleplayer world"
#~ msgstr "Reiniciar mundo de un jugador"
#~ msgid "Select Package File:"
#~ msgstr "Seleccionar el archivo del paquete:"
+#, fuzzy
+#~ msgid ""
+#~ "Shadow offset (in pixels) of the fallback font. If 0, then shadow will "
+#~ "not be drawn."
+#~ msgstr "Compensado de sombra de fuente, si es 0 no se dibujará la sombra."
+
+#~ msgid "Special"
+#~ msgstr "Especial"
+
+#~ msgid "Special key"
+#~ msgstr "Tecla especial"
+
#~ msgid "Start Singleplayer"
#~ msgstr "Comenzar un jugador"
#~ msgid "Strength of generated normalmaps."
#~ msgstr "Fuerza de los mapas normales generados."
+#~ msgid "To enable shaders the OpenGL driver needs to be used."
+#~ msgstr ""
+#~ "Para habilitar los sombreadores debe utilizar el controlador OpenGL."
+
#~ msgid "Toggle Cinematic"
#~ msgstr "Activar cinemático"
@@ -7329,3 +7728,9 @@ msgstr "Tiempo de espera de cURL"
#~ msgid "Yes"
#~ msgstr "Sí"
+
+#~ msgid "You died."
+#~ msgstr "Has muerto."
+
+#~ msgid "needs_fallback_font"
+#~ msgstr "no"
diff --git a/po/et/minetest.po b/po/et/minetest.po
index 1b9440046..8031c9451 100644
--- a/po/et/minetest.po
+++ b/po/et/minetest.po
@@ -2,9 +2,9 @@ msgid ""
msgstr ""
"Project-Id-Version: Estonian (Minetest)\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-02-23 19:03+0100\n"
-"PO-Revision-Date: 2021-03-02 15:50+0000\n"
-"Last-Translator: Ayes <andris.sass@gmail.com>\n"
+"POT-Creation-Date: 2022-01-25 23:19+0100\n"
+"PO-Revision-Date: 2021-06-29 10:33+0000\n"
+"Last-Translator: Janar Leas <janarleas+ubuntuone@googlemail.com>\n"
"Language-Team: Estonian <https://hosted.weblate.org/projects/minetest/"
"minetest/et/>\n"
"Language: et\n"
@@ -12,7 +12,43 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 4.5\n"
+"X-Generator: Weblate 4.7.1-dev\n"
+
+#: builtin/client/chatcommands.lua
+msgid "Clear the out chat queue"
+msgstr ""
+
+#: builtin/client/chatcommands.lua
+msgid "Empty command."
+msgstr "Tühi käsk."
+
+#: builtin/client/chatcommands.lua
+msgid "Exit to main menu"
+msgstr "Välju menüüsse"
+
+#: builtin/client/chatcommands.lua
+msgid "Invalid command: "
+msgstr "Väär käsk: "
+
+#: builtin/client/chatcommands.lua
+msgid "Issued command: "
+msgstr "Anti käsklus: "
+
+#: builtin/client/chatcommands.lua
+msgid "List online players"
+msgstr "Võrgus mängijate loend"
+
+#: builtin/client/chatcommands.lua
+msgid "Online players: "
+msgstr "Mängijaid võrgus: "
+
+#: builtin/client/chatcommands.lua
+msgid "The out chat queue is now empty."
+msgstr ""
+
+#: builtin/client/chatcommands.lua
+msgid "This command is disabled by server."
+msgstr "Võõrustaja piiras selle käsu kasutuse."
#: builtin/client/death_formspec.lua src/client/game.cpp
msgid "Respawn"
@@ -22,11 +58,41 @@ msgstr "Ärka ellu"
msgid "You died"
msgstr "Said surma"
+#: builtin/common/chatcommands.lua
+msgid "Available commands:"
+msgstr "Võimalikud käsud:"
+
+#: builtin/common/chatcommands.lua
+msgid "Available commands: "
+msgstr "Võimalikud käsud: "
+
+#: builtin/common/chatcommands.lua
+msgid "Command not available: "
+msgstr "Käsk pole saadaval: "
+
+#: builtin/common/chatcommands.lua
+msgid "Get help for commands"
+msgstr "Leia abi käskude kohta"
+
+#: builtin/common/chatcommands.lua
+msgid ""
+"Use '.help <cmd>' to get more information, or '.help all' to list everything."
+msgstr "'.help <käsk>' jagab rohkem teadmisi, ning '.help all' loetleb kõik."
+
+#: builtin/common/chatcommands.lua
+msgid "[all | <cmd>]"
+msgstr "[all | <käsk>]"
+
#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp
msgid "OK"
msgstr "Valmis"
#: builtin/fstk/ui.lua
+#, fuzzy
+msgid "<none available>"
+msgstr "Käsk pole saadaval: "
+
+#: builtin/fstk/ui.lua
msgid "An error occurred in a Lua script:"
msgstr "Lua skriptis ilmnes viga:"
@@ -157,17 +223,19 @@ msgstr "\"$1\" on juba olemas. Kas sa tahad seda üle kirjutada?"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "$1 and $2 dependencies will be installed."
-msgstr ""
+msgstr "Paigaldatakse sõltuvused $1 ja $2."
#: builtin/mainmenu/dlg_contentstore.lua
msgid "$1 by $2"
-msgstr ""
+msgstr "$1 $2 poolt"
#: builtin/mainmenu/dlg_contentstore.lua
msgid ""
"$1 downloading,\n"
"$2 queued"
msgstr ""
+"$1 allalaadimisel,\n"
+"$2 ootel"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "$1 downloading..."
@@ -175,7 +243,7 @@ msgstr "$1 allalaadimine..."
#: builtin/mainmenu/dlg_contentstore.lua
msgid "$1 required dependencies could not be found."
-msgstr ""
+msgstr "$1 vajaliku sõltuvust polnud leida."
#: builtin/mainmenu/dlg_contentstore.lua
msgid "$1 will be installed, and $2 dependencies will be skipped."
@@ -223,9 +291,13 @@ msgid "Install $1"
msgstr "Paigalda $1"
#: builtin/mainmenu/dlg_contentstore.lua
-#, fuzzy
msgid "Install missing dependencies"
-msgstr "Paigalda valikulised sõltuvused"
+msgstr "Paigalda puuduvad sõltuvused"
+
+#: builtin/mainmenu/dlg_contentstore.lua
+#, fuzzy
+msgid "Install: Unsupported file type or broken archive"
+msgstr "Paigaldus: Toetamata failitüüp \"$1\" või katkine arhiiv"
#: builtin/mainmenu/dlg_contentstore.lua
#: builtin/mainmenu/dlg_settings_advanced.lua
@@ -245,7 +317,6 @@ msgid "No updates"
msgstr "Värskendusi pole"
#: builtin/mainmenu/dlg_contentstore.lua
-#, fuzzy
msgid "Not found"
msgstr "Ei leitud"
@@ -259,7 +330,7 @@ msgstr "Palun tee kindlaks et põhi mäng on õige."
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Queued"
-msgstr ""
+msgstr "Ootel"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Texture packs"
@@ -532,7 +603,7 @@ msgstr "< Tagasi lehele „Seaded“"
msgid "Browse"
msgstr "Sirvi"
-#: builtin/mainmenu/dlg_settings_advanced.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_settings.lua
msgid "Disabled"
msgstr "Keelatud"
@@ -557,7 +628,8 @@ msgid "Offset"
msgstr "Nihe"
#: builtin/mainmenu/dlg_settings_advanced.lua
-msgid "Persistance"
+#, fuzzy
+msgid "Persistence"
msgstr "Püsivus"
#: builtin/mainmenu/dlg_settings_advanced.lua
@@ -576,7 +648,7 @@ msgstr "Taasta vaikeväärtus"
msgid "Scale"
msgstr "Ulatus"
-#: builtin/mainmenu/dlg_settings_advanced.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_online.lua
msgid "Search"
msgstr "Otsi"
@@ -669,14 +741,6 @@ msgstr ""
"Paigalda mod: Sobiva katalooginime leidmine ebaõnnestus mod-komplektile $1"
#: builtin/mainmenu/pkgmgr.lua
-msgid "Install: Unsupported file type \"$1\" or broken archive"
-msgstr "Paigaldus: Toetamata failitüüp \"$1\" või katkine arhiiv"
-
-#: builtin/mainmenu/pkgmgr.lua
-msgid "Install: file: \"$1\""
-msgstr "Paigaldus: fail: \"$1\""
-
-#: builtin/mainmenu/pkgmgr.lua
msgid "Unable to find a valid mod or modpack"
msgstr "Ei leitud sobivat mod-i ega mod-komplekti"
@@ -710,6 +774,42 @@ msgstr ""
"Proovi lubada uuesti avalike serverite loend ja kontrolli oma Interneti "
"ühendust."
+#: builtin/mainmenu/tab_about.lua
+msgid "About"
+msgstr "Teavet"
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Active Contributors"
+msgstr "Tegevad panustajad"
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Active renderer:"
+msgstr ""
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Core Developers"
+msgstr "Põhi arendajad"
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Open User Data Directory"
+msgstr "Avalik Kasutaja Andmete Kaust"
+
+#: builtin/mainmenu/tab_about.lua
+msgid ""
+"Opens the directory that contains user-provided worlds, games, mods,\n"
+"and texture packs in a file manager / explorer."
+msgstr ""
+"Kasutaja poolsete maailmate, mängude, mod-de ning tekstuuri pakide\n"
+"kausta avamine faili-halduris."
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Previous Contributors"
+msgstr "Eelnevad panustajad"
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Previous Core Developers"
+msgstr "Eelnevad põhi-arendajad"
+
#: builtin/mainmenu/tab_content.lua
msgid "Browse online content"
msgstr "Sirvi veebist sisu"
@@ -750,36 +850,6 @@ msgstr "Eemalda pakett"
msgid "Use Texture Pack"
msgstr "Vali tekstuurikomplekt"
-#: builtin/mainmenu/tab_credits.lua
-msgid "Active Contributors"
-msgstr "Tegevad panustajad"
-
-#: builtin/mainmenu/tab_credits.lua
-msgid "Core Developers"
-msgstr "Põhi arendajad"
-
-#: builtin/mainmenu/tab_credits.lua
-msgid "Credits"
-msgstr "Tegijad"
-
-#: builtin/mainmenu/tab_credits.lua
-msgid "Open User Data Directory"
-msgstr "Avalik Kasutaja Andmete Kaust"
-
-#: builtin/mainmenu/tab_credits.lua
-msgid ""
-"Opens the directory that contains user-provided worlds, games, mods,\n"
-"and texture packs in a file manager / explorer."
-msgstr ""
-
-#: builtin/mainmenu/tab_credits.lua
-msgid "Previous Contributors"
-msgstr "Eelnevad panustajad"
-
-#: builtin/mainmenu/tab_credits.lua
-msgid "Previous Core Developers"
-msgstr "Eelnevad põhi-arendajad"
-
#: builtin/mainmenu/tab_local.lua
msgid "Announce Server"
msgstr "Võõrustamise kuulutamine"
@@ -808,7 +878,7 @@ msgstr "Majuta külastajatele"
msgid "Install games from ContentDB"
msgstr "Lisa mänge sisuvaramust"
-#: builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
msgid "Name"
msgstr "Nimi"
@@ -820,16 +890,15 @@ msgstr "Uus"
msgid "No world created or selected!"
msgstr "Pole valitud ega loodud ühtegi maailma!"
-#: builtin/mainmenu/tab_local.lua
-#, fuzzy
+#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
msgid "Password"
-msgstr "Uus parool"
+msgstr "Salasõna"
#: builtin/mainmenu/tab_local.lua
msgid "Play Game"
msgstr "Mängi"
-#: builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
msgid "Port"
msgstr "Port"
@@ -850,8 +919,12 @@ msgid "Start Game"
msgstr "Alusta mängu"
#: builtin/mainmenu/tab_online.lua
-msgid "Address / Port"
-msgstr "Aadress / kanal"
+msgid "Address"
+msgstr "Aadress"
+
+#: builtin/mainmenu/tab_online.lua src/client/keycode.cpp
+msgid "Clear"
+msgstr "Tühjenda"
#: builtin/mainmenu/tab_online.lua
msgid "Connect"
@@ -861,34 +934,42 @@ msgstr "Ühine"
msgid "Creative mode"
msgstr "Looja"
+#. ~ PvP = Player versus Player
#: builtin/mainmenu/tab_online.lua
-msgid "Damage enabled"
-msgstr "Ellujääja"
+msgid "Damage / PvP"
+msgstr "Vigastused mängijatelt"
#: builtin/mainmenu/tab_online.lua
msgid "Del. Favorite"
msgstr "Pole lemmik"
#: builtin/mainmenu/tab_online.lua
-msgid "Favorite"
-msgstr "On lemmik"
+msgid "Favorites"
+msgstr "Lemmikud"
#: builtin/mainmenu/tab_online.lua
-msgid "Join Game"
-msgstr "Ühine"
+msgid "Incompatible Servers"
+msgstr "Ühildumatud Võõrustajad"
#: builtin/mainmenu/tab_online.lua
-msgid "Name / Password"
-msgstr "Nimi / salasõna"
+msgid "Join Game"
+msgstr "Ühine"
#: builtin/mainmenu/tab_online.lua
msgid "Ping"
msgstr "Viivitus"
-#. ~ PvP = Player versus Player
#: builtin/mainmenu/tab_online.lua
-msgid "PvP enabled"
-msgstr "Vaenulikus lubatud"
+msgid "Public Servers"
+msgstr "Avalikud võõrustajad"
+
+#: builtin/mainmenu/tab_online.lua
+msgid "Refresh"
+msgstr "Värskenda"
+
+#: builtin/mainmenu/tab_online.lua
+msgid "Server Description"
+msgstr "Võõrustaja kirjeldus"
#: builtin/mainmenu/tab_settings.lua
msgid "2x"
@@ -930,11 +1011,31 @@ msgstr "Vaheta klahve"
msgid "Connected Glass"
msgstr "Ühendatud klaas"
+#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
+msgid "Dynamic shadows"
+msgstr "Elavad varjud"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Dynamic shadows: "
+msgstr "Elavad varjud: "
+
#: builtin/mainmenu/tab_settings.lua
msgid "Fancy Leaves"
msgstr "Uhked lehed"
#: builtin/mainmenu/tab_settings.lua
+msgid "High"
+msgstr "Kõrge"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Low"
+msgstr "Madal"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Medium"
+msgstr "Keskmine"
+
+#: builtin/mainmenu/tab_settings.lua
msgid "Mipmap"
msgstr "KaugVaatEsemeKaart"
@@ -987,9 +1088,8 @@ msgid "Shaders"
msgstr "Varjutajad"
#: builtin/mainmenu/tab_settings.lua
-#, fuzzy
msgid "Shaders (experimental)"
-msgstr "Shaderid (eksperimentaalsed)"
+msgstr "Shaderid (katselised)"
#: builtin/mainmenu/tab_settings.lua
msgid "Shaders (unavailable)"
@@ -1007,10 +1107,6 @@ msgstr "Sujuv valgustus"
msgid "Texturing:"
msgstr "Tekstureerimine:"
-#: builtin/mainmenu/tab_settings.lua
-msgid "To enable shaders the OpenGL driver needs to be used."
-msgstr "Aktiveerimiseks varjud, nad vajavad OpenGL draiver."
-
#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
msgid "Tone Mapping"
msgstr "Tooni kaardistamine"
@@ -1024,6 +1120,14 @@ msgid "Trilinear Filter"
msgstr "Tri-lineaar filtreerimine"
#: builtin/mainmenu/tab_settings.lua
+msgid "Ultra High"
+msgstr "Ülikõrge"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Very Low"
+msgstr "Vägamadal"
+
+#: builtin/mainmenu/tab_settings.lua
msgid "Waving Leaves"
msgstr "Lehvivad lehed"
@@ -1035,7 +1139,7 @@ msgstr "Lainetavad vedelikud"
msgid "Waving Plants"
msgstr "Lehvivad taimed"
-#: src/client/client.cpp
+#: src/client/client.cpp src/client/game.cpp
msgid "Connection timed out."
msgstr "Ühendus aegus."
@@ -1064,7 +1168,8 @@ msgid "Connection error (timed out?)"
msgstr "Ühenduse viga (Aeg otsas?)"
#: src/client/clientlauncher.cpp
-msgid "Could not find or load game \""
+#, fuzzy
+msgid "Could not find or load game: "
msgstr "Ei leia ega suuda jätkata mängu \""
#: src/client/clientlauncher.cpp
@@ -1095,18 +1200,6 @@ msgstr "Salasõnafaili avamine ebaõnnestus: "
msgid "Provided world path doesn't exist: "
msgstr "Maailma failiteed pole olemas: "
-#. ~ DO NOT TRANSLATE THIS LITERALLY!
-#. This is a special string. Put either "no" or "yes"
-#. into the translation field (literally).
-#. Choose "yes" if the language requires use of the fallback
-#. font, "no" otherwise.
-#. The fallback font is (normally) required for languages with
-#. non-Latin script, like Chinese.
-#. When in doubt, test your translation.
-#: src/client/fontengine.cpp
-msgid "needs_fallback_font"
-msgstr "no"
-
#: src/client/game.cpp
msgid ""
"\n"
@@ -1120,14 +1213,6 @@ msgid "- Address: "
msgstr "- Aadress: "
#: src/client/game.cpp
-msgid "- Creative Mode: "
-msgstr "- Kujunduslik mängumood: "
-
-#: src/client/game.cpp
-msgid "- Damage: "
-msgstr "- Valu: "
-
-#: src/client/game.cpp
msgid "- Mode: "
msgstr "- Režiim: "
@@ -1149,6 +1234,16 @@ msgid "- Server Name: "
msgstr "- Serveri nimi: "
#: src/client/game.cpp
+#, fuzzy
+msgid "A serialization error occurred:"
+msgstr "Ilmnes viga:"
+
+#: src/client/game.cpp
+#, c-format
+msgid "Access denied. Reason: %s"
+msgstr ""
+
+#: src/client/game.cpp
msgid "Automatic forward disabled"
msgstr "Automaatne edastus keelatud"
@@ -1157,6 +1252,23 @@ msgid "Automatic forward enabled"
msgstr "Automaatne edastus lubatud"
#: src/client/game.cpp
+#, fuzzy
+msgid "Block bounds hidden"
+msgstr "Klotsi piirid"
+
+#: src/client/game.cpp
+msgid "Block bounds shown for all blocks"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Block bounds shown for current block"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Block bounds shown for nearby blocks"
+msgstr ""
+
+#: src/client/game.cpp
msgid "Camera update disabled"
msgstr "Kaamera värskendamine on keelatud"
@@ -1165,6 +1277,10 @@ msgid "Camera update enabled"
msgstr "Kaamera värskendamine on lubatud"
#: src/client/game.cpp
+msgid "Can't show block bounds (need 'basic_debug' privilege)"
+msgstr ""
+
+#: src/client/game.cpp
msgid "Change Password"
msgstr "Vaheta parooli"
@@ -1177,6 +1293,10 @@ msgid "Cinematic mode enabled"
msgstr "Filmirežiim on lubatud"
#: src/client/game.cpp
+msgid "Client disconnected"
+msgstr ""
+
+#: src/client/game.cpp
msgid "Client side scripting is disabled"
msgstr "Kliendipoolne skriptimine on keelatud"
@@ -1185,6 +1305,10 @@ msgid "Connecting to server..."
msgstr "Serveriga ühenduse loomine..."
#: src/client/game.cpp
+msgid "Connection failed for unknown reason"
+msgstr ""
+
+#: src/client/game.cpp
msgid "Continue"
msgstr "Jätka"
@@ -1222,6 +1346,11 @@ msgstr ""
"- %s: vestlus\n"
#: src/client/game.cpp
+#, c-format
+msgid "Couldn't resolve address: %s"
+msgstr ""
+
+#: src/client/game.cpp
msgid "Creating client..."
msgstr "Kliendi loomine..."
@@ -1334,7 +1463,6 @@ msgid "Item definitions..."
msgstr "Esemete määratlused..."
#: src/client/game.cpp
-#, fuzzy
msgid "KiB/s"
msgstr "KiB/s"
@@ -1343,7 +1471,6 @@ msgid "Media..."
msgstr "Meedia..."
#: src/client/game.cpp
-#, fuzzy
msgid "MiB/s"
msgstr "MiB/s"
@@ -1352,6 +1479,10 @@ msgid "Minimap currently disabled by game or mod"
msgstr "Pisikaardi keelab hetkel mäng või MOD"
#: src/client/game.cpp
+msgid "Multiplayer"
+msgstr "Hulgimängija"
+
+#: src/client/game.cpp
msgid "Noclip mode disabled"
msgstr "Haakumatus keelatud"
@@ -1385,7 +1516,7 @@ msgstr ""
#: src/client/game.cpp
msgid "Profiler graph shown"
-msgstr ""
+msgstr "Koormushinnangu kuvamine"
#: src/client/game.cpp
msgid "Remote server"
@@ -1425,6 +1556,21 @@ msgstr "Heli taastatud"
#: src/client/game.cpp
#, c-format
+msgid "The server is probably running a different version of %s."
+msgstr ""
+
+#: src/client/game.cpp
+#, c-format
+msgid "Unable to connect to %s because IPv6 is disabled"
+msgstr ""
+
+#: src/client/game.cpp
+#, c-format
+msgid "Unable to listen on %s because IPv6 is disabled"
+msgstr ""
+
+#: src/client/game.cpp
+#, c-format
msgid "Viewing range changed to %d"
msgstr "Vaate kaugus on nüüd: %d"
@@ -1439,13 +1585,13 @@ msgid "Viewing range is at minimum: %d"
msgstr "Vaate kaugus on vähim võimalik: %d"
#: src/client/game.cpp
-#, c-format, fuzzy
+#, c-format
msgid "Volume changed to %d%%"
-msgstr "helitugevus muutetud %d%%-ks"
+msgstr "Helitugevus muutus %d%%"
#: src/client/game.cpp
msgid "Wireframe shown"
-msgstr ""
+msgstr "Raamvõrgustiku paljastus"
#: src/client/game.cpp
msgid "Zoom currently disabled by game or mod"
@@ -1461,24 +1607,24 @@ msgstr "Vestlus peidetud"
#: src/client/gameui.cpp
msgid "Chat shown"
-msgstr ""
+msgstr "Vestluse näitamine"
#: src/client/gameui.cpp
msgid "HUD hidden"
-msgstr ""
+msgstr "Liidese peitmine"
#: src/client/gameui.cpp
msgid "HUD shown"
-msgstr ""
+msgstr "Liidese näitamine"
#: src/client/gameui.cpp
msgid "Profiler hidden"
-msgstr ""
+msgstr "Koormushindaja peitmine"
#: src/client/gameui.cpp
#, c-format
msgid "Profiler shown (page %d of %d)"
-msgstr ""
+msgstr "Koormushinnang (%d leht %d-st)"
#: src/client/keycode.cpp
msgid "Apps"
@@ -1493,10 +1639,6 @@ msgid "Caps Lock"
msgstr "Suurtähelukk"
#: src/client/keycode.cpp
-msgid "Clear"
-msgstr "Tühjenda"
-
-#: src/client/keycode.cpp
msgid "Control"
msgstr "CTRL"
@@ -1651,11 +1793,11 @@ msgstr "OEM Tühi"
#: src/client/keycode.cpp
msgid "Page down"
-msgstr ""
+msgstr "Lehekülg alla"
#: src/client/keycode.cpp
msgid "Page up"
-msgstr ""
+msgstr "Lehekülg üles"
#: src/client/keycode.cpp
msgid "Pause"
@@ -1758,9 +1900,17 @@ msgid "Minimap in surface mode, Zoom x%d"
msgstr "Pinnakaart, Suurendus ×%d"
#: src/client/minimap.cpp
-#, fuzzy
msgid "Minimap in texture mode"
-msgstr "Pinnakaart, Suurendus ×1"
+msgstr "Pisikaart tekstuur-laadis"
+
+#: src/gui/guiChatConsole.cpp
+#, fuzzy
+msgid "Failed to open webpage"
+msgstr "$1 allalaadimine nurjus"
+
+#: src/gui/guiChatConsole.cpp
+msgid "Opening webpage"
+msgstr ""
#: src/gui/guiConfirmRegistration.cpp src/gui/guiPasswordChange.cpp
msgid "Passwords do not match!"
@@ -1779,14 +1929,19 @@ msgid ""
"Please retype your password and click 'Register and Join' to confirm account "
"creation, or click 'Cancel' to abort."
msgstr ""
+"Oled esmakordselt liitumas selle võõrustajaga, kandes nime \"%s\".\n"
+"Kui jätkad, siis luuakse sellele võõrustajale uus konto sinu volitus "
+"andmetega.\n"
+"Trüki salasõna uuesti ning klõpsa 'Registreeru ja ühine' konto loomisega "
+"nõustumiseks, või 'Loobu' keeldumiseks."
#: src/gui/guiFormSpecMenu.cpp
msgid "Proceed"
msgstr "Jätka"
#: src/gui/guiKeyChangeMenu.cpp
-msgid "\"Special\" = climb down"
-msgstr "\"Eriline\" = roni alla"
+msgid "\"Aux1\" = climb down"
+msgstr "\"Aux1\" = roni alla"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Autoforward"
@@ -1797,10 +1952,18 @@ msgid "Automatic jumping"
msgstr "Automaatne hüppamine"
#: src/gui/guiKeyChangeMenu.cpp
+msgid "Aux1"
+msgstr "Aux1"
+
+#: src/gui/guiKeyChangeMenu.cpp
msgid "Backward"
msgstr "Tagasi"
#: src/gui/guiKeyChangeMenu.cpp
+msgid "Block bounds"
+msgstr "Klotsi piirid"
+
+#: src/gui/guiKeyChangeMenu.cpp
msgid "Change camera"
msgstr "Muuda kaamerat"
@@ -1818,11 +1981,11 @@ msgstr "Konsool"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Dec. range"
-msgstr ""
+msgstr "Vähenda ulatust"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Dec. volume"
-msgstr ""
+msgstr "Vähenda valjust"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Double tap \"jump\" to toggle fly"
@@ -1838,7 +2001,7 @@ msgstr "Edasi"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Inc. range"
-msgstr ""
+msgstr "Suurenda ulatust"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Inc. volume"
@@ -1867,16 +2030,14 @@ msgid "Local command"
msgstr "Kohalik käsk"
#: src/gui/guiKeyChangeMenu.cpp
-#, fuzzy
msgid "Mute"
-msgstr "Summuta"
+msgstr "Vaigista"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Next item"
msgstr "Järgmine üksus"
#: src/gui/guiKeyChangeMenu.cpp
-#, fuzzy
msgid "Prev. item"
msgstr "Eelmine asi"
@@ -1893,10 +2054,6 @@ msgid "Sneak"
msgstr "Hiilimine"
#: src/gui/guiKeyChangeMenu.cpp
-msgid "Special"
-msgstr ""
-
-#: src/gui/guiKeyChangeMenu.cpp
msgid "Toggle HUD"
msgstr "Lülita HUD sisse/välja"
@@ -1957,13 +2114,13 @@ msgid "Muted"
msgstr "Vaigistatud"
#: src/gui/guiVolumeChange.cpp
-msgid "Sound Volume: "
+#, fuzzy, c-format
+msgid "Sound Volume: %d%%"
msgstr "Hääle Volüüm: "
#. ~ Imperative, as in "Enter/type in text".
#. Don't forget the space.
#: src/gui/modalMenu.cpp
-#, fuzzy
msgid "Enter "
msgstr "Sisesta "
@@ -1979,13 +2136,17 @@ msgid ""
"(Android) Fixes the position of virtual joystick.\n"
"If disabled, virtual joystick will center to first-touch's position."
msgstr ""
+"(Android) Parendab virtuaalse juhtkangi asukohta.\n"
+"Kui keelatud, siis juhtkangi kese asub esmapuute kohal."
#: src/settings_translation_file.cpp
msgid ""
-"(Android) Use virtual joystick to trigger \"aux\" button.\n"
-"If enabled, virtual joystick will also tap \"aux\" button when out of main "
+"(Android) Use virtual joystick to trigger \"Aux1\" button.\n"
+"If enabled, virtual joystick will also tap \"Aux1\" button when out of main "
"circle."
msgstr ""
+"(Android) Virtuaal-juhtkangi kasutamine \"Aux1\" nupu päästmiseks.\n"
+"Kui lubatud, juhtkang päästab ka \"Aux1\" nupu kui läheb väljapoole pearingi."
#: src/settings_translation_file.cpp
msgid ""
@@ -2012,31 +2173,31 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "2D noise that controls the shape/size of ridged mountains."
-msgstr ""
+msgstr "Kahemõõtmeline müra mis määrab seljandike kuju/suuruse."
#: src/settings_translation_file.cpp
msgid "2D noise that controls the shape/size of rolling hills."
-msgstr ""
+msgstr "Kahemõõtmeline müra mis määrab vooremaa kuju/suuruse."
#: src/settings_translation_file.cpp
msgid "2D noise that controls the shape/size of step mountains."
-msgstr ""
+msgstr "Kahemõõtmeline müra mis määrab astmikkõrgustike kuju/suuruse."
#: src/settings_translation_file.cpp
msgid "2D noise that controls the size/occurrence of ridged mountain ranges."
-msgstr ""
+msgstr "Kahemõõtmeline müra mis määrab seljandike ala suuruse/ilmingu."
#: src/settings_translation_file.cpp
msgid "2D noise that controls the size/occurrence of rolling hills."
-msgstr ""
+msgstr "Kahemõõtmeline müra mis määrab vooremaa ala suuruse/ilmingu."
#: src/settings_translation_file.cpp
msgid "2D noise that controls the size/occurrence of step mountain ranges."
-msgstr ""
+msgstr "Kahemõõtmeline müra mis määrab astmikkõrgendike ala suuruse/ilmingu."
#: src/settings_translation_file.cpp
msgid "2D noise that locates the river valleys and channels."
-msgstr ""
+msgstr "Kahemõõtmeline müra mis paigutab jõeorud ja kanalid."
#: src/settings_translation_file.cpp
msgid "3D clouds"
@@ -2052,7 +2213,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "3D noise defining giant caverns."
-msgstr ""
+msgstr "Üüratuid koopasaale määratlev kolmemõõtmeline müra."
#: src/settings_translation_file.cpp
msgid ""
@@ -2070,19 +2231,20 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "3D noise defining structure of river canyon walls."
-msgstr ""
+msgstr "Kanjonjõe järsakkaldaid määratlev kolmemõõtmeline müra."
#: src/settings_translation_file.cpp
msgid "3D noise defining terrain."
-msgstr ""
+msgstr "Maastiku määratlev kolmemõõtmeline müra."
#: src/settings_translation_file.cpp
msgid "3D noise for mountain overhangs, cliffs, etc. Usually small variations."
msgstr ""
+"Kolmemõõtmeline müra kaljudele, eenditele, jms. Tavaliselt väikesed erisused."
#: src/settings_translation_file.cpp
msgid "3D noise that determines number of dungeons per mapchunk."
-msgstr ""
+msgstr "Kolmemõõtmeline müra, mis määratleb kambristike sageduse kaardijaos."
#: src/settings_translation_file.cpp
msgid ""
@@ -2106,27 +2268,27 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "A message to be displayed to all clients when the server crashes."
-msgstr ""
+msgstr "Teade kõigile külalistele, kui võõrustaja kooleb."
#: src/settings_translation_file.cpp
msgid "A message to be displayed to all clients when the server shuts down."
-msgstr ""
+msgstr "Teade kõigile külalistele, kui server kinni läheb."
#: src/settings_translation_file.cpp
msgid "ABM interval"
-msgstr ""
+msgstr "ABM sagedus"
#: src/settings_translation_file.cpp
msgid "ABM time budget"
-msgstr ""
+msgstr "ABM-i ajakava"
#: src/settings_translation_file.cpp
msgid "Absolute limit of queued blocks to emerge"
-msgstr ""
+msgstr "Kõrgeim piirang ilmumist ootavatele klotsiedele"
#: src/settings_translation_file.cpp
msgid "Acceleration in air"
-msgstr ""
+msgstr "Kiirendus õhus"
#: src/settings_translation_file.cpp
msgid "Acceleration of gravity, in nodes per second per second."
@@ -2166,6 +2328,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Adjust the detected display density, used for scaling UI elements."
+msgstr ""
+
+#: src/settings_translation_file.cpp
#, c-format
msgid ""
"Adjusts the density of the floatland layer.\n"
@@ -2278,6 +2444,14 @@ msgid "Autoscaling mode"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Aux1 key"
+msgstr "Aux1 võti"
+
+#: src/settings_translation_file.cpp
+msgid "Aux1 key for climbing/descending"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Backward key"
msgstr "Tagasi liikumise klahv"
@@ -2322,10 +2496,6 @@ msgid "Biome noise"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Bits per pixel (aka color depth) in fullscreen mode."
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Block send optimize distance"
msgstr ""
@@ -2424,6 +2594,15 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Chat command time message threshold"
+msgstr "Vestluskäskluse ajalise sõnumi lävi"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Chat commands"
+msgstr "Käsklused"
+
+#: src/settings_translation_file.cpp
msgid "Chat font size"
msgstr ""
@@ -2456,8 +2635,9 @@ msgid "Chat toggle key"
msgstr "Vestluse lülitusklahv"
#: src/settings_translation_file.cpp
-msgid "Chatcommands"
-msgstr "Käsklused"
+#, fuzzy
+msgid "Chat weblinks"
+msgstr "Vestluse näitamine"
#: src/settings_translation_file.cpp
msgid "Chunk size"
@@ -2476,6 +2656,12 @@ msgid "Clean transparent textures"
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Clickable weblinks (middle-click or Ctrl+left-click) enabled in chat console "
+"output."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Client"
msgstr ""
@@ -2520,6 +2706,10 @@ msgid "Colored fog"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Colored shadows"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid ""
"Comma-separated list of flags to hide in the content repository.\n"
"\"nonfree\" can be used to hide packages which do not qualify as 'free "
@@ -2547,6 +2737,22 @@ msgid "Command key"
msgstr "Käsuklahv"
#: src/settings_translation_file.cpp
+msgid ""
+"Compression level to use when saving mapblocks to disk.\n"
+"-1 - use default compression level\n"
+"0 - least compression, fastest\n"
+"9 - best compression, slowest"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Compression level to use when sending mapblocks to the client.\n"
+"-1 - use default compression level\n"
+"0 - least compression, fastest\n"
+"9 - best compression, slowest"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Connect glass"
msgstr "Ühenda klaasi"
@@ -2637,7 +2843,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"Crosshair alpha (opaqueness, between 0 and 255).\n"
-"Also controls the object crosshair color"
+"This also applies to the object crosshair."
msgstr ""
#: src/settings_translation_file.cpp
@@ -2714,8 +2920,9 @@ msgstr "Vaike lasu hulk"
#: src/settings_translation_file.cpp
msgid ""
-"Default timeout for cURL, stated in milliseconds.\n"
-"Only has an effect if compiled with cURL."
+"Define shadow filtering quality.\n"
+"This simulates the soft shadows effect by applying a PCF or Poisson disk\n"
+"but also uses more resources."
msgstr ""
#: src/settings_translation_file.cpp
@@ -2819,9 +3026,8 @@ msgid "Desynchronize block animation"
msgstr ""
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Dig key"
-msgstr "Parem klahv"
+msgstr "Kaevuri klahv"
#: src/settings_translation_file.cpp
msgid "Digging particles"
@@ -2836,6 +3042,10 @@ msgid "Disallow empty passwords"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Display Density Scaling Factor"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Domain name of server, to be displayed in the serverlist."
msgstr ""
@@ -2880,6 +3090,19 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Enable Poisson disk filtering.\n"
+"On true uses Poisson disk to make \"soft shadows\". Otherwise uses PCF "
+"filtering."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable colored shadows.\n"
+"On true translucent nodes cast colored shadows. This is expensive."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Enable console window"
msgstr ""
@@ -2988,6 +3211,12 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Enables tradeoffs that reduce CPU load or increase rendering performance\n"
+"at the expense of minor visual glitches that do not impact game playability."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Engine profiling data print interval"
msgstr ""
@@ -3026,18 +3255,6 @@ msgid "Fallback font path"
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 ""
@@ -3055,7 +3272,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Fast movement (via the \"special\" key).\n"
+"Fast movement (via the \"Aux1\" key).\n"
"This requires the \"fast\" privilege on the server."
msgstr ""
@@ -3089,9 +3306,9 @@ 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."
+"which PNG optimizers usually discard, often resulting in dark or\n"
+"light edges to transparent textures. Apply a filter to clean that up\n"
+"at texture load time. This is automatically enabled if mipmapping is enabled."
msgstr ""
#: src/settings_translation_file.cpp
@@ -3183,15 +3400,15 @@ msgid "Font size"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Font size of the default font in point (pt)."
+msgid "Font size divisible by"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Font size of the fallback font in point (pt)."
+msgid "Font size of the default font where 1 unit = 1 pixel at 96 DPI"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Font size of the monospace font in point (pt)."
+msgid "Font size of the monospace font where 1 unit = 1 pixel at 96 DPI"
msgstr ""
#: src/settings_translation_file.cpp
@@ -3202,6 +3419,17 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"For pixel-style fonts that do not scale well, this ensures that font sizes "
+"used\n"
+"with this font will always be divisible by this value, in pixels. For "
+"instance,\n"
+"a pixel font 16 pixels tall should have this set to 16, so it will only ever "
+"be\n"
+"sized 16, 32, 48, etc., so a mod requesting a size of 25 will get 32."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Format of player chat messages. The following strings are valid "
"placeholders:\n"
"@name, @message, @timestamp (optional)"
@@ -3260,10 +3488,6 @@ msgid "Fraction of the visible distance at which fog starts to be rendered"
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)."
@@ -3288,10 +3512,6 @@ msgid "Full screen"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Full screen BPP"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Fullscreen mode."
msgstr ""
@@ -3312,15 +3532,15 @@ msgid "Global callbacks"
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
"Global map generation attributes.\n"
"In Mapgen v6 the 'decorations' flag controls all decorations except trees\n"
-"and junglegrass, in all other mapgens this flag controls all decorations."
+"and jungle grass, in all other mapgens this flag controls all decorations."
msgstr ""
-"Üldised maailma-loome omadused.\n"
-"Maailma loome v6 puhul lipp 'Ilmestused' ei avalda mõju puudele ja \n"
-"tihniku rohule, kõigi teiste versioonide puhul mõjutab see lipp \n"
-"kõiki ilmestusi (nt: lilled, seened, vetikad, korallid, jne)."
+"Üldised maailma loome omadused.\n"
+"Maailma loome v6 puhul lipp 'ilmestused' ei avalda mõju puudele ja \n"
+"tihniku rohule, kõigi teistega mõjutab see lipp kõiki ilmestusi."
#: src/settings_translation_file.cpp
msgid ""
@@ -3388,7 +3608,8 @@ msgid "Heat noise"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Height component of the initial window size."
+msgid ""
+"Height component of the initial window size. Ignored in fullscreen mode."
msgstr ""
#: src/settings_translation_file.cpp
@@ -3400,10 +3621,6 @@ msgid "Height select noise"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "High-precision FPU"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Hill steepness"
msgstr "Küngaste järskus"
@@ -3634,8 +3851,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"If disabled, \"special\" key is used to fly fast if both fly and fast mode "
-"are\n"
+"If disabled, \"Aux1\" key is used to fly fast if both fly and fast mode are\n"
"enabled."
msgstr ""
@@ -3657,8 +3873,8 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"If enabled, \"special\" key instead of \"sneak\" key is used for climbing "
-"down and\n"
+"If enabled, \"Aux1\" key instead of \"Sneak\" key is used for climbing down "
+"and\n"
"descending."
msgstr ""
@@ -3704,6 +3920,12 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"If the execution of a chat command takes longer than this specified time in\n"
+"seconds, add the time information to the chat command message"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"If the file size of debug.txt exceeds the number of megabytes specified in\n"
"this setting when it is opened, the file is moved to debug.txt.1,\n"
"deleting an older debug.txt.1 if it exists.\n"
@@ -3749,7 +3971,7 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Instrument chatcommands on registration."
+msgid "Instrument chat commands on registration."
msgstr ""
#: src/settings_translation_file.cpp
@@ -3833,7 +4055,7 @@ msgid "Joystick button repetition interval"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Joystick deadzone"
+msgid "Joystick dead zone"
msgstr ""
#: src/settings_translation_file.cpp
@@ -4591,10 +4813,6 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Makes DirectX work with LuaJIT. Disable if it causes troubles."
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Makes all liquids opaque"
msgstr ""
@@ -4671,6 +4889,10 @@ msgid "Map save interval"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Map shadows update frames"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Mapblock limit"
msgstr ""
@@ -4779,6 +5001,10 @@ msgid "Maximum FPS when the window is not focused, or when the game is paused."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Maximum distance to render shadows."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Maximum forceloaded blocks"
msgstr ""
@@ -4884,7 +5110,15 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Maximum time in ms a file download (e.g. a mod download) may take."
+msgid ""
+"Maximum time a file download (e.g. a mod download) may take, stated in "
+"milliseconds."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum time an interactive request (e.g. server list fetch) may take, "
+"stated in milliseconds."
msgstr ""
#: src/settings_translation_file.cpp
@@ -4948,7 +5182,7 @@ msgid "Mod channels"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Modifies the size of the hudbar elements."
+msgid "Modifies the size of the HUD elements."
msgstr ""
#: src/settings_translation_file.cpp
@@ -4960,6 +5194,10 @@ msgid "Monospace font size"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Monospace font size divisible by"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Mountain height noise"
msgstr ""
@@ -5080,7 +5318,7 @@ 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"
+"This is a trade-off between SQLite transaction overhead and\n"
"memory consumption (4096=100MB, as a rule of thumb)."
msgstr ""
@@ -5099,21 +5337,18 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Opaqueness (alpha) of the shadow behind the fallback font, between 0 and 255."
-msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid ""
"Open the pause menu when the window's focus is lost. Does not pause if a "
"formspec is\n"
"open."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Optional override for chat weblink color."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid ""
-"Path of the fallback font.\n"
-"If “freetype†setting is enabled: Must be a TrueType font.\n"
-"If “freetype†setting is disabled: Must be a bitmap or XML vectors font.\n"
+"Path of the fallback font. Must be a TrueType font.\n"
"This font will be used for certain languages or if the default font is "
"unavailable."
msgstr ""
@@ -5136,17 +5371,13 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Path to the default font.\n"
-"If “freetype†setting is enabled: Must be a TrueType font.\n"
-"If “freetype†setting is disabled: Must be a bitmap or XML vectors font.\n"
+"Path to the default font. Must be a TrueType font.\n"
"The fallback font will be used if the font cannot be loaded."
msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Path to the monospace font.\n"
-"If “freetype†setting is enabled: Must be a TrueType font.\n"
-"If “freetype†setting is disabled: Must be a bitmap or XML vectors font.\n"
+"Path to the monospace font. Must be a TrueType font.\n"
"This font is used for e.g. the console and profiler screen."
msgstr ""
@@ -5175,9 +5406,8 @@ msgid "Pitch move mode"
msgstr ""
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Place key"
-msgstr "Kõrvale astumise klahv"
+msgstr "Asetamis klahv"
#: src/settings_translation_file.cpp
msgid "Place repetition interval"
@@ -5202,6 +5432,10 @@ msgid "Player versus player"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Poisson filtering"
+msgstr "Poissoni filtreerimine"
+
+#: src/settings_translation_file.cpp
msgid ""
"Port to connect to (UDP).\n"
"Note that the port field in the main menu overrides this setting."
@@ -5246,9 +5480,9 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"Prometheus listener address.\n"
-"If minetest is compiled with ENABLE_PROMETHEUS option enabled,\n"
+"If Minetest is compiled with ENABLE_PROMETHEUS option enabled,\n"
"enable metrics listener for Prometheus on that address.\n"
-"Metrics can be fetch on http://127.0.0.1:30000/metrics"
+"Metrics can be fetched on http://127.0.0.1:30000/metrics"
msgstr ""
#: src/settings_translation_file.cpp
@@ -5537,6 +5771,32 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Set the shadow strength.\n"
+"Lower value means lighter shadows, higher value means darker shadows."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set the soft shadow radius size.\n"
+"Lower values mean sharper shadows, bigger values mean softer shadows.\n"
+"Minimum value: 1.0; maximum value: 10.0"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set the tilt of Sun/Moon orbit in degrees.\n"
+"Value of 0 means no tilt / vertical orbit.\n"
+"Minimum value: 0.0; maximum value: 60.0"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set to true to enable Shadow Mapping.\n"
+"Requires shaders to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Set to true to enable waving leaves.\n"
"Requires shaders to be enabled."
msgstr ""
@@ -5554,6 +5814,13 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Sets shadow texture quality to 32 bits.\n"
+"On false, 16 bits texture will be used.\n"
+"This can cause much more artifacts in the shadow."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Shader path"
msgstr "Varjutaja asukoht"
@@ -5566,15 +5833,29 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Shadow filter quality"
+msgstr "Varju filtreerimis aste"
+
+#: src/settings_translation_file.cpp
+msgid "Shadow map max distance in nodes to render shadows"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Shadow map texture in 32 bits"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Shadow map texture size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid ""
"Shadow offset (in pixels) of the default font. If 0, then shadow will not be "
"drawn."
msgstr ""
#: src/settings_translation_file.cpp
-msgid ""
-"Shadow offset (in pixels) of the fallback font. If 0, then shadow will not "
-"be drawn."
+msgid "Shadow strength"
msgstr ""
#: src/settings_translation_file.cpp
@@ -5596,7 +5877,7 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Show nametag backgrounds by default"
+msgid "Show name tag backgrounds by default"
msgstr ""
#: src/settings_translation_file.cpp
@@ -5621,6 +5902,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Sky Body Orbit Tilt"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Slice w"
msgstr ""
@@ -5675,15 +5960,11 @@ msgid "Sneaking speed, in nodes per second."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Sound"
+msgid "Soft shadow radius"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Special key"
-msgstr "Eri klahv"
-
-#: src/settings_translation_file.cpp
-msgid "Special key for climbing/descending"
+msgid "Sound"
msgstr ""
#: src/settings_translation_file.cpp
@@ -5703,6 +5984,14 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Spread a complete update of shadow map over given amount of frames.\n"
+"Higher values might make shadows laggy, lower values\n"
+"will consume more resources.\n"
+"Minimum value: 1; maximum value: 16"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Spread of light curve boost range.\n"
"Controls the width of the range to be boosted.\n"
"Standard deviation of the light curve boost Gaussian."
@@ -5809,6 +6098,13 @@ msgstr "Tapeedi kaust"
#: src/settings_translation_file.cpp
msgid ""
+"Texture size to render the shadow map on.\n"
+"This must be a power of two.\n"
+"Bigger numbers create better shadows but it is also more expensive."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Textures on a node may be aligned either to the node or to the world.\n"
"The former mode suits better things like machines, furniture, etc., while\n"
"the latter makes stairs and microblocks fit surroundings better.\n"
@@ -5822,7 +6118,7 @@ msgid "The URL for the content repository"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "The deadzone of the joystick"
+msgid "The dead zone of the joystick"
msgstr ""
#: src/settings_translation_file.cpp
@@ -5880,7 +6176,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"The rendering back-end for Irrlicht.\n"
+"The rendering back-end.\n"
"A restart is required after changing this.\n"
"Note: On Android, stick with OGLES1 if unsure! App may fail to start "
"otherwise.\n"
@@ -5891,7 +6187,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"The sensitivity of the joystick axes for moving the\n"
-"ingame view frustum around."
+"in-game view frustum around."
msgstr ""
#: src/settings_translation_file.cpp
@@ -5985,6 +6281,10 @@ msgid "Touch screen threshold"
msgstr "Puuteekraani lävi"
#: src/settings_translation_file.cpp
+msgid "Tradeoffs for performance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Trees noise"
msgstr ""
@@ -6054,7 +6354,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Use mip mapping to scale textures. May slightly increase performance,\n"
+"Use mipmapping to scale textures. May slightly increase performance,\n"
"especially when using a high resolution texture pack.\n"
"Gamma correct downscaling is not supported."
msgstr ""
@@ -6167,7 +6467,7 @@ msgid "Viewing range"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Virtual joystick triggers aux button"
+msgid "Virtual joystick triggers Aux1 button"
msgstr ""
#: src/settings_translation_file.cpp
@@ -6238,6 +6538,10 @@ msgid "Waving plants"
msgstr "Õõtsuvad taimed"
#: src/settings_translation_file.cpp
+msgid "Weblink color"
+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"
@@ -6258,23 +6562,15 @@ msgid ""
"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.\n"
+"memory. Powers of 2 are recommended. This setting is ONLY applied if\n"
+"bilinear/trilinear/anisotropic filtering is enabled.\n"
"This is also used as the base node texture size for world-aligned\n"
"texture autoscaling."
msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Whether FreeType fonts are used, requires FreeType support to be compiled "
-"in.\n"
-"If disabled, bitmap and XML vectors fonts are used instead."
-msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid ""
-"Whether nametag backgrounds should be shown by default.\n"
+"Whether name tag backgrounds should be shown by default.\n"
"Mods may still set a background."
msgstr ""
@@ -6316,7 +6612,7 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Width component of the initial window size."
+msgid "Width component of the initial window size. Ignored in fullscreen mode."
msgstr ""
#: src/settings_translation_file.cpp
@@ -6401,34 +6697,25 @@ msgid "Y-level of seabed."
msgstr ""
#: src/settings_translation_file.cpp
-msgid ""
-"ZLib compression level to use when saving mapblocks to disk.\n"
-"-1 - Zlib's default compression level\n"
-"0 - no compresson, fastest\n"
-"9 - best compression, slowest\n"
-"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)"
-msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid ""
-"ZLib compression level to use when sending mapblocks to the client.\n"
-"-1 - Zlib's default compression level\n"
-"0 - no compresson, fastest\n"
-"9 - best compression, slowest\n"
-"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "cURL file download timeout"
msgstr "cURL faili allalaadimine aegus"
#: src/settings_translation_file.cpp
+msgid "cURL interactive timeout"
+msgstr "cURL-i interaktiivne aegumine"
+
+#: src/settings_translation_file.cpp
msgid "cURL parallel limit"
msgstr ""
-#: src/settings_translation_file.cpp
-msgid "cURL timeout"
-msgstr "cURL aegus"
+#~ msgid "- Creative Mode: "
+#~ msgstr "- Kujunduslik mängumood: "
+
+#~ msgid "- Damage: "
+#~ msgstr "- Valu: "
+
+#~ msgid "Address / Port"
+#~ msgstr "Aadress / kanal"
#~ msgid "Are you sure to reset your singleplayer world?"
#~ msgstr "Kindlasti lähtestad oma üksikmängija maailma algseks?"
@@ -6448,6 +6735,12 @@ msgstr "cURL aegus"
#~ msgid "Configure"
#~ msgstr "Kohanda"
+#~ msgid "Credits"
+#~ msgstr "Tegijad"
+
+#~ msgid "Damage enabled"
+#~ msgstr "Ellujääja"
+
#~ msgid "Darkness sharpness"
#~ msgstr "Pimeduse teravus"
@@ -6464,6 +6757,9 @@ msgstr "cURL aegus"
#~ msgid "Generate Normal Maps"
#~ msgstr "Loo normaalkaardistusi"
+#~ msgid "Install: file: \"$1\""
+#~ msgstr "Paigaldus: fail: \"$1\""
+
#~ msgid "Main"
#~ msgstr "Peamine"
@@ -6482,6 +6778,9 @@ msgstr "cURL aegus"
#~ msgid "Minimap in surface mode, Zoom x4"
#~ msgstr "Pinnakaart, Suurendus ×4"
+#~ msgid "Name / Password"
+#~ msgstr "Nimi / salasõna"
+
#~ msgid "Name/Password"
#~ msgstr "Nimi/Salasõna"
@@ -6491,6 +6790,9 @@ msgstr "cURL aegus"
#~ msgid "Ok"
#~ msgstr "Olgu."
+#~ msgid "PvP enabled"
+#~ msgstr "Vaenulikus lubatud"
+
#~ msgid "Reset singleplayer world"
#~ msgstr "Lähtesta üksikmängija maailm"
@@ -6498,9 +6800,15 @@ msgstr "cURL aegus"
#~ msgid "Select Package File:"
#~ msgstr "Vali modifikatsiooni fail:"
+#~ msgid "Special key"
+#~ msgstr "Eri klahv"
+
#~ msgid "Start Singleplayer"
#~ msgstr "Alusta üksikmängu"
+#~ msgid "To enable shaders the OpenGL driver needs to be used."
+#~ msgstr "Aktiveerimiseks varjud, nad vajavad OpenGL draiver."
+
#, fuzzy
#~ msgid "Toggle Cinematic"
#~ msgstr "Lülita kiirus sisse"
@@ -6510,3 +6818,9 @@ msgstr "cURL aegus"
#~ msgid "Yes"
#~ msgstr "Jah"
+
+#~ msgid "You died."
+#~ msgstr "Said otsa."
+
+#~ msgid "needs_fallback_font"
+#~ msgstr "no"
diff --git a/po/eu/minetest.po b/po/eu/minetest.po
index d639a79ed..2cd9b4b74 100644
--- a/po/eu/minetest.po
+++ b/po/eu/minetest.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: minetest\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-02-23 19:03+0100\n"
+"POT-Creation-Date: 2022-01-25 23:19+0100\n"
"PO-Revision-Date: 2021-02-23 15:50+0000\n"
"Last-Translator: Osoitz <oelkoro@gmail.com>\n"
"Language-Team: Basque <https://hosted.weblate.org/projects/minetest/minetest/"
@@ -19,6 +19,44 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 4.5\n"
+#: builtin/client/chatcommands.lua
+msgid "Clear the out chat queue"
+msgstr ""
+
+#: builtin/client/chatcommands.lua
+msgid "Empty command."
+msgstr ""
+
+#: builtin/client/chatcommands.lua
+#, fuzzy
+msgid "Exit to main menu"
+msgstr "Itzuli menu nagusira"
+
+#: builtin/client/chatcommands.lua
+#, fuzzy
+msgid "Invalid command: "
+msgstr "Agindu lokala"
+
+#: builtin/client/chatcommands.lua
+msgid "Issued command: "
+msgstr ""
+
+#: builtin/client/chatcommands.lua
+msgid "List online players"
+msgstr ""
+
+#: builtin/client/chatcommands.lua
+msgid "Online players: "
+msgstr ""
+
+#: builtin/client/chatcommands.lua
+msgid "The out chat queue is now empty."
+msgstr ""
+
+#: builtin/client/chatcommands.lua
+msgid "This command is disabled by server."
+msgstr ""
+
#: builtin/client/death_formspec.lua src/client/game.cpp
msgid "Respawn"
msgstr "Birsortu"
@@ -27,11 +65,42 @@ msgstr "Birsortu"
msgid "You died"
msgstr "Hil zara"
+#: builtin/common/chatcommands.lua
+#, fuzzy
+msgid "Available commands:"
+msgstr "Agindu lokala"
+
+#: builtin/common/chatcommands.lua
+#, fuzzy
+msgid "Available commands: "
+msgstr "Agindu lokala"
+
+#: builtin/common/chatcommands.lua
+msgid "Command not available: "
+msgstr ""
+
+#: builtin/common/chatcommands.lua
+msgid "Get help for commands"
+msgstr ""
+
+#: builtin/common/chatcommands.lua
+msgid ""
+"Use '.help <cmd>' to get more information, or '.help all' to list everything."
+msgstr ""
+
+#: builtin/common/chatcommands.lua
+msgid "[all | <cmd>]"
+msgstr ""
+
#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp
msgid "OK"
msgstr "Ados"
#: builtin/fstk/ui.lua
+msgid "<none available>"
+msgstr ""
+
+#: builtin/fstk/ui.lua
msgid "An error occurred in a Lua script:"
msgstr "Errore bat gertatu da Lua script batean:"
@@ -235,6 +304,13 @@ msgid "Install missing dependencies"
msgstr "Falta diren mendekotasunak instalatu"
#: builtin/mainmenu/dlg_contentstore.lua
+#, fuzzy
+msgid "Install: Unsupported file type or broken archive"
+msgstr ""
+"Instalakuntza: \"$1\" sustengu gabeko fitxategi formatua edo hondatutako "
+"fitxategia"
+
+#: builtin/mainmenu/dlg_contentstore.lua
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Mods"
msgstr "Mod-ak"
@@ -540,7 +616,7 @@ msgstr "< Itzuli ezarpenen orrira"
msgid "Browse"
msgstr "Arakatu"
-#: builtin/mainmenu/dlg_settings_advanced.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_settings.lua
msgid "Disabled"
msgstr "Desgaituta"
@@ -565,7 +641,8 @@ msgid "Offset"
msgstr ""
#: builtin/mainmenu/dlg_settings_advanced.lua
-msgid "Persistance"
+#, fuzzy
+msgid "Persistence"
msgstr "Iraunkortasuna"
#: builtin/mainmenu/dlg_settings_advanced.lua
@@ -584,7 +661,7 @@ msgstr "Berrezarri lehenespena"
msgid "Scale"
msgstr "Eskala"
-#: builtin/mainmenu/dlg_settings_advanced.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_online.lua
msgid "Search"
msgstr "Bilatu"
@@ -677,16 +754,6 @@ msgstr ""
"Mod instalakuntza: ezinezkoa $1 mod-entzako karpeta izen egokia aurkitzea"
#: builtin/mainmenu/pkgmgr.lua
-msgid "Install: Unsupported file type \"$1\" or broken archive"
-msgstr ""
-"Instalakuntza: \"$1\" sustengu gabeko fitxategi formatua edo hondatutako "
-"fitxategia"
-
-#: builtin/mainmenu/pkgmgr.lua
-msgid "Install: file: \"$1\""
-msgstr "Instalakuntza: fitxategia: \"$1\""
-
-#: builtin/mainmenu/pkgmgr.lua
msgid "Unable to find a valid mod or modpack"
msgstr "Ezinezkoa baliozko mod edo mod pakete bat aurkitzea"
@@ -720,6 +787,42 @@ msgstr ""
"Saia zaitez zerbitzari publikoen zerrenda birgaitzen eta egiazta ezazu zure "
"internet konexioa."
+#: builtin/mainmenu/tab_about.lua
+msgid "About"
+msgstr ""
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Active Contributors"
+msgstr "Laguntzaile aktiboak"
+
+#: builtin/mainmenu/tab_about.lua
+#, fuzzy
+msgid "Active renderer:"
+msgstr "Objektu aktiboak bidaltzeko barrutia"
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Core Developers"
+msgstr "Garatzaile nagusiak"
+
+#: builtin/mainmenu/tab_about.lua
+#, fuzzy
+msgid "Open User Data Directory"
+msgstr "Hautatu direktorioa"
+
+#: builtin/mainmenu/tab_about.lua
+msgid ""
+"Opens the directory that contains user-provided worlds, games, mods,\n"
+"and texture packs in a file manager / explorer."
+msgstr ""
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Previous Contributors"
+msgstr "Lehenagoko laguntzaileak"
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Previous Core Developers"
+msgstr "Lehenagoko garatzaile nagusiak"
+
#: builtin/mainmenu/tab_content.lua
msgid "Browse online content"
msgstr "Lineako edukiak esploratu"
@@ -760,37 +863,6 @@ msgstr "Paketea desinstalatu"
msgid "Use Texture Pack"
msgstr "Testura paketea erabili"
-#: builtin/mainmenu/tab_credits.lua
-msgid "Active Contributors"
-msgstr "Laguntzaile aktiboak"
-
-#: builtin/mainmenu/tab_credits.lua
-msgid "Core Developers"
-msgstr "Garatzaile nagusiak"
-
-#: builtin/mainmenu/tab_credits.lua
-msgid "Credits"
-msgstr "Kredituak"
-
-#: builtin/mainmenu/tab_credits.lua
-#, fuzzy
-msgid "Open User Data Directory"
-msgstr "Hautatu direktorioa"
-
-#: builtin/mainmenu/tab_credits.lua
-msgid ""
-"Opens the directory that contains user-provided worlds, games, mods,\n"
-"and texture packs in a file manager / explorer."
-msgstr ""
-
-#: builtin/mainmenu/tab_credits.lua
-msgid "Previous Contributors"
-msgstr "Lehenagoko laguntzaileak"
-
-#: builtin/mainmenu/tab_credits.lua
-msgid "Previous Core Developers"
-msgstr "Lehenagoko garatzaile nagusiak"
-
#: builtin/mainmenu/tab_local.lua
msgid "Announce Server"
msgstr "Zerbitzaria iragarri"
@@ -819,7 +891,7 @@ msgstr "Zerbitzari ostalaria"
msgid "Install games from ContentDB"
msgstr "Instalatu ContentDB-ko jolasak"
-#: builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
msgid "Name"
msgstr ""
@@ -831,7 +903,7 @@ msgstr ""
msgid "No world created or selected!"
msgstr ""
-#: builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
msgid "Password"
msgstr ""
@@ -839,7 +911,7 @@ msgstr ""
msgid "Play Game"
msgstr ""
-#: builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
msgid "Port"
msgstr ""
@@ -861,7 +933,12 @@ msgid "Start Game"
msgstr "Hasi partida"
#: builtin/mainmenu/tab_online.lua
-msgid "Address / Port"
+#, fuzzy
+msgid "Address"
+msgstr "Helbidea lotu"
+
+#: builtin/mainmenu/tab_online.lua src/client/keycode.cpp
+msgid "Clear"
msgstr ""
#: builtin/mainmenu/tab_online.lua
@@ -872,16 +949,22 @@ msgstr ""
msgid "Creative mode"
msgstr "Sormen modua"
+#. ~ PvP = Player versus Player
#: builtin/mainmenu/tab_online.lua
-msgid "Damage enabled"
-msgstr ""
+#, fuzzy
+msgid "Damage / PvP"
+msgstr "Kaltea"
#: builtin/mainmenu/tab_online.lua
msgid "Del. Favorite"
msgstr ""
#: builtin/mainmenu/tab_online.lua
-msgid "Favorite"
+msgid "Favorites"
+msgstr ""
+
+#: builtin/mainmenu/tab_online.lua
+msgid "Incompatible Servers"
msgstr ""
#: builtin/mainmenu/tab_online.lua
@@ -889,16 +972,20 @@ msgid "Join Game"
msgstr "Elkartu partidara"
#: builtin/mainmenu/tab_online.lua
-msgid "Name / Password"
+msgid "Ping"
msgstr ""
#: builtin/mainmenu/tab_online.lua
-msgid "Ping"
+#, fuzzy
+msgid "Public Servers"
+msgstr "Zerbitzaria iragarri"
+
+#: builtin/mainmenu/tab_online.lua
+msgid "Refresh"
msgstr ""
-#. ~ PvP = Player versus Player
#: builtin/mainmenu/tab_online.lua
-msgid "PvP enabled"
+msgid "Server Description"
msgstr ""
#: builtin/mainmenu/tab_settings.lua
@@ -941,11 +1028,31 @@ msgstr ""
msgid "Connected Glass"
msgstr ""
+#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
+msgid "Dynamic shadows"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Dynamic shadows: "
+msgstr ""
+
#: builtin/mainmenu/tab_settings.lua
msgid "Fancy Leaves"
msgstr ""
#: builtin/mainmenu/tab_settings.lua
+msgid "High"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Low"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Medium"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
msgid "Mipmap"
msgstr ""
@@ -1017,10 +1124,6 @@ msgstr ""
msgid "Texturing:"
msgstr ""
-#: builtin/mainmenu/tab_settings.lua
-msgid "To enable shaders the OpenGL driver needs to be used."
-msgstr ""
-
#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
msgid "Tone Mapping"
msgstr ""
@@ -1034,6 +1137,14 @@ msgid "Trilinear Filter"
msgstr ""
#: builtin/mainmenu/tab_settings.lua
+msgid "Ultra High"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Very Low"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
msgid "Waving Leaves"
msgstr ""
@@ -1045,7 +1156,7 @@ msgstr ""
msgid "Waving Plants"
msgstr ""
-#: src/client/client.cpp
+#: src/client/client.cpp src/client/game.cpp
msgid "Connection timed out."
msgstr ""
@@ -1074,7 +1185,7 @@ msgid "Connection error (timed out?)"
msgstr ""
#: src/client/clientlauncher.cpp
-msgid "Could not find or load game \""
+msgid "Could not find or load game: "
msgstr ""
#: src/client/clientlauncher.cpp
@@ -1105,18 +1216,6 @@ msgstr ""
msgid "Provided world path doesn't exist: "
msgstr ""
-#. ~ DO NOT TRANSLATE THIS LITERALLY!
-#. This is a special string. Put either "no" or "yes"
-#. into the translation field (literally).
-#. Choose "yes" if the language requires use of the fallback
-#. font, "no" otherwise.
-#. The fallback font is (normally) required for languages with
-#. non-Latin script, like Chinese.
-#. When in doubt, test your translation.
-#: src/client/fontengine.cpp
-msgid "needs_fallback_font"
-msgstr "no"
-
#: src/client/game.cpp
msgid ""
"\n"
@@ -1128,14 +1227,6 @@ msgid "- Address: "
msgstr ""
#: src/client/game.cpp
-msgid "- Creative Mode: "
-msgstr "- Sormen modua: "
-
-#: src/client/game.cpp
-msgid "- Damage: "
-msgstr "- Kaltea: "
-
-#: src/client/game.cpp
msgid "- Mode: "
msgstr ""
@@ -1157,6 +1248,16 @@ msgid "- Server Name: "
msgstr ""
#: src/client/game.cpp
+#, fuzzy
+msgid "A serialization error occurred:"
+msgstr "Errore bat gertatu da:"
+
+#: src/client/game.cpp
+#, c-format
+msgid "Access denied. Reason: %s"
+msgstr ""
+
+#: src/client/game.cpp
msgid "Automatic forward disabled"
msgstr ""
@@ -1165,6 +1266,22 @@ msgid "Automatic forward enabled"
msgstr ""
#: src/client/game.cpp
+msgid "Block bounds hidden"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Block bounds shown for all blocks"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Block bounds shown for current block"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Block bounds shown for nearby blocks"
+msgstr ""
+
+#: src/client/game.cpp
msgid "Camera update disabled"
msgstr ""
@@ -1173,6 +1290,10 @@ msgid "Camera update enabled"
msgstr ""
#: src/client/game.cpp
+msgid "Can't show block bounds (need 'basic_debug' privilege)"
+msgstr ""
+
+#: src/client/game.cpp
msgid "Change Password"
msgstr ""
@@ -1185,6 +1306,10 @@ msgid "Cinematic mode enabled"
msgstr ""
#: src/client/game.cpp
+msgid "Client disconnected"
+msgstr ""
+
+#: src/client/game.cpp
msgid "Client side scripting is disabled"
msgstr ""
@@ -1193,6 +1318,10 @@ msgid "Connecting to server..."
msgstr ""
#: src/client/game.cpp
+msgid "Connection failed for unknown reason"
+msgstr ""
+
+#: src/client/game.cpp
msgid "Continue"
msgstr ""
@@ -1216,6 +1345,11 @@ msgid ""
msgstr ""
#: src/client/game.cpp
+#, c-format
+msgid "Couldn't resolve address: %s"
+msgstr ""
+
+#: src/client/game.cpp
msgid "Creating client..."
msgstr "Bezeroa sortzen..."
@@ -1332,6 +1466,10 @@ msgid "Minimap currently disabled by game or mod"
msgstr ""
#: src/client/game.cpp
+msgid "Multiplayer"
+msgstr ""
+
+#: src/client/game.cpp
msgid "Noclip mode disabled"
msgstr ""
@@ -1405,6 +1543,21 @@ msgstr ""
#: src/client/game.cpp
#, c-format
+msgid "The server is probably running a different version of %s."
+msgstr ""
+
+#: src/client/game.cpp
+#, c-format
+msgid "Unable to connect to %s because IPv6 is disabled"
+msgstr ""
+
+#: src/client/game.cpp
+#, c-format
+msgid "Unable to listen on %s because IPv6 is disabled"
+msgstr ""
+
+#: src/client/game.cpp
+#, c-format
msgid "Viewing range changed to %d"
msgstr "Ikusmen barrutia aldatu da: %d"
@@ -1473,10 +1626,6 @@ msgid "Caps Lock"
msgstr ""
#: src/client/keycode.cpp
-msgid "Clear"
-msgstr ""
-
-#: src/client/keycode.cpp
msgid "Control"
msgstr "Ctrl"
@@ -1741,6 +1890,15 @@ msgstr ""
msgid "Minimap in texture mode"
msgstr ""
+#: src/gui/guiChatConsole.cpp
+#, fuzzy
+msgid "Failed to open webpage"
+msgstr "Huts egin du $1 deskargatzean"
+
+#: src/gui/guiChatConsole.cpp
+msgid "Opening webpage"
+msgstr ""
+
#: src/gui/guiConfirmRegistration.cpp src/gui/guiPasswordChange.cpp
msgid "Passwords do not match!"
msgstr "Pasahitzak ez datoz bat!"
@@ -1764,7 +1922,7 @@ msgid "Proceed"
msgstr "Jarraitu"
#: src/gui/guiKeyChangeMenu.cpp
-msgid "\"Special\" = climb down"
+msgid "\"Aux1\" = climb down"
msgstr ""
#: src/gui/guiKeyChangeMenu.cpp
@@ -1776,10 +1934,18 @@ msgid "Automatic jumping"
msgstr ""
#: src/gui/guiKeyChangeMenu.cpp
+msgid "Aux1"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
msgid "Backward"
msgstr "Atzera"
#: src/gui/guiKeyChangeMenu.cpp
+msgid "Block bounds"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
msgid "Change camera"
msgstr "Aldatu kamera"
@@ -1868,10 +2034,6 @@ msgid "Sneak"
msgstr "isilean mugitu"
#: src/gui/guiKeyChangeMenu.cpp
-msgid "Special"
-msgstr "Berezia"
-
-#: src/gui/guiKeyChangeMenu.cpp
msgid "Toggle HUD"
msgstr ""
@@ -1932,7 +2094,8 @@ msgid "Muted"
msgstr ""
#: src/gui/guiVolumeChange.cpp
-msgid "Sound Volume: "
+#, c-format
+msgid "Sound Volume: %d%%"
msgstr ""
#. ~ Imperative, as in "Enter/type in text".
@@ -1956,8 +2119,8 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"(Android) Use virtual joystick to trigger \"aux\" button.\n"
-"If enabled, virtual joystick will also tap \"aux\" button when out of main "
+"(Android) Use virtual joystick to trigger \"Aux1\" button.\n"
+"If enabled, virtual joystick will also tap \"Aux1\" button when out of main "
"circle."
msgstr ""
@@ -2140,6 +2303,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Adjust the detected display density, used for scaling UI elements."
+msgstr ""
+
+#: src/settings_translation_file.cpp
#, c-format
msgid ""
"Adjusts the density of the floatland layer.\n"
@@ -2252,6 +2419,15 @@ msgid "Autoscaling mode"
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Aux1 key"
+msgstr "Jauzi tekla"
+
+#: src/settings_translation_file.cpp
+msgid "Aux1 key for climbing/descending"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Backward key"
msgstr "Atzera tekla"
@@ -2296,10 +2472,6 @@ msgid "Biome noise"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Bits per pixel (aka color depth) in fullscreen mode."
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Block send optimize distance"
msgstr ""
@@ -2398,6 +2570,15 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Chat command time message threshold"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Chat commands"
+msgstr "Agindua"
+
+#: src/settings_translation_file.cpp
msgid "Chat font size"
msgstr ""
@@ -2430,7 +2611,7 @@ msgid "Chat toggle key"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Chatcommands"
+msgid "Chat weblinks"
msgstr ""
#: src/settings_translation_file.cpp
@@ -2450,6 +2631,12 @@ msgid "Clean transparent textures"
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Clickable weblinks (middle-click or Ctrl+left-click) enabled in chat console "
+"output."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Client"
msgstr ""
@@ -2494,6 +2681,10 @@ msgid "Colored fog"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Colored shadows"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid ""
"Comma-separated list of flags to hide in the content repository.\n"
"\"nonfree\" can be used to hide packages which do not qualify as 'free "
@@ -2521,6 +2712,22 @@ msgid "Command key"
msgstr "Agindua tekla"
#: src/settings_translation_file.cpp
+msgid ""
+"Compression level to use when saving mapblocks to disk.\n"
+"-1 - use default compression level\n"
+"0 - least compression, fastest\n"
+"9 - best compression, slowest"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Compression level to use when sending mapblocks to the client.\n"
+"-1 - use default compression level\n"
+"0 - least compression, fastest\n"
+"9 - best compression, slowest"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Connect glass"
msgstr ""
@@ -2611,7 +2818,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"Crosshair alpha (opaqueness, between 0 and 255).\n"
-"Also controls the object crosshair color"
+"This also applies to the object crosshair."
msgstr ""
#: src/settings_translation_file.cpp
@@ -2688,8 +2895,9 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Default timeout for cURL, stated in milliseconds.\n"
-"Only has an effect if compiled with cURL."
+"Define shadow filtering quality.\n"
+"This simulates the soft shadows effect by applying a PCF or Poisson disk\n"
+"but also uses more resources."
msgstr ""
#: src/settings_translation_file.cpp
@@ -2810,6 +3018,10 @@ msgid "Disallow empty passwords"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Display Density Scaling Factor"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Domain name of server, to be displayed in the serverlist."
msgstr ""
@@ -2854,6 +3066,19 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Enable Poisson disk filtering.\n"
+"On true uses Poisson disk to make \"soft shadows\". Otherwise uses PCF "
+"filtering."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable colored shadows.\n"
+"On true translucent nodes cast colored shadows. This is expensive."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Enable console window"
msgstr ""
@@ -2967,6 +3192,12 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Enables tradeoffs that reduce CPU load or increase rendering performance\n"
+"at the expense of minor visual glitches that do not impact game playability."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Engine profiling data print interval"
msgstr ""
@@ -3005,18 +3236,6 @@ msgid "Fallback font path"
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 "Azkar tekla"
@@ -3034,7 +3253,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Fast movement (via the \"special\" key).\n"
+"Fast movement (via the \"Aux1\" key).\n"
"This requires the \"fast\" privilege on the server."
msgstr ""
@@ -3068,9 +3287,9 @@ 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."
+"which PNG optimizers usually discard, often resulting in dark or\n"
+"light edges to transparent textures. Apply a filter to clean that up\n"
+"at texture load time. This is automatically enabled if mipmapping is enabled."
msgstr ""
#: src/settings_translation_file.cpp
@@ -3163,15 +3382,15 @@ msgid "Font size"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Font size of the default font in point (pt)."
+msgid "Font size divisible by"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Font size of the fallback font in point (pt)."
+msgid "Font size of the default font where 1 unit = 1 pixel at 96 DPI"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Font size of the monospace font in point (pt)."
+msgid "Font size of the monospace font where 1 unit = 1 pixel at 96 DPI"
msgstr ""
#: src/settings_translation_file.cpp
@@ -3182,6 +3401,17 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"For pixel-style fonts that do not scale well, this ensures that font sizes "
+"used\n"
+"with this font will always be divisible by this value, in pixels. For "
+"instance,\n"
+"a pixel font 16 pixels tall should have this set to 16, so it will only ever "
+"be\n"
+"sized 16, 32, 48, etc., so a mod requesting a size of 25 will get 32."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Format of player chat messages. The following strings are valid "
"placeholders:\n"
"@name, @message, @timestamp (optional)"
@@ -3240,10 +3470,6 @@ msgid "Fraction of the visible distance at which fog starts to be rendered"
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)."
@@ -3274,10 +3500,6 @@ msgid "Full screen"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Full screen BPP"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Fullscreen mode."
msgstr ""
@@ -3301,7 +3523,7 @@ msgstr ""
msgid ""
"Global map generation attributes.\n"
"In Mapgen v6 the 'decorations' flag controls all decorations except trees\n"
-"and junglegrass, in all other mapgens this flag controls all decorations."
+"and jungle grass, in all other mapgens this flag controls all decorations."
msgstr ""
#: src/settings_translation_file.cpp
@@ -3370,7 +3592,8 @@ msgid "Heat noise"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Height component of the initial window size."
+msgid ""
+"Height component of the initial window size. Ignored in fullscreen mode."
msgstr ""
#: src/settings_translation_file.cpp
@@ -3382,10 +3605,6 @@ msgid "Height select noise"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "High-precision FPU"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Hill steepness"
msgstr ""
@@ -3616,8 +3835,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"If disabled, \"special\" key is used to fly fast if both fly and fast mode "
-"are\n"
+"If disabled, \"Aux1\" key is used to fly fast if both fly and fast mode are\n"
"enabled."
msgstr ""
@@ -3639,8 +3857,8 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"If enabled, \"special\" key instead of \"sneak\" key is used for climbing "
-"down and\n"
+"If enabled, \"Aux1\" key instead of \"Sneak\" key is used for climbing down "
+"and\n"
"descending."
msgstr ""
@@ -3686,6 +3904,12 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"If the execution of a chat command takes longer than this specified time in\n"
+"seconds, add the time information to the chat command message"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"If the file size of debug.txt exceeds the number of megabytes specified in\n"
"this setting when it is opened, the file is moved to debug.txt.1,\n"
"deleting an older debug.txt.1 if it exists.\n"
@@ -3731,7 +3955,7 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Instrument chatcommands on registration."
+msgid "Instrument chat commands on registration."
msgstr ""
#: src/settings_translation_file.cpp
@@ -3816,7 +4040,7 @@ msgstr ""
#: src/settings_translation_file.cpp
#, fuzzy
-msgid "Joystick deadzone"
+msgid "Joystick dead zone"
msgstr "Joystick mota"
#: src/settings_translation_file.cpp
@@ -4606,10 +4830,6 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Makes DirectX work with LuaJIT. Disable if it causes troubles."
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Makes all liquids opaque"
msgstr ""
@@ -4681,6 +4901,10 @@ msgid "Map save interval"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Map shadows update frames"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Mapblock limit"
msgstr ""
@@ -4789,6 +5013,10 @@ msgid "Maximum FPS when the window is not focused, or when the game is paused."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Maximum distance to render shadows."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Maximum forceloaded blocks"
msgstr ""
@@ -4894,7 +5122,15 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Maximum time in ms a file download (e.g. a mod download) may take."
+msgid ""
+"Maximum time a file download (e.g. a mod download) may take, stated in "
+"milliseconds."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum time an interactive request (e.g. server list fetch) may take, "
+"stated in milliseconds."
msgstr ""
#: src/settings_translation_file.cpp
@@ -4958,7 +5194,7 @@ msgid "Mod channels"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Modifies the size of the hudbar elements."
+msgid "Modifies the size of the HUD elements."
msgstr ""
#: src/settings_translation_file.cpp
@@ -4970,6 +5206,10 @@ msgid "Monospace font size"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Monospace font size divisible by"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Mountain height noise"
msgstr ""
@@ -5090,7 +5330,7 @@ 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"
+"This is a trade-off between SQLite transaction overhead and\n"
"memory consumption (4096=100MB, as a rule of thumb)."
msgstr ""
@@ -5109,21 +5349,18 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Opaqueness (alpha) of the shadow behind the fallback font, between 0 and 255."
-msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid ""
"Open the pause menu when the window's focus is lost. Does not pause if a "
"formspec is\n"
"open."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Optional override for chat weblink color."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid ""
-"Path of the fallback font.\n"
-"If “freetype†setting is enabled: Must be a TrueType font.\n"
-"If “freetype†setting is disabled: Must be a bitmap or XML vectors font.\n"
+"Path of the fallback font. Must be a TrueType font.\n"
"This font will be used for certain languages or if the default font is "
"unavailable."
msgstr ""
@@ -5146,17 +5383,13 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Path to the default font.\n"
-"If “freetype†setting is enabled: Must be a TrueType font.\n"
-"If “freetype†setting is disabled: Must be a bitmap or XML vectors font.\n"
+"Path to the default font. Must be a TrueType font.\n"
"The fallback font will be used if the font cannot be loaded."
msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Path to the monospace font.\n"
-"If “freetype†setting is enabled: Must be a TrueType font.\n"
-"If “freetype†setting is disabled: Must be a bitmap or XML vectors font.\n"
+"Path to the monospace font. Must be a TrueType font.\n"
"This font is used for e.g. the console and profiler screen."
msgstr ""
@@ -5212,6 +5445,10 @@ msgid "Player versus player"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Poisson filtering"
+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."
@@ -5256,9 +5493,9 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"Prometheus listener address.\n"
-"If minetest is compiled with ENABLE_PROMETHEUS option enabled,\n"
+"If Minetest is compiled with ENABLE_PROMETHEUS option enabled,\n"
"enable metrics listener for Prometheus on that address.\n"
-"Metrics can be fetch on http://127.0.0.1:30000/metrics"
+"Metrics can be fetched on http://127.0.0.1:30000/metrics"
msgstr ""
#: src/settings_translation_file.cpp
@@ -5547,6 +5784,32 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Set the shadow strength.\n"
+"Lower value means lighter shadows, higher value means darker shadows."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set the soft shadow radius size.\n"
+"Lower values mean sharper shadows, bigger values mean softer shadows.\n"
+"Minimum value: 1.0; maximum value: 10.0"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set the tilt of Sun/Moon orbit in degrees.\n"
+"Value of 0 means no tilt / vertical orbit.\n"
+"Minimum value: 0.0; maximum value: 60.0"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set to true to enable Shadow Mapping.\n"
+"Requires shaders to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Set to true to enable waving leaves.\n"
"Requires shaders to be enabled."
msgstr ""
@@ -5564,6 +5827,13 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Sets shadow texture quality to 32 bits.\n"
+"On false, 16 bits texture will be used.\n"
+"This can cause much more artifacts in the shadow."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Shader path"
msgstr ""
@@ -5576,15 +5846,29 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Shadow filter quality"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Shadow map max distance in nodes to render shadows"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Shadow map texture in 32 bits"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Shadow map texture size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid ""
"Shadow offset (in pixels) of the default font. If 0, then shadow will not be "
"drawn."
msgstr ""
#: src/settings_translation_file.cpp
-msgid ""
-"Shadow offset (in pixels) of the fallback font. If 0, then shadow will not "
-"be drawn."
+msgid "Shadow strength"
msgstr ""
#: src/settings_translation_file.cpp
@@ -5606,7 +5890,7 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Show nametag backgrounds by default"
+msgid "Show name tag backgrounds by default"
msgstr ""
#: src/settings_translation_file.cpp
@@ -5631,6 +5915,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Sky Body Orbit Tilt"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Slice w"
msgstr ""
@@ -5685,15 +5973,11 @@ msgid "Sneaking speed, in nodes per second."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Sound"
+msgid "Soft shadow radius"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Special key"
-msgstr "Berezia tekla"
-
-#: src/settings_translation_file.cpp
-msgid "Special key for climbing/descending"
+msgid "Sound"
msgstr ""
#: src/settings_translation_file.cpp
@@ -5713,6 +5997,14 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Spread a complete update of shadow map over given amount of frames.\n"
+"Higher values might make shadows laggy, lower values\n"
+"will consume more resources.\n"
+"Minimum value: 1; maximum value: 16"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Spread of light curve boost range.\n"
"Controls the width of the range to be boosted.\n"
"Standard deviation of the light curve boost Gaussian."
@@ -5819,6 +6111,13 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Texture size to render the shadow map on.\n"
+"This must be a power of two.\n"
+"Bigger numbers create better shadows but it is also more expensive."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Textures on a node may be aligned either to the node or to the world.\n"
"The former mode suits better things like machines, furniture, etc., while\n"
"the latter makes stairs and microblocks fit surroundings better.\n"
@@ -5833,7 +6132,7 @@ msgstr "Eduki biltegiaren URL helbidea"
#: src/settings_translation_file.cpp
#, fuzzy
-msgid "The deadzone of the joystick"
+msgid "The dead zone of the joystick"
msgstr "Joystick mota"
#: src/settings_translation_file.cpp
@@ -5893,7 +6192,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"The rendering back-end for Irrlicht.\n"
+"The rendering back-end.\n"
"A restart is required after changing this.\n"
"Note: On Android, stick with OGLES1 if unsure! App may fail to start "
"otherwise.\n"
@@ -5904,7 +6203,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"The sensitivity of the joystick axes for moving the\n"
-"ingame view frustum around."
+"in-game view frustum around."
msgstr ""
#: src/settings_translation_file.cpp
@@ -6001,6 +6300,10 @@ msgid "Touch screen threshold"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Tradeoffs for performance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Trees noise"
msgstr ""
@@ -6070,7 +6373,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Use mip mapping to scale textures. May slightly increase performance,\n"
+"Use mipmapping to scale textures. May slightly increase performance,\n"
"especially when using a high resolution texture pack.\n"
"Gamma correct downscaling is not supported."
msgstr ""
@@ -6183,7 +6486,7 @@ msgid "Viewing range"
msgstr "Ikusmen barrutia"
#: src/settings_translation_file.cpp
-msgid "Virtual joystick triggers aux button"
+msgid "Virtual joystick triggers Aux1 button"
msgstr ""
#: src/settings_translation_file.cpp
@@ -6254,6 +6557,10 @@ msgid "Waving plants"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Weblink color"
+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"
@@ -6274,23 +6581,15 @@ msgid ""
"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.\n"
+"memory. Powers of 2 are recommended. This setting is ONLY applied if\n"
+"bilinear/trilinear/anisotropic filtering is enabled.\n"
"This is also used as the base node texture size for world-aligned\n"
"texture autoscaling."
msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Whether FreeType fonts are used, requires FreeType support to be compiled "
-"in.\n"
-"If disabled, bitmap and XML vectors fonts are used instead."
-msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid ""
-"Whether nametag backgrounds should be shown by default.\n"
+"Whether name tag backgrounds should be shown by default.\n"
"Mods may still set a background."
msgstr ""
@@ -6334,7 +6633,7 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Width component of the initial window size."
+msgid "Width component of the initial window size. Ignored in fullscreen mode."
msgstr ""
#: src/settings_translation_file.cpp
@@ -6419,34 +6718,23 @@ msgid "Y-level of seabed."
msgstr ""
#: src/settings_translation_file.cpp
-msgid ""
-"ZLib compression level to use when saving mapblocks to disk.\n"
-"-1 - Zlib's default compression level\n"
-"0 - no compresson, fastest\n"
-"9 - best compression, slowest\n"
-"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)"
-msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid ""
-"ZLib compression level to use when sending mapblocks to the client.\n"
-"-1 - Zlib's default compression level\n"
-"0 - no compresson, fastest\n"
-"9 - best compression, slowest\n"
-"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)"
+msgid "cURL file download timeout"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "cURL file download timeout"
-msgstr ""
+#, fuzzy
+msgid "cURL interactive timeout"
+msgstr "cURL-en denbora muga"
#: src/settings_translation_file.cpp
msgid "cURL parallel limit"
msgstr ""
-#: src/settings_translation_file.cpp
-msgid "cURL timeout"
-msgstr "cURL-en denbora muga"
+#~ msgid "- Creative Mode: "
+#~ msgstr "- Sormen modua: "
+
+#~ msgid "- Damage: "
+#~ msgstr "- Kaltea: "
#~ msgid "Back"
#~ msgstr "Atzera"
@@ -6454,8 +6742,27 @@ msgstr "cURL-en denbora muga"
#~ msgid "Configure"
#~ msgstr "Konfiguratu"
+#~ msgid "Credits"
+#~ msgstr "Kredituak"
+
#~ msgid "Downloading and installing $1, please wait..."
#~ msgstr "$1 deskargatu eta instalatzen, itxaron mesedez..."
+#~ msgid "Install: file: \"$1\""
+#~ msgstr "Instalakuntza: fitxategia: \"$1\""
+
#~ msgid "Ok"
#~ msgstr "Ados"
+
+#~ msgid "Special"
+#~ msgstr "Berezia"
+
+#~ msgid "Special key"
+#~ msgstr "Berezia tekla"
+
+#, fuzzy
+#~ msgid "You died."
+#~ msgstr "Hil zara"
+
+#~ msgid "needs_fallback_font"
+#~ msgstr "no"
diff --git a/po/fi/minetest.po b/po/fi/minetest.po
index f6832efe3..3639a255c 100644
--- a/po/fi/minetest.po
+++ b/po/fi/minetest.po
@@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: minetest\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-02-23 19:03+0100\n"
-"PO-Revision-Date: 2021-04-10 15:49+0000\n"
+"POT-Creation-Date: 2022-01-25 23:19+0100\n"
+"PO-Revision-Date: 2021-09-19 07:38+0000\n"
"Last-Translator: Markus Mikkonen <markus.mikkonen@outlook.com>\n"
"Language-Team: Finnish <https://hosted.weblate.org/projects/minetest/"
"minetest/fi/>\n"
@@ -17,7 +17,43 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 4.6-dev\n"
+"X-Generator: Weblate 4.9-dev\n"
+
+#: builtin/client/chatcommands.lua
+msgid "Clear the out chat queue"
+msgstr "Tyhjennä keskustelujono"
+
+#: builtin/client/chatcommands.lua
+msgid "Empty command."
+msgstr "Tyhjä komento."
+
+#: builtin/client/chatcommands.lua
+msgid "Exit to main menu"
+msgstr "Poistu päävalikkoon"
+
+#: builtin/client/chatcommands.lua
+msgid "Invalid command: "
+msgstr "Virheellinen komento: "
+
+#: builtin/client/chatcommands.lua
+msgid "Issued command: "
+msgstr "Annettu komento: "
+
+#: builtin/client/chatcommands.lua
+msgid "List online players"
+msgstr "Listaa verkkopelaajat"
+
+#: builtin/client/chatcommands.lua
+msgid "Online players: "
+msgstr "Verkkopelaajat: "
+
+#: builtin/client/chatcommands.lua
+msgid "The out chat queue is now empty."
+msgstr "Keskustelujono on nyt tyhjä."
+
+#: builtin/client/chatcommands.lua
+msgid "This command is disabled by server."
+msgstr "Palvelin on poistanut komennon käytöstä."
#: builtin/client/death_formspec.lua src/client/game.cpp
msgid "Respawn"
@@ -27,11 +63,43 @@ msgstr "Synny uudelleen"
msgid "You died"
msgstr "Kuolit"
+#: builtin/common/chatcommands.lua
+msgid "Available commands:"
+msgstr "Käytettävissä olevat komennot:"
+
+#: builtin/common/chatcommands.lua
+msgid "Available commands: "
+msgstr "Käytettävissä olevat komennot: "
+
+#: builtin/common/chatcommands.lua
+msgid "Command not available: "
+msgstr "Komento ei ole käytettävissä: "
+
+#: builtin/common/chatcommands.lua
+msgid "Get help for commands"
+msgstr "Ohjeita komentojen käyttöön"
+
+#: builtin/common/chatcommands.lua
+msgid ""
+"Use '.help <cmd>' to get more information, or '.help all' to list everything."
+msgstr ""
+"Käytä '.help <cmd>' saadaksesi lisätietoja komennosta, tai '.help all' "
+"listataksesi kaiken."
+
+#: builtin/common/chatcommands.lua
+msgid "[all | <cmd>]"
+msgstr ""
+
#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp
msgid "OK"
msgstr "OK"
#: builtin/fstk/ui.lua
+#, fuzzy
+msgid "<none available>"
+msgstr "Komento ei ole käytettävissä: "
+
+#: builtin/fstk/ui.lua
msgid "An error occurred in a Lua script:"
msgstr "Lua-skriptissä tapahtui virhe:"
@@ -129,7 +197,7 @@ msgstr "Pelin kuvausta ei ole annettu."
#: builtin/mainmenu/dlg_config_world.lua
msgid "No hard dependencies"
-msgstr ""
+msgstr "Ei kovia riippuvuuksia"
#: builtin/mainmenu/dlg_config_world.lua
msgid "No modpack description provided."
@@ -158,7 +226,7 @@ msgstr "käytössä"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "\"$1\" already exists. Would you like to overwrite it?"
-msgstr ""
+msgstr "\"$1\" on jo olemassa. Haluatko korvata sen?"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "$1 and $2 dependencies will be installed."
@@ -196,11 +264,11 @@ msgstr "Asennettu jo"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Back to Main Menu"
-msgstr "Takaisin päävalikkoon"
+msgstr "Palaa päävalikkoon"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Base Game:"
-msgstr ""
+msgstr "Peruspeli:"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "ContentDB is not available when Minetest was compiled without cURL"
@@ -221,7 +289,7 @@ msgstr "Pelit"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Install"
-msgstr "Asenna"
+msgstr "Asentaa"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Install $1"
@@ -232,13 +300,17 @@ msgid "Install missing dependencies"
msgstr "Asenna puuttuvat riippuvuudet"
#: builtin/mainmenu/dlg_contentstore.lua
+msgid "Install: Unsupported file type or broken archive"
+msgstr ""
+
+#: builtin/mainmenu/dlg_contentstore.lua
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Mods"
msgstr "Modit"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "No packages could be retrieved"
-msgstr ""
+msgstr "Paketteja ei voitu noutaa"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "No results"
@@ -250,7 +322,7 @@ msgstr "Ei päivityksiä"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Not found"
-msgstr ""
+msgstr "Ei löytynyt"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Overwrite"
@@ -262,7 +334,7 @@ msgstr ""
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Queued"
-msgstr ""
+msgstr "Jonotettu"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Texture packs"
@@ -282,7 +354,7 @@ msgstr "Päivitä kaikki [$1]"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "View more information in a web browser"
-msgstr ""
+msgstr "Katso lisätietoja verkkoselaimessa"
#: builtin/mainmenu/dlg_create_world.lua
msgid "A world named \"$1\" already exists"
@@ -370,7 +442,7 @@ msgstr ""
#: builtin/mainmenu/dlg_create_world.lua
msgid "Lakes"
-msgstr ""
+msgstr "Järvet"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Low humidity and high heat causes shallow or dry rivers"
@@ -382,11 +454,11 @@ msgstr ""
#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
msgid "Mapgen flags"
-msgstr ""
+msgstr "Mapgen-valitsimet"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Mapgen-specific flags"
-msgstr ""
+msgstr "Mapgen-spesifit valitsimet"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Mountains"
@@ -414,7 +486,7 @@ msgstr ""
#: builtin/mainmenu/dlg_create_world.lua
msgid "Rivers"
-msgstr ""
+msgstr "Joet"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Sea level rivers"
@@ -469,7 +541,7 @@ msgstr ""
#: builtin/mainmenu/dlg_create_world.lua
msgid "Warning: The Development Test is meant for developers."
-msgstr ""
+msgstr "Varoitus: Development Test on tarkoitettu kehittäjille."
#: builtin/mainmenu/dlg_create_world.lua
msgid "World name"
@@ -491,11 +563,11 @@ msgstr "Poista"
#: builtin/mainmenu/dlg_delete_content.lua
msgid "pkgmgr: failed to delete \"$1\""
-msgstr ""
+msgstr "pkgmgr: kohteen \"$1\" poistaminen epäonnistui"
#: builtin/mainmenu/dlg_delete_content.lua
msgid "pkgmgr: invalid path \"$1\""
-msgstr ""
+msgstr "pkgmgr: virheellinen polku \"$1\""
#: builtin/mainmenu/dlg_delete_world.lua
msgid "Delete World \"$1\"?"
@@ -507,7 +579,7 @@ msgstr "Hyväksy"
#: builtin/mainmenu/dlg_rename_modpack.lua
msgid "Rename Modpack:"
-msgstr ""
+msgstr "Nimeä modipaketti uudelleen:"
#: builtin/mainmenu/dlg_rename_modpack.lua
msgid ""
@@ -525,13 +597,13 @@ msgstr ""
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "< Back to Settings page"
-msgstr "< Takaisin asetussivulle"
+msgstr "< Palaa asetussivulle"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Browse"
msgstr "Selaa"
-#: builtin/mainmenu/dlg_settings_advanced.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_settings.lua
msgid "Disabled"
msgstr "Poistettu käytöstä"
@@ -556,26 +628,26 @@ msgid "Offset"
msgstr ""
#: builtin/mainmenu/dlg_settings_advanced.lua
-msgid "Persistance"
+msgid "Persistence"
msgstr ""
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Please enter a valid integer."
-msgstr ""
+msgstr "Anna kelvollinen kokonaisuluku."
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Please enter a valid number."
-msgstr ""
+msgstr "Anna kelvollinen numero."
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Restore Default"
-msgstr ""
+msgstr "Palauta oletus"
#: builtin/mainmenu/dlg_settings_advanced.lua src/settings_translation_file.cpp
msgid "Scale"
msgstr ""
-#: builtin/mainmenu/dlg_settings_advanced.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_online.lua
msgid "Search"
msgstr "Etsi"
@@ -593,11 +665,11 @@ msgstr "Näytä tekniset nimet"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "The value must be at least $1."
-msgstr ""
+msgstr "Arvon tulee olla vähintään $1."
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "The value must not be larger than $1."
-msgstr ""
+msgstr "Arvo ei saa olla suurempi kuin $1."
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "X"
@@ -652,7 +724,7 @@ msgstr "$1 (Käytössä)"
#: builtin/mainmenu/pkgmgr.lua
msgid "$1 mods"
-msgstr ""
+msgstr "$1 modia"
#: builtin/mainmenu/pkgmgr.lua
msgid "Failed to install $1 to $2"
@@ -667,14 +739,6 @@ msgid "Install Mod: Unable to find suitable folder name for modpack $1"
msgstr ""
#: builtin/mainmenu/pkgmgr.lua
-msgid "Install: Unsupported file type \"$1\" or broken archive"
-msgstr ""
-
-#: builtin/mainmenu/pkgmgr.lua
-msgid "Install: file: \"$1\""
-msgstr ""
-
-#: builtin/mainmenu/pkgmgr.lua
msgid "Unable to find a valid mod or modpack"
msgstr ""
@@ -700,7 +764,7 @@ msgstr "Ladataan..."
#: builtin/mainmenu/serverlistmgr.lua
msgid "Public server list is disabled"
-msgstr ""
+msgstr "Julkinen palvelinlista on pois käytöstä"
#: builtin/mainmenu/serverlistmgr.lua
msgid "Try reenabling public serverlist and check your internet connection."
@@ -708,13 +772,47 @@ msgstr ""
"Kokeile ottaa julkinen palvelinlista uudelleen käyttöön ja tarkista "
"internetyhteytesi."
+#: builtin/mainmenu/tab_about.lua
+msgid "About"
+msgstr "Tietoja"
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Active Contributors"
+msgstr ""
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Active renderer:"
+msgstr ""
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Core Developers"
+msgstr ""
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Open User Data Directory"
+msgstr "Avaa käyttäjätietohakemisto"
+
+#: builtin/mainmenu/tab_about.lua
+msgid ""
+"Opens the directory that contains user-provided worlds, games, mods,\n"
+"and texture packs in a file manager / explorer."
+msgstr ""
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Previous Contributors"
+msgstr ""
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Previous Core Developers"
+msgstr ""
+
#: builtin/mainmenu/tab_content.lua
msgid "Browse online content"
-msgstr ""
+msgstr "Selaa sisältöä verkossa"
#: builtin/mainmenu/tab_content.lua
msgid "Content"
-msgstr ""
+msgstr "Sisältö"
#: builtin/mainmenu/tab_content.lua
msgid "Disable Texture Pack"
@@ -722,7 +820,7 @@ msgstr "Poista tekstuuripaketti käytöstä"
#: builtin/mainmenu/tab_content.lua
msgid "Information:"
-msgstr ""
+msgstr "Tietoja:"
#: builtin/mainmenu/tab_content.lua
msgid "Installed Packages:"
@@ -748,43 +846,13 @@ msgstr "Poista paketti"
msgid "Use Texture Pack"
msgstr "Käytä tekstuuripakettia"
-#: 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 "Open User Data Directory"
-msgstr ""
-
-#: builtin/mainmenu/tab_credits.lua
-msgid ""
-"Opens the directory that contains user-provided worlds, games, mods,\n"
-"and texture packs in a file manager / explorer."
-msgstr ""
-
-#: builtin/mainmenu/tab_credits.lua
-msgid "Previous Contributors"
-msgstr ""
-
-#: builtin/mainmenu/tab_credits.lua
-msgid "Previous Core Developers"
-msgstr ""
-
#: builtin/mainmenu/tab_local.lua
msgid "Announce Server"
-msgstr ""
+msgstr "Ilmoita palvelin"
#: builtin/mainmenu/tab_local.lua
msgid "Bind Address"
-msgstr ""
+msgstr "Sido osoite"
#: builtin/mainmenu/tab_local.lua
msgid "Creative Mode"
@@ -792,23 +860,23 @@ msgstr "Luova tila"
#: builtin/mainmenu/tab_local.lua
msgid "Enable Damage"
-msgstr ""
+msgstr "Ota vahinko käyttöön"
#: builtin/mainmenu/tab_local.lua
msgid "Host Game"
-msgstr ""
+msgstr "Isännöi peli"
#: builtin/mainmenu/tab_local.lua
msgid "Host Server"
-msgstr ""
+msgstr "Isännöi palvelin"
#: builtin/mainmenu/tab_local.lua
msgid "Install games from ContentDB"
-msgstr ""
+msgstr "Asenna pelejä ContentDB:stä"
-#: builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
msgid "Name"
-msgstr ""
+msgstr "Nimi"
#: builtin/mainmenu/tab_local.lua
msgid "New"
@@ -816,23 +884,23 @@ msgstr "Uusi"
#: builtin/mainmenu/tab_local.lua
msgid "No world created or selected!"
-msgstr ""
+msgstr "Maailmaa ei ole luotu tai valittu!"
-#: builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
msgid "Password"
-msgstr ""
+msgstr "Salasana"
#: builtin/mainmenu/tab_local.lua
msgid "Play Game"
msgstr "Pelaa peliä"
-#: builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
msgid "Port"
msgstr "Portti"
#: builtin/mainmenu/tab_local.lua
msgid "Select Mods"
-msgstr ""
+msgstr "Valitse modit"
#: builtin/mainmenu/tab_local.lua
msgid "Select World:"
@@ -840,15 +908,19 @@ msgstr "Valitse maailma:"
#: builtin/mainmenu/tab_local.lua
msgid "Server Port"
-msgstr ""
+msgstr "Palvelimen portti"
#: builtin/mainmenu/tab_local.lua
msgid "Start Game"
-msgstr ""
+msgstr "Aloita peli"
#: builtin/mainmenu/tab_online.lua
-msgid "Address / Port"
-msgstr "Osoite / Portti"
+msgid "Address"
+msgstr "Osoite"
+
+#: builtin/mainmenu/tab_online.lua src/client/keycode.cpp
+msgid "Clear"
+msgstr "Tyhjennä"
#: builtin/mainmenu/tab_online.lua
msgid "Connect"
@@ -858,34 +930,42 @@ msgstr "Yhdistä"
msgid "Creative mode"
msgstr "Luova tila"
+#. ~ PvP = Player versus Player
#: builtin/mainmenu/tab_online.lua
-msgid "Damage enabled"
-msgstr ""
+msgid "Damage / PvP"
+msgstr "Vahinko / PvP"
#: builtin/mainmenu/tab_online.lua
msgid "Del. Favorite"
msgstr ""
#: builtin/mainmenu/tab_online.lua
-msgid "Favorite"
-msgstr "Suosikki"
+msgid "Favorites"
+msgstr "Suosikit"
#: builtin/mainmenu/tab_online.lua
-msgid "Join Game"
-msgstr "Liity peliin"
+msgid "Incompatible Servers"
+msgstr "Palvelimet eivät ole yhteensopivat"
#: builtin/mainmenu/tab_online.lua
-msgid "Name / Password"
-msgstr "Nimi / Salasana"
+msgid "Join Game"
+msgstr "Liity peliin"
#: builtin/mainmenu/tab_online.lua
msgid "Ping"
msgstr "Viive"
-#. ~ PvP = Player versus Player
#: builtin/mainmenu/tab_online.lua
-msgid "PvP enabled"
-msgstr ""
+msgid "Public Servers"
+msgstr "Julkiset palvelimet"
+
+#: builtin/mainmenu/tab_online.lua
+msgid "Refresh"
+msgstr "Päivitä"
+
+#: builtin/mainmenu/tab_online.lua
+msgid "Server Description"
+msgstr "Palvelimen kuvaus"
#: builtin/mainmenu/tab_settings.lua
msgid "2x"
@@ -893,7 +973,7 @@ msgstr "2x"
#: builtin/mainmenu/tab_settings.lua
msgid "3D Clouds"
-msgstr ""
+msgstr "3D-pilvet"
#: builtin/mainmenu/tab_settings.lua
msgid "4x"
@@ -909,29 +989,49 @@ msgstr "Kaikki asetukset"
#: builtin/mainmenu/tab_settings.lua
msgid "Antialiasing:"
-msgstr ""
+msgstr "Reunanpehmennys:"
#: builtin/mainmenu/tab_settings.lua
msgid "Autosave Screen Size"
-msgstr ""
+msgstr "Tallenna näytön koko automaattisesti"
#: builtin/mainmenu/tab_settings.lua
msgid "Bilinear Filter"
-msgstr ""
+msgstr "Bilineaarinen suodatus"
#: builtin/mainmenu/tab_settings.lua src/client/game.cpp
msgid "Change Keys"
-msgstr ""
+msgstr "Näppäinasetukset"
#: builtin/mainmenu/tab_settings.lua
msgid "Connected Glass"
msgstr ""
+#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
+msgid "Dynamic shadows"
+msgstr "Dynaamiset varjot"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Dynamic shadows: "
+msgstr "Dynaamiset varjot: "
+
#: builtin/mainmenu/tab_settings.lua
msgid "Fancy Leaves"
msgstr "Hienot lehdet"
#: builtin/mainmenu/tab_settings.lua
+msgid "High"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Low"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Medium"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
msgid "Mipmap"
msgstr ""
@@ -941,7 +1041,7 @@ msgstr ""
#: builtin/mainmenu/tab_settings.lua
msgid "No Filter"
-msgstr ""
+msgstr "Ei suodatinta"
#: builtin/mainmenu/tab_settings.lua
msgid "No Mipmap"
@@ -965,7 +1065,7 @@ msgstr ""
#: builtin/mainmenu/tab_settings.lua
msgid "Opaque Water"
-msgstr ""
+msgstr "Läpinäkymätön vesi"
#: builtin/mainmenu/tab_settings.lua
msgid "Particles"
@@ -973,7 +1073,7 @@ msgstr "Partikkelit"
#: builtin/mainmenu/tab_settings.lua
msgid "Screen:"
-msgstr ""
+msgstr "Näyttö:"
#: builtin/mainmenu/tab_settings.lua
msgid "Settings"
@@ -981,15 +1081,15 @@ msgstr "Asetukset"
#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
msgid "Shaders"
-msgstr ""
+msgstr "Varjostimet"
#: builtin/mainmenu/tab_settings.lua
msgid "Shaders (experimental)"
-msgstr ""
+msgstr "Varjostimet (kokeellinen)"
#: builtin/mainmenu/tab_settings.lua
msgid "Shaders (unavailable)"
-msgstr ""
+msgstr "Varjostimet (ei käytettävissä)"
#: builtin/mainmenu/tab_settings.lua
msgid "Simple Leaves"
@@ -997,15 +1097,11 @@ msgstr ""
#: builtin/mainmenu/tab_settings.lua
msgid "Smooth Lighting"
-msgstr ""
+msgstr "Tasainen valaistus"
#: builtin/mainmenu/tab_settings.lua
msgid "Texturing:"
-msgstr ""
-
-#: builtin/mainmenu/tab_settings.lua
-msgid "To enable shaders the OpenGL driver needs to be used."
-msgstr ""
+msgstr "Teksturointi:"
#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
msgid "Tone Mapping"
@@ -1020,6 +1116,14 @@ msgid "Trilinear Filter"
msgstr ""
#: builtin/mainmenu/tab_settings.lua
+msgid "Ultra High"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Very Low"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
msgid "Waving Leaves"
msgstr ""
@@ -1031,13 +1135,13 @@ msgstr ""
msgid "Waving Plants"
msgstr ""
-#: src/client/client.cpp
+#: src/client/client.cpp src/client/game.cpp
msgid "Connection timed out."
-msgstr ""
+msgstr "Yhteys aikakatkaistiin."
#: src/client/client.cpp
msgid "Done!"
-msgstr ""
+msgstr "Valmis!"
#: src/client/client.cpp
msgid "Initializing nodes"
@@ -1053,14 +1157,14 @@ msgstr "Ladataan tekstuureja..."
#: src/client/client.cpp
msgid "Rebuilding shaders..."
-msgstr ""
+msgstr "Rakennetaan uudelleen varjostimia..."
#: src/client/clientlauncher.cpp
msgid "Connection error (timed out?)"
msgstr ""
#: src/client/clientlauncher.cpp
-msgid "Could not find or load game \""
+msgid "Could not find or load game: "
msgstr ""
#: src/client/clientlauncher.cpp
@@ -1069,7 +1173,7 @@ msgstr ""
#: src/client/clientlauncher.cpp
msgid "Main Menu"
-msgstr ""
+msgstr "Päävalikko"
#: src/client/clientlauncher.cpp
msgid "No world selected and no address provided. Nothing to do."
@@ -1077,11 +1181,11 @@ msgstr ""
#: src/client/clientlauncher.cpp
msgid "Player name too long."
-msgstr ""
+msgstr "Pelaajan nimi on liian pitkä."
#: src/client/clientlauncher.cpp
msgid "Please choose a name!"
-msgstr ""
+msgstr "Valitse nimi!"
#: src/client/clientlauncher.cpp
msgid "Provided password file failed to open: "
@@ -1091,18 +1195,6 @@ msgstr ""
msgid "Provided world path doesn't exist: "
msgstr ""
-#. ~ DO NOT TRANSLATE THIS LITERALLY!
-#. This is a special string. Put either "no" or "yes"
-#. into the translation field (literally).
-#. Choose "yes" if the language requires use of the fallback
-#. font, "no" otherwise.
-#. The fallback font is (normally) required for languages with
-#. non-Latin script, like Chinese.
-#. When in doubt, test your translation.
-#: src/client/fontengine.cpp
-msgid "needs_fallback_font"
-msgstr "no"
-
#: src/client/game.cpp
msgid ""
"\n"
@@ -1111,35 +1203,37 @@ msgstr ""
#: src/client/game.cpp
msgid "- Address: "
-msgstr ""
-
-#: src/client/game.cpp
-msgid "- Creative Mode: "
-msgstr ""
-
-#: src/client/game.cpp
-msgid "- Damage: "
-msgstr ""
+msgstr "- Osoite: "
#: src/client/game.cpp
msgid "- Mode: "
-msgstr ""
+msgstr "- Tila: "
#: src/client/game.cpp
msgid "- Port: "
-msgstr ""
+msgstr "- Portti: "
#: src/client/game.cpp
msgid "- Public: "
-msgstr ""
+msgstr "- Julkinen: "
#. ~ PvP = Player versus Player
#: src/client/game.cpp
msgid "- PvP: "
-msgstr ""
+msgstr "- PvP: "
#: src/client/game.cpp
msgid "- Server Name: "
+msgstr "- Palvelimen nimi: "
+
+#: src/client/game.cpp
+#, fuzzy
+msgid "A serialization error occurred:"
+msgstr "Tapahtui virhe:"
+
+#: src/client/game.cpp
+#, c-format
+msgid "Access denied. Reason: %s"
msgstr ""
#: src/client/game.cpp
@@ -1151,6 +1245,22 @@ msgid "Automatic forward enabled"
msgstr ""
#: src/client/game.cpp
+msgid "Block bounds hidden"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Block bounds shown for all blocks"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Block bounds shown for current block"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Block bounds shown for nearby blocks"
+msgstr ""
+
+#: src/client/game.cpp
msgid "Camera update disabled"
msgstr ""
@@ -1159,10 +1269,14 @@ msgid "Camera update enabled"
msgstr ""
#: src/client/game.cpp
-msgid "Change Password"
+msgid "Can't show block bounds (need 'basic_debug' privilege)"
msgstr ""
#: src/client/game.cpp
+msgid "Change Password"
+msgstr "Vaihda salasana"
+
+#: src/client/game.cpp
msgid "Cinematic mode disabled"
msgstr ""
@@ -1171,16 +1285,24 @@ msgid "Cinematic mode enabled"
msgstr ""
#: src/client/game.cpp
+msgid "Client disconnected"
+msgstr ""
+
+#: src/client/game.cpp
msgid "Client side scripting is disabled"
msgstr ""
#: src/client/game.cpp
msgid "Connecting to server..."
+msgstr "Yhdistetään palvelimeen..."
+
+#: src/client/game.cpp
+msgid "Connection failed for unknown reason"
msgstr ""
#: src/client/game.cpp
msgid "Continue"
-msgstr ""
+msgstr "Jatka"
#: src/client/game.cpp
#, c-format
@@ -1202,12 +1324,17 @@ msgid ""
msgstr ""
#: src/client/game.cpp
-msgid "Creating client..."
+#, c-format
+msgid "Couldn't resolve address: %s"
msgstr ""
#: src/client/game.cpp
+msgid "Creating client..."
+msgstr "Luodaan asiakasta..."
+
+#: src/client/game.cpp
msgid "Creating server..."
-msgstr ""
+msgstr "Luodaan palvelinta..."
#: src/client/game.cpp
msgid "Debug info and profiler graph hidden"
@@ -1247,11 +1374,11 @@ msgstr ""
#: src/client/game.cpp
msgid "Exit to Menu"
-msgstr ""
+msgstr "Poistu valikkoon"
#: src/client/game.cpp
msgid "Exit to OS"
-msgstr ""
+msgstr "Poistu käyttöjärjestelmään"
#: src/client/game.cpp
msgid "Fast mode disabled"
@@ -1267,11 +1394,11 @@ msgstr ""
#: src/client/game.cpp
msgid "Fly mode disabled"
-msgstr ""
+msgstr "Lentotila pois käytöstä"
#: src/client/game.cpp
msgid "Fly mode enabled"
-msgstr ""
+msgstr "Lentotila käytössä"
#: src/client/game.cpp
msgid "Fly mode enabled (note: no 'fly' privilege)"
@@ -1279,19 +1406,19 @@ msgstr ""
#: src/client/game.cpp
msgid "Fog disabled"
-msgstr ""
+msgstr "Sumu pois käytöstä"
#: src/client/game.cpp
msgid "Fog enabled"
-msgstr ""
+msgstr "Sumu käytössä"
#: src/client/game.cpp
msgid "Game info:"
-msgstr ""
+msgstr "Pelin tiedot:"
#: src/client/game.cpp
msgid "Game paused"
-msgstr ""
+msgstr "Peli keskeytetty"
#: src/client/game.cpp
msgid "Hosting server"
@@ -1318,6 +1445,10 @@ msgid "Minimap currently disabled by game or mod"
msgstr ""
#: src/client/game.cpp
+msgid "Multiplayer"
+msgstr ""
+
+#: src/client/game.cpp
msgid "Noclip mode disabled"
msgstr ""
@@ -1335,11 +1466,11 @@ msgstr ""
#: src/client/game.cpp
msgid "Off"
-msgstr ""
+msgstr "Pois"
#: src/client/game.cpp
msgid "On"
-msgstr ""
+msgstr "Päällä"
#: src/client/game.cpp
msgid "Pitch move mode disabled"
@@ -1355,27 +1486,27 @@ msgstr ""
#: src/client/game.cpp
msgid "Remote server"
-msgstr ""
+msgstr "Etäpalvelin"
#: src/client/game.cpp
msgid "Resolving address..."
-msgstr ""
+msgstr "Selvitetään osoitetta..."
#: src/client/game.cpp
msgid "Shutting down..."
-msgstr ""
+msgstr "Sammutetaan..."
#: src/client/game.cpp
msgid "Singleplayer"
-msgstr ""
+msgstr "Yksinpeli"
#: src/client/game.cpp
msgid "Sound Volume"
-msgstr ""
+msgstr "Äänenvoimakkuus"
#: src/client/game.cpp
msgid "Sound muted"
-msgstr ""
+msgstr "Ääni mykistetty"
#: src/client/game.cpp
msgid "Sound system is disabled"
@@ -1387,6 +1518,21 @@ msgstr ""
#: src/client/game.cpp
msgid "Sound unmuted"
+msgstr "Ääni palautettu"
+
+#: src/client/game.cpp
+#, c-format
+msgid "The server is probably running a different version of %s."
+msgstr ""
+
+#: src/client/game.cpp
+#, c-format
+msgid "Unable to connect to %s because IPv6 is disabled"
+msgstr ""
+
+#: src/client/game.cpp
+#, c-format
+msgid "Unable to listen on %s because IPv6 is disabled"
msgstr ""
#: src/client/game.cpp
@@ -1423,7 +1569,7 @@ msgstr ""
#: src/client/gameui.cpp
msgid "Chat hidden"
-msgstr ""
+msgstr "Keskustelu piilotettu"
#: src/client/gameui.cpp
msgid "Chat shown"
@@ -1459,10 +1605,6 @@ msgid "Caps Lock"
msgstr ""
#: src/client/keycode.cpp
-msgid "Clear"
-msgstr ""
-
-#: src/client/keycode.cpp
msgid "Control"
msgstr ""
@@ -1727,13 +1869,22 @@ msgstr ""
msgid "Minimap in texture mode"
msgstr ""
+#: src/gui/guiChatConsole.cpp
+#, fuzzy
+msgid "Failed to open webpage"
+msgstr "Epäonnistui ladata $1"
+
+#: src/gui/guiChatConsole.cpp
+msgid "Opening webpage"
+msgstr ""
+
#: src/gui/guiConfirmRegistration.cpp src/gui/guiPasswordChange.cpp
msgid "Passwords do not match!"
-msgstr ""
+msgstr "Salasanat eivät täsmää!"
#: src/gui/guiConfirmRegistration.cpp
msgid "Register and Join"
-msgstr ""
+msgstr "Rekisteröidy ja liity"
#: src/gui/guiConfirmRegistration.cpp
#, c-format
@@ -1744,13 +1895,17 @@ msgid ""
"Please retype your password and click 'Register and Join' to confirm account "
"creation, or click 'Cancel' to abort."
msgstr ""
+"Olet aikeissa liittyä tälle palvelimelle nimellä \"%s\" ensimmäistä kertaa.\n"
+"Jos jatkat, uusi tili kirjautumistietojen kera luodaan tälle palvelimelle.\n"
+"Kirjoita salasana ja napsauta \"Rekisteröidy ja liity\" vahvistaaksesi tilin "
+"luomisen, tai napsauta \"Peruuta\" lopettaaksesi."
#: src/gui/guiFormSpecMenu.cpp
msgid "Proceed"
msgstr ""
#: src/gui/guiKeyChangeMenu.cpp
-msgid "\"Special\" = climb down"
+msgid "\"Aux1\" = climb down"
msgstr ""
#: src/gui/guiKeyChangeMenu.cpp
@@ -1759,27 +1914,35 @@ msgstr ""
#: src/gui/guiKeyChangeMenu.cpp src/settings_translation_file.cpp
msgid "Automatic jumping"
+msgstr "Hypi automaattisesti"
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Aux1"
msgstr ""
#: src/gui/guiKeyChangeMenu.cpp
msgid "Backward"
+msgstr "Taakse"
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Block bounds"
msgstr ""
#: src/gui/guiKeyChangeMenu.cpp
msgid "Change camera"
-msgstr ""
+msgstr "Vaihda kameraa"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Chat"
-msgstr ""
+msgstr "Keskustelu"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Command"
-msgstr ""
+msgstr "Komento"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Console"
-msgstr ""
+msgstr "Konsoli"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Dec. range"
@@ -1799,7 +1962,7 @@ msgstr ""
#: src/gui/guiKeyChangeMenu.cpp
msgid "Forward"
-msgstr ""
+msgstr "Eteen"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Inc. range"
@@ -1811,11 +1974,11 @@ msgstr ""
#: src/gui/guiKeyChangeMenu.cpp
msgid "Inventory"
-msgstr ""
+msgstr "Inventaario"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Jump"
-msgstr ""
+msgstr "Hyppää"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Key already in use"
@@ -1824,10 +1987,12 @@ msgstr ""
#: src/gui/guiKeyChangeMenu.cpp
msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)"
msgstr ""
+"Näppäimistöasetukset. (Jos tämä valikko rikkoutuu, poista asioita minetest."
+"conf-tiedostosta)"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Local command"
-msgstr ""
+msgstr "Paikallinen komento"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Mute"
@@ -1847,15 +2012,11 @@ msgstr ""
#: src/gui/guiKeyChangeMenu.cpp src/settings_translation_file.cpp
msgid "Screenshot"
-msgstr ""
+msgstr "Kuvakaappaus"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Sneak"
-msgstr ""
-
-#: src/gui/guiKeyChangeMenu.cpp
-msgid "Special"
-msgstr ""
+msgstr "Hiivi"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Toggle HUD"
@@ -1899,27 +2060,28 @@ msgstr ""
#: src/gui/guiPasswordChange.cpp
msgid "Confirm Password"
-msgstr ""
+msgstr "Vahvista salasana"
#: src/gui/guiPasswordChange.cpp
msgid "New Password"
-msgstr ""
+msgstr "Uusi salasana"
#: src/gui/guiPasswordChange.cpp
msgid "Old Password"
-msgstr ""
+msgstr "Vanha salasana"
#: src/gui/guiVolumeChange.cpp
msgid "Exit"
-msgstr ""
+msgstr "Poistu"
#: src/gui/guiVolumeChange.cpp
msgid "Muted"
-msgstr ""
+msgstr "Mykistetty"
#: src/gui/guiVolumeChange.cpp
-msgid "Sound Volume: "
-msgstr ""
+#, fuzzy, c-format
+msgid "Sound Volume: %d%%"
+msgstr "Äänenvoimakkuus: "
#. ~ Imperative, as in "Enter/type in text".
#. Don't forget the space.
@@ -1942,8 +2104,8 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"(Android) Use virtual joystick to trigger \"aux\" button.\n"
-"If enabled, virtual joystick will also tap \"aux\" button when out of main "
+"(Android) Use virtual joystick to trigger \"Aux1\" button.\n"
+"If enabled, virtual joystick will also tap \"Aux1\" button when out of main "
"circle."
msgstr ""
@@ -2000,11 +2162,11 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "3D clouds"
-msgstr ""
+msgstr "3D-pilvet"
#: src/settings_translation_file.cpp
msgid "3D mode"
-msgstr ""
+msgstr "3D-tila"
#: src/settings_translation_file.cpp
msgid "3D mode parallax strength"
@@ -2126,6 +2288,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Adjust the detected display density, used for scaling UI elements."
+msgstr ""
+
+#: src/settings_translation_file.cpp
#, c-format
msgid ""
"Adjusts the density of the floatland layer.\n"
@@ -2137,7 +2303,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Advanced"
-msgstr ""
+msgstr "Lisäasetukset"
#: src/settings_translation_file.cpp
msgid ""
@@ -2231,13 +2397,21 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Autosave screen size"
-msgstr ""
+msgstr "Tallenna näytön koko automaattisesti"
#: src/settings_translation_file.cpp
msgid "Autoscaling mode"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Aux1 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Aux1 key for climbing/descending"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Backward key"
msgstr ""
@@ -2282,10 +2456,6 @@ msgid "Biome noise"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Bits per pixel (aka color depth) in fullscreen mode."
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Block send optimize distance"
msgstr ""
@@ -2384,6 +2554,15 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Chat command time message threshold"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Chat commands"
+msgstr "Komento"
+
+#: src/settings_translation_file.cpp
msgid "Chat font size"
msgstr ""
@@ -2416,7 +2595,7 @@ msgid "Chat toggle key"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Chatcommands"
+msgid "Chat weblinks"
msgstr ""
#: src/settings_translation_file.cpp
@@ -2436,12 +2615,18 @@ msgid "Clean transparent textures"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Client"
+msgid ""
+"Clickable weblinks (middle-click or Ctrl+left-click) enabled in chat console "
+"output."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Client"
+msgstr "Asiakas"
+
+#: src/settings_translation_file.cpp
msgid "Client and Server"
-msgstr ""
+msgstr "Asiakas ja palvelin"
#: src/settings_translation_file.cpp
msgid "Client modding"
@@ -2465,7 +2650,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Clouds"
-msgstr ""
+msgstr "Pilvet"
#: src/settings_translation_file.cpp
msgid "Clouds are a client side effect."
@@ -2480,6 +2665,10 @@ msgid "Colored fog"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Colored shadows"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid ""
"Comma-separated list of flags to hide in the content repository.\n"
"\"nonfree\" can be used to hide packages which do not qualify as 'free "
@@ -2507,6 +2696,22 @@ msgid "Command key"
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Compression level to use when saving mapblocks to disk.\n"
+"-1 - use default compression level\n"
+"0 - least compression, fastest\n"
+"9 - best compression, slowest"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Compression level to use when sending mapblocks to the client.\n"
+"-1 - use default compression level\n"
+"0 - least compression, fastest\n"
+"9 - best compression, slowest"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Connect glass"
msgstr ""
@@ -2597,7 +2802,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"Crosshair alpha (opaqueness, between 0 and 255).\n"
-"Also controls the object crosshair color"
+"This also applies to the object crosshair."
msgstr ""
#: src/settings_translation_file.cpp
@@ -2674,8 +2879,9 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Default timeout for cURL, stated in milliseconds.\n"
-"Only has an effect if compiled with cURL."
+"Define shadow filtering quality.\n"
+"This simulates the soft shadows effect by applying a PCF or Poisson disk\n"
+"but also uses more resources."
msgstr ""
#: src/settings_translation_file.cpp
@@ -2793,6 +2999,10 @@ msgid "Disallow empty passwords"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Display Density Scaling Factor"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Domain name of server, to be displayed in the serverlist."
msgstr ""
@@ -2837,10 +3047,23 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Enable console window"
+msgid ""
+"Enable Poisson disk filtering.\n"
+"On true uses Poisson disk to make \"soft shadows\". Otherwise uses PCF "
+"filtering."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable colored shadows.\n"
+"On true translucent nodes cast colored shadows. This is expensive."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Enable console window"
+msgstr "Käytä konsoli-ikkunaa"
+
+#: src/settings_translation_file.cpp
msgid "Enable creative mode for all players"
msgstr ""
@@ -2945,6 +3168,12 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Enables tradeoffs that reduce CPU load or increase rendering performance\n"
+"at the expense of minor visual glitches that do not impact game playability."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Engine profiling data print interval"
msgstr ""
@@ -2983,18 +3212,6 @@ msgid "Fallback font path"
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 ""
@@ -3012,7 +3229,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Fast movement (via the \"special\" key).\n"
+"Fast movement (via the \"Aux1\" key).\n"
"This requires the \"fast\" privilege on the server."
msgstr ""
@@ -3046,9 +3263,9 @@ 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."
+"which PNG optimizers usually discard, often resulting in dark or\n"
+"light edges to transparent textures. Apply a filter to clean that up\n"
+"at texture load time. This is automatically enabled if mipmapping is enabled."
msgstr ""
#: src/settings_translation_file.cpp
@@ -3140,15 +3357,15 @@ msgid "Font size"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Font size of the default font in point (pt)."
+msgid "Font size divisible by"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Font size of the fallback font in point (pt)."
+msgid "Font size of the default font where 1 unit = 1 pixel at 96 DPI"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Font size of the monospace font in point (pt)."
+msgid "Font size of the monospace font where 1 unit = 1 pixel at 96 DPI"
msgstr ""
#: src/settings_translation_file.cpp
@@ -3159,6 +3376,17 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"For pixel-style fonts that do not scale well, this ensures that font sizes "
+"used\n"
+"with this font will always be divisible by this value, in pixels. For "
+"instance,\n"
+"a pixel font 16 pixels tall should have this set to 16, so it will only ever "
+"be\n"
+"sized 16, 32, 48, etc., so a mod requesting a size of 25 will get 32."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Format of player chat messages. The following strings are valid "
"placeholders:\n"
"@name, @message, @timestamp (optional)"
@@ -3217,10 +3445,6 @@ msgid "Fraction of the visible distance at which fog starts to be rendered"
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)."
@@ -3242,15 +3466,11 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Full screen"
-msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid "Full screen BPP"
-msgstr ""
+msgstr "Koko näyttö"
#: src/settings_translation_file.cpp
msgid "Fullscreen mode."
-msgstr ""
+msgstr "Koko näytön tila."
#: src/settings_translation_file.cpp
msgid "GUI scaling"
@@ -3272,7 +3492,7 @@ msgstr ""
msgid ""
"Global map generation attributes.\n"
"In Mapgen v6 the 'decorations' flag controls all decorations except trees\n"
-"and junglegrass, in all other mapgens this flag controls all decorations."
+"and jungle grass, in all other mapgens this flag controls all decorations."
msgstr ""
#: src/settings_translation_file.cpp
@@ -3289,7 +3509,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Graphics"
-msgstr ""
+msgstr "Grafiikka"
#: src/settings_translation_file.cpp
msgid "Gravity"
@@ -3305,7 +3525,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "HTTP mods"
-msgstr ""
+msgstr "HTTP-modit"
#: src/settings_translation_file.cpp
msgid "HUD scale factor"
@@ -3341,7 +3561,8 @@ msgid "Heat noise"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Height component of the initial window size."
+msgid ""
+"Height component of the initial window size. Ignored in fullscreen mode."
msgstr ""
#: src/settings_translation_file.cpp
@@ -3353,10 +3574,6 @@ msgid "Height select noise"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "High-precision FPU"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Hill steepness"
msgstr ""
@@ -3382,7 +3599,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Homepage of server, to be displayed in the serverlist."
-msgstr ""
+msgstr "Palvelimen sivusto, näytetään palvelinlistauksessa."
#: src/settings_translation_file.cpp
msgid ""
@@ -3573,11 +3790,11 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "IPv6"
-msgstr ""
+msgstr "IPv6"
#: src/settings_translation_file.cpp
msgid "IPv6 server"
-msgstr ""
+msgstr "IPv6-palvelin"
#: src/settings_translation_file.cpp
msgid ""
@@ -3587,8 +3804,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"If disabled, \"special\" key is used to fly fast if both fly and fast mode "
-"are\n"
+"If disabled, \"Aux1\" key is used to fly fast if both fly and fast mode are\n"
"enabled."
msgstr ""
@@ -3610,8 +3826,8 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"If enabled, \"special\" key instead of \"sneak\" key is used for climbing "
-"down and\n"
+"If enabled, \"Aux1\" key instead of \"Sneak\" key is used for climbing down "
+"and\n"
"descending."
msgstr ""
@@ -3657,6 +3873,12 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"If the execution of a chat command takes longer than this specified time in\n"
+"seconds, add the time information to the chat command message"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"If the file size of debug.txt exceeds the number of megabytes specified in\n"
"this setting when it is opened, the file is moved to debug.txt.1,\n"
"deleting an older debug.txt.1 if it exists.\n"
@@ -3673,7 +3895,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "In-Game"
-msgstr ""
+msgstr "Pelinsisäinen"
#: src/settings_translation_file.cpp
msgid "In-game chat console background alpha (opaqueness, between 0 and 255)."
@@ -3702,7 +3924,7 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Instrument chatcommands on registration."
+msgid "Instrument chat commands on registration."
msgstr ""
#: src/settings_translation_file.cpp
@@ -3786,7 +4008,7 @@ msgid "Joystick button repetition interval"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Joystick deadzone"
+msgid "Joystick dead zone"
msgstr ""
#: src/settings_translation_file.cpp
@@ -4368,7 +4590,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Language"
-msgstr ""
+msgstr "Kieli"
#: src/settings_translation_file.cpp
msgid "Large cave depth"
@@ -4544,10 +4766,6 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Makes DirectX work with LuaJIT. Disable if it causes troubles."
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Makes all liquids opaque"
msgstr ""
@@ -4619,6 +4837,10 @@ msgid "Map save interval"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Map shadows update frames"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Mapblock limit"
msgstr ""
@@ -4720,13 +4942,17 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Maximum FPS"
-msgstr ""
+msgstr "FPS enintään"
#: src/settings_translation_file.cpp
msgid "Maximum FPS when the window is not focused, or when the game is paused."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Maximum distance to render shadows."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Maximum forceloaded blocks"
msgstr ""
@@ -4832,16 +5058,24 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Maximum time in ms a file download (e.g. a mod download) may take."
+msgid ""
+"Maximum time a file download (e.g. a mod download) may take, stated in "
+"milliseconds."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Maximum users"
+msgid ""
+"Maximum time an interactive request (e.g. server list fetch) may take, "
+"stated in milliseconds."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Maximum users"
+msgstr "Käyttäjiä enintään"
+
+#: src/settings_translation_file.cpp
msgid "Menus"
-msgstr ""
+msgstr "Valikot"
#: src/settings_translation_file.cpp
msgid "Mesh cache"
@@ -4896,7 +5130,7 @@ msgid "Mod channels"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Modifies the size of the hudbar elements."
+msgid "Modifies the size of the HUD elements."
msgstr ""
#: src/settings_translation_file.cpp
@@ -4908,6 +5142,10 @@ msgid "Monospace font size"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Monospace font size divisible by"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Mountain height noise"
msgstr ""
@@ -4925,7 +5163,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Mouse sensitivity"
-msgstr ""
+msgstr "Hiiren herkkyys"
#: src/settings_translation_file.cpp
msgid "Mouse sensitivity multiplier."
@@ -4947,7 +5185,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Mute sound"
-msgstr ""
+msgstr "Mykistä ääni"
#: src/settings_translation_file.cpp
msgid ""
@@ -4975,7 +5213,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Network"
-msgstr ""
+msgstr "Verkko"
#: src/settings_translation_file.cpp
msgid ""
@@ -4985,7 +5223,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "New users need to input this password."
-msgstr ""
+msgstr "Uusien käyttäjien tulee syöttää tämä salasana."
#: src/settings_translation_file.cpp
msgid "Noclip"
@@ -5028,7 +5266,7 @@ 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"
+"This is a trade-off between SQLite transaction overhead and\n"
"memory consumption (4096=100MB, as a rule of thumb)."
msgstr ""
@@ -5047,21 +5285,18 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Opaqueness (alpha) of the shadow behind the fallback font, between 0 and 255."
-msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid ""
"Open the pause menu when the window's focus is lost. Does not pause if a "
"formspec is\n"
"open."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Optional override for chat weblink color."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid ""
-"Path of the fallback font.\n"
-"If “freetype†setting is enabled: Must be a TrueType font.\n"
-"If “freetype†setting is disabled: Must be a bitmap or XML vectors font.\n"
+"Path of the fallback font. Must be a TrueType font.\n"
"This font will be used for certain languages or if the default font is "
"unavailable."
msgstr ""
@@ -5084,17 +5319,13 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Path to the default font.\n"
-"If “freetype†setting is enabled: Must be a TrueType font.\n"
-"If “freetype†setting is disabled: Must be a bitmap or XML vectors font.\n"
+"Path to the default font. Must be a TrueType font.\n"
"The fallback font will be used if the font cannot be loaded."
msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Path to the monospace font.\n"
-"If “freetype†setting is enabled: Must be a TrueType font.\n"
-"If “freetype†setting is disabled: Must be a bitmap or XML vectors font.\n"
+"Path to the monospace font. Must be a TrueType font.\n"
"This font is used for e.g. the console and profiler screen."
msgstr ""
@@ -5112,7 +5343,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Physics"
-msgstr ""
+msgstr "Fysiikka"
#: src/settings_translation_file.cpp
msgid "Pitch move key"
@@ -5138,7 +5369,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Player name"
-msgstr ""
+msgstr "Pelaajan nimi"
#: src/settings_translation_file.cpp
msgid "Player transfer distance"
@@ -5146,6 +5377,10 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Player versus player"
+msgstr "Pelaaja vastaan pelaaja"
+
+#: src/settings_translation_file.cpp
+msgid "Poisson filtering"
msgstr ""
#: src/settings_translation_file.cpp
@@ -5193,9 +5428,9 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"Prometheus listener address.\n"
-"If minetest is compiled with ENABLE_PROMETHEUS option enabled,\n"
+"If Minetest is compiled with ENABLE_PROMETHEUS option enabled,\n"
"enable metrics listener for Prometheus on that address.\n"
-"Metrics can be fetch on http://127.0.0.1:30000/metrics"
+"Metrics can be fetched on http://127.0.0.1:30000/metrics"
msgstr ""
#: src/settings_translation_file.cpp
@@ -5356,23 +5591,23 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Screen height"
-msgstr ""
+msgstr "Näytön korkeus"
#: src/settings_translation_file.cpp
msgid "Screen width"
-msgstr ""
+msgstr "Näytön leveys"
#: src/settings_translation_file.cpp
msgid "Screenshot folder"
-msgstr ""
+msgstr "Kuvakaappausten kansio"
#: src/settings_translation_file.cpp
msgid "Screenshot format"
-msgstr ""
+msgstr "Kuvakaappausten muoto"
#: src/settings_translation_file.cpp
msgid "Screenshot quality"
-msgstr ""
+msgstr "Kuvakaappausten laatu"
#: src/settings_translation_file.cpp
msgid ""
@@ -5395,11 +5630,11 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Security"
-msgstr ""
+msgstr "Turvallisuus"
#: src/settings_translation_file.cpp
msgid "See https://www.sqlite.org/pragma.html#pragma_synchronous"
-msgstr ""
+msgstr "Lue https://www.sqlite.org/pragma.html#pragma_synchronous"
#: src/settings_translation_file.cpp
msgid "Selection box border color (R,G,B)."
@@ -5438,27 +5673,27 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Server / Singleplayer"
-msgstr ""
+msgstr "Palvelin / yksinpeli"
#: src/settings_translation_file.cpp
msgid "Server URL"
-msgstr ""
+msgstr "Palvelimen URL"
#: src/settings_translation_file.cpp
msgid "Server address"
-msgstr ""
+msgstr "Palvelimen osoite"
#: src/settings_translation_file.cpp
msgid "Server description"
-msgstr ""
+msgstr "Palvelimen kuvaus"
#: src/settings_translation_file.cpp
msgid "Server name"
-msgstr ""
+msgstr "Palvelimen nimi"
#: src/settings_translation_file.cpp
msgid "Server port"
-msgstr ""
+msgstr "Palvelimen portti"
#: src/settings_translation_file.cpp
msgid "Server side occlusion culling"
@@ -5484,6 +5719,32 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Set the shadow strength.\n"
+"Lower value means lighter shadows, higher value means darker shadows."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set the soft shadow radius size.\n"
+"Lower values mean sharper shadows, bigger values mean softer shadows.\n"
+"Minimum value: 1.0; maximum value: 10.0"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set the tilt of Sun/Moon orbit in degrees.\n"
+"Value of 0 means no tilt / vertical orbit.\n"
+"Minimum value: 0.0; maximum value: 60.0"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set to true to enable Shadow Mapping.\n"
+"Requires shaders to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Set to true to enable waving leaves.\n"
"Requires shaders to be enabled."
msgstr ""
@@ -5501,6 +5762,13 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Sets shadow texture quality to 32 bits.\n"
+"On false, 16 bits texture will be used.\n"
+"This can cause much more artifacts in the shadow."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Shader path"
msgstr ""
@@ -5513,15 +5781,29 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Shadow filter quality"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Shadow map max distance in nodes to render shadows"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Shadow map texture in 32 bits"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Shadow map texture size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid ""
"Shadow offset (in pixels) of the default font. If 0, then shadow will not be "
"drawn."
msgstr ""
#: src/settings_translation_file.cpp
-msgid ""
-"Shadow offset (in pixels) of the fallback font. If 0, then shadow will not "
-"be drawn."
+msgid "Shadow strength"
msgstr ""
#: src/settings_translation_file.cpp
@@ -5543,7 +5825,7 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Show nametag backgrounds by default"
+msgid "Show name tag backgrounds by default"
msgstr ""
#: src/settings_translation_file.cpp
@@ -5568,6 +5850,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Sky Body Orbit Tilt"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Slice w"
msgstr ""
@@ -5615,23 +5901,19 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Sneaking speed"
-msgstr ""
+msgstr "Hiiviskelyn nopeus"
#: src/settings_translation_file.cpp
msgid "Sneaking speed, in nodes per second."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Sound"
-msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid "Special key"
+msgid "Soft shadow radius"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Special key for climbing/descending"
-msgstr ""
+msgid "Sound"
+msgstr "Ääni"
#: src/settings_translation_file.cpp
msgid ""
@@ -5650,6 +5932,14 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Spread a complete update of shadow map over given amount of frames.\n"
+"Higher values might make shadows laggy, lower values\n"
+"will consume more resources.\n"
+"Minimum value: 1; maximum value: 16"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Spread of light curve boost range.\n"
"Controls the width of the range to be boosted.\n"
"Standard deviation of the light curve boost Gaussian."
@@ -5706,7 +5996,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Synchronous SQLite"
-msgstr ""
+msgstr "Synkroninen SQLite"
#: src/settings_translation_file.cpp
msgid "Temperature variation for biomes."
@@ -5756,6 +6046,13 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Texture size to render the shadow map on.\n"
+"This must be a power of two.\n"
+"Bigger numbers create better shadows but it is also more expensive."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Textures on a node may be aligned either to the node or to the world.\n"
"The former mode suits better things like machines, furniture, etc., while\n"
"the latter makes stairs and microblocks fit surroundings better.\n"
@@ -5769,7 +6066,7 @@ msgid "The URL for the content repository"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "The deadzone of the joystick"
+msgid "The dead zone of the joystick"
msgstr ""
#: src/settings_translation_file.cpp
@@ -5827,7 +6124,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"The rendering back-end for Irrlicht.\n"
+"The rendering back-end.\n"
"A restart is required after changing this.\n"
"Note: On Android, stick with OGLES1 if unsure! App may fail to start "
"otherwise.\n"
@@ -5838,7 +6135,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"The sensitivity of the joystick axes for moving the\n"
-"ingame view frustum around."
+"in-game view frustum around."
msgstr ""
#: src/settings_translation_file.cpp
@@ -5932,6 +6229,10 @@ msgid "Touch screen threshold"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Tradeoffs for performance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Trees noise"
msgstr ""
@@ -5948,7 +6249,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Trusted mods"
-msgstr ""
+msgstr "Luotetut modit"
#: src/settings_translation_file.cpp
msgid "URL to the server list displayed in the Multiplayer Tab."
@@ -6001,7 +6302,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Use mip mapping to scale textures. May slightly increase performance,\n"
+"Use mipmapping to scale textures. May slightly increase performance,\n"
"especially when using a high resolution texture pack.\n"
"Gamma correct downscaling is not supported."
msgstr ""
@@ -6087,7 +6388,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Video driver"
-msgstr ""
+msgstr "Videoajuri"
#: src/settings_translation_file.cpp
msgid "View bobbing factor"
@@ -6114,7 +6415,7 @@ msgid "Viewing range"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Virtual joystick triggers aux button"
+msgid "Virtual joystick triggers Aux1 button"
msgstr ""
#: src/settings_translation_file.cpp
@@ -6142,7 +6443,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Walking speed"
-msgstr ""
+msgstr "Kävelyn nopeus"
#: src/settings_translation_file.cpp
msgid "Walking, flying and climbing speed in fast mode, in nodes per second."
@@ -6185,6 +6486,10 @@ msgid "Waving plants"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Weblink color"
+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"
@@ -6205,23 +6510,15 @@ msgid ""
"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.\n"
+"memory. Powers of 2 are recommended. This setting is ONLY applied if\n"
+"bilinear/trilinear/anisotropic filtering is enabled.\n"
"This is also used as the base node texture size for world-aligned\n"
"texture autoscaling."
msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Whether FreeType fonts are used, requires FreeType support to be compiled "
-"in.\n"
-"If disabled, bitmap and XML vectors fonts are used instead."
-msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid ""
-"Whether nametag backgrounds should be shown by default.\n"
+"Whether name tag backgrounds should be shown by default.\n"
"Mods may still set a background."
msgstr ""
@@ -6263,7 +6560,7 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Width component of the initial window size."
+msgid "Width component of the initial window size. Ignored in fullscreen mode."
msgstr ""
#: src/settings_translation_file.cpp
@@ -6348,31 +6645,37 @@ msgid "Y-level of seabed."
msgstr ""
#: src/settings_translation_file.cpp
-msgid ""
-"ZLib compression level to use when saving mapblocks to disk.\n"
-"-1 - Zlib's default compression level\n"
-"0 - no compresson, fastest\n"
-"9 - best compression, slowest\n"
-"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)"
-msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid ""
-"ZLib compression level to use when sending mapblocks to the client.\n"
-"-1 - Zlib's default compression level\n"
-"0 - no compresson, fastest\n"
-"9 - best compression, slowest\n"
-"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)"
+msgid "cURL file download timeout"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "cURL file download timeout"
+msgid "cURL interactive timeout"
msgstr ""
#: src/settings_translation_file.cpp
msgid "cURL parallel limit"
msgstr ""
-#: src/settings_translation_file.cpp
-msgid "cURL timeout"
-msgstr ""
+#~ msgid "- Creative Mode: "
+#~ msgstr "- Luova tila: "
+
+#~ msgid "- Damage: "
+#~ msgstr "- Vahinko: "
+
+#~ msgid "FreeType fonts"
+#~ msgstr "FreeType-fontit"
+
+#~ msgid "Install: file: \"$1\""
+#~ msgstr "Asenna: tiedosto: \"$1\""
+
+#~ msgid "Name / Password"
+#~ msgstr "Nimi / Salasana"
+
+#~ msgid "To enable shaders the OpenGL driver needs to be used."
+#~ msgstr "Varjostimien käyttäminen vaatii, että käytössä on OpenGL-ajuri."
+
+#~ msgid "You died."
+#~ msgstr "Kuolit."
+
+#~ msgid "needs_fallback_font"
+#~ msgstr "no"
diff --git a/po/fil/minetest.po b/po/fil/minetest.po
new file mode 100644
index 000000000..ef7f88986
--- /dev/null
+++ b/po/fil/minetest.po
@@ -0,0 +1,6638 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the minetest package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: minetest\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2022-01-25 23:19+0100\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: Automatically generated\n"
+"Language-Team: none\n"
+"Language: fil\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: builtin/client/chatcommands.lua
+msgid "Clear the out chat queue"
+msgstr ""
+
+#: builtin/client/chatcommands.lua
+msgid "Empty command."
+msgstr ""
+
+#: builtin/client/chatcommands.lua
+msgid "Exit to main menu"
+msgstr ""
+
+#: builtin/client/chatcommands.lua
+msgid "Invalid command: "
+msgstr ""
+
+#: builtin/client/chatcommands.lua
+msgid "Issued command: "
+msgstr ""
+
+#: builtin/client/chatcommands.lua
+msgid "List online players"
+msgstr ""
+
+#: builtin/client/chatcommands.lua
+msgid "Online players: "
+msgstr ""
+
+#: builtin/client/chatcommands.lua
+msgid "The out chat queue is now empty."
+msgstr ""
+
+#: builtin/client/chatcommands.lua
+msgid "This command is disabled by server."
+msgstr ""
+
+#: builtin/client/death_formspec.lua src/client/game.cpp
+msgid "Respawn"
+msgstr ""
+
+#: builtin/client/death_formspec.lua src/client/game.cpp
+msgid "You died"
+msgstr ""
+
+#: builtin/common/chatcommands.lua
+msgid "Available commands:"
+msgstr ""
+
+#: builtin/common/chatcommands.lua
+msgid "Available commands: "
+msgstr ""
+
+#: builtin/common/chatcommands.lua
+msgid "Command not available: "
+msgstr ""
+
+#: builtin/common/chatcommands.lua
+msgid "Get help for commands"
+msgstr ""
+
+#: builtin/common/chatcommands.lua
+msgid ""
+"Use '.help <cmd>' to get more information, or '.help all' to list everything."
+msgstr ""
+
+#: builtin/common/chatcommands.lua
+msgid "[all | <cmd>]"
+msgstr ""
+
+#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp
+msgid "OK"
+msgstr ""
+
+#: builtin/fstk/ui.lua
+msgid "<none available>"
+msgstr ""
+
+#: builtin/fstk/ui.lua
+msgid "An error occurred in a Lua script:"
+msgstr ""
+
+#: builtin/fstk/ui.lua
+msgid "An error occurred:"
+msgstr ""
+
+#: builtin/fstk/ui.lua
+msgid "Main menu"
+msgstr ""
+
+#: builtin/fstk/ui.lua
+msgid "Reconnect"
+msgstr ""
+
+#: builtin/fstk/ui.lua
+msgid "The server has requested a reconnect:"
+msgstr ""
+
+#: 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 "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_contentstore.lua
+#: builtin/mainmenu/dlg_create_world.lua
+#: builtin/mainmenu/dlg_delete_content.lua
+#: builtin/mainmenu/dlg_delete_world.lua
+#: builtin/mainmenu/dlg_rename_modpack.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua src/client/keycode.cpp
+#: src/gui/guiConfirmRegistration.cpp src/gui/guiKeyChangeMenu.cpp
+#: src/gui/guiPasswordChange.cpp
+msgid "Cancel"
+msgstr ""
+
+#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/dlg_contentstore.lua
+#: builtin/mainmenu/tab_content.lua
+msgid "Dependencies:"
+msgstr ""
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "Disable all"
+msgstr ""
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "Disable modpack"
+msgstr ""
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "Enable all"
+msgstr ""
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "Enable modpack"
+msgstr ""
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid ""
+"Failed to enable mod \"$1\" as it contains disallowed characters. Only "
+"characters [a-z0-9_] are allowed."
+msgstr ""
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "Find More Mods"
+msgstr ""
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "Mod:"
+msgstr ""
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "No (optional) dependencies"
+msgstr ""
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "No game description provided."
+msgstr ""
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "No hard dependencies"
+msgstr ""
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "No modpack description provided."
+msgstr ""
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "No optional dependencies"
+msgstr ""
+
+#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_content.lua
+msgid "Optional dependencies:"
+msgstr ""
+
+#: builtin/mainmenu/dlg_config_world.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua src/gui/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_contentstore.lua
+msgid "\"$1\" already exists. Would you like to overwrite it?"
+msgstr ""
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "$1 and $2 dependencies will be installed."
+msgstr ""
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "$1 by $2"
+msgstr ""
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid ""
+"$1 downloading,\n"
+"$2 queued"
+msgstr ""
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "$1 downloading..."
+msgstr ""
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "$1 required dependencies could not be found."
+msgstr ""
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "$1 will be installed, and $2 dependencies will be skipped."
+msgstr ""
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "All packages"
+msgstr ""
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "Already installed"
+msgstr ""
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "Back to Main Menu"
+msgstr ""
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "Base Game:"
+msgstr ""
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "ContentDB is not available when Minetest was compiled without cURL"
+msgstr ""
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "Downloading..."
+msgstr ""
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "Failed to download $1"
+msgstr ""
+
+#: builtin/mainmenu/dlg_contentstore.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Games"
+msgstr ""
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "Install"
+msgstr ""
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "Install $1"
+msgstr ""
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "Install missing dependencies"
+msgstr ""
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "Install: Unsupported file type or broken archive"
+msgstr ""
+
+#: builtin/mainmenu/dlg_contentstore.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Mods"
+msgstr ""
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "No packages could be retrieved"
+msgstr ""
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "No results"
+msgstr ""
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "No updates"
+msgstr ""
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "Not found"
+msgstr ""
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "Overwrite"
+msgstr ""
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "Please check that the base game is correct."
+msgstr ""
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "Queued"
+msgstr ""
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "Texture packs"
+msgstr ""
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "Uninstall"
+msgstr ""
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "Update"
+msgstr ""
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "Update All [$1]"
+msgstr ""
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "View more information in a web browser"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "A world named \"$1\" already exists"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Additional terrain"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
+msgid "Altitude chill"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Altitude dry"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Biome blending"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Biomes"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Caverns"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Caves"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Create"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Decorations"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Download a game, 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
+msgid "Dungeons"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Flat terrain"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Floating landmasses in the sky"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Floatlands (experimental)"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
+msgid "Game"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Generate non-fractal terrain: Oceans and underground"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Hills"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Humid rivers"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Increases humidity around rivers"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Lakes"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Low humidity and high heat causes shallow or dry rivers"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
+msgid "Mapgen"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
+msgid "Mapgen flags"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Mapgen-specific flags"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Mountains"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Mud flow"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Network of tunnels and caves"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "No game selected"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Reduces heat with altitude"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Reduces humidity with altitude"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Rivers"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Sea level rivers"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Seed"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Smooth transition between biomes"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid ""
+"Structures appearing on the terrain (no effect on trees and jungle grass "
+"created by v6)"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Structures appearing on the terrain, typically trees and plants"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Temperate, Desert"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Temperate, Desert, Jungle"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Temperate, Desert, Jungle, Tundra, Taiga"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Terrain surface erosion"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Trees and jungle grass"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Vary river depth"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Very large caverns deep in the underground"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Warning: The 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 games installed."
+msgstr ""
+
+#: builtin/mainmenu/dlg_delete_content.lua
+msgid "Are you sure you want to delete \"$1\"?"
+msgstr ""
+
+#: builtin/mainmenu/dlg_delete_content.lua
+#: builtin/mainmenu/dlg_delete_world.lua builtin/mainmenu/tab_local.lua
+#: src/client/keycode.cpp
+msgid "Delete"
+msgstr ""
+
+#: builtin/mainmenu/dlg_delete_content.lua
+msgid "pkgmgr: failed to delete \"$1\""
+msgstr ""
+
+#: builtin/mainmenu/dlg_delete_content.lua
+msgid "pkgmgr: invalid path \"$1\""
+msgstr ""
+
+#: builtin/mainmenu/dlg_delete_world.lua
+msgid "Delete World \"$1\"?"
+msgstr ""
+
+#: builtin/mainmenu/dlg_rename_modpack.lua
+msgid "Accept"
+msgstr ""
+
+#: builtin/mainmenu/dlg_rename_modpack.lua
+msgid "Rename Modpack:"
+msgstr ""
+
+#: builtin/mainmenu/dlg_rename_modpack.lua
+msgid ""
+"This modpack has an explicit name given in its modpack.conf which will "
+"override any renaming here."
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "(No description of setting given)"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "2D Noise"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "< Back to Settings page"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Browse"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_settings.lua
+msgid "Disabled"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Edit"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Enabled"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Lacunarity"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Octaves"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua src/settings_translation_file.cpp
+msgid "Offset"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Persistence"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Please enter a valid integer."
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Please enter a valid number."
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Restore Default"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua src/settings_translation_file.cpp
+msgid "Scale"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_online.lua
+msgid "Search"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Select directory"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Select file"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Show technical names"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "The value must be at least $1."
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "The value must not be larger than $1."
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "X"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "X spread"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Y"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Y spread"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Z"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Z spread"
+msgstr ""
+
+#. ~ "absvalue" is a noise parameter flag.
+#. It is short for "absolute value".
+#. It can be enabled in noise settings in
+#. main menu -> "All Settings".
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "absvalue"
+msgstr ""
+
+#. ~ "defaults" is a noise parameter flag.
+#. It describes the default processing options
+#. for noise settings in main menu -> "All Settings".
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "defaults"
+msgstr ""
+
+#. ~ "eased" is a noise parameter flag.
+#. It is used to make the map smoother and
+#. can be enabled in noise settings in
+#. main menu -> "All Settings".
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "eased"
+msgstr ""
+
+#: builtin/mainmenu/pkgmgr.lua
+msgid "$1 (Enabled)"
+msgstr ""
+
+#: builtin/mainmenu/pkgmgr.lua
+msgid "$1 mods"
+msgstr ""
+
+#: builtin/mainmenu/pkgmgr.lua
+msgid "Failed to install $1 to $2"
+msgstr ""
+
+#: builtin/mainmenu/pkgmgr.lua
+msgid "Install Mod: Unable to find real mod name for: $1"
+msgstr ""
+
+#: builtin/mainmenu/pkgmgr.lua
+msgid "Install Mod: Unable to find suitable folder name for modpack $1"
+msgstr ""
+
+#: builtin/mainmenu/pkgmgr.lua
+msgid "Unable to find a valid mod or modpack"
+msgstr ""
+
+#: builtin/mainmenu/pkgmgr.lua
+msgid "Unable to install a $1 as a texture pack"
+msgstr ""
+
+#: builtin/mainmenu/pkgmgr.lua
+msgid "Unable to install a game as a $1"
+msgstr ""
+
+#: builtin/mainmenu/pkgmgr.lua
+msgid "Unable to install a mod as a $1"
+msgstr ""
+
+#: builtin/mainmenu/pkgmgr.lua
+msgid "Unable to install a modpack as a $1"
+msgstr ""
+
+#: builtin/mainmenu/serverlistmgr.lua src/client/game.cpp
+msgid "Loading..."
+msgstr ""
+
+#: builtin/mainmenu/serverlistmgr.lua
+msgid "Public server list is disabled"
+msgstr ""
+
+#: builtin/mainmenu/serverlistmgr.lua
+msgid "Try reenabling public serverlist and check your internet connection."
+msgstr ""
+
+#: builtin/mainmenu/tab_about.lua
+msgid "About"
+msgstr ""
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Active Contributors"
+msgstr ""
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Active renderer:"
+msgstr ""
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Core Developers"
+msgstr ""
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Open User Data Directory"
+msgstr ""
+
+#: builtin/mainmenu/tab_about.lua
+msgid ""
+"Opens the directory that contains user-provided worlds, games, mods,\n"
+"and texture packs in a file manager / explorer."
+msgstr ""
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Previous Contributors"
+msgstr ""
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Previous Core Developers"
+msgstr ""
+
+#: builtin/mainmenu/tab_content.lua
+msgid "Browse online content"
+msgstr ""
+
+#: builtin/mainmenu/tab_content.lua
+msgid "Content"
+msgstr ""
+
+#: builtin/mainmenu/tab_content.lua
+msgid "Disable Texture Pack"
+msgstr ""
+
+#: builtin/mainmenu/tab_content.lua
+msgid "Information:"
+msgstr ""
+
+#: builtin/mainmenu/tab_content.lua
+msgid "Installed Packages:"
+msgstr ""
+
+#: builtin/mainmenu/tab_content.lua
+msgid "No dependencies."
+msgstr ""
+
+#: builtin/mainmenu/tab_content.lua
+msgid "No package description available"
+msgstr ""
+
+#: builtin/mainmenu/tab_content.lua
+msgid "Rename"
+msgstr ""
+
+#: builtin/mainmenu/tab_content.lua
+msgid "Uninstall Package"
+msgstr ""
+
+#: builtin/mainmenu/tab_content.lua
+msgid "Use Texture Pack"
+msgstr ""
+
+#: builtin/mainmenu/tab_local.lua
+msgid "Announce Server"
+msgstr ""
+
+#: builtin/mainmenu/tab_local.lua
+msgid "Bind Address"
+msgstr ""
+
+#: builtin/mainmenu/tab_local.lua
+msgid "Creative Mode"
+msgstr ""
+
+#: builtin/mainmenu/tab_local.lua
+msgid "Enable Damage"
+msgstr ""
+
+#: builtin/mainmenu/tab_local.lua
+msgid "Host Game"
+msgstr ""
+
+#: builtin/mainmenu/tab_local.lua
+msgid "Host Server"
+msgstr ""
+
+#: builtin/mainmenu/tab_local.lua
+msgid "Install games from ContentDB"
+msgstr ""
+
+#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
+msgid "Name"
+msgstr ""
+
+#: builtin/mainmenu/tab_local.lua
+msgid "New"
+msgstr ""
+
+#: builtin/mainmenu/tab_local.lua
+msgid "No world created or selected!"
+msgstr ""
+
+#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
+msgid "Password"
+msgstr ""
+
+#: builtin/mainmenu/tab_local.lua
+msgid "Play Game"
+msgstr ""
+
+#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
+msgid "Port"
+msgstr ""
+
+#: builtin/mainmenu/tab_local.lua
+msgid "Select Mods"
+msgstr ""
+
+#: builtin/mainmenu/tab_local.lua
+msgid "Select World:"
+msgstr ""
+
+#: builtin/mainmenu/tab_local.lua
+msgid "Server Port"
+msgstr ""
+
+#: builtin/mainmenu/tab_local.lua
+msgid "Start Game"
+msgstr ""
+
+#: builtin/mainmenu/tab_online.lua
+msgid "Address"
+msgstr ""
+
+#: builtin/mainmenu/tab_online.lua src/client/keycode.cpp
+msgid "Clear"
+msgstr ""
+
+#: builtin/mainmenu/tab_online.lua
+msgid "Connect"
+msgstr ""
+
+#: builtin/mainmenu/tab_online.lua
+msgid "Creative mode"
+msgstr ""
+
+#. ~ PvP = Player versus Player
+#: builtin/mainmenu/tab_online.lua
+msgid "Damage / PvP"
+msgstr ""
+
+#: builtin/mainmenu/tab_online.lua
+msgid "Del. Favorite"
+msgstr ""
+
+#: builtin/mainmenu/tab_online.lua
+msgid "Favorites"
+msgstr ""
+
+#: builtin/mainmenu/tab_online.lua
+msgid "Incompatible Servers"
+msgstr ""
+
+#: builtin/mainmenu/tab_online.lua
+msgid "Join Game"
+msgstr ""
+
+#: builtin/mainmenu/tab_online.lua
+msgid "Ping"
+msgstr ""
+
+#: builtin/mainmenu/tab_online.lua
+msgid "Public Servers"
+msgstr ""
+
+#: builtin/mainmenu/tab_online.lua
+msgid "Refresh"
+msgstr ""
+
+#: builtin/mainmenu/tab_online.lua
+msgid "Server Description"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "2x"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "3D Clouds"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "4x"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "8x"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "All Settings"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Antialiasing:"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Autosave Screen Size"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Bilinear Filter"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua src/client/game.cpp
+msgid "Change Keys"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Connected Glass"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
+msgid "Dynamic shadows"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Dynamic shadows: "
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Fancy Leaves"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "High"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Low"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Medium"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Mipmap"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Mipmap + Aniso. Filter"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "No Filter"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "No Mipmap"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Node Highlighting"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Node Outlining"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "None"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Opaque Leaves"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Opaque Water"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Particles"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Screen:"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Settings"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
+msgid "Shaders"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Shaders (experimental)"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Shaders (unavailable)"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Simple Leaves"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Smooth Lighting"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Texturing:"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
+msgid "Tone Mapping"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Touchthreshold: (px)"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Trilinear Filter"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Ultra High"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Very Low"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Waving Leaves"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Waving Liquids"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Waving Plants"
+msgstr ""
+
+#: src/client/client.cpp src/client/game.cpp
+msgid "Connection timed out."
+msgstr ""
+
+#: src/client/client.cpp
+msgid "Done!"
+msgstr ""
+
+#: src/client/client.cpp
+msgid "Initializing nodes"
+msgstr ""
+
+#: src/client/client.cpp
+msgid "Initializing nodes..."
+msgstr ""
+
+#: src/client/client.cpp
+msgid "Loading textures..."
+msgstr ""
+
+#: src/client/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 "Please choose a name!"
+msgstr ""
+
+#: src/client/clientlauncher.cpp
+msgid "Provided password file failed to open: "
+msgstr ""
+
+#: src/client/clientlauncher.cpp
+msgid "Provided world path doesn't exist: "
+msgstr ""
+
+#: src/client/game.cpp
+msgid ""
+"\n"
+"Check debug.txt for details."
+msgstr ""
+
+#: src/client/game.cpp
+msgid "- Address: "
+msgstr ""
+
+#: src/client/game.cpp
+msgid "- Mode: "
+msgstr ""
+
+#: src/client/game.cpp
+msgid "- Port: "
+msgstr ""
+
+#: src/client/game.cpp
+msgid "- Public: "
+msgstr ""
+
+#. ~ PvP = Player versus Player
+#: src/client/game.cpp
+msgid "- PvP: "
+msgstr ""
+
+#: src/client/game.cpp
+msgid "- Server Name: "
+msgstr ""
+
+#: src/client/game.cpp
+msgid "A serialization error occurred:"
+msgstr ""
+
+#: src/client/game.cpp
+#, c-format
+msgid "Access denied. Reason: %s"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Automatic forward disabled"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Automatic forward enabled"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Block bounds hidden"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Block bounds shown for all blocks"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Block bounds shown for current block"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Block bounds shown for nearby blocks"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Camera update disabled"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Camera update enabled"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Can't show block bounds (need 'basic_debug' privilege)"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Change Password"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Cinematic mode disabled"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Cinematic mode enabled"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Client disconnected"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Client side scripting is disabled"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Connecting to server..."
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Connection failed for unknown reason"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Continue"
+msgstr ""
+
+#: src/client/game.cpp
+#, c-format
+msgid ""
+"Controls:\n"
+"- %s: move forwards\n"
+"- %s: move backwards\n"
+"- %s: move left\n"
+"- %s: move right\n"
+"- %s: jump/climb up\n"
+"- %s: dig/punch\n"
+"- %s: place/use\n"
+"- %s: sneak/climb down\n"
+"- %s: drop item\n"
+"- %s: inventory\n"
+"- Mouse: turn/look\n"
+"- Mouse wheel: select item\n"
+"- %s: chat\n"
+msgstr ""
+
+#: src/client/game.cpp
+#, c-format
+msgid "Couldn't resolve address: %s"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Creating client..."
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Creating server..."
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Debug info and profiler graph hidden"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Debug info shown"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Debug info, profiler graph, and wireframe hidden"
+msgstr ""
+
+#: src/client/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/client/game.cpp
+msgid "Disabled unlimited viewing range"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Enabled unlimited viewing range"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Exit to Menu"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Exit to OS"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Fast mode disabled"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Fast mode enabled"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Fast mode enabled (note: no 'fast' privilege)"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Fly mode disabled"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Fly mode enabled"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Fly mode enabled (note: no 'fly' privilege)"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Fog disabled"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Fog enabled"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Game info:"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Game paused"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Hosting server"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Item definitions..."
+msgstr ""
+
+#: src/client/game.cpp
+msgid "KiB/s"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Media..."
+msgstr ""
+
+#: src/client/game.cpp
+msgid "MiB/s"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Minimap currently disabled by game or mod"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Multiplayer"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Noclip mode disabled"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Noclip mode enabled"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Noclip mode enabled (note: no 'noclip' privilege)"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Node definitions..."
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Off"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "On"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Pitch move mode disabled"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Pitch move mode enabled"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Profiler graph shown"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Remote server"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Resolving address..."
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Shutting down..."
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Singleplayer"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Sound Volume"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Sound muted"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Sound system is disabled"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Sound system is not supported on this build"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Sound unmuted"
+msgstr ""
+
+#: src/client/game.cpp
+#, c-format
+msgid "The server is probably running a different version of %s."
+msgstr ""
+
+#: src/client/game.cpp
+#, c-format
+msgid "Unable to connect to %s because IPv6 is disabled"
+msgstr ""
+
+#: src/client/game.cpp
+#, c-format
+msgid "Unable to listen on %s because IPv6 is disabled"
+msgstr ""
+
+#: src/client/game.cpp
+#, c-format
+msgid "Viewing range changed to %d"
+msgstr ""
+
+#: src/client/game.cpp
+#, c-format
+msgid "Viewing range is at maximum: %d"
+msgstr ""
+
+#: src/client/game.cpp
+#, c-format
+msgid "Viewing range is at minimum: %d"
+msgstr ""
+
+#: src/client/game.cpp
+#, c-format
+msgid "Volume changed to %d%%"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Wireframe shown"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Zoom currently disabled by game or mod"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "ok"
+msgstr ""
+
+#: src/client/gameui.cpp
+msgid "Chat hidden"
+msgstr ""
+
+#: src/client/gameui.cpp
+msgid "Chat shown"
+msgstr ""
+
+#: src/client/gameui.cpp
+msgid "HUD hidden"
+msgstr ""
+
+#: src/client/gameui.cpp
+msgid "HUD shown"
+msgstr ""
+
+#: src/client/gameui.cpp
+msgid "Profiler hidden"
+msgstr ""
+
+#: src/client/gameui.cpp
+#, c-format
+msgid "Profiler shown (page %d of %d)"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Apps"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Backspace"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Caps Lock"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Control"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Down"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "End"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Erase EOF"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Execute"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Help"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Home"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "IME Accept"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "IME Convert"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "IME Escape"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "IME Mode Change"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "IME Nonconvert"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Insert"
+msgstr ""
+
+#: src/client/keycode.cpp src/gui/guiKeyChangeMenu.cpp
+msgid "Left"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Left Button"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Left Control"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Left Menu"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Left Shift"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Left Windows"
+msgstr ""
+
+#. ~ Key name, common on Windows keyboards
+#: src/client/keycode.cpp
+msgid "Menu"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Middle Button"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Num Lock"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Numpad *"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Numpad +"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Numpad -"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Numpad ."
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Numpad /"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Numpad 0"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Numpad 1"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Numpad 2"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Numpad 3"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Numpad 4"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Numpad 5"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Numpad 6"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Numpad 7"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Numpad 8"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Numpad 9"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "OEM Clear"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Page down"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Page up"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Pause"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Play"
+msgstr ""
+
+#. ~ "Print screen" key
+#: src/client/keycode.cpp
+msgid "Print"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Return"
+msgstr ""
+
+#: src/client/keycode.cpp src/gui/guiKeyChangeMenu.cpp
+msgid "Right"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Right Button"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Right Control"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Right Menu"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Right Shift"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Right Windows"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Scroll Lock"
+msgstr ""
+
+#. ~ Key name
+#: src/client/keycode.cpp
+msgid "Select"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Shift"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Sleep"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Snapshot"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Space"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Tab"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Up"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "X Button 1"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "X Button 2"
+msgstr ""
+
+#: src/client/keycode.cpp src/gui/guiKeyChangeMenu.cpp
+msgid "Zoom"
+msgstr ""
+
+#: src/client/minimap.cpp
+msgid "Minimap hidden"
+msgstr ""
+
+#: src/client/minimap.cpp
+#, c-format
+msgid "Minimap in radar mode, Zoom x%d"
+msgstr ""
+
+#: src/client/minimap.cpp
+#, c-format
+msgid "Minimap in surface mode, Zoom x%d"
+msgstr ""
+
+#: src/client/minimap.cpp
+msgid "Minimap in texture mode"
+msgstr ""
+
+#: src/gui/guiChatConsole.cpp
+msgid "Failed to open webpage"
+msgstr ""
+
+#: src/gui/guiChatConsole.cpp
+msgid "Opening webpage"
+msgstr ""
+
+#: src/gui/guiConfirmRegistration.cpp src/gui/guiPasswordChange.cpp
+msgid "Passwords do not match!"
+msgstr ""
+
+#: src/gui/guiConfirmRegistration.cpp
+msgid "Register and Join"
+msgstr ""
+
+#: src/gui/guiConfirmRegistration.cpp
+#, c-format
+msgid ""
+"You are about to join this server with the name \"%s\" for the first time.\n"
+"If you proceed, a new account using your credentials will be created on this "
+"server.\n"
+"Please retype your password and click 'Register and Join' to confirm account "
+"creation, or click 'Cancel' to abort."
+msgstr ""
+
+#: src/gui/guiFormSpecMenu.cpp
+msgid "Proceed"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "\"Aux1\" = climb down"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Autoforward"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp src/settings_translation_file.cpp
+msgid "Automatic jumping"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Aux1"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Backward"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Block bounds"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Change camera"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Chat"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Command"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Console"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Dec. range"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Dec. volume"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Double tap \"jump\" to toggle fly"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Drop"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Forward"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Inc. range"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Inc. volume"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Inventory"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Jump"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Key already in use"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Local command"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Mute"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Next item"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Prev. item"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Range select"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp src/settings_translation_file.cpp
+msgid "Screenshot"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Sneak"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Toggle HUD"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Toggle chat log"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Toggle fast"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Toggle fly"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Toggle fog"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Toggle minimap"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Toggle noclip"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Toggle pitchmove"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "press key"
+msgstr ""
+
+#: src/gui/guiPasswordChange.cpp
+msgid "Change"
+msgstr ""
+
+#: src/gui/guiPasswordChange.cpp
+msgid "Confirm Password"
+msgstr ""
+
+#: src/gui/guiPasswordChange.cpp
+msgid "New Password"
+msgstr ""
+
+#: src/gui/guiPasswordChange.cpp
+msgid "Old Password"
+msgstr ""
+
+#: src/gui/guiVolumeChange.cpp
+msgid "Exit"
+msgstr ""
+
+#: src/gui/guiVolumeChange.cpp
+msgid "Muted"
+msgstr ""
+
+#: src/gui/guiVolumeChange.cpp
+#, c-format
+msgid "Sound Volume: %d%%"
+msgstr ""
+
+#. ~ Imperative, as in "Enter/type in text".
+#. Don't forget the space.
+#: src/gui/modalMenu.cpp
+msgid "Enter "
+msgstr ""
+
+#. ~ DO NOT TRANSLATE THIS LITERALLY!
+#. This is a special string which needs to contain the translation's
+#. language code (e.g. "de" for German).
+#: src/network/clientpackethandler.cpp src/script/lua_api/l_client.cpp
+msgid "LANG_CODE"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"(Android) Fixes the position of virtual joystick.\n"
+"If disabled, virtual joystick will center to first-touch's position."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"(Android) Use virtual joystick to trigger \"Aux1\" button.\n"
+"If enabled, virtual joystick will also tap \"Aux1\" button when out of main "
+"circle."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"(X,Y,Z) offset of fractal from world center in units of 'scale'.\n"
+"Can be used to move a desired point to (0, 0) to create a\n"
+"suitable spawn point, or to allow 'zooming in' on a desired\n"
+"point by increasing 'scale'.\n"
+"The default is tuned for a suitable spawn point for Mandelbrot\n"
+"sets with default parameters, it may need altering in other\n"
+"situations.\n"
+"Range roughly -2 to 2. Multiply by 'scale' for offset in nodes."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"(X,Y,Z) scale of fractal in nodes.\n"
+"Actual fractal size will be 2 to 3 times larger.\n"
+"These numbers can be made very large, the fractal does\n"
+"not have to fit inside the world.\n"
+"Increase these to 'zoom' into the detail of the fractal.\n"
+"Default is for a vertically-squashed shape suitable for\n"
+"an island, set all 3 numbers equal for the raw shape."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "2D noise that controls the shape/size of ridged mountains."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "2D noise that controls the shape/size of rolling hills."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "2D noise that controls the shape/size of step mountains."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "2D noise that controls the size/occurrence of ridged mountain ranges."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "2D noise that controls the size/occurrence of rolling hills."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "2D noise that controls the size/occurrence of step mountain ranges."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "2D noise that locates the river valleys and channels."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "3D clouds"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "3D mode"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "3D mode parallax strength"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "3D noise defining giant caverns."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"3D noise defining mountain structure and height.\n"
+"Also defines structure of floatland mountain terrain."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"3D noise defining structure of floatlands.\n"
+"If altered from the default, the noise 'scale' (0.7 by default) may need\n"
+"to be adjusted, as floatland tapering functions best when this noise has\n"
+"a value range of approximately -2.0 to 2.0."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "3D noise defining structure of river canyon walls."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "3D noise defining terrain."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "3D noise for mountain overhangs, cliffs, etc. Usually small variations."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "3D noise that determines number of dungeons per mapchunk."
+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.\n"
+"- crossview: Cross-eyed 3d\n"
+"- pageflip: quadbuffer based 3d.\n"
+"Note that the interlaced mode requires shaders to be enabled."
+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 "ABM interval"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "ABM time budget"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Absolute limit of queued blocks to emerge"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Acceleration in air"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Acceleration of gravity, in nodes per second per second."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Active Block Modifiers"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Active block management interval"
+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 "Adds particles when digging a node."
+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 detected display density, used for scaling UI elements."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, c-format
+msgid ""
+"Adjusts the density of the floatland layer.\n"
+"Increase value to increase density. Can be positive or negative.\n"
+"Value = 0.0: 50% of volume is floatland.\n"
+"Value = 2.0 (can be higher depending on 'mgv7_np_floatland', always test\n"
+"to be sure) creates a solid floatland layer."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Advanced"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Alters the light curve by applying 'gamma correction' to it.\n"
+"Higher values make middle and lower light levels brighter.\n"
+"Value '1.0' leaves the light curve unaltered.\n"
+"This only has significant effect on daylight and artificial\n"
+"light, it has very little effect on natural night light."
+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 "Amount of messages a player may send per 10 seconds."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Amplifies the valleys."
+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."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Append item name"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Append item name to tooltip."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Apple trees noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Arm inertia"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Arm inertia, gives a more realistic movement of\n"
+"the arm when the camera moves."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Ask to reconnect after crash"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"At this distance the server will aggressively optimize which blocks are sent "
+"to\n"
+"clients.\n"
+"Small values potentially improve performance a lot, at the expense of "
+"visible\n"
+"rendering glitches (some blocks will not be rendered under water and in "
+"caves,\n"
+"as well as sometimes on land).\n"
+"Setting this to a value greater than max_block_send_distance disables this\n"
+"optimization.\n"
+"Stated in mapblocks (16 nodes)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Automatic forward key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Automatically jump up single-node obstacles."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Automatically report to the serverlist."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Autosave screen size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Autoscaling mode"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Aux1 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Aux1 key for climbing/descending"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Backward key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Base ground level"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Base terrain height."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Basic"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Basic privileges"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Beach noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Beach noise threshold"
+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 "Biome API temperature and humidity noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Biome noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Block send optimize distance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Bold and italic font path"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Bold and italic monospace font path"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Bold font path"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Bold monospace font path"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Build inside player"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Builtin"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Camera 'near clipping plane' distance in nodes, between 0 and 0.25\n"
+"Only works on GLES platforms. Most users will not need to change this.\n"
+"Increasing can reduce artifacting on weaker GPUs.\n"
+"0.1 = Default, 0.25 = Good value for weaker tablets."
+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 "Cave noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Cave noise #1"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Cave noise #2"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Cave width"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Cave1 noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Cave2 noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Cavern limit"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Cavern noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Cavern taper"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Cavern threshold"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Cavern upper limit"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Center of light curve boost range.\n"
+"Where 0.0 is minimum light level, 1.0 is maximum light level."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Chat command time message threshold"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Chat commands"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Chat font size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Chat key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Chat log level"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Chat message count limit"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Chat message format"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Chat message kick threshold"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Chat message max length"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Chat toggle key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Chat weblinks"
+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 ""
+"Clickable weblinks (middle-click or Ctrl+left-click) enabled in chat console "
+"output."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Client"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Client and Server"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Client modding"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Client side modding restrictions"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Client side node lookup range restriction"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Climbing speed"
+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 "Colored shadows"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Comma-separated list of flags to hide in the content repository.\n"
+"\"nonfree\" can be used to hide packages which do not qualify as 'free "
+"software',\n"
+"as defined by the Free Software Foundation.\n"
+"You can also specify content ratings.\n"
+"These flags are independent from Minetest versions,\n"
+"so see a full list at https://content.minetest.net/help/content_flags/"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Comma-separated list of mods that are allowed to access HTTP APIs, which\n"
+"allow them to upload and download data to/from the internet."
+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 ""
+"Compression level to use when saving mapblocks to disk.\n"
+"-1 - use default compression level\n"
+"0 - least compression, fastest\n"
+"9 - best compression, slowest"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Compression level to use when sending mapblocks to the client.\n"
+"-1 - use default compression level\n"
+"0 - least compression, fastest\n"
+"9 - best compression, slowest"
+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 height"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "ContentDB Flag Blacklist"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "ContentDB Max Concurrent Downloads"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "ContentDB URL"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Continuous forward"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Continuous forward movement, toggled by autoforward key.\n"
+"Press the autoforward key again or the backwards movement to disable."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Controls"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Controls length of day/night cycle.\n"
+"Examples:\n"
+"72 = 20min, 360 = 4min, 1 = 24hour, 0 = day/night/whatever stays unchanged."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Controls sinking speed in liquid."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Controls steepness/depth of lake depressions."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Controls steepness/height of hills."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Controls width of tunnels, a smaller value creates wider tunnels.\n"
+"Value >= 10.0 completely disables generation of tunnels and avoids the\n"
+"intensive noise calculations."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Crash message"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Creative"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Crosshair alpha"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Crosshair alpha (opaqueness, between 0 and 255).\n"
+"This also applies to the object crosshair."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Crosshair color"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Crosshair color (R,G,B).\n"
+"Also controls the object crosshair color"
+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 file size threshold"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Debug log level"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Dec. volume key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Decrease this to increase liquid resistance to movement."
+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 report format"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Default stack size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Define shadow filtering quality.\n"
+"This simulates the soft shadows effect by applying a PCF or Poisson disk\n"
+"but also uses more resources."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Defines areas where trees have apples."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Defines areas with sandy beaches."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Defines distribution of higher terrain and steepness of cliffs."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Defines distribution of higher terrain."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Defines full size of caverns, smaller values create larger caverns."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Defines large-scale river channel structure."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Defines location and terrain of optional hills and lakes."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Defines the base ground level."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Defines the depth of the river channel."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Defines the maximal player transfer distance in blocks (0 = unlimited)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Defines the width of the river channel."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Defines the width of the river valley."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Defines tree areas and tree density."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Delay between mesh updates on the client in ms. Increasing this will slow\n"
+"down the rate of mesh updates, thus reducing jitter on slower clients."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Delay in sending blocks after building"
+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 "Depth below which you'll find giant caverns."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Depth below which you'll find large caves."
+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 "Desert noise threshold"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Deserts occur when np_biome exceeds this value.\n"
+"When the 'snowbiomes' flag is enabled, this is ignored."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Desynchronize block animation"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Dig key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Digging particles"
+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 "Display Density Scaling Factor"
+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 information."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Dungeon maximum Y"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Dungeon minimum Y"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Dungeon noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable IPv6 support (for both client and server).\n"
+"Required for IPv6 connections to work at all."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable Lua modding support on client.\n"
+"This support is experimental and API can change."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable Poisson disk filtering.\n"
+"On true uses Poisson disk to make \"soft shadows\". Otherwise uses PCF "
+"filtering."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable colored shadows.\n"
+"On true translucent nodes cast colored shadows. This is expensive."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Enable console window"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Enable creative mode for all players"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Enable joysticks"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Enable mod channels support."
+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 register confirmation"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable register confirmation when connecting to server.\n"
+"If disabled, new account will be registered automatically."
+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 vertex buffer objects.\n"
+"This should greatly improve graphics performance."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable view bobbing and amount of 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 ""
+"Enable/disable running an IPv6 server.\n"
+"Ignored if bind_address is set.\n"
+"Needs enable_ipv6 to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enables Hable's 'Uncharted 2' filmic tone mapping.\n"
+"Simulates the tone curve of photographic film and how this approximates the\n"
+"appearance of high dynamic range images. Mid-range contrast is slightly\n"
+"enhanced, highlights and shadows are gradually compressed."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Enables animation of inventory items."
+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 the sound system.\n"
+"If disabled, this completely disables all sounds everywhere and the in-game\n"
+"sound controls will be non-functional.\n"
+"Changing this setting requires a restart."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enables tradeoffs that reduce CPU load or increase rendering performance\n"
+"at the expense of minor visual glitches that do not impact game playability."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Engine profiling data print interval"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Entity methods"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Exponent of the floatland tapering. Alters the tapering behaviour.\n"
+"Value = 1.0 creates a uniform, linear tapering.\n"
+"Values > 1.0 create a smooth tapering suitable for the default separated\n"
+"floatlands.\n"
+"Values < 1.0 (for example 0.25) create a more defined surface level with\n"
+"flatter lowlands, suitable for a solid floatland layer."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "FPS when unfocused or paused"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "FSAA"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Factor noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fall bobbing factor"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fallback font path"
+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 the \"Aux1\" key).\n"
+"This requires the \"fast\" privilege on the server."
+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\n"
+"Multiplayer Tab."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Filler depth"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Filler depth noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Filmic tone mapping"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Filtered textures can blend RGB values with fully-transparent neighbors,\n"
+"which PNG optimizers usually discard, often resulting in dark or\n"
+"light edges to transparent textures. Apply a filter to clean that up\n"
+"at texture load time. This is automatically enabled if mipmapping is enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Filtering"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "First of 4 2D noises that together define hill/mountain range height."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "First of two 3D noises that together define tunnels."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fixed map seed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fixed virtual joystick"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland density"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland maximum Y"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland minimum Y"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland taper exponent"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland tapering distance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland water level"
+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 start"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fog toggle key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Font bold by default"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Font italic by default"
+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 size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Font size divisible by"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Font size of the default font where 1 unit = 1 pixel at 96 DPI"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Font size of the monospace font where 1 unit = 1 pixel at 96 DPI"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Font size of the recent chat text and chat prompt in point (pt).\n"
+"Value 0 will use the default font size."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"For pixel-style fonts that do not scale well, this ensures that font sizes "
+"used\n"
+"with this font will always be divisible by this value, in pixels. For "
+"instance,\n"
+"a pixel font 16 pixels tall should have this set to 16, so it will only ever "
+"be\n"
+"sized 16, 32, 48, etc., so a mod requesting a size of 25 will get 32."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Format of player chat messages. The following strings are valid "
+"placeholders:\n"
+"@name, @message, @timestamp (optional)"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Format of screenshots."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Formspec Default Background Color"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Formspec Default Background Opacity"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Formspec Full-Screen Background Color"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Formspec Full-Screen Background Opacity"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Formspec default background color (R,G,B)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Formspec default background opacity (between 0 and 255)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Formspec full-screen background color (R,G,B)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Formspec full-screen background opacity (between 0 and 255)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Forward key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fourth of 4 2D noises that together define hill/mountain range height."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fractal type"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fraction of the visible distance at which fog starts to be rendered"
+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).\n"
+"\n"
+"Setting this larger than active_block_range will also cause the server\n"
+"to maintain active objects up to this distance in the direction the\n"
+"player is looking. (This can avoid mobs suddenly disappearing from view)"
+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 "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 "Global callbacks"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Global map generation attributes.\n"
+"In Mapgen v6 the 'decorations' flag controls all decorations except trees\n"
+"and jungle grass, in all other mapgens this flag controls all decorations."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Gradient of light curve at maximum light level.\n"
+"Controls the contrast of the highest light levels."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Gradient of light curve at minimum light level.\n"
+"Controls the contrast of the lowest light levels."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Graphics"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Gravity"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Ground level"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Ground noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "HTTP mods"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "HUD scale factor"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "HUD toggle key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Handling for deprecated Lua API calls:\n"
+"- none: Do not log deprecated calls\n"
+"- log: mimic and log backtrace of deprecated call (default).\n"
+"- error: abort on usage of deprecated call (suggested for mod developers)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Have the profiler instrument itself:\n"
+"* Instrument an empty function.\n"
+"This estimates the overhead, that instrumentation is adding (+1 function "
+"call).\n"
+"* Instrument the sampler being used to update the statistics."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Heat blend noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Heat noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Height component of the initial window size. Ignored in fullscreen mode."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Height noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Height select noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hill steepness"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hill threshold"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hilliness1 noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hilliness2 noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hilliness3 noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hilliness4 noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Homepage of server, to be displayed in the serverlist."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Horizontal acceleration in air when jumping or falling,\n"
+"in nodes per second per second."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Horizontal and vertical acceleration in fast mode,\n"
+"in nodes per second per second."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Horizontal and vertical acceleration on ground or when climbing,\n"
+"in nodes per second per second."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar next key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar previous key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 1 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 10 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 11 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 12 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 13 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 14 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 15 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 16 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 17 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 18 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 19 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 2 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 20 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 21 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 22 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 23 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 24 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 25 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 26 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 27 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 28 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 29 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 3 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 30 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 31 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 32 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 4 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 5 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 6 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 7 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 8 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 9 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "How deep to make rivers."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"How fast liquid waves will move. Higher = faster.\n"
+"If negative, liquid waves will move backwards.\n"
+"Requires waving liquids to be enabled."
+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 "How wide to make rivers."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Humidity blend noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Humidity noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Humidity variation for biomes."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "IPv6"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "IPv6 server"
+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, \"Aux1\" key is used to fly fast if both fly and fast mode are\n"
+"enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"If enabled the server will perform map block occlusion culling based on\n"
+"on the eye position of the player. This can reduce the number of blocks\n"
+"sent to the client 50-80%. The client will not longer receive most "
+"invisible\n"
+"so that the utility of noclip mode is reduced."
+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 \"noclip\" privilege on the server."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"If enabled, \"Aux1\" key instead of \"Sneak\" key is used for climbing down "
+"and\n"
+"descending."
+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, makes move directions relative to the player's pitch when flying "
+"or swimming."
+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 the CSM restriction for node range is enabled, get_node calls are "
+"limited\n"
+"to this distance from the player to the node."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"If the execution of a chat command takes longer than this specified time in\n"
+"seconds, add the time information to the chat command message"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"If the file size of debug.txt exceeds the number of megabytes specified in\n"
+"this setting when it is opened, the file is moved to debug.txt.1,\n"
+"deleting an older debug.txt.1 if it exists.\n"
+"debug.txt is only moved if this setting is positive."
+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 "In-game chat console height, between 0.1 (10%) and 1.0 (100%)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Inc. volume key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Initial vertical speed when jumping, in nodes per second."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Instrument builtin.\n"
+"This is usually only needed by core/builtin contributors"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Instrument chat commands on registration."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Instrument global callback functions on registration.\n"
+"(anything you pass to a minetest.register_*() function)"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Instrument the action function of Active Block Modifiers on registration."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Instrument the action function of Loading Block Modifiers on registration."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Instrument the methods of entities on registration."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Instrumentation"
+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 items animations"
+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 "Italic font path"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Italic monospace font path"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Item entity TTL"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Iterations"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Iterations of the recursive function.\n"
+"Increasing this increases the amount of fine detail, but also\n"
+"increases processing load.\n"
+"At iterations = 20 this mapgen has a similar load to mapgen V7."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Joystick ID"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Joystick button repetition interval"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Joystick dead zone"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Joystick frustum sensitivity"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Joystick type"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Julia set only.\n"
+"W component of hypercomplex constant.\n"
+"Alters the shape of the fractal.\n"
+"Has no effect on 3D fractals.\n"
+"Range roughly -2 to 2."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Julia set only.\n"
+"X component of hypercomplex constant.\n"
+"Alters the shape of the fractal.\n"
+"Range roughly -2 to 2."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Julia set only.\n"
+"Y component of hypercomplex constant.\n"
+"Alters the shape of the fractal.\n"
+"Range roughly -2 to 2."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Julia set only.\n"
+"Z component of hypercomplex constant.\n"
+"Alters the shape of the fractal.\n"
+"Range roughly -2 to 2."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Julia w"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Julia x"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Julia y"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Julia z"
+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.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for decreasing the volume.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for digging.\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.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for increasing the volume.\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"
+"Will also disable autoforward, when active.\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 muting the game.\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 to type local 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 placing.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 11th hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 12th hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 13th hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 14th hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 15th hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 16th hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 17th hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 18th hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 19th hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 20th hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 21st hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 22nd hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 23rd hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 24th hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 25th hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 26th hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 27th hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 28th hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 29th hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 30th hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 31st hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 32nd hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the eighth hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the fifth hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the first hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the fourth hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the next item in the hotbar.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the ninth hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the previous item in the hotbar.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the second hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the seventh hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the sixth hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the tenth hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the third hotbar slot.\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 autoforward.\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 pitch move mode.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling the camera 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 chat.\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 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 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 large chat console.\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 to use view zoom when possible.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Kick players who sent more than X messages per 10 seconds."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Lake steepness"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Lake threshold"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Language"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Large cave depth"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Large cave maximum number"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Large cave minimum number"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Large cave proportion flooded"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Large chat console key"
+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\n"
+"network."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Length of liquid waves.\n"
+"Requires waving liquids to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Length of time between Active Block Modifier (ABM) execution cycles"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Length of time between NodeTimer execution cycles"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Length of time between active block management cycles"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Level of logging to be written to debug.txt:\n"
+"- <nothing> (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 "Light curve boost"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Light curve boost center"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Light curve boost spread"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Light curve gamma"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Light curve high gradient"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Light curve low gradient"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Limit of map generation, in nodes, in all 6 directions from (0, 0, 0).\n"
+"Only mapchunks completely within the mapgen limit are generated.\n"
+"Value is stored per-world."
+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 sinking"
+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 "Load the game profiler"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Load the game profiler to collect game profiling data.\n"
+"Provides a /profiler command to access the compiled profile.\n"
+"Useful for mod developers and server operators."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Loading Block Modifiers"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Lower Y limit of dungeons."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Lower Y limit of floatlands."
+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 all liquids opaque"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Map Compression Level for Disk Storage"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Map Compression Level for Network Transfer"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Map directory"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Map generation attributes specific to Mapgen Carpathian."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Map generation attributes specific to Mapgen Flat.\n"
+"Occasional lakes and hills can be added to the flat world."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Map generation attributes specific to Mapgen Fractal.\n"
+"'terrain' enables the generation of non-fractal terrain:\n"
+"ocean, islands and underground."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Map generation attributes specific to Mapgen Valleys.\n"
+"'altitude_chill': Reduces heat with altitude.\n"
+"'humid_rivers': Increases humidity around rivers.\n"
+"'vary_river_depth': If enabled, low humidity and high heat causes rivers\n"
+"to become shallower and occasionally dry.\n"
+"'altitude_dry': Reduces humidity with altitude."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Map generation attributes specific to Mapgen v5."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Map generation attributes specific to Mapgen v6.\n"
+"The 'snowbiomes' flag enables the new 5 biome system.\n"
+"When the 'snowbiomes' flag is enabled jungles are automatically enabled and\n"
+"the 'jungles' flag is ignored."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Map generation attributes specific to Mapgen v7.\n"
+"'ridges': Rivers.\n"
+"'floatlands': Floating land masses in the atmosphere.\n"
+"'caverns': Giant caves deep underground."
+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 "Map shadows update frames"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapblock limit"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapblock mesh generation delay"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapblock mesh generator's MapBlock cache size in MB"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapblock unload timeout"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen Carpathian"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen Carpathian specific flags"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen Flat"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen Flat specific flags"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen Fractal"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen Fractal specific flags"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen V5"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen V5 specific flags"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen V6"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen V6 specific flags"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen V7"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen V7 specific flags"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen Valleys"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen Valleys specific flags"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen debug"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen name"
+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 the window is not focused, or when the game is paused."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum distance to render shadows."
+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 limit of random number of large caves per mapchunk."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum limit of random number of small caves per mapchunk."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum liquid resistance. Controls deceleration when entering liquid at\n"
+"high speed."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum number of blocks that are simultaneously sent per client.\n"
+"The maximum total count is calculated dynamically:\n"
+"max_total = ceil((#clients + max_users) * per_client / 4)"
+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"
+"This limit is enforced per player."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum number of blocks to be queued that are to be loaded from file.\n"
+"This limit is enforced per player."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum number of concurrent downloads. Downloads exceeding this limit will "
+"be queued.\n"
+"This should be lower than curl_parallel_limit."
+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 be connected simultaneously."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum number of recent chat messages to show"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum number of statically stored objects in a block."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum objects per 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 simultaneous block sends per client"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum size of the out chat queue"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum size of the out chat queue.\n"
+"0 to disable queueing and -1 to make the queue size unlimited."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum time a file download (e.g. a mod download) may take, stated in "
+"milliseconds."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum time an interactive request (e.g. server list fetch) may take, "
+"stated in milliseconds."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum users"
+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 "Method used to highlight selected object."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Minimal level of logging to be written to chat."
+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 limit of random number of large caves per mapchunk."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Minimum limit of random number of small caves per mapchunk."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Minimum texture size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mipmapping"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mod channels"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Modifies the size of the HUD elements."
+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 "Monospace font size divisible by"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mountain height noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mountain noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mountain variation noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mountain zero level"
+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 "Mud noise"
+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 "Mute key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mute sound"
+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.\n"
+"Current mapgens in a highly unstable state:\n"
+"- The optional floatlands of v7 (disabled by default)."
+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 "Near plane"
+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 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 "NodeTimer interval"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Noises"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Number of emerge threads"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Number of emerge threads to use.\n"
+"Value 0:\n"
+"- Automatic selection. The number of emerge threads will be\n"
+"- 'number of processors - 2', with a lower limit of 1.\n"
+"Any other value:\n"
+"- Specifies the number of emerge threads, with a lower limit of 1.\n"
+"WARNING: Increasing the number of emerge threads increases engine mapgen\n"
+"speed, but this may harm game performance by interfering with other\n"
+"processes, especially in singleplayer and/or when running Lua code in\n"
+"'on_generated'. For many users the optimum setting may be '1'."
+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 "Online Content Repository"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Opaque liquids"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Opaqueness (alpha) of the shadow behind the default font, between 0 and 255."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Open the pause menu when the window's focus is lost. Does not pause if a "
+"formspec is\n"
+"open."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Optional override for chat weblink color."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Path of the fallback font. Must be a TrueType font.\n"
+"This font will be used for certain languages or if the default font is "
+"unavailable."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Path to save screenshots at. Can be an absolute or relative path.\n"
+"The folder will be created if it doesn't already exist."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Path to shader directory. If no path is defined, default location will be "
+"used."
+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 ""
+"Path to the default font. Must be a TrueType font.\n"
+"The fallback font will be used if the font cannot be loaded."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Path to the monospace font. Must be a TrueType font.\n"
+"This font is used for e.g. the console and profiler screen."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Pause on lost window focus"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Per-player limit of queued blocks load from disk"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Per-player limit of queued blocks to generate"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Physics"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Pitch move key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Pitch move mode"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Place key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Place repetition interval"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Player is able to fly without being affected by gravity.\n"
+"This requires the \"fly\" privilege on the server."
+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 "Poisson filtering"
+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 ""
+"Prevent digging and placing from repeating when holding the mouse buttons.\n"
+"Enable this when you dig or place too often by accident."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Prevent mods from doing insecure things like running shell commands."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Print the engine's profiling data in regular intervals (in seconds).\n"
+"0 = disable. Useful for developers."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Privileges that players with basic_privs can grant"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Profiler"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Profiler toggle key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Profiling"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Prometheus listener address"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Prometheus listener address.\n"
+"If Minetest is compiled with ENABLE_PROMETHEUS option enabled,\n"
+"enable metrics listener for Prometheus on that address.\n"
+"Metrics can be fetched on http://127.0.0.1:30000/metrics"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Proportion of large caves that contain liquid."
+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 "Raises terrain to make valleys around the rivers."
+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 "Recent Chat Messages"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Regular font path"
+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 ""
+"Remove color codes from incoming chat messages\n"
+"Use this to stop players from being able to use color in their messages"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Replaces the default main menu with a custom one."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Report path"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Restricts the access of certain client-side functions on servers.\n"
+"Combine the byteflags below to restrict client-side features, or set to 0\n"
+"for no restrictions:\n"
+"LOAD_CLIENT_MODS: 1 (disable loading client-provided mods)\n"
+"CHAT_MESSAGES: 2 (disable send_chat_message call client-side)\n"
+"READ_ITEMDEFS: 4 (disable get_item_def call client-side)\n"
+"READ_NODEDEFS: 8 (disable get_node_def call client-side)\n"
+"LOOKUP_NODES_LIMIT: 16 (limits get_node call client-side to\n"
+"csm_restriction_noderange)\n"
+"READ_PLAYERINFO: 32 (disable get_player_names call client-side)"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Ridge mountain spread noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Ridge noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Ridge underwater noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Ridged mountain size noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Right key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "River channel depth"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "River channel width"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "River depth"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "River noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "River size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "River valley width"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Rollback recording"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Rolling hill size noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Rolling hills spread noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Round minimap"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Safe digging and placing"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Sandy beaches occur when np_beach exceeds this value."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Save the map received by the client on disk."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Save window size automatically when modified."
+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 folder"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Screenshot format"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Screenshot quality"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Screenshot quality. Only used for JPEG format.\n"
+"1 means worst quality; 100 means best quality.\n"
+"Use 0 for default quality."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Seabed noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Second of 4 2D noises that together define hill/mountain range height."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Second of two 3D noises that together define tunnels."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Security"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "See https://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 ""
+"Selects one of 18 fractal types.\n"
+"1 = 4D \"Roundy\" Mandelbrot set.\n"
+"2 = 4D \"Roundy\" Julia set.\n"
+"3 = 4D \"Squarry\" Mandelbrot set.\n"
+"4 = 4D \"Squarry\" Julia set.\n"
+"5 = 4D \"Mandy Cousin\" Mandelbrot set.\n"
+"6 = 4D \"Mandy Cousin\" Julia set.\n"
+"7 = 4D \"Variation\" Mandelbrot set.\n"
+"8 = 4D \"Variation\" Julia set.\n"
+"9 = 3D \"Mandelbrot/Mandelbar\" Mandelbrot set.\n"
+"10 = 3D \"Mandelbrot/Mandelbar\" Julia set.\n"
+"11 = 3D \"Christmas Tree\" Mandelbrot set.\n"
+"12 = 3D \"Christmas Tree\" Julia set.\n"
+"13 = 3D \"Mandelbulb\" Mandelbrot set.\n"
+"14 = 3D \"Mandelbulb\" Julia set.\n"
+"15 = 3D \"Cosine Mandelbulb\" Mandelbrot set.\n"
+"16 = 3D \"Cosine Mandelbulb\" Julia set.\n"
+"17 = 4D \"Mandelbulb\" Mandelbrot set.\n"
+"18 = 4D \"Mandelbulb\" Julia set."
+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 "Server side occlusion culling"
+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 the maximum character length of a chat message sent by clients."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set the shadow strength.\n"
+"Lower value means lighter shadows, higher value means darker shadows."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set the soft shadow radius size.\n"
+"Lower values mean sharper shadows, bigger values mean softer shadows.\n"
+"Minimum value: 1.0; maximum value: 10.0"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set the tilt of Sun/Moon orbit in degrees.\n"
+"Value of 0 means no tilt / vertical orbit.\n"
+"Minimum value: 0.0; maximum value: 60.0"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set to true to enable Shadow Mapping.\n"
+"Requires shaders to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set to true to enable waving leaves.\n"
+"Requires shaders to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set to true to enable waving liquids (like water).\n"
+"Requires shaders to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set to true to enable waving plants.\n"
+"Requires shaders to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Sets shadow texture quality to 32 bits.\n"
+"On false, 16 bits texture will be used.\n"
+"This can cause much more artifacts in the shadow."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Shader path"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Shaders allow advanced visual effects and may increase performance on some "
+"video\n"
+"cards.\n"
+"This only works with the OpenGL video backend."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Shadow filter quality"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Shadow map max distance in nodes to render shadows"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Shadow map texture in 32 bits"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Shadow map texture size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Shadow offset (in pixels) of the default font. If 0, then shadow will not be "
+"drawn."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Shadow strength"
+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 "Show entity selection boxes"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Show entity selection boxes\n"
+"A restart is required after changing this."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Show name tag backgrounds by default"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Shutdown message"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Size of mapchunks generated by mapgen, stated in mapblocks (16 nodes).\n"
+"WARNING!: There is no benefit, and there are several dangers, in\n"
+"increasing this value above 5.\n"
+"Reducing this value increases cave and dungeon density.\n"
+"Altering this value is for special usage, leaving it unchanged is\n"
+"recommended."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Size of the MapBlock cache of the mesh generator. Increasing this will\n"
+"increase the cache hit %, reducing the data being copied from the main\n"
+"thread, thus reducing jitter."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Sky Body Orbit Tilt"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Slice w"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Slope and fill work together to modify the heights."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Small cave maximum number"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Small cave minimum number"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Small-scale humidity variation for blending biomes on borders."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Small-scale temperature variation for blending biomes on borders."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Smooth lighting"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Smooths camera when looking around. Also called look or mouse smoothing.\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 "Sneaking speed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Sneaking speed, in nodes per second."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Soft shadow radius"
+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 ""
+"Specifies the default stack size of nodes, items and tools.\n"
+"Note that mods or games may explicitly set a stack for certain (or all) "
+"items."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Spread a complete update of shadow map over given amount of frames.\n"
+"Higher values might make shadows laggy, lower values\n"
+"will consume more resources.\n"
+"Minimum value: 1; maximum value: 16"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Spread of light curve boost range.\n"
+"Controls the width of the range to be boosted.\n"
+"Standard deviation of the light curve boost Gaussian."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Static spawnpoint"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Steepness noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Step mountain size noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Step mountain spread noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Strength of 3D mode parallax."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Strength of light curve boost.\n"
+"The 3 'boost' parameters define a range of the light\n"
+"curve that is boosted in brightness."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Strict protocol checking"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Strip color codes"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Surface level of optional water placed on a solid floatland layer.\n"
+"Water is disabled by default and will only be placed if this value is set\n"
+"to above 'mgv7_floatland_ymax' - 'mgv7_floatland_taper' (the start of the\n"
+"upper tapering).\n"
+"***WARNING, POTENTIAL DANGER TO WORLDS AND SERVER PERFORMANCE***:\n"
+"When enabling water placement the floatlands must be configured and tested\n"
+"to be a solid layer by setting 'mgv7_floatland_density' to 2.0 (or other\n"
+"required value depending on 'mgv7_np_floatland'), to avoid\n"
+"server-intensive extreme water flow and to avoid vast flooding of the\n"
+"world surface below."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Synchronous SQLite"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Temperature variation for biomes."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Terrain alternative noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Terrain base noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Terrain height"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Terrain higher noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Terrain noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Terrain noise threshold for hills.\n"
+"Controls proportion of world area covered by hills.\n"
+"Adjust towards 0.0 for a larger proportion."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Terrain noise threshold for lakes.\n"
+"Controls proportion of world area covered by lakes.\n"
+"Adjust towards 0.0 for a larger proportion."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Terrain persistence noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Texture path"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Texture size to render the shadow map on.\n"
+"This must be a power of two.\n"
+"Bigger numbers create better shadows but it is also more expensive."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Textures on a node may be aligned either to the node or to the world.\n"
+"The former mode suits better things like machines, furniture, etc., while\n"
+"the latter makes stairs and microblocks fit surroundings better.\n"
+"However, as this possibility is new, thus may not be used by older servers,\n"
+"this option allows enforcing it for certain node types. Note though that\n"
+"that is considered EXPERIMENTAL and may not work properly."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "The URL for the content repository"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "The dead zone of the joystick"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The default format in which profiles are being saved,\n"
+"when calling `/profiler save [format]` without format."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "The depth of dirt or other biome filler node."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The file path relative to your worldpath in which profiles will be saved to."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "The identifier of the joystick to use"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "The length in pixels it takes for touch screen interaction to start."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The maximum height of the surface of waving liquids.\n"
+"4.0 = Wave height is two nodes.\n"
+"0.0 = Wave doesn't move at all.\n"
+"Default is 1.0 (1/2 node).\n"
+"Requires waving liquids to be enabled."
+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 radius of the volume of blocks around every player that is subject to "
+"the\n"
+"active block stuff, stated in mapblocks (16 nodes).\n"
+"In active blocks objects are loaded and ABMs run.\n"
+"This is also the minimum range in which active objects (mobs) are "
+"maintained.\n"
+"This should be configured together with active_object_send_range_blocks."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The rendering back-end.\n"
+"A restart is required after changing this.\n"
+"Note: On Android, stick with OGLES1 if unsure! App may fail to start "
+"otherwise.\n"
+"On other platforms, OpenGL is recommended.\n"
+"Shaders are supported by OpenGL (desktop only) and OGLES2 (experimental)"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The sensitivity of the joystick axes for moving the\n"
+"in-game view frustum around."
+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 budget allowed for ABMs to execute on each step\n"
+"(as a fraction of the ABM Interval)"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The time in seconds it takes between repeated events\n"
+"when holding down a joystick button combination."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The time in seconds it takes between repeated node placements when holding\n"
+"the place button."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "The type of joystick"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The vertical distance over which heat drops by 20 if 'altitude_chill' is\n"
+"enabled. Also the vertical distance over which humidity drops by 10 if\n"
+"'altitude_dry' is enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Third of 4 2D noises that together define hill/mountain range height."
+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 of day when a new world is started, in millihours (0-23999)."
+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 "Touch screen threshold"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Tradeoffs for performance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Trees noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Trilinear filtering"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"True = 256\n"
+"False = 128\n"
+"Usable 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 "Undersampling"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Undersampling is similar to using a lower screen resolution, but it applies\n"
+"to the game world only, keeping the GUI intact.\n"
+"It should give a significant performance boost at the cost of less detailed "
+"image.\n"
+"Higher values result in a less detailed image."
+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 "Upper Y limit of dungeons."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Upper Y limit of floatlands."
+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 mipmapping to scale textures. May slightly increase performance,\n"
+"especially when using a high resolution texture pack.\n"
+"Gamma correct downscaling is not supported."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Use multi-sample antialiasing (MSAA) to smooth out block edges.\n"
+"This algorithm smooths out the 3D viewport while keeping the image sharp,\n"
+"but it doesn't affect the insides of textures\n"
+"(which is especially noticeable with transparent textures).\n"
+"Visible spaces appear between nodes when shaders are disabled.\n"
+"If set to 0, MSAA is disabled.\n"
+"A restart is required after changing this option."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Use trilinear filtering when scaling textures."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "VBO"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "VSync"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Valley depth"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Valley fill"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Valley profile"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Valley slope"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Variation of biome filler depth."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Variation of maximum mountain height (in nodes)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Variation of number of caves."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Variation of terrain vertical scale.\n"
+"When noise is < -0.55 terrain is near-flat."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Varies depth of biome surface nodes."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Varies roughness of terrain.\n"
+"Defines the 'persistence' value for terrain_base and terrain_alt noises."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Varies steepness of cliffs."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Vertical climbing speed, in nodes per second."
+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 factor"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "View distance in nodes."
+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 "View zoom key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Viewing range"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Virtual joystick triggers Aux1 button"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Volume"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Volume of all sounds.\n"
+"Requires the sound system to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"W coordinate of the generated 3D slice of a 4D fractal.\n"
+"Determines which 3D slice of the 4D shape is generated.\n"
+"Alters the shape of the fractal.\n"
+"Has no effect on 3D fractals.\n"
+"Range roughly -2 to 2."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Walking and flying speed, in nodes per second."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Walking speed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Walking, flying and climbing speed in fast mode, in nodes per second."
+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 liquids"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Waving liquids wave height"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Waving liquids wave speed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Waving liquids wavelength"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Waving plants"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Weblink color"
+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"
+"properly 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. This setting is ONLY applied if\n"
+"bilinear/trilinear/anisotropic filtering is enabled.\n"
+"This is also used as the base node texture size for world-aligned\n"
+"texture autoscaling."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Whether name tag backgrounds should be shown by default.\n"
+"Mods may still set a background."
+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 mute sounds. You can unmute sounds at any time, unless the\n"
+"sound system is disabled (enable_sound=false).\n"
+"In-game, you can toggle the mute state with the mute key or by using the\n"
+"pause menu."
+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 component of the initial window size. Ignored in fullscreen mode."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Width of the selection box lines around nodes."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Windows systems only: Start Minetest with the command line window in the "
+"background.\n"
+"Contains the same information as the file debug.txt (default name)."
+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 "World start time"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"World-aligned textures may be scaled to span several nodes. However,\n"
+"the server may not send the scale you want, especially if you use\n"
+"a specially-designed texture pack; with this option, the client tries\n"
+"to determine the scale automatically basing on the texture size.\n"
+"See also texture_min_size.\n"
+"Warning: This option is EXPERIMENTAL!"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "World-aligned textures mode"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Y of flat ground."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Y of mountain density gradient zero level. Used to shift mountains "
+"vertically."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Y of upper limit of large caves."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Y-distance over which caverns expand to full size."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Y-distance over which floatlands taper from full density to nothing.\n"
+"Tapering starts at this distance from the Y limit.\n"
+"For a solid floatland layer, this controls the height of hills/mountains.\n"
+"Must be less than or equal to half the distance between the Y limits."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Y-level of average terrain surface."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Y-level of cavern upper limit."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Y-level of higher terrain that creates cliffs."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Y-level of lower terrain and seabed."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Y-level of seabed."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "cURL file download timeout"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "cURL interactive timeout"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "cURL parallel limit"
+msgstr ""
diff --git a/po/fr/minetest.po b/po/fr/minetest.po
index 2eed94406..551052004 100644
--- a/po/fr/minetest.po
+++ b/po/fr/minetest.po
@@ -2,8 +2,8 @@ msgid ""
msgstr ""
"Project-Id-Version: French (Minetest)\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-02-23 19:03+0100\n"
-"PO-Revision-Date: 2021-04-10 15:49+0000\n"
+"POT-Creation-Date: 2022-01-25 23:19+0100\n"
+"PO-Revision-Date: 2022-01-29 00:17+0000\n"
"Last-Translator: waxtatect <piero@live.ie>\n"
"Language-Team: French <https://hosted.weblate.org/projects/minetest/minetest/"
"fr/>\n"
@@ -12,7 +12,43 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n > 1;\n"
-"X-Generator: Weblate 4.6-dev\n"
+"X-Generator: Weblate 4.11-dev\n"
+
+#: builtin/client/chatcommands.lua
+msgid "Clear the out chat queue"
+msgstr "Effacer la file de sortie de message du tchat"
+
+#: builtin/client/chatcommands.lua
+msgid "Empty command."
+msgstr "Commande vide."
+
+#: builtin/client/chatcommands.lua
+msgid "Exit to main menu"
+msgstr "Quitter vers le menu principal"
+
+#: builtin/client/chatcommands.lua
+msgid "Invalid command: "
+msgstr "Commande invalide : "
+
+#: builtin/client/chatcommands.lua
+msgid "Issued command: "
+msgstr "Commande émise : "
+
+#: builtin/client/chatcommands.lua
+msgid "List online players"
+msgstr "Liste des joueurs en ligne"
+
+#: builtin/client/chatcommands.lua
+msgid "Online players: "
+msgstr "Joueurs en ligne : "
+
+#: builtin/client/chatcommands.lua
+msgid "The out chat queue is now empty."
+msgstr "La file de sortie de message du tchat est maintenant vide."
+
+#: builtin/client/chatcommands.lua
+msgid "This command is disabled by server."
+msgstr "Cette commande est désactivée par le serveur."
#: builtin/client/death_formspec.lua src/client/game.cpp
msgid "Respawn"
@@ -22,11 +58,42 @@ msgstr "Réapparaître"
msgid "You died"
msgstr "Vous êtes mort"
+#: builtin/common/chatcommands.lua
+msgid "Available commands:"
+msgstr "Commandes disponibles :"
+
+#: builtin/common/chatcommands.lua
+msgid "Available commands: "
+msgstr "Commandes disponibles : "
+
+#: builtin/common/chatcommands.lua
+msgid "Command not available: "
+msgstr "Commande non disponible : "
+
+#: builtin/common/chatcommands.lua
+msgid "Get help for commands"
+msgstr "Obtenir de l'aide pour les commandes"
+
+#: builtin/common/chatcommands.lua
+msgid ""
+"Use '.help <cmd>' to get more information, or '.help all' to list everything."
+msgstr ""
+"Utiliser « .help <cmd> » pour obtenir plus d'informations, ou « .help all » "
+"pour tout lister."
+
+#: builtin/common/chatcommands.lua
+msgid "[all | <cmd>]"
+msgstr "[all | <cmd>]"
+
#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp
msgid "OK"
msgstr "OK"
#: builtin/fstk/ui.lua
+msgid "<none available>"
+msgstr "< aucun disponible >"
+
+#: builtin/fstk/ui.lua
msgid "An error occurred in a Lua script:"
msgstr "Une erreur est survenue dans un script Lua :"
@@ -44,7 +111,7 @@ msgstr "Se reconnecter"
#: builtin/fstk/ui.lua
msgid "The server has requested a reconnect:"
-msgstr "Le serveur souhaite rétablir une connexion :"
+msgstr "Le serveur souhaite rétablir une connexion :"
#: builtin/mainmenu/common.lua
msgid "Protocol version mismatch. "
@@ -80,7 +147,7 @@ msgstr "Annuler"
#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/dlg_contentstore.lua
#: builtin/mainmenu/tab_content.lua
msgid "Dependencies:"
-msgstr "Dépend de :"
+msgstr "Dépend de :"
#: builtin/mainmenu/dlg_config_world.lua
msgid "Disable all"
@@ -103,9 +170,9 @@ msgid ""
"Failed to enable mod \"$1\" as it contains disallowed characters. Only "
"characters [a-z0-9_] are allowed."
msgstr ""
-"Échec du chargement du mod « $1 » car il contient des caractères non "
+"Échec du chargement du mod « $1 » car il contient des caractères non "
"autorisés.\n"
-"Seuls les caractères alphanumériques [a-z0-9_] sont autorisés."
+"Seuls les caractères alphanumériques [a–z0–9_] sont autorisés."
#: builtin/mainmenu/dlg_config_world.lua
msgid "Find More Mods"
@@ -113,7 +180,7 @@ msgstr "Rechercher des mods"
#: builtin/mainmenu/dlg_config_world.lua
msgid "Mod:"
-msgstr "Mod :"
+msgstr "Mod :"
#: builtin/mainmenu/dlg_config_world.lua
msgid "No (optional) dependencies"
@@ -133,20 +200,20 @@ msgstr "Aucune description fournie pour le pack de mods."
#: builtin/mainmenu/dlg_config_world.lua
msgid "No optional dependencies"
-msgstr "Pas de dépendances facultatives"
+msgstr "Pas de dépendances optionnelles"
#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_content.lua
msgid "Optional dependencies:"
-msgstr "Dépendances optionnelles :"
+msgstr "Dépendances optionnelles :"
#: builtin/mainmenu/dlg_config_world.lua
#: builtin/mainmenu/dlg_settings_advanced.lua src/gui/guiKeyChangeMenu.cpp
msgid "Save"
-msgstr "Enregistrer"
+msgstr "Sauvegarder"
#: builtin/mainmenu/dlg_config_world.lua
msgid "World:"
-msgstr "Monde :"
+msgstr "Monde :"
#: builtin/mainmenu/dlg_config_world.lua
msgid "enabled"
@@ -154,7 +221,7 @@ msgstr "activé"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "\"$1\" already exists. Would you like to overwrite it?"
-msgstr "« $1 » existe déjà. Voulez-vous l'écraser ?"
+msgstr "« $1 » existe déjà. Voulez-vous l'écraser ?"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "$1 and $2 dependencies will be installed."
@@ -174,11 +241,11 @@ msgstr ""
#: builtin/mainmenu/dlg_contentstore.lua
msgid "$1 downloading..."
-msgstr "Téléchargement de $1..."
+msgstr "Téléchargement de $1…"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "$1 required dependencies could not be found."
-msgstr "Les dépendances nécessaires à 1 $ n'ont pas pu être trouvées."
+msgstr "Les dépendances nécessaires à $1 n'ont pas pu être trouvées."
#: builtin/mainmenu/dlg_contentstore.lua
msgid "$1 will be installed, and $2 dependencies will be skipped."
@@ -198,7 +265,7 @@ msgstr "Retour au menu principal"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Base Game:"
-msgstr "Jeu de base :"
+msgstr "Jeu de base :"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "ContentDB is not available when Minetest was compiled without cURL"
@@ -206,7 +273,7 @@ msgstr "ContentDB n'est pas disponible quand Minetest est compilé sans cURL"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Downloading..."
-msgstr "Téléchargement..."
+msgstr "Téléchargement…"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Failed to download $1"
@@ -230,6 +297,10 @@ msgid "Install missing dependencies"
msgstr "Installer les dépendances manquantes"
#: builtin/mainmenu/dlg_contentstore.lua
+msgid "Install: Unsupported file type or broken archive"
+msgstr "Installation : type de fichier non supporté ou archive endommagée"
+
+#: builtin/mainmenu/dlg_contentstore.lua
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Mods"
msgstr "Mods"
@@ -272,7 +343,7 @@ msgstr "Désinstaller"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Update"
-msgstr "Mise à jour"
+msgstr "Mettre à jour"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Update All [$1]"
@@ -284,7 +355,7 @@ msgstr "Voir plus d'informations dans un navigateur web"
#: builtin/mainmenu/dlg_create_world.lua
msgid "A world named \"$1\" already exists"
-msgstr "Le monde « $1 » existe déjà"
+msgstr "Le monde « $1 » existe déjà"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Additional terrain"
@@ -296,7 +367,7 @@ msgstr "Refroidissement en altitude"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Altitude dry"
-msgstr "Faible humidité d'altitude"
+msgstr "Faible humidité en altitude"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Biome blending"
@@ -324,11 +395,11 @@ msgstr "Décorations"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Download a game, such as Minetest Game, from minetest.net"
-msgstr "Téléchargez un jeu comme Minetest Game depuis minetest.net"
+msgstr "Télécharger un 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"
+msgstr "Télécharger en un depuis minetest.net"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Dungeons"
@@ -340,11 +411,11 @@ msgstr "Terrain plat"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Floating landmasses in the sky"
-msgstr "ÃŽles volantes"
+msgstr "Masses de terrains flottants dans le ciel"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Floatlands (experimental)"
-msgstr "Îles volantes (expérimental)"
+msgstr "Terrains flottants (expérimental)"
#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
msgid "Game"
@@ -352,7 +423,7 @@ msgstr "Jeu"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Generate non-fractal terrain: Oceans and underground"
-msgstr "Générer un terrain non fractal : océans et sous-sol"
+msgstr "Générer un terrain non fractal : océans et souterrains"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Hills"
@@ -372,7 +443,8 @@ msgstr "Lacs"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Low humidity and high heat causes shallow or dry rivers"
-msgstr "L'air sec et chaud réduit le niveau d'eau ou assèche les rivières"
+msgstr ""
+"Humidité basse et chaleur élevée rendent les rivières peu profondes ou sèches"
#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
msgid "Mapgen"
@@ -384,7 +456,7 @@ msgstr "Drapeaux de génération de terrain"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Mapgen-specific flags"
-msgstr "Drapeaux indicateurs du générateur de carte"
+msgstr "Drapeaux spécifiques au générateur de terrain"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Mountains"
@@ -396,7 +468,7 @@ msgstr "Coulée de boue"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Network of tunnels and caves"
-msgstr "Réseau souterrain"
+msgstr "Réseau de tunnels et de grottes"
#: builtin/mainmenu/dlg_create_world.lua
msgid "No game selected"
@@ -404,11 +476,11 @@ msgstr "Aucun jeu sélectionné"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Reduces heat with altitude"
-msgstr "Réduire la température avec l'altitude"
+msgstr "Réduit la chaleur avec l'altitude"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Reduces humidity with altitude"
-msgstr "Réduire l'humidité avec l'altitude"
+msgstr "Réduit l'humidité avec l'altitude"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Rivers"
@@ -416,7 +488,7 @@ msgstr "Rivières"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Sea level rivers"
-msgstr "Rivière au niveau de mer"
+msgstr "Rivières au niveau de la mer"
#: builtin/mainmenu/dlg_create_world.lua
#: builtin/mainmenu/dlg_settings_advanced.lua
@@ -432,8 +504,8 @@ msgid ""
"Structures appearing on the terrain (no effect on trees and jungle grass "
"created by v6)"
msgstr ""
-"Structures apparaissantes sur le sol (sans effets sur la création d'arbre et "
-"de jungle par v6)"
+"Structures apparaissant sur le sol (sans effet sur la création d'arbres et "
+"d'herbes de la jungle par v6)"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Structures appearing on the terrain, typically trees and plants"
@@ -447,11 +519,11 @@ msgstr "Tempéré, désertique"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Temperate, Desert, Jungle"
-msgstr "Tempéré, désertique, tropical"
+msgstr "Tempéré, désertique, jungle"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Temperate, Desert, Jungle, Tundra, Taiga"
-msgstr "Tempéré, désertique, tropical, de toundra, de taïga"
+msgstr "Tempéré, désertique, jungle, toundra, taïga"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Terrain surface erosion"
@@ -459,7 +531,7 @@ msgstr "Érosion du sol"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Trees and jungle grass"
-msgstr "Arbres et végétation de jungle"
+msgstr "Arbres et herbes de la jungle"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Vary river depth"
@@ -467,11 +539,11 @@ msgstr "Varier la profondeur fluviale"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Very large caverns deep in the underground"
-msgstr "Très grande cavernes profondes"
+msgstr "Très grandes cavernes profondes souterraines"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Warning: The Development Test is meant for developers."
-msgstr "Avertissement : le jeu minimal est fait pour les développeurs."
+msgstr "Avertissement : le jeu minimal est fait pour les développeurs."
#: builtin/mainmenu/dlg_create_world.lua
msgid "World name"
@@ -483,7 +555,7 @@ msgstr "Vous n'avez pas de jeu installé."
#: builtin/mainmenu/dlg_delete_content.lua
msgid "Are you sure you want to delete \"$1\"?"
-msgstr "Êtes-vous sûr de vouloir supprimer « $1 » ?"
+msgstr "Êtes-vous sûr de vouloir supprimer « $1 » ?"
#: builtin/mainmenu/dlg_delete_content.lua
#: builtin/mainmenu/dlg_delete_world.lua builtin/mainmenu/tab_local.lua
@@ -493,15 +565,15 @@ msgstr "Supprimer"
#: builtin/mainmenu/dlg_delete_content.lua
msgid "pkgmgr: failed to delete \"$1\""
-msgstr "Le gestionnaire de mods n'a pas pu supprimer « $1 »"
+msgstr "Gestionnaire de mods : échec de la suppression de « $1 »"
#: builtin/mainmenu/dlg_delete_content.lua
msgid "pkgmgr: invalid path \"$1\""
-msgstr "Gestionnaire de mods : chemin de mod invalide « $1 »"
+msgstr "Gestionnaire de mods : chemin invalide de « $1 »"
#: builtin/mainmenu/dlg_delete_world.lua
msgid "Delete World \"$1\"?"
-msgstr "Supprimer le monde « $1 » ?"
+msgstr "Supprimer le monde « $1 » ?"
#: builtin/mainmenu/dlg_rename_modpack.lua
msgid "Accept"
@@ -509,19 +581,19 @@ msgstr "Accepter"
#: builtin/mainmenu/dlg_rename_modpack.lua
msgid "Rename Modpack:"
-msgstr "Renommer le pack de mods :"
+msgstr "Renommer le pack de mods :"
#: builtin/mainmenu/dlg_rename_modpack.lua
msgid ""
"This modpack has an explicit name given in its modpack.conf which will "
"override any renaming here."
msgstr ""
-"Ce pack de mods a un nom explicitement donné dans son fichier modpack.conf ; "
-"il écrasera tout renommage effectué ici."
+"Ce pack de mods a un nom explicitement donné dans son fichier modpack.conf "
+"qui remplacera tout renommage effectué ici."
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "(No description of setting given)"
-msgstr "(Aucune description donnée de l'option)"
+msgstr "(Aucune description du paramètre donnée)"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "2D Noise"
@@ -535,7 +607,7 @@ msgstr "< Revenir aux paramètres"
msgid "Browse"
msgstr "Parcourir"
-#: builtin/mainmenu/dlg_settings_advanced.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_settings.lua
msgid "Disabled"
msgstr "Désactivé"
@@ -557,11 +629,11 @@ msgstr "Octaves"
#: builtin/mainmenu/dlg_settings_advanced.lua src/settings_translation_file.cpp
msgid "Offset"
-msgstr "Décallage"
+msgstr "Décalage"
#: builtin/mainmenu/dlg_settings_advanced.lua
-msgid "Persistance"
-msgstr "Persistence"
+msgid "Persistence"
+msgstr "Persistance"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Please enter a valid integer."
@@ -577,15 +649,15 @@ msgstr "Réinitialiser"
#: builtin/mainmenu/dlg_settings_advanced.lua src/settings_translation_file.cpp
msgid "Scale"
-msgstr "Echelle"
+msgstr "Échelle"
-#: builtin/mainmenu/dlg_settings_advanced.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_online.lua
msgid "Search"
msgstr "Rechercher"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Select directory"
-msgstr "Choisissez un répertoire"
+msgstr "Choisir un répertoire"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Select file"
@@ -597,11 +669,11 @@ msgstr "Montrer les noms techniques"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "The value must be at least $1."
-msgstr "La valeur doit être supérieure à $1."
+msgstr "La valeur doit être au moins $1."
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "The value must not be larger than $1."
-msgstr "La valeur doit être inférieure à $1."
+msgstr "La valeur ne doit pas être supérieure à $1."
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "X"
@@ -648,7 +720,7 @@ msgstr "Paramètres par défaut"
#. main menu -> "All Settings".
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "eased"
-msgstr "lissé"
+msgstr "Lissé"
#: builtin/mainmenu/pkgmgr.lua
msgid "$1 (Enabled)"
@@ -664,24 +736,13 @@ msgstr "Échec de l'installation de $1 vers $2"
#: builtin/mainmenu/pkgmgr.lua
msgid "Install Mod: Unable to find real mod name for: $1"
-msgstr ""
-"Installation d'un mod : impossible de trouver le vrai nom du mod pour : $1"
+msgstr "Installer mod : impossible de trouver le nom réel du mod pour : $1"
#: builtin/mainmenu/pkgmgr.lua
msgid "Install Mod: Unable to find suitable folder name for modpack $1"
msgstr ""
-"Installation un mod : impossible de trouver un nom de dossier valide pour le "
-"pack de mods $1"
-
-#: builtin/mainmenu/pkgmgr.lua
-msgid "Install: Unsupported file type \"$1\" or broken archive"
-msgstr ""
-"Installation d'un mod : type de fichier non supporté « $1 » ou archive "
-"endommagée"
-
-#: builtin/mainmenu/pkgmgr.lua
-msgid "Install: file: \"$1\""
-msgstr "Installation : fichier : « $1 »"
+"Installer mod : impossible de trouver un nom de dossier valide pour le pack "
+"de mods $1"
#: builtin/mainmenu/pkgmgr.lua
msgid "Unable to find a valid mod or modpack"
@@ -689,11 +750,11 @@ msgstr "Impossible de trouver un mod ou un pack de mods valide"
#: builtin/mainmenu/pkgmgr.lua
msgid "Unable to install a $1 as a texture pack"
-msgstr "Échec de l'installation de $1 comme pack de textures"
+msgstr "Impossible d'installer un $1 comme un pack de textures"
#: builtin/mainmenu/pkgmgr.lua
msgid "Unable to install a game as a $1"
-msgstr "Échec de l'installation du jeu comme un $1"
+msgstr "Impossible d'installer un jeu comme un $1"
#: builtin/mainmenu/pkgmgr.lua
msgid "Unable to install a mod as a $1"
@@ -705,7 +766,7 @@ msgstr "Impossible d'installer un pack de mods comme un $1"
#: builtin/mainmenu/serverlistmgr.lua src/client/game.cpp
msgid "Loading..."
-msgstr "Chargement..."
+msgstr "Chargement…"
#: builtin/mainmenu/serverlistmgr.lua
msgid "Public server list is disabled"
@@ -714,8 +775,45 @@ msgstr "La liste des serveurs publics est désactivée"
#: builtin/mainmenu/serverlistmgr.lua
msgid "Try reenabling public serverlist and check your internet connection."
msgstr ""
-"Essayez de rechargez la liste des serveurs publics et vérifiez votre "
-"connexion Internet."
+"Essayer de réactiver la liste des serveurs et vérifier votre connexion "
+"Internet."
+
+#: builtin/mainmenu/tab_about.lua
+msgid "About"
+msgstr "À propos"
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Active Contributors"
+msgstr "Contributeurs actifs"
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Active renderer:"
+msgstr "Moteur de rendu actif :"
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Core Developers"
+msgstr "Développeurs principaux"
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Open User Data Directory"
+msgstr "Répertoire de données utilisateur"
+
+#: builtin/mainmenu/tab_about.lua
+msgid ""
+"Opens the directory that contains user-provided worlds, games, mods,\n"
+"and texture packs in a file manager / explorer."
+msgstr ""
+"Ouvre le répertoire qui contient les mondes, les jeux, les mods et les packs "
+"de textures\n"
+"fournis par l'utilisateur dans un gestionnaire de fichiers/explorateur."
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Previous Contributors"
+msgstr "Anciens contributeurs"
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Previous Core Developers"
+msgstr "Anciens développeurs principaux"
#: builtin/mainmenu/tab_content.lua
msgid "Browse online content"
@@ -731,11 +829,11 @@ msgstr "Désactiver le pack de textures"
#: builtin/mainmenu/tab_content.lua
msgid "Information:"
-msgstr "Informations :"
+msgstr "Informations :"
#: builtin/mainmenu/tab_content.lua
msgid "Installed Packages:"
-msgstr "Paquets installés :"
+msgstr "Paquets installés :"
#: builtin/mainmenu/tab_content.lua
msgid "No dependencies."
@@ -757,39 +855,6 @@ msgstr "Désinstaller le paquet"
msgid "Use Texture Pack"
msgstr "Utiliser un pack de texture"
-#: builtin/mainmenu/tab_credits.lua
-msgid "Active Contributors"
-msgstr "Contributeurs actifs"
-
-#: 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 "Open User Data Directory"
-msgstr "Ouvrir le répertoire de données utilisateur"
-
-#: builtin/mainmenu/tab_credits.lua
-msgid ""
-"Opens the directory that contains user-provided worlds, games, mods,\n"
-"and texture packs in a file manager / explorer."
-msgstr ""
-"Ouvre le répertoire qui contient les mondes fournis par les utilisateurs, "
-"les jeux, les mods,\n"
-"et des paquets de textures dans un gestionnaire de fichiers."
-
-#: builtin/mainmenu/tab_credits.lua
-msgid "Previous Contributors"
-msgstr "Anciens contributeurs"
-
-#: builtin/mainmenu/tab_credits.lua
-msgid "Previous Core Developers"
-msgstr "Anciens développeurs principaux"
-
#: builtin/mainmenu/tab_local.lua
msgid "Announce Server"
msgstr "Annoncer le serveur"
@@ -812,13 +877,13 @@ msgstr "Héberger une partie"
#: builtin/mainmenu/tab_local.lua
msgid "Host Server"
-msgstr "Héberger un serveur"
+msgstr "Héberger le serveur"
#: builtin/mainmenu/tab_local.lua
msgid "Install games from ContentDB"
msgstr "Installer à partir de ContentDB"
-#: builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
msgid "Name"
msgstr "Nom"
@@ -828,9 +893,9 @@ msgstr "Nouveau"
#: builtin/mainmenu/tab_local.lua
msgid "No world created or selected!"
-msgstr "Aucun monde créé ou sélectionné !"
+msgstr "Aucun monde créé ou sélectionné !"
-#: builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
msgid "Password"
msgstr "Mot de passe"
@@ -838,7 +903,7 @@ msgstr "Mot de passe"
msgid "Play Game"
msgstr "Jouer"
-#: builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
msgid "Port"
msgstr "Port"
@@ -848,7 +913,7 @@ msgstr "Sélectionner les mods"
#: builtin/mainmenu/tab_local.lua
msgid "Select World:"
-msgstr "Sélectionner un monde :"
+msgstr "Sélectionner un monde :"
#: builtin/mainmenu/tab_local.lua
msgid "Server Port"
@@ -859,8 +924,12 @@ msgid "Start Game"
msgstr "Démarrer"
#: builtin/mainmenu/tab_online.lua
-msgid "Address / Port"
-msgstr "Adresse / Port"
+msgid "Address"
+msgstr "Adresse"
+
+#: builtin/mainmenu/tab_online.lua src/client/keycode.cpp
+msgid "Clear"
+msgstr "Effacer"
#: builtin/mainmenu/tab_online.lua
msgid "Connect"
@@ -870,38 +939,46 @@ msgstr "Rejoindre"
msgid "Creative mode"
msgstr "Mode créatif"
+#. ~ PvP = Player versus Player
#: builtin/mainmenu/tab_online.lua
-msgid "Damage enabled"
-msgstr "Dégâts activés"
+msgid "Damage / PvP"
+msgstr "Dégâts / JcJ"
#: builtin/mainmenu/tab_online.lua
msgid "Del. Favorite"
msgstr "Supprimer favori"
#: builtin/mainmenu/tab_online.lua
-msgid "Favorite"
-msgstr "Favori"
+msgid "Favorites"
+msgstr "Favoris"
#: builtin/mainmenu/tab_online.lua
-msgid "Join Game"
-msgstr "Rejoindre une partie"
+msgid "Incompatible Servers"
+msgstr "Serveurs incompatibles"
#: builtin/mainmenu/tab_online.lua
-msgid "Name / Password"
-msgstr "Nom / Mot de passe"
+msgid "Join Game"
+msgstr "Rejoindre une partie"
#: builtin/mainmenu/tab_online.lua
msgid "Ping"
msgstr "Ping"
-#. ~ PvP = Player versus Player
#: builtin/mainmenu/tab_online.lua
-msgid "PvP enabled"
-msgstr "JcJ activé"
+msgid "Public Servers"
+msgstr "Serveurs publics"
+
+#: builtin/mainmenu/tab_online.lua
+msgid "Refresh"
+msgstr "Actualiser"
+
+#: builtin/mainmenu/tab_online.lua
+msgid "Server Description"
+msgstr "Description du serveur"
#: builtin/mainmenu/tab_settings.lua
msgid "2x"
-msgstr "2x"
+msgstr "2×"
#: builtin/mainmenu/tab_settings.lua
msgid "3D Clouds"
@@ -909,11 +986,11 @@ msgstr "Nuages en 3D"
#: builtin/mainmenu/tab_settings.lua
msgid "4x"
-msgstr "4x"
+msgstr "4×"
#: builtin/mainmenu/tab_settings.lua
msgid "8x"
-msgstr "8x"
+msgstr "8×"
#: builtin/mainmenu/tab_settings.lua
msgid "All Settings"
@@ -921,7 +998,7 @@ msgstr "Tous les paramètres"
#: builtin/mainmenu/tab_settings.lua
msgid "Antialiasing:"
-msgstr "Anti-crénelage :"
+msgstr "Anti-crénelage :"
#: builtin/mainmenu/tab_settings.lua
msgid "Autosave Screen Size"
@@ -939,13 +1016,33 @@ msgstr "Changer les touches"
msgid "Connected Glass"
msgstr "Verre unifié"
+#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
+msgid "Dynamic shadows"
+msgstr "Ombres dynamiques"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Dynamic shadows: "
+msgstr "Ombres dynamiques : "
+
#: builtin/mainmenu/tab_settings.lua
msgid "Fancy Leaves"
-msgstr "Arbres détaillés"
+msgstr "Feuilles détaillées"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "High"
+msgstr "Élevées"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Low"
+msgstr "Basses"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Medium"
+msgstr "Moyennes"
#: builtin/mainmenu/tab_settings.lua
msgid "Mipmap"
-msgstr "MIP mapping"
+msgstr "MIP map"
#: builtin/mainmenu/tab_settings.lua
msgid "Mipmap + Aniso. Filter"
@@ -973,7 +1070,7 @@ msgstr "Aucun"
#: builtin/mainmenu/tab_settings.lua
msgid "Opaque Leaves"
-msgstr "Arbres minimaux"
+msgstr "Feuilles opaques"
#: builtin/mainmenu/tab_settings.lua
msgid "Opaque Water"
@@ -985,11 +1082,11 @@ msgstr "Activer les particules"
#: builtin/mainmenu/tab_settings.lua
msgid "Screen:"
-msgstr "Écran :"
+msgstr "Écran :"
#: builtin/mainmenu/tab_settings.lua
msgid "Settings"
-msgstr "Réglages"
+msgstr "Paramètres"
#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
msgid "Shaders"
@@ -1005,7 +1102,7 @@ msgstr "Shaders (indisponible)"
#: builtin/mainmenu/tab_settings.lua
msgid "Simple Leaves"
-msgstr "Arbres simples"
+msgstr "Feuilles simples"
#: builtin/mainmenu/tab_settings.lua
msgid "Smooth Lighting"
@@ -1013,12 +1110,7 @@ msgstr "Lumière douce"
#: builtin/mainmenu/tab_settings.lua
msgid "Texturing:"
-msgstr "Texturisation :"
-
-#: builtin/mainmenu/tab_settings.lua
-msgid "To enable shaders the OpenGL driver needs to be used."
-msgstr ""
-"Pour activer les textures nuancées, le pilote OpenGL doit être utilisé."
+msgstr "Texturisation :"
#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
msgid "Tone Mapping"
@@ -1033,6 +1125,14 @@ msgid "Trilinear Filter"
msgstr "Filtrage trilinéaire"
#: builtin/mainmenu/tab_settings.lua
+msgid "Ultra High"
+msgstr "Très élevées"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Very Low"
+msgstr "Très basses"
+
+#: builtin/mainmenu/tab_settings.lua
msgid "Waving Leaves"
msgstr "Feuilles ondulantes"
@@ -1044,13 +1144,13 @@ msgstr "Liquides ondulants"
msgid "Waving Plants"
msgstr "Plantes ondulantes"
-#: src/client/client.cpp
+#: src/client/client.cpp src/client/game.cpp
msgid "Connection timed out."
msgstr "Connexion perdue."
#: src/client/client.cpp
msgid "Done!"
-msgstr "Terminé !"
+msgstr "Terminé !"
#: src/client/client.cpp
msgid "Initializing nodes"
@@ -1058,27 +1158,27 @@ msgstr "Initialisation des blocs"
#: src/client/client.cpp
msgid "Initializing nodes..."
-msgstr "Initialisation des blocs..."
+msgstr "Initialisation des blocs…"
#: src/client/client.cpp
msgid "Loading textures..."
-msgstr "Chargement des textures..."
+msgstr "Chargement des textures…"
#: src/client/client.cpp
msgid "Rebuilding shaders..."
-msgstr "Reconstruction des textures nuancées..."
+msgstr "Reconstruction des shaders…"
#: src/client/clientlauncher.cpp
msgid "Connection error (timed out?)"
-msgstr "Erreur de connexion (perte de connexion ?)"
+msgstr "Erreur de connexion (perte de connexion ?)"
#: src/client/clientlauncher.cpp
-msgid "Could not find or load game \""
-msgstr "Impossible de trouver ou charger le jeu \""
+msgid "Could not find or load game: "
+msgstr "Impossible de trouver ou charger le jeu : "
#: src/client/clientlauncher.cpp
msgid "Invalid gamespec."
-msgstr "gamespec invalide."
+msgstr "Jeu spécifié invalide."
#: src/client/clientlauncher.cpp
msgid "Main Menu"
@@ -1094,27 +1194,15 @@ msgstr "Nom du joueur trop long."
#: src/client/clientlauncher.cpp
msgid "Please choose a name!"
-msgstr "Veuillez choisir un nom !"
+msgstr "Veuillez choisir un nom !"
#: src/client/clientlauncher.cpp
msgid "Provided password file failed to open: "
-msgstr "Le fichier de mot de passe fourni n'a pas pu être ouvert : "
+msgstr "Le fichier de mot de passe fourni n'a pas pu être ouvert : "
#: src/client/clientlauncher.cpp
msgid "Provided world path doesn't exist: "
-msgstr "Le chemin du monde spécifié n'existe pas : "
-
-#. ~ DO NOT TRANSLATE THIS LITERALLY!
-#. This is a special string. Put either "no" or "yes"
-#. into the translation field (literally).
-#. Choose "yes" if the language requires use of the fallback
-#. font, "no" otherwise.
-#. The fallback font is (normally) required for languages with
-#. non-Latin script, like Chinese.
-#. When in doubt, test your translation.
-#: src/client/fontengine.cpp
-msgid "needs_fallback_font"
-msgstr "no"
+msgstr "Le chemin du monde spécifié n'existe pas : "
#: src/client/game.cpp
msgid ""
@@ -1122,40 +1210,41 @@ msgid ""
"Check debug.txt for details."
msgstr ""
"\n"
-"Voir debug.txt pour plus d'informations."
+"Voir « debug.txt » pour plus d'informations."
#: src/client/game.cpp
msgid "- Address: "
-msgstr "- Adresse : "
-
-#: src/client/game.cpp
-msgid "- Creative Mode: "
-msgstr "- Mode créatif : "
-
-#: src/client/game.cpp
-msgid "- Damage: "
-msgstr "- Dégâts : "
+msgstr "– Adresse : "
#: src/client/game.cpp
msgid "- Mode: "
-msgstr "- Mode : "
+msgstr "– Mode : "
#: src/client/game.cpp
msgid "- Port: "
-msgstr "- Port : "
+msgstr "– Port : "
#: src/client/game.cpp
msgid "- Public: "
-msgstr "- Public : "
+msgstr "– Public : "
#. ~ PvP = Player versus Player
#: src/client/game.cpp
msgid "- PvP: "
-msgstr "- JcJ : "
+msgstr "– JcJ : "
#: src/client/game.cpp
msgid "- Server Name: "
-msgstr "- Nom du serveur : "
+msgstr "– Nom du serveur : "
+
+#: src/client/game.cpp
+msgid "A serialization error occurred:"
+msgstr "Une erreur de sérialisation est survenue :"
+
+#: src/client/game.cpp
+#, c-format
+msgid "Access denied. Reason: %s"
+msgstr "Accès refusé. Raison : %s"
#: src/client/game.cpp
msgid "Automatic forward disabled"
@@ -1166,6 +1255,22 @@ msgid "Automatic forward enabled"
msgstr "Marche automatique activée"
#: src/client/game.cpp
+msgid "Block bounds hidden"
+msgstr "Limites des blocs cachées"
+
+#: src/client/game.cpp
+msgid "Block bounds shown for all blocks"
+msgstr "Limites des blocs affichées pour tous les blocs"
+
+#: src/client/game.cpp
+msgid "Block bounds shown for current block"
+msgstr "Limites des blocs affichées pour le bloc actuel"
+
+#: src/client/game.cpp
+msgid "Block bounds shown for nearby blocks"
+msgstr "Limites des blocs affichées pour les blocs voisins"
+
+#: src/client/game.cpp
msgid "Camera update disabled"
msgstr "Mise à jour de la caméra désactivée"
@@ -1174,8 +1279,14 @@ msgid "Camera update enabled"
msgstr "Mise à jour de la caméra activée"
#: src/client/game.cpp
+msgid "Can't show block bounds (need 'basic_debug' privilege)"
+msgstr ""
+"Impossible d'afficher les limites des blocs (nécessite le privilège "
+"« basic_debug »)"
+
+#: src/client/game.cpp
msgid "Change Password"
-msgstr "Changer de mot de passe"
+msgstr "Changer le mot de passe"
#: src/client/game.cpp
msgid "Cinematic mode disabled"
@@ -1186,12 +1297,20 @@ msgid "Cinematic mode enabled"
msgstr "Mode cinématique activé"
#: src/client/game.cpp
+msgid "Client disconnected"
+msgstr "Client déconnecté"
+
+#: src/client/game.cpp
msgid "Client side scripting is disabled"
msgstr "Les scripts côté client sont désactivés"
#: src/client/game.cpp
msgid "Connecting to server..."
-msgstr "Connexion au serveur..."
+msgstr "Connexion au serveur…"
+
+#: src/client/game.cpp
+msgid "Connection failed for unknown reason"
+msgstr "La connexion a échoué pour une raison inconnue"
#: src/client/game.cpp
msgid "Continue"
@@ -1215,40 +1334,45 @@ msgid ""
"- Mouse wheel: select item\n"
"- %s: chat\n"
msgstr ""
-"Contrôles :\n"
-"- %s : avancer\n"
-"- %s : reculer\n"
-"- %s : à gauche\n"
-"- %s : à droite\n"
-"- %s : sauter/grimper\n"
-"- %s : creuser/actionner\n"
-"- %s : placer/utiliser\n"
-"- %s : marcher lentement/descendre\n"
-"- %s : lâcher un objet\n"
-"- %s : inventaire\n"
-"- Souris : tourner/regarder\n"
-"- Molette souris : sélectionner un objet\n"
-"- %s : tchat\n"
+"Contrôles :\n"
+"– %s : avancer\n"
+"– %s : reculer\n"
+"– %s : à gauche\n"
+"– %s : à droite\n"
+"– %s : sauter/grimper\n"
+"– %s : creuser/actionner\n"
+"– %s : placer/utiliser\n"
+"– %s : marcher lentement/descendre\n"
+"– %s : lâcher un objet\n"
+"– %s : inventaire\n"
+"– Souris : tourner/regarder\n"
+"– Molette souris : sélectionner un objet\n"
+"– %s : tchat\n"
+
+#: src/client/game.cpp
+#, c-format
+msgid "Couldn't resolve address: %s"
+msgstr "Impossible de résoudre l'adresse : %s"
#: src/client/game.cpp
msgid "Creating client..."
-msgstr "Création du client..."
+msgstr "Création du client…"
#: src/client/game.cpp
msgid "Creating server..."
-msgstr "Création du serveur..."
+msgstr "Création du serveur…"
#: src/client/game.cpp
msgid "Debug info and profiler graph hidden"
-msgstr "Informations de debogage et graphique de profil cachés"
+msgstr "Informations de débogage et graphique du profileur cachés"
#: src/client/game.cpp
msgid "Debug info shown"
-msgstr "Infos de débogage affichées"
+msgstr "Informations de débogage affichées"
#: src/client/game.cpp
msgid "Debug info, profiler graph, and wireframe hidden"
-msgstr "Informations de debogage, graphique de profil et fils de fer cachés"
+msgstr "Informations de débogage, graphique du profileur et fils de fer cachés"
#: src/client/game.cpp
msgid ""
@@ -1265,15 +1389,15 @@ msgid ""
"- touch&drag, tap 2nd finger\n"
" --> place single item to slot\n"
msgstr ""
-"Touches par défaut :\n"
-"Sans menu visible :\n"
-"- un seul appui : touche d'activation\n"
-"- double-appui : placement / utilisation\n"
-"- Glissement du doigt : regarder autour\n"
-"Menu / Inventaire visible :\n"
-"- double-appui (en dehors) : fermeture\n"
-"- objet(s) dans l'inventaire : déplacement\n"
-"- appui, glissement et appui : pose d'un seul item par emplacement\n"
+"Touches par défaut :\n"
+"Sans menu visible :\n"
+"– un seul appui : touche d'activation\n"
+"– double-appui : placement / utilisation\n"
+"– Glissement du doigt : regarder autour\n"
+"Menu / Inventaire visible :\n"
+"– double-appui (en dehors) : fermeture\n"
+"– objets dans l'inventaire : déplacement\n"
+"– appui, glissement et appui : pose d'un seul objet par emplacement\n"
#: src/client/game.cpp
msgid "Disabled unlimited viewing range"
@@ -1285,7 +1409,7 @@ msgstr "La limite de vue a été désactivée"
#: src/client/game.cpp
msgid "Exit to Menu"
-msgstr "Menu Principal"
+msgstr "Menu principal"
#: src/client/game.cpp
msgid "Exit to OS"
@@ -1301,7 +1425,7 @@ msgstr "Vitesse en mode rapide activée"
#: src/client/game.cpp
msgid "Fast mode enabled (note: no 'fast' privilege)"
-msgstr "Vitesse en mode rapide activée (note : pas de privilège 'fast')"
+msgstr "Vitesse en mode rapide activée (note : pas de privilège « fast »)"
#: src/client/game.cpp
msgid "Fly mode disabled"
@@ -1313,7 +1437,7 @@ msgstr "Mode vol activé"
#: src/client/game.cpp
msgid "Fly mode enabled (note: no 'fly' privilege)"
-msgstr "Mode vol activé (note : pas de privilège 'fly')"
+msgstr "Mode vol activé (note : pas de privilège « fly »)"
#: src/client/game.cpp
msgid "Fog disabled"
@@ -1325,7 +1449,7 @@ msgstr "Brouillard activé"
#: src/client/game.cpp
msgid "Game info:"
-msgstr "Infos de jeu :"
+msgstr "Infos de jeu :"
#: src/client/game.cpp
msgid "Game paused"
@@ -1333,11 +1457,11 @@ msgstr "Jeu en pause"
#: src/client/game.cpp
msgid "Hosting server"
-msgstr "Héberger un serveur"
+msgstr "Serveur hôte"
#: src/client/game.cpp
msgid "Item definitions..."
-msgstr "Définitions des items..."
+msgstr "Définitions des objets…"
#: src/client/game.cpp
msgid "KiB/s"
@@ -1345,7 +1469,7 @@ msgstr "Kio/s"
#: src/client/game.cpp
msgid "Media..."
-msgstr "Média..."
+msgstr "Média…"
#: src/client/game.cpp
msgid "MiB/s"
@@ -1356,6 +1480,10 @@ msgid "Minimap currently disabled by game or mod"
msgstr "Mini-carte actuellement désactivée par un jeu ou un mod"
#: src/client/game.cpp
+msgid "Multiplayer"
+msgstr "Multijoueur"
+
+#: src/client/game.cpp
msgid "Noclip mode disabled"
msgstr "Collisions activées"
@@ -1365,11 +1493,11 @@ msgstr "Collisions désactivées"
#: src/client/game.cpp
msgid "Noclip mode enabled (note: no 'noclip' privilege)"
-msgstr "Collisions activées (note : pas de privilège 'noclip')"
+msgstr "Collisions activées (note : pas de privilège « noclip »)"
#: src/client/game.cpp
msgid "Node definitions..."
-msgstr "Définitions des blocs..."
+msgstr "Définitions des blocs…"
#: src/client/game.cpp
msgid "Off"
@@ -1389,7 +1517,7 @@ msgstr "Mode de mouvement à direction libre activé"
#: src/client/game.cpp
msgid "Profiler graph shown"
-msgstr "Graphique de profil affiché"
+msgstr "Graphique du profileur affiché"
#: src/client/game.cpp
msgid "Remote server"
@@ -1397,11 +1525,11 @@ msgstr "Serveur distant"
#: src/client/game.cpp
msgid "Resolving address..."
-msgstr "Résolution de l'adresse..."
+msgstr "Résolution de l'adresse…"
#: src/client/game.cpp
msgid "Shutting down..."
-msgstr "Fermeture du jeu..."
+msgstr "Fermeture du jeu…"
#: src/client/game.cpp
msgid "Singleplayer"
@@ -1417,7 +1545,7 @@ msgstr "Son coupé"
#: src/client/game.cpp
msgid "Sound system is disabled"
-msgstr "L'audio système est désactivé"
+msgstr "Le système audio est désactivé"
#: src/client/game.cpp
msgid "Sound system is not supported on this build"
@@ -1429,6 +1557,21 @@ msgstr "Son rétabli"
#: src/client/game.cpp
#, c-format
+msgid "The server is probably running a different version of %s."
+msgstr "Le serveur utilise probablement une version différente de %s."
+
+#: src/client/game.cpp
+#, c-format
+msgid "Unable to connect to %s because IPv6 is disabled"
+msgstr "Impossible de se connecter à %s car IPv6 est désactivé"
+
+#: src/client/game.cpp
+#, c-format
+msgid "Unable to listen on %s because IPv6 is disabled"
+msgstr "Impossible d’écouter sur %s car IPv6 est désactivé"
+
+#: src/client/game.cpp
+#, c-format
msgid "Viewing range changed to %d"
msgstr "Distance de vue réglée sur %d"
@@ -1445,7 +1588,7 @@ msgstr "Distance de vue minimale : %d"
#: src/client/game.cpp
#, c-format
msgid "Volume changed to %d%%"
-msgstr "Volume réglé sur %d %%"
+msgstr "Volume réglé sur %d %%"
#: src/client/game.cpp
msgid "Wireframe shown"
@@ -1453,7 +1596,7 @@ msgstr "Fils de fer affichés"
#: src/client/game.cpp
msgid "Zoom currently disabled by game or mod"
-msgstr "Le zoom est actuellement désactivé par un jeu ou un mod"
+msgstr "Zoom actuellement désactivé par un jeu ou un mod"
#: src/client/game.cpp
msgid "ok"
@@ -1497,10 +1640,6 @@ msgid "Caps Lock"
msgstr "Verr. Maj"
#: src/client/keycode.cpp
-msgid "Clear"
-msgstr "Vider"
-
-#: src/client/keycode.cpp
msgid "Control"
msgstr "Contrôle"
@@ -1558,7 +1697,7 @@ msgstr "Gauche"
#: src/client/keycode.cpp
msgid "Left Button"
-msgstr "Bouton gauche"
+msgstr "Clic gauche"
#: src/client/keycode.cpp
msgid "Left Control"
@@ -1583,7 +1722,7 @@ msgstr "Menu"
#: src/client/keycode.cpp
msgid "Middle Button"
-msgstr "Bouton du milieu"
+msgstr "Clic central"
#: src/client/keycode.cpp
msgid "Num Lock"
@@ -1684,7 +1823,7 @@ msgstr "Droite"
#: src/client/keycode.cpp
msgid "Right Button"
-msgstr "Bouton droit"
+msgstr "Clic droit"
#: src/client/keycode.cpp
msgid "Right Control"
@@ -1765,9 +1904,17 @@ msgstr "Mini-carte en mode surface, zoom ×%d"
msgid "Minimap in texture mode"
msgstr "Mini-carte en mode texture"
+#: src/gui/guiChatConsole.cpp
+msgid "Failed to open webpage"
+msgstr "Échec de l'ouverture de la page Web"
+
+#: src/gui/guiChatConsole.cpp
+msgid "Opening webpage"
+msgstr "Ouverture de la page web"
+
#: src/gui/guiConfirmRegistration.cpp src/gui/guiPasswordChange.cpp
msgid "Passwords do not match!"
-msgstr "Les mots de passe ne correspondent pas !"
+msgstr "Les mots de passe ne correspondent pas !"
#: src/gui/guiConfirmRegistration.cpp
msgid "Register and Join"
@@ -1782,21 +1929,21 @@ msgid ""
"Please retype your password and click 'Register and Join' to confirm account "
"creation, or click 'Cancel' to abort."
msgstr ""
-"Vous êtes sur le point de rejoindre ce serveur avec le nom « %s » pour la "
+"Vous êtes sur le point de rejoindre ce serveur avec le nom « %s » pour la "
"première fois.\n"
"Si vous continuez, un nouveau compte utilisant vos identifiants sera créé "
"sur ce serveur.\n"
-"Veuillez retaper votre mot de passe et cliquer sur « S'enregistrer et "
-"rejoindre » pour confirmer la création de votre compte, ou cliquez sur "
-"« Annuler »."
+"Veuillez retaper votre mot de passe et cliquer sur « S'enregistrer et "
+"rejoindre » pour confirmer la création de votre compte, ou cliquer sur "
+"« Annuler »."
#: src/gui/guiFormSpecMenu.cpp
msgid "Proceed"
msgstr "Procéder"
#: src/gui/guiKeyChangeMenu.cpp
-msgid "\"Special\" = climb down"
-msgstr "« Spécial » = descendre"
+msgid "\"Aux1\" = climb down"
+msgstr "« Aux1 » = descendre"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Autoforward"
@@ -1807,10 +1954,18 @@ msgid "Automatic jumping"
msgstr "Sauts automatiques"
#: src/gui/guiKeyChangeMenu.cpp
+msgid "Aux1"
+msgstr "Aux1"
+
+#: src/gui/guiKeyChangeMenu.cpp
msgid "Backward"
msgstr "Reculer"
#: src/gui/guiKeyChangeMenu.cpp
+msgid "Block bounds"
+msgstr "Limites des blocs"
+
+#: src/gui/guiKeyChangeMenu.cpp
msgid "Change camera"
msgstr "Changer la caméra"
@@ -1836,7 +1991,7 @@ msgstr "Réd. le volume"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Double tap \"jump\" to toggle fly"
-msgstr "Double-appui sur « saut » pour voler"
+msgstr "Double-appui sur « saut » pour voler"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Drop"
@@ -1899,10 +2054,6 @@ msgid "Sneak"
msgstr "Marcher lentement"
#: src/gui/guiKeyChangeMenu.cpp
-msgid "Special"
-msgstr "Spécial"
-
-#: src/gui/guiKeyChangeMenu.cpp
msgid "Toggle HUD"
msgstr "Interface"
@@ -1936,7 +2087,7 @@ msgstr "Mouvement vertical"
#: src/gui/guiKeyChangeMenu.cpp
msgid "press key"
-msgstr "Appuyez sur une touche"
+msgstr "Appuyer sur une touche"
#: src/gui/guiPasswordChange.cpp
msgid "Change"
@@ -1963,8 +2114,9 @@ msgid "Muted"
msgstr "Muet"
#: src/gui/guiVolumeChange.cpp
-msgid "Sound Volume: "
-msgstr "Volume du son : "
+#, c-format
+msgid "Sound Volume: %d%%"
+msgstr "Volume du son : %d %%"
#. ~ Imperative, as in "Enter/type in text".
#. Don't forget the space.
@@ -1990,12 +2142,12 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"(Android) Use virtual joystick to trigger \"aux\" button.\n"
-"If enabled, virtual joystick will also tap \"aux\" button when out of main "
+"(Android) Use virtual joystick to trigger \"Aux1\" button.\n"
+"If enabled, virtual joystick will also tap \"Aux1\" button when out of main "
"circle."
msgstr ""
-"(Android) Utiliser la manette virtuelle pour déclencher le bouton « aux ».\n"
-"Si activé, la manette virtuelle va également appuyer sur le bouton « aux » "
+"(Android) Utiliser la manette virtuelle pour déclencher le bouton « Aux1 ».\n"
+"Si activé, la manette virtuelle va également appuyer sur le bouton « Aux1 » "
"lorsqu'en dehors du cercle principal."
#: src/settings_translation_file.cpp
@@ -2010,16 +2162,14 @@ msgid ""
"Range roughly -2 to 2. Multiply by 'scale' for offset in nodes."
msgstr ""
"(X,Y,Z) de décalage du fractal à partir du centre du monde en unités "
-"« échelle ».\n"
-"Peut être utilisé pour déplacer un point désiré à (0, 0) pour créer une\n"
-"zone d'apparition convenable, ou pour autoriser à « zoomer » sur un\n"
-"point désiré en augmentant l'« échelle ».\n"
+"« échelle ».\n"
+"Peut être utilisé pour déplacer un point désiré à (0, 0) pour créer une zone "
+"d'apparition convenable, ou pour autoriser à « zoomer » sur un point désiré "
+"en augmentant l'« échelle ».\n"
"La valeur par défaut est adaptée pour créer une zone d'apparition convenable "
-"pour les ensembles\n"
-"de Mandelbrot crées avec des paramètres par défaut. Elle peut nécessiter une "
-"modification dans\n"
-"d'autres situations.\n"
-"La gamme est d'environ -2 à 2. Multiplier par « échelle » pour le décalage "
+"pour les ensembles de Mandelbrot crées avec des paramètres par défaut. Elle "
+"peut nécessiter une modification dans d'autres situations.\n"
+"La gamme est d'environ -2 à 2. Multiplier par « échelle » pour le décalage "
"en nœuds."
#: src/settings_translation_file.cpp
@@ -2032,18 +2182,17 @@ msgid ""
"Default is for a vertically-squashed shape suitable for\n"
"an island, set all 3 numbers equal for the raw shape."
msgstr ""
-"(Échelle (X,Y,Z) de fractales, en nœuds.\n"
-"La taille des fractales sera 2 à 3 fais plus grande en réalité.\n"
-"Ces nombres peuvent être très grands, les fractales de devant\n"
-"pas être impérativement contenues dans le monde.\n"
-"Augmentez-les pour « zoomer » dans les détails de la fractale.\n"
-"Le réglage par défaut correspond à un forme écrasée verticalement, "
-"appropriée pour\n"
-"un île, rendez les 3 nombres égaux pour la forme de base."
+"Échelle (X,Y,Z) de la fractale en nœuds.\n"
+"La taille réelle de la fractale sera 2 à 3 fois plus grande.\n"
+"Ces nombres peuvent être très grands, la fractale n'a pas à être contenue "
+"dans le monde. Les augmenter pour « zoomer » dans les détails de la "
+"fractale.\n"
+"Le valeur par défaut est pour une forme verticalement écrasée convenant pour "
+"une île, définir les 3 nombres égaux pour la forme brute."
#: src/settings_translation_file.cpp
msgid "2D noise that controls the shape/size of ridged mountains."
-msgstr "Bruit 2D controllant la forme et taille des montagnes crantées."
+msgstr "Bruit 2D contrôlant la forme et taille des montagnes crantées."
#: src/settings_translation_file.cpp
msgid "2D noise that controls the shape/size of rolling hills."
@@ -2091,7 +2240,7 @@ msgid ""
"Also defines structure of floatland mountain terrain."
msgstr ""
"Bruit 3D définissant la structure et la hauteur des montagnes.\n"
-"Définit également la structure des montagnes flottantes."
+"Définit également la structure de terrain flottant type montagne."
#: src/settings_translation_file.cpp
msgid ""
@@ -2100,11 +2249,11 @@ msgid ""
"to be adjusted, as floatland tapering functions best when this noise has\n"
"a value range of approximately -2.0 to 2.0."
msgstr ""
-"Bruit 3D pour la structures des îles volantes.\n"
-"Si la valeur par défaut est changée, le bruit « d'échelle » (0,7 par "
-"défaut)\n"
-"doit peut-être être ajustée, parce que l'effilage des îles volantes\n"
-"fonctionne le mieux quand ce bruit est environ entre -2 et 2."
+"Bruit 3D pour la structures des terrains flottants.\n"
+"Si la valeur par défaut est changée, le bruit « d'échelle » (0,7 par défaut) "
+"peut demander à être ajustée, comme l'effilage des terrains flottants "
+"fonctionne mieux quand le bruit à une valeur approximativement comprise "
+"entre -2,0 et 2,0."
#: src/settings_translation_file.cpp
msgid "3D noise defining structure of river canyon walls."
@@ -2121,7 +2270,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "3D noise that determines number of dungeons per mapchunk."
-msgstr "Bruit 3D qui détermine le nombre de donjons par mapchunk."
+msgstr "Bruit 3D qui détermine le nombre de donjons par tranche de carte."
#: src/settings_translation_file.cpp
msgid ""
@@ -2138,14 +2287,14 @@ msgid ""
msgstr ""
"Support 3D.\n"
"Actuellement supporté :\n"
-"- aucun : pas de sortie 3D.\n"
-"- anaglyphe : couleur 3D bleu turquoise/violet.\n"
-"- entrelacé : polarisation basée sur des lignes avec support de l'écran.\n"
-"- horizontal : partage haut/bas de l'écran.\n"
-"- vertical : séparation côte à côte de l'écran.\n"
-"- vue mixte : 3D binoculaire.\n"
-"- pageflip : 3D basé sur quadbuffer.\n"
-"Notez que le mode entrelacé nécessite que les shaders soient activés."
+"– aucun : pas de sortie 3D.\n"
+"– anaglyphe : couleur 3D bleu turquoise/violet.\n"
+"– entrelacé : polarisation basée sur des lignes avec support de l'écran.\n"
+"– horizontal : partage haut/bas de l'écran.\n"
+"– vertical : séparation côte à côte de l'écran.\n"
+"– vue mixte : 3D binoculaire.\n"
+"– « pageflip » : 3D basé sur « quadbuffer ».\n"
+"Noter que le mode entrelacé nécessite que les shaders soient activés."
#: src/settings_translation_file.cpp
msgid ""
@@ -2159,7 +2308,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "A message to be displayed to all clients when the server crashes."
msgstr ""
-"Un message qui sera affiché à tous les joueurs quand le serveur s'interrompt."
+"Un message qui sera affiché à tous les joueurs quand le serveur plante."
#: src/settings_translation_file.cpp
msgid "A message to be displayed to all clients when the server shuts down."
@@ -2168,11 +2317,11 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "ABM interval"
-msgstr "Intervalle des ABM"
+msgstr "Intervalle « ABM »"
#: src/settings_translation_file.cpp
msgid "ABM time budget"
-msgstr "budget de temps ABM"
+msgstr "Budget de temps « ABM »"
#: src/settings_translation_file.cpp
msgid "Absolute limit of queued blocks to emerge"
@@ -2196,7 +2345,7 @@ msgstr "intervalle de gestion des blocs actifs"
#: src/settings_translation_file.cpp
msgid "Active block range"
-msgstr "Portée des mapblocks actifs"
+msgstr "Portée des blocs actifs"
#: src/settings_translation_file.cpp
msgid "Active object send range"
@@ -2210,8 +2359,8 @@ msgid ""
msgstr ""
"Adresse où se connecter.\n"
"Laisser vide pour démarrer un serveur local.\n"
-"Notez que le champ de l'adresse dans le menu principal passe outre ce "
-"réglage."
+"Noter que le champ de l'adresse dans le menu principal passe outre ce "
+"paramètre."
#: src/settings_translation_file.cpp
msgid "Adds particles when digging a node."
@@ -2222,8 +2371,14 @@ msgid ""
"Adjust dpi configuration to your screen (non X11/Android only) e.g. for 4k "
"screens."
msgstr ""
-"Ajuster la résolution de votre écran (non-X11 / Android seulement) ex. pour "
-"les écrans 4k."
+"Ajuste la configuration des PPP à votre écran (non X11 / Android seulement), "
+"par exemple pour les écrans 4k."
+
+#: src/settings_translation_file.cpp
+msgid "Adjust the detected display density, used for scaling UI elements."
+msgstr ""
+"Ajuste la densité d'affichage détectée, utilisée pour la mise à l'échelle "
+"des éléments de l'interface utilisateur."
#: src/settings_translation_file.cpp
#, c-format
@@ -2234,13 +2389,12 @@ msgid ""
"Value = 2.0 (can be higher depending on 'mgv7_np_floatland', always test\n"
"to be sure) creates a solid floatland layer."
msgstr ""
-"Règle la densité de la couche des îles volantes.\n"
+"Règle la densité de la couche de terrain flottant.\n"
"Augmenter la valeur pour augmenter la densité. Peut être positive ou "
"négative.\n"
-"Valeur = 0,0 : 50 % du volume est île volante.\n"
-"Valeur = 2,0 (peut être plus élevée selon « mgv7_np_floatland », toujours "
-"vérifier\n"
-"pour être sûr) crée une couche d'île volante solide."
+"Valeur = 0,0 : 50 % du volume est terrain flottant.\n"
+"Valeur = 2,0 (peut être plus élevée selon « mgv7_np_floatland », toujours "
+"vérifier pour être sûr) créée une couche de terrain flottant solide."
#: src/settings_translation_file.cpp
msgid "Advanced"
@@ -2254,12 +2408,12 @@ msgid ""
"This only has significant effect on daylight and artificial\n"
"light, it has very little effect on natural night light."
msgstr ""
-"Il modifie la courbe de lumière en lui appliquant une « correction gamma ».\n"
+"Il modifie la courbe de lumière en lui appliquant une « correction gamma ».\n"
"Des valeurs plus élevées rendent les niveaux de lumière moyens et inférieurs "
"plus lumineux.\n"
-"La valeur '1,0' laisse la courbe de lumière intacte.\n"
-"Cela n'a d'effet significatif que sur la lumière du jour et les\n"
-"la lumière, et elle a très peu d'effet sur la lumière naturelle de la nuit."
+"La valeur « 1,0 » laisse la courbe de lumière intacte.\n"
+"Cela n'a un effet significatif que sur la lumière du jour et la lumière "
+"artificielle, elle a très peu d'effet sur la lumière naturelle nocturne."
#: src/settings_translation_file.cpp
msgid "Always fly and fast"
@@ -2267,7 +2421,7 @@ msgstr "Toujours voler et être rapide"
#: src/settings_translation_file.cpp
msgid "Ambient occlusion gamma"
-msgstr "Occlusion gamma ambiente"
+msgstr "Occlusion gamma ambiante"
#: src/settings_translation_file.cpp
msgid "Amount of messages a player may send per 10 seconds."
@@ -2287,7 +2441,7 @@ msgstr "Annoncer le serveur"
#: src/settings_translation_file.cpp
msgid "Announce to this serverlist."
-msgstr "Annoncer le serveur publiquement."
+msgstr "Annoncer à cette liste de serveurs."
#: src/settings_translation_file.cpp
msgid "Append item name"
@@ -2295,7 +2449,7 @@ msgstr "Ajouter un nom d'objet"
#: src/settings_translation_file.cpp
msgid "Append item name to tooltip."
-msgstr "Ajouter un nom d'objet à l'info-bulle."
+msgstr "Ajouter un nom d'objet à l'infobulle."
#: src/settings_translation_file.cpp
msgid "Apple trees noise"
@@ -2310,8 +2464,8 @@ msgid ""
"Arm inertia, gives a more realistic movement of\n"
"the arm when the camera moves."
msgstr ""
-"Inertie du bras, donne un mouvement plus réaliste\n"
-"du bras lors des mouvements de caméra."
+"Inertie du bras, donne un mouvement plus réaliste du bras lors des "
+"mouvements de caméra."
#: src/settings_translation_file.cpp
msgid "Ask to reconnect after crash"
@@ -2331,21 +2485,19 @@ msgid ""
"optimization.\n"
"Stated in mapblocks (16 nodes)."
msgstr ""
-"À cette distance, le serveur va aggressivement optimiser quels blocs seront "
-"envoyés aux\n"
-"clients.\n"
-"Des petites valeurs peuvent augmenter fortement la performance du serveur, "
-"mais peut\n"
-"provoquer l'apparition de problèmes de rendu visibles. (Certains blocs ne "
-"seront pas affichés\n"
-"sous l'eau ou dans les cavernes, ou parfois sur terre.)\n"
-"Rendre cette valeur supérieure à max_block_send_distance désactive cette\n"
+"À cette distance, le serveur va agressivement optimiser quels blocs seront "
+"envoyés aux clients.\n"
+"Des valeurs faibles peuvent augmenter fortement la performance du serveur, "
+"mais peut provoquer l'apparition de problèmes de rendu visibles (certains "
+"blocs ne seront pas affichés sous l'eau ou dans les cavernes, ou parfois sur "
+"terre).\n"
+"Une valeur supérieure à « max_block_send_distance » désactive cette "
"optimisation.\n"
-"Définie en mapblocks (16 nœuds)."
+"Établie en blocs de carte (16 nœuds)."
#: src/settings_translation_file.cpp
msgid "Automatic forward key"
-msgstr "Touche de marche automatique"
+msgstr "Touche marche automatique"
#: src/settings_translation_file.cpp
msgid "Automatically jump up single-node obstacles."
@@ -2353,7 +2505,7 @@ msgstr "Saute automatiquement sur les obstacles d'un bloc de haut."
#: src/settings_translation_file.cpp
msgid "Automatically report to the serverlist."
-msgstr "Déclarer automatiquement le serveur à la liste des serveurs publics."
+msgstr "Déclarer automatiquement le serveur à la liste des serveurs."
#: src/settings_translation_file.cpp
msgid "Autosave screen size"
@@ -2364,8 +2516,16 @@ msgid "Autoscaling mode"
msgstr "Mode d'agrandissement automatique"
#: src/settings_translation_file.cpp
+msgid "Aux1 key"
+msgstr "Touche Aux1"
+
+#: src/settings_translation_file.cpp
+msgid "Aux1 key for climbing/descending"
+msgstr "Touche Aux1 pour monter/descendre"
+
+#: src/settings_translation_file.cpp
msgid "Backward key"
-msgstr "Reculer"
+msgstr "Touche reculer"
#: src/settings_translation_file.cpp
msgid "Base ground level"
@@ -2385,11 +2545,11 @@ msgstr "Privilèges de base"
#: src/settings_translation_file.cpp
msgid "Beach noise"
-msgstr "Bruit pour les plages"
+msgstr "Bruit des plages"
#: src/settings_translation_file.cpp
msgid "Beach noise threshold"
-msgstr "Seuil de bruit pour les plages"
+msgstr "Seuil de bruit des plages"
#: src/settings_translation_file.cpp
msgid "Bilinear filtering"
@@ -2408,10 +2568,6 @@ msgid "Biome noise"
msgstr "Bruit des biomes"
#: src/settings_translation_file.cpp
-msgid "Bits per pixel (aka color depth) in fullscreen mode."
-msgstr "Bits par pixel (profondeur de couleur) en mode plein-écran."
-
-#: src/settings_translation_file.cpp
msgid "Block send optimize distance"
msgstr "Distance d'optimisation d'envoi des blocs"
@@ -2421,15 +2577,15 @@ msgstr "Chemin de la police en gras et en italique"
#: src/settings_translation_file.cpp
msgid "Bold and italic monospace font path"
-msgstr "Chemin de la police Monospace en gras et en italique"
+msgstr "Chemin de la police monospace en gras et en italique"
#: src/settings_translation_file.cpp
msgid "Bold font path"
-msgstr "Chemin du fichier de police en gras"
+msgstr "Chemin de la police en gras"
#: src/settings_translation_file.cpp
msgid "Bold monospace font path"
-msgstr "Chemin de la police Monospace en gras"
+msgstr "Chemin de la police monospace en gras"
#: src/settings_translation_file.cpp
msgid "Build inside player"
@@ -2446,10 +2602,10 @@ msgid ""
"Increasing can reduce artifacting on weaker GPUs.\n"
"0.1 = Default, 0.25 = Good value for weaker tablets."
msgstr ""
-"Distance de la caméra 'près du plan de coupure' dans les nœuds, entre 0 et 0,"
-"25\n"
-"Ne fonctionne que sur les plateformes GLES. La plupart des utilisateurs n’"
-"auront pas besoin de changer cela.\n"
+"Distance de la caméra « près du plan de coupure » dans les nœuds, entre 0 et "
+"0,25\n"
+"Ne fonctionne que sur les plateformes GLES. La plupart des utilisateurs "
+"n’auront pas besoin de changer cela.\n"
"L’augmentation peut réduire les artefacts sur des GPUs plus faibles.\n"
"0,1 = Défaut, 0,25 = Bonne valeur pour les tablettes plus faibles."
@@ -2463,47 +2619,47 @@ msgstr "Lissage du mouvement de la caméra en mode cinématique"
#: src/settings_translation_file.cpp
msgid "Camera update toggle key"
-msgstr "Touche de mise à jour de la caméra"
+msgstr "Touche mise à jour de la caméra"
#: src/settings_translation_file.cpp
msgid "Cave noise"
-msgstr "Bruit des caves"
+msgstr "Bruit de grottes"
#: src/settings_translation_file.cpp
msgid "Cave noise #1"
-msgstr "Bruit de cave nº 1"
+msgstr "Bruit de grottes nº 1"
#: src/settings_translation_file.cpp
msgid "Cave noise #2"
-msgstr "Bruit de grotte nº 2"
+msgstr "Bruit de grottes nº 2"
#: src/settings_translation_file.cpp
msgid "Cave width"
-msgstr "Largeur de la grotte"
+msgstr "Largeur des grottes"
#: src/settings_translation_file.cpp
msgid "Cave1 noise"
-msgstr "Bruit des cave nº 1"
+msgstr "Bruit de grottes nº 1"
#: src/settings_translation_file.cpp
msgid "Cave2 noise"
-msgstr "Bruit des caves nº 2"
+msgstr "Bruit de grottes nº 2"
#: src/settings_translation_file.cpp
msgid "Cavern limit"
-msgstr "Limites des cavernes"
+msgstr "Limite des cavernes"
#: src/settings_translation_file.cpp
msgid "Cavern noise"
-msgstr "Bruit des caves"
+msgstr "Bruit de cavernes"
#: src/settings_translation_file.cpp
msgid "Cavern taper"
-msgstr "Caillou de caverne"
+msgstr "Conicité des cavernes"
#: src/settings_translation_file.cpp
msgid "Cavern threshold"
-msgstr "Limite des cavernes"
+msgstr "Seuil des cavernes"
#: src/settings_translation_file.cpp
msgid "Cavern upper limit"
@@ -2515,28 +2671,36 @@ msgid ""
"Where 0.0 is minimum light level, 1.0 is maximum light level."
msgstr ""
"Centre de la plage d'amplification de la courbe de lumière.\n"
-"Où 0,0 est le niveau de lumière minimum, et 1,0 est le niveau de lumière "
-"maximum."
+"Où 0,0 est le niveau de lumière minimale, et 1,0 est le niveau de lumière "
+"maximale."
+
+#: src/settings_translation_file.cpp
+msgid "Chat command time message threshold"
+msgstr "Seuil de message du temps de commande du tchat"
+
+#: src/settings_translation_file.cpp
+msgid "Chat commands"
+msgstr "Commandes de tchat"
#: src/settings_translation_file.cpp
msgid "Chat font size"
-msgstr "Taille de police du tchat"
+msgstr "Taille de la police du tchat"
#: src/settings_translation_file.cpp
msgid "Chat key"
-msgstr "Tchatter"
+msgstr "Touche tchat"
#: src/settings_translation_file.cpp
msgid "Chat log level"
-msgstr "Verbosité logicielle"
+msgstr "Niveau du journal du tchat"
#: src/settings_translation_file.cpp
msgid "Chat message count limit"
-msgstr "Limite du nombre de message de discussion"
+msgstr "Limite du nombre de messages de tchat"
#: src/settings_translation_file.cpp
msgid "Chat message format"
-msgstr "Format du message de tchat"
+msgstr "Format de message du tchat"
#: src/settings_translation_file.cpp
msgid "Chat message kick threshold"
@@ -2544,19 +2708,19 @@ msgstr "Seuil de messages de discussion avant déconnexion forcée"
#: src/settings_translation_file.cpp
msgid "Chat message max length"
-msgstr "Longueur maximum d'un message de tchat"
+msgstr "Longueur maximale d'un message de tchat"
#: src/settings_translation_file.cpp
msgid "Chat toggle key"
-msgstr "Afficher le tchat"
+msgstr "Touche afficher le tchat"
#: src/settings_translation_file.cpp
-msgid "Chatcommands"
-msgstr "Commandes de tchat"
+msgid "Chat weblinks"
+msgstr "Liens web de tchat"
#: src/settings_translation_file.cpp
msgid "Chunk size"
-msgstr "Taille des chunks"
+msgstr "Taille des tranches"
#: src/settings_translation_file.cpp
msgid "Cinematic mode"
@@ -2564,13 +2728,21 @@ msgstr "Mode cinématique"
#: src/settings_translation_file.cpp
msgid "Cinematic mode key"
-msgstr "Mode cinématique"
+msgstr "Touche mode cinématique"
#: src/settings_translation_file.cpp
msgid "Clean transparent textures"
msgstr "Textures transparentes filtrées"
#: src/settings_translation_file.cpp
+msgid ""
+"Clickable weblinks (middle-click or Ctrl+left-click) enabled in chat console "
+"output."
+msgstr ""
+"Liens web cliquables (molette de la souris ou ctrl+clic gauche) activés dans "
+"la sortie de la console de tchat."
+
+#: src/settings_translation_file.cpp
msgid "Client"
msgstr "Client"
@@ -2612,7 +2784,11 @@ msgstr "Nuages dans le menu"
#: src/settings_translation_file.cpp
msgid "Colored fog"
-msgstr "Brouillard colorée"
+msgstr "Brouillard coloré"
+
+#: src/settings_translation_file.cpp
+msgid "Colored shadows"
+msgstr "Ombres colorées"
#: src/settings_translation_file.cpp
msgid ""
@@ -2625,12 +2801,11 @@ msgid ""
"so see a full list at https://content.minetest.net/help/content_flags/"
msgstr ""
"Liste des drapeaux à cacher du dépôt des contenus.\n"
-"« nonfree » peut être utilisé pour cacher les paquets non libres,\n"
-"comme défini par la Free Software Foundation.\n"
+"« nonfree » peut être utilisé pour cacher les paquets non libres, comme "
+"défini par la Free Software Foundation.\n"
"Vous pouvez aussi spécifier des classifications de contenu.\n"
-"Ces drapeaux sont indépendants des versions de Minetest,\n"
-"consultez la liste complète à l'adresse https://content.minetest.net/help/"
-"content_flags/"
+"Ces drapeaux sont indépendants des versions de Minetest, consulter la liste "
+"complète à l'adresse https://content.minetest.net/help/content_flags/"
#: src/settings_translation_file.cpp
msgid ""
@@ -2648,13 +2823,38 @@ msgid ""
"functions even when mod security is on (via request_insecure_environment())."
msgstr ""
"Liste séparée par des virgules des mods de confiance qui sont autorisés à "
-"accéder aux fonctions non\n"
-"sécurisées même lorsque l'option de sécurisation des mods est activée (via "
-"request_insecure_environment())."
+"accéder aux fonctions non sécurisées même lorsque l'option de sécurisation "
+"des mods est activée (via request_insecure_environment())."
#: src/settings_translation_file.cpp
msgid "Command key"
-msgstr "Commande"
+msgstr "Touche commande"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Compression level to use when saving mapblocks to disk.\n"
+"-1 - use default compression level\n"
+"0 - least compression, fastest\n"
+"9 - best compression, slowest"
+msgstr ""
+"Niveau de compression à utiliser lors de la sauvegarde des blocs de carte "
+"sur le disque.\n"
+"-1 - utilise le niveau de compression par défaut\n"
+"0 - compression minimale, le plus rapide\n"
+"9 - meilleure compression, le plus lent"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Compression level to use when sending mapblocks to the client.\n"
+"-1 - use default compression level\n"
+"0 - least compression, fastest\n"
+"9 - best compression, slowest"
+msgstr ""
+"Niveau de compression à utiliser lors de l'envoi des blocs de carte au "
+"client.\n"
+"-1 - utilise le niveau de compression par défaut\n"
+"0 - compression minimale, le plus rapide\n"
+"9 - meilleure compression, le plus lent"
#: src/settings_translation_file.cpp
msgid "Connect glass"
@@ -2670,11 +2870,11 @@ msgstr "Unifier le verre si le bloc le permet."
#: src/settings_translation_file.cpp
msgid "Console alpha"
-msgstr "Opacité du fond de la console de jeu"
+msgstr "Opacité de la console"
#: src/settings_translation_file.cpp
msgid "Console color"
-msgstr "Couleur de la console de jeu"
+msgstr "Couleur de la console"
#: src/settings_translation_file.cpp
msgid "Console height"
@@ -2702,12 +2902,12 @@ msgid ""
"Press the autoforward key again or the backwards movement to disable."
msgstr ""
"Mouvement continu en avant, activé par la touche d'avance automatique.\n"
-"Appuyez à nouveau sur la touche d'avance automatique ou de recul pour le "
+"Appuyer à nouveau sur la touche d'avance automatique ou de recul pour le "
"désactiver."
#: src/settings_translation_file.cpp
msgid "Controls"
-msgstr "Touches de contrôle"
+msgstr "Contrôles"
#: src/settings_translation_file.cpp
msgid ""
@@ -2716,7 +2916,7 @@ msgid ""
"72 = 20min, 360 = 4min, 1 = 24hour, 0 = day/night/whatever stays unchanged."
msgstr ""
"Contrôle la durée complet du cycle jour/nuit.\n"
-"Exemples :\n"
+"Exemples :\n"
"72 = 20 minutes, 360 = 4 minutes, 1 = 24 heures, 0 = jour/nuit/n'importe "
"quoi éternellement."
@@ -2739,9 +2939,9 @@ msgid ""
"intensive noise calculations."
msgstr ""
"Contrôle la largeur des tunnels, une valeur plus faible crée des tunnels "
-"plus large.\n"
-"Valeur >= 10,0 désactive complètement la génération de tunnel et évite\n"
-"le calcul intensif de bruit."
+"plus larges.\n"
+"Valeur >= 10,0 désactive complètement la génération de tunnels et évite le "
+"calcul intensif de bruit."
#: src/settings_translation_file.cpp
msgid "Crash message"
@@ -2758,10 +2958,10 @@ msgstr "Opacité du réticule"
#: src/settings_translation_file.cpp
msgid ""
"Crosshair alpha (opaqueness, between 0 and 255).\n"
-"Also controls the object crosshair color"
+"This also applies to the object crosshair."
msgstr ""
"Opacité du réticule (entre 0 et 255).\n"
-"Contrôle également la couleur du réticule de l'objet"
+"Cela contrôle également la couleur du réticule de l'objet."
#: src/settings_translation_file.cpp
msgid "Crosshair color"
@@ -2772,12 +2972,12 @@ msgid ""
"Crosshair color (R,G,B).\n"
"Also controls the object crosshair color"
msgstr ""
-"Couleur du réticule (R,G,B).\n"
+"Couleur du réticule (R,V,B).\n"
"Contrôle également la couleur du réticule de l'objet"
#: src/settings_translation_file.cpp
msgid "DPI"
-msgstr "DPI"
+msgstr "PPP"
#: src/settings_translation_file.cpp
msgid "Damage"
@@ -2785,7 +2985,7 @@ msgstr "Dégâts"
#: src/settings_translation_file.cpp
msgid "Debug info toggle key"
-msgstr "Infos de débogage"
+msgstr "Touche infos de débogage"
#: src/settings_translation_file.cpp
msgid "Debug log file size threshold"
@@ -2793,15 +2993,15 @@ msgstr "Seuil de la taille du fichier de journal"
#: src/settings_translation_file.cpp
msgid "Debug log level"
-msgstr "Niveau de détails des infos de débogage"
+msgstr "Niveau du journal de débogage"
#: src/settings_translation_file.cpp
msgid "Dec. volume key"
-msgstr "Touche pour diminuer le volume"
+msgstr "Touche réduire le volume"
#: src/settings_translation_file.cpp
msgid "Decrease this to increase liquid resistance to movement."
-msgstr "Diminuez ceci pour augmenter la résistance liquide au mouvement."
+msgstr "Réduire ceci pour augmenter la résistance liquide au mouvement."
#: src/settings_translation_file.cpp
msgid "Dedicated server step"
@@ -2841,11 +3041,13 @@ msgstr "Taille d’empilement par défaut"
#: src/settings_translation_file.cpp
msgid ""
-"Default timeout for cURL, stated in milliseconds.\n"
-"Only has an effect if compiled with cURL."
+"Define shadow filtering quality.\n"
+"This simulates the soft shadows effect by applying a PCF or Poisson disk\n"
+"but also uses more resources."
msgstr ""
-"Délais d'interruption de cURL par défaut, établi en millisecondes.\n"
-"Seulement appliqué si Minetest est compilé avec cURL."
+"Défini la qualité du filtrage des ombres. Cela simule l'effet d'ombres "
+"douces en appliquant un disque PCF ou Poisson mais utilise également plus de "
+"ressources."
#: src/settings_translation_file.cpp
msgid "Defines areas where trees have apples."
@@ -2876,7 +3078,7 @@ msgstr "Définit la structure des canaux fluviaux à grande échelle."
#: src/settings_translation_file.cpp
msgid "Defines location and terrain of optional hills and lakes."
msgstr ""
-"Définit l'emplacement et le terrain des collines facultatives et des lacs."
+"Définit l'emplacement et le terrain des collines et des lacs optionnels."
#: src/settings_translation_file.cpp
msgid "Defines the base ground level."
@@ -2889,7 +3091,7 @@ msgstr "Définit la profondeur du court de la rivière."
#: src/settings_translation_file.cpp
msgid "Defines the maximal player transfer distance in blocks (0 = unlimited)."
msgstr ""
-"Détermine la distance maximale de transfert du joueur en mapblocks (0 = "
+"Détermine la distance maximale de transfert du joueur en blocs (0 = "
"illimité)."
#: src/settings_translation_file.cpp
@@ -2909,8 +3111,7 @@ msgid ""
"Delay between mesh updates on the client in ms. Increasing this will slow\n"
"down the rate of mesh updates, thus reducing jitter on slower clients."
msgstr ""
-"Délai entre les mises à jour du maillage sur le client en ms. Augmenter "
-"ceci\n"
+"Délai entre les mises à jour du maillage sur le client en ms. Augmenter ceci "
"ralentit le taux de mise à jour et réduit donc les tremblements sur les "
"client lents."
@@ -2920,7 +3121,7 @@ msgstr "Retard dans les blocs envoyés après la construction"
#: src/settings_translation_file.cpp
msgid "Delay showing tooltips, stated in milliseconds."
-msgstr "Latence d'apparition des infobulles, établie en millisecondes."
+msgstr "Délai d'apparition des infobulles, établi en millisecondes."
#: src/settings_translation_file.cpp
msgid "Deprecated Lua API handling"
@@ -2932,34 +3133,36 @@ msgstr "Profondeur en-dessous de laquelle se trouvent les grandes cavernes."
#: src/settings_translation_file.cpp
msgid "Depth below which you'll find large caves."
-msgstr "Profondeur en-dessous duquel se trouvent de grandes caves."
+msgstr "Profondeur en-dessous duquel se trouvent de grandes grottes."
#: src/settings_translation_file.cpp
msgid ""
"Description of server, to be displayed when players join and in the "
"serverlist."
-msgstr "Description du serveur affichée sur la liste des serveurs."
+msgstr ""
+"Description du serveur affichée lorsque les joueurs se connectent et sur la "
+"liste des serveurs."
#: src/settings_translation_file.cpp
msgid "Desert noise threshold"
-msgstr "Limite de bruit pour le désert"
+msgstr "Seuil de bruit des déserts"
#: src/settings_translation_file.cpp
msgid ""
"Deserts occur when np_biome exceeds this value.\n"
"When the 'snowbiomes' flag is enabled, this is ignored."
msgstr ""
-"Des déserts apparaissent lorsque np_biome dépasse cette valeur.\n"
-"Quand le flag 'snowbiomes' est activé, (avec le nouveau système de biomes), "
-"ce paramètre est ignoré."
+"Des déserts apparaissent lorsque « np_biome » dépasse cette valeur.\n"
+"Quand le drapeau « snowbiomes » est activé (avec le nouveau système de "
+"biomes), ce paramètre est ignoré."
#: src/settings_translation_file.cpp
msgid "Desynchronize block animation"
-msgstr "Désynchroniser les textures animées par mapblock"
+msgstr "Désynchroniser les animations de blocs"
#: src/settings_translation_file.cpp
msgid "Dig key"
-msgstr "Touche pour creuser"
+msgstr "Touche creuser"
#: src/settings_translation_file.cpp
msgid "Digging particles"
@@ -2974,24 +3177,28 @@ msgid "Disallow empty passwords"
msgstr "Refuser les mots de passe vides"
#: src/settings_translation_file.cpp
+msgid "Display Density Scaling Factor"
+msgstr "Facteur d'échelle de la densité d'affichage"
+
+#: src/settings_translation_file.cpp
msgid "Domain name of server, to be displayed in the serverlist."
-msgstr "Nom de domaine du serveur affichée sur la liste des serveurs publics."
+msgstr "Nom de domaine du serveur affichée sur la liste des serveurs."
#: src/settings_translation_file.cpp
msgid "Double tap jump for fly"
-msgstr "Double-appui sur « saut » pour voler"
+msgstr "Double-appui sur « saut » pour voler"
#: src/settings_translation_file.cpp
msgid "Double-tapping the jump key toggles fly mode."
-msgstr "Double-appui sur « saut » pour voler."
+msgstr "Double-appui sur la touche « saut » pour voler."
#: src/settings_translation_file.cpp
msgid "Drop item key"
-msgstr "Lâcher"
+msgstr "Touche lâcher un objet"
#: src/settings_translation_file.cpp
msgid "Dump the mapgen debug information."
-msgstr "Afficher les infos de débogage de la génération de terrain."
+msgstr "Afficher les informations de débogage de la génération de terrain."
#: src/settings_translation_file.cpp
msgid "Dungeon maximum Y"
@@ -3003,7 +3210,7 @@ msgstr "Minimum Y des donjons"
#: src/settings_translation_file.cpp
msgid "Dungeon noise"
-msgstr "Bruit de donjon"
+msgstr "Bruit de donjons"
#: src/settings_translation_file.cpp
msgid ""
@@ -3022,6 +3229,25 @@ msgstr ""
"Ce support est expérimental et l'API peut changer."
#: src/settings_translation_file.cpp
+msgid ""
+"Enable Poisson disk filtering.\n"
+"On true uses Poisson disk to make \"soft shadows\". Otherwise uses PCF "
+"filtering."
+msgstr ""
+"Active le filtrage par disque de Poisson.\n"
+"Si activé, utilise le disque de Poisson pour créer des « ombres douces ». "
+"Sinon, utilise le filtrage PCF."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable colored shadows.\n"
+"On true translucent nodes cast colored shadows. This is expensive."
+msgstr ""
+"Active les ombres colorées.\n"
+"Sur les nœuds vraiment transparents, projette des ombres colorées. Ceci est "
+"coûteux."
+
+#: src/settings_translation_file.cpp
msgid "Enable console window"
msgstr "Activer la console"
@@ -3035,7 +3261,7 @@ msgstr "Activer les manettes"
#: src/settings_translation_file.cpp
msgid "Enable mod channels support."
-msgstr "Activer la sécurisation des mods."
+msgstr "Activer le support des canaux de mods."
#: src/settings_translation_file.cpp
msgid "Enable mod security"
@@ -3059,8 +3285,7 @@ msgid ""
"Enable register confirmation when connecting to server.\n"
"If disabled, new account will be registered automatically."
msgstr ""
-"Active la confirmation d'enregistrement lorsque vous vous connectez à un "
-"serveur.\n"
+"Active la confirmation d'enregistrement lors de la connexion à un serveur.\n"
"Si cette option est désactivée, le nouveau compte sera créé automatiquement."
#: src/settings_translation_file.cpp
@@ -3081,9 +3306,8 @@ msgid ""
msgstr ""
"Activer pour empêcher les anciens clients de se connecter.\n"
"Les anciens clients sont compatibles dans le sens où ils ne s'interrompent "
-"pas lors de la connexion\n"
-"aux serveurs récents, mais ils peuvent ne pas supporter certaines "
-"fonctionnalités."
+"pas lors de la connexion aux serveurs récents, mais ils peuvent ne pas "
+"supporter certaines fonctionnalités."
#: src/settings_translation_file.cpp
msgid ""
@@ -3094,15 +3318,15 @@ msgid ""
msgstr ""
"Activer l'usage d'un serveur de média distant (si pourvu par le serveur).\n"
"Les serveurs de média distants offrent un moyen significativement plus "
-"rapide de télécharger\n"
-"des données média (ex. : textures) lors de la connexion au serveur."
+"rapide de télécharger des données média (ex. : textures) lors de la "
+"connexion au serveur."
#: src/settings_translation_file.cpp
msgid ""
"Enable vertex buffer objects.\n"
"This should greatly improve graphics performance."
msgstr ""
-"Active les vertex buffer objects.\n"
+"Active les « vertex buffer objects ».\n"
"Cela devrait grandement augmenter les performances graphiques."
#: src/settings_translation_file.cpp
@@ -3111,7 +3335,7 @@ msgid ""
"For example: 0 for no view bobbing; 1.0 for normal; 2.0 for double."
msgstr ""
"Facteur de mouvement de bras.\n"
-"Par exemple : 0 = pas de mouvement, 1 = normal, 2 = double."
+"Par exemple : 0 = pas de mouvement, 1 = normal, 2 = double."
#: src/settings_translation_file.cpp
msgid ""
@@ -3120,8 +3344,8 @@ msgid ""
"Needs enable_ipv6 to be enabled."
msgstr ""
"Active/désactive l'usage d'un serveur IPv6.\n"
-"Ignoré si bind_address est activé.\n"
-"A besoin de enable_ipv6 pour être activé."
+"Ignoré si « bind_address » est activé.\n"
+"A besoin de « enable_ipv6 » pour être activé."
#: src/settings_translation_file.cpp
msgid ""
@@ -3130,7 +3354,7 @@ msgid ""
"appearance of high dynamic range images. Mid-range contrast is slightly\n"
"enhanced, highlights and shadows are gradually compressed."
msgstr ""
-"Active le mappage de ton filmique 'Uncharted 2' de Hable.\n"
+"Active le mappage de tons filmique « Uncharted 2 » de Hable.\n"
"Simule la courbe des tons du film photographique, ce qui se rapproche de la "
"l'apparition d'images à plage dynamique élevée. Le contraste de milieu de "
"gamme est légèrement améliorées, les reflets et les ombres sont "
@@ -3142,7 +3366,7 @@ msgstr "Active la rotation des items d'inventaire."
#: src/settings_translation_file.cpp
msgid "Enables caching of facedir rotated meshes."
-msgstr "Active la mise en cache des meshnodes."
+msgstr "Active la mise en cache des maillages orientés."
#: src/settings_translation_file.cpp
msgid "Enables minimap."
@@ -3156,14 +3380,22 @@ msgid ""
"Changing this setting requires a restart."
msgstr ""
"Active le système audio.\n"
-"S'il est désactivé, cela désactive complètement tous les sons partout et le "
-"jeu\n"
-"les commandes audio ne fonctionneront pas.\n"
+"Si désactivé, cela désactive complètement tous les sons partout et les "
+"commandes audio dans le jeu ne fonctionneront pas.\n"
"La modification de ce paramètre nécessite un redémarrage."
#: src/settings_translation_file.cpp
+msgid ""
+"Enables tradeoffs that reduce CPU load or increase rendering performance\n"
+"at the expense of minor visual glitches that do not impact game playability."
+msgstr ""
+"Active les compromis qui réduisent la charge du CPU ou augmentent les "
+"performances de rendu au détriment de problèmes visuels mineurs qui n'ont "
+"pas d'impact sur la jouabilité du jeu."
+
+#: src/settings_translation_file.cpp
msgid "Engine profiling data print interval"
-msgstr "Intervalle d'impression des données du moteur de profil"
+msgstr "Intervalle d'impression des données du moteur de profilage"
#: src/settings_translation_file.cpp
msgid "Entity methods"
@@ -3178,12 +3410,14 @@ msgid ""
"Values < 1.0 (for example 0.25) create a more defined surface level with\n"
"flatter lowlands, suitable for a solid floatland layer."
msgstr ""
-"Exposant contrôlant la forme du bas des massifs volants.\n"
-"Une valeur égale à 1 donne une forme conique.\n"
-"Une valeur supérieure à 1 donne une longue base éfilée (concave),\n"
-"plus pour des îles volantes comme celles par défaut.\n"
-"Une valeur inférieure à 1 (disons 0,25) donne une surface bien\n"
-"définie en bas, plus pour une couche solide de massif volant."
+"Exposant de l'effilement des terrains flottants. Modifie le comportement de "
+"l'effilement.\n"
+"Une valeur égale à 1 créée un effilement uniforme et linéaire.\n"
+"Une valeur supérieure à 1 créée un effilement lisse adaptée pour les "
+"terrains flottants séparés par défaut.\n"
+"Une valeur inférieure à 1 (par exemple 0,25) créée une surface plus définie "
+"avec des terrains bas plus plats, adaptée pour une couche solide de terrain "
+"flottant."
#: src/settings_translation_file.cpp
msgid "FPS when unfocused or paused"
@@ -3203,23 +3437,11 @@ msgstr "Intensité du mouvement de tête en tombant"
#: src/settings_translation_file.cpp
msgid "Fallback font path"
-msgstr "Chemin de police alternative"
-
-#: src/settings_translation_file.cpp
-msgid "Fallback font shadow"
-msgstr "Ombre de la police alternative"
-
-#: src/settings_translation_file.cpp
-msgid "Fallback font shadow alpha"
-msgstr "Opacité de l'ombre de la police alternative"
-
-#: src/settings_translation_file.cpp
-msgid "Fallback font size"
-msgstr "Taille de la police alternative"
+msgstr "Chemin de la police alternative"
#: src/settings_translation_file.cpp
msgid "Fast key"
-msgstr "Mode rapide"
+msgstr "Touche mode rapide"
#: src/settings_translation_file.cpp
msgid "Fast mode acceleration"
@@ -3235,11 +3457,11 @@ msgstr "Mouvement rapide"
#: src/settings_translation_file.cpp
msgid ""
-"Fast movement (via the \"special\" key).\n"
+"Fast movement (via the \"Aux1\" key).\n"
"This requires the \"fast\" privilege on the server."
msgstr ""
-"Mouvement rapide (via la touche « spécial »).\n"
-"Nécessite le privilège « fast » sur le serveur."
+"Mouvement rapide (via la touche « Aux1 »).\n"
+"Nécessite le privilège « fast » sur le serveur."
#: src/settings_translation_file.cpp
msgid "Field of view"
@@ -3255,9 +3477,8 @@ msgid ""
"the\n"
"Multiplayer Tab."
msgstr ""
-"Fichier localisé dans client/serverlist/ contenant vos serveurs favoris "
-"affichés dans\n"
-"l'onglet multijoueur."
+"Fichier dans « client/serverlist/ » contenant vos serveurs favoris affichés "
+"dans l'onglet « Rejoindre une partie »."
#: src/settings_translation_file.cpp
msgid "Filler depth"
@@ -3269,19 +3490,21 @@ msgstr "Bruit de profondeur de remplissage"
#: src/settings_translation_file.cpp
msgid "Filmic tone mapping"
-msgstr "Cartographie des tonalités filmiques"
+msgstr "Mappage de tons filmique"
#: 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."
+"which PNG optimizers usually discard, often resulting in dark or\n"
+"light edges to transparent textures. Apply a filter to clean that up\n"
+"at texture load time. This is automatically enabled if mipmapping is enabled."
msgstr ""
-"Les textures filtrées peuvent mélanger des valeurs RGB avec des zones 100 % "
-"transparentes, aboutissant parfois à des bords foncés ou clairs sur les "
-"textures transparentes.\n"
-"Appliquer ce filtre pour nettoyer cela au chargement de la texture."
+"Les textures filtrées peuvent mélanger des valeurs RVB avec des zones "
+"complètement transparentes, que les optimiseurs PNG ignorent généralement, "
+"aboutissant souvent à des bords foncés ou clairs sur les textures "
+"transparentes.\n"
+"Appliquer ce filtre pour nettoyer cela au chargement de la texture. Ceci est "
+"automatiquement activé si le mip-mapping est activé."
#: src/settings_translation_file.cpp
msgid "Filtering"
@@ -3290,8 +3513,8 @@ msgstr "Filtrage"
#: src/settings_translation_file.cpp
msgid "First of 4 2D noises that together define hill/mountain range height."
msgstr ""
-"Le premier des 4 bruits 2D qui définissent la hauteur des collines et "
-"montagnes."
+"Le premier des 4 bruits 2D qui définissent ensemble la hauteur des collines "
+"et des montagnes."
#: src/settings_translation_file.cpp
msgid "First of two 3D noises that together define tunnels."
@@ -3307,35 +3530,35 @@ msgstr "Fixer la manette virtuelle"
#: src/settings_translation_file.cpp
msgid "Floatland density"
-msgstr "Densité des massifs volants"
+msgstr "Densité des terrains flottants"
#: src/settings_translation_file.cpp
msgid "Floatland maximum Y"
-msgstr "Maximum Y de massifs volants"
+msgstr "Maximum Y des terrains flottants"
#: src/settings_translation_file.cpp
msgid "Floatland minimum Y"
-msgstr "Minimum Y des massifs volants"
+msgstr "Minimum Y des terrains flottants"
#: src/settings_translation_file.cpp
msgid "Floatland noise"
-msgstr "Bruit des massifs volants"
+msgstr "Bruit des terrains flottants"
#: src/settings_translation_file.cpp
msgid "Floatland taper exponent"
-msgstr "Paramètre de forme des massifs volants"
+msgstr "Exposant de l'effilement des terrains flottants"
#: src/settings_translation_file.cpp
msgid "Floatland tapering distance"
-msgstr "Hauteur des bases des massifs volants"
+msgstr "Hauteur de la base des terrains flottants"
#: src/settings_translation_file.cpp
msgid "Floatland water level"
-msgstr "Niveau d'eau des massifs volants"
+msgstr "Niveau d'eau des terrains flottants"
#: src/settings_translation_file.cpp
msgid "Fly key"
-msgstr "Voler"
+msgstr "Touche voler"
#: src/settings_translation_file.cpp
msgid "Flying"
@@ -3351,15 +3574,15 @@ msgstr "Début du brouillard"
#: src/settings_translation_file.cpp
msgid "Fog toggle key"
-msgstr "Brouillard"
+msgstr "Touche brouillard"
#: src/settings_translation_file.cpp
msgid "Font bold by default"
-msgstr "La police est en gras par défaut"
+msgstr "Police en gras par défaut"
#: src/settings_translation_file.cpp
msgid "Font italic by default"
-msgstr "La police est en italique par défaut"
+msgstr "Police en italique par défaut"
#: src/settings_translation_file.cpp
msgid "Font shadow"
@@ -3374,24 +3597,42 @@ msgid "Font size"
msgstr "Taille de la police"
#: src/settings_translation_file.cpp
-msgid "Font size of the default font in point (pt)."
-msgstr "La taille de police par défaut en point (pt)."
+msgid "Font size divisible by"
+msgstr "Taille de la police divisible par"
#: src/settings_translation_file.cpp
-msgid "Font size of the fallback font in point (pt)."
-msgstr "Taille de police secondaire au point (pt)."
+msgid "Font size of the default font where 1 unit = 1 pixel at 96 DPI"
+msgstr "Taille de la police par défaut où 1 unité = 1 pixel à 96 PPP"
#: src/settings_translation_file.cpp
-msgid "Font size of the monospace font in point (pt)."
-msgstr "Taille de la police monospace en point (pt)."
+msgid "Font size of the monospace font where 1 unit = 1 pixel at 96 DPI"
+msgstr "Taille de la police monospace où 1 unité = 1 pixel à 96 PPP"
#: src/settings_translation_file.cpp
msgid ""
"Font size of the recent chat text and chat prompt in point (pt).\n"
"Value 0 will use the default font size."
msgstr ""
-"Taille de police (en pt) des messages récents et du curseur.\n"
-"La valeur 0 correspond à la taille par défaut."
+"Taille de la police des messages récents de tchat et de l'invité de tchat en "
+"point (pt).\n"
+"La valeur 0 utilise la taille de police par défaut."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"For pixel-style fonts that do not scale well, this ensures that font sizes "
+"used\n"
+"with this font will always be divisible by this value, in pixels. For "
+"instance,\n"
+"a pixel font 16 pixels tall should have this set to 16, so it will only ever "
+"be\n"
+"sized 16, 32, 48, etc., so a mod requesting a size of 25 will get 32."
+msgstr ""
+"Pour les polices de style pixel qui ne s'adaptent pas bien, cela garantit "
+"que les tailles de police utilisées avec cette police seront toujours "
+"divisibles par cette valeur, en pixels. Par exemple une police de style "
+"pixel de 16 pixels de haut doit avoir cette valeur définie sur 16, alors "
+"elle ne sera jamais que de taille 16, 32, 48, etc., donc un mod demandant "
+"une taille de 25 obtiendra 32."
#: src/settings_translation_file.cpp
msgid ""
@@ -3399,8 +3640,8 @@ msgid ""
"placeholders:\n"
"@name, @message, @timestamp (optional)"
msgstr ""
-"Format des messages de tchat des joueurs. Substituts valides :\n"
-"@name, @message, @timestamp (facultatif)"
+"Format des messages de tchat des joueurs. Substituts valides :\n"
+"@name, @message, @timestamp (optionnel)"
#: src/settings_translation_file.cpp
msgid "Format of screenshots."
@@ -3408,45 +3649,46 @@ msgstr "Format de captures d'écran."
#: src/settings_translation_file.cpp
msgid "Formspec Default Background Color"
-msgstr "Couleur d'arrière plan par défaut des formspec"
+msgstr "Couleur de l'arrière-plan par défaut des formspec"
#: src/settings_translation_file.cpp
msgid "Formspec Default Background Opacity"
-msgstr "Opacité par défaut des formspec"
+msgstr "Opacité de l'arrière-plan par défaut des formspec"
#: src/settings_translation_file.cpp
msgid "Formspec Full-Screen Background Color"
-msgstr "Couleur d'arrière plan des formspec plein écran"
+msgstr "Couleur de l'arrière-plan en plein écran des formspec"
#: src/settings_translation_file.cpp
msgid "Formspec Full-Screen Background Opacity"
-msgstr "Opacité de l'arrière plan des formspec en plein écran"
+msgstr "Opacité de l'arrière-plan en plein écran des formspec"
#: src/settings_translation_file.cpp
msgid "Formspec default background color (R,G,B)."
-msgstr "Couleur de fond de la console du jeu (R,G,B)."
+msgstr "Couleur de l'arrière-plan par défaut des formspec (R,V,B)."
#: src/settings_translation_file.cpp
msgid "Formspec default background opacity (between 0 and 255)."
-msgstr "Opacité de fond de la console du jeu (entre 0 et 255)."
+msgstr "Opacité de l'arrière-plan par défaut des formspec (entre 0 et 255)."
#: src/settings_translation_file.cpp
msgid "Formspec full-screen background color (R,G,B)."
-msgstr "Couleur de fond de la console du jeu (R,G,B)."
+msgstr "Couleur de l'arrière-plan en plein écran des formspec (R,V,B)."
#: src/settings_translation_file.cpp
msgid "Formspec full-screen background opacity (between 0 and 255)."
-msgstr "Opacité de fond de la console du jeu (entre 0 et 255)."
+msgstr ""
+"Opacité de l'arrière-plan en plein écran des formspec (entre 0 et 255)."
#: src/settings_translation_file.cpp
msgid "Forward key"
-msgstr "Avancer"
+msgstr "Touche avancer"
#: src/settings_translation_file.cpp
msgid "Fourth of 4 2D noises that together define hill/mountain range height."
msgstr ""
-"Le quatrième des 4 bruits 2D qui définissent la hauteur des collines et "
-"montagnes."
+"Le quatrième des 4 bruits 2D qui définissent ensemble la hauteur des "
+"collines et des montagnes."
#: src/settings_translation_file.cpp
msgid "Fractal type"
@@ -3458,22 +3700,18 @@ msgstr ""
"Fraction de la distance de vue à partir de laquelle le brouillard est affiché"
#: src/settings_translation_file.cpp
-msgid "FreeType fonts"
-msgstr "Polices Freetype"
-
-#: src/settings_translation_file.cpp
msgid ""
"From how far blocks are generated for clients, stated in mapblocks (16 "
"nodes)."
msgstr ""
-"Distance maximale de génération des mapblocks (16^3 blocs) depuis la "
-"position du client."
+"Distance maximale de génération des blocs depuis la position du client, "
+"établie en blocs de carte (16^3 blocs)."
#: src/settings_translation_file.cpp
msgid ""
"From how far blocks are sent to clients, stated in mapblocks (16 nodes)."
msgstr ""
-"Distance maximale d'envoi des mapblocks aux clients, établie en mapblocks "
+"Distance maximale d'envoi des blocs aux clients, établie en blocs de carte "
"(16^3 blocs)."
#: src/settings_translation_file.cpp
@@ -3485,24 +3723,22 @@ msgid ""
"player is looking. (This can avoid mobs suddenly disappearing from view)"
msgstr ""
"Distance maximale à laquelle les clients ont connaissance des objets, "
-"indiquée en mapblocks (16 nœuds).\n"
+"établie en blocs de carte (16 nœuds).\n"
"\n"
-"Si vous définissez une valeur supérieure à active_block_range, le serveur\n"
-"va maintenir les objets actifs jusqu’à cette distance dans la direction où\n"
-"un joueur regarde. (Cela peut éviter que des mobs disparaissent soudainement "
-"de la vue.)"
+"Définir cela plus grand que « active_block_range », ainsi le serveur va "
+"maintenir les objets actifs jusqu’à cette distance dans la direction où un "
+"joueur regarde (cela peut éviter que des mobs disparaissent soudainement de "
+"la vue)."
#: src/settings_translation_file.cpp
msgid "Full screen"
msgstr "Plein écran"
#: src/settings_translation_file.cpp
-msgid "Full screen BPP"
-msgstr "Bits par pixel en mode plein écran"
-
-#: src/settings_translation_file.cpp
msgid "Fullscreen mode."
-msgstr "Mode plein écran."
+msgstr ""
+"Mode plein écran.\n"
+"Un redémarrage est nécessaire après la modification de cette option."
#: src/settings_translation_file.cpp
msgid "GUI scaling"
@@ -3514,7 +3750,7 @@ msgstr "Filtrage des images du GUI"
#: src/settings_translation_file.cpp
msgid "GUI scaling filter txr2img"
-msgstr "Filtrage txr2img du GUI"
+msgstr "Filtrage de mise à l'échelle txr2img du GUI"
#: src/settings_translation_file.cpp
msgid "Global callbacks"
@@ -3524,33 +3760,32 @@ msgstr "Rappels globaux"
msgid ""
"Global map generation attributes.\n"
"In Mapgen v6 the 'decorations' flag controls all decorations except trees\n"
-"and junglegrass, in all other mapgens this flag controls all decorations."
+"and jungle grass, in all other mapgens this flag controls all decorations."
msgstr ""
"Attributs de génération de terrain globaux.\n"
-"Dans le générateur de terrain v6, le signal « décorations » contrôle toutes "
-"les décorations sauf les arbres\n"
-"et l’herbe de la jungle, dans tous les autres générateurs de terrain, ce "
-"signal contrôle toutes les décorations."
+"Dans le générateur de terrain v6, le drapeau « décorations » contrôle toutes "
+"les décorations sauf les arbres et les herbes de la jungle, dans tous les "
+"autres générateurs de terrain, ce drapeau contrôle toutes les décorations."
#: src/settings_translation_file.cpp
msgid ""
"Gradient of light curve at maximum light level.\n"
"Controls the contrast of the highest light levels."
msgstr ""
-"Gradient de la courbe de lumière au niveau de lumière maximum. \n"
-"Contrôle le contraste de la lumière aux niveaux d'éclairage les plus élevés."
+"Gradient de la courbe de lumière au niveau de lumière maximale.\n"
+"Contrôle le contraste aux niveaux d'éclairage les plus élevés."
#: src/settings_translation_file.cpp
msgid ""
"Gradient of light curve at minimum light level.\n"
"Controls the contrast of the lowest light levels."
msgstr ""
-"Gradient de la courbe de lumière au niveau de lumière maximum. \n"
-"Contrôle le contraste de la lumière aux niveaux d'éclairage les plus bas."
+"Gradient de la courbe de lumière au niveau de lumière minimale.\n"
+"Contrôle le contraste aux niveaux d'éclairage les plus bas."
#: src/settings_translation_file.cpp
msgid "Graphics"
-msgstr "Options graphiques"
+msgstr "Graphiques"
#: src/settings_translation_file.cpp
msgid "Gravity"
@@ -3562,7 +3797,7 @@ msgstr "Niveau du sol"
#: src/settings_translation_file.cpp
msgid "Ground noise"
-msgstr "Bruit pour la boue"
+msgstr "Bruit au sol"
#: src/settings_translation_file.cpp
msgid "HTTP mods"
@@ -3570,11 +3805,11 @@ msgstr "Mods HTTP"
#: src/settings_translation_file.cpp
msgid "HUD scale factor"
-msgstr "Facteur mise à l'échelle du HUD"
+msgstr "Facteur de mise à l'échelle de l'interface"
#: src/settings_translation_file.cpp
msgid "HUD toggle key"
-msgstr "HUD"
+msgstr "Touche HUD"
#: src/settings_translation_file.cpp
msgid ""
@@ -3583,11 +3818,11 @@ msgid ""
"- log: mimic and log backtrace of deprecated call (default).\n"
"- error: abort on usage of deprecated call (suggested for mod developers)."
msgstr ""
-"Traitement des appels d'API Lua obsolètes :\n"
-"- aucun : N'enregistre pas les appels obsolètes\n"
-"- log : imite et enregistre la trace des appels obsolètes (par défaut en "
+"Traitement des appels d'API Lua obsolètes :\n"
+"– aucun : n'enregistre pas les appels obsolètes\n"
+"– journal : imite et enregistre la trace des appels obsolètes (par défaut en "
"mode debug).\n"
-"- erreur : s'interrompt lors d'un appel obsolète (recommandé pour les "
+"– erreur : s'interrompt lors d'un appel obsolète (recommandé pour les "
"développeurs de mods)."
#: src/settings_translation_file.cpp
@@ -3598,11 +3833,11 @@ msgid ""
"call).\n"
"* Instrument the sampler being used to update the statistics."
msgstr ""
-"Auto-instrumentaliser le profileur :\n"
-"* Instrumentalise une fonction vide.\n"
-"La surcharge sera évaluée. (l'auto-instrumentalisation ajoute 1 appel de "
+"Auto-instrumentaliser le profileur :\n"
+"* Instrumentalise une fonction vide.\n"
+"La surcharge est évaluée (l'auto-instrumentalisation ajoute 1 appel de "
"fonction à chaque fois).\n"
-"* Instrumentalise l’échantillonneur utilisé pour mettre à jour les "
+"* Instrumentalise l’échantillonneur utilisé pour mettre à jour les "
"statistiques."
#: src/settings_translation_file.cpp
@@ -3614,8 +3849,11 @@ msgid "Heat noise"
msgstr "Bruit de chaleur"
#: src/settings_translation_file.cpp
-msgid "Height component of the initial window size."
-msgstr "Composant de hauteur de la taille initiale de la fenêtre."
+msgid ""
+"Height component of the initial window size. Ignored in fullscreen mode."
+msgstr ""
+"Composant de hauteur de la taille initiale de la fenêtre. Ignoré en mode "
+"plein écran."
#: src/settings_translation_file.cpp
msgid "Height noise"
@@ -3626,10 +3864,6 @@ msgid "Height select noise"
msgstr "Bruit de sélection de hauteur"
#: src/settings_translation_file.cpp
-msgid "High-precision FPU"
-msgstr "FPU de haute précision"
-
-#: src/settings_translation_file.cpp
msgid "Hill steepness"
msgstr "Pente des collines"
@@ -3639,19 +3873,19 @@ msgstr "Seuil des collines"
#: src/settings_translation_file.cpp
msgid "Hilliness1 noise"
-msgstr "Bruit de collines1"
+msgstr "Bruit de collines nº 1"
#: src/settings_translation_file.cpp
msgid "Hilliness2 noise"
-msgstr "Bruit de collines2"
+msgstr "Bruit de collines nº 2"
#: src/settings_translation_file.cpp
msgid "Hilliness3 noise"
-msgstr "Bruit de collines3"
+msgstr "Bruit de collines nº 3"
#: src/settings_translation_file.cpp
msgid "Hilliness4 noise"
-msgstr "Bruit de collines4"
+msgstr "Bruit de collines nº 4"
#: src/settings_translation_file.cpp
msgid "Homepage of server, to be displayed in the serverlist."
@@ -3662,24 +3896,24 @@ msgid ""
"Horizontal acceleration in air when jumping or falling,\n"
"in nodes per second per second."
msgstr ""
-"Accélération horizontale dans l'air en sautant ou en tombant,\n"
-"en nœuds par seconde par seconde."
+"Accélération horizontale dans l'air en sautant ou en tombant, en nœuds par "
+"seconde par seconde."
#: src/settings_translation_file.cpp
msgid ""
"Horizontal and vertical acceleration in fast mode,\n"
"in nodes per second per second."
msgstr ""
-"Accélération horizontale et verticale en mode rapide,\n"
-"en nœuds par seconde par seconde."
+"Accélération horizontale et verticale en mode rapide, en nœuds par seconde "
+"par seconde."
#: src/settings_translation_file.cpp
msgid ""
"Horizontal and vertical acceleration on ground or when climbing,\n"
"in nodes per second per second."
msgstr ""
-"Accélération horizontale et verticale au sol ou en montée,\n"
-"en blocs par seconde."
+"Accélération horizontale et verticale au sol ou en montée, en nœuds par "
+"seconde."
#: src/settings_translation_file.cpp
msgid "Hotbar next key"
@@ -3691,131 +3925,131 @@ msgstr "Touche précédent sur la barre d'actions"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 1 key"
-msgstr "Touche de l'emplacement 1 de la barre d'action"
+msgstr "Touche emplacement 1 de la barre d'action"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 10 key"
-msgstr "Touche de l'emplacement 10 de la barre d'action"
+msgstr "Touche emplacement 10 de la barre d'action"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 11 key"
-msgstr "Touche de l'emplacement 11 de la barre d'action"
+msgstr "Touche emplacement 11 de la barre d'action"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 12 key"
-msgstr "Touche de l'emplacement 12 de la barre d'action"
+msgstr "Touche emplacement 12 de la barre d'action"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 13 key"
-msgstr "Touche de l'emplacement 13 de la barre d'action"
+msgstr "Touche emplacement 13 de la barre d'action"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 14 key"
-msgstr "Touche de l'emplacement 14 de la barre d'action"
+msgstr "Touche emplacement 14 de la barre d'action"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 15 key"
-msgstr "Touche de l'emplacement 15 de la barre d'action"
+msgstr "Touche emplacement 15 de la barre d'action"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 16 key"
-msgstr "Touche de l'emplacement 16 de la barre d'action"
+msgstr "Touche emplacement 16 de la barre d'action"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 17 key"
-msgstr "Touche de l'emplacement 17 de la barre d'action"
+msgstr "Touche emplacement 17 de la barre d'action"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 18 key"
-msgstr "Touche de l'emplacement 18 de la barre d'action"
+msgstr "Touche emplacement 18 de la barre d'action"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 19 key"
-msgstr "Touche de l'emplacement 19 de la barre d'action"
+msgstr "Touche emplacement 19 de la barre d'action"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 2 key"
-msgstr "Touche de l'emplacement 2 de la barre d'action"
+msgstr "Touche emplacement 2 de la barre d'action"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 20 key"
-msgstr "Touche de l'emplacement 20 de la barre d'action"
+msgstr "Touche emplacement 20 de la barre d'action"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 21 key"
-msgstr "Touche de l'emplacement 21 de la barre d'action"
+msgstr "Touche emplacement 21 de la barre d'action"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 22 key"
-msgstr "Touche de l'emplacement 22 de la barre d'action"
+msgstr "Touche emplacement 22 de la barre d'action"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 23 key"
-msgstr "Touche de l'emplacement 23 de la barre d'action"
+msgstr "Touche emplacement 23 de la barre d'action"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 24 key"
-msgstr "Touche de l'emplacement 24 de la barre d'action"
+msgstr "Touche emplacement 24 de la barre d'action"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 25 key"
-msgstr "Touche de l'emplacement 25 de la barre d'action"
+msgstr "Touche emplacement 25 de la barre d'action"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 26 key"
-msgstr "Touche de l'emplacement 26 de la barre d'action"
+msgstr "Touche emplacement 26 de la barre d'action"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 27 key"
-msgstr "Touche de l'emplacement 27 de la barre d'action"
+msgstr "Touche emplacement 27 de la barre d'action"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 28 key"
-msgstr "Touche de l'emplacement 28 de la barre d'action"
+msgstr "Touche emplacement 28 de la barre d'action"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 29 key"
-msgstr "Touche de l'emplacement 29 de la barre d'action"
+msgstr "Touche emplacement 29 de la barre d'action"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 3 key"
-msgstr "Touche de l'emplacement 3 de la barre d'action"
+msgstr "Touche emplacement 3 de la barre d'action"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 30 key"
-msgstr "Touche de l'emplacement 30 de la barre d'action"
+msgstr "Touche emplacement 30 de la barre d'action"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 31 key"
-msgstr "Touche de l'emplacement 31 de la barre d'action"
+msgstr "Touche emplacement 31 de la barre d'action"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 32 key"
-msgstr "Touche de l'emplacement 32 de la barre d'action"
+msgstr "Touche emplacement 32 de la barre d'action"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 4 key"
-msgstr "Touche de l'emplacement 4 de la barre d'action"
+msgstr "Touche emplacement 4 de la barre d'action"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 5 key"
-msgstr "Touche de l'emplacement 5 de la barre d'action"
+msgstr "Touche emplacement 5 de la barre d'action"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 6 key"
-msgstr "Touche de l'emplacement 6 de la barre d'action"
+msgstr "Touche emplacement 6 de la barre d'action"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 7 key"
-msgstr "Touche de l'emplacement 7 de la barre d'action"
+msgstr "Touche emplacement 7 de la barre d'action"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 8 key"
-msgstr "Touche de l'emplacement 8 de la barre d'action"
+msgstr "Touche emplacement 8 de la barre d'action"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 9 key"
-msgstr "Touche de l'emplacement 9 de la barre d'action"
+msgstr "Touche emplacement 9 de la barre d'action"
#: src/settings_translation_file.cpp
msgid "How deep to make rivers."
@@ -3827,19 +4061,19 @@ msgid ""
"If negative, liquid waves will move backwards.\n"
"Requires waving liquids to be enabled."
msgstr ""
-"La vitesse des vagues augmente avec cette valeur.\n"
-"Une valeur négative inverse leur mouvement.\n"
-"Nécessite que l'ondulation des liquides soit active."
+"Vitesse à laquelle les ondes de liquides se déplacent. Plus élevé = plus "
+"rapide.\n"
+"Si elle est négative, les ondes de liquides se déplaceront en arrière.\n"
+"Nécessite les liquides ondulants pour être activé."
#: 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 ""
-"Délais maximum jusqu'où le serveur va attendre avant de purger les mapblocks "
-"inactifs.\n"
-"Une valeur plus grande est plus confortable, mais utilise davantage de "
-"mémoire."
+"Combien de temps le serveur attendra avant de décharger les blocs de carte "
+"inutilisés.\n"
+"Une valeur plus élevée est plus fluide, mais utilise plus de RAM."
#: src/settings_translation_file.cpp
msgid "How wide to make rivers."
@@ -3847,15 +4081,15 @@ msgstr "Quelle largeur doivent avoir les rivières."
#: src/settings_translation_file.cpp
msgid "Humidity blend noise"
-msgstr "Bruit de fusion d'humidité"
+msgstr "Bruit de mélange de l'humidité"
#: src/settings_translation_file.cpp
msgid "Humidity noise"
-msgstr "Bruit d'humidité"
+msgstr "Bruit de l'humidité"
#: src/settings_translation_file.cpp
msgid "Humidity variation for biomes."
-msgstr "Variation d'humidité pour les biomes."
+msgstr "Variation de l'humidité pour les biomes."
#: src/settings_translation_file.cpp
msgid "IPv6"
@@ -3870,18 +4104,17 @@ msgid ""
"If FPS would go higher than this, limit it by sleeping\n"
"to not waste CPU power for no benefit."
msgstr ""
-"Si le nombre d'images par seconde (FPS) veut aller au-delà de cette valeur, "
-"il est limité\n"
-"pour ne pas gaspiller inutilement les ressources du processeur."
+"Si les FPS (nombre d'images par seconde) sont supérieurs à cette valeur, "
+"limitez-les en les mettant en sommeil pour ne pas gaspiller la puissance du "
+"CPU sans aucun bénéfice."
#: src/settings_translation_file.cpp
msgid ""
-"If disabled, \"special\" key is used to fly fast if both fly and fast mode "
-"are\n"
+"If disabled, \"Aux1\" key is used to fly fast if both fly and fast mode are\n"
"enabled."
msgstr ""
-"Si désactivé, la touche « spécial » est utilisée pour voler vite si les "
-"modes vol et rapide sont activés."
+"Si désactivé, la touche « Aux1 » est utilisée pour voler vite si les modes "
+"vol et rapide sont activés."
#: src/settings_translation_file.cpp
msgid ""
@@ -3891,11 +4124,11 @@ msgid ""
"invisible\n"
"so that the utility of noclip mode is reduced."
msgstr ""
-"Si activé, le serveur n'enverra pas les blocs qui ne sont pas visibles par\n"
-"le client en fonction de sa position. Cela peut réduire de 50 % à 80 %\n"
-"le nombre de blocs envoyés. Le client ne pourra plus voir ces blocs à moins\n"
-"de se déplacer, ce qui réduit l'efficacité des tricheries du style « noclip "
-"»."
+"Si activé, le serveur effectuera la détermination des blocs de la carte "
+"invisibles selon la position des yeux du joueur.\n"
+"Cela peut réduire le nombre de blocs envoyés au client de 50 à 80 %.\n"
+"Le client ne recevra plus la plupart de blocs invisibles, de sorte que "
+"l'utilité du mode « noclip » est réduite."
#: src/settings_translation_file.cpp
msgid ""
@@ -3905,16 +4138,16 @@ msgid ""
msgstr ""
"Si activé avec le mode vol, le joueur sera capable de traverser les blocs "
"solides en volant.\n"
-"Nécessite le privilège « noclip » sur le serveur."
+"Nécessite le privilège « noclip » sur le serveur."
#: src/settings_translation_file.cpp
msgid ""
-"If enabled, \"special\" key instead of \"sneak\" key is used for climbing "
-"down and\n"
+"If enabled, \"Aux1\" key instead of \"Sneak\" key is used for climbing down "
+"and\n"
"descending."
msgstr ""
-"Si activé, la touche « spécial » est utilisée à la place de la touche « s’"
-"accroupir » pour monter ou descendre."
+"Si activé, la touche « Aux1 » est utilisée à la place de la touche « Marcher "
+"lentement » pour monter ou descendre."
#: src/settings_translation_file.cpp
msgid ""
@@ -3935,7 +4168,7 @@ msgid ""
msgstr ""
"Si activé, les données invalides du monde ne causeront pas l'interruption du "
"serveur.\n"
-"Activer seulement si vous sachez ce que vous faites."
+"Activer cette option seulement si vous savez ce que vous faites."
#: src/settings_translation_file.cpp
msgid ""
@@ -3958,7 +4191,7 @@ msgid ""
"This is helpful when working with nodeboxes in small areas."
msgstr ""
"Si activé, vous pourrez placer des blocs à la position où vous êtes.\n"
-"C'est utile quand vous travaillez avec des modèles nodebox dans des zones "
+"C'est utile pour travailler avec des modèles « nodebox » dans des zones "
"exiguës."
#: src/settings_translation_file.cpp
@@ -3967,8 +4200,17 @@ msgid ""
"limited\n"
"to this distance from the player to the node."
msgstr ""
-"Si la restriction CSM pour la distance des blocs est activé, les appels "
-"get_node sont limités à la distance entre le joueur et le bloc."
+"Si la restriction « CSM » pour la distance des blocs est activée, les appels "
+"« get_node » sont limités à la distance entre le joueur et le bloc."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"If the execution of a chat command takes longer than this specified time in\n"
+"seconds, add the time information to the chat command message"
+msgstr ""
+"Si l'exécution d'une commande de tchat prend plus de temps que cette durée "
+"spécifiée en secondes, ajoute les informations de temps au message de la "
+"commande de tchat."
#: src/settings_translation_file.cpp
msgid ""
@@ -3977,11 +4219,10 @@ msgid ""
"deleting an older debug.txt.1 if it exists.\n"
"debug.txt is only moved if this setting is positive."
msgstr ""
-"Si la taille du fichier debug.txt dépasse le nombre de mégaoctets spécifié "
-"dans\n"
-"ce paramètre une fois ouvert, le fisher est déplacé vers debug.txt.1 et\n"
-"supprimera un ancien debug.txt.1 s'il existe.\n"
-"debug.txt n'est déplacé que si ce paramètre est positif."
+"Si la taille du fichier « debug.txt » dépasse le nombre de mégaoctets "
+"spécifié par ce paramètre ; une fois ouvert, le fichier est déplacé vers "
+"« debug.txt.1 » et supprime l'ancien « debug.txt.1 » s'il existe.\n"
+"« debug.tx t» est déplacé seulement si ce paramètre est activé."
#: src/settings_translation_file.cpp
msgid "If this is set, players will always (re)spawn at the given position."
@@ -3997,23 +4238,26 @@ msgstr "Dans le jeu"
#: src/settings_translation_file.cpp
msgid "In-game chat console background alpha (opaqueness, between 0 and 255)."
-msgstr "Opacité de fond de la console du jeu (entre 0 et 255)."
+msgstr ""
+"Opacité de l'arrière-plan de la console de tchat dans le jeu (entre 0 et "
+"255)."
#: src/settings_translation_file.cpp
msgid "In-game chat console background color (R,G,B)."
-msgstr "Couleur de fond de la console du jeu (R,G,B)."
+msgstr "Couleur de l'arrière-plan de la console de tchat dans le jeu (R,V,B)."
#: src/settings_translation_file.cpp
msgid "In-game chat console height, between 0.1 (10%) and 1.0 (100%)."
-msgstr "Hauteur de la console de tchat du jeu, entre 0.1 (10 %) et 1.0 (100 %)."
+msgstr ""
+"Hauteur de la console de tchat dans le jeu, entre 0,1 (10 %) et 1,0 (100 %)."
#: src/settings_translation_file.cpp
msgid "Inc. volume key"
-msgstr "Touche d'augmentation de volume"
+msgstr "Touche augmenter le volume"
#: src/settings_translation_file.cpp
msgid "Initial vertical speed when jumping, in nodes per second."
-msgstr "Vitesse verticale initiale lors du saut, en blocs par seconde."
+msgstr "Vitesse verticale initiale lors du saut, en nœuds par seconde."
#: src/settings_translation_file.cpp
msgid ""
@@ -4025,7 +4269,7 @@ msgstr ""
"noyau"
#: src/settings_translation_file.cpp
-msgid "Instrument chatcommands on registration."
+msgid "Instrument chat commands on registration."
msgstr "Instrument d'enregistrement des commandes de tchat."
#: src/settings_translation_file.cpp
@@ -4061,8 +4305,8 @@ msgstr "Instrumentalisation"
#: src/settings_translation_file.cpp
msgid "Interval of saving important changes in the world, stated in seconds."
msgstr ""
-"Intervalle de sauvegarde des changements importants dans le monde, établie "
-"en secondes."
+"Intervalle de sauvegarde des changements importants dans le monde, établi en "
+"secondes."
#: src/settings_translation_file.cpp
msgid "Interval of sending time of day to clients."
@@ -4074,7 +4318,7 @@ msgstr "Animation des items d'inventaire"
#: src/settings_translation_file.cpp
msgid "Inventory key"
-msgstr "Touche d'inventaire"
+msgstr "Touche inventaire"
#: src/settings_translation_file.cpp
msgid "Invert mouse"
@@ -4086,15 +4330,15 @@ msgstr "Inverser les mouvements verticaux de la souris."
#: src/settings_translation_file.cpp
msgid "Italic font path"
-msgstr "Chemin de la police Italique"
+msgstr "Chemin de la police italique"
#: src/settings_translation_file.cpp
msgid "Italic monospace font path"
-msgstr "Chemin de la police Italique Monospace"
+msgstr "Chemin de la police monospace en italique"
#: src/settings_translation_file.cpp
msgid "Item entity TTL"
-msgstr "Durée de vie des items abandonnés"
+msgstr "Temps de vie des entités objets"
#: src/settings_translation_file.cpp
msgid "Iterations"
@@ -4108,8 +4352,8 @@ msgid ""
"At iterations = 20 this mapgen has a similar load to mapgen V7."
msgstr ""
"Itérations de la fonction récursive.\n"
-"L'augmenter augmente la quantité de détails, mais également\n"
-"la charge du processeur.\n"
+"L'augmenter, augmente la quantité de détails, mais également la charge du "
+"processeur.\n"
"Quand itérations = 20 cette méthode de génération est aussi gourmande en "
"ressources que la méthode v7."
@@ -4122,7 +4366,7 @@ msgid "Joystick button repetition interval"
msgstr "Intervalle de répétition des boutons de la manette"
#: src/settings_translation_file.cpp
-msgid "Joystick deadzone"
+msgid "Joystick dead zone"
msgstr "Zone morte de la manette"
#: src/settings_translation_file.cpp
@@ -4201,7 +4445,7 @@ msgstr "Julia z"
#: src/settings_translation_file.cpp
msgid "Jump key"
-msgstr "Sauter"
+msgstr "Touche sauter"
#: src/settings_translation_file.cpp
msgid "Jumping speed"
@@ -4213,7 +4457,7 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
-"Touche pour diminuer le champ de vision.\n"
+"Touche pour réduire la distance d'affichage.\n"
"Voir http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
@@ -4223,7 +4467,7 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
-"Touche pour diminuer le volume.\n"
+"Touche pour réduire le volume.\n"
"Voir http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
@@ -4243,7 +4487,7 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
-"Touche pour jeter l'objet sélectionné.\n"
+"Touche pour lâcher l'objet sélectionné.\n"
"Voir http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
@@ -4253,7 +4497,7 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
-"Touche pour accroitre le champ de vision.\n"
+"Touche pour augmenter la distance d'affichage.\n"
"Voir http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
@@ -4294,8 +4538,8 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
-"Touche pour faire reculer le joueur.\n"
-"Désactive également l’avance auto., lorsqu’elle est active.\n"
+"Touche pour déplacer le joueurs en arrière.\n"
+"Désactive également l’avance automatique, lorsqu’elle est active.\n"
"Voir http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
@@ -4345,7 +4589,7 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
-"Touche pour ouvrir la fenêtre du tchat pour entrer des commandes.\n"
+"Touche pour ouvrir la fenêtre de tchat pour entrer des commandes.\n"
"Voir http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
@@ -4355,7 +4599,7 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
-"Touche pour ouvrir la fenêtre du tchat pour entrer des commandes locales.\n"
+"Touche pour ouvrir la fenêtre de tchat pour entrer des commandes locales.\n"
"Voir http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
@@ -4395,7 +4639,7 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
-"Touche pour sélectionner le prochain item dans la barre d'action.\n"
+"Touche pour sélectionner la 11ᵉ case de la barre d'action.\n"
"Voir http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
@@ -4535,7 +4779,7 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
-"Touche pour sélectionner la 30ᵉ case de la barre d'action.\n"
+"Touche pour sélectionner la 25ᵉ case de la barre d'action.\n"
"Voir http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
@@ -4655,7 +4899,7 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
-"Touche pour sélectionner le prochain item dans la barre d'action.\n"
+"Touche pour sélectionner l'objet suivant dans la barre d'action.\n"
"Voir http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
@@ -4675,7 +4919,7 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
-"Touche pour sélectionner l'item précédent dans la barre d'action.\n"
+"Touche pour sélectionner l'objet précédent dans la barre d'action.\n"
"Voir http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
@@ -4725,7 +4969,7 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
-"Touche pour sélectionner le prochain item dans la barre d'action.\n"
+"Touche pour sélectionner la troisième case de la barre d'action.\n"
"Voir http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
@@ -4737,9 +4981,9 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
-"Touche pour se faufiler.\n"
-"Egalement utilisée pour descendre et plonger dans l'eau si aux1_descends est "
-"désactivé.\n"
+"Touche pour se déplacer lentement.\n"
+"Également utilisée pour descendre et plonger dans l'eau si « aux1_descends » "
+"est désactivé.\n"
"Voir http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
@@ -4749,7 +4993,7 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
-"Touche pour changer de vue entre la 1ère et 3ème personne.\n"
+"Touche pour changer de vue entre la première et troisième personne.\n"
"Voir http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
@@ -4769,7 +5013,7 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
-"Touche d’exécution automatique.\n"
+"Touche d'avance automatique.\n"
"Voir http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
@@ -4829,7 +5073,7 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
-"Toucher pour passer en mode de direction libre.\n"
+"Touche pour passer en mode de direction libre.\n"
"Voir http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
@@ -4880,7 +5124,7 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
-"Touche pour afficher/masquer le HUD ( Affichage tête haute).\n"
+"Touche pour afficher/masquer le HUD (affichage tête haute).\n"
"Voir http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
@@ -4900,8 +5144,7 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
-"Touche pour afficher/cacher la zone de profilage. Utilisé pour le "
-"développement.\n"
+"Touche pour afficher/cacher le profileur. Utilisé pour le développement.\n"
"Voir http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
@@ -4921,7 +5164,7 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
-"Touche pour zoomer (lorsque c'est possible).\n"
+"Touche pour zoomer si possible.\n"
"Voir http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
@@ -4944,15 +5187,15 @@ msgstr "Langue"
#: src/settings_translation_file.cpp
msgid "Large cave depth"
-msgstr "Profondeur des grandes caves"
+msgstr "Profondeur de grandes grottes"
#: src/settings_translation_file.cpp
msgid "Large cave maximum number"
-msgstr "Grand nombre de grottes maximum"
+msgstr "Nombre maximal de grandes grottes"
#: src/settings_translation_file.cpp
msgid "Large cave minimum number"
-msgstr "Nombre minimum de grandes grottes"
+msgstr "Nombre minimal de grandes grottes"
#: src/settings_translation_file.cpp
msgid "Large cave proportion flooded"
@@ -4960,11 +5203,11 @@ msgstr "Proportion de grandes grottes inondées"
#: src/settings_translation_file.cpp
msgid "Large chat console key"
-msgstr "Touche de grande console de tchat"
+msgstr "Touche grande console de tchat"
#: src/settings_translation_file.cpp
msgid "Leaves style"
-msgstr "Apparence des feuilles d'arbres"
+msgstr "Apparence des feuilles"
#: src/settings_translation_file.cpp
msgid ""
@@ -4973,11 +5216,11 @@ msgid ""
"- Simple: only outer faces, if defined special_tiles are used\n"
"- Opaque: disable transparency"
msgstr ""
-"Apparence des feuilles d’arbres :\n"
-"— Détaillée : toutes les faces sont visibles\n"
-"— Simple : seulement les faces externes, si des « special_tiles » sont "
+"Apparence des feuilles d’arbres :\n"
+"– Détaillée : toutes les faces sont visibles\n"
+"– Simple : seulement les faces externes, si des « special_tiles » sont "
"définies\n"
-"— Opaque : désactive la transparence"
+"– Opaque : désactive la transparence"
#: src/settings_translation_file.cpp
msgid "Left key"
@@ -4995,20 +5238,21 @@ msgid ""
"Length of liquid waves.\n"
"Requires waving liquids to be enabled."
msgstr ""
-"Longueur des vagues de liquides.\n"
-"Nécessite que les liquides ondulatoires soit activé."
+"Longueur des ondes de liquides.\n"
+"Nécessite les liquides ondulants pour être activé."
#: src/settings_translation_file.cpp
msgid "Length of time between Active Block Modifier (ABM) execution cycles"
-msgstr "Durée entre les cycles d’exécution du Modificateur de bloc actif (ABM)"
+msgstr ""
+"Durée entre les cycles d’exécution du Modificateur de bloc actif (« ABM »)"
#: src/settings_translation_file.cpp
msgid "Length of time between NodeTimer execution cycles"
-msgstr "Durée entre les cycles d’exécution NodeTimer"
+msgstr "Durée entre les cycles d’exécution « NodeTimer »"
#: src/settings_translation_file.cpp
msgid "Length of time between active block management cycles"
-msgstr "Temps entre les cycles de gestion des blocs actifs"
+msgstr "Durée entre les cycles de gestion des blocs actifs"
#: src/settings_translation_file.cpp
msgid ""
@@ -5021,14 +5265,14 @@ msgid ""
"- info\n"
"- verbose"
msgstr ""
-"Niveau de détails des infos de débogage écrits dans debug.txt :\n"
-"- <rien> (pas d'infos)\n"
-"- aucun (messages sans niveau)\n"
-"- erreur\n"
-"- avertissement\n"
-"- action\n"
-"- info\n"
-"- prolixe"
+"Niveau de journalisation à écrire dans « debug.txt » :\n"
+"– < rien > (pas de journalisation)\n"
+"– aucun (messages sans niveau)\n"
+"– erreur\n"
+"– avertissement\n"
+"– action\n"
+"– info\n"
+"– prolixe"
#: src/settings_translation_file.cpp
msgid "Light curve boost"
@@ -5040,11 +5284,11 @@ msgstr "Centre d'amplification de la courbe de lumière"
#: src/settings_translation_file.cpp
msgid "Light curve boost spread"
-msgstr "Étalement du boost de la courbe de lumière"
+msgstr "Étalement de l'amplification de la courbe de lumière"
#: src/settings_translation_file.cpp
msgid "Light curve gamma"
-msgstr "Courbe de lumière gamma"
+msgstr "Gamma de la courbe de lumière"
#: src/settings_translation_file.cpp
msgid "Light curve high gradient"
@@ -5060,9 +5304,10 @@ msgid ""
"Only mapchunks completely within the mapgen limit are generated.\n"
"Value is stored per-world."
msgstr ""
-"Limite du génération de carte, en nœuds, dans les 6 directions à partir de "
+"Limite du générateur de terrain, en nœuds, dans les 6 directions à partir de "
"(0,0,0).\n"
-"Seules les tranches totalement comprises dans cette limite sont générées.\n"
+"Seules les tranches de la carte totalement comprises dans cette limite sont "
+"générées.\n"
"Valeur différente pour chaque monde."
#: src/settings_translation_file.cpp
@@ -5073,10 +5318,10 @@ msgid ""
"- Downloads performed by main menu (e.g. mod manager).\n"
"Only has an effect if compiled with cURL."
msgstr ""
-"Nombre limite de requête HTTP en parallèle. Affecte :\n"
-"- L'obtention de média si le serveur utilise l'option remote_media.\n"
-"- Le téléchargement de la liste des serveurs et l'annonce du serveur.\n"
-"- Les téléchargements effectués par le menu (ex. : gestionnaire de mods).\n"
+"Nombre limite de requête HTTP en parallèle. Affecte :\n"
+"– L'obtention de média si le serveur utilise le paramètre « remote_media ».\n"
+"– Le téléchargement de la liste des serveurs et l'annonce du serveur.\n"
+"– Les téléchargements effectués par le menu (ex. : gestionnaire de mods).\n"
"Prend seulement effet si Minetest est compilé avec cURL."
#: src/settings_translation_file.cpp
@@ -5109,7 +5354,7 @@ msgstr "Intervalle de mise à jour des liquides"
#: src/settings_translation_file.cpp
msgid "Load the game profiler"
-msgstr "Charger le profil de jeu"
+msgstr "Charger le profileur du jeu"
#: src/settings_translation_file.cpp
msgid ""
@@ -5117,8 +5362,8 @@ msgid ""
"Provides a /profiler command to access the compiled profile.\n"
"Useful for mod developers and server operators."
msgstr ""
-"Charge le profil du jeu pour collecter des données de profil du jeu.\n"
-"Fournit une commande /profiler pour accéder au profil compilé.\n"
+"Charge le profileur du jeu pour collecter des données de profilage du jeu.\n"
+"Fournit une commande « /profiler » pour accéder au profil compilé.\n"
"Utile pour les développeurs de mod et les opérateurs de serveurs."
#: src/settings_translation_file.cpp
@@ -5131,7 +5376,7 @@ msgstr "Limite basse Y des donjons."
#: src/settings_translation_file.cpp
msgid "Lower Y limit of floatlands."
-msgstr "Borne inférieure Y des massifs volants."
+msgstr "Limite basse Y des terrains flottants."
#: src/settings_translation_file.cpp
msgid "Main menu script"
@@ -5141,14 +5386,8 @@ msgstr "Script du menu principal"
msgid ""
"Make fog and sky colors depend on daytime (dawn/sunset) and view direction."
msgstr ""
-"Rendre la couleur du brouillard et du ciel différents selon l'heure du jour ("
-"aube/crépuscule) et la direction du regard."
-
-#: src/settings_translation_file.cpp
-msgid "Makes DirectX work with LuaJIT. Disable if it causes troubles."
-msgstr ""
-"Rendre DirectX compatible avec LuaJIT. Désactiver si cela cause des "
-"problèmes."
+"Rendre la couleur du brouillard et du ciel différents selon l'heure du jour "
+"(aube/crépuscule) et la direction du regard."
#: src/settings_translation_file.cpp
msgid "Makes all liquids opaque"
@@ -5168,14 +5407,14 @@ msgstr "Répertoire de la carte du monde"
#: src/settings_translation_file.cpp
msgid "Map generation attributes specific to Mapgen Carpathian."
-msgstr "Attributs spécifiques au Mapgen Carpathian."
+msgstr "Attributs spécifiques au générateur de terrain carpatien."
#: src/settings_translation_file.cpp
msgid ""
"Map generation attributes specific to Mapgen Flat.\n"
"Occasional lakes and hills can be added to the flat world."
msgstr ""
-"Attributs de terrain spécifiques au générateur de monde plat.\n"
+"Attributs spécifiques au générateur de terrain plat.\n"
"Des lacs et des collines peuvent être occasionnellement ajoutés au monde "
"plat."
@@ -5185,9 +5424,9 @@ msgid ""
"'terrain' enables the generation of non-fractal terrain:\n"
"ocean, islands and underground."
msgstr ""
-"Attributs de terrain spécifiques au générateur de monde fractal.\n"
-"'terrain' active la création de terrain non fractal,\n"
-"c-à-d un océan, des îles et du souterrain."
+"Attributs spécifiques au générateur de terrain fractal.\n"
+"« terrain » active la création de terrains non fractals : océans, îles et "
+"souterrains."
#: src/settings_translation_file.cpp
msgid ""
@@ -5198,17 +5437,16 @@ msgid ""
"to become shallower and occasionally dry.\n"
"'altitude_dry': Reduces humidity with altitude."
msgstr ""
-"Attributs de génération du monde spécifiques au générateur Valleys.\n"
-"‹altitude_chill› : Réduit la chaleur avec l’altitude.\n"
-"‹humid_rivers› : Augmente l’humidité autour des rivières.\n"
-"‹vary_river_depth› : Si activé, une humidité basse et une forte chaleur "
-"rendent\n"
-"les rivières moins profondes et parfois asséchées.\n"
-"‹altitude_dry› : Réduit l’humidité avec l’altitude."
+"Attributs spécifiques au générateur de terrain vallées.\n"
+"« altitude_chill » : réduit la chaleur avec l’altitude.\n"
+"« humid_rivers » : augmente l’humidité autour des rivières.\n"
+"« vary_river_dept » : si activé, une humidité basse et une chaleur élevée "
+"rendent les rivières moins profondes et parfois sèches.\n"
+"« altitude_dry » : réduit l’humidité avec l’altitude."
#: src/settings_translation_file.cpp
msgid "Map generation attributes specific to Mapgen v5."
-msgstr "Attributs spécifiques au Mapgen v5."
+msgstr "Attributs spécifiques au générateur de terrain v5."
#: src/settings_translation_file.cpp
msgid ""
@@ -5217,10 +5455,10 @@ msgid ""
"When the 'snowbiomes' flag is enabled jungles are automatically enabled and\n"
"the 'jungles' flag is ignored."
msgstr ""
-"Attributs de génération du monde spécifiques au générateur v6.\n"
-"Le paramètre ‹snowbiomes› active le nouveau système à 5 biomes.\n"
-"Sous ce nouveau système, la création de jungles est automatique\n"
-"et le paramètre ‹jungles› est ignoré."
+"Attributs spécifiques au générateur de terrain v6.\n"
+"Le drapeau « snowbiomes » active le nouveau système à 5 biomes.\n"
+"Lorsque le drapeau « snowbiomes » est activé, les jungles sont "
+"automatiquement activées et le drapeau « jungles » est ignoré."
#: src/settings_translation_file.cpp
msgid ""
@@ -5229,42 +5467,47 @@ msgid ""
"'floatlands': Floating land masses in the atmosphere.\n"
"'caverns': Giant caves deep underground."
msgstr ""
-"Attributs spécifiques au Mapgen v7.\n"
-"- 'ridges', « crêtes » pour des rivières.\n"
-"- 'floatlands', « massifs volant » massifs de terres atmosphèrique.\n"
-"- 'caverns', « cavernes » pour des grottes immenses et profondes."
+"Attributs spécifiques au générateur de terrain v7.\n"
+"« montagnes » : montagnes.\n"
+"« crêtes » : rivières.\n"
+"« terrains flottants » : vaste terrain flottant dans l'atmosphère.\n"
+"« cavernes » : cavernes immenses souterraines profondes."
#: src/settings_translation_file.cpp
msgid "Map generation limit"
-msgstr "Limites de génération du terrain"
+msgstr "Limite de génération du terrain"
#: src/settings_translation_file.cpp
msgid "Map save interval"
msgstr "Intervalle de sauvegarde de la carte"
#: src/settings_translation_file.cpp
+msgid "Map shadows update frames"
+msgstr "Images de mise à jour des ombres de la carte"
+
+#: src/settings_translation_file.cpp
msgid "Mapblock limit"
-msgstr "Limite des mapblocks"
+msgstr "Limite des blocs de carte"
#: src/settings_translation_file.cpp
msgid "Mapblock mesh generation delay"
-msgstr "Délai de génération des maillages de MapBlocks"
+msgstr "Délai de génération des maillages de blocs de carte"
#: src/settings_translation_file.cpp
msgid "Mapblock mesh generator's MapBlock cache size in MB"
-msgstr "Taille du cache du générateur de maillage pour les MapBloc en Mo"
+msgstr "Taille du cache de blocs de carte en Mo du générateur de maillage"
#: src/settings_translation_file.cpp
msgid "Mapblock unload timeout"
-msgstr "Délais d'interruption du déchargement des mapblocks"
+msgstr "Délai d'interruption du déchargement de blocs de carte"
#: src/settings_translation_file.cpp
msgid "Mapgen Carpathian"
-msgstr "Générateur de terrain Carpatien"
+msgstr "Générateur de terrain carpatien"
#: src/settings_translation_file.cpp
msgid "Mapgen Carpathian specific flags"
-msgstr "Signaux spécifiques au générateur de terrain Carpatien"
+msgstr "Drapeaux spécifiques au générateur de terrain carpatien"
#: src/settings_translation_file.cpp
msgid "Mapgen Flat"
@@ -5272,31 +5515,31 @@ msgstr "Générateur de terrain plat"
#: src/settings_translation_file.cpp
msgid "Mapgen Flat specific flags"
-msgstr "Signaux spécifiques au générateur de terrain plat"
+msgstr "Drapeaux spécifiques au générateur de terrain plat"
#: src/settings_translation_file.cpp
msgid "Mapgen Fractal"
-msgstr "Générateur de terrain Fractal"
+msgstr "Générateur de terrain fractal"
#: src/settings_translation_file.cpp
msgid "Mapgen Fractal specific flags"
-msgstr "Drapeaux spécifiques au générateur Fractal"
+msgstr "Drapeaux spécifiques au générateur de terrain fractal"
#: src/settings_translation_file.cpp
msgid "Mapgen V5"
-msgstr "Générateur de terrain V5"
+msgstr "Générateur de terrain v5"
#: src/settings_translation_file.cpp
msgid "Mapgen V5 specific flags"
-msgstr "Drapeaux spécifiques au générateur v5"
+msgstr "Drapeaux spécifiques au générateur de terrain v5"
#: src/settings_translation_file.cpp
msgid "Mapgen V6"
-msgstr "Générateur de terrain V6"
+msgstr "Générateur de terrain v6"
#: src/settings_translation_file.cpp
msgid "Mapgen V6 specific flags"
-msgstr "Drapeaux spécifiques au générateur V6"
+msgstr "Drapeaux spécifiques au générateur de terrain v6"
#: src/settings_translation_file.cpp
msgid "Mapgen V7"
@@ -5304,31 +5547,31 @@ msgstr "Générateur de terrain v7"
#: src/settings_translation_file.cpp
msgid "Mapgen V7 specific flags"
-msgstr "Drapeaux spécifiques au générateur V7"
+msgstr "Drapeaux spécifiques au générateur de terrain v7"
#: src/settings_translation_file.cpp
msgid "Mapgen Valleys"
-msgstr "Générateur de terrain Vallées"
+msgstr "Générateur de terrain vallées"
#: src/settings_translation_file.cpp
msgid "Mapgen Valleys specific flags"
-msgstr "Signaux spécifiques au générateur de terrain Valleys"
+msgstr "Drapeaux spécifiques au générateur de terrain vallées"
#: src/settings_translation_file.cpp
msgid "Mapgen debug"
-msgstr "Débogage de la génération du terrain"
+msgstr "Débogage de la génération de terrain"
#: src/settings_translation_file.cpp
msgid "Mapgen name"
-msgstr "Nom du générateur de carte"
+msgstr "Nom du générateur de terrain"
#: src/settings_translation_file.cpp
msgid "Max block generate distance"
-msgstr "Distance maximale de génération des mapblocks"
+msgstr "Distance maximale de génération de blocs"
#: src/settings_translation_file.cpp
msgid "Max block send distance"
-msgstr "Distance maximale d'envoi des mapblocks"
+msgstr "Distance maximale d'envoi de blocs"
#: src/settings_translation_file.cpp
msgid "Max liquids processed per step."
@@ -5336,11 +5579,11 @@ msgstr "Maximum de liquides traités par étape de serveur."
#: src/settings_translation_file.cpp
msgid "Max. clearobjects extra blocks"
-msgstr "Maximum d'extra-mapblocks par clearobjects"
+msgstr "Blocs supplémentaires maximum de « clearobjects »"
#: src/settings_translation_file.cpp
msgid "Max. packets per iteration"
-msgstr "Paquets maximum par itération"
+msgstr "Paquets maximaux par itération"
#: src/settings_translation_file.cpp
msgid "Maximum FPS"
@@ -5353,8 +5596,12 @@ msgstr ""
"en pause."
#: src/settings_translation_file.cpp
+msgid "Maximum distance to render shadows."
+msgstr "Distance maximale pour le rendu des ombres."
+
+#: src/settings_translation_file.cpp
msgid "Maximum forceloaded blocks"
-msgstr "Mapblocks maximum chargés de force"
+msgstr "Blocs maximum chargés de force"
#: src/settings_translation_file.cpp
msgid "Maximum hotbar width"
@@ -5363,11 +5610,12 @@ msgstr "Largeur maximale de la barre d'inventaire"
#: src/settings_translation_file.cpp
msgid "Maximum limit of random number of large caves per mapchunk."
msgstr ""
-"Limite maximale pour le nombre aléatoire de grandes grottes par mapchunk."
+"Limite maximale du nombre aléatoire de grandes grottes par tranche de carte."
#: src/settings_translation_file.cpp
msgid "Maximum limit of random number of small caves per mapchunk."
-msgstr "Limite maximale du nombre aléatoire de petites grottes par mapchunk."
+msgstr ""
+"Limite maximale du nombre aléatoire de petites grottes par tranche de carte."
#: src/settings_translation_file.cpp
msgid ""
@@ -5384,29 +5632,32 @@ msgid ""
"max_total = ceil((#clients + max_users) * per_client / 4)"
msgstr ""
"Le nombre maximal de blocs qui sont envoyés simultanément par client.\n"
-"Le compte total maximum est calculé dynamiquement :\n"
-"max_total = ceil((nbre clients + max_users) * per_client / 4)"
+"Le compte total maximal est calculé dynamiquement :\n"
+"max_total = ceil((nbre clients + max_users) × per_client ÷ 4)"
#: src/settings_translation_file.cpp
msgid "Maximum number of blocks that can be queued for loading."
-msgstr "Nombre maximum de mapblocks qui peuvent être listés pour chargement."
+msgstr ""
+"Nombre maximal de blocs qui peuvent être mis en file d'attente pour "
+"chargement."
#: src/settings_translation_file.cpp
msgid ""
"Maximum number of blocks to be queued that are to be generated.\n"
"This limit is enforced per player."
msgstr ""
-"Nombre maximum de mapblocks à lister qui doivent être générés.\n"
-"Laisser ce champ vide pour un montant approprié défini automatiquement."
+"Nombre maximal de blocs à mettre en file d'attente qui doivent être "
+"générés.\n"
+"Cette limite est appliquée par joueur."
#: src/settings_translation_file.cpp
msgid ""
"Maximum number of blocks to be queued that are to be loaded from file.\n"
"This limit is enforced per player."
msgstr ""
-"Nombre maximum de mapblocks à lister qui doivent être générés depuis un "
-"fichier.\n"
-"Laisser ce champ vide pour un montant approprié défini automatiquement."
+"Nombre maximal de blocs à mettre en file d'attente qui doivent être chargés "
+"depuis un fichier.\n"
+"Cette limite est appliquée par joueur."
#: src/settings_translation_file.cpp
msgid ""
@@ -5414,20 +5665,20 @@ msgid ""
"be queued.\n"
"This should be lower than curl_parallel_limit."
msgstr ""
-"Nombre maximum de téléchargements simultanés. Les téléchargements dépassant "
+"Nombre maximal de téléchargements simultanés. Les téléchargements dépassant "
"cette limite seront mis en file d'attente.\n"
-"Ce nombre doit être inférieur à la limite de curl_parallel_limit."
+"Ce nombre doit être inférieur à la limite de « curl_parallel_limit »."
#: src/settings_translation_file.cpp
msgid "Maximum number of forceloaded mapblocks."
-msgstr "Nombre maximum de mapblocks chargés de force."
+msgstr "Nombre maximal de blocs de carte chargés de force."
#: 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 ""
-"Nombre maximum de mapblocks gardés dans la mémoire du client.\n"
+"Nombre maximal de blocs de carte pour le client à garder en mémoire.\n"
"Définir à -1 pour un montant illimité."
#: src/settings_translation_file.cpp
@@ -5436,11 +5687,9 @@ msgid ""
"try reducing it, but don't reduce it to a number below double of targeted\n"
"client number."
msgstr ""
-"Nombre maximum de paquets envoyés par étape d'envoi. Si vous avez une "
-"connexion lente,\n"
-"essayez de réduire cette valeur, mais réduisez pas cette valeur en-dessous "
-"du double du nombre\n"
-"de clients maximum sur le serveur."
+"Nombre maximal de paquets envoyés par étape d'envoi. Si vous avez une "
+"connexion lente, essayer de réduire cette valeur, mais ne pas réduire cette "
+"valeur en-dessous du double du nombre de clients maximum sur le serveur."
#: src/settings_translation_file.cpp
msgid "Maximum number of players that can be connected simultaneously."
@@ -5448,11 +5697,12 @@ msgstr "Nombre maximal de joueurs qui peuvent être connectés en même temps."
#: src/settings_translation_file.cpp
msgid "Maximum number of recent chat messages to show"
-msgstr "Nombre maximum de message récent à afficher"
+msgstr "Nombre maximal de message récent à afficher"
#: src/settings_translation_file.cpp
msgid "Maximum number of statically stored objects in a block."
-msgstr "Nombre maximum d'objets sauvegardés dans un mapblock (16^3 blocs)."
+msgstr ""
+"Nombre maximal d'objets sauvegardés dans un bloc de carte (16^3 blocs)."
#: src/settings_translation_file.cpp
msgid "Maximum objects per block"
@@ -5472,25 +5722,36 @@ msgstr "Nombre maximal de blocs simultanés envoyés par client"
#: src/settings_translation_file.cpp
msgid "Maximum size of the out chat queue"
-msgstr "Taille maximum de la file de sortie de message du tchat"
+msgstr "Taille maximale de la file de sortie de message du tchat"
#: src/settings_translation_file.cpp
msgid ""
"Maximum size of the out chat queue.\n"
"0 to disable queueing and -1 to make the queue size unlimited."
msgstr ""
-"Taille maximale de la file d’attente sortante de la discussion.\n"
-"0 pour désactiver la file d’attente et -1 pour rendre la taille infinie."
+"Taille maximale de la file de sortie de message du tchat.\n"
+"0 pour désactiver la file de sortie et -1 pour rendre la taille de la file "
+"de sortie illimitée."
#: src/settings_translation_file.cpp
-msgid "Maximum time in ms a file download (e.g. a mod download) may take."
+msgid ""
+"Maximum time a file download (e.g. a mod download) may take, stated in "
+"milliseconds."
msgstr ""
-"Délais maximaux de téléchargement d'un fichier (ex. : un mod), établi en "
-"millisecondes."
+"Durée maximale qu'un téléchargement de fichier (ex. : un téléchargement de "
+"mod) peut prendre, établie en millisecondes."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum time an interactive request (e.g. server list fetch) may take, "
+"stated in milliseconds."
+msgstr ""
+"Durée maximale qu'une requête interactive (ex. : récupération de la liste de "
+"serveurs) peut prendre, établie en millisecondes."
#: src/settings_translation_file.cpp
msgid "Maximum users"
-msgstr "Joueurs maximum"
+msgstr "Joueurs maximums"
#: src/settings_translation_file.cpp
msgid "Menus"
@@ -5498,7 +5759,7 @@ msgstr "Menus"
#: src/settings_translation_file.cpp
msgid "Mesh cache"
-msgstr "Mise en cache des meshes"
+msgstr "Mise en cache des maillages"
#: src/settings_translation_file.cpp
msgid "Message of the day"
@@ -5514,7 +5775,7 @@ msgstr "Méthodes utilisées pour l'éclairage des objets."
#: src/settings_translation_file.cpp
msgid "Minimal level of logging to be written to chat."
-msgstr "Verbosité minimale de journalisation à écrire dans le tchat."
+msgstr "Niveau minimal de journalisation à écrire dans le tchat."
#: src/settings_translation_file.cpp
msgid "Minimap"
@@ -5522,7 +5783,7 @@ msgstr "Mini-carte"
#: src/settings_translation_file.cpp
msgid "Minimap key"
-msgstr "Mini-carte"
+msgstr "Touche mini-carte"
#: src/settings_translation_file.cpp
msgid "Minimap scan height"
@@ -5530,15 +5791,17 @@ msgstr "Hauteur de balayage de la mini-carte"
#: src/settings_translation_file.cpp
msgid "Minimum limit of random number of large caves per mapchunk."
-msgstr "Minimum pour le nombre de grandes grottes par mapchunk tiré au hasard."
+msgstr ""
+"Limite minimale du nombre aléatoire de grandes grottes par tranche de carte."
#: src/settings_translation_file.cpp
msgid "Minimum limit of random number of small caves per mapchunk."
-msgstr "Minimum pour le nombre de petites grottes par mapchunk tiré au hasard."
+msgstr ""
+"Limite minimale du nombre aléatoire de petites grottes par tranche de carte."
#: src/settings_translation_file.cpp
msgid "Minimum texture size"
-msgstr "Taille minimum des textures"
+msgstr "Taille minimale des textures"
#: src/settings_translation_file.cpp
msgid "Mipmapping"
@@ -5549,16 +5812,20 @@ msgid "Mod channels"
msgstr "Canaux de mods"
#: src/settings_translation_file.cpp
-msgid "Modifies the size of the hudbar elements."
-msgstr "Modifie la taille des éléments de la barre d'action principale."
+msgid "Modifies the size of the HUD elements."
+msgstr "Modifie la taille des éléments de l'interface."
#: src/settings_translation_file.cpp
msgid "Monospace font path"
-msgstr "Chemin de la police Monospace"
+msgstr "Chemin de la police monospace"
#: src/settings_translation_file.cpp
msgid "Monospace font size"
-msgstr "Taille de la police Monospace"
+msgstr "Taille de la police monospace"
+
+#: src/settings_translation_file.cpp
+msgid "Monospace font size divisible by"
+msgstr "Taille de la police monospace divisible par"
#: src/settings_translation_file.cpp
msgid "Mountain height noise"
@@ -5566,7 +5833,7 @@ msgstr "Bruit de hauteur des montagnes"
#: src/settings_translation_file.cpp
msgid "Mountain noise"
-msgstr "Bruit pour les montagnes"
+msgstr "Bruit des montagnes"
#: src/settings_translation_file.cpp
msgid "Mountain variation noise"
@@ -5586,7 +5853,7 @@ msgstr "Facteur de sensibilité de la souris."
#: src/settings_translation_file.cpp
msgid "Mud noise"
-msgstr "Bruit pour la boue"
+msgstr "Bruit de boue"
#: src/settings_translation_file.cpp
msgid ""
@@ -5594,11 +5861,11 @@ msgid ""
"For example: 0 for no view bobbing; 1.0 for normal; 2.0 for double."
msgstr ""
"Facteur de mouvement de bras en tombant.\n"
-"Exemples : 0 = aucun mouvement, 1 = normal, 2 = double."
+"Exemples : 0 = aucun mouvement, 1 = normal, 2 = double."
#: src/settings_translation_file.cpp
msgid "Mute key"
-msgstr "Touche pour rendre le jeu muet"
+msgstr "Touche muet"
#: src/settings_translation_file.cpp
msgid "Mute sound"
@@ -5613,9 +5880,9 @@ msgid ""
msgstr ""
"Nom du générateur de terrain qui sera utilisé à la création d’un nouveau "
"monde.\n"
-"Cela sera perdu à la création d'un monde depuis le menu principal.\n"
-"Les générateurs actuellement très instables sont :\n"
-"- Les massifs volants du générateur v7 (option inactive par défaut)."
+"La création d'un monde depuis le menu principal le remplacera.\n"
+"Les générateurs de terrain actuellement très instables sont :\n"
+"– Les terrains flottants optionnels du générateur v7 (désactivé par défaut)."
#: src/settings_translation_file.cpp
msgid ""
@@ -5624,16 +5891,16 @@ msgid ""
"When starting from the main menu, this is overridden."
msgstr ""
"Nom du joueur.\n"
-"Lors qu'un serveur est lancé, les clients se connectant avec ce nom sont "
+"Lorsqu'un serveur est lancé, les clients se connectant avec ce nom sont "
"administrateurs.\n"
-"Lorsque vous démarrez à partir du menu principal, celui-ci est remplacé."
+"Lors du démarrage à partir du menu principal, celui-ci est remplacé."
#: src/settings_translation_file.cpp
msgid ""
"Name of the server, to be displayed when players join and in the serverlist."
msgstr ""
-"Nom du serveur, affiché sur liste des serveurs publics et lorsque les "
-"joueurs se connectent."
+"Nom du serveur affiché lorsque les joueurs se connectent et sur la liste des "
+"serveurs."
#: src/settings_translation_file.cpp
msgid "Near plane"
@@ -5661,7 +5928,7 @@ msgstr "Sans collision"
#: src/settings_translation_file.cpp
msgid "Noclip key"
-msgstr "Mode sans collision"
+msgstr "Touche mode sans collision"
#: src/settings_translation_file.cpp
msgid "Node highlighting"
@@ -5669,7 +5936,7 @@ msgstr "Surbrillance des blocs"
#: src/settings_translation_file.cpp
msgid "NodeTimer interval"
-msgstr "Intervalle de temps d'un nœud"
+msgstr "Intervalle « NodeTimer »"
#: src/settings_translation_file.cpp
msgid "Noises"
@@ -5692,31 +5959,31 @@ msgid ""
"processes, especially in singleplayer and/or when running Lua code in\n"
"'on_generated'. For many users the optimum setting may be '1'."
msgstr ""
-"Nombre de processus « emerge » à utiliser.\n"
-"Valeur 0 :\n"
-"- Sélection automatique. Le nombre de processus sera le\n"
-"- « nombre de processeurs - 2 », avec un minimum de 1.\n"
+"Nombre de processus « emerge » à utiliser.\n"
+"Valeur 0 :\n"
+"– Sélection automatique. Le nombre de processus sera le\n"
+"– « nombre de processeurs - 2 », avec un minimum de 1.\n"
"Toute autre valeur :\n"
-"- Spécifie le nombre de processus, avec un minimum de 1.\n"
-"ATTENTION : Augmenter le nombre de processus « emerge » accélère bien la\n"
+"– Spécifie le nombre de processus, avec un minimum de 1.\n"
+"ATTENTION : augmenter le nombre de processus « emerge » accélère bien la\n"
"création de terrain, mais cela peut nuire à la performance du jeu en "
"interférant\n"
-"avec d’autres processus, en particulier en mode solo et/ou lors de l’"
-"exécution de\n"
-"code Lua en mode « on_generated ». Pour beaucoup, le réglage optimal peut "
-"être « 1 »."
+"avec d’autres processus, en particulier en mode solo et/ou lors de "
+"l’exécution de\n"
+"code Lua en mode « on_generated ». Pour beaucoup, le réglage optimal peut "
+"être « 1 »."
#: 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"
+"This is a trade-off between SQLite transaction overhead and\n"
"memory consumption (4096=100MB, as a rule of thumb)."
msgstr ""
-"Nombre d'extra-mapblocks qui peuvent être chargés par /clearobjects dans "
-"l'immédiat.\n"
-"C'est un compromis entre un transfert SQLite plafonné et la consommation "
-"mémoire\n"
-"(4096 = 100 Mo, comme règle fondamentale)."
+"Nombre de blocs supplémentaires qui peuvent être chargés par « /"
+"clearobjects » à la fois.\n"
+"C'est un compromis entre la surcharge de transaction SQLite et la "
+"consommation mémoire\n"
+"(4096 = 100 Mo, comme règle générale)."
#: src/settings_translation_file.cpp
msgid "Online Content Repository"
@@ -5734,41 +6001,33 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Opaqueness (alpha) of the shadow behind the fallback font, between 0 and 255."
-msgstr ""
-"Opacité (alpha) de l'ombre derrière la police secondaire, entre 0 et 255."
-
-#: src/settings_translation_file.cpp
-msgid ""
"Open the pause menu when the window's focus is lost. Does not pause if a "
"formspec is\n"
"open."
msgstr ""
"Ouvre le menu pause lorsque la sélection de la fenêtre est perdue. Ne met "
-"pas en pause\n"
-"si un formspec est ouvert."
+"pas en pause si un formspec est ouvert."
+
+#: src/settings_translation_file.cpp
+msgid "Optional override for chat weblink color."
+msgstr "Remplacement optionnel pour la couleur du lien web du tchat."
#: src/settings_translation_file.cpp
msgid ""
-"Path of the fallback font.\n"
-"If “freetype†setting is enabled: Must be a TrueType font.\n"
-"If “freetype†setting is disabled: Must be a bitmap or XML vectors font.\n"
+"Path of the fallback font. Must be a TrueType font.\n"
"This font will be used for certain languages or if the default font is "
"unavailable."
msgstr ""
-"Chemin de la police de repli.\n"
-"Si le paramètre « freetype » est activé : doit être une police TrueType.\n"
-"Si le paramètre « freetype » est désactivé : doit être une police de "
-"vecteurs bitmap ou XML.\n"
+"Chemin de la police alternative. Doit être une police TrueType.\n"
"Cette police sera utilisée pour certaines langues ou si la police par défaut "
-"n’est pas disponible."
+"est indisponible."
#: src/settings_translation_file.cpp
msgid ""
"Path to save screenshots at. Can be an absolute or relative path.\n"
"The folder will be created if it doesn't already exist."
msgstr ""
-"Chemin d'accès pour les captures d'écran (absolu ou relatif).\n"
+"Chemin pour enregistrer les captures d'écran (absolu ou relatif).\n"
"La création du dossier sera faite si besoin."
#: src/settings_translation_file.cpp
@@ -5787,28 +6046,18 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Path to the default font.\n"
-"If “freetype†setting is enabled: Must be a TrueType font.\n"
-"If “freetype†setting is disabled: Must be a bitmap or XML vectors font.\n"
+"Path to the default font. Must be a TrueType font.\n"
"The fallback font will be used if the font cannot be loaded."
msgstr ""
-"Chemin vers la police par défaut.\n"
-"Si le paramètre « freetype » est activé : doit être une police TrueType.\n"
-"Si le paramètre « freetype » est désactivé : doit être une police de "
-"vecteurs bitmap ou XML.\n"
-"La police de rentrée sera utilisée si la police ne peut pas être chargée."
+"Chemin de la police par défaut. Doit être une police TrueType.\n"
+"La police alternative sera utilisée si la police ne peut pas être chargée."
#: src/settings_translation_file.cpp
msgid ""
-"Path to the monospace font.\n"
-"If “freetype†setting is enabled: Must be a TrueType font.\n"
-"If “freetype†setting is disabled: Must be a bitmap or XML vectors font.\n"
+"Path to the monospace font. Must be a TrueType font.\n"
"This font is used for e.g. the console and profiler screen."
msgstr ""
-"Chemin vers la police monospace.\n"
-"Si « freetype » est activé : doit être une police TrueType.\n"
-"Si « freetype » est désactivé : doit être une police de vecteurs bitmap ou "
-"XML.\n"
+"Chemin de la police monospace. Doit être une police TrueType.\n"
"Cette police est utilisée par exemple pour la console et l’écran du "
"profileur."
@@ -5822,7 +6071,7 @@ msgstr "Limite par joueur de blocs en attente à charger depuis le disque"
#: src/settings_translation_file.cpp
msgid "Per-player limit of queued blocks to generate"
-msgstr "Limite par joueur des blocs émergents à créer"
+msgstr "Limite par joueur de la file de blocs à générer"
#: src/settings_translation_file.cpp
msgid "Physics"
@@ -5830,7 +6079,7 @@ msgstr "Physique"
#: src/settings_translation_file.cpp
msgid "Pitch move key"
-msgstr "Touche de vol libre"
+msgstr "Touche vol libre"
#: src/settings_translation_file.cpp
msgid "Pitch move mode"
@@ -5838,7 +6087,7 @@ msgstr "Mode de mouvement libre"
#: src/settings_translation_file.cpp
msgid "Place key"
-msgstr "Touche pour placer"
+msgstr "Touche placer"
#: src/settings_translation_file.cpp
msgid "Place repetition interval"
@@ -5850,7 +6099,7 @@ msgid ""
"This requires the \"fly\" privilege on the server."
msgstr ""
"Le joueur est capable de voler sans être affecté par la gravité.\n"
-"Nécessite le privilège « fly  » sur le serveur."
+"Nécessite le privilège « fly » sur le serveur."
#: src/settings_translation_file.cpp
msgid "Player name"
@@ -5865,20 +6114,25 @@ msgid "Player versus player"
msgstr "Joueur contre joueur"
#: src/settings_translation_file.cpp
+msgid "Poisson filtering"
+msgstr "Filtrage de Poisson"
+
+#: 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 ""
"Port où se connecter (UDP).\n"
-"Notez que le champ de port dans le menu principal passe outre ce réglage."
+"Noter que le champ de port dans le menu principal passe outre ce paramètre."
#: src/settings_translation_file.cpp
msgid ""
"Prevent digging and placing from repeating when holding the mouse buttons.\n"
"Enable this when you dig or place too often by accident."
msgstr ""
-"Évitez de répéter lorsque vous maintenez les boutons de la souris.\n"
-"Activez cette option lorsque vous creusez ou placez trop souvent par "
+"Empêche le minage et le placement de se répéter lors du maintien des boutons "
+"de la souris.\n"
+"Activer cette option lorsque vous creusez ou placez trop souvent par "
"accident."
#: src/settings_translation_file.cpp
@@ -5899,7 +6153,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Privileges that players with basic_privs can grant"
msgstr ""
-"Les privilèges que les joueurs ayant le privilège basic_privs peuvent "
+"Les privilèges que les joueurs avec le privilège « basic_privs » peuvent "
"accorder"
#: src/settings_translation_file.cpp
@@ -5908,7 +6162,7 @@ msgstr "Profileur"
#: src/settings_translation_file.cpp
msgid "Profiler toggle key"
-msgstr "Profilage"
+msgstr "Touche profilage"
#: src/settings_translation_file.cpp
msgid "Profiling"
@@ -5921,14 +6175,14 @@ msgstr "Adresse d'écoute pour Prometheus"
#: src/settings_translation_file.cpp
msgid ""
"Prometheus listener address.\n"
-"If minetest is compiled with ENABLE_PROMETHEUS option enabled,\n"
+"If Minetest is compiled with ENABLE_PROMETHEUS option enabled,\n"
"enable metrics listener for Prometheus on that address.\n"
-"Metrics can be fetch on http://127.0.0.1:30000/metrics"
+"Metrics can be fetched on http://127.0.0.1:30000/metrics"
msgstr ""
"Adresse d'écoute pour Prometheus.\n"
-"Lorsque Minetest est compilé avec l'option ENABLE_PROMETHEUS,\n"
-"cette adresse est utilisée pour l'écoute de données pour Prometheus.\n"
-"Les données sont sur http://127.0.0.1:30000/metrics"
+"Lorsque Minetest est compilé avec l'option « ENABLE_PROMETHEUS », cette "
+"adresse est utilisée pour l'écoute de données pour Prometheus.\n"
+"Les métriques peuvent être récupérées sur http://127.0.0.1:30000/metrics"
#: src/settings_translation_file.cpp
msgid "Proportion of large caves that contain liquid."
@@ -5940,9 +6194,9 @@ msgid ""
"Values larger than 26 will start to produce sharp cutoffs at cloud area "
"corners."
msgstr ""
-"Rayon de l'aire des nuages où se trouve 64 blocs carrés de nuages.\n"
-"Les valeurs plus grandes que 26 entraînent une « coupure » nette des nuages "
-"aux coins de l'aire."
+"Rayon de la zone de nuages établi en nombre de 64 blocs de nuages carrés.\n"
+"Les valeurs plus grandes que 26 entraînent une coupure nette des nuages aux "
+"coins des zones de nuages."
#: src/settings_translation_file.cpp
msgid "Raises terrain to make valleys around the rivers."
@@ -5954,7 +6208,7 @@ msgstr "Entrée aléatoire"
#: src/settings_translation_file.cpp
msgid "Range select key"
-msgstr "Distance d'affichage illimitée"
+msgstr "Touche distance d'affichage illimitée"
#: src/settings_translation_file.cpp
msgid "Recent Chat Messages"
@@ -5962,7 +6216,7 @@ msgstr "Messages de discussion récents"
#: src/settings_translation_file.cpp
msgid "Regular font path"
-msgstr "Chemin d'accès pour la police normale"
+msgstr "Chemin de la police par défaut"
#: src/settings_translation_file.cpp
msgid "Remote media"
@@ -5978,7 +6232,7 @@ msgid ""
"Use this to stop players from being able to use color in their messages"
msgstr ""
"Supprime les codes couleurs venant des messages du tchat\n"
-"Utilisez cette option pour empêcher les joueurs d’utiliser la couleur dans "
+"Utiliser cette option pour empêcher les joueurs d’utiliser la couleur dans "
"leurs messages"
#: src/settings_translation_file.cpp
@@ -6003,16 +6257,15 @@ msgid ""
"READ_PLAYERINFO: 32 (disable get_player_names call client-side)"
msgstr ""
"Limite l'accès de certaines fonctions côté client sur les serveurs\n"
-"Combiner les byteflags ci dessous pour restreindre les fonctionnalités "
-"client,\n"
-"ou mettre 0 pour laisser sans restriction :\n"
-"LOAD_CLIENT_MODS : 1 (désactive le chargement des mods client)\n"
-"CHAT_MESSAGES : 2 (désactive l'appel send_chat_message côté client)\n"
-"READ_ITEMDEFS : 4 (désactive l'appel get_item_def côté client)\n"
-"READ_NODEDEFS : 8 (désactive l'appel get_node_def côté client)\n"
-"LOOKUP_NODES_LIMIT : 16 (limite l'appel get_node côté client à\n"
-"csm_restriction_noderange)\n"
-"READ_PLAYERINFO : 32 (désactive l'appel get_player_names côté client)"
+"Combiner les « byteflags » ci dessous pour restreindre les fonctionnalités "
+"client, ou mettre 0 pour laisser sans restriction :\n"
+"LOAD_CLIENT_MODS : 1 (désactive le chargement des mods client)\n"
+"CHAT_MESSAGES : 2 (désactive l'appel « send_chat_message côté » client)\n"
+"READ_ITEMDEFS : 4 (désactive l'appel « get_item_def côté » client)\n"
+"READ_NODEDEFS : 8 (désactive l'appel « get_node_def » côté client)\n"
+"LOOKUP_NODES_LIMIT : 16 (limite l'appel « get_node » côté client à "
+"« csm_restriction_noderange »)\n"
+"READ_PLAYERINFO : 32 (désactive l'appel « get_player_names » côté client)"
#: src/settings_translation_file.cpp
msgid "Ridge mountain spread noise"
@@ -6020,19 +6273,19 @@ msgstr "Bruit pour l'espacement des crêtes de montagnes"
#: src/settings_translation_file.cpp
msgid "Ridge noise"
-msgstr "Bruit pour les crêtes"
+msgstr "Bruit des crêtes"
#: src/settings_translation_file.cpp
msgid "Ridge underwater noise"
-msgstr "Bruit pour les crêtes sous l'eau"
+msgstr "Bruit des crêtes sous l'eau"
#: src/settings_translation_file.cpp
msgid "Ridged mountain size noise"
-msgstr "Bruit pour la taille des crêtes de montagne"
+msgstr "Bruit de la taille des crêtes de montagnes"
#: src/settings_translation_file.cpp
msgid "Right key"
-msgstr "Droite"
+msgstr "Touche droite"
#: src/settings_translation_file.cpp
msgid "River channel depth"
@@ -6048,7 +6301,7 @@ msgstr "Profondeur des rivières"
#: src/settings_translation_file.cpp
msgid "River noise"
-msgstr "Bruit pour les rivières"
+msgstr "Bruit des rivières"
#: src/settings_translation_file.cpp
msgid "River size"
@@ -6076,12 +6329,12 @@ msgstr "Mini-carte circulaire"
#: src/settings_translation_file.cpp
msgid "Safe digging and placing"
-msgstr "Placement et minage sécurisés"
+msgstr "Minage et placement sécurisés"
#: src/settings_translation_file.cpp
msgid "Sandy beaches occur when np_beach exceeds this value."
msgstr ""
-"Des plages de sables apparaissent lorsque np_beach dépasse cette valeur."
+"Des plages de sables apparaissent lorsque « np_beach » dépasse cette valeur."
#: src/settings_translation_file.cpp
msgid "Save the map received by the client on disk."
@@ -6090,11 +6343,11 @@ msgstr "Sauvegarde le monde du serveur sur le disque dur du client."
#: src/settings_translation_file.cpp
msgid "Save window size automatically when modified."
msgstr ""
-"Sauvegarder automatiquement la taille de la fenêtre quand elle est modifiée."
+"Sauvegarde automatiquement la taille de la fenêtre quand elle est modifiée."
#: src/settings_translation_file.cpp
msgid "Saving map received from server"
-msgstr "Sauvegarder le monde du serveur"
+msgstr "Sauvegarde de la carte reçue du serveur"
#: src/settings_translation_file.cpp
msgid ""
@@ -6104,13 +6357,11 @@ msgid ""
"pixels when scaling down, at the cost of blurring some\n"
"edge pixels when images are scaled by non-integer sizes."
msgstr ""
-"Met à l'échelle l'interface par une valeur spécifiée par l'utilisateur,\n"
-"à l'aide d'un filtre au plus proche avec anticrénelage.\n"
+"Met à l'échelle l'interface par une valeur spécifiée par l'utilisateur, à "
+"l'aide d'un filtre au plus proche voisin avec anticrénelage.\n"
"Cela va lisser certains bords grossiers, et mélanger les pixels en réduisant "
-"l'échelle\n"
-"au détriment d'un effet de flou sur des pixels en bordure quand les images "
-"sont\n"
-"mises à l'échelle par des valeurs fractionnelles."
+"l'échelle au détriment d'un effet de flou sur des pixels en bordure quand "
+"les images sont mises à l'échelle par des valeurs fractionnelles."
#: src/settings_translation_file.cpp
msgid "Screen height"
@@ -6139,22 +6390,22 @@ msgid ""
"Use 0 for default quality."
msgstr ""
"Qualité de capture d'écran. Utilisé uniquement pour le format JPEG.\n"
-"1 signifie mauvaise qualité ; 100 signifie la meilleure qualité.\n"
-"Utilisez 0 pour la qualité par défaut."
+"1 signifie mauvaise qualité ; 100 signifie la meilleure qualité.\n"
+"Utiliser 0 pour la qualité par défaut."
#: src/settings_translation_file.cpp
msgid "Seabed noise"
-msgstr "Bruit pour les fonds marins"
+msgstr "Bruit des fonds marins"
#: src/settings_translation_file.cpp
msgid "Second of 4 2D noises that together define hill/mountain range height."
msgstr ""
-"Deuxième des 4 bruits 2D qui définissent ensemble la taille des collines et "
-"montagnes."
+"Deuxième des 4 bruits 2D qui définissent ensemble la hauteur des collines et "
+"des montagnes."
#: src/settings_translation_file.cpp
msgid "Second of two 3D noises that together define tunnels."
-msgstr "Deuxième des 2 bruits 3D qui définissent ensemble les tunnels."
+msgstr "Deuxième des deux bruits 3D qui définissent ensemble les tunnels."
#: src/settings_translation_file.cpp
msgid "Security"
@@ -6166,7 +6417,7 @@ msgstr "Voir http://www.sqlite.org/pragma.html#pragma_synchronous"
#: src/settings_translation_file.cpp
msgid "Selection box border color (R,G,B)."
-msgstr "Couleur des bords de sélection (R,G,B)."
+msgstr "Couleur des bords de sélection (R,V,B)."
#: src/settings_translation_file.cpp
msgid "Selection box color"
@@ -6199,24 +6450,24 @@ msgid ""
"18 = 4D \"Mandelbulb\" Julia set."
msgstr ""
"Choisit parmi 18 types de fractales.\n"
-"1 = réglage Mandelbrot « Roundy » 4D.\n"
-"2 = réglage Julia « Roundy » 4D.\n"
-"3 = réglage Mandelbrot « Squarry » 4D.\n"
-"4 = réglage Julia « Squarry » 4D.\n"
-"5 = réglage Mandelbrot « Cousin Mandy » 4D.\n"
-"6 = réglage Julia « Cousin Mandy » 4D.\n"
-"7 = réglage Mandelbrot « Variation » 4D.\n"
-"8 = réglage Julia « Variation » 4D.\n"
-"9 = réglage Mandelbrot « Mandelbrot/Mandelbar » 3D.\n"
-"10 = réglage Julia « Mandelbrot/Mandelbar » 3D.\n"
-"11 = réglage Mandelbrot « Christmas Tree » 3D.\n"
-"12 = réglage Julia « Christmas Tree » 3D.\n"
-"13 = réglage Mandelbrot « Mandelbulb » 3D.\n"
-"14 = réglage Julia « Mandelbulb » 3D.\n"
-"15 = réglage Mandelbrot « Cosine Mandelbulb » 3D.\n"
-"16 = réglage Julia « Cosine Mandelbulb » 3D.\n"
-"17 = réglage Mandelbrot « Mandelbulb » 4D.\n"
-"18 = réglage Julia « Mandelbulb » 4D."
+"1 = réglage Mandelbrot « Roundy » 4D.\n"
+"2 = réglage Julia « Roundy » 4D.\n"
+"3 = réglage Mandelbrot « Squarry » 4D.\n"
+"4 = réglage Julia « Squarry » 4D.\n"
+"5 = réglage Mandelbrot « Cousin Mandy » 4D.\n"
+"6 = réglage Julia « Cousin Mandy » 4D.\n"
+"7 = réglage Mandelbrot « Variation » 4D.\n"
+"8 = réglage Julia « Variation » 4D.\n"
+"9 = réglage Mandelbrot « Mandelbrot/Mandelbar » 3D.\n"
+"10 = réglage Julia « Mandelbrot/Mandelbar » 3D.\n"
+"11 = réglage Mandelbrot « Christmas Tree » 3D.\n"
+"12 = réglage Julia « Christmas Tree » 3D.\n"
+"13 = réglage Mandelbrot « Mandelbulb » 3D.\n"
+"14 = réglage Julia « Mandelbulb » 3D.\n"
+"15 = réglage Mandelbrot « Cosine Mandelbulb » 3D.\n"
+"16 = réglage Julia « Cosine Mandelbulb » 3D.\n"
+"17 = réglage Mandelbrot « Mandelbulb » 4D.\n"
+"18 = réglage Julia « Mandelbulb » 4D."
#: src/settings_translation_file.cpp
msgid "Server / Singleplayer"
@@ -6244,15 +6495,15 @@ msgstr "Port du serveur"
#: src/settings_translation_file.cpp
msgid "Server side occlusion culling"
-msgstr "Tests d'occultation côté serveur"
+msgstr "Détermination des blocs invisibles côté serveur"
#: src/settings_translation_file.cpp
msgid "Serverlist URL"
-msgstr "URL de la liste des serveurs publics"
+msgstr "URL de la liste des serveurs"
#: src/settings_translation_file.cpp
msgid "Serverlist file"
-msgstr "Fichier des serveurs publics"
+msgstr "Fichier de la liste des serveurs"
#: src/settings_translation_file.cpp
msgid ""
@@ -6265,15 +6516,53 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Set the maximum character length of a chat message sent by clients."
msgstr ""
-"Définir la longueur maximale de caractères d'un message de discussion envoyé "
+"Définit la longueur maximale de caractères d'un message de discussion envoyé "
"par les clients."
#: src/settings_translation_file.cpp
msgid ""
+"Set the shadow strength.\n"
+"Lower value means lighter shadows, higher value means darker shadows."
+msgstr ""
+"Définit la force de l'ombre.\n"
+"Une valeur plus faible signifie des ombres plus claires, une valeur plus "
+"élevée signifie des ombres plus sombres."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set the soft shadow radius size.\n"
+"Lower values mean sharper shadows, bigger values mean softer shadows.\n"
+"Minimum value: 1.0; maximum value: 10.0"
+msgstr ""
+"Définit la taille du rayon de l'ombre douce.\n"
+"Les valeurs les plus faibles signifient des ombres plus nettes, les valeurs "
+"les plus élevées des ombres plus douces.\n"
+"Valeur minimale : 1,0 ; valeur maximale : 10,0"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set the tilt of Sun/Moon orbit in degrees.\n"
+"Value of 0 means no tilt / vertical orbit.\n"
+"Minimum value: 0.0; maximum value: 60.0"
+msgstr ""
+"Définit l'inclinaison de l'orbite du soleil / lune en degrés.\n"
+"La valeur de 0 signifie aucune inclinaison / orbite verticale.\n"
+"Valeur minimale : 0,0 ; valeur maximale : 60,0"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set to true to enable Shadow Mapping.\n"
+"Requires shaders to be enabled."
+msgstr ""
+"Mettre sur « Activé » active le « Shadow Mapping ».\n"
+"Nécessite les shaders pour être activé."
+
+#: src/settings_translation_file.cpp
+msgid ""
"Set to true to enable waving leaves.\n"
"Requires shaders to be enabled."
msgstr ""
-"Mettre sur « true » active le mouvement des feuilles d'arbres mouvantes.\n"
+"Mettre sur « Activé » active les feuilles ondulantes.\n"
"Nécessite les shaders pour être activé."
#: src/settings_translation_file.cpp
@@ -6281,7 +6570,7 @@ msgid ""
"Set to true to enable waving liquids (like water).\n"
"Requires shaders to be enabled."
msgstr ""
-"Mettre sur « true » active les vagues.\n"
+"Mettre sur « Activé » active les liquides ondulants (comme l'eau).\n"
"Nécessite les shaders pour être activé."
#: src/settings_translation_file.cpp
@@ -6289,10 +6578,20 @@ msgid ""
"Set to true to enable waving plants.\n"
"Requires shaders to be enabled."
msgstr ""
-"Mettre sur « true » active le mouvement des végétaux.\n"
+"Mettre sur « Activé » active le mouvement des végétaux.\n"
"Nécessite les shaders pour être activé."
#: src/settings_translation_file.cpp
+msgid ""
+"Sets shadow texture quality to 32 bits.\n"
+"On false, 16 bits texture will be used.\n"
+"This can cause much more artifacts in the shadow."
+msgstr ""
+"Définit la qualité de la texture de l'ombre sur 32 bits.\n"
+"Si désactivé, une texture de 16 bits sera utilisée.\n"
+"Cela peut causer beaucoup plus d'artefacts sur l'ombre."
+
+#: src/settings_translation_file.cpp
msgid "Shader path"
msgstr "Chemin des shaders"
@@ -6308,6 +6607,23 @@ msgstr ""
"Fonctionne seulement avec OpenGL."
#: src/settings_translation_file.cpp
+msgid "Shadow filter quality"
+msgstr "Qualité du filtre d’ombre"
+
+#: src/settings_translation_file.cpp
+msgid "Shadow map max distance in nodes to render shadows"
+msgstr ""
+"Distance maximale de la carte des ombres en nœuds pour le rendu des ombres"
+
+#: src/settings_translation_file.cpp
+msgid "Shadow map texture in 32 bits"
+msgstr "Texture de la carte des ombres en 32 bits"
+
+#: src/settings_translation_file.cpp
+msgid "Shadow map texture size"
+msgstr "Taille de la texture de la carte des ombres"
+
+#: src/settings_translation_file.cpp
msgid ""
"Shadow offset (in pixels) of the default font. If 0, then shadow will not be "
"drawn."
@@ -6316,12 +6632,8 @@ msgstr ""
"valeur est 0."
#: src/settings_translation_file.cpp
-msgid ""
-"Shadow offset (in pixels) of the fallback font. If 0, then shadow will not "
-"be drawn."
-msgstr ""
-"Décalage de l'ombre de la police de secours (en pixel). Aucune ombre si la "
-"valeur est 0."
+msgid "Shadow strength"
+msgstr "Force de l'ombre"
#: src/settings_translation_file.cpp
msgid "Shape of the minimap. Enabled = round, disabled = square."
@@ -6344,7 +6656,7 @@ msgstr ""
"Un redémarrage est nécessaire après cette modification."
#: src/settings_translation_file.cpp
-msgid "Show nametag backgrounds by default"
+msgid "Show name tag backgrounds by default"
msgstr "Afficher l'arrière-plan des badges par défaut"
#: src/settings_translation_file.cpp
@@ -6360,14 +6672,13 @@ msgid ""
"Altering this value is for special usage, leaving it unchanged is\n"
"recommended."
msgstr ""
-"Taille des mapchunks générés par mapgen, indiquée dans les mapblocks (16 "
-"nœuds).\n"
-"ATTENTION ! : Il n’y a aucun avantage, et plusieurs dangers, à\n"
-"augmenter cette valeur au-dessus de 5.\n"
+"Taille des tranches de carte générés à la création de terrain, établie en "
+"blocs de carte (16 nœuds).\n"
+"ATTENTION ! : Il n’y a aucun avantage, et plusieurs dangers, à augmenter "
+"cette valeur au-dessus de 5.\n"
"Réduire cette valeur augmente la densité de cavernes et de donjons.\n"
"La modification de cette valeur est réservée à un usage spécial. Il est "
-"conseillé\n"
-"de la laisser inchangée."
+"conseillé de la laisser inchangée."
#: src/settings_translation_file.cpp
msgid ""
@@ -6375,9 +6686,13 @@ msgid ""
"increase the cache hit %, reducing the data being copied from the main\n"
"thread, thus reducing jitter."
msgstr ""
-"Taille du cache de MapBlocks du générateur de maillage. Augmenter\n"
-"ceci augmente le % d'interception du cache et réduit la copie de données\n"
-"dans le fil principal, réduisant les tremblements."
+"Taille du cache de blocs de carte du générateur de maillage. Augmenter ceci "
+"augmente le % d'interception du cache et réduit la copie de données dans le "
+"fil principal, réduisant les tremblements."
+
+#: src/settings_translation_file.cpp
+msgid "Sky Body Orbit Tilt"
+msgstr "Inclinaison de l'orbite du corps du ciel"
#: src/settings_translation_file.cpp
msgid "Slice w"
@@ -6390,16 +6705,17 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Small cave maximum number"
-msgstr "Nombre maximum de petites grottes"
+msgstr "Nombre maximal de petites grottes"
#: src/settings_translation_file.cpp
msgid "Small cave minimum number"
-msgstr "Nombre maximum de petites grottes"
+msgstr "Nombre minimal de petites grottes"
#: src/settings_translation_file.cpp
msgid "Small-scale humidity variation for blending biomes on borders."
msgstr ""
-"Variation d'humidité de petite échelle pour la transition entre les biomes."
+"Variation de l'humidité de petite échelle pour la transition entre les "
+"biomes."
#: src/settings_translation_file.cpp
msgid "Small-scale temperature variation for blending biomes on borders."
@@ -6416,7 +6732,8 @@ msgid ""
"Smooths camera when looking around. Also called look or mouse smoothing.\n"
"Useful for recording videos."
msgstr ""
-"Lisse les mouvement de la caméra en se déplaçant et en regardant autour.\n"
+"Lisse les mouvements de la caméra en se déplaçant et en regardant autour. "
+"Également appelé « look smoothing » ou « mouse smoothing ».\n"
"Utile pour enregistrer des vidéos."
#: src/settings_translation_file.cpp
@@ -6429,27 +6746,23 @@ msgstr "Lisse la rotation de la caméra. 0 pour désactiver."
#: src/settings_translation_file.cpp
msgid "Sneak key"
-msgstr "Déplacement lent"
+msgstr "Touche déplacement lent"
#: src/settings_translation_file.cpp
msgid "Sneaking speed"
-msgstr "Vitesse d'accroupissement"
+msgstr "Vitesse de déplacement lent"
#: src/settings_translation_file.cpp
msgid "Sneaking speed, in nodes per second."
-msgstr "Vitesse furtive, en blocs par seconde."
-
-#: src/settings_translation_file.cpp
-msgid "Sound"
-msgstr "Audio"
+msgstr "Vitesse de déplacement lent, en nœuds par seconde."
#: src/settings_translation_file.cpp
-msgid "Special key"
-msgstr "Touche spéciale"
+msgid "Soft shadow radius"
+msgstr "Rayon de l'ombre douce"
#: src/settings_translation_file.cpp
-msgid "Special key for climbing/descending"
-msgstr "Touche spéciale pour monter/descendre"
+msgid "Sound"
+msgstr "Audio"
#: src/settings_translation_file.cpp
msgid ""
@@ -6461,8 +6774,7 @@ msgstr ""
"Spécifie l'URL à laquelle les clients obtiennent les fichiers média au lieu "
"d'utiliser le port UDP.\n"
"$filename doit être accessible depuis $remote_media$filename via cURL "
-"(évidemment, remote_media devrait\n"
-"se terminer avec un slash).\n"
+"(évidemment, remote_media devrait se terminer avec un slash).\n"
"Les fichiers qui ne sont pas présents seront récupérés de la manière "
"habituelle."
@@ -6479,6 +6791,19 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Spread a complete update of shadow map over given amount of frames.\n"
+"Higher values might make shadows laggy, lower values\n"
+"will consume more resources.\n"
+"Minimum value: 1; maximum value: 16"
+msgstr ""
+"Réparti une mise à jour complète de la carte des ombres sur un nombre donné "
+"d'images.\n"
+"Des valeurs plus élevées peuvent rendre les ombres plus lentes, des valeurs "
+"plus faibles consommeront plus de ressources.\n"
+"Valeur minimale : 1 ; valeur maximale : 16"
+
+#: src/settings_translation_file.cpp
+msgid ""
"Spread of light curve boost range.\n"
"Controls the width of the range to be boosted.\n"
"Standard deviation of the light curve boost Gaussian."
@@ -6493,15 +6818,15 @@ msgstr "Point d'apparition statique"
#: src/settings_translation_file.cpp
msgid "Steepness noise"
-msgstr "Bruit pour les pentes"
+msgstr "Bruit des pentes"
#: src/settings_translation_file.cpp
msgid "Step mountain size noise"
-msgstr "Bruit pour la taille des montagnes en escalier"
+msgstr "Bruit de la taille des montagnes en escalier"
#: src/settings_translation_file.cpp
msgid "Step mountain spread noise"
-msgstr "Bruit pour l’étalement des montagnes en escalier"
+msgstr "Bruit d'étalement des montagnes en escalier"
#: src/settings_translation_file.cpp
msgid "Strength of 3D mode parallax."
@@ -6514,8 +6839,8 @@ msgid ""
"curve that is boosted in brightness."
msgstr ""
"Niveau d'amplification de la courbure de la lumière.\n"
-"Les trois paramètres « d'amplification » définissent un intervalle\n"
-"de la courbe de lumière pour lequel la luminosité est amplifiée."
+"Les trois paramètres « d'amplification » définissent un intervalle de la "
+"courbe de lumière pour lequel la luminosité est amplifiée."
#: src/settings_translation_file.cpp
msgid "Strict protocol checking"
@@ -6523,7 +6848,7 @@ msgstr "Vérification stricte du protocole"
#: src/settings_translation_file.cpp
msgid "Strip color codes"
-msgstr "Echapper les codes de couleur"
+msgstr "Supprimer les codes couleurs"
#: src/settings_translation_file.cpp
msgid ""
@@ -6538,19 +6863,18 @@ msgid ""
"server-intensive extreme water flow and to avoid vast flooding of the\n"
"world surface below."
msgstr ""
-"Niveau de la surface de l'eau (facultative) placée sur une couche solide de "
-"terre suspendue.\n"
-"L'eau est désactivée par défaut et ne sera placée que si cette valeur est\n"
-"fixée à plus de 'mgv7_floatland_ymax' - 'mgv7_floatland_taper'\n"
-"(début de l’effilage du haut)\n"
+"Niveau de la surface de l'eau (optionnel) placée sur une couche solide de "
+"terrain flottant.\n"
+"L'eau est désactivée par défaut et ne sera placée que si cette valeur est "
+"définie à plus de « mgv7_floatland_ymax » - « mgv7_floatland_taper » (début "
+"de l’effilage du haut).\n"
"***ATTENTION, DANGER POTENTIEL AU MONDES ET AUX PERFORMANCES DES "
-"SERVEURS*** :\n"
-"Lorsque le placement de l'eau est activé, les île volantes doivent être\n"
-"configurées avec une couche solide en mettant 'mgv7_floatland_density' à "
-"2.0\n"
-"(ou autre valeur dépendante de 'mgv7_np_floatland'), pour éviter\n"
-"les chutes d'eaux énormes qui surchargent les serveurs et pourraient\n"
-"inonder les terres en dessous."
+"SERVEURS*** :\n"
+"Lorsque le placement de l'eau est activé, les terrains flottants doivent "
+"être configurés et vérifiés pour être une couche solide en mettant "
+"« mgv7_floatland_density » à 2,0 (ou autre valeur dépendante de "
+"« mgv7_np_floatland »), pour éviter les chutes d'eaux énormes qui "
+"surchargent les serveurs et pourraient inonder les terres en dessous."
#: src/settings_translation_file.cpp
msgid "Synchronous SQLite"
@@ -6562,11 +6886,11 @@ msgstr "Variation de température pour les biomes."
#: src/settings_translation_file.cpp
msgid "Terrain alternative noise"
-msgstr "Bruit alternatif pour le terrain"
+msgstr "Bruit alternatif de terrain"
#: src/settings_translation_file.cpp
msgid "Terrain base noise"
-msgstr "Bruit pour le terrain de base"
+msgstr "Bruit de terrain de base"
#: src/settings_translation_file.cpp
msgid "Terrain height"
@@ -6574,11 +6898,11 @@ msgstr "Hauteur du terrain"
#: src/settings_translation_file.cpp
msgid "Terrain higher noise"
-msgstr "Bruit pour la hauteur du terrain"
+msgstr "Bruit de hauteur du terrain"
#: src/settings_translation_file.cpp
msgid "Terrain noise"
-msgstr "Bruit pour le terrain"
+msgstr "Bruit de terrain"
#: src/settings_translation_file.cpp
msgid ""
@@ -6587,8 +6911,8 @@ msgid ""
"Adjust towards 0.0 for a larger proportion."
msgstr ""
"Seuil du bruit de relief pour les collines.\n"
-"Contrôle la proportion sur la superficie d'un monde recouvert de collines.\n"
-"Ajuster vers 0. 0 pour une plus grande proportion."
+"Contrôle la proportion sur la zone d'un monde recouvert de collines.\n"
+"Ajuster vers 0,0 pour une plus grande proportion."
#: src/settings_translation_file.cpp
msgid ""
@@ -6597,12 +6921,12 @@ msgid ""
"Adjust towards 0.0 for a larger proportion."
msgstr ""
"Seuil du bruit de relief pour les lacs.\n"
-"Contrôle la proportion sur la superficie d'un monde recouvert de lacs.\n"
-"Ajuster vers 0. 0 pour une plus grande proportion."
+"Contrôle la proportion sur la zone d'un monde recouvert de lacs.\n"
+"Ajuster vers 0,0 pour une plus grande proportion."
#: src/settings_translation_file.cpp
msgid "Terrain persistence noise"
-msgstr "Bruit du terrain persistant"
+msgstr "Bruit de persistance du terrain"
#: src/settings_translation_file.cpp
msgid "Texture path"
@@ -6610,6 +6934,17 @@ msgstr "Chemin des textures"
#: src/settings_translation_file.cpp
msgid ""
+"Texture size to render the shadow map on.\n"
+"This must be a power of two.\n"
+"Bigger numbers create better shadows but it is also more expensive."
+msgstr ""
+"Taille de la texture pour le rendu de la carte des ombres.\n"
+"Il doit s'agir d'une puissance de deux.\n"
+"Les nombres plus grands créent de meilleures ombres, mais ils sont aussi "
+"plus coûteux."
+
+#: src/settings_translation_file.cpp
+msgid ""
"Textures on a node may be aligned either to the node or to the world.\n"
"The former mode suits better things like machines, furniture, etc., while\n"
"the latter makes stairs and microblocks fit surroundings better.\n"
@@ -6618,19 +6953,20 @@ msgid ""
"that is considered EXPERIMENTAL and may not work properly."
msgstr ""
"Les textures sur un nœud peuvent être alignées soit sur le nœud, soit sur le "
-"monde. L'ancien mode convient mieux aux machines, aux meubles, etc. ce "
-"dernier rend les escaliers et les microblocs mieux adaptés à "
-"l'environnement. Cependant, comme cette possibilité est nouvelle, elle ne "
-"peut donc pas être utilisée par les anciens serveurs, cette option permet de "
-"l'appliquer pour certains types de nœuds. Notez cependant que c'est "
-"considéré comme EXPERIMENTAL et peut ne pas fonctionner correctement."
+"monde. Le premier mode convient mieux aux choses comme des machines, des "
+"meubles, etc., tandis que le second rend les escaliers et les microblocs "
+"mieux adaptés à l'environnement. Cependant, comme cette possibilité est "
+"nouvelle, elle ne peut donc pas être utilisée par les anciens serveurs, "
+"cette option permet de l'appliquer pour certains types de nœuds. Noter "
+"cependant que c'est considéré comme EXPÉRIMENTAL et peut ne pas fonctionner "
+"correctement."
#: src/settings_translation_file.cpp
msgid "The URL for the content repository"
msgstr "L'URL du dépôt de contenu en ligne"
#: src/settings_translation_file.cpp
-msgid "The deadzone of the joystick"
+msgid "The dead zone of the joystick"
msgstr "La zone morte de la manette"
#: src/settings_translation_file.cpp
@@ -6638,8 +6974,8 @@ msgid ""
"The default format in which profiles are being saved,\n"
"when calling `/profiler save [format]` without format."
msgstr ""
-"Le format par défaut dans lequel les profils seront sauvegardés,\n"
-"lorsque la commande `/profiler save [format]` est entrée sans format."
+"Le format par défaut dans lequel les profils sont enregistrés, lors de "
+"l'appel de « /profiler save [format] » sans format."
#: src/settings_translation_file.cpp
msgid "The depth of dirt or other biome filler node."
@@ -6673,10 +7009,10 @@ msgid ""
"Requires waving liquids to be enabled."
msgstr ""
"La hauteur maximale de la surface des liquides ondulants.\n"
-"4.0 - La hauteur des vagues est de deux nœuds.\n"
-"0.0 - La vague ne bouge pas du tout.\n"
-"Par défaut est de 1,0 (1/2 nœud).\n"
-"Nécessite d’activer les liquides ondulants."
+"4,0 - La hauteur des vagues est de deux blocs.\n"
+"0,0 - La vague ne bouge pas du tout.\n"
+"Par défaut est de 1,0 (1/2 bloc).\n"
+"Nécessite les liquides ondulants pour être activé."
#: src/settings_translation_file.cpp
msgid "The network interface that the server listens on."
@@ -6688,7 +7024,7 @@ msgid ""
"See /privs in game for a full list on your server and mod configuration."
msgstr ""
"Les privilèges que les nouveaux joueurs obtiennent automatiquement.\n"
-"Entrer /privs dans le jeu pour voir une liste complète des privilèges."
+"Entrer « /privs » dans le jeu pour voir une liste complète des privilèges."
#: src/settings_translation_file.cpp
msgid ""
@@ -6700,25 +7036,26 @@ msgid ""
"maintained.\n"
"This should be configured together with active_object_send_range_blocks."
msgstr ""
-"Le rayon du volume de blocs autour de chaque joueur soumis à la\n"
-"matière de bloc actif, indiqué dans mapblocks (16 nœuds).\n"
-"Les objets sont chargés et les ABMs sont exécutés dans les blocs actifs.\n"
-"C'est également la distance minimale pour laquelle les objets actifs (mobs) "
+"Le rayon du volume de blocs autour de chaque joueur soumis au bloc actif, "
+"établi en blocs de carte (16 nœuds).\n"
+"Dans les blocs actifs, les objets sont chargés et les « ABMs » sont "
+"exécutés.\n"
+"C'est également la distance minimale dans laquelle les objets actifs (mobs) "
"sont conservés.\n"
-"Ceci devrait être configuré avec 'active_object_send_range_blocks'."
+"Ceci devrait être configuré avec « active_object_send_range_blocks »."
#: src/settings_translation_file.cpp
msgid ""
-"The rendering back-end for Irrlicht.\n"
+"The rendering back-end.\n"
"A restart is required after changing this.\n"
"Note: On Android, stick with OGLES1 if unsure! App may fail to start "
"otherwise.\n"
"On other platforms, OpenGL is recommended.\n"
"Shaders are supported by OpenGL (desktop only) and OGLES2 (experimental)"
msgstr ""
-"Le moteur de rendu utilisé par Irrlicht.\n"
+"Le moteur de rendu.\n"
"Un redémarrage est nécessaire après cette modification.\n"
-"Remarque : Sur Android, restez avec OGLES1 en cas de doute ! Autrement, "
+"Remarque : Sur Android, rester avec OGLES1 en cas de doute ! Autrement, "
"l'application peut ne pas démarrer.\n"
"Sur les autres plateformes, OpenGL est recommandé.\n"
"Les shaders sont pris en charge par OpenGL (ordinateur de bureau uniquement) "
@@ -6727,7 +7064,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"The sensitivity of the joystick axes for moving the\n"
-"ingame view frustum around."
+"in-game view frustum around."
msgstr ""
"Sensibilité des axes de la manette pour déplacer la vue en jeu autour du "
"tronc."
@@ -6762,8 +7099,8 @@ msgid ""
"The time budget allowed for ABMs to execute on each step\n"
"(as a fraction of the ABM Interval)"
msgstr ""
-"Budget de temps alloué aux ABMs pour exécuter à chaque étape\n"
-"(en fraction de l'intervalle ABM)"
+"Budget de temps alloué aux « ABMs » pour s'exécuter à chaque étape (en "
+"fraction de l'intervalle « ABM »)"
#: src/settings_translation_file.cpp
msgid ""
@@ -6792,30 +7129,28 @@ msgid ""
"'altitude_dry' is enabled."
msgstr ""
"La distance verticale sur laquelle la chaleur diminue de 20 si "
-"« altitude_chill » est\n"
-"activé. Également la distance verticale sur laquelle l’humidité diminue de "
-"10 si\n"
-"« altitude_dry » est activé."
+"« altitude_chill » est activé. Également la distance verticale sur laquelle "
+"l’humidité diminue de 10 si « altitude_dry » est activé."
#: src/settings_translation_file.cpp
msgid "Third of 4 2D noises that together define hill/mountain range height."
msgstr ""
"Le troisième des 4 bruits 2D qui définissent ensemble la hauteur des "
-"collines et montagnes."
+"collines et des montagnes."
#: 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 ""
-"Durée en secondes pendant laquelle les objets jetés sont présents.\n"
+"Temps en secondes pour les entités objets (objets lâchés) à exister.\n"
"Définir à -1 pour désactiver cette fonctionnalité."
#: src/settings_translation_file.cpp
msgid "Time of day when a new world is started, in millihours (0-23999)."
msgstr ""
-"Heure de la journée lorsqu'un nouveau monde est créé, en milliheures "
-"(0-23999)."
+"Heure de la journée lorsqu'un nouveau monde est créé, en milliheures (0–"
+"23999)."
#: src/settings_translation_file.cpp
msgid "Time send interval"
@@ -6828,8 +7163,8 @@ msgstr "Vitesse du temps"
#: src/settings_translation_file.cpp
msgid "Timeout for client to remove unused map data from memory."
msgstr ""
-"Délai pendant lequel le client supprime les données de la carte de sa "
-"mémoire."
+"Délai d'interruption pour le client pour supprimer les données de carte "
+"inutilisées de la mémoire."
#: src/settings_translation_file.cpp
msgid ""
@@ -6838,26 +7173,30 @@ msgid ""
"This determines how long they are slowed down after placing or removing a "
"node."
msgstr ""
-"Pour réduire le lag, le transfert des blocs est ralenti quand un joueur "
+"Pour réduire le décalage, le transfert des blocs est ralenti quand un joueur "
"construit quelque chose.\n"
"Cela détermine la durée du ralentissement après placement ou destruction "
"d'un nœud."
#: src/settings_translation_file.cpp
msgid "Toggle camera mode key"
-msgstr "Basculement en mode caméra"
+msgstr "Touche basculer en mode caméra"
#: src/settings_translation_file.cpp
msgid "Tooltip delay"
-msgstr "Délais d'apparition des infobulles"
+msgstr "Délai d'apparition des infobulles"
#: src/settings_translation_file.cpp
msgid "Touch screen threshold"
msgstr "Sensibilité de l'écran tactile"
#: src/settings_translation_file.cpp
+msgid "Tradeoffs for performance"
+msgstr "Compromis pour la performance"
+
+#: src/settings_translation_file.cpp
msgid "Trees noise"
-msgstr "Bruit pour les arbres"
+msgstr "Bruit des arbres"
#: src/settings_translation_file.cpp
msgid "Trilinear filtering"
@@ -6880,11 +7219,12 @@ msgstr "Mods sécurisés"
#: src/settings_translation_file.cpp
msgid "URL to the server list displayed in the Multiplayer Tab."
-msgstr "URL de la liste des serveurs affichée dans l'onglet multijoueur."
+msgstr ""
+"URL de la liste des serveurs affichée dans l'onglet « Rejoindre une partie »."
#: src/settings_translation_file.cpp
msgid "Undersampling"
-msgstr "Sous-échantillonage"
+msgstr "Sous-échantillonnage"
#: src/settings_translation_file.cpp
msgid ""
@@ -6894,11 +7234,11 @@ msgid ""
"image.\n"
"Higher values result in a less detailed image."
msgstr ""
-"Le sous-échantillonage ressemble à l'utilisation d'une résolution d'écran "
-"inférieure,\n"
-"mais il ne s'applique qu'au rendu 3D, gardant l'interface usager intacte.\n"
-"Cela peut donner lieu à un bonus de performance conséquent, au détriment de "
-"la qualité d'image.\n"
+"Le sous-échantillonnage ressemble à l'utilisation d'une résolution d'écran "
+"inférieure, mais il ne s'applique qu'au rendu 3D, gardant l'interface "
+"intacte.\n"
+"Cela doit donner un bonus de performance conséquent, au détriment de la "
+"qualité d'image.\n"
"Les valeurs plus élevées réduisent la qualité du détail des images."
#: src/settings_translation_file.cpp
@@ -6907,7 +7247,7 @@ msgstr "Distance de transfert du joueur illimitée"
#: src/settings_translation_file.cpp
msgid "Unload unused server data"
-msgstr "Purger les données de serveur inutiles"
+msgstr "Décharger les données de serveur inutilisées"
#: src/settings_translation_file.cpp
msgid "Upper Y limit of dungeons."
@@ -6915,7 +7255,7 @@ msgstr "Limite haute Y des donjons."
#: src/settings_translation_file.cpp
msgid "Upper Y limit of floatlands."
-msgstr "Limite en Y des îles volantes."
+msgstr "Limite haute Y des terrains flottants."
#: src/settings_translation_file.cpp
msgid "Use 3D cloud look instead of flat."
@@ -6938,13 +7278,13 @@ msgstr "Utilisation du filtrage bilinéaire."
#: src/settings_translation_file.cpp
msgid ""
-"Use mip mapping to scale textures. May slightly increase performance,\n"
+"Use mipmapping to scale textures. May slightly increase performance,\n"
"especially when using a high resolution texture pack.\n"
"Gamma correct downscaling is not supported."
msgstr ""
-"Utilisez le mappage MIP pour mettre à l'échelle les textures. Peut augmenter "
-"légèrement les performances, surtout si vous utilisez un pack de textures "
-"haute résolution.\n"
+"Utilise le mip-mapping pour mettre à l'échelle les textures.\n"
+"Peut augmenter légèrement les performances, surtout lors de l'utilisation "
+"d'un pack de textures haute résolution.\n"
"La réduction d'échelle gamma correcte n'est pas prise en charge."
#: src/settings_translation_file.cpp
@@ -6959,9 +7299,9 @@ msgid ""
msgstr ""
"Utilise l'anticrénelage multi-échantillons (MSAA) pour lisser les bords des "
"blocs.\n"
-"Cet algorithme lisse la vue 3D tout en conservant l'image nette,\n"
-"mais cela ne concerne pas la partie interne des textures\n"
-"(ce qui est particulièrement visible avec des textures transparentes).\n"
+"Cet algorithme lisse la vue 3D tout en conservant l'image nette, mais cela "
+"ne concerne pas la partie interne des textures (ce qui est particulièrement "
+"visible avec des textures transparentes).\n"
"Des espaces visibles apparaissent entre les blocs lorsque les shaders sont "
"désactivés.\n"
"Si définie à 0, MSAA est désactivé.\n"
@@ -6985,7 +7325,7 @@ msgstr "Profondeur des vallées"
#: src/settings_translation_file.cpp
msgid "Valley fill"
-msgstr "Comblement de vallée"
+msgstr "Comblement des vallées"
#: src/settings_translation_file.cpp
msgid "Valley profile"
@@ -7005,7 +7345,7 @@ msgstr "Variation de la hauteur maximale des montagnes (en blocs)."
#: src/settings_translation_file.cpp
msgid "Variation of number of caves."
-msgstr "Variation du nombre de cavernes."
+msgstr "Variation du nombre de grottes."
#: src/settings_translation_file.cpp
msgid ""
@@ -7013,7 +7353,7 @@ msgid ""
"When noise is < -0.55 terrain is near-flat."
msgstr ""
"Variation du terrain en hauteur.\n"
-"Quand le bruit est < à -0.55, le terrain est presque plat."
+"Quand le bruit est inférieur à -0,55, le terrain est presque plat."
#: src/settings_translation_file.cpp
msgid "Varies depth of biome surface nodes."
@@ -7025,7 +7365,7 @@ msgid ""
"Defines the 'persistence' value for terrain_base and terrain_alt noises."
msgstr ""
"Variation de la rugosité du terrain.\n"
-"Définit la valeur de « persistance » pour les bruits terrain_base et "
+"Définit la valeur de « persistance » pour les bruits terrain_base et "
"terrain_alt."
#: src/settings_translation_file.cpp
@@ -7054,23 +7394,23 @@ msgstr "Distance d'affichage en blocs."
#: src/settings_translation_file.cpp
msgid "View range decrease key"
-msgstr "Réduire la distance d'affichage"
+msgstr "Touche réduire la distance d'affichage"
#: src/settings_translation_file.cpp
msgid "View range increase key"
-msgstr "Augmenter la distance d'affichage"
+msgstr "Touche augmenter la distance d'affichage"
#: src/settings_translation_file.cpp
msgid "View zoom key"
-msgstr "Touche de vue du zoom"
+msgstr "Touche zoomer"
#: src/settings_translation_file.cpp
msgid "Viewing range"
msgstr "Plage de visualisation"
#: src/settings_translation_file.cpp
-msgid "Virtual joystick triggers aux button"
-msgstr "Manette virtuelle déclenche le bouton aux"
+msgid "Virtual joystick triggers Aux1 button"
+msgstr "Manette virtuelle déclenche le bouton Aux1"
#: src/settings_translation_file.cpp
msgid "Volume"
@@ -7125,7 +7465,7 @@ msgstr "Environnement mouvant"
#: src/settings_translation_file.cpp
msgid "Waving leaves"
-msgstr "Feuilles d'arbres mouvantes"
+msgstr "Feuilles ondulantes"
#: src/settings_translation_file.cpp
msgid "Waving liquids"
@@ -7133,19 +7473,23 @@ msgstr "Liquides ondulants"
#: src/settings_translation_file.cpp
msgid "Waving liquids wave height"
-msgstr "Hauteur des vagues"
+msgstr "Hauteur des vagues des liquides ondulants"
#: src/settings_translation_file.cpp
msgid "Waving liquids wave speed"
-msgstr "Vitesse de mouvement des liquides"
+msgstr "Vitesse de mouvement des liquides ondulants"
#: src/settings_translation_file.cpp
msgid "Waving liquids wavelength"
-msgstr "Espacement des vagues de liquides"
+msgstr "Longueur d'onde des liquides ondulants"
#: src/settings_translation_file.cpp
msgid "Waving plants"
-msgstr "Plantes mouvantes"
+msgstr "Plantes ondulantes"
+
+#: src/settings_translation_file.cpp
+msgid "Weblink color"
+msgstr "Couleur du lien web"
#: src/settings_translation_file.cpp
msgid ""
@@ -7153,9 +7497,9 @@ msgid ""
"filtered in software, but some images are generated directly\n"
"to hardware (e.g. render-to-texture for nodes in inventory)."
msgstr ""
-"Quand gui_scaling_filter est activé, tous les images du GUI sont\n"
-"filtrées dans Minetest, mais quelques images sont générées directement\n"
-"par le matériel (ex. : textures des blocs dans l'inventaire)."
+"Quand « gui_scaling_filter » est activé, tous les images du GUI sont "
+"filtrées par le logiciel, mais certaines sont générées directement par le "
+"matériel (ex. : textures des blocs dans l'inventaire)."
#: src/settings_translation_file.cpp
msgid ""
@@ -7164,11 +7508,11 @@ msgid ""
"to the old scaling method, for video drivers that don't\n"
"properly support downloading textures back from hardware."
msgstr ""
-"Quand gui_scaling_filter_txr2img est activé, c'est Minetest qui s'occupe de\n"
-"la mise à l'échelle des images et non votre matériel. Si désactivé,\n"
-"l'ancienne méthode de mise à l'échelle est utilisée, pour les pilotes "
-"vidéos\n"
-"qui ne supportent pas le chargement des textures depuis le matériel."
+"Quand « gui_scaling_filter_txr2img » est activé, copier les images du "
+"matériel au logiciel pour mise à l'échelle.\n"
+"Si désactivé, l'ancienne méthode de mise à l'échelle est utilisée, pour les "
+"pilotes vidéos qui ne supportent pas le chargement des textures depuis le "
+"matériel."
#: src/settings_translation_file.cpp
msgid ""
@@ -7176,9 +7520,8 @@ msgid ""
"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.\n"
+"memory. Powers of 2 are recommended. This setting is ONLY applied if\n"
+"bilinear/trilinear/anisotropic filtering is enabled.\n"
"This is also used as the base node texture size for world-aligned\n"
"texture autoscaling."
msgstr ""
@@ -7186,27 +7529,16 @@ msgstr ""
"basse résolution peuvent être brouillées. Elles seront donc automatiquement "
"agrandies avec l'interpolation du plus proche voisin pour garder des pixels "
"moins floues. Ceci détermine la taille de la texture minimale pour les "
-"textures agrandies ; les valeurs plus hautes rendent plus détaillées, mais "
-"nécessitent plus de mémoire. Les puissances de 2 sont recommandées. Définir "
-"une valeur supérieure à 1 peut ne pas avoir d'effet visible sauf si le "
-"filtrage bilinéaire/trilinéaire/anisotrope est activé.\n"
-"Ceci est également utilisée comme taille de texture de nœud par défaut pour "
-"l'agrandissement des textures basé sur le monde."
-
-#: src/settings_translation_file.cpp
-msgid ""
-"Whether FreeType fonts are used, requires FreeType support to be compiled "
-"in.\n"
-"If disabled, bitmap and XML vectors fonts are used instead."
-msgstr ""
-"Détermine l'utilisation des polices Freetype. Nécessite une compilation avec "
-"le support Freetype.\n"
-"Si désactivée, des polices bitmap et en vecteurs XML seront utilisé en "
-"remplacement."
+"textures agrandies ; les valeurs plus hautes rendent plus détaillées, mais "
+"nécessitent plus de mémoire. Les puissances de 2 sont recommandées. Ce "
+"paramètre est appliqué uniquement si le filtrage bilinéaire/trilinéaire/"
+"anisotrope est activé.\n"
+"Ceci est également utilisée comme taille de texture de nœud de base pour "
+"l'agrandissement automatique des textures alignées sur le monde."
#: src/settings_translation_file.cpp
msgid ""
-"Whether nametag backgrounds should be shown by default.\n"
+"Whether name tag backgrounds should be shown by default.\n"
"Mods may still set a background."
msgstr ""
"Si l'arrière-plan des badges doit être affiché par défaut.\n"
@@ -7214,7 +7546,9 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Whether node texture animations should be desynchronized per mapblock."
-msgstr "Détermine la désynchronisation des textures animées par mapblock."
+msgstr ""
+"Détermine la désynchronisation des animations de texture de nœud par bloc de "
+"carte."
#: src/settings_translation_file.cpp
msgid ""
@@ -7222,7 +7556,7 @@ msgid ""
"Deprecated, use the setting player_transfer_distance instead."
msgstr ""
"Détermine l'exposition illimitée des noms de joueurs aux autres clients.\n"
-"Obsolète : utiliser l'option player_transfer_distance à la place."
+"Obsolète : utiliser le paramètre « player_transfer_distance » à la place."
#: src/settings_translation_file.cpp
msgid "Whether to allow players to damage and kill each other."
@@ -7234,7 +7568,8 @@ msgid ""
"Set this to true if your server is set up to restart automatically."
msgstr ""
"S’il faut demander aux clients de se reconnecter après un crash (Lua).\n"
-"Activez-le si votre serveur est paramétré pour redémarrer automatiquement."
+"Définir sur Activer si le serveur est paramétré pour redémarrer "
+"automatiquement."
#: src/settings_translation_file.cpp
msgid "Whether to fog out the end of the visible area."
@@ -7247,23 +7582,23 @@ msgid ""
"In-game, you can toggle the mute state with the mute key or by using the\n"
"pause menu."
msgstr ""
-"S'il faut mettre les sons en sourdine. Vous pouvez désactiver les sons à "
-"tout moment, sauf si\n"
-"le système de sonorisation est désactivé (enable_sound=false).\n"
-"Dans le jeu, vous pouvez passer en mode silencieux avec la touche de mise en "
-"sourdine ou en utilisant le\n"
-"menu pause."
+"S'il faut couper le son. Vous pouvez réactiver le son à tout moment, sauf si "
+"le système audio est désactivé (« enable_sound=false »).\n"
+"Dans le jeu, vous pouvez basculer l'état du son avec la touche « Muet » ou "
+"en utilisant le menu pause."
#: src/settings_translation_file.cpp
msgid ""
"Whether to show the client debug info (has the same effect as hitting F5)."
msgstr ""
-"Détermine la visibilité des infos de débogage du client (même effet que "
-"taper F5)."
+"Détermine la visibilité des informations de débogage du client (même effet "
+"que taper F5)."
#: src/settings_translation_file.cpp
-msgid "Width component of the initial window size."
-msgstr "Composant de largeur de la taille initiale de la fenêtre."
+msgid "Width component of the initial window size. Ignored in fullscreen mode."
+msgstr ""
+"Composant de largeur de la taille initiale de la fenêtre. Ignoré en mode "
+"plein écran."
#: src/settings_translation_file.cpp
msgid "Width of the selection box lines around nodes."
@@ -7275,9 +7610,9 @@ msgid ""
"background.\n"
"Contains the same information as the file debug.txt (default name)."
msgstr ""
-"Systèmes Windows seulement : démarrer Minetest avec la fenêtre de commandes\n"
-"en arrière-plan. Contient les mêmes informations que dans debug.txt (nom par "
-"défaut)."
+"Systèmes Windows seulement : démarrer Minetest avec la fenêtre de ligne de "
+"commande en arrière-plan. Contient les mêmes informations que le fichier "
+"« debug.txt » (nom par défaut)."
#: src/settings_translation_file.cpp
msgid ""
@@ -7301,15 +7636,12 @@ msgid ""
"Warning: This option is EXPERIMENTAL!"
msgstr ""
"Les textures alignées sur le monde peuvent être mises à l'échelle pour "
-"couvrir plusieurs nœuds. Cependant,\n"
-"le serveur peut ne pas envoyer l'échelle que vous voulez, surtout si vous "
-"utilisez\n"
-"un pack de textures spécialement conçu ; avec cette option, le client "
-"essaie\n"
-"de déterminer l'échelle automatiquement en fonction de la taille de la "
-"texture.\n"
-"Voir aussi texture_min_size.\n"
-"Avertissement : Cette option est EXPÉRIMENTALE !"
+"couvrir plusieurs nœuds. Cependant, le serveur peut ne pas envoyer l'échelle "
+"que vous voulez, surtout si vous utilisez un pack de textures spécialement "
+"conçu ; avec cette option, le client essaie de déterminer l'échelle "
+"automatiquement en fonction de la taille de la texture.\n"
+"Voir aussi « texture_min_size ».\n"
+"Avertissement : cette option est EXPÉRIMENTALE !"
#: src/settings_translation_file.cpp
msgid "World-aligned textures mode"
@@ -7329,12 +7661,13 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Y of upper limit of large caves."
-msgstr ""
-"Coordonnée Y de la limite supérieure des grandes grottes pseudo-aléatoires."
+msgstr "Limite haute Y des grandes grottes."
#: src/settings_translation_file.cpp
msgid "Y-distance over which caverns expand to full size."
-msgstr "La distance Y jusqu'à laquelle la caverne peut s'étendre."
+msgstr ""
+"La distance Y jusqu'à laquelle les cavernes s'étendent à leur taille "
+"maximale."
#: src/settings_translation_file.cpp
msgid ""
@@ -7343,75 +7676,49 @@ msgid ""
"For a solid floatland layer, this controls the height of hills/mountains.\n"
"Must be less than or equal to half the distance between the Y limits."
msgstr ""
-"Hauteur-Y à laquelle les îles volantes commence à rétrécir.\n"
+"Hauteur-Y à laquelle les terrains flottants commencent à rétrécir.\n"
"L'effilage comment à cette distance de la limite en Y.\n"
-"Pour une courche solide de terre suspendue, ceci contrôle la hauteur des "
+"Pour une couche solide de terrain flottant, ceci contrôle la hauteur des "
"montagnes.\n"
"Doit être égale ou moindre à la moitié de la distance entre les limites Y."
#: src/settings_translation_file.cpp
msgid "Y-level of average terrain surface."
-msgstr "Hauteur (Y) moyenne de la surface du terrain."
+msgstr "Limite moyenne Y de la surface du terrain."
#: src/settings_translation_file.cpp
msgid "Y-level of cavern upper limit."
-msgstr "Limite haute de génération des cavernes."
+msgstr "Limite haute Y de génération des cavernes."
#: src/settings_translation_file.cpp
msgid "Y-level of higher terrain that creates cliffs."
-msgstr "Hauteur Y du plus haut terrain qui crée des falaises."
+msgstr "Limite Y du plus haut terrain qui crée des falaises."
#: src/settings_translation_file.cpp
msgid "Y-level of lower terrain and seabed."
-msgstr "Hauteur Y du plus bas terrain et des fonds marins."
+msgstr "Limite Y du plus bas terrain et des fonds marins."
#: src/settings_translation_file.cpp
msgid "Y-level of seabed."
-msgstr "Hauteur (Y) du fond marin."
+msgstr "Limite Y du fond marin."
#: src/settings_translation_file.cpp
-msgid ""
-"ZLib compression level to use when saving mapblocks to disk.\n"
-"-1 - Zlib's default compression level\n"
-"0 - no compresson, fastest\n"
-"9 - best compression, slowest\n"
-"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)"
-msgstr ""
-"Niveau de compression Zlib à utiliser lors de la sauvegarde des mapblocks "
-"sur le disque.\n"
-"-1 - niveau de compression de Zlib par défaut\n"
-"0 - aucune compression, le plus rapide\n"
-"9 - meilleure compression, le plus lent\n"
-"(les niveaux 1-3 utilisent la méthode « rapide », 4-9 utilisent la méthode "
-"normale)"
-
-#: src/settings_translation_file.cpp
-msgid ""
-"ZLib compression level to use when sending mapblocks to the client.\n"
-"-1 - Zlib's default compression level\n"
-"0 - no compresson, fastest\n"
-"9 - best compression, slowest\n"
-"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)"
-msgstr ""
-"Niveau de compression Zlib à utiliser lors de l'envoi des mapblocks au "
-"client.\n"
-"-1 - niveau de compression de Zlib par défaut\n"
-"0 - aucune compression, le plus rapide\n"
-"9 - meilleure compression, le plus lent\n"
-"(les niveaux 1-3 utilisent la méthode « rapide », 4-9 utilisent la méthode "
-"normale)"
+msgid "cURL file download timeout"
+msgstr "Délai d'interruption de cURL lors d'un téléchargement de fichier"
#: src/settings_translation_file.cpp
-msgid "cURL file download timeout"
-msgstr "Délais d'interruption de cURL lors d'un téléchargement de fichier"
+msgid "cURL interactive timeout"
+msgstr "Délai d'interruption interactive de cURL"
#: src/settings_translation_file.cpp
msgid "cURL parallel limit"
msgstr "Limite parallèle de cURL"
-#: src/settings_translation_file.cpp
-msgid "cURL timeout"
-msgstr "Délais d'interruption de cURL"
+#~ msgid "- Creative Mode: "
+#~ msgstr "– Mode créatif : "
+
+#~ msgid "- Damage: "
+#~ msgstr "– Dégâts : "
#~ msgid ""
#~ "0 = parallax occlusion with slope information (faster).\n"
@@ -7420,6 +7727,9 @@ msgstr "Délais d'interruption de cURL"
#~ "0 = occlusion parallaxe avec des informations de pente (plus rapide).\n"
#~ "1 = cartographie en relief (plus lent, plus précis)."
+#~ msgid "Address / Port"
+#~ msgstr "Adresse / Port"
+
#~ msgid ""
#~ "Adjust the gamma encoding for the light tables. Higher numbers are "
#~ "brighter.\n"
@@ -7439,6 +7749,9 @@ msgstr "Délais d'interruption de cURL"
#~ msgid "Back"
#~ msgstr "Retour"
+#~ msgid "Bits per pixel (aka color depth) in fullscreen mode."
+#~ msgstr "Bits par pixel (profondeur de couleur) en mode plein-écran."
+
#~ msgid "Bump Mapping"
#~ msgstr "Placage de relief"
@@ -7481,13 +7794,26 @@ msgstr "Délais d'interruption de cURL"
#~ "Contrôle la largeur des tunnels, une valeur plus petite crée des tunnels "
#~ "plus larges."
+#~ msgid "Credits"
+#~ msgstr "Crédits"
+
#~ msgid "Crosshair color (R,G,B)."
#~ msgstr "Couleur du réticule (R,G,B)."
+#~ msgid "Damage enabled"
+#~ msgstr "Dégâts activés"
+
#~ msgid "Darkness sharpness"
#~ msgstr "Démarcation de l'obscurité"
#~ msgid ""
+#~ "Default timeout for cURL, stated in milliseconds.\n"
+#~ "Only has an effect if compiled with cURL."
+#~ msgstr ""
+#~ "Délais d'interruption de cURL par défaut, établi en millisecondes.\n"
+#~ "Seulement appliqué si Minetest est compilé avec cURL."
+
+#~ msgid ""
#~ "Defines areas of floatland smooth terrain.\n"
#~ "Smooth floatlands occur when noise > 0."
#~ msgstr ""
@@ -7546,6 +7872,15 @@ msgstr "Délais d'interruption de cURL"
#~ msgid "FPS in pause menu"
#~ msgstr "FPS maximum sur le menu pause"
+#~ msgid "Fallback font shadow"
+#~ msgstr "Ombre de la police alternative"
+
+#~ msgid "Fallback font shadow alpha"
+#~ msgstr "Opacité de l'ombre de la police alternative"
+
+#~ msgid "Fallback font size"
+#~ msgstr "Taille de la police alternative"
+
#~ msgid "Floatland base height noise"
#~ msgstr "Le bruit de hauteur de base des terres flottantes"
@@ -7555,6 +7890,15 @@ msgstr "Délais d'interruption de cURL"
#~ msgid "Font shadow alpha (opaqueness, between 0 and 255)."
#~ msgstr "Niveau d'opacité de l'ombre de la police (entre 0 et 255)."
+#~ msgid "Font size of the fallback font in point (pt)."
+#~ msgstr "Taille de police secondaire au point (pt)."
+
+#~ msgid "FreeType fonts"
+#~ msgstr "Polices Freetype"
+
+#~ msgid "Full screen BPP"
+#~ msgstr "Bits par pixel en mode plein écran"
+
#~ msgid "Gamma"
#~ msgstr "Gamma"
@@ -7564,9 +7908,15 @@ msgstr "Délais d'interruption de cURL"
#~ msgid "Generate normalmaps"
#~ msgstr "Normal mapping"
+#~ msgid "High-precision FPU"
+#~ msgstr "FPU de haute précision"
+
#~ msgid "IPv6 support."
#~ msgstr "Support IPv6."
+#~ msgid "Install: file: \"$1\""
+#~ msgstr "Installation : fichier : « $1 »"
+
#~ msgid "Lava depth"
#~ msgstr "Profondeur de lave"
@@ -7582,6 +7932,11 @@ msgstr "Délais d'interruption de cURL"
#~ msgid "Main menu style"
#~ msgstr "Style du menu principal"
+#~ msgid "Makes DirectX work with LuaJIT. Disable if it causes troubles."
+#~ msgstr ""
+#~ "Rendre DirectX compatible avec LuaJIT. Désactiver si cela cause des "
+#~ "problèmes."
+
#~ msgid "Minimap in radar mode, Zoom x2"
#~ msgstr "Mini-carte en mode radar, zoom x2"
@@ -7594,6 +7949,9 @@ msgstr "Délais d'interruption de cURL"
#~ msgid "Minimap in surface mode, Zoom x4"
#~ msgstr "Mini-carte en mode surface, zoom x4"
+#~ msgid "Name / Password"
+#~ msgstr "Nom / Mot de passe"
+
#~ msgid "Name/Password"
#~ msgstr "Nom / Mot de passe"
@@ -7612,6 +7970,12 @@ msgstr "Délais d'interruption de cURL"
#~ msgid "Ok"
#~ msgstr "Ok"
+#~ msgid ""
+#~ "Opaqueness (alpha) of the shadow behind the fallback font, between 0 and "
+#~ "255."
+#~ msgstr ""
+#~ "Opacité (alpha) de l'ombre derrière la police secondaire, entre 0 et 255."
+
#~ msgid "Overall bias of parallax occlusion effect, usually scale/2."
#~ msgstr "Bias général de l'occlusion parallaxe, habituellement échelle/2."
@@ -7648,15 +8012,42 @@ msgstr "Délais d'interruption de cURL"
#~ msgid "Projecting dungeons"
#~ msgstr "Projection des donjons"
+#~ msgid "PvP enabled"
+#~ msgstr "JcJ activé"
+
#~ msgid "Reset singleplayer world"
#~ msgstr "Réinitialiser le monde"
#~ msgid "Select Package File:"
#~ msgstr "Sélectionner le fichier du mod :"
+#~ msgid ""
+#~ "Set the shadow update time.\n"
+#~ "Lower value means shadows and map updates faster, but it consume more "
+#~ "resources.\n"
+#~ "Minimun value 0.001 seconds max value 0.2 seconds"
+#~ msgstr ""
+#~ "Définit le temps de mise à jour des ombres.\n"
+#~ "Une valeur plus faible signifie que les ombres et les mises à jour de la "
+#~ "carte sont plus rapides, mais cela consomme plus de ressources.\n"
+#~ "Valeur minimale 0,001 seconde et maximale 0,2 seconde."
+
#~ msgid "Shadow limit"
#~ msgstr "Limite des ombres"
+#~ msgid ""
+#~ "Shadow offset (in pixels) of the fallback font. If 0, then shadow will "
+#~ "not be drawn."
+#~ msgstr ""
+#~ "Décalage de l'ombre de la police de secours (en pixel). Aucune ombre si "
+#~ "la valeur est 0."
+
+#~ msgid "Special"
+#~ msgstr "Spécial"
+
+#~ msgid "Special key"
+#~ msgstr "Touche spéciale"
+
#~ msgid "Start Singleplayer"
#~ msgstr "Démarrer une partie solo"
@@ -7669,6 +8060,9 @@ msgstr "Délais d'interruption de cURL"
#~ msgid "This font will be used for certain languages."
#~ msgstr "Cette police sera utilisée pour certaines langues."
+#~ msgid "To enable shaders the OpenGL driver needs to be used."
+#~ msgstr "Pour activer les shaders, le pilote OpenGL doit être utilisé."
+
#~ msgid "Toggle Cinematic"
#~ msgstr "Mode cinématique"
@@ -7692,6 +8086,16 @@ msgstr "Délais d'interruption de cURL"
#~ msgid "Waving water"
#~ msgstr "Vagues"
+#~ msgid ""
+#~ "Whether FreeType fonts are used, requires FreeType support to be compiled "
+#~ "in.\n"
+#~ "If disabled, bitmap and XML vectors fonts are used instead."
+#~ msgstr ""
+#~ "Détermine l'utilisation des polices Freetype. Nécessite une compilation "
+#~ "avec le support Freetype.\n"
+#~ "Si désactivée, des polices bitmap et en vecteurs XML seront utilisé en "
+#~ "remplacement."
+
#~ msgid "Whether dungeons occasionally project from the terrain."
#~ msgstr "Si les donjons font parfois saillie du terrain."
@@ -7708,3 +8112,9 @@ msgstr "Délais d'interruption de cURL"
#~ msgid "Yes"
#~ msgstr "Oui"
+
+#~ msgid "You died."
+#~ msgstr "Vous êtes mort."
+
+#~ msgid "needs_fallback_font"
+#~ msgstr "no"
diff --git a/po/gd/minetest.po b/po/gd/minetest.po
index e7147d3b5..dcc811dd4 100644
--- a/po/gd/minetest.po
+++ b/po/gd/minetest.po
@@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: minetest\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-02-23 19:03+0100\n"
-"PO-Revision-Date: 2020-06-22 17:56+0000\n"
+"POT-Creation-Date: 2022-01-25 23:19+0100\n"
+"PO-Revision-Date: 2021-08-19 06:36+0000\n"
"Last-Translator: GunChleoc <fios@foramnagaidhlig.net>\n"
"Language-Team: Gaelic <https://hosted.weblate.org/projects/minetest/minetest/"
"gd/>\n"
@@ -18,7 +18,44 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=4; plural=(n==1 || n==11) ? 0 : (n==2 || n==12) ? 1 : "
"(n > 2 && n < 20) ? 2 : 3;\n"
-"X-Generator: Weblate 4.2-dev\n"
+"X-Generator: Weblate 4.8-dev\n"
+
+#: builtin/client/chatcommands.lua
+msgid "Clear the out chat queue"
+msgstr ""
+
+#: builtin/client/chatcommands.lua
+msgid "Empty command."
+msgstr ""
+
+#: builtin/client/chatcommands.lua
+#, fuzzy
+msgid "Exit to main menu"
+msgstr "Prìomh chlàr-taice"
+
+#: builtin/client/chatcommands.lua
+msgid "Invalid command: "
+msgstr ""
+
+#: builtin/client/chatcommands.lua
+msgid "Issued command: "
+msgstr ""
+
+#: builtin/client/chatcommands.lua
+msgid "List online players"
+msgstr ""
+
+#: builtin/client/chatcommands.lua
+msgid "Online players: "
+msgstr ""
+
+#: builtin/client/chatcommands.lua
+msgid "The out chat queue is now empty."
+msgstr ""
+
+#: builtin/client/chatcommands.lua
+msgid "This command is disabled by server."
+msgstr ""
#: builtin/client/death_formspec.lua src/client/game.cpp
msgid "Respawn"
@@ -28,11 +65,40 @@ msgstr ""
msgid "You died"
msgstr ""
+#: builtin/common/chatcommands.lua
+msgid "Available commands:"
+msgstr ""
+
+#: builtin/common/chatcommands.lua
+msgid "Available commands: "
+msgstr ""
+
+#: builtin/common/chatcommands.lua
+msgid "Command not available: "
+msgstr ""
+
+#: builtin/common/chatcommands.lua
+msgid "Get help for commands"
+msgstr ""
+
+#: builtin/common/chatcommands.lua
+msgid ""
+"Use '.help <cmd>' to get more information, or '.help all' to list everything."
+msgstr ""
+
+#: builtin/common/chatcommands.lua
+msgid "[all | <cmd>]"
+msgstr ""
+
#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp
msgid "OK"
msgstr ""
#: builtin/fstk/ui.lua
+msgid "<none available>"
+msgstr ""
+
+#: builtin/fstk/ui.lua
msgid "An error occurred in a Lua script:"
msgstr ""
@@ -234,6 +300,12 @@ msgid "Install missing dependencies"
msgstr ""
#: builtin/mainmenu/dlg_contentstore.lua
+#, fuzzy
+msgid "Install: Unsupported file type or broken archive"
+msgstr ""
+"Stàladh: Faidhle dhen t-seòrsa “$1†ris nach eil taic no tasglann bhriste"
+
+#: builtin/mainmenu/dlg_contentstore.lua
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Mods"
msgstr ""
@@ -533,7 +605,7 @@ msgstr ""
msgid "Browse"
msgstr ""
-#: builtin/mainmenu/dlg_settings_advanced.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_settings.lua
msgid "Disabled"
msgstr ""
@@ -558,7 +630,7 @@ msgid "Offset"
msgstr ""
#: builtin/mainmenu/dlg_settings_advanced.lua
-msgid "Persistance"
+msgid "Persistence"
msgstr ""
#: builtin/mainmenu/dlg_settings_advanced.lua
@@ -577,7 +649,7 @@ msgstr ""
msgid "Scale"
msgstr ""
-#: builtin/mainmenu/dlg_settings_advanced.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_online.lua
msgid "Search"
msgstr ""
@@ -669,15 +741,6 @@ msgid "Install Mod: Unable to find suitable folder name for modpack $1"
msgstr ""
#: builtin/mainmenu/pkgmgr.lua
-msgid "Install: Unsupported file type \"$1\" or broken archive"
-msgstr ""
-"Stàladh: Faidhle dhen t-seòrsa “$1†ris nach eil taic no tasglann bhriste"
-
-#: builtin/mainmenu/pkgmgr.lua
-msgid "Install: file: \"$1\""
-msgstr ""
-
-#: builtin/mainmenu/pkgmgr.lua
msgid "Unable to find a valid mod or modpack"
msgstr ""
@@ -709,6 +772,40 @@ msgstr ""
msgid "Try reenabling public serverlist and check your internet connection."
msgstr ""
+#: builtin/mainmenu/tab_about.lua
+msgid "About"
+msgstr ""
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Active Contributors"
+msgstr ""
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Active renderer:"
+msgstr ""
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Core Developers"
+msgstr ""
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Open User Data Directory"
+msgstr ""
+
+#: builtin/mainmenu/tab_about.lua
+msgid ""
+"Opens the directory that contains user-provided worlds, games, mods,\n"
+"and texture packs in a file manager / explorer."
+msgstr ""
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Previous Contributors"
+msgstr ""
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Previous Core Developers"
+msgstr ""
+
#: builtin/mainmenu/tab_content.lua
msgid "Browse online content"
msgstr ""
@@ -749,36 +846,6 @@ msgstr ""
msgid "Use Texture Pack"
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 "Open User Data Directory"
-msgstr ""
-
-#: builtin/mainmenu/tab_credits.lua
-msgid ""
-"Opens the directory that contains user-provided worlds, games, mods,\n"
-"and texture packs in a file manager / explorer."
-msgstr ""
-
-#: builtin/mainmenu/tab_credits.lua
-msgid "Previous Contributors"
-msgstr ""
-
-#: builtin/mainmenu/tab_credits.lua
-msgid "Previous Core Developers"
-msgstr ""
-
#: builtin/mainmenu/tab_local.lua
msgid "Announce Server"
msgstr ""
@@ -807,7 +874,7 @@ msgstr ""
msgid "Install games from ContentDB"
msgstr "Stàlaich geamannan o ContentDB"
-#: builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
msgid "Name"
msgstr ""
@@ -819,7 +886,7 @@ msgstr ""
msgid "No world created or selected!"
msgstr ""
-#: builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
msgid "Password"
msgstr ""
@@ -827,7 +894,7 @@ msgstr ""
msgid "Play Game"
msgstr ""
-#: builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
msgid "Port"
msgstr ""
@@ -848,8 +915,13 @@ msgid "Start Game"
msgstr ""
#: builtin/mainmenu/tab_online.lua
-msgid "Address / Port"
-msgstr "Seòladh / Port"
+#, fuzzy
+msgid "Address"
+msgstr " "
+
+#: builtin/mainmenu/tab_online.lua src/client/keycode.cpp
+msgid "Clear"
+msgstr ""
#: builtin/mainmenu/tab_online.lua
msgid "Connect"
@@ -859,33 +931,43 @@ msgstr ""
msgid "Creative mode"
msgstr ""
+#. ~ PvP = Player versus Player
#: builtin/mainmenu/tab_online.lua
-msgid "Damage enabled"
-msgstr ""
+#, fuzzy
+msgid "Damage / PvP"
+msgstr "– Dochann: "
#: builtin/mainmenu/tab_online.lua
msgid "Del. Favorite"
msgstr ""
#: builtin/mainmenu/tab_online.lua
-msgid "Favorite"
+msgid "Favorites"
msgstr ""
#: builtin/mainmenu/tab_online.lua
-msgid "Join Game"
+msgid "Incompatible Servers"
msgstr ""
#: builtin/mainmenu/tab_online.lua
-msgid "Name / Password"
+msgid "Join Game"
msgstr ""
#: builtin/mainmenu/tab_online.lua
msgid "Ping"
msgstr ""
-#. ~ PvP = Player versus Player
#: builtin/mainmenu/tab_online.lua
-msgid "PvP enabled"
+#, fuzzy
+msgid "Public Servers"
+msgstr "Aibhnean boga"
+
+#: builtin/mainmenu/tab_online.lua
+msgid "Refresh"
+msgstr ""
+
+#: builtin/mainmenu/tab_online.lua
+msgid "Server Description"
msgstr ""
#: builtin/mainmenu/tab_settings.lua
@@ -928,11 +1010,31 @@ msgstr ""
msgid "Connected Glass"
msgstr ""
+#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
+msgid "Dynamic shadows"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Dynamic shadows: "
+msgstr ""
+
#: builtin/mainmenu/tab_settings.lua
msgid "Fancy Leaves"
msgstr ""
#: builtin/mainmenu/tab_settings.lua
+msgid "High"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Low"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Medium"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
msgid "Mipmap"
msgstr ""
@@ -1004,12 +1106,6 @@ msgstr ""
msgid "Texturing:"
msgstr ""
-#: builtin/mainmenu/tab_settings.lua
-msgid "To enable shaders the OpenGL driver needs to be used."
-msgstr ""
-"Airson sgàileadairean a chur an comas, feumaidh tu draibhear OpenGL a "
-"chleachdadh."
-
#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
msgid "Tone Mapping"
msgstr ""
@@ -1023,6 +1119,14 @@ msgid "Trilinear Filter"
msgstr ""
#: builtin/mainmenu/tab_settings.lua
+msgid "Ultra High"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Very Low"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
msgid "Waving Leaves"
msgstr ""
@@ -1034,7 +1138,7 @@ msgstr ""
msgid "Waving Plants"
msgstr ""
-#: src/client/client.cpp
+#: src/client/client.cpp src/client/game.cpp
msgid "Connection timed out."
msgstr ""
@@ -1063,7 +1167,7 @@ msgid "Connection error (timed out?)"
msgstr ""
#: src/client/clientlauncher.cpp
-msgid "Could not find or load game \""
+msgid "Could not find or load game: "
msgstr ""
#: src/client/clientlauncher.cpp
@@ -1096,18 +1200,6 @@ msgstr " "
msgid "Provided world path doesn't exist: "
msgstr " "
-#. ~ DO NOT TRANSLATE THIS LITERALLY!
-#. This is a special string. Put either "no" or "yes"
-#. into the translation field (literally).
-#. Choose "yes" if the language requires use of the fallback
-#. font, "no" otherwise.
-#. The fallback font is (normally) required for languages with
-#. non-Latin script, like Chinese.
-#. When in doubt, test your translation.
-#: src/client/fontengine.cpp
-msgid "needs_fallback_font"
-msgstr "no"
-
#: src/client/game.cpp
msgid ""
"\n"
@@ -1121,15 +1213,6 @@ msgstr " "
#: src/client/game.cpp
#, fuzzy
-msgid "- Creative Mode: "
-msgstr " "
-
-#: src/client/game.cpp
-msgid "- Damage: "
-msgstr "– Dochann: "
-
-#: src/client/game.cpp
-#, fuzzy
msgid "- Mode: "
msgstr " "
@@ -1155,6 +1238,15 @@ msgid "- Server Name: "
msgstr " "
#: src/client/game.cpp
+msgid "A serialization error occurred:"
+msgstr ""
+
+#: src/client/game.cpp
+#, c-format
+msgid "Access denied. Reason: %s"
+msgstr ""
+
+#: src/client/game.cpp
msgid "Automatic forward disabled"
msgstr ""
@@ -1163,6 +1255,22 @@ msgid "Automatic forward enabled"
msgstr ""
#: src/client/game.cpp
+msgid "Block bounds hidden"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Block bounds shown for all blocks"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Block bounds shown for current block"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Block bounds shown for nearby blocks"
+msgstr ""
+
+#: src/client/game.cpp
msgid "Camera update disabled"
msgstr ""
@@ -1171,6 +1279,10 @@ msgid "Camera update enabled"
msgstr ""
#: src/client/game.cpp
+msgid "Can't show block bounds (need 'basic_debug' privilege)"
+msgstr ""
+
+#: src/client/game.cpp
msgid "Change Password"
msgstr ""
@@ -1183,6 +1295,10 @@ msgid "Cinematic mode enabled"
msgstr "Tha am modh film an comas"
#: src/client/game.cpp
+msgid "Client disconnected"
+msgstr ""
+
+#: src/client/game.cpp
msgid "Client side scripting is disabled"
msgstr ""
@@ -1191,6 +1307,10 @@ msgid "Connecting to server..."
msgstr ""
#: src/client/game.cpp
+msgid "Connection failed for unknown reason"
+msgstr ""
+
+#: src/client/game.cpp
msgid "Continue"
msgstr ""
@@ -1228,6 +1348,11 @@ msgstr ""
"- %s: cabadaich\n"
#: src/client/game.cpp
+#, c-format
+msgid "Couldn't resolve address: %s"
+msgstr ""
+
+#: src/client/game.cpp
msgid "Creating client..."
msgstr ""
@@ -1344,6 +1469,10 @@ msgid "Minimap currently disabled by game or mod"
msgstr ""
#: src/client/game.cpp
+msgid "Multiplayer"
+msgstr ""
+
+#: src/client/game.cpp
msgid "Noclip mode disabled"
msgstr "Tha am modh gun bhearradh à comas"
@@ -1417,6 +1546,21 @@ msgstr ""
#: src/client/game.cpp
#, c-format
+msgid "The server is probably running a different version of %s."
+msgstr ""
+
+#: src/client/game.cpp
+#, c-format
+msgid "Unable to connect to %s because IPv6 is disabled"
+msgstr ""
+
+#: src/client/game.cpp
+#, c-format
+msgid "Unable to listen on %s because IPv6 is disabled"
+msgstr ""
+
+#: src/client/game.cpp
+#, c-format
msgid "Viewing range changed to %d"
msgstr ""
@@ -1485,10 +1629,6 @@ msgid "Caps Lock"
msgstr ""
#: src/client/keycode.cpp
-msgid "Clear"
-msgstr ""
-
-#: src/client/keycode.cpp
msgid "Control"
msgstr ""
@@ -1753,6 +1893,14 @@ msgstr ""
msgid "Minimap in texture mode"
msgstr ""
+#: src/gui/guiChatConsole.cpp
+msgid "Failed to open webpage"
+msgstr ""
+
+#: src/gui/guiChatConsole.cpp
+msgid "Opening webpage"
+msgstr ""
+
#: src/gui/guiConfirmRegistration.cpp src/gui/guiPasswordChange.cpp
msgid "Passwords do not match!"
msgstr ""
@@ -1776,7 +1924,7 @@ msgid "Proceed"
msgstr ""
#: src/gui/guiKeyChangeMenu.cpp
-msgid "\"Special\" = climb down"
+msgid "\"Aux1\" = climb down"
msgstr ""
#: src/gui/guiKeyChangeMenu.cpp
@@ -1788,10 +1936,18 @@ msgid "Automatic jumping"
msgstr ""
#: src/gui/guiKeyChangeMenu.cpp
+msgid "Aux1"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
msgid "Backward"
msgstr ""
#: src/gui/guiKeyChangeMenu.cpp
+msgid "Block bounds"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
msgid "Change camera"
msgstr ""
@@ -1880,10 +2036,6 @@ msgid "Sneak"
msgstr "Tàislich"
#: src/gui/guiKeyChangeMenu.cpp
-msgid "Special"
-msgstr ""
-
-#: src/gui/guiKeyChangeMenu.cpp
msgid "Toggle HUD"
msgstr ""
@@ -1944,8 +2096,8 @@ msgid "Muted"
msgstr ""
#: src/gui/guiVolumeChange.cpp
-#, fuzzy
-msgid "Sound Volume: "
+#, fuzzy, c-format
+msgid "Sound Volume: %d%%"
msgstr " "
#. ~ Imperative, as in "Enter/type in text".
@@ -1969,8 +2121,8 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"(Android) Use virtual joystick to trigger \"aux\" button.\n"
-"If enabled, virtual joystick will also tap \"aux\" button when out of main "
+"(Android) Use virtual joystick to trigger \"Aux1\" button.\n"
+"If enabled, virtual joystick will also tap \"Aux1\" button when out of main "
"circle."
msgstr ""
@@ -2057,10 +2209,10 @@ msgid ""
"a value range of approximately -2.0 to 2.0."
msgstr ""
"Riasladh 3D a mhìnicheas structar na tìre air fhleòd.\n"
-"Mura cleachd thu an luach tùsail, dh’fhaoidte gum fheàirrde thu gleus a chur "
-"air “scale†an riaslaidh (0.7 o thùs)\n"
-", on a dh’obraicheas foincseanan cinn-chaoil as fheàrr\n"
-"nuair a bhios an riasladh seo eadar mu -2.0 agus 2.0."
+"Mura cleachd thu an luach bunaiteach, dh’fhaoidte gum b’ fheàirrde thu\n"
+"gleus a chur air “scale†an riaslaidh (0.7 a ghnàth) on a dh’obraicheas "
+"foincseanan\n"
+"cinn-chaoil as fheàrr nuair a bhios an riasladh seo eadar mu -2.0 agus 2.0."
#: src/settings_translation_file.cpp
msgid "3D noise defining structure of river canyon walls."
@@ -2161,6 +2313,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Adjust the detected display density, used for scaling UI elements."
+msgstr ""
+
+#: src/settings_translation_file.cpp
#, c-format
msgid ""
"Adjusts the density of the floatland layer.\n"
@@ -2278,6 +2434,14 @@ msgid "Autoscaling mode"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Aux1 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Aux1 key for climbing/descending"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Backward key"
msgstr ""
@@ -2322,10 +2486,6 @@ msgid "Biome noise"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Bits per pixel (aka color depth) in fullscreen mode."
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Block send optimize distance"
msgstr ""
@@ -2426,6 +2586,15 @@ msgstr ""
"Is 0.0 an ìre as fhainne agus 1.0 an ìre as soilleire air an solas."
#: src/settings_translation_file.cpp
+msgid "Chat command time message threshold"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Chat commands"
+msgstr "Tha a’ chabadaich ’ga shealltainn"
+
+#: src/settings_translation_file.cpp
msgid "Chat font size"
msgstr ""
@@ -2458,8 +2627,9 @@ msgid "Chat toggle key"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Chatcommands"
-msgstr ""
+#, fuzzy
+msgid "Chat weblinks"
+msgstr "Tha a’ chabadaich ’ga shealltainn"
#: src/settings_translation_file.cpp
msgid "Chunk size"
@@ -2478,6 +2648,12 @@ msgid "Clean transparent textures"
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Clickable weblinks (middle-click or Ctrl+left-click) enabled in chat console "
+"output."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Client"
msgstr ""
@@ -2522,6 +2698,10 @@ msgid "Colored fog"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Colored shadows"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid ""
"Comma-separated list of flags to hide in the content repository.\n"
"\"nonfree\" can be used to hide packages which do not qualify as 'free "
@@ -2549,6 +2729,22 @@ msgid "Command key"
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Compression level to use when saving mapblocks to disk.\n"
+"-1 - use default compression level\n"
+"0 - least compression, fastest\n"
+"9 - best compression, slowest"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Compression level to use when sending mapblocks to the client.\n"
+"-1 - use default compression level\n"
+"0 - least compression, fastest\n"
+"9 - best compression, slowest"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Connect glass"
msgstr ""
@@ -2639,7 +2835,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"Crosshair alpha (opaqueness, between 0 and 255).\n"
-"Also controls the object crosshair color"
+"This also applies to the object crosshair."
msgstr ""
#: src/settings_translation_file.cpp
@@ -2704,7 +2900,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Default privileges"
-msgstr "Sochairean tùsail"
+msgstr "Sochairean bunaiteach"
#: src/settings_translation_file.cpp
msgid "Default report format"
@@ -2716,8 +2912,9 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Default timeout for cURL, stated in milliseconds.\n"
-"Only has an effect if compiled with cURL."
+"Define shadow filtering quality.\n"
+"This simulates the soft shadows effect by applying a PCF or Poisson disk\n"
+"but also uses more resources."
msgstr ""
#: src/settings_translation_file.cpp
@@ -2837,6 +3034,10 @@ msgid "Disallow empty passwords"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Display Density Scaling Factor"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Domain name of server, to be displayed in the serverlist."
msgstr ""
@@ -2881,6 +3082,19 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Enable Poisson disk filtering.\n"
+"On true uses Poisson disk to make \"soft shadows\". Otherwise uses PCF "
+"filtering."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable colored shadows.\n"
+"On true translucent nodes cast colored shadows. This is expensive."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Enable console window"
msgstr ""
@@ -2989,6 +3203,12 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Enables tradeoffs that reduce CPU load or increase rendering performance\n"
+"at the expense of minor visual glitches that do not impact game playability."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Engine profiling data print interval"
msgstr ""
@@ -3035,18 +3255,6 @@ msgid "Fallback font path"
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 ""
@@ -3063,8 +3271,9 @@ msgid "Fast movement"
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
-"Fast movement (via the \"special\" key).\n"
+"Fast movement (via the \"Aux1\" key).\n"
"This requires the \"fast\" privilege on the server."
msgstr ""
"Gluasad luath (leis an iuchair “shònraichteâ€).\n"
@@ -3100,9 +3309,9 @@ msgstr "Mapadh tòna film"
#: 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."
+"which PNG optimizers usually discard, often resulting in dark or\n"
+"light edges to transparent textures. Apply a filter to clean that up\n"
+"at texture load time. This is automatically enabled if mipmapping is enabled."
msgstr ""
#: src/settings_translation_file.cpp
@@ -3194,15 +3403,15 @@ msgid "Font size"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Font size of the default font in point (pt)."
+msgid "Font size divisible by"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Font size of the fallback font in point (pt)."
+msgid "Font size of the default font where 1 unit = 1 pixel at 96 DPI"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Font size of the monospace font in point (pt)."
+msgid "Font size of the monospace font where 1 unit = 1 pixel at 96 DPI"
msgstr ""
#: src/settings_translation_file.cpp
@@ -3213,6 +3422,17 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"For pixel-style fonts that do not scale well, this ensures that font sizes "
+"used\n"
+"with this font will always be divisible by this value, in pixels. For "
+"instance,\n"
+"a pixel font 16 pixels tall should have this set to 16, so it will only ever "
+"be\n"
+"sized 16, 32, 48, etc., so a mod requesting a size of 25 will get 32."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Format of player chat messages. The following strings are valid "
"placeholders:\n"
"@name, @message, @timestamp (optional)"
@@ -3271,10 +3491,6 @@ msgid "Fraction of the visible distance at which fog starts to be rendered"
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)."
@@ -3301,10 +3517,6 @@ msgid "Full screen"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Full screen BPP"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Fullscreen mode."
msgstr ""
@@ -3325,10 +3537,11 @@ msgid "Global callbacks"
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
"Global map generation attributes.\n"
"In Mapgen v6 the 'decorations' flag controls all decorations except trees\n"
-"and junglegrass, in all other mapgens this flag controls all decorations."
+"and jungle grass, in all other mapgens this flag controls all decorations."
msgstr ""
"Buadhan gintinn mapa uile-choitcheann.\n"
"Ann an gineadair nam mapa v6, stiùirichidh bratach “decorations†sgeadachadh "
@@ -3406,7 +3619,8 @@ msgid "Heat noise"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Height component of the initial window size."
+msgid ""
+"Height component of the initial window size. Ignored in fullscreen mode."
msgstr ""
#: src/settings_translation_file.cpp
@@ -3418,10 +3632,6 @@ msgid "Height select noise"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "High-precision FPU"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Hill steepness"
msgstr ""
@@ -3651,9 +3861,9 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
-"If disabled, \"special\" key is used to fly fast if both fly and fast mode "
-"are\n"
+"If disabled, \"Aux1\" key is used to fly fast if both fly and fast mode are\n"
"enabled."
msgstr ""
"Ma tha seo à comas, thèid iuchair “shònraichte†a chleachdadh airson "
@@ -3680,9 +3890,10 @@ msgstr ""
"Bidh feum air sochair “noclip†on fhrithealaiche."
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
-"If enabled, \"special\" key instead of \"sneak\" key is used for climbing "
-"down and\n"
+"If enabled, \"Aux1\" key instead of \"Sneak\" key is used for climbing down "
+"and\n"
"descending."
msgstr ""
"Ma tha seo an comas, thèid iuchair “shònraichte†seach “tàisleachaidh†a "
@@ -3737,6 +3948,12 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"If the execution of a chat command takes longer than this specified time in\n"
+"seconds, add the time information to the chat command message"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"If the file size of debug.txt exceeds the number of megabytes specified in\n"
"this setting when it is opened, the file is moved to debug.txt.1,\n"
"deleting an older debug.txt.1 if it exists.\n"
@@ -3782,7 +3999,7 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Instrument chatcommands on registration."
+msgid "Instrument chat commands on registration."
msgstr ""
#: src/settings_translation_file.cpp
@@ -3871,7 +4088,7 @@ msgid "Joystick button repetition interval"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Joystick deadzone"
+msgid "Joystick dead zone"
msgstr ""
#: src/settings_translation_file.cpp
@@ -4771,10 +4988,6 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Makes DirectX work with LuaJIT. Disable if it causes troubles."
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Makes all liquids opaque"
msgstr "Dèan gach lionn trìd-dhoilleir"
@@ -4867,6 +5080,10 @@ msgid "Map save interval"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Map shadows update frames"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Mapblock limit"
msgstr ""
@@ -4975,6 +5192,10 @@ msgid "Maximum FPS when the window is not focused, or when the game is paused."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Maximum distance to render shadows."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Maximum forceloaded blocks"
msgstr ""
@@ -5086,7 +5307,15 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Maximum time in ms a file download (e.g. a mod download) may take."
+msgid ""
+"Maximum time a file download (e.g. a mod download) may take, stated in "
+"milliseconds."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum time an interactive request (e.g. server list fetch) may take, "
+"stated in milliseconds."
msgstr ""
#: src/settings_translation_file.cpp
@@ -5152,7 +5381,7 @@ msgid "Mod channels"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Modifies the size of the hudbar elements."
+msgid "Modifies the size of the HUD elements."
msgstr ""
#: src/settings_translation_file.cpp
@@ -5164,6 +5393,10 @@ msgid "Monospace font size"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Monospace font size divisible by"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Mountain height noise"
msgstr ""
@@ -5289,7 +5522,7 @@ 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"
+"This is a trade-off between SQLite transaction overhead and\n"
"memory consumption (4096=100MB, as a rule of thumb)."
msgstr ""
@@ -5308,11 +5541,6 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Opaqueness (alpha) of the shadow behind the fallback font, between 0 and 255."
-msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid ""
"Open the pause menu when the window's focus is lost. Does not pause if a "
"formspec is\n"
"open."
@@ -5321,10 +5549,12 @@ msgstr ""
"Cha dèid a chur ’na stad nuair a bhios formspec fosgailte."
#: src/settings_translation_file.cpp
+msgid "Optional override for chat weblink color."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid ""
-"Path of the fallback font.\n"
-"If “freetype†setting is enabled: Must be a TrueType font.\n"
-"If “freetype†setting is disabled: Must be a bitmap or XML vectors font.\n"
+"Path of the fallback font. Must be a TrueType font.\n"
"This font will be used for certain languages or if the default font is "
"unavailable."
msgstr ""
@@ -5347,17 +5577,13 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Path to the default font.\n"
-"If “freetype†setting is enabled: Must be a TrueType font.\n"
-"If “freetype†setting is disabled: Must be a bitmap or XML vectors font.\n"
+"Path to the default font. Must be a TrueType font.\n"
"The fallback font will be used if the font cannot be loaded."
msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Path to the monospace font.\n"
-"If “freetype†setting is enabled: Must be a TrueType font.\n"
-"If “freetype†setting is disabled: Must be a bitmap or XML vectors font.\n"
+"Path to the monospace font. Must be a TrueType font.\n"
"This font is used for e.g. the console and profiler screen."
msgstr ""
@@ -5415,6 +5641,10 @@ msgid "Player versus player"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Poisson filtering"
+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."
@@ -5459,9 +5689,9 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"Prometheus listener address.\n"
-"If minetest is compiled with ENABLE_PROMETHEUS option enabled,\n"
+"If Minetest is compiled with ENABLE_PROMETHEUS option enabled,\n"
"enable metrics listener for Prometheus on that address.\n"
-"Metrics can be fetch on http://127.0.0.1:30000/metrics"
+"Metrics can be fetched on http://127.0.0.1:30000/metrics"
msgstr ""
#: src/settings_translation_file.cpp
@@ -5752,6 +5982,32 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Set the shadow strength.\n"
+"Lower value means lighter shadows, higher value means darker shadows."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set the soft shadow radius size.\n"
+"Lower values mean sharper shadows, bigger values mean softer shadows.\n"
+"Minimum value: 1.0; maximum value: 10.0"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set the tilt of Sun/Moon orbit in degrees.\n"
+"Value of 0 means no tilt / vertical orbit.\n"
+"Minimum value: 0.0; maximum value: 60.0"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set to true to enable Shadow Mapping.\n"
+"Requires shaders to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Set to true to enable waving leaves.\n"
"Requires shaders to be enabled."
msgstr ""
@@ -5769,6 +6025,13 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Sets shadow texture quality to 32 bits.\n"
+"On false, 16 bits texture will be used.\n"
+"This can cause much more artifacts in the shadow."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Shader path"
msgstr ""
@@ -5781,15 +6044,29 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Shadow filter quality"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Shadow map max distance in nodes to render shadows"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Shadow map texture in 32 bits"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Shadow map texture size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid ""
"Shadow offset (in pixels) of the default font. If 0, then shadow will not be "
"drawn."
msgstr ""
#: src/settings_translation_file.cpp
-msgid ""
-"Shadow offset (in pixels) of the fallback font. If 0, then shadow will not "
-"be drawn."
+msgid "Shadow strength"
msgstr ""
#: src/settings_translation_file.cpp
@@ -5811,7 +6088,7 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Show nametag backgrounds by default"
+msgid "Show name tag backgrounds by default"
msgstr ""
#: src/settings_translation_file.cpp
@@ -5843,6 +6120,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Sky Body Orbit Tilt"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Slice w"
msgstr ""
@@ -5897,15 +6178,11 @@ msgid "Sneaking speed, in nodes per second."
msgstr "Luaths an tàisleachaidh ann an nòd gach diog."
#: src/settings_translation_file.cpp
-msgid "Sound"
+msgid "Soft shadow radius"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Special key"
-msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid "Special key for climbing/descending"
+msgid "Sound"
msgstr ""
#: src/settings_translation_file.cpp
@@ -5925,6 +6202,14 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Spread a complete update of shadow map over given amount of frames.\n"
+"Higher values might make shadows laggy, lower values\n"
+"will consume more resources.\n"
+"Minimum value: 1; maximum value: 16"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Spread of light curve boost range.\n"
"Controls the width of the range to be boosted.\n"
"Standard deviation of the light curve boost Gaussian."
@@ -6046,6 +6331,13 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Texture size to render the shadow map on.\n"
+"This must be a power of two.\n"
+"Bigger numbers create better shadows but it is also more expensive."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Textures on a node may be aligned either to the node or to the world.\n"
"The former mode suits better things like machines, furniture, etc., while\n"
"the latter makes stairs and microblocks fit surroundings better.\n"
@@ -6059,7 +6351,7 @@ msgid "The URL for the content repository"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "The deadzone of the joystick"
+msgid "The dead zone of the joystick"
msgstr ""
#: src/settings_translation_file.cpp
@@ -6120,7 +6412,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"The rendering back-end for Irrlicht.\n"
+"The rendering back-end.\n"
"A restart is required after changing this.\n"
"Note: On Android, stick with OGLES1 if unsure! App may fail to start "
"otherwise.\n"
@@ -6131,7 +6423,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"The sensitivity of the joystick axes for moving the\n"
-"ingame view frustum around."
+"in-game view frustum around."
msgstr ""
#: src/settings_translation_file.cpp
@@ -6225,6 +6517,10 @@ msgid "Touch screen threshold"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Tradeoffs for performance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Trees noise"
msgstr ""
@@ -6298,7 +6594,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Use mip mapping to scale textures. May slightly increase performance,\n"
+"Use mipmapping to scale textures. May slightly increase performance,\n"
"especially when using a high resolution texture pack.\n"
"Gamma correct downscaling is not supported."
msgstr ""
@@ -6411,7 +6707,7 @@ msgid "Viewing range"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Virtual joystick triggers aux button"
+msgid "Virtual joystick triggers Aux1 button"
msgstr ""
#: src/settings_translation_file.cpp
@@ -6484,6 +6780,10 @@ msgid "Waving plants"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Weblink color"
+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"
@@ -6504,23 +6804,15 @@ msgid ""
"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.\n"
+"memory. Powers of 2 are recommended. This setting is ONLY applied if\n"
+"bilinear/trilinear/anisotropic filtering is enabled.\n"
"This is also used as the base node texture size for world-aligned\n"
"texture autoscaling."
msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Whether FreeType fonts are used, requires FreeType support to be compiled "
-"in.\n"
-"If disabled, bitmap and XML vectors fonts are used instead."
-msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid ""
-"Whether nametag backgrounds should be shown by default.\n"
+"Whether name tag backgrounds should be shown by default.\n"
"Mods may still set a background."
msgstr ""
@@ -6564,7 +6856,7 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Width component of the initial window size."
+msgid "Width component of the initial window size. Ignored in fullscreen mode."
msgstr ""
#: src/settings_translation_file.cpp
@@ -6658,36 +6950,36 @@ msgid "Y-level of seabed."
msgstr "Àirde-Y aig grunnd na mara."
#: src/settings_translation_file.cpp
-msgid ""
-"ZLib compression level to use when saving mapblocks to disk.\n"
-"-1 - Zlib's default compression level\n"
-"0 - no compresson, fastest\n"
-"9 - best compression, slowest\n"
-"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)"
-msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid ""
-"ZLib compression level to use when sending mapblocks to the client.\n"
-"-1 - Zlib's default compression level\n"
-"0 - no compresson, fastest\n"
-"9 - best compression, slowest\n"
-"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)"
+msgid "cURL file download timeout"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "cURL file download timeout"
+msgid "cURL interactive timeout"
msgstr ""
#: src/settings_translation_file.cpp
msgid "cURL parallel limit"
msgstr ""
-#: src/settings_translation_file.cpp
-msgid "cURL timeout"
-msgstr ""
+#, fuzzy
+#~ msgid "- Creative Mode: "
+#~ msgstr " "
+
+#~ msgid "- Damage: "
+#~ msgstr "– Dochann: "
+
+#~ msgid "Address / Port"
+#~ msgstr "Seòladh / Port"
#~ msgid "Overall bias of parallax occlusion effect, usually scale/2."
#~ msgstr ""
#~ "Claonadh na h-èifeachd occlusion na paraileig air fheadh, seo sgèile/2 "
#~ "mar as àbhaist."
+
+#~ msgid "To enable shaders the OpenGL driver needs to be used."
+#~ msgstr ""
+#~ "Airson sgàileadairean a chur an comas, feumaidh tu draibhear OpenGL a "
+#~ "chleachdadh."
+
+#~ msgid "needs_fallback_font"
+#~ msgstr "no"
diff --git a/po/gl/minetest.po b/po/gl/minetest.po
index 6f5b479bc..1593600ff 100644
--- a/po/gl/minetest.po
+++ b/po/gl/minetest.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: minetest\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-02-23 19:03+0100\n"
+"POT-Creation-Date: 2022-01-25 23:19+0100\n"
"PO-Revision-Date: 2020-07-08 20:47+0000\n"
"Last-Translator: sfan5 <sfan5@live.de>\n"
"Language-Team: Galician <https://hosted.weblate.org/projects/minetest/"
@@ -19,6 +19,43 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 4.2-dev\n"
+#: builtin/client/chatcommands.lua
+msgid "Clear the out chat queue"
+msgstr ""
+
+#: builtin/client/chatcommands.lua
+msgid "Empty command."
+msgstr ""
+
+#: builtin/client/chatcommands.lua
+#, fuzzy
+msgid "Exit to main menu"
+msgstr "Menu principal"
+
+#: builtin/client/chatcommands.lua
+msgid "Invalid command: "
+msgstr ""
+
+#: builtin/client/chatcommands.lua
+msgid "Issued command: "
+msgstr ""
+
+#: builtin/client/chatcommands.lua
+msgid "List online players"
+msgstr ""
+
+#: builtin/client/chatcommands.lua
+msgid "Online players: "
+msgstr ""
+
+#: builtin/client/chatcommands.lua
+msgid "The out chat queue is now empty."
+msgstr ""
+
+#: builtin/client/chatcommands.lua
+msgid "This command is disabled by server."
+msgstr ""
+
#: builtin/client/death_formspec.lua src/client/game.cpp
msgid "Respawn"
msgstr "Reaparecer"
@@ -27,11 +64,40 @@ msgstr "Reaparecer"
msgid "You died"
msgstr "Morreches"
+#: builtin/common/chatcommands.lua
+msgid "Available commands:"
+msgstr ""
+
+#: builtin/common/chatcommands.lua
+msgid "Available commands: "
+msgstr ""
+
+#: builtin/common/chatcommands.lua
+msgid "Command not available: "
+msgstr ""
+
+#: builtin/common/chatcommands.lua
+msgid "Get help for commands"
+msgstr ""
+
+#: builtin/common/chatcommands.lua
+msgid ""
+"Use '.help <cmd>' to get more information, or '.help all' to list everything."
+msgstr ""
+
+#: builtin/common/chatcommands.lua
+msgid "[all | <cmd>]"
+msgstr ""
+
#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp
msgid "OK"
msgstr "Vale"
#: builtin/fstk/ui.lua
+msgid "<none available>"
+msgstr ""
+
+#: builtin/fstk/ui.lua
msgid "An error occurred in a Lua script:"
msgstr ""
@@ -230,6 +296,10 @@ msgid "Install missing dependencies"
msgstr ""
#: builtin/mainmenu/dlg_contentstore.lua
+msgid "Install: Unsupported file type or broken archive"
+msgstr ""
+
+#: builtin/mainmenu/dlg_contentstore.lua
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Mods"
msgstr ""
@@ -529,7 +599,7 @@ msgstr ""
msgid "Browse"
msgstr ""
-#: builtin/mainmenu/dlg_settings_advanced.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_settings.lua
msgid "Disabled"
msgstr ""
@@ -554,7 +624,7 @@ msgid "Offset"
msgstr ""
#: builtin/mainmenu/dlg_settings_advanced.lua
-msgid "Persistance"
+msgid "Persistence"
msgstr ""
#: builtin/mainmenu/dlg_settings_advanced.lua
@@ -573,7 +643,7 @@ msgstr ""
msgid "Scale"
msgstr ""
-#: builtin/mainmenu/dlg_settings_advanced.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_online.lua
msgid "Search"
msgstr ""
@@ -665,14 +735,6 @@ msgid "Install Mod: Unable to find suitable folder name for modpack $1"
msgstr ""
#: builtin/mainmenu/pkgmgr.lua
-msgid "Install: Unsupported file type \"$1\" or broken archive"
-msgstr ""
-
-#: builtin/mainmenu/pkgmgr.lua
-msgid "Install: file: \"$1\""
-msgstr ""
-
-#: builtin/mainmenu/pkgmgr.lua
msgid "Unable to find a valid mod or modpack"
msgstr ""
@@ -704,6 +766,40 @@ msgstr ""
msgid "Try reenabling public serverlist and check your internet connection."
msgstr ""
+#: builtin/mainmenu/tab_about.lua
+msgid "About"
+msgstr ""
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Active Contributors"
+msgstr ""
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Active renderer:"
+msgstr ""
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Core Developers"
+msgstr ""
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Open User Data Directory"
+msgstr ""
+
+#: builtin/mainmenu/tab_about.lua
+msgid ""
+"Opens the directory that contains user-provided worlds, games, mods,\n"
+"and texture packs in a file manager / explorer."
+msgstr ""
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Previous Contributors"
+msgstr ""
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Previous Core Developers"
+msgstr ""
+
#: builtin/mainmenu/tab_content.lua
msgid "Browse online content"
msgstr ""
@@ -744,36 +840,6 @@ msgstr ""
msgid "Use Texture Pack"
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 "Open User Data Directory"
-msgstr ""
-
-#: builtin/mainmenu/tab_credits.lua
-msgid ""
-"Opens the directory that contains user-provided worlds, games, mods,\n"
-"and texture packs in a file manager / explorer."
-msgstr ""
-
-#: builtin/mainmenu/tab_credits.lua
-msgid "Previous Contributors"
-msgstr ""
-
-#: builtin/mainmenu/tab_credits.lua
-msgid "Previous Core Developers"
-msgstr ""
-
#: builtin/mainmenu/tab_local.lua
msgid "Announce Server"
msgstr ""
@@ -802,7 +868,7 @@ msgstr ""
msgid "Install games from ContentDB"
msgstr ""
-#: builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
msgid "Name"
msgstr ""
@@ -814,7 +880,7 @@ msgstr ""
msgid "No world created or selected!"
msgstr ""
-#: builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
msgid "Password"
msgstr ""
@@ -822,7 +888,7 @@ msgstr ""
msgid "Play Game"
msgstr ""
-#: builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
msgid "Port"
msgstr ""
@@ -843,7 +909,11 @@ msgid "Start Game"
msgstr ""
#: builtin/mainmenu/tab_online.lua
-msgid "Address / Port"
+msgid "Address"
+msgstr ""
+
+#: builtin/mainmenu/tab_online.lua src/client/keycode.cpp
+msgid "Clear"
msgstr ""
#: builtin/mainmenu/tab_online.lua
@@ -854,8 +924,9 @@ msgstr ""
msgid "Creative mode"
msgstr ""
+#. ~ PvP = Player versus Player
#: builtin/mainmenu/tab_online.lua
-msgid "Damage enabled"
+msgid "Damage / PvP"
msgstr ""
#: builtin/mainmenu/tab_online.lua
@@ -863,24 +934,31 @@ msgid "Del. Favorite"
msgstr ""
#: builtin/mainmenu/tab_online.lua
-msgid "Favorite"
+msgid "Favorites"
msgstr ""
#: builtin/mainmenu/tab_online.lua
-msgid "Join Game"
+msgid "Incompatible Servers"
msgstr ""
#: builtin/mainmenu/tab_online.lua
-msgid "Name / Password"
+msgid "Join Game"
msgstr ""
#: builtin/mainmenu/tab_online.lua
msgid "Ping"
msgstr ""
-#. ~ PvP = Player versus Player
#: builtin/mainmenu/tab_online.lua
-msgid "PvP enabled"
+msgid "Public Servers"
+msgstr ""
+
+#: builtin/mainmenu/tab_online.lua
+msgid "Refresh"
+msgstr ""
+
+#: builtin/mainmenu/tab_online.lua
+msgid "Server Description"
msgstr ""
#: builtin/mainmenu/tab_settings.lua
@@ -923,11 +1001,31 @@ msgstr ""
msgid "Connected Glass"
msgstr ""
+#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
+msgid "Dynamic shadows"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Dynamic shadows: "
+msgstr ""
+
#: builtin/mainmenu/tab_settings.lua
msgid "Fancy Leaves"
msgstr ""
#: builtin/mainmenu/tab_settings.lua
+msgid "High"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Low"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Medium"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
msgid "Mipmap"
msgstr ""
@@ -999,10 +1097,6 @@ msgstr ""
msgid "Texturing:"
msgstr ""
-#: builtin/mainmenu/tab_settings.lua
-msgid "To enable shaders the OpenGL driver needs to be used."
-msgstr ""
-
#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
msgid "Tone Mapping"
msgstr ""
@@ -1016,6 +1110,14 @@ msgid "Trilinear Filter"
msgstr ""
#: builtin/mainmenu/tab_settings.lua
+msgid "Ultra High"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Very Low"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
msgid "Waving Leaves"
msgstr ""
@@ -1027,7 +1129,7 @@ msgstr ""
msgid "Waving Plants"
msgstr ""
-#: src/client/client.cpp
+#: src/client/client.cpp src/client/game.cpp
msgid "Connection timed out."
msgstr ""
@@ -1056,7 +1158,7 @@ msgid "Connection error (timed out?)"
msgstr ""
#: src/client/clientlauncher.cpp
-msgid "Could not find or load game \""
+msgid "Could not find or load game: "
msgstr ""
#: src/client/clientlauncher.cpp
@@ -1087,18 +1189,6 @@ msgstr ""
msgid "Provided world path doesn't exist: "
msgstr ""
-#. ~ DO NOT TRANSLATE THIS LITERALLY!
-#. This is a special string. Put either "no" or "yes"
-#. into the translation field (literally).
-#. Choose "yes" if the language requires use of the fallback
-#. font, "no" otherwise.
-#. The fallback font is (normally) required for languages with
-#. non-Latin script, like Chinese.
-#. When in doubt, test your translation.
-#: src/client/fontengine.cpp
-msgid "needs_fallback_font"
-msgstr "no"
-
#: src/client/game.cpp
msgid ""
"\n"
@@ -1110,14 +1200,6 @@ msgid "- Address: "
msgstr ""
#: src/client/game.cpp
-msgid "- Creative Mode: "
-msgstr ""
-
-#: src/client/game.cpp
-msgid "- Damage: "
-msgstr ""
-
-#: src/client/game.cpp
msgid "- Mode: "
msgstr ""
@@ -1139,6 +1221,15 @@ msgid "- Server Name: "
msgstr ""
#: src/client/game.cpp
+msgid "A serialization error occurred:"
+msgstr ""
+
+#: src/client/game.cpp
+#, c-format
+msgid "Access denied. Reason: %s"
+msgstr ""
+
+#: src/client/game.cpp
msgid "Automatic forward disabled"
msgstr ""
@@ -1147,6 +1238,22 @@ msgid "Automatic forward enabled"
msgstr ""
#: src/client/game.cpp
+msgid "Block bounds hidden"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Block bounds shown for all blocks"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Block bounds shown for current block"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Block bounds shown for nearby blocks"
+msgstr ""
+
+#: src/client/game.cpp
msgid "Camera update disabled"
msgstr ""
@@ -1155,6 +1262,10 @@ msgid "Camera update enabled"
msgstr ""
#: src/client/game.cpp
+msgid "Can't show block bounds (need 'basic_debug' privilege)"
+msgstr ""
+
+#: src/client/game.cpp
msgid "Change Password"
msgstr ""
@@ -1167,6 +1278,10 @@ msgid "Cinematic mode enabled"
msgstr ""
#: src/client/game.cpp
+msgid "Client disconnected"
+msgstr ""
+
+#: src/client/game.cpp
msgid "Client side scripting is disabled"
msgstr ""
@@ -1175,6 +1290,10 @@ msgid "Connecting to server..."
msgstr ""
#: src/client/game.cpp
+msgid "Connection failed for unknown reason"
+msgstr ""
+
+#: src/client/game.cpp
msgid "Continue"
msgstr ""
@@ -1198,6 +1317,11 @@ msgid ""
msgstr ""
#: src/client/game.cpp
+#, c-format
+msgid "Couldn't resolve address: %s"
+msgstr ""
+
+#: src/client/game.cpp
msgid "Creating client..."
msgstr ""
@@ -1314,6 +1438,10 @@ msgid "Minimap currently disabled by game or mod"
msgstr ""
#: src/client/game.cpp
+msgid "Multiplayer"
+msgstr ""
+
+#: src/client/game.cpp
msgid "Noclip mode disabled"
msgstr ""
@@ -1387,6 +1515,21 @@ msgstr ""
#: src/client/game.cpp
#, c-format
+msgid "The server is probably running a different version of %s."
+msgstr ""
+
+#: src/client/game.cpp
+#, c-format
+msgid "Unable to connect to %s because IPv6 is disabled"
+msgstr ""
+
+#: src/client/game.cpp
+#, c-format
+msgid "Unable to listen on %s because IPv6 is disabled"
+msgstr ""
+
+#: src/client/game.cpp
+#, c-format
msgid "Viewing range changed to %d"
msgstr ""
@@ -1455,10 +1598,6 @@ msgid "Caps Lock"
msgstr ""
#: src/client/keycode.cpp
-msgid "Clear"
-msgstr ""
-
-#: src/client/keycode.cpp
msgid "Control"
msgstr ""
@@ -1723,6 +1862,14 @@ msgstr ""
msgid "Minimap in texture mode"
msgstr ""
+#: src/gui/guiChatConsole.cpp
+msgid "Failed to open webpage"
+msgstr ""
+
+#: src/gui/guiChatConsole.cpp
+msgid "Opening webpage"
+msgstr ""
+
#: src/gui/guiConfirmRegistration.cpp src/gui/guiPasswordChange.cpp
msgid "Passwords do not match!"
msgstr ""
@@ -1746,7 +1893,7 @@ msgid "Proceed"
msgstr ""
#: src/gui/guiKeyChangeMenu.cpp
-msgid "\"Special\" = climb down"
+msgid "\"Aux1\" = climb down"
msgstr ""
#: src/gui/guiKeyChangeMenu.cpp
@@ -1758,10 +1905,18 @@ msgid "Automatic jumping"
msgstr ""
#: src/gui/guiKeyChangeMenu.cpp
+msgid "Aux1"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
msgid "Backward"
msgstr ""
#: src/gui/guiKeyChangeMenu.cpp
+msgid "Block bounds"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
msgid "Change camera"
msgstr ""
@@ -1850,10 +2005,6 @@ msgid "Sneak"
msgstr ""
#: src/gui/guiKeyChangeMenu.cpp
-msgid "Special"
-msgstr ""
-
-#: src/gui/guiKeyChangeMenu.cpp
msgid "Toggle HUD"
msgstr ""
@@ -1914,7 +2065,8 @@ msgid "Muted"
msgstr ""
#: src/gui/guiVolumeChange.cpp
-msgid "Sound Volume: "
+#, c-format
+msgid "Sound Volume: %d%%"
msgstr ""
#. ~ Imperative, as in "Enter/type in text".
@@ -1938,8 +2090,8 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"(Android) Use virtual joystick to trigger \"aux\" button.\n"
-"If enabled, virtual joystick will also tap \"aux\" button when out of main "
+"(Android) Use virtual joystick to trigger \"Aux1\" button.\n"
+"If enabled, virtual joystick will also tap \"Aux1\" button when out of main "
"circle."
msgstr ""
@@ -2122,6 +2274,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Adjust the detected display density, used for scaling UI elements."
+msgstr ""
+
+#: src/settings_translation_file.cpp
#, c-format
msgid ""
"Adjusts the density of the floatland layer.\n"
@@ -2234,6 +2390,14 @@ msgid "Autoscaling mode"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Aux1 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Aux1 key for climbing/descending"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Backward key"
msgstr ""
@@ -2278,10 +2442,6 @@ msgid "Biome noise"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Bits per pixel (aka color depth) in fullscreen mode."
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Block send optimize distance"
msgstr ""
@@ -2380,6 +2540,14 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Chat command time message threshold"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Chat commands"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Chat font size"
msgstr ""
@@ -2412,7 +2580,7 @@ msgid "Chat toggle key"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Chatcommands"
+msgid "Chat weblinks"
msgstr ""
#: src/settings_translation_file.cpp
@@ -2432,6 +2600,12 @@ msgid "Clean transparent textures"
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Clickable weblinks (middle-click or Ctrl+left-click) enabled in chat console "
+"output."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Client"
msgstr ""
@@ -2476,6 +2650,10 @@ msgid "Colored fog"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Colored shadows"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid ""
"Comma-separated list of flags to hide in the content repository.\n"
"\"nonfree\" can be used to hide packages which do not qualify as 'free "
@@ -2503,6 +2681,22 @@ msgid "Command key"
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Compression level to use when saving mapblocks to disk.\n"
+"-1 - use default compression level\n"
+"0 - least compression, fastest\n"
+"9 - best compression, slowest"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Compression level to use when sending mapblocks to the client.\n"
+"-1 - use default compression level\n"
+"0 - least compression, fastest\n"
+"9 - best compression, slowest"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Connect glass"
msgstr ""
@@ -2593,7 +2787,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"Crosshair alpha (opaqueness, between 0 and 255).\n"
-"Also controls the object crosshair color"
+"This also applies to the object crosshair."
msgstr ""
#: src/settings_translation_file.cpp
@@ -2670,8 +2864,9 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Default timeout for cURL, stated in milliseconds.\n"
-"Only has an effect if compiled with cURL."
+"Define shadow filtering quality.\n"
+"This simulates the soft shadows effect by applying a PCF or Poisson disk\n"
+"but also uses more resources."
msgstr ""
#: src/settings_translation_file.cpp
@@ -2789,6 +2984,10 @@ msgid "Disallow empty passwords"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Display Density Scaling Factor"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Domain name of server, to be displayed in the serverlist."
msgstr ""
@@ -2833,6 +3032,19 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Enable Poisson disk filtering.\n"
+"On true uses Poisson disk to make \"soft shadows\". Otherwise uses PCF "
+"filtering."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable colored shadows.\n"
+"On true translucent nodes cast colored shadows. This is expensive."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Enable console window"
msgstr ""
@@ -2941,6 +3153,12 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Enables tradeoffs that reduce CPU load or increase rendering performance\n"
+"at the expense of minor visual glitches that do not impact game playability."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Engine profiling data print interval"
msgstr ""
@@ -2979,18 +3197,6 @@ msgid "Fallback font path"
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 ""
@@ -3008,7 +3214,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Fast movement (via the \"special\" key).\n"
+"Fast movement (via the \"Aux1\" key).\n"
"This requires the \"fast\" privilege on the server."
msgstr ""
@@ -3042,9 +3248,9 @@ 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."
+"which PNG optimizers usually discard, often resulting in dark or\n"
+"light edges to transparent textures. Apply a filter to clean that up\n"
+"at texture load time. This is automatically enabled if mipmapping is enabled."
msgstr ""
#: src/settings_translation_file.cpp
@@ -3136,15 +3342,15 @@ msgid "Font size"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Font size of the default font in point (pt)."
+msgid "Font size divisible by"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Font size of the fallback font in point (pt)."
+msgid "Font size of the default font where 1 unit = 1 pixel at 96 DPI"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Font size of the monospace font in point (pt)."
+msgid "Font size of the monospace font where 1 unit = 1 pixel at 96 DPI"
msgstr ""
#: src/settings_translation_file.cpp
@@ -3155,6 +3361,17 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"For pixel-style fonts that do not scale well, this ensures that font sizes "
+"used\n"
+"with this font will always be divisible by this value, in pixels. For "
+"instance,\n"
+"a pixel font 16 pixels tall should have this set to 16, so it will only ever "
+"be\n"
+"sized 16, 32, 48, etc., so a mod requesting a size of 25 will get 32."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Format of player chat messages. The following strings are valid "
"placeholders:\n"
"@name, @message, @timestamp (optional)"
@@ -3213,10 +3430,6 @@ msgid "Fraction of the visible distance at which fog starts to be rendered"
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)."
@@ -3241,10 +3454,6 @@ msgid "Full screen"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Full screen BPP"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Fullscreen mode."
msgstr ""
@@ -3268,7 +3477,7 @@ msgstr ""
msgid ""
"Global map generation attributes.\n"
"In Mapgen v6 the 'decorations' flag controls all decorations except trees\n"
-"and junglegrass, in all other mapgens this flag controls all decorations."
+"and jungle grass, in all other mapgens this flag controls all decorations."
msgstr ""
#: src/settings_translation_file.cpp
@@ -3337,7 +3546,8 @@ msgid "Heat noise"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Height component of the initial window size."
+msgid ""
+"Height component of the initial window size. Ignored in fullscreen mode."
msgstr ""
#: src/settings_translation_file.cpp
@@ -3349,10 +3559,6 @@ msgid "Height select noise"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "High-precision FPU"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Hill steepness"
msgstr ""
@@ -3583,8 +3789,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"If disabled, \"special\" key is used to fly fast if both fly and fast mode "
-"are\n"
+"If disabled, \"Aux1\" key is used to fly fast if both fly and fast mode are\n"
"enabled."
msgstr ""
@@ -3606,8 +3811,8 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"If enabled, \"special\" key instead of \"sneak\" key is used for climbing "
-"down and\n"
+"If enabled, \"Aux1\" key instead of \"Sneak\" key is used for climbing down "
+"and\n"
"descending."
msgstr ""
@@ -3653,6 +3858,12 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"If the execution of a chat command takes longer than this specified time in\n"
+"seconds, add the time information to the chat command message"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"If the file size of debug.txt exceeds the number of megabytes specified in\n"
"this setting when it is opened, the file is moved to debug.txt.1,\n"
"deleting an older debug.txt.1 if it exists.\n"
@@ -3698,7 +3909,7 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Instrument chatcommands on registration."
+msgid "Instrument chat commands on registration."
msgstr ""
#: src/settings_translation_file.cpp
@@ -3782,7 +3993,7 @@ msgid "Joystick button repetition interval"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Joystick deadzone"
+msgid "Joystick dead zone"
msgstr ""
#: src/settings_translation_file.cpp
@@ -4540,10 +4751,6 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Makes DirectX work with LuaJIT. Disable if it causes troubles."
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Makes all liquids opaque"
msgstr ""
@@ -4615,6 +4822,10 @@ msgid "Map save interval"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Map shadows update frames"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Mapblock limit"
msgstr ""
@@ -4723,6 +4934,10 @@ msgid "Maximum FPS when the window is not focused, or when the game is paused."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Maximum distance to render shadows."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Maximum forceloaded blocks"
msgstr ""
@@ -4828,7 +5043,15 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Maximum time in ms a file download (e.g. a mod download) may take."
+msgid ""
+"Maximum time a file download (e.g. a mod download) may take, stated in "
+"milliseconds."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum time an interactive request (e.g. server list fetch) may take, "
+"stated in milliseconds."
msgstr ""
#: src/settings_translation_file.cpp
@@ -4892,7 +5115,7 @@ msgid "Mod channels"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Modifies the size of the hudbar elements."
+msgid "Modifies the size of the HUD elements."
msgstr ""
#: src/settings_translation_file.cpp
@@ -4904,6 +5127,10 @@ msgid "Monospace font size"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Monospace font size divisible by"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Mountain height noise"
msgstr ""
@@ -5024,7 +5251,7 @@ 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"
+"This is a trade-off between SQLite transaction overhead and\n"
"memory consumption (4096=100MB, as a rule of thumb)."
msgstr ""
@@ -5043,21 +5270,18 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Opaqueness (alpha) of the shadow behind the fallback font, between 0 and 255."
-msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid ""
"Open the pause menu when the window's focus is lost. Does not pause if a "
"formspec is\n"
"open."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Optional override for chat weblink color."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid ""
-"Path of the fallback font.\n"
-"If “freetype†setting is enabled: Must be a TrueType font.\n"
-"If “freetype†setting is disabled: Must be a bitmap or XML vectors font.\n"
+"Path of the fallback font. Must be a TrueType font.\n"
"This font will be used for certain languages or if the default font is "
"unavailable."
msgstr ""
@@ -5080,17 +5304,13 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Path to the default font.\n"
-"If “freetype†setting is enabled: Must be a TrueType font.\n"
-"If “freetype†setting is disabled: Must be a bitmap or XML vectors font.\n"
+"Path to the default font. Must be a TrueType font.\n"
"The fallback font will be used if the font cannot be loaded."
msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Path to the monospace font.\n"
-"If “freetype†setting is enabled: Must be a TrueType font.\n"
-"If “freetype†setting is disabled: Must be a bitmap or XML vectors font.\n"
+"Path to the monospace font. Must be a TrueType font.\n"
"This font is used for e.g. the console and profiler screen."
msgstr ""
@@ -5145,6 +5365,10 @@ msgid "Player versus player"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Poisson filtering"
+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."
@@ -5189,9 +5413,9 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"Prometheus listener address.\n"
-"If minetest is compiled with ENABLE_PROMETHEUS option enabled,\n"
+"If Minetest is compiled with ENABLE_PROMETHEUS option enabled,\n"
"enable metrics listener for Prometheus on that address.\n"
-"Metrics can be fetch on http://127.0.0.1:30000/metrics"
+"Metrics can be fetched on http://127.0.0.1:30000/metrics"
msgstr ""
#: src/settings_translation_file.cpp
@@ -5480,6 +5704,32 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Set the shadow strength.\n"
+"Lower value means lighter shadows, higher value means darker shadows."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set the soft shadow radius size.\n"
+"Lower values mean sharper shadows, bigger values mean softer shadows.\n"
+"Minimum value: 1.0; maximum value: 10.0"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set the tilt of Sun/Moon orbit in degrees.\n"
+"Value of 0 means no tilt / vertical orbit.\n"
+"Minimum value: 0.0; maximum value: 60.0"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set to true to enable Shadow Mapping.\n"
+"Requires shaders to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Set to true to enable waving leaves.\n"
"Requires shaders to be enabled."
msgstr ""
@@ -5497,6 +5747,13 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Sets shadow texture quality to 32 bits.\n"
+"On false, 16 bits texture will be used.\n"
+"This can cause much more artifacts in the shadow."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Shader path"
msgstr ""
@@ -5509,15 +5766,29 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Shadow filter quality"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Shadow map max distance in nodes to render shadows"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Shadow map texture in 32 bits"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Shadow map texture size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid ""
"Shadow offset (in pixels) of the default font. If 0, then shadow will not be "
"drawn."
msgstr ""
#: src/settings_translation_file.cpp
-msgid ""
-"Shadow offset (in pixels) of the fallback font. If 0, then shadow will not "
-"be drawn."
+msgid "Shadow strength"
msgstr ""
#: src/settings_translation_file.cpp
@@ -5539,7 +5810,7 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Show nametag backgrounds by default"
+msgid "Show name tag backgrounds by default"
msgstr ""
#: src/settings_translation_file.cpp
@@ -5564,6 +5835,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Sky Body Orbit Tilt"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Slice w"
msgstr ""
@@ -5618,15 +5893,11 @@ msgid "Sneaking speed, in nodes per second."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Sound"
-msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid "Special key"
+msgid "Soft shadow radius"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Special key for climbing/descending"
+msgid "Sound"
msgstr ""
#: src/settings_translation_file.cpp
@@ -5646,6 +5917,14 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Spread a complete update of shadow map over given amount of frames.\n"
+"Higher values might make shadows laggy, lower values\n"
+"will consume more resources.\n"
+"Minimum value: 1; maximum value: 16"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Spread of light curve boost range.\n"
"Controls the width of the range to be boosted.\n"
"Standard deviation of the light curve boost Gaussian."
@@ -5752,6 +6031,13 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Texture size to render the shadow map on.\n"
+"This must be a power of two.\n"
+"Bigger numbers create better shadows but it is also more expensive."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Textures on a node may be aligned either to the node or to the world.\n"
"The former mode suits better things like machines, furniture, etc., while\n"
"the latter makes stairs and microblocks fit surroundings better.\n"
@@ -5765,7 +6051,7 @@ msgid "The URL for the content repository"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "The deadzone of the joystick"
+msgid "The dead zone of the joystick"
msgstr ""
#: src/settings_translation_file.cpp
@@ -5823,7 +6109,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"The rendering back-end for Irrlicht.\n"
+"The rendering back-end.\n"
"A restart is required after changing this.\n"
"Note: On Android, stick with OGLES1 if unsure! App may fail to start "
"otherwise.\n"
@@ -5834,7 +6120,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"The sensitivity of the joystick axes for moving the\n"
-"ingame view frustum around."
+"in-game view frustum around."
msgstr ""
#: src/settings_translation_file.cpp
@@ -5928,6 +6214,10 @@ msgid "Touch screen threshold"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Tradeoffs for performance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Trees noise"
msgstr ""
@@ -5997,7 +6287,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Use mip mapping to scale textures. May slightly increase performance,\n"
+"Use mipmapping to scale textures. May slightly increase performance,\n"
"especially when using a high resolution texture pack.\n"
"Gamma correct downscaling is not supported."
msgstr ""
@@ -6110,7 +6400,7 @@ msgid "Viewing range"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Virtual joystick triggers aux button"
+msgid "Virtual joystick triggers Aux1 button"
msgstr ""
#: src/settings_translation_file.cpp
@@ -6181,6 +6471,10 @@ msgid "Waving plants"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Weblink color"
+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"
@@ -6201,23 +6495,15 @@ msgid ""
"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.\n"
+"memory. Powers of 2 are recommended. This setting is ONLY applied if\n"
+"bilinear/trilinear/anisotropic filtering is enabled.\n"
"This is also used as the base node texture size for world-aligned\n"
"texture autoscaling."
msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Whether FreeType fonts are used, requires FreeType support to be compiled "
-"in.\n"
-"If disabled, bitmap and XML vectors fonts are used instead."
-msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid ""
-"Whether nametag backgrounds should be shown by default.\n"
+"Whether name tag backgrounds should be shown by default.\n"
"Mods may still set a background."
msgstr ""
@@ -6259,7 +6545,7 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Width component of the initial window size."
+msgid "Width component of the initial window size. Ignored in fullscreen mode."
msgstr ""
#: src/settings_translation_file.cpp
@@ -6344,31 +6630,20 @@ msgid "Y-level of seabed."
msgstr ""
#: src/settings_translation_file.cpp
-msgid ""
-"ZLib compression level to use when saving mapblocks to disk.\n"
-"-1 - Zlib's default compression level\n"
-"0 - no compresson, fastest\n"
-"9 - best compression, slowest\n"
-"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)"
-msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid ""
-"ZLib compression level to use when sending mapblocks to the client.\n"
-"-1 - Zlib's default compression level\n"
-"0 - no compresson, fastest\n"
-"9 - best compression, slowest\n"
-"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)"
+msgid "cURL file download timeout"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "cURL file download timeout"
+msgid "cURL interactive timeout"
msgstr ""
#: src/settings_translation_file.cpp
msgid "cURL parallel limit"
msgstr ""
-#: src/settings_translation_file.cpp
-msgid "cURL timeout"
-msgstr ""
+#, fuzzy
+#~ msgid "You died."
+#~ msgstr "Morreches"
+
+#~ msgid "needs_fallback_font"
+#~ msgstr "no"
diff --git a/po/he/minetest.po b/po/he/minetest.po
index 2bfb5e711..a6beb9def 100644
--- a/po/he/minetest.po
+++ b/po/he/minetest.po
@@ -2,9 +2,9 @@ msgid ""
msgstr ""
"Project-Id-Version: Hebrew (Minetest)\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-02-23 19:03+0100\n"
-"PO-Revision-Date: 2021-02-17 22:50+0000\n"
-"Last-Translator: Yossi Cohen <cohenyossi81@gmail.com>\n"
+"POT-Creation-Date: 2022-01-25 23:19+0100\n"
+"PO-Revision-Date: 2021-04-17 07:27+0000\n"
+"Last-Translator: Omer I.S. <omeritzicschwartz@gmail.com>\n"
"Language-Team: Hebrew <https://hosted.weblate.org/projects/minetest/minetest/"
"he/>\n"
"Language: he\n"
@@ -13,7 +13,48 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=4; plural=(n == 1) ? 0 : ((n == 2) ? 1 : ((n > 10 && "
"n % 10 == 0) ? 2 : 3));\n"
-"X-Generator: Weblate 4.5\n"
+"X-Generator: Weblate 4.6-dev\n"
+
+#: builtin/client/chatcommands.lua
+msgid "Clear the out chat queue"
+msgstr ""
+
+#: builtin/client/chatcommands.lua
+#, fuzzy
+msgid "Empty command."
+msgstr "פקודות צ'×ט"
+
+#: builtin/client/chatcommands.lua
+#, fuzzy
+msgid "Exit to main menu"
+msgstr "יצי××” לתפריט"
+
+#: builtin/client/chatcommands.lua
+#, fuzzy
+msgid "Invalid command: "
+msgstr "פקודה מקומית"
+
+#: builtin/client/chatcommands.lua
+msgid "Issued command: "
+msgstr ""
+
+#: builtin/client/chatcommands.lua
+#, fuzzy
+msgid "List online players"
+msgstr "שחקן יחיד"
+
+#: builtin/client/chatcommands.lua
+#, fuzzy
+msgid "Online players: "
+msgstr "שחקן יחיד"
+
+#: builtin/client/chatcommands.lua
+msgid "The out chat queue is now empty."
+msgstr ""
+
+#: builtin/client/chatcommands.lua
+msgid "This command is disabled by server."
+msgstr ""
#: builtin/client/death_formspec.lua src/client/game.cpp
msgid "Respawn"
@@ -23,11 +64,42 @@ msgstr "הזדמן"
msgid "You died"
msgstr "מתת"
+#: builtin/common/chatcommands.lua
+#, fuzzy
+msgid "Available commands:"
+msgstr "פקודה מקומית"
+
+#: builtin/common/chatcommands.lua
+#, fuzzy
+msgid "Available commands: "
+msgstr "פקודה מקומית"
+
+#: builtin/common/chatcommands.lua
+msgid "Command not available: "
+msgstr ""
+
+#: builtin/common/chatcommands.lua
+msgid "Get help for commands"
+msgstr ""
+
+#: builtin/common/chatcommands.lua
+msgid ""
+"Use '.help <cmd>' to get more information, or '.help all' to list everything."
+msgstr ""
+
+#: builtin/common/chatcommands.lua
+msgid "[all | <cmd>]"
+msgstr ""
+
#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp
msgid "OK"
msgstr "×ישור"
#: builtin/fstk/ui.lua
+msgid "<none available>"
+msgstr ""
+
+#: builtin/fstk/ui.lua
msgid "An error occurred in a Lua script:"
msgstr "×ירעה שגי××” בתסריט Lua:"
@@ -89,7 +161,7 @@ msgstr "להשבית הכול"
#: builtin/mainmenu/dlg_config_world.lua
msgid "Disable modpack"
-msgstr "השבתת ערכת המודי×"
+msgstr "השבתת ערכת השיפורי×"
#: builtin/mainmenu/dlg_config_world.lua
msgid "Enable all"
@@ -97,23 +169,23 @@ msgstr "להפעיל הכול"
#: builtin/mainmenu/dlg_config_world.lua
msgid "Enable modpack"
-msgstr "הפעלת ערכת המודי×"
+msgstr "הפעלת ערכת השיפורי×"
#: builtin/mainmenu/dlg_config_world.lua
msgid ""
"Failed to enable mod \"$1\" as it contains disallowed characters. Only "
"characters [a-z0-9_] are allowed."
msgstr ""
-"הפעלת המוד \"1$\" נכשלה מכיוון ×©×”×•× ×ž×›×™×œ ×ª×•×•×™× ×œ× ×—×•×§×™×™×. רק ×”×ª×•×•×™× [a-"
+"הפעלת השיפור \"1$\" נכשלה מכיוון ×©×”×•× ×ž×›×™×œ ×ª×•×•×™× ×œ× ×—×•×§×™×™×. רק ×”×ª×•×•×™× [a-"
"z0-9_] מותרי×."
#: builtin/mainmenu/dlg_config_world.lua
msgid "Find More Mods"
-msgstr "מצי×ת ×ž×•×“×™× × ×•×¡×¤×™×"
+msgstr "חיפוש ×©×™×¤×•×¨×™× × ×•×¡×¤×™×"
#: builtin/mainmenu/dlg_config_world.lua
msgid "Mod:"
-msgstr "מוד:"
+msgstr "שיפור:"
#: builtin/mainmenu/dlg_config_world.lua
msgid "No (optional) dependencies"
@@ -129,7 +201,7 @@ msgstr "×œ×œ× ×ª×œ×•×™×•×ª קשות"
#: builtin/mainmenu/dlg_config_world.lua
msgid "No modpack description provided."
-msgstr "×œ× ×¡×•×¤×§ תי×ור לחבילת המוד."
+msgstr "×œ× ×¡×•×¤×§ תי×ור לערכת השיפורי×."
#: builtin/mainmenu/dlg_config_world.lua
msgid "No optional dependencies"
@@ -230,9 +302,14 @@ msgid "Install missing dependencies"
msgstr "מתקין תלויות חסרות"
#: builtin/mainmenu/dlg_contentstore.lua
+#, fuzzy
+msgid "Install: Unsupported file type or broken archive"
+msgstr "התקנה: סוג קובץ ×œ× × ×ª×ž×š \"$1\" ×ו שה×רכיב פגו×"
+
+#: builtin/mainmenu/dlg_contentstore.lua
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Mods"
-msgstr "מודי×"
+msgstr "שיפורי×"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "No packages could be retrieved"
@@ -505,15 +582,15 @@ msgstr "הסכמה"
#: builtin/mainmenu/dlg_rename_modpack.lua
msgid "Rename Modpack:"
-msgstr "שנה ×ת ×©× ×—×‘×™×œ×ª המודי×:"
+msgstr "שינוי ×©× ×¢×¨×›×ª השיפורי×:"
#: builtin/mainmenu/dlg_rename_modpack.lua
msgid ""
"This modpack has an explicit name given in its modpack.conf which will "
"override any renaming here."
msgstr ""
-"ל- modpack (חבילת תוספות) ×–×” יש ×©× ×ž×¤×•×¨×© שניתן ב modpack.conf שלו ×שר יעקוף "
-"כל שינוי-×©× ×›×ן."
+"לערכת ×©×™×¤×•×¨×™× ×–×• יש ×©× ×ž×¤×•×¨×© שניתן בקובץ modpack.conf שלה שיעקוף כל שינוי ×©× "
+"מכ×ן."
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "(No description of setting given)"
@@ -531,7 +608,7 @@ msgstr "חזור לדף ההגדרות >"
msgid "Browse"
msgstr "דפדף"
-#: builtin/mainmenu/dlg_settings_advanced.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_settings.lua
msgid "Disabled"
msgstr "מושבת"
@@ -556,7 +633,8 @@ msgid "Offset"
msgstr "היסט"
#: builtin/mainmenu/dlg_settings_advanced.lua
-msgid "Persistance"
+#, fuzzy
+msgid "Persistence"
msgstr "התמדה"
#: builtin/mainmenu/dlg_settings_advanced.lua
@@ -575,7 +653,7 @@ msgstr "שחזור לברירת המחדל"
msgid "Scale"
msgstr "קנה מידה"
-#: builtin/mainmenu/dlg_settings_advanced.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_online.lua
msgid "Search"
msgstr "חיפוש"
@@ -652,7 +730,7 @@ msgstr "$1 (מופעל)"
#: builtin/mainmenu/pkgmgr.lua
msgid "$1 mods"
-msgstr "$1 מודי×"
+msgstr "$1 שיפורי×"
#: builtin/mainmenu/pkgmgr.lua
msgid "Failed to install $1 to $2"
@@ -660,23 +738,15 @@ msgstr "התקנת $1 ×ל $2 נכשלה"
#: builtin/mainmenu/pkgmgr.lua
msgid "Install Mod: Unable to find real mod name for: $1"
-msgstr "התקנת מוד: ×œ× × ×™×ª×Ÿ ×œ×ž×¦×•× ×ת ×©× ×”×ž×•×“ ×”×מיתי עבור: $1"
+msgstr "התקנת שיפור: ×œ× × ×™×ª×Ÿ ×œ×ž×¦×•× ×ת ×©× ×”×©×™×¤×•×¨ ×”×מיתי עבור: $1"
#: builtin/mainmenu/pkgmgr.lua
msgid "Install Mod: Unable to find suitable folder name for modpack $1"
-msgstr "התקנת מוד: ×œ× × ×™×ª×Ÿ ×œ×ž×¦×•× ×©× ×ª×™×§×™×™×” מת××™× ×¢×‘×•×¨ חבילת ×”×ž×•×“×™× $1"
-
-#: builtin/mainmenu/pkgmgr.lua
-msgid "Install: Unsupported file type \"$1\" or broken archive"
-msgstr "התקנה: סוג קובץ ×œ× × ×ª×ž×š \"$1\" ×ו שה×רכיב פגו×"
-
-#: builtin/mainmenu/pkgmgr.lua
-msgid "Install: file: \"$1\""
-msgstr "התקנה: מקובץ: \"$1\""
+msgstr "התקנת שיפור: ×œ× × ×™×ª×Ÿ ×œ×ž×¦×•× ×©× ×ª×™×§×™×™×” מת××™× ×œ×¢×¨×›×ª ×”×©×™×¤×•×¨×™× $1"
#: builtin/mainmenu/pkgmgr.lua
msgid "Unable to find a valid mod or modpack"
-msgstr "×œ× × ×™×ª×Ÿ ×œ×ž×¦×•× ×ž×•×“/חבילת ×ž×•×“×™× ×ª×§×™× ×”"
+msgstr "×ין ×פשרות ×œ×ž×¦×•× ×©×™×¤×•×¨ ×ו ערכת ×©×™×¤×•×¨×™× ×‘×ž×¦×‘ תקין"
#: builtin/mainmenu/pkgmgr.lua
msgid "Unable to install a $1 as a texture pack"
@@ -688,26 +758,62 @@ msgstr "×œ× × ×™×ª×Ÿ להתקין משחק בתור $1"
#: builtin/mainmenu/pkgmgr.lua
msgid "Unable to install a mod as a $1"
-msgstr "×œ× × ×™×ª×Ÿ להתקין מוד בתור $1"
+msgstr "×ין ×פשרות להתקין שיפור ×‘×©× $1"
#: builtin/mainmenu/pkgmgr.lua
msgid "Unable to install a modpack as a $1"
-msgstr "×œ× × ×™×ª×Ÿ להתקין חבילת ×ž×•×“×™× ×‘×ª×•×¨ $1"
+msgstr "×ין ×פשרות להתקין ערכת ×©×™×¤×•×¨×™× ×‘×©× $1"
#: builtin/mainmenu/serverlistmgr.lua src/client/game.cpp
msgid "Loading..."
msgstr "כעת בטעינה..."
#: builtin/mainmenu/serverlistmgr.lua
-#, fuzzy
msgid "Public server list is disabled"
-msgstr "×¡×§×¨×™×¤×˜×™× ×‘×¦×“ לקוח מבוטלי×"
+msgstr "רשימת ×”×©×¨×ª×™× ×”×¦×™×‘×•×¨×™× ×ž×•×©×‘×ª×ª"
#: builtin/mainmenu/serverlistmgr.lua
msgid "Try reenabling public serverlist and check your internet connection."
msgstr ""
"× × ×œ× ×¡×•×ª לצ×ת ולהיכנס מחדש לרשימת ×”×©×¨×ª×™× ×•×œ×‘×“×•×§ ×ת החיבור שלך ל×ינטרנט."
+#: builtin/mainmenu/tab_about.lua
+msgid "About"
+msgstr ""
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Active Contributors"
+msgstr "×ª×•×¨×ž×™× ×¤×¢×™×œ×™×"
+
+#: builtin/mainmenu/tab_about.lua
+#, fuzzy
+msgid "Active renderer:"
+msgstr "טווח שליחת ×ובייקט פעיל"
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Core Developers"
+msgstr "×ž×¤×ª×—×™× ×¢×™×§×¨×™×™×"
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Open User Data Directory"
+msgstr "× × ×œ×‘×—×•×¨ תיקיית משתמש"
+
+#: builtin/mainmenu/tab_about.lua
+msgid ""
+"Opens the directory that contains user-provided worlds, games, mods,\n"
+"and texture packs in a file manager / explorer."
+msgstr ""
+"פותח ×ת התיקייה שמכילה עולמות, משחקי×, מודי×,\n"
+"וחבילות טקסטורה במנהל קבצי×."
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Previous Contributors"
+msgstr "×ª×•×¨×ž×™× ×§×•×“×ž×™×"
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Previous Core Developers"
+msgstr "מפתחי ליבה קודמי×"
+
#: builtin/mainmenu/tab_content.lua
msgid "Browse online content"
msgstr "עיון בתוכן מקוון"
@@ -748,38 +854,6 @@ msgstr "הסרת החבילה"
msgid "Use Texture Pack"
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 "Open User Data Directory"
-msgstr "× × ×œ×‘×—×•×¨ תיקיית משתמש"
-
-#: builtin/mainmenu/tab_credits.lua
-msgid ""
-"Opens the directory that contains user-provided worlds, games, mods,\n"
-"and texture packs in a file manager / explorer."
-msgstr ""
-"פותח ×ת התיקייה המכילה עולמות, משחקי×, מודי×,\n"
-"וחבילות טקסטורה במנהל קבצי×."
-
-#: builtin/mainmenu/tab_credits.lua
-msgid "Previous Contributors"
-msgstr "×ª×•×¨×ž×™× ×§×•×“×ž×™×"
-
-#: builtin/mainmenu/tab_credits.lua
-msgid "Previous Core Developers"
-msgstr "מפתחי ליבה קודמי×"
-
#: builtin/mainmenu/tab_local.lua
msgid "Announce Server"
msgstr "הכרז על השרת"
@@ -808,7 +882,7 @@ msgstr "×כסון שרת"
msgid "Install games from ContentDB"
msgstr "התקנת משחק מContentDB"
-#: builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
msgid "Name"
msgstr "ש×"
@@ -820,7 +894,7 @@ msgstr "חדש"
msgid "No world created or selected!"
msgstr "×ין ×¢×•×œ× ×©× ×•×¦×¨ ×ו נבחר!"
-#: builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
msgid "Password"
msgstr "סיסמה"
@@ -828,13 +902,13 @@ msgstr "סיסמה"
msgid "Play Game"
msgstr "להתחיל לשחק"
-#: builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
msgid "Port"
msgstr "פורט"
#: builtin/mainmenu/tab_local.lua
msgid "Select Mods"
-msgstr "בחירת מודי×"
+msgstr "בחירת שיפורי×"
#: builtin/mainmenu/tab_local.lua
msgid "Select World:"
@@ -849,8 +923,13 @@ msgid "Start Game"
msgstr "התחלת המשחק"
#: builtin/mainmenu/tab_online.lua
-msgid "Address / Port"
-msgstr "כתובת / פורט"
+#, fuzzy
+msgid "Address"
+msgstr "- כתובת: "
+
+#: builtin/mainmenu/tab_online.lua src/client/keycode.cpp
+msgid "Clear"
+msgstr "× ×§×”"
#: builtin/mainmenu/tab_online.lua
msgid "Connect"
@@ -860,34 +939,46 @@ msgstr "התחברות"
msgid "Creative mode"
msgstr "מצב יצירתי"
+#. ~ PvP = Player versus Player
#: builtin/mainmenu/tab_online.lua
-msgid "Damage enabled"
-msgstr "נזק מופעל"
+#, fuzzy
+msgid "Damage / PvP"
+msgstr "חבלה"
#: builtin/mainmenu/tab_online.lua
msgid "Del. Favorite"
msgstr "מחק מועדף"
#: builtin/mainmenu/tab_online.lua
-msgid "Favorite"
+#, fuzzy
+msgid "Favorites"
msgstr "מועדף"
#: builtin/mainmenu/tab_online.lua
-msgid "Join Game"
-msgstr "הצטרפות למשחק"
+msgid "Incompatible Servers"
+msgstr ""
#: builtin/mainmenu/tab_online.lua
-msgid "Name / Password"
-msgstr "ש×/סיסמה"
+msgid "Join Game"
+msgstr "הצטרפות למשחק"
#: builtin/mainmenu/tab_online.lua
msgid "Ping"
msgstr "פינג"
-#. ~ PvP = Player versus Player
#: builtin/mainmenu/tab_online.lua
-msgid "PvP enabled"
-msgstr "ל×פשר קרבות"
+#, fuzzy
+msgid "Public Servers"
+msgstr "הכרז על השרת"
+
+#: builtin/mainmenu/tab_online.lua
+msgid "Refresh"
+msgstr ""
+
+#: builtin/mainmenu/tab_online.lua
+#, fuzzy
+msgid "Server Description"
+msgstr "פורט לשרת"
#: builtin/mainmenu/tab_settings.lua
msgid "2x"
@@ -929,11 +1020,31 @@ msgstr "שנה מקשי×"
msgid "Connected Glass"
msgstr "זכוכיות מחוברות"
+#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
+msgid "Dynamic shadows"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Dynamic shadows: "
+msgstr ""
+
#: builtin/mainmenu/tab_settings.lua
msgid "Fancy Leaves"
msgstr "×¢×œ×™× ×ž×’× ×™×‘×™×"
#: builtin/mainmenu/tab_settings.lua
+msgid "High"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Low"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Medium"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
msgid "Mipmap"
msgstr "מיפמ×פ"
@@ -1005,10 +1116,6 @@ msgstr "החלקת ת×ורה"
msgid "Texturing:"
msgstr "טקסטורות:"
-#: builtin/mainmenu/tab_settings.lua
-msgid "To enable shaders the OpenGL driver needs to be used."
-msgstr "כדי ל×פשר ×©×™×™×“×¨×™× ×™×© להשתמש בדרייבר של OpenGL."
-
#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
msgid "Tone Mapping"
msgstr "מיפוי גווני×"
@@ -1022,6 +1129,14 @@ msgid "Trilinear Filter"
msgstr "פילטר תלת לינ×רי"
#: builtin/mainmenu/tab_settings.lua
+msgid "Ultra High"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Very Low"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
msgid "Waving Leaves"
msgstr "×¢×œ×™× ×ž×ª× ×•×¤×¤×™×"
@@ -1033,7 +1148,7 @@ msgstr "× ×•×–×œ×™× ×¢× ×’×œ×™×"
msgid "Waving Plants"
msgstr "×¦×ž×—×™× ×ž×ª× ×•×¢× ×¢×™×"
-#: src/client/client.cpp
+#: src/client/client.cpp src/client/game.cpp
msgid "Connection timed out."
msgstr "זמן המתנה לחיבור ×זל."
@@ -1062,7 +1177,8 @@ msgid "Connection error (timed out?)"
msgstr "בעיה בחיבור (נגמר זמן ההמתנה?)"
#: src/client/clientlauncher.cpp
-msgid "Could not find or load game \""
+#, fuzzy
+msgid "Could not find or load game: "
msgstr "×œ× ×ž×¦×œ×™×— ×œ×ž×¦×•× ×ו לטעון משחק \""
#: src/client/clientlauncher.cpp
@@ -1093,18 +1209,6 @@ msgstr "הסיסמה שניתנה ×œ× ×¤×ª×—×”: "
msgid "Provided world path doesn't exist: "
msgstr "נתיב ×”×¢×•×œ× ×©× ×™×ª×Ÿ ×œ× ×§×™×™×: "
-#. ~ DO NOT TRANSLATE THIS LITERALLY!
-#. This is a special string. Put either "no" or "yes"
-#. into the translation field (literally).
-#. Choose "yes" if the language requires use of the fallback
-#. font, "no" otherwise.
-#. The fallback font is (normally) required for languages with
-#. non-Latin script, like Chinese.
-#. When in doubt, test your translation.
-#: src/client/fontengine.cpp
-msgid "needs_fallback_font"
-msgstr "yes"
-
#: src/client/game.cpp
msgid ""
"\n"
@@ -1118,14 +1222,6 @@ msgid "- Address: "
msgstr "- כתובת: "
#: src/client/game.cpp
-msgid "- Creative Mode: "
-msgstr "- מצב יצירתי: "
-
-#: src/client/game.cpp
-msgid "- Damage: "
-msgstr "- חבלה: "
-
-#: src/client/game.cpp
msgid "- Mode: "
msgstr "- מצב: "
@@ -1147,6 +1243,16 @@ msgid "- Server Name: "
msgstr "- ×©× ×©×¨×ª: "
#: src/client/game.cpp
+#, fuzzy
+msgid "A serialization error occurred:"
+msgstr "×ירעה שגי××”:"
+
+#: src/client/game.cpp
+#, c-format
+msgid "Access denied. Reason: %s"
+msgstr ""
+
+#: src/client/game.cpp
msgid "Automatic forward disabled"
msgstr "התקדמות ×וטומטית קדימה מבוטלת"
@@ -1155,6 +1261,22 @@ msgid "Automatic forward enabled"
msgstr "תנועה קדימה ×וטומטית מופעל"
#: src/client/game.cpp
+msgid "Block bounds hidden"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Block bounds shown for all blocks"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Block bounds shown for current block"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Block bounds shown for nearby blocks"
+msgstr ""
+
+#: src/client/game.cpp
msgid "Camera update disabled"
msgstr "עדכון מצלמה מבוטל"
@@ -1163,6 +1285,10 @@ msgid "Camera update enabled"
msgstr "עדכון מצלמה מופעל"
#: src/client/game.cpp
+msgid "Can't show block bounds (need 'basic_debug' privilege)"
+msgstr ""
+
+#: src/client/game.cpp
msgid "Change Password"
msgstr "שנה סיסמה"
@@ -1175,6 +1301,11 @@ msgid "Cinematic mode enabled"
msgstr "מצב קולנועי מופעל"
#: src/client/game.cpp
+#, fuzzy
+msgid "Client disconnected"
+msgstr "קלינט"
+
+#: src/client/game.cpp
msgid "Client side scripting is disabled"
msgstr "×¡×§×¨×™×¤×˜×™× ×‘×¦×“ לקוח מבוטלי×"
@@ -1183,6 +1314,10 @@ msgid "Connecting to server..."
msgstr "מתחבר לשרת..."
#: src/client/game.cpp
+msgid "Connection failed for unknown reason"
+msgstr ""
+
+#: src/client/game.cpp
msgid "Continue"
msgstr "המשך"
@@ -1220,6 +1355,11 @@ msgstr ""
"- %s: כדי לפתוח ×ת הצ׳×ט\n"
#: src/client/game.cpp
+#, c-format
+msgid "Couldn't resolve address: %s"
+msgstr ""
+
+#: src/client/game.cpp
msgid "Creating client..."
msgstr "יוצר לקוח..."
@@ -1285,27 +1425,27 @@ msgstr "יצי××” למערכת ההפעלה"
#: src/client/game.cpp
msgid "Fast mode disabled"
-msgstr "מצב מהיר מבוטל"
+msgstr "מצב המהירות מושבת"
#: src/client/game.cpp
msgid "Fast mode enabled"
-msgstr "מצב מהיר מופעל"
+msgstr "מצב המהירות מופעל"
#: src/client/game.cpp
msgid "Fast mode enabled (note: no 'fast' privilege)"
-msgstr "מצב מהיר מופעל (×©×™× ×œ×‘, ×ין הרש×ת 'fast')"
+msgstr "מצב המהירות מופעל (לתשומת ליבך: ×ין הרש×ת \"fast\")"
#: src/client/game.cpp
msgid "Fly mode disabled"
-msgstr "מצב תעופה מבוטל"
+msgstr "מצב התעופה מושבת"
#: src/client/game.cpp
msgid "Fly mode enabled"
-msgstr "מצב תעופה הופעל"
+msgstr "מצב התעופה מופעל"
#: src/client/game.cpp
msgid "Fly mode enabled (note: no 'fly' privilege)"
-msgstr "מצב תעופה מופעל (×©×™× ×œ×‘, ×ין הרש×ת 'fly')"
+msgstr "מצב התעופה מופעל (לתשומת ליבך: ×ין הרש×ת \"fly\")"
#: src/client/game.cpp
msgid "Fog disabled"
@@ -1325,7 +1465,7 @@ msgstr "המשחק הושהה"
#: src/client/game.cpp
msgid "Hosting server"
-msgstr "שרת מ×רח"
+msgstr "שרת ×ירוח"
#: src/client/game.cpp
msgid "Item definitions..."
@@ -1333,7 +1473,7 @@ msgstr "הגדרות פריט..."
#: src/client/game.cpp
msgid "KiB/s"
-msgstr "קילובייט/שניה"
+msgstr "â€KiB/s"
#: src/client/game.cpp
msgid "Media..."
@@ -1348,6 +1488,11 @@ msgid "Minimap currently disabled by game or mod"
msgstr "מיפמ×פ כרגע מבוטל ×¢\"×™ המשחק ×ו המוד"
#: src/client/game.cpp
+#, fuzzy
+msgid "Multiplayer"
+msgstr "שחקן יחיד"
+
+#: src/client/game.cpp
msgid "Noclip mode disabled"
msgstr "מעבר דרך קירות מבוטל"
@@ -1421,6 +1566,21 @@ msgstr "מערכת שמע מופעלת"
#: src/client/game.cpp
#, c-format
+msgid "The server is probably running a different version of %s."
+msgstr ""
+
+#: src/client/game.cpp
+#, c-format
+msgid "Unable to connect to %s because IPv6 is disabled"
+msgstr ""
+
+#: src/client/game.cpp
+#, c-format
+msgid "Unable to listen on %s because IPv6 is disabled"
+msgstr ""
+
+#: src/client/game.cpp
+#, c-format
msgid "Viewing range changed to %d"
msgstr "טווח ר××™×” השתנה ל %d"
@@ -1445,7 +1605,7 @@ msgstr "מסגרת שלדית מוצגת"
#: src/client/game.cpp
msgid "Zoom currently disabled by game or mod"
-msgstr "×–×•× ×’×¨×’×¢ מבוטל על-ידי המשחק ×ו המוד"
+msgstr "המבט מקרוב מושבת על ידי המשחק ×ו השיפור"
#: src/client/game.cpp
msgid "ok"
@@ -1489,10 +1649,6 @@ msgid "Caps Lock"
msgstr "Caps Lock"
#: src/client/keycode.cpp
-msgid "Clear"
-msgstr "× ×§×”"
-
-#: src/client/keycode.cpp
msgid "Control"
msgstr "קונטרול"
@@ -1746,7 +1902,7 @@ msgstr "מפה קטנה מוסתרת"
#: src/client/minimap.cpp
#, c-format
msgid "Minimap in radar mode, Zoom x%d"
-msgstr "מפה קטנה במצב ר×דר, ×–×•× x %d"
+msgstr "מפה קטנה במצב מכ״×, יחס תצוגה x%d"
#: src/client/minimap.cpp
#, c-format
@@ -1757,6 +1913,15 @@ msgstr "מפה קטנה במצב שטח, ×–×•× x %d"
msgid "Minimap in texture mode"
msgstr "מפה קטנה במצב טקסטורה"
+#: src/gui/guiChatConsole.cpp
+#, fuzzy
+msgid "Failed to open webpage"
+msgstr "הורדת $1 נכשלה"
+
+#: src/gui/guiChatConsole.cpp
+msgid "Opening webpage"
+msgstr ""
+
#: src/gui/guiConfirmRegistration.cpp src/gui/guiPasswordChange.cpp
msgid "Passwords do not match!"
msgstr "סיסמ×ות ×œ× ×ª×•×מות!"
@@ -1784,7 +1949,8 @@ msgid "Proceed"
msgstr "להמשיך"
#: src/gui/guiKeyChangeMenu.cpp
-msgid "\"Special\" = climb down"
+#, fuzzy
+msgid "\"Aux1\" = climb down"
msgstr "\"מיוחד\" = טפס למטה"
#: src/gui/guiKeyChangeMenu.cpp
@@ -1796,10 +1962,18 @@ msgid "Automatic jumping"
msgstr "קפיצה ×וטומטית"
#: src/gui/guiKeyChangeMenu.cpp
+msgid "Aux1"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
msgid "Backward"
msgstr "×חורה"
#: src/gui/guiKeyChangeMenu.cpp
+msgid "Block bounds"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
msgid "Change camera"
msgstr "שנה מצלמה"
@@ -1888,10 +2062,6 @@ msgid "Sneak"
msgstr "התכופף"
#: src/gui/guiKeyChangeMenu.cpp
-msgid "Special"
-msgstr "מיוחד"
-
-#: src/gui/guiKeyChangeMenu.cpp
msgid "Toggle HUD"
msgstr "מתג מידע על מסך"
@@ -1952,7 +2122,8 @@ msgid "Muted"
msgstr "מושתק"
#: src/gui/guiVolumeChange.cpp
-msgid "Sound Volume: "
+#, fuzzy, c-format
+msgid "Sound Volume: %d%%"
msgstr "עוצמת שמע: "
#. ~ Imperative, as in "Enter/type in text".
@@ -1977,9 +2148,10 @@ msgstr ""
"×× ×ž×•×©×‘×ª, ×”×’'ויסטיק הווירטו×לי יעמוד ×‘×ž×™×§×•× ×”×ž×’×¢ הר×שון."
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
-"(Android) Use virtual joystick to trigger \"aux\" button.\n"
-"If enabled, virtual joystick will also tap \"aux\" button when out of main "
+"(Android) Use virtual joystick to trigger \"Aux1\" button.\n"
+"If enabled, virtual joystick will also tap \"Aux1\" button when out of main "
"circle."
msgstr ""
"(Android) השתמש בג'ויסטיק וירטו×לי כדי להפעיל ×ת כפתור \"aux\".\n"
@@ -2058,7 +2230,7 @@ msgstr "×¢× × ×™× ×ª×œ×ª מימדיי×"
#: src/settings_translation_file.cpp
msgid "3D mode"
-msgstr "מצב תלת מימדי"
+msgstr "מצב תלת־ממד"
#: src/settings_translation_file.cpp
msgid "3D mode parallax strength"
@@ -2202,6 +2374,10 @@ msgid ""
msgstr "הת×× ×ת תצורת dpi למסך שלך (×œ× X11 / Android בלבד) למשל. למסכי 4k."
#: src/settings_translation_file.cpp
+msgid "Adjust the detected display density, used for scaling UI elements."
+msgstr ""
+
+#: src/settings_translation_file.cpp
#, c-format
msgid ""
"Adjusts the density of the floatland layer.\n"
@@ -2334,6 +2510,15 @@ msgid "Autoscaling mode"
msgstr "מצב סק×לה ×וטומטית (Autoscale)"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Aux1 key"
+msgstr "מקש הקפיצה"
+
+#: src/settings_translation_file.cpp
+msgid "Aux1 key for climbing/descending"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Backward key"
msgstr "מקש התזוזה ×חורה"
@@ -2378,10 +2563,6 @@ msgid "Biome noise"
msgstr "רעש Biome"
#: src/settings_translation_file.cpp
-msgid "Bits per pixel (aka color depth) in fullscreen mode."
-msgstr "×‘×™×˜×™× ×œ×¤×™×§×¡×œ (עומק צבע) במצב מסך מל×."
-
-#: src/settings_translation_file.cpp
msgid "Block send optimize distance"
msgstr "×ופטימיזצית שליחת בלוק"
@@ -2486,6 +2667,16 @@ msgstr ""
"×›×שר 0.0 ×”×•× ×¨×ž×ª ×ור מינימלית, 1.0 ×”×•× ×¨×ž×ª ×ור מקסימלית."
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Chat command time message threshold"
+msgstr "סף בעיטה להודעות צ'×ט"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Chat commands"
+msgstr "פקודות צ'×ט"
+
+#: src/settings_translation_file.cpp
msgid "Chat font size"
msgstr "גודל גופן צ'×ט"
@@ -2518,8 +2709,9 @@ msgid "Chat toggle key"
msgstr "מתג הפעלת צ'×ט"
#: src/settings_translation_file.cpp
-msgid "Chatcommands"
-msgstr "פקודות צ'×ט"
+#, fuzzy
+msgid "Chat weblinks"
+msgstr "צ'×ט מוצג"
#: src/settings_translation_file.cpp
msgid "Chunk size"
@@ -2538,6 +2730,12 @@ msgid "Clean transparent textures"
msgstr "טקסטורות נקיות ושקופות"
#: src/settings_translation_file.cpp
+msgid ""
+"Clickable weblinks (middle-click or Ctrl+left-click) enabled in chat console "
+"output."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Client"
msgstr "לקוח"
@@ -2584,6 +2782,10 @@ msgid "Colored fog"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Colored shadows"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid ""
"Comma-separated list of flags to hide in the content repository.\n"
"\"nonfree\" can be used to hide packages which do not qualify as 'free "
@@ -2611,6 +2813,22 @@ msgid "Command key"
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Compression level to use when saving mapblocks to disk.\n"
+"-1 - use default compression level\n"
+"0 - least compression, fastest\n"
+"9 - best compression, slowest"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Compression level to use when sending mapblocks to the client.\n"
+"-1 - use default compression level\n"
+"0 - least compression, fastest\n"
+"9 - best compression, slowest"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Connect glass"
msgstr ""
@@ -2701,7 +2919,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"Crosshair alpha (opaqueness, between 0 and 255).\n"
-"Also controls the object crosshair color"
+"This also applies to the object crosshair."
msgstr ""
#: src/settings_translation_file.cpp
@@ -2778,8 +2996,9 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Default timeout for cURL, stated in milliseconds.\n"
-"Only has an effect if compiled with cURL."
+"Define shadow filtering quality.\n"
+"This simulates the soft shadows effect by applying a PCF or Poisson disk\n"
+"but also uses more resources."
msgstr ""
#: src/settings_translation_file.cpp
@@ -2899,6 +3118,10 @@ msgid "Disallow empty passwords"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Display Density Scaling Factor"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Domain name of server, to be displayed in the serverlist."
msgstr ""
@@ -2943,12 +3166,25 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Enable Poisson disk filtering.\n"
+"On true uses Poisson disk to make \"soft shadows\". Otherwise uses PCF "
+"filtering."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable colored shadows.\n"
+"On true translucent nodes cast colored shadows. This is expensive."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Enable console window"
msgstr ""
#: src/settings_translation_file.cpp
msgid "Enable creative mode for all players"
-msgstr ""
+msgstr "הפעלת המצב היצירתי עבור כל השחקני×"
#: src/settings_translation_file.cpp
msgid "Enable joysticks"
@@ -3051,6 +3287,12 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Enables tradeoffs that reduce CPU load or increase rendering performance\n"
+"at the expense of minor visual glitches that do not impact game playability."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Engine profiling data print interval"
msgstr ""
@@ -3089,18 +3331,6 @@ msgid "Fallback font path"
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 ""
@@ -3118,7 +3348,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Fast movement (via the \"special\" key).\n"
+"Fast movement (via the \"Aux1\" key).\n"
"This requires the \"fast\" privilege on the server."
msgstr ""
@@ -3152,9 +3382,9 @@ 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."
+"which PNG optimizers usually discard, often resulting in dark or\n"
+"light edges to transparent textures. Apply a filter to clean that up\n"
+"at texture load time. This is automatically enabled if mipmapping is enabled."
msgstr ""
#: src/settings_translation_file.cpp
@@ -3246,15 +3476,15 @@ msgid "Font size"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Font size of the default font in point (pt)."
+msgid "Font size divisible by"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Font size of the fallback font in point (pt)."
+msgid "Font size of the default font where 1 unit = 1 pixel at 96 DPI"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Font size of the monospace font in point (pt)."
+msgid "Font size of the monospace font where 1 unit = 1 pixel at 96 DPI"
msgstr ""
#: src/settings_translation_file.cpp
@@ -3265,6 +3495,17 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"For pixel-style fonts that do not scale well, this ensures that font sizes "
+"used\n"
+"with this font will always be divisible by this value, in pixels. For "
+"instance,\n"
+"a pixel font 16 pixels tall should have this set to 16, so it will only ever "
+"be\n"
+"sized 16, 32, 48, etc., so a mod requesting a size of 25 will get 32."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Format of player chat messages. The following strings are valid "
"placeholders:\n"
"@name, @message, @timestamp (optional)"
@@ -3323,10 +3564,6 @@ msgid "Fraction of the visible distance at which fog starts to be rendered"
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)."
@@ -3351,12 +3588,8 @@ msgid "Full screen"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Full screen BPP"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Fullscreen mode."
-msgstr ""
+msgstr "מצב מסך מל×."
#: src/settings_translation_file.cpp
msgid "GUI scaling"
@@ -3378,7 +3611,7 @@ msgstr ""
msgid ""
"Global map generation attributes.\n"
"In Mapgen v6 the 'decorations' flag controls all decorations except trees\n"
-"and junglegrass, in all other mapgens this flag controls all decorations."
+"and jungle grass, in all other mapgens this flag controls all decorations."
msgstr ""
#: src/settings_translation_file.cpp
@@ -3448,8 +3681,10 @@ msgid "Heat noise"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Height component of the initial window size."
-msgstr ""
+#, fuzzy
+msgid ""
+"Height component of the initial window size. Ignored in fullscreen mode."
+msgstr "רכיב רוחב של גודל החלון הר×שוני."
#: src/settings_translation_file.cpp
msgid "Height noise"
@@ -3460,10 +3695,6 @@ msgid "Height select noise"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "High-precision FPU"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Hill steepness"
msgstr ""
@@ -3694,8 +3925,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"If disabled, \"special\" key is used to fly fast if both fly and fast mode "
-"are\n"
+"If disabled, \"Aux1\" key is used to fly fast if both fly and fast mode are\n"
"enabled."
msgstr ""
@@ -3717,8 +3947,8 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"If enabled, \"special\" key instead of \"sneak\" key is used for climbing "
-"down and\n"
+"If enabled, \"Aux1\" key instead of \"Sneak\" key is used for climbing down "
+"and\n"
"descending."
msgstr ""
@@ -3764,6 +3994,12 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"If the execution of a chat command takes longer than this specified time in\n"
+"seconds, add the time information to the chat command message"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"If the file size of debug.txt exceeds the number of megabytes specified in\n"
"this setting when it is opened, the file is moved to debug.txt.1,\n"
"deleting an older debug.txt.1 if it exists.\n"
@@ -3809,7 +4045,7 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Instrument chatcommands on registration."
+msgid "Instrument chat commands on registration."
msgstr ""
#: src/settings_translation_file.cpp
@@ -3893,7 +4129,7 @@ msgid "Joystick button repetition interval"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Joystick deadzone"
+msgid "Joystick dead zone"
msgstr ""
#: src/settings_translation_file.cpp
@@ -4651,10 +4887,6 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Makes DirectX work with LuaJIT. Disable if it causes troubles."
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Makes all liquids opaque"
msgstr ""
@@ -4726,6 +4958,10 @@ msgid "Map save interval"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Map shadows update frames"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Mapblock limit"
msgstr ""
@@ -4840,6 +5076,10 @@ msgid "Maximum FPS when the window is not focused, or when the game is paused."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Maximum distance to render shadows."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Maximum forceloaded blocks"
msgstr ""
@@ -4945,7 +5185,15 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Maximum time in ms a file download (e.g. a mod download) may take."
+msgid ""
+"Maximum time a file download (e.g. a mod download) may take, stated in "
+"milliseconds."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum time an interactive request (e.g. server list fetch) may take, "
+"stated in milliseconds."
msgstr ""
#: src/settings_translation_file.cpp
@@ -5009,7 +5257,7 @@ msgid "Mod channels"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Modifies the size of the hudbar elements."
+msgid "Modifies the size of the HUD elements."
msgstr ""
#: src/settings_translation_file.cpp
@@ -5021,6 +5269,10 @@ msgid "Monospace font size"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Monospace font size divisible by"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Mountain height noise"
msgstr ""
@@ -5141,7 +5393,7 @@ 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"
+"This is a trade-off between SQLite transaction overhead and\n"
"memory consumption (4096=100MB, as a rule of thumb)."
msgstr ""
@@ -5160,21 +5412,18 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Opaqueness (alpha) of the shadow behind the fallback font, between 0 and 255."
-msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid ""
"Open the pause menu when the window's focus is lost. Does not pause if a "
"formspec is\n"
"open."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Optional override for chat weblink color."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid ""
-"Path of the fallback font.\n"
-"If “freetype†setting is enabled: Must be a TrueType font.\n"
-"If “freetype†setting is disabled: Must be a bitmap or XML vectors font.\n"
+"Path of the fallback font. Must be a TrueType font.\n"
"This font will be used for certain languages or if the default font is "
"unavailable."
msgstr ""
@@ -5197,17 +5446,13 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Path to the default font.\n"
-"If “freetype†setting is enabled: Must be a TrueType font.\n"
-"If “freetype†setting is disabled: Must be a bitmap or XML vectors font.\n"
+"Path to the default font. Must be a TrueType font.\n"
"The fallback font will be used if the font cannot be loaded."
msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Path to the monospace font.\n"
-"If “freetype†setting is enabled: Must be a TrueType font.\n"
-"If “freetype†setting is disabled: Must be a bitmap or XML vectors font.\n"
+"Path to the monospace font. Must be a TrueType font.\n"
"This font is used for e.g. the console and profiler screen."
msgstr ""
@@ -5262,6 +5507,11 @@ msgid "Player versus player"
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Poisson filtering"
+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."
@@ -5306,9 +5556,9 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"Prometheus listener address.\n"
-"If minetest is compiled with ENABLE_PROMETHEUS option enabled,\n"
+"If Minetest is compiled with ENABLE_PROMETHEUS option enabled,\n"
"enable metrics listener for Prometheus on that address.\n"
-"Metrics can be fetch on http://127.0.0.1:30000/metrics"
+"Metrics can be fetched on http://127.0.0.1:30000/metrics"
msgstr ""
#: src/settings_translation_file.cpp
@@ -5597,6 +5847,35 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Set the shadow strength.\n"
+"Lower value means lighter shadows, higher value means darker shadows."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set the soft shadow radius size.\n"
+"Lower values mean sharper shadows, bigger values mean softer shadows.\n"
+"Minimum value: 1.0; maximum value: 10.0"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set the tilt of Sun/Moon orbit in degrees.\n"
+"Value of 0 means no tilt / vertical orbit.\n"
+"Minimum value: 0.0; maximum value: 60.0"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid ""
+"Set to true to enable Shadow Mapping.\n"
+"Requires shaders to be enabled."
+msgstr ""
+"עוצמת הקול של כל הצלילי×.\n"
+"דורש הפעלת מערכת הקול."
+
+#: src/settings_translation_file.cpp
+msgid ""
"Set to true to enable waving leaves.\n"
"Requires shaders to be enabled."
msgstr ""
@@ -5614,6 +5893,13 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Sets shadow texture quality to 32 bits.\n"
+"On false, 16 bits texture will be used.\n"
+"This can cause much more artifacts in the shadow."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Shader path"
msgstr ""
@@ -5626,15 +5912,29 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Shadow filter quality"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Shadow map max distance in nodes to render shadows"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Shadow map texture in 32 bits"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Shadow map texture size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid ""
"Shadow offset (in pixels) of the default font. If 0, then shadow will not be "
"drawn."
msgstr ""
#: src/settings_translation_file.cpp
-msgid ""
-"Shadow offset (in pixels) of the fallback font. If 0, then shadow will not "
-"be drawn."
+msgid "Shadow strength"
msgstr ""
#: src/settings_translation_file.cpp
@@ -5656,7 +5956,7 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Show nametag backgrounds by default"
+msgid "Show name tag backgrounds by default"
msgstr ""
#: src/settings_translation_file.cpp
@@ -5681,6 +5981,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Sky Body Orbit Tilt"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Slice w"
msgstr ""
@@ -5735,15 +6039,11 @@ msgid "Sneaking speed, in nodes per second."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Sound"
+msgid "Soft shadow radius"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Special key"
-msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid "Special key for climbing/descending"
+msgid "Sound"
msgstr ""
#: src/settings_translation_file.cpp
@@ -5763,6 +6063,14 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Spread a complete update of shadow map over given amount of frames.\n"
+"Higher values might make shadows laggy, lower values\n"
+"will consume more resources.\n"
+"Minimum value: 1; maximum value: 16"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Spread of light curve boost range.\n"
"Controls the width of the range to be boosted.\n"
"Standard deviation of the light curve boost Gaussian."
@@ -5869,6 +6177,13 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Texture size to render the shadow map on.\n"
+"This must be a power of two.\n"
+"Bigger numbers create better shadows but it is also more expensive."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Textures on a node may be aligned either to the node or to the world.\n"
"The former mode suits better things like machines, furniture, etc., while\n"
"the latter makes stairs and microblocks fit surroundings better.\n"
@@ -5882,7 +6197,7 @@ msgid "The URL for the content repository"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "The deadzone of the joystick"
+msgid "The dead zone of the joystick"
msgstr ""
#: src/settings_translation_file.cpp
@@ -5940,7 +6255,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"The rendering back-end for Irrlicht.\n"
+"The rendering back-end.\n"
"A restart is required after changing this.\n"
"Note: On Android, stick with OGLES1 if unsure! App may fail to start "
"otherwise.\n"
@@ -5951,7 +6266,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"The sensitivity of the joystick axes for moving the\n"
-"ingame view frustum around."
+"in-game view frustum around."
msgstr ""
#: src/settings_translation_file.cpp
@@ -6045,6 +6360,10 @@ msgid "Touch screen threshold"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Tradeoffs for performance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Trees noise"
msgstr ""
@@ -6114,7 +6433,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Use mip mapping to scale textures. May slightly increase performance,\n"
+"Use mipmapping to scale textures. May slightly increase performance,\n"
"especially when using a high resolution texture pack.\n"
"Gamma correct downscaling is not supported."
msgstr ""
@@ -6227,7 +6546,8 @@ msgid "Viewing range"
msgstr "טווח ר××™×”"
#: src/settings_translation_file.cpp
-msgid "Virtual joystick triggers aux button"
+#, fuzzy
+msgid "Virtual joystick triggers Aux1 button"
msgstr "מקש הפעלת ×’'ויסטיק וירטו×לי"
#: src/settings_translation_file.cpp
@@ -6300,6 +6620,10 @@ msgid "Waving plants"
msgstr "×¦×ž×—×™× ×ž×ª× ×•×¤×¤×™×"
#: src/settings_translation_file.cpp
+msgid "Weblink color"
+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"
@@ -6320,23 +6644,15 @@ msgid ""
"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.\n"
+"memory. Powers of 2 are recommended. This setting is ONLY applied if\n"
+"bilinear/trilinear/anisotropic filtering is enabled.\n"
"This is also used as the base node texture size for world-aligned\n"
"texture autoscaling."
msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Whether FreeType fonts are used, requires FreeType support to be compiled "
-"in.\n"
-"If disabled, bitmap and XML vectors fonts are used instead."
-msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid ""
-"Whether nametag backgrounds should be shown by default.\n"
+"Whether name tag backgrounds should be shown by default.\n"
"Mods may still set a background."
msgstr ""
@@ -6378,7 +6694,8 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Width component of the initial window size."
+#, fuzzy
+msgid "Width component of the initial window size. Ignored in fullscreen mode."
msgstr "רכיב רוחב של גודל החלון הר×שוני."
#: src/settings_translation_file.cpp
@@ -6464,57 +6781,80 @@ msgid "Y-level of seabed."
msgstr ""
#: src/settings_translation_file.cpp
-msgid ""
-"ZLib compression level to use when saving mapblocks to disk.\n"
-"-1 - Zlib's default compression level\n"
-"0 - no compresson, fastest\n"
-"9 - best compression, slowest\n"
-"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)"
-msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid ""
-"ZLib compression level to use when sending mapblocks to the client.\n"
-"-1 - Zlib's default compression level\n"
-"0 - no compresson, fastest\n"
-"9 - best compression, slowest\n"
-"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "cURL file download timeout"
msgstr "(cURL) זמן להורדה נגמר"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "cURL interactive timeout"
+msgstr "(cURL) מגבלת זמן"
+
+#: src/settings_translation_file.cpp
msgid "cURL parallel limit"
msgstr "(cURL) מגבלה לפעולות במקביל"
-#: src/settings_translation_file.cpp
-msgid "cURL timeout"
-msgstr "(cURL) מגבלת זמן"
+#~ msgid "- Creative Mode: "
+#~ msgstr "- מצב יצירתי: "
+
+#~ msgid "- Damage: "
+#~ msgstr "- חבלה: "
+
+#~ msgid "Address / Port"
+#~ msgstr "כתובת / פורט"
+
+#~ msgid "Bits per pixel (aka color depth) in fullscreen mode."
+#~ msgstr "×‘×™×˜×™× ×œ×¤×™×§×¡×œ (עומק צבע) במצב מסך מל×."
#~ msgid "Configure"
#~ msgstr "קביעת תצורה"
+#~ msgid "Credits"
+#~ msgstr "תודות"
+
+#~ msgid "Damage enabled"
+#~ msgstr "נזק מופעל"
+
#, fuzzy
#~ msgid "Enable VBO"
#~ msgstr "×פשר בכל"
+#~ msgid "Install: file: \"$1\""
+#~ msgstr "התקנה: מקובץ: \"$1\""
+
#~ msgid "Main menu style"
#~ msgstr "סגנון התפריט הר×שי"
+#~ msgid "Name / Password"
+#~ msgstr "ש×/סיסמה"
+
#~ msgid "No"
#~ msgstr "ל×"
#~ msgid "Ok"
#~ msgstr "×ישור"
+#~ msgid "PvP enabled"
+#~ msgstr "ל×פשר קרבות"
+
#, fuzzy
#~ msgid "Reset singleplayer world"
#~ msgstr "שרת"
+#~ msgid "Special"
+#~ msgstr "מיוחד"
+
+#~ msgid "To enable shaders the OpenGL driver needs to be used."
+#~ msgstr "כדי ל×פשר ×©×™×™×“×¨×™× ×™×© להשתמש בדרייבר של OpenGL."
+
#~ msgid "View"
#~ msgstr "תצוגה"
#~ msgid "Yes"
#~ msgstr "כן"
+
+#, fuzzy
+#~ msgid "You died."
+#~ msgstr "מתת"
+
+#~ msgid "needs_fallback_font"
+#~ msgstr "yes"
diff --git a/po/hi/minetest.po b/po/hi/minetest.po
index 2c88b00f0..f21076beb 100644
--- a/po/hi/minetest.po
+++ b/po/hi/minetest.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: minetest\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-02-23 19:03+0100\n"
+"POT-Creation-Date: 2022-01-25 23:19+0100\n"
"PO-Revision-Date: 2020-10-06 14:26+0000\n"
"Last-Translator: Eyekay49 <satvikpatwardhan@gmail.com>\n"
"Language-Team: Hindi <https://hosted.weblate.org/projects/minetest/minetest/"
@@ -19,6 +19,46 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=n > 1;\n"
"X-Generator: Weblate 4.3-dev\n"
+#: builtin/client/chatcommands.lua
+msgid "Clear the out chat queue"
+msgstr ""
+
+#: builtin/client/chatcommands.lua
+msgid "Empty command."
+msgstr ""
+
+#: builtin/client/chatcommands.lua
+#, fuzzy
+msgid "Exit to main menu"
+msgstr "बंद करके मेनू पर जाà¤à¤‚"
+
+#: builtin/client/chatcommands.lua
+#, fuzzy
+msgid "Invalid command: "
+msgstr "लोकल कमांड"
+
+#: builtin/client/chatcommands.lua
+msgid "Issued command: "
+msgstr ""
+
+#: builtin/client/chatcommands.lua
+#, fuzzy
+msgid "List online players"
+msgstr "à¤à¤•-खिलाडी"
+
+#: builtin/client/chatcommands.lua
+#, fuzzy
+msgid "Online players: "
+msgstr "à¤à¤•-खिलाडी"
+
+#: builtin/client/chatcommands.lua
+msgid "The out chat queue is now empty."
+msgstr ""
+
+#: builtin/client/chatcommands.lua
+msgid "This command is disabled by server."
+msgstr ""
+
#: builtin/client/death_formspec.lua src/client/game.cpp
msgid "Respawn"
msgstr "वापस ज़िंदा होà¤à¤‚"
@@ -27,11 +67,42 @@ msgstr "वापस ज़िंदा होà¤à¤‚"
msgid "You died"
msgstr "आपकी मौत हो गयी"
+#: builtin/common/chatcommands.lua
+#, fuzzy
+msgid "Available commands:"
+msgstr "लोकल कमांड"
+
+#: builtin/common/chatcommands.lua
+#, fuzzy
+msgid "Available commands: "
+msgstr "लोकल कमांड"
+
+#: builtin/common/chatcommands.lua
+msgid "Command not available: "
+msgstr ""
+
+#: builtin/common/chatcommands.lua
+msgid "Get help for commands"
+msgstr ""
+
+#: builtin/common/chatcommands.lua
+msgid ""
+"Use '.help <cmd>' to get more information, or '.help all' to list everything."
+msgstr ""
+
+#: builtin/common/chatcommands.lua
+msgid "[all | <cmd>]"
+msgstr ""
+
#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp
msgid "OK"
msgstr "ठीक है"
#: builtin/fstk/ui.lua
+msgid "<none available>"
+msgstr ""
+
+#: builtin/fstk/ui.lua
msgid "An error occurred in a Lua script:"
msgstr "Lua कोड में यह परेशानी हà¥à¤ˆ :"
@@ -237,6 +308,11 @@ msgid "Install missing dependencies"
msgstr "अनावशà¥à¤¯à¤• निरà¥à¤­à¤°à¤¤à¤¾à¤à¤‚ :"
#: builtin/mainmenu/dlg_contentstore.lua
+#, fuzzy
+msgid "Install: Unsupported file type or broken archive"
+msgstr "इनà¥à¤¸à¥à¤Ÿà¤¾à¤² : \"$1\" का फाईल टाईप अंजान है याफिर आरकाइव खराब है"
+
+#: builtin/mainmenu/dlg_contentstore.lua
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Mods"
msgstr "माॅड"
@@ -538,7 +614,7 @@ msgstr "वापस सेटिंग पृषà¥à¤  पर जाà¤à¤‚"
msgid "Browse"
msgstr "ढूंढें"
-#: builtin/mainmenu/dlg_settings_advanced.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_settings.lua
msgid "Disabled"
msgstr "रà¥à¤•ा हà¥à¤†"
@@ -563,7 +639,8 @@ msgid "Offset"
msgstr "आफसेट"
#: builtin/mainmenu/dlg_settings_advanced.lua
-msgid "Persistance"
+#, fuzzy
+msgid "Persistence"
msgstr "हठ (परà¥à¤¸à¤¿à¤¸à¥à¤Ÿà¥‡à¤¨à¥à¤¸)"
#: builtin/mainmenu/dlg_settings_advanced.lua
@@ -582,7 +659,7 @@ msgstr "मूल चà¥à¤¨à¥‡à¤‚"
msgid "Scale"
msgstr "सà¥à¤•ेल"
-#: builtin/mainmenu/dlg_settings_advanced.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_online.lua
msgid "Search"
msgstr "ढूंढें"
@@ -674,14 +751,6 @@ msgid "Install Mod: Unable to find suitable folder name for modpack $1"
msgstr "माॅड इनà¥à¤¸à¥à¤Ÿà¤¾à¤²: माॅडपैक $1 के लिठसही फोलà¥à¤¡à¤° नहीं ढूंढा जा सका"
#: builtin/mainmenu/pkgmgr.lua
-msgid "Install: Unsupported file type \"$1\" or broken archive"
-msgstr "इनà¥à¤¸à¥à¤Ÿà¤¾à¤² : \"$1\" का फाईल टाईप अंजान है याफिर आरकाइव खराब है"
-
-#: builtin/mainmenu/pkgmgr.lua
-msgid "Install: file: \"$1\""
-msgstr "इनà¥à¤¸à¥à¤Ÿà¤¾à¤² : फाईल : \"$1\""
-
-#: builtin/mainmenu/pkgmgr.lua
msgid "Unable to find a valid mod or modpack"
msgstr "सही माॅड या माॅडपैक नहीं ढूंढ पाया गया"
@@ -714,6 +783,41 @@ msgstr "कà¥à¤²à¤¾à¤‡à¤‚ट की तरफ से सà¥à¤•à¥à¤°à¤¿à¤ªà¥à¤
msgid "Try reenabling public serverlist and check your internet connection."
msgstr "सारà¥à¤µà¤œà¤¨à¤¿à¤• सरà¥à¤µà¤° शृंखला (सरà¥à¤µà¤° लिसà¥à¤Ÿ) को 'हां' करें और इंटरनेट कनेकà¥à¤¶à¤¨ जांचें।"
+#: builtin/mainmenu/tab_about.lua
+msgid "About"
+msgstr ""
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Active Contributors"
+msgstr "सकà¥à¤°à¤¿à¤¯ सहायक"
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Active renderer:"
+msgstr ""
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Core Developers"
+msgstr "मà¥à¤–à¥à¤¯ डेवेलपर"
+
+#: builtin/mainmenu/tab_about.lua
+#, fuzzy
+msgid "Open User Data Directory"
+msgstr "फाईल पाथ चà¥à¤¨à¥‡à¤‚"
+
+#: builtin/mainmenu/tab_about.lua
+msgid ""
+"Opens the directory that contains user-provided worlds, games, mods,\n"
+"and texture packs in a file manager / explorer."
+msgstr ""
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Previous Contributors"
+msgstr "पूरà¥à¤µ सहायक"
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Previous Core Developers"
+msgstr "पूरà¥à¤µ मà¥à¤–à¥à¤¯ डेवेलपर"
+
#: builtin/mainmenu/tab_content.lua
msgid "Browse online content"
msgstr "नेट पर वसà¥à¤¤à¥à¤à¤‚ ढूंढें"
@@ -754,37 +858,6 @@ msgstr "पैकेज हटाà¤à¤‚"
msgid "Use Texture Pack"
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
-#, fuzzy
-msgid "Open User Data Directory"
-msgstr "फाईल पाथ चà¥à¤¨à¥‡à¤‚"
-
-#: builtin/mainmenu/tab_credits.lua
-msgid ""
-"Opens the directory that contains user-provided worlds, games, mods,\n"
-"and texture packs in a file manager / explorer."
-msgstr ""
-
-#: builtin/mainmenu/tab_credits.lua
-msgid "Previous Contributors"
-msgstr "पूरà¥à¤µ सहायक"
-
-#: builtin/mainmenu/tab_credits.lua
-msgid "Previous Core Developers"
-msgstr "पूरà¥à¤µ मà¥à¤–à¥à¤¯ डेवेलपर"
-
#: builtin/mainmenu/tab_local.lua
msgid "Announce Server"
msgstr "सरà¥à¤µà¤° सारà¥à¤µà¤œà¤¨à¤¿à¤• सरà¥à¤µà¤° सूची (server list) में दिखे"
@@ -813,7 +886,7 @@ msgstr "सरà¥à¤µà¤° चलाà¤à¤‚"
msgid "Install games from ContentDB"
msgstr ""
-#: builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
msgid "Name"
msgstr ""
@@ -825,7 +898,7 @@ msgstr "नया"
msgid "No world created or selected!"
msgstr "कोई दà¥à¤¨à¤¿à¤¯à¤¾ उपसà¥à¤¥à¤¿à¤¤ या चà¥à¤¨à¥€ गयी नहीं है !"
-#: builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
#, fuzzy
msgid "Password"
msgstr "नया पासवरà¥à¤¡"
@@ -834,7 +907,7 @@ msgstr "नया पासवरà¥à¤¡"
msgid "Play Game"
msgstr "खेल खेलें"
-#: builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
msgid "Port"
msgstr "पोरà¥à¤Ÿ"
@@ -856,8 +929,13 @@ msgid "Start Game"
msgstr "खेल शà¥à¤°à¥‚ करें"
#: builtin/mainmenu/tab_online.lua
-msgid "Address / Port"
-msgstr "à¤à¤¡à¤°à¥‡à¤¸ / पोरà¥à¤Ÿ"
+#, fuzzy
+msgid "Address"
+msgstr "- à¤à¤¡à¥à¤°à¥‡à¤¸ : "
+
+#: builtin/mainmenu/tab_online.lua src/client/keycode.cpp
+msgid "Clear"
+msgstr "खाली करें"
#: builtin/mainmenu/tab_online.lua
msgid "Connect"
@@ -867,34 +945,46 @@ msgstr "कनेकà¥à¤Ÿ करें"
msgid "Creative mode"
msgstr "असीमित संसाधन"
+#. ~ PvP = Player versus Player
#: builtin/mainmenu/tab_online.lua
-msgid "Damage enabled"
-msgstr "हानि व मृतà¥à¤¯à¥ हो सकती है"
+#, fuzzy
+msgid "Damage / PvP"
+msgstr "- हानि : "
#: builtin/mainmenu/tab_online.lua
msgid "Del. Favorite"
msgstr "पसंद हटाà¤à¤‚"
#: builtin/mainmenu/tab_online.lua
-msgid "Favorite"
+#, fuzzy
+msgid "Favorites"
msgstr "पसंद"
#: builtin/mainmenu/tab_online.lua
-msgid "Join Game"
-msgstr "खेल में शामिल होà¤à¤‚"
+msgid "Incompatible Servers"
+msgstr ""
#: builtin/mainmenu/tab_online.lua
-msgid "Name / Password"
-msgstr "नाम/पासवरà¥à¤¡"
+msgid "Join Game"
+msgstr "खेल में शामिल होà¤à¤‚"
#: builtin/mainmenu/tab_online.lua
msgid "Ping"
msgstr "पिंग"
-#. ~ PvP = Player versus Player
#: builtin/mainmenu/tab_online.lua
-msgid "PvP enabled"
-msgstr "खिलाडियों में मारा-पीटी की अनà¥à¤®à¤¤à¥€ है"
+#, fuzzy
+msgid "Public Servers"
+msgstr "सरà¥à¤µà¤° सारà¥à¤µà¤œà¤¨à¤¿à¤• सरà¥à¤µà¤° सूची (server list) में दिखे"
+
+#: builtin/mainmenu/tab_online.lua
+msgid "Refresh"
+msgstr ""
+
+#: builtin/mainmenu/tab_online.lua
+#, fuzzy
+msgid "Server Description"
+msgstr "सरà¥à¤µà¤° पोरà¥à¤Ÿ"
#: builtin/mainmenu/tab_settings.lua
msgid "2x"
@@ -936,11 +1026,31 @@ msgstr "की बदलें"
msgid "Connected Glass"
msgstr "जà¥à¤¡à¥‡ शिशे"
+#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
+msgid "Dynamic shadows"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Dynamic shadows: "
+msgstr ""
+
#: builtin/mainmenu/tab_settings.lua
msgid "Fancy Leaves"
msgstr "रोचक पतà¥à¤¤à¥‡"
#: builtin/mainmenu/tab_settings.lua
+msgid "High"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Low"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Medium"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
msgid "Mipmap"
msgstr "मिपमैप"
@@ -1013,10 +1123,6 @@ msgstr "चिकना उजाला"
msgid "Texturing:"
msgstr "कला बनावट :"
-#: builtin/mainmenu/tab_settings.lua
-msgid "To enable shaders the OpenGL driver needs to be used."
-msgstr "छाया बनावट कॆ लिये OpenGL डà¥à¤°à¤¾à¤ˆà¤µà¤° आवशà¥à¤¯à¤• हैं|"
-
#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
msgid "Tone Mapping"
msgstr "टोन मैपिंग"
@@ -1030,6 +1136,14 @@ msgid "Trilinear Filter"
msgstr "तà¥à¤°à¤¿à¤°à¥‡à¤–ीय फिलà¥à¤Ÿà¤°"
#: builtin/mainmenu/tab_settings.lua
+msgid "Ultra High"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Very Low"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
msgid "Waving Leaves"
msgstr "पतà¥à¤¤à¥‡ लहराà¤à¤‚"
@@ -1041,7 +1155,7 @@ msgstr "पानी में लहरें बनें"
msgid "Waving Plants"
msgstr "पाैधे लहराà¤à¤‚"
-#: src/client/client.cpp
+#: src/client/client.cpp src/client/game.cpp
msgid "Connection timed out."
msgstr "कनेकà¥à¤¶à¤¨ समय अंत|"
@@ -1070,7 +1184,8 @@ msgid "Connection error (timed out?)"
msgstr "कनेकà¥à¤¶à¤¨ खराबी (समय अंत?)"
#: src/client/clientlauncher.cpp
-msgid "Could not find or load game \""
+#, fuzzy
+msgid "Could not find or load game: "
msgstr "खेल ढूंढा ना जा सका या लोड नहीं किया जा सका \""
#: src/client/clientlauncher.cpp
@@ -1101,18 +1216,6 @@ msgstr "पासवरà¥à¤¡ फाईल नहीं खà¥à¤²à¤¾ :- "
msgid "Provided world path doesn't exist: "
msgstr "दà¥à¤¨à¤¿à¤¯à¤¾ का फाईल पाथ नहीं है : "
-#. ~ DO NOT TRANSLATE THIS LITERALLY!
-#. This is a special string. Put either "no" or "yes"
-#. into the translation field (literally).
-#. Choose "yes" if the language requires use of the fallback
-#. font, "no" otherwise.
-#. The fallback font is (normally) required for languages with
-#. non-Latin script, like Chinese.
-#. When in doubt, test your translation.
-#: src/client/fontengine.cpp
-msgid "needs_fallback_font"
-msgstr "yes"
-
#: src/client/game.cpp
msgid ""
"\n"
@@ -1126,14 +1229,6 @@ msgid "- Address: "
msgstr "- à¤à¤¡à¥à¤°à¥‡à¤¸ : "
#: src/client/game.cpp
-msgid "- Creative Mode: "
-msgstr "- असीमित साधन "
-
-#: src/client/game.cpp
-msgid "- Damage: "
-msgstr "- हानि : "
-
-#: src/client/game.cpp
msgid "- Mode: "
msgstr "- तकनीक : "
@@ -1155,6 +1250,16 @@ msgid "- Server Name: "
msgstr "- सरà¥à¤µà¤° का नाम : "
#: src/client/game.cpp
+#, fuzzy
+msgid "A serialization error occurred:"
+msgstr "à¤à¤• खराबी हो गयी :"
+
+#: src/client/game.cpp
+#, c-format
+msgid "Access denied. Reason: %s"
+msgstr ""
+
+#: src/client/game.cpp
msgid "Automatic forward disabled"
msgstr "सà¥à¤µà¤šà¤¾à¤² रà¥à¤•ा हà¥à¤†"
@@ -1163,6 +1268,22 @@ msgid "Automatic forward enabled"
msgstr "सà¥à¤µà¤šà¤¾à¤² चालू"
#: src/client/game.cpp
+msgid "Block bounds hidden"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Block bounds shown for all blocks"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Block bounds shown for current block"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Block bounds shown for nearby blocks"
+msgstr ""
+
+#: src/client/game.cpp
msgid "Camera update disabled"
msgstr "कैमरा रà¥à¤•ा हà¥à¤†"
@@ -1171,6 +1292,10 @@ msgid "Camera update enabled"
msgstr "कैमरा चालू"
#: src/client/game.cpp
+msgid "Can't show block bounds (need 'basic_debug' privilege)"
+msgstr ""
+
+#: src/client/game.cpp
msgid "Change Password"
msgstr "पासवरà¥à¤¡ बदलें"
@@ -1183,6 +1308,10 @@ msgid "Cinematic mode enabled"
msgstr "सिनेमा चाल चालू"
#: src/client/game.cpp
+msgid "Client disconnected"
+msgstr ""
+
+#: src/client/game.cpp
msgid "Client side scripting is disabled"
msgstr "कà¥à¤²à¤¾à¤‡à¤‚ट की तरफ से सà¥à¤•à¥à¤°à¤¿à¤ªà¥à¤Ÿ लगाना मना है"
@@ -1191,6 +1320,10 @@ msgid "Connecting to server..."
msgstr "सरà¥à¤µà¤° से कनेकà¥à¤Ÿ हà¥à¤† जा रहा है ..."
#: src/client/game.cpp
+msgid "Connection failed for unknown reason"
+msgstr ""
+
+#: src/client/game.cpp
msgid "Continue"
msgstr "आगे बढ़ें"
@@ -1228,6 +1361,11 @@ msgstr ""
"- %s : बात करने के लिà¤\n"
#: src/client/game.cpp
+#, c-format
+msgid "Couldn't resolve address: %s"
+msgstr ""
+
+#: src/client/game.cpp
msgid "Creating client..."
msgstr "कà¥à¤²à¤¾à¤‡à¤‚ट बनाया जा रहा है ..."
@@ -1356,6 +1494,11 @@ msgid "Minimap currently disabled by game or mod"
msgstr "खेल या मॉड़ के वजह से छोटा नकà¥à¤¶à¤¾ मना है"
#: src/client/game.cpp
+#, fuzzy
+msgid "Multiplayer"
+msgstr "à¤à¤•-खिलाडी"
+
+#: src/client/game.cpp
msgid "Noclip mode disabled"
msgstr "तरल चाल रà¥à¤•ा हà¥à¤†"
@@ -1429,6 +1572,21 @@ msgstr "आवाज चालू"
#: src/client/game.cpp
#, c-format
+msgid "The server is probably running a different version of %s."
+msgstr ""
+
+#: src/client/game.cpp
+#, c-format
+msgid "Unable to connect to %s because IPv6 is disabled"
+msgstr ""
+
+#: src/client/game.cpp
+#, c-format
+msgid "Unable to listen on %s because IPv6 is disabled"
+msgstr ""
+
+#: src/client/game.cpp
+#, c-format
msgid "Viewing range changed to %d"
msgstr "दृषà¥à¤Ÿà¤¿ सीमा बदलकर %d है"
@@ -1497,10 +1655,6 @@ msgid "Caps Lock"
msgstr "कैपà¥à¤¸ लाक"
#: src/client/keycode.cpp
-msgid "Clear"
-msgstr "खाली करें"
-
-#: src/client/keycode.cpp
msgid "Control"
msgstr "कंटà¥à¤°à¥‹à¤²"
@@ -1766,6 +1920,15 @@ msgstr "छोटा नकà¥à¤¶à¤¾ जमीन मोड, 1 गà¥à¤¨à¤¾ जà
msgid "Minimap in texture mode"
msgstr "छोटा नकà¥à¤¶à¤¾ जमीन मोड, 1 गà¥à¤¨à¤¾ ज़ूम"
+#: src/gui/guiChatConsole.cpp
+#, fuzzy
+msgid "Failed to open webpage"
+msgstr "$1 का डाऊनलोड असफल हà¥à¤†"
+
+#: src/gui/guiChatConsole.cpp
+msgid "Opening webpage"
+msgstr ""
+
#: src/gui/guiConfirmRegistration.cpp src/gui/guiPasswordChange.cpp
msgid "Passwords do not match!"
msgstr "पासवरà¥à¤¡ अलग-अलग हैं!"
@@ -1794,7 +1957,8 @@ msgid "Proceed"
msgstr "आगे बढ़े"
#: src/gui/guiKeyChangeMenu.cpp
-msgid "\"Special\" = climb down"
+#, fuzzy
+msgid "\"Aux1\" = climb down"
msgstr "\"सà¥à¤ªà¥‡à¤¶à¤²\" = नीचे उतरना"
#: src/gui/guiKeyChangeMenu.cpp
@@ -1806,10 +1970,18 @@ msgid "Automatic jumping"
msgstr "कूदने के लिठबटन दबाना अनावशà¥à¤¯à¤•"
#: src/gui/guiKeyChangeMenu.cpp
+msgid "Aux1"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
msgid "Backward"
msgstr "पीछे जाà¤à¤‚"
#: src/gui/guiKeyChangeMenu.cpp
+msgid "Block bounds"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
msgid "Change camera"
msgstr "कैमरा बदलना"
@@ -1898,10 +2070,6 @@ msgid "Sneak"
msgstr "संभल के चलना"
#: src/gui/guiKeyChangeMenu.cpp
-msgid "Special"
-msgstr "सà¥à¤ªà¥‡à¤¶à¤²"
-
-#: src/gui/guiKeyChangeMenu.cpp
msgid "Toggle HUD"
msgstr "हे. अ. डि"
@@ -1962,7 +2130,8 @@ msgid "Muted"
msgstr "चà¥à¤ª"
#: src/gui/guiVolumeChange.cpp
-msgid "Sound Volume: "
+#, fuzzy, c-format
+msgid "Sound Volume: %d%%"
msgstr "आवाज "
#. ~ Imperative, as in "Enter/type in text".
@@ -1986,8 +2155,8 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"(Android) Use virtual joystick to trigger \"aux\" button.\n"
-"If enabled, virtual joystick will also tap \"aux\" button when out of main "
+"(Android) Use virtual joystick to trigger \"Aux1\" button.\n"
+"If enabled, virtual joystick will also tap \"Aux1\" button when out of main "
"circle."
msgstr ""
@@ -2170,6 +2339,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Adjust the detected display density, used for scaling UI elements."
+msgstr ""
+
+#: src/settings_translation_file.cpp
#, c-format
msgid ""
"Adjusts the density of the floatland layer.\n"
@@ -2282,6 +2455,15 @@ msgid "Autoscaling mode"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Aux1 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Aux1 key for climbing/descending"
+msgstr "चलने उतरने के लिठसà¥à¤ªà¥‡à¤¶à¤² की"
+
+#: src/settings_translation_file.cpp
msgid "Backward key"
msgstr ""
@@ -2326,10 +2508,6 @@ msgid "Biome noise"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Bits per pixel (aka color depth) in fullscreen mode."
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Block send optimize distance"
msgstr ""
@@ -2428,6 +2606,15 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Chat command time message threshold"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Chat commands"
+msgstr "आजà¥à¤žà¤¾"
+
+#: src/settings_translation_file.cpp
msgid "Chat font size"
msgstr ""
@@ -2460,8 +2647,9 @@ msgid "Chat toggle key"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Chatcommands"
-msgstr ""
+#, fuzzy
+msgid "Chat weblinks"
+msgstr "बातें दिखाई देंगी"
#: src/settings_translation_file.cpp
msgid "Chunk size"
@@ -2480,6 +2668,12 @@ msgid "Clean transparent textures"
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Clickable weblinks (middle-click or Ctrl+left-click) enabled in chat console "
+"output."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Client"
msgstr ""
@@ -2524,6 +2718,10 @@ msgid "Colored fog"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Colored shadows"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid ""
"Comma-separated list of flags to hide in the content repository.\n"
"\"nonfree\" can be used to hide packages which do not qualify as 'free "
@@ -2551,6 +2749,22 @@ msgid "Command key"
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Compression level to use when saving mapblocks to disk.\n"
+"-1 - use default compression level\n"
+"0 - least compression, fastest\n"
+"9 - best compression, slowest"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Compression level to use when sending mapblocks to the client.\n"
+"-1 - use default compression level\n"
+"0 - least compression, fastest\n"
+"9 - best compression, slowest"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Connect glass"
msgstr ""
@@ -2641,7 +2855,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"Crosshair alpha (opaqueness, between 0 and 255).\n"
-"Also controls the object crosshair color"
+"This also applies to the object crosshair."
msgstr ""
#: src/settings_translation_file.cpp
@@ -2718,8 +2932,9 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Default timeout for cURL, stated in milliseconds.\n"
-"Only has an effect if compiled with cURL."
+"Define shadow filtering quality.\n"
+"This simulates the soft shadows effect by applying a PCF or Poisson disk\n"
+"but also uses more resources."
msgstr ""
#: src/settings_translation_file.cpp
@@ -2837,6 +3052,10 @@ msgid "Disallow empty passwords"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Display Density Scaling Factor"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Domain name of server, to be displayed in the serverlist."
msgstr ""
@@ -2881,6 +3100,19 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Enable Poisson disk filtering.\n"
+"On true uses Poisson disk to make \"soft shadows\". Otherwise uses PCF "
+"filtering."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable colored shadows.\n"
+"On true translucent nodes cast colored shadows. This is expensive."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Enable console window"
msgstr ""
@@ -2989,6 +3221,12 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Enables tradeoffs that reduce CPU load or increase rendering performance\n"
+"at the expense of minor visual glitches that do not impact game playability."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Engine profiling data print interval"
msgstr ""
@@ -3027,18 +3265,6 @@ msgid "Fallback font path"
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 ""
@@ -3055,8 +3281,9 @@ msgid "Fast movement"
msgstr "तेज चलन"
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
-"Fast movement (via the \"special\" key).\n"
+"Fast movement (via the \"Aux1\" key).\n"
"This requires the \"fast\" privilege on the server."
msgstr ""
"सà¥à¤ªà¥‡à¤¶à¤² की दबाने पर आप बहà¥à¤¤ तॆज चलने लगेंगे |\n"
@@ -3092,9 +3319,9 @@ 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."
+"which PNG optimizers usually discard, often resulting in dark or\n"
+"light edges to transparent textures. Apply a filter to clean that up\n"
+"at texture load time. This is automatically enabled if mipmapping is enabled."
msgstr ""
#: src/settings_translation_file.cpp
@@ -3186,15 +3413,15 @@ msgid "Font size"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Font size of the default font in point (pt)."
+msgid "Font size divisible by"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Font size of the fallback font in point (pt)."
+msgid "Font size of the default font where 1 unit = 1 pixel at 96 DPI"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Font size of the monospace font in point (pt)."
+msgid "Font size of the monospace font where 1 unit = 1 pixel at 96 DPI"
msgstr ""
#: src/settings_translation_file.cpp
@@ -3205,6 +3432,17 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"For pixel-style fonts that do not scale well, this ensures that font sizes "
+"used\n"
+"with this font will always be divisible by this value, in pixels. For "
+"instance,\n"
+"a pixel font 16 pixels tall should have this set to 16, so it will only ever "
+"be\n"
+"sized 16, 32, 48, etc., so a mod requesting a size of 25 will get 32."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Format of player chat messages. The following strings are valid "
"placeholders:\n"
"@name, @message, @timestamp (optional)"
@@ -3263,10 +3501,6 @@ msgid "Fraction of the visible distance at which fog starts to be rendered"
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)."
@@ -3291,10 +3525,6 @@ msgid "Full screen"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Full screen BPP"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Fullscreen mode."
msgstr ""
@@ -3318,7 +3548,7 @@ msgstr ""
msgid ""
"Global map generation attributes.\n"
"In Mapgen v6 the 'decorations' flag controls all decorations except trees\n"
-"and junglegrass, in all other mapgens this flag controls all decorations."
+"and jungle grass, in all other mapgens this flag controls all decorations."
msgstr ""
#: src/settings_translation_file.cpp
@@ -3387,7 +3617,8 @@ msgid "Heat noise"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Height component of the initial window size."
+msgid ""
+"Height component of the initial window size. Ignored in fullscreen mode."
msgstr ""
#: src/settings_translation_file.cpp
@@ -3399,10 +3630,6 @@ msgid "Height select noise"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "High-precision FPU"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Hill steepness"
msgstr ""
@@ -3632,9 +3859,9 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
-"If disabled, \"special\" key is used to fly fast if both fly and fast mode "
-"are\n"
+"If disabled, \"Aux1\" key is used to fly fast if both fly and fast mode are\n"
"enabled."
msgstr ""
"अगर यह रà¥à¤•ा हà¥à¤† हà¥à¤† तो तेज उड़ने के लिà¤\n"
@@ -3659,9 +3886,10 @@ msgstr ""
"इसके लिये \"तरल चाल\" विषेशाधिकार आवशà¥à¤¯à¤• है |"
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
-"If enabled, \"special\" key instead of \"sneak\" key is used for climbing "
-"down and\n"
+"If enabled, \"Aux1\" key instead of \"Sneak\" key is used for climbing down "
+"and\n"
"descending."
msgstr ""
"अगर यहां चालू हà¥à¤† तो नीचे उतरने के लिठसà¥à¤ªà¥‡à¤¶à¤²\n"
@@ -3711,6 +3939,12 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"If the execution of a chat command takes longer than this specified time in\n"
+"seconds, add the time information to the chat command message"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"If the file size of debug.txt exceeds the number of megabytes specified in\n"
"this setting when it is opened, the file is moved to debug.txt.1,\n"
"deleting an older debug.txt.1 if it exists.\n"
@@ -3756,7 +3990,7 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Instrument chatcommands on registration."
+msgid "Instrument chat commands on registration."
msgstr ""
#: src/settings_translation_file.cpp
@@ -3840,7 +4074,7 @@ msgid "Joystick button repetition interval"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Joystick deadzone"
+msgid "Joystick dead zone"
msgstr ""
#: src/settings_translation_file.cpp
@@ -4598,10 +4832,6 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Makes DirectX work with LuaJIT. Disable if it causes troubles."
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Makes all liquids opaque"
msgstr ""
@@ -4673,6 +4903,10 @@ msgid "Map save interval"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Map shadows update frames"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Mapblock limit"
msgstr ""
@@ -4781,6 +5015,10 @@ msgid "Maximum FPS when the window is not focused, or when the game is paused."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Maximum distance to render shadows."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Maximum forceloaded blocks"
msgstr ""
@@ -4886,7 +5124,15 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Maximum time in ms a file download (e.g. a mod download) may take."
+msgid ""
+"Maximum time a file download (e.g. a mod download) may take, stated in "
+"milliseconds."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum time an interactive request (e.g. server list fetch) may take, "
+"stated in milliseconds."
msgstr ""
#: src/settings_translation_file.cpp
@@ -4950,7 +5196,7 @@ msgid "Mod channels"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Modifies the size of the hudbar elements."
+msgid "Modifies the size of the HUD elements."
msgstr ""
#: src/settings_translation_file.cpp
@@ -4962,6 +5208,10 @@ msgid "Monospace font size"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Monospace font size divisible by"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Mountain height noise"
msgstr ""
@@ -5082,7 +5332,7 @@ 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"
+"This is a trade-off between SQLite transaction overhead and\n"
"memory consumption (4096=100MB, as a rule of thumb)."
msgstr ""
@@ -5101,21 +5351,18 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Opaqueness (alpha) of the shadow behind the fallback font, between 0 and 255."
-msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid ""
"Open the pause menu when the window's focus is lost. Does not pause if a "
"formspec is\n"
"open."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Optional override for chat weblink color."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid ""
-"Path of the fallback font.\n"
-"If “freetype†setting is enabled: Must be a TrueType font.\n"
-"If “freetype†setting is disabled: Must be a bitmap or XML vectors font.\n"
+"Path of the fallback font. Must be a TrueType font.\n"
"This font will be used for certain languages or if the default font is "
"unavailable."
msgstr ""
@@ -5138,17 +5385,13 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Path to the default font.\n"
-"If “freetype†setting is enabled: Must be a TrueType font.\n"
-"If “freetype†setting is disabled: Must be a bitmap or XML vectors font.\n"
+"Path to the default font. Must be a TrueType font.\n"
"The fallback font will be used if the font cannot be loaded."
msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Path to the monospace font.\n"
-"If “freetype†setting is enabled: Must be a TrueType font.\n"
-"If “freetype†setting is disabled: Must be a bitmap or XML vectors font.\n"
+"Path to the monospace font. Must be a TrueType font.\n"
"This font is used for e.g. the console and profiler screen."
msgstr ""
@@ -5206,6 +5449,10 @@ msgid "Player versus player"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Poisson filtering"
+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."
@@ -5250,9 +5497,9 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"Prometheus listener address.\n"
-"If minetest is compiled with ENABLE_PROMETHEUS option enabled,\n"
+"If Minetest is compiled with ENABLE_PROMETHEUS option enabled,\n"
"enable metrics listener for Prometheus on that address.\n"
-"Metrics can be fetch on http://127.0.0.1:30000/metrics"
+"Metrics can be fetched on http://127.0.0.1:30000/metrics"
msgstr ""
#: src/settings_translation_file.cpp
@@ -5541,6 +5788,32 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Set the shadow strength.\n"
+"Lower value means lighter shadows, higher value means darker shadows."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set the soft shadow radius size.\n"
+"Lower values mean sharper shadows, bigger values mean softer shadows.\n"
+"Minimum value: 1.0; maximum value: 10.0"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set the tilt of Sun/Moon orbit in degrees.\n"
+"Value of 0 means no tilt / vertical orbit.\n"
+"Minimum value: 0.0; maximum value: 60.0"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set to true to enable Shadow Mapping.\n"
+"Requires shaders to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Set to true to enable waving leaves.\n"
"Requires shaders to be enabled."
msgstr ""
@@ -5558,6 +5831,13 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Sets shadow texture quality to 32 bits.\n"
+"On false, 16 bits texture will be used.\n"
+"This can cause much more artifacts in the shadow."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Shader path"
msgstr ""
@@ -5570,15 +5850,29 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Shadow filter quality"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Shadow map max distance in nodes to render shadows"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Shadow map texture in 32 bits"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Shadow map texture size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid ""
"Shadow offset (in pixels) of the default font. If 0, then shadow will not be "
"drawn."
msgstr ""
#: src/settings_translation_file.cpp
-msgid ""
-"Shadow offset (in pixels) of the fallback font. If 0, then shadow will not "
-"be drawn."
+msgid "Shadow strength"
msgstr ""
#: src/settings_translation_file.cpp
@@ -5600,7 +5894,7 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Show nametag backgrounds by default"
+msgid "Show name tag backgrounds by default"
msgstr ""
#: src/settings_translation_file.cpp
@@ -5625,6 +5919,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Sky Body Orbit Tilt"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Slice w"
msgstr ""
@@ -5681,18 +5979,14 @@ msgid "Sneaking speed, in nodes per second."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Sound"
+msgid "Soft shadow radius"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Special key"
+msgid "Sound"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Special key for climbing/descending"
-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"
@@ -5709,6 +6003,14 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Spread a complete update of shadow map over given amount of frames.\n"
+"Higher values might make shadows laggy, lower values\n"
+"will consume more resources.\n"
+"Minimum value: 1; maximum value: 16"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Spread of light curve boost range.\n"
"Controls the width of the range to be boosted.\n"
"Standard deviation of the light curve boost Gaussian."
@@ -5815,6 +6117,13 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Texture size to render the shadow map on.\n"
+"This must be a power of two.\n"
+"Bigger numbers create better shadows but it is also more expensive."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Textures on a node may be aligned either to the node or to the world.\n"
"The former mode suits better things like machines, furniture, etc., while\n"
"the latter makes stairs and microblocks fit surroundings better.\n"
@@ -5828,7 +6137,7 @@ msgid "The URL for the content repository"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "The deadzone of the joystick"
+msgid "The dead zone of the joystick"
msgstr ""
#: src/settings_translation_file.cpp
@@ -5886,7 +6195,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"The rendering back-end for Irrlicht.\n"
+"The rendering back-end.\n"
"A restart is required after changing this.\n"
"Note: On Android, stick with OGLES1 if unsure! App may fail to start "
"otherwise.\n"
@@ -5897,7 +6206,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"The sensitivity of the joystick axes for moving the\n"
-"ingame view frustum around."
+"in-game view frustum around."
msgstr ""
#: src/settings_translation_file.cpp
@@ -5991,6 +6300,10 @@ msgid "Touch screen threshold"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Tradeoffs for performance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Trees noise"
msgstr ""
@@ -6060,7 +6373,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Use mip mapping to scale textures. May slightly increase performance,\n"
+"Use mipmapping to scale textures. May slightly increase performance,\n"
"especially when using a high resolution texture pack.\n"
"Gamma correct downscaling is not supported."
msgstr ""
@@ -6173,7 +6486,7 @@ msgid "Viewing range"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Virtual joystick triggers aux button"
+msgid "Virtual joystick triggers Aux1 button"
msgstr ""
#: src/settings_translation_file.cpp
@@ -6244,6 +6557,10 @@ msgid "Waving plants"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Weblink color"
+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"
@@ -6264,23 +6581,15 @@ msgid ""
"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.\n"
+"memory. Powers of 2 are recommended. This setting is ONLY applied if\n"
+"bilinear/trilinear/anisotropic filtering is enabled.\n"
"This is also used as the base node texture size for world-aligned\n"
"texture autoscaling."
msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Whether FreeType fonts are used, requires FreeType support to be compiled "
-"in.\n"
-"If disabled, bitmap and XML vectors fonts are used instead."
-msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid ""
-"Whether nametag backgrounds should be shown by default.\n"
+"Whether name tag backgrounds should be shown by default.\n"
"Mods may still set a background."
msgstr ""
@@ -6322,7 +6631,7 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Width component of the initial window size."
+msgid "Width component of the initial window size. Ignored in fullscreen mode."
msgstr ""
#: src/settings_translation_file.cpp
@@ -6407,34 +6716,25 @@ msgid "Y-level of seabed."
msgstr ""
#: src/settings_translation_file.cpp
-msgid ""
-"ZLib compression level to use when saving mapblocks to disk.\n"
-"-1 - Zlib's default compression level\n"
-"0 - no compresson, fastest\n"
-"9 - best compression, slowest\n"
-"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)"
-msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid ""
-"ZLib compression level to use when sending mapblocks to the client.\n"
-"-1 - Zlib's default compression level\n"
-"0 - no compresson, fastest\n"
-"9 - best compression, slowest\n"
-"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)"
+msgid "cURL file download timeout"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "cURL file download timeout"
+msgid "cURL interactive timeout"
msgstr ""
#: src/settings_translation_file.cpp
msgid "cURL parallel limit"
msgstr ""
-#: src/settings_translation_file.cpp
-msgid "cURL timeout"
-msgstr ""
+#~ msgid "- Creative Mode: "
+#~ msgstr "- असीमित साधन "
+
+#~ msgid "- Damage: "
+#~ msgstr "- हानि : "
+
+#~ msgid "Address / Port"
+#~ msgstr "à¤à¤¡à¤°à¥‡à¤¸ / पोरà¥à¤Ÿ"
#~ msgid "Are you sure to reset your singleplayer world?"
#~ msgstr "कà¥à¤¯à¤¾ आप सचमà¥à¤š अपने à¤à¤•-खिलाडी दà¥à¤¨à¤¿à¤¯à¤¾ रदà¥à¤¦ करना चाहते हैं?"
@@ -6451,12 +6751,21 @@ msgstr ""
#~ msgid "Configure"
#~ msgstr "सेटिंग बदलें"
+#~ msgid "Credits"
+#~ msgstr "आभार सूची"
+
+#~ msgid "Damage enabled"
+#~ msgstr "हानि व मृतà¥à¤¯à¥ हो सकती है"
+
#~ msgid "Downloading and installing $1, please wait..."
#~ msgstr "$1 का डाऊनलोड व इनà¥à¤¸à¥à¤Ÿà¤¾à¤² चल रहा है, कृपया ठहरें ..."
#~ msgid "Generate Normal Maps"
#~ msgstr "मामूली नकà¥à¤¶à¥‡ बनाà¤à¤‚"
+#~ msgid "Install: file: \"$1\""
+#~ msgstr "इनà¥à¤¸à¥à¤Ÿà¤¾à¤² : फाईल : \"$1\""
+
#~ msgid "Main"
#~ msgstr "मà¥à¤–à¥à¤¯"
@@ -6472,6 +6781,9 @@ msgstr ""
#~ msgid "Minimap in surface mode, Zoom x4"
#~ msgstr "छोटा नकà¥à¤¶à¤¾ जमीन मोड, 4 गà¥à¤¨à¤¾ जून"
+#~ msgid "Name / Password"
+#~ msgstr "नाम/पासवरà¥à¤¡"
+
#~ msgid "Name/Password"
#~ msgstr "नाम/पासवरà¥à¤¡"
@@ -6484,14 +6796,30 @@ msgstr ""
#~ msgid "Parallax Occlusion"
#~ msgstr "पेरलेकà¥à¤¸ ऑकà¥à¤²à¥‚जन"
+#~ msgid "PvP enabled"
+#~ msgstr "खिलाडियों में मारा-पीटी की अनà¥à¤®à¤¤à¥€ है"
+
#~ msgid "Reset singleplayer world"
#~ msgstr "à¤à¤•-खिलाडी दà¥à¤¨à¤¿à¤¯à¤¾ रीसेट करें"
+#~ msgid "Special"
+#~ msgstr "सà¥à¤ªà¥‡à¤¶à¤²"
+
#~ msgid "Start Singleplayer"
#~ msgstr "à¤à¤•-खिलाडी शà¥à¤°à¥‚ करें"
+#~ msgid "To enable shaders the OpenGL driver needs to be used."
+#~ msgstr "छाया बनावट कॆ लिये OpenGL डà¥à¤°à¤¾à¤ˆà¤µà¤° आवशà¥à¤¯à¤• हैं|"
+
#~ msgid "View"
#~ msgstr "दृशà¥à¤¯"
#~ msgid "Yes"
#~ msgstr "हां"
+
+#, fuzzy
+#~ msgid "You died."
+#~ msgstr "आपकी मौत हो गयी"
+
+#~ msgid "needs_fallback_font"
+#~ msgstr "yes"
diff --git a/po/hu/minetest.po b/po/hu/minetest.po
index 02f3b51c5..ab9d0c49f 100644
--- a/po/hu/minetest.po
+++ b/po/hu/minetest.po
@@ -2,9 +2,9 @@ msgid ""
msgstr ""
"Project-Id-Version: Hungarian (Minetest)\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-02-23 19:03+0100\n"
-"PO-Revision-Date: 2021-03-28 20:29+0000\n"
-"Last-Translator: Hatlábú Farkas <hatlabufarkas@gmail.com>\n"
+"POT-Creation-Date: 2022-01-25 23:19+0100\n"
+"PO-Revision-Date: 2022-01-29 21:28+0000\n"
+"Last-Translator: Balázs Kovács <kovacs.balazs.ktk@gmail.com>\n"
"Language-Team: Hungarian <https://hosted.weblate.org/projects/minetest/"
"minetest/hu/>\n"
"Language: hu\n"
@@ -12,7 +12,43 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 4.6-dev\n"
+"X-Generator: Weblate 4.11-dev\n"
+
+#: builtin/client/chatcommands.lua
+msgid "Clear the out chat queue"
+msgstr "Kimenő üzenetek sorának törlése"
+
+#: builtin/client/chatcommands.lua
+msgid "Empty command."
+msgstr "Üres parancs."
+
+#: builtin/client/chatcommands.lua
+msgid "Exit to main menu"
+msgstr "Kilépés a főmenübe"
+
+#: builtin/client/chatcommands.lua
+msgid "Invalid command: "
+msgstr "Érvénytelen parancs: "
+
+#: builtin/client/chatcommands.lua
+msgid "Issued command: "
+msgstr "Kiadott parancs: "
+
+#: builtin/client/chatcommands.lua
+msgid "List online players"
+msgstr "Online játékosok listázása"
+
+#: builtin/client/chatcommands.lua
+msgid "Online players: "
+msgstr "Online játékosok: "
+
+#: builtin/client/chatcommands.lua
+msgid "The out chat queue is now empty."
+msgstr "A kiemenő üzenetek sora jelenleg üres."
+
+#: builtin/client/chatcommands.lua
+msgid "This command is disabled by server."
+msgstr "Ezt a parancsot a szerver letiltotta."
#: builtin/client/death_formspec.lua src/client/game.cpp
msgid "Respawn"
@@ -22,11 +58,42 @@ msgstr "Újraéledés"
msgid "You died"
msgstr "Meghaltál"
+#: builtin/common/chatcommands.lua
+msgid "Available commands:"
+msgstr "Elérhető parancsok:"
+
+#: builtin/common/chatcommands.lua
+msgid "Available commands: "
+msgstr "Elérhető parancsok: "
+
+#: builtin/common/chatcommands.lua
+msgid "Command not available: "
+msgstr "A parancs nem elérhető: "
+
+#: builtin/common/chatcommands.lua
+msgid "Get help for commands"
+msgstr "Segítség kérése a parancsokhoz"
+
+#: builtin/common/chatcommands.lua
+msgid ""
+"Use '.help <cmd>' to get more information, or '.help all' to list everything."
+msgstr ""
+"További információkhoz adja ki a '.help <cmd>' parancsot, vagy az összes "
+"kilistázásához a '.help all' parancsot."
+
+#: builtin/common/chatcommands.lua
+msgid "[all | <cmd>]"
+msgstr "[all | <cmd>]"
+
#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp
msgid "OK"
msgstr "OKÉ"
#: builtin/fstk/ui.lua
+msgid "<none available>"
+msgstr "<egy sem elérhető>"
+
+#: builtin/fstk/ui.lua
msgid "An error occurred in a Lua script:"
msgstr "Hiba történt egy Lua parancsfájlban:"
@@ -116,7 +183,7 @@ msgstr "Mod:"
#: builtin/mainmenu/dlg_config_world.lua
msgid "No (optional) dependencies"
-msgstr "Nincsenek (választható) függőségek:"
+msgstr "Nincsenek (választható) függőségek"
#: builtin/mainmenu/dlg_config_world.lua
msgid "No game description provided."
@@ -124,7 +191,7 @@ msgstr "Nincs elérhető játékleírás."
#: builtin/mainmenu/dlg_config_world.lua
msgid "No hard dependencies"
-msgstr "Nincsenek függőségek."
+msgstr "Nincsenek kötelező függőségek"
#: builtin/mainmenu/dlg_config_world.lua
msgid "No modpack description provided."
@@ -132,7 +199,7 @@ msgstr "Nincs elérhető modcsomag-leírás."
#: builtin/mainmenu/dlg_config_world.lua
msgid "No optional dependencies"
-msgstr "Nincsenek választható függőségek. "
+msgstr "Nincsenek választható függőségek"
#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_content.lua
msgid "Optional dependencies:"
@@ -157,11 +224,11 @@ msgstr "\"$1\" már létezik. Szeretné felülírni?"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "$1 and $2 dependencies will be installed."
-msgstr ""
+msgstr "$1 és $2 függőségek telepítve lesznek."
#: builtin/mainmenu/dlg_contentstore.lua
msgid "$1 by $2"
-msgstr ""
+msgstr "$1 az $2-ből"
#: builtin/mainmenu/dlg_contentstore.lua
msgid ""
@@ -177,11 +244,11 @@ msgstr "$1 Letöltése…"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "$1 required dependencies could not be found."
-msgstr ""
+msgstr "Ehhez szükséges függőségek nem találhatók: $1."
#: builtin/mainmenu/dlg_contentstore.lua
msgid "$1 will be installed, and $2 dependencies will be skipped."
-msgstr ""
+msgstr "$1 telepítve lesz, és $2 függőségek ki lesznek hagyva."
#: builtin/mainmenu/dlg_contentstore.lua
msgid "All packages"
@@ -229,6 +296,10 @@ msgid "Install missing dependencies"
msgstr "hiányzó függőségek telepitése"
#: builtin/mainmenu/dlg_contentstore.lua
+msgid "Install: Unsupported file type or broken archive"
+msgstr "Telepítés: nem támogatott fájltípus vagy sérült archívum"
+
+#: builtin/mainmenu/dlg_contentstore.lua
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Mods"
msgstr "Modok"
@@ -339,11 +410,11 @@ msgstr "Lapos terep"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Floating landmasses in the sky"
-msgstr "Lebegő földdarabok az égben"
+msgstr "Lebegő földtömegek az égben"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Floatlands (experimental)"
-msgstr "Lebegő földek"
+msgstr "Lebegő földek (kísérleti)"
#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
msgid "Game"
@@ -534,7 +605,7 @@ msgstr "< Vissza a Beállításokra"
msgid "Browse"
msgstr "Tallózás"
-#: builtin/mainmenu/dlg_settings_advanced.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_settings.lua
msgid "Disabled"
msgstr "Letiltva"
@@ -559,7 +630,7 @@ msgid "Offset"
msgstr "Eltolás"
#: builtin/mainmenu/dlg_settings_advanced.lua
-msgid "Persistance"
+msgid "Persistence"
msgstr "Folytonosság"
#: builtin/mainmenu/dlg_settings_advanced.lua
@@ -578,7 +649,7 @@ msgstr "Alapértelmezés visszaállítása"
msgid "Scale"
msgstr "Mérték"
-#: builtin/mainmenu/dlg_settings_advanced.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_online.lua
msgid "Search"
msgstr "Keresés"
@@ -671,14 +742,6 @@ msgstr ""
"Mod telepítése: nem található megfelelő mappanév ehhez a modcsomaghoz: $1"
#: builtin/mainmenu/pkgmgr.lua
-msgid "Install: Unsupported file type \"$1\" or broken archive"
-msgstr "Telepítés: nem támogatott „$1†fájltípus, vagy sérült archívum"
-
-#: builtin/mainmenu/pkgmgr.lua
-msgid "Install: file: \"$1\""
-msgstr "Fájl telepítése: \"$1\""
-
-#: builtin/mainmenu/pkgmgr.lua
msgid "Unable to find a valid mod or modpack"
msgstr "Nem található érvényes mod vagy modcsomag"
@@ -712,6 +775,43 @@ msgstr ""
"Próbáld újra engedélyezni a nyilvános kiszolgálólistát, és ellenőrizd az "
"internetkapcsolatot."
+#: builtin/mainmenu/tab_about.lua
+msgid "About"
+msgstr "Névjegy"
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Active Contributors"
+msgstr "Aktív közreműködők"
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Active renderer:"
+msgstr "Aktív renderelő:"
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Core Developers"
+msgstr "Belső fejlesztők"
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Open User Data Directory"
+msgstr "Felhasználói adatkönyvtár megnyitása"
+
+#: builtin/mainmenu/tab_about.lua
+msgid ""
+"Opens the directory that contains user-provided worlds, games, mods,\n"
+"and texture packs in a file manager / explorer."
+msgstr ""
+"Megnyitja a fájlkezelőben / intézőben azt a könyvtárat, amely a felhasználó "
+"világait,\n"
+"játékait, modjait, és textúráit tartalmazza."
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Previous Contributors"
+msgstr "Korábbi közreműködők"
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Previous Core Developers"
+msgstr "Korábbi belső fejlesztők"
+
#: builtin/mainmenu/tab_content.lua
msgid "Browse online content"
msgstr "Online tartalmak böngészése"
@@ -752,39 +852,6 @@ msgstr "Csomag eltávolítása"
msgid "Use Texture Pack"
msgstr "Textúracsomag használata"
-#: builtin/mainmenu/tab_credits.lua
-msgid "Active Contributors"
-msgstr "Aktív közreműködők"
-
-#: builtin/mainmenu/tab_credits.lua
-msgid "Core Developers"
-msgstr "Belső fejlesztők"
-
-#: builtin/mainmenu/tab_credits.lua
-msgid "Credits"
-msgstr "Köszönetnyilvánítás"
-
-#: builtin/mainmenu/tab_credits.lua
-msgid "Open User Data Directory"
-msgstr "Felhasználói adatkönyvtár megnyitása"
-
-#: builtin/mainmenu/tab_credits.lua
-msgid ""
-"Opens the directory that contains user-provided worlds, games, mods,\n"
-"and texture packs in a file manager / explorer."
-msgstr ""
-"Megnyitja a fájlkezelőben / intézőben azt a könyvtárat, amely a felhasználó "
-"világait,\n"
-"játékait, modjait, és textúráit tartalmazza."
-
-#: builtin/mainmenu/tab_credits.lua
-msgid "Previous Contributors"
-msgstr "Korábbi közreműködők"
-
-#: builtin/mainmenu/tab_credits.lua
-msgid "Previous Core Developers"
-msgstr "Korábbi belső fejlesztők"
-
#: builtin/mainmenu/tab_local.lua
msgid "Announce Server"
msgstr "Szerver nyilvánossá tétele"
@@ -813,7 +880,7 @@ msgstr "Szerver felállítása"
msgid "Install games from ContentDB"
msgstr "Játékok telepítése ContentDB-ről"
-#: builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
msgid "Name"
msgstr "Név"
@@ -825,7 +892,7 @@ msgstr "Új"
msgid "No world created or selected!"
msgstr "Nincs létrehozott vagy kiválasztott világ!"
-#: builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
msgid "Password"
msgstr "Jelszó"
@@ -833,7 +900,7 @@ msgstr "Jelszó"
msgid "Play Game"
msgstr "Játék indítása"
-#: builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
msgid "Port"
msgstr "Port"
@@ -854,8 +921,12 @@ msgid "Start Game"
msgstr "Indítás"
#: builtin/mainmenu/tab_online.lua
-msgid "Address / Port"
-msgstr "Cím / Port"
+msgid "Address"
+msgstr "Cím"
+
+#: builtin/mainmenu/tab_online.lua src/client/keycode.cpp
+msgid "Clear"
+msgstr "Törlés"
#: builtin/mainmenu/tab_online.lua
msgid "Connect"
@@ -865,34 +936,42 @@ msgstr "Kapcsolódás"
msgid "Creative mode"
msgstr "Kreatív mód"
+#. ~ PvP = Player versus Player
#: builtin/mainmenu/tab_online.lua
-msgid "Damage enabled"
-msgstr "Sérülés engedélyezve"
+msgid "Damage / PvP"
+msgstr "Sérülés / PvP"
#: builtin/mainmenu/tab_online.lua
msgid "Del. Favorite"
msgstr "Kedvenc törlése"
#: builtin/mainmenu/tab_online.lua
-msgid "Favorite"
-msgstr "Kedvenc"
+msgid "Favorites"
+msgstr "Kedvencek"
#: builtin/mainmenu/tab_online.lua
-msgid "Join Game"
-msgstr "Csatlakozás játékhoz"
+msgid "Incompatible Servers"
+msgstr "Inkompatibilis szerverek"
#: builtin/mainmenu/tab_online.lua
-msgid "Name / Password"
-msgstr "Név / Jelszó"
+msgid "Join Game"
+msgstr "Csatlakozás játékhoz"
#: builtin/mainmenu/tab_online.lua
msgid "Ping"
msgstr "Ping"
-#. ~ PvP = Player versus Player
#: builtin/mainmenu/tab_online.lua
-msgid "PvP enabled"
-msgstr "PvP engedélyezve"
+msgid "Public Servers"
+msgstr "Nyilvános szerverek"
+
+#: builtin/mainmenu/tab_online.lua
+msgid "Refresh"
+msgstr "Frissítés"
+
+#: builtin/mainmenu/tab_online.lua
+msgid "Server Description"
+msgstr "Szerver leírás"
#: builtin/mainmenu/tab_settings.lua
msgid "2x"
@@ -934,11 +1013,31 @@ msgstr "Gombok megváltoztatása"
msgid "Connected Glass"
msgstr "Csatlakozó üveg"
+#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
+msgid "Dynamic shadows"
+msgstr "Dinamikus árnyékok"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Dynamic shadows: "
+msgstr "Dinamikus árnyékok: "
+
#: builtin/mainmenu/tab_settings.lua
msgid "Fancy Leaves"
msgstr "Szép levelek"
#: builtin/mainmenu/tab_settings.lua
+msgid "High"
+msgstr "Magas"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Low"
+msgstr "Alacsony"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Medium"
+msgstr "Közepes"
+
+#: builtin/mainmenu/tab_settings.lua
msgid "Mipmap"
msgstr "Mipmap effekt"
@@ -1010,10 +1109,6 @@ msgstr "Simított megvilágítás"
msgid "Texturing:"
msgstr "Textúrázás:"
-#: builtin/mainmenu/tab_settings.lua
-msgid "To enable shaders the OpenGL driver needs to be used."
-msgstr "Az árnyalók engedélyezéséhez OpenGL driver használata szükséges."
-
#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
msgid "Tone Mapping"
msgstr "Tónus rajzolás"
@@ -1027,6 +1122,14 @@ msgid "Trilinear Filter"
msgstr "Trilineáris szűrés"
#: builtin/mainmenu/tab_settings.lua
+msgid "Ultra High"
+msgstr "Nagyon magas"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Very Low"
+msgstr "Nagyon alacsony"
+
+#: builtin/mainmenu/tab_settings.lua
msgid "Waving Leaves"
msgstr "Hullámzó levelek"
@@ -1038,7 +1141,7 @@ msgstr "Hullámzó folyadékok"
msgid "Waving Plants"
msgstr "Hullámzó növények"
-#: src/client/client.cpp
+#: src/client/client.cpp src/client/game.cpp
msgid "Connection timed out."
msgstr "Csatlakozási idő lejárt."
@@ -1067,8 +1170,8 @@ msgid "Connection error (timed out?)"
msgstr "Kapcsolódási hiba (időtúllépés?)"
#: src/client/clientlauncher.cpp
-msgid "Could not find or load game \""
-msgstr "Nem található vagy nem betölthető a játék"
+msgid "Could not find or load game: "
+msgstr "Nem található vagy nem betölthető a játék: "
#: src/client/clientlauncher.cpp
msgid "Invalid gamespec."
@@ -1098,18 +1201,6 @@ msgstr "jelszófájl megnyitás hiba: "
msgid "Provided world path doesn't exist: "
msgstr "A megadott útvonalon nem létezik világ: "
-#. ~ DO NOT TRANSLATE THIS LITERALLY!
-#. This is a special string. Put either "no" or "yes"
-#. into the translation field (literally).
-#. Choose "yes" if the language requires use of the fallback
-#. font, "no" otherwise.
-#. The fallback font is (normally) required for languages with
-#. non-Latin script, like Chinese.
-#. When in doubt, test your translation.
-#: src/client/fontengine.cpp
-msgid "needs_fallback_font"
-msgstr "no"
-
#: src/client/game.cpp
msgid ""
"\n"
@@ -1123,14 +1214,6 @@ msgid "- Address: "
msgstr "- Cím: "
#: src/client/game.cpp
-msgid "- Creative Mode: "
-msgstr "- Kreatív mód: "
-
-#: src/client/game.cpp
-msgid "- Damage: "
-msgstr "- Sérülés: "
-
-#: src/client/game.cpp
msgid "- Mode: "
msgstr "- Mód: "
@@ -1152,6 +1235,15 @@ msgid "- Server Name: "
msgstr "- Kiszolgáló neve: "
#: src/client/game.cpp
+msgid "A serialization error occurred:"
+msgstr "Szerializációs hiba történt:"
+
+#: src/client/game.cpp
+#, c-format
+msgid "Access denied. Reason: %s"
+msgstr "Hozzáférés megtagadva. Oka: %s"
+
+#: src/client/game.cpp
msgid "Automatic forward disabled"
msgstr "Automatikus előre kikapcsolva"
@@ -1160,6 +1252,22 @@ msgid "Automatic forward enabled"
msgstr "Automatikus előre engedélyezve"
#: src/client/game.cpp
+msgid "Block bounds hidden"
+msgstr "Blokkhatárok elrejtve"
+
+#: src/client/game.cpp
+msgid "Block bounds shown for all blocks"
+msgstr "Blokkhatárok mutatása minden blokk esetén"
+
+#: src/client/game.cpp
+msgid "Block bounds shown for current block"
+msgstr "Blokkhatárok mutatása az aktuális blokk esetén"
+
+#: src/client/game.cpp
+msgid "Block bounds shown for nearby blocks"
+msgstr "Blokkhatárok mutatása a közeli blokkok esetén"
+
+#: src/client/game.cpp
msgid "Camera update disabled"
msgstr "Kamera frissítés letiltva"
@@ -1168,8 +1276,13 @@ msgid "Camera update enabled"
msgstr "Kamera frissítés engedélyezve"
#: src/client/game.cpp
+msgid "Can't show block bounds (need 'basic_debug' privilege)"
+msgstr ""
+"Blokkhatárok mutatása nem lehetséges ('basic_debug' jogosultság szükséges)"
+
+#: src/client/game.cpp
msgid "Change Password"
-msgstr "Jelszó változtatása"
+msgstr "Jelszó Módosítása"
#: src/client/game.cpp
msgid "Cinematic mode disabled"
@@ -1180,6 +1293,10 @@ msgid "Cinematic mode enabled"
msgstr "Filmszerű mód engedélyezve"
#: src/client/game.cpp
+msgid "Client disconnected"
+msgstr "Kliens lecsatlakozott"
+
+#: src/client/game.cpp
msgid "Client side scripting is disabled"
msgstr "Kliens oldali szkriptek letiltva"
@@ -1188,11 +1305,15 @@ msgid "Connecting to server..."
msgstr "Kapcsolódás szerverhez..."
#: src/client/game.cpp
+msgid "Connection failed for unknown reason"
+msgstr "Kapcsolat megszakadt ismeretlen okból"
+
+#: src/client/game.cpp
msgid "Continue"
msgstr "Folytatás"
#: src/client/game.cpp
-#, fuzzy, c-format
+#, c-format
msgid ""
"Controls:\n"
"- %s: move forwards\n"
@@ -1215,16 +1336,21 @@ msgstr ""
"- %s: mozgás balra\n"
"- %s: mozgás jobbra\n"
"- %s: ugrás/mászás\n"
+"- %s: ásás/ütés\n"
+"- %s: letevés/használat\n"
"- %s: lopakodás/lefelé mászás\n"
"- %s: tárgy eldobása\n"
-"- %s: eszköztár\n"
+"- %s: felszerelés\n"
"- Egér: forgás/nézelődés\n"
-"- Bal-egér: ásás/ütés\n"
-"- Jobb-egér: elhelyezés/használat\n"
-"- Egér görgő: tárgy választása\n"
+"- Egérgörgő: tárgy kiválasztása\n"
"- %s: csevegés\n"
#: src/client/game.cpp
+#, c-format
+msgid "Couldn't resolve address: %s"
+msgstr "Cím feloldása sikertelen: %s"
+
+#: src/client/game.cpp
msgid "Creating client..."
msgstr "Kliens létrehozása…"
@@ -1260,17 +1386,17 @@ msgid ""
" --> place single item to slot\n"
msgstr ""
"Alapértelmezett irányítás:\n"
-"Nem látható menü:\n"
+"Ha nem látható menü:\n"
"- egy érintés: gomb aktiválás\n"
"- dupla érintés: lehelyezés/használat\n"
"- ujj csúsztatás: körbenézés\n"
-"Menü/Eszköztár látható:\n"
+"Ha a Menü/Felszerelés látható:\n"
"- dupla érintés (kívül):\n"
" -->bezárás\n"
-"- stack, vagy slot érintése:\n"
-" --> stack mozgatás\n"
+"- köteg, vagy hely érintése:\n"
+" --> köteg mozgatás\n"
"- \"érint&húz\", érintés 2. ujjal\n"
-" --> egy elem slotba helyezése\n"
+" --> letesz egyetlen tárgyat a helyre\n"
#: src/client/game.cpp
msgid "Disabled unlimited viewing range"
@@ -1353,6 +1479,10 @@ msgid "Minimap currently disabled by game or mod"
msgstr "A kistérkép letiltva (szerver, vagy mod által)"
#: src/client/game.cpp
+msgid "Multiplayer"
+msgstr "Többjátékos"
+
+#: src/client/game.cpp
msgid "Noclip mode disabled"
msgstr "Noclip mód letiltva"
@@ -1426,6 +1556,21 @@ msgstr "Hang visszahangosítva"
#: src/client/game.cpp
#, c-format
+msgid "The server is probably running a different version of %s."
+msgstr "A szerveren valószínűleg a %s másik verziója fut."
+
+#: src/client/game.cpp
+#, c-format
+msgid "Unable to connect to %s because IPv6 is disabled"
+msgstr "Nem lehet csatlakozni a %s-hoz mivel az IPv6 nincs engedélyezve"
+
+#: src/client/game.cpp
+#, c-format
+msgid "Unable to listen on %s because IPv6 is disabled"
+msgstr "Nem lehet figyelni a %s-t mert az IPv6 nincs engedélyezve"
+
+#: src/client/game.cpp
+#, c-format
msgid "Viewing range changed to %d"
msgstr "látótáv %d1"
@@ -1479,7 +1624,7 @@ msgstr "Profiler elrejtése"
#: src/client/gameui.cpp
#, c-format
msgid "Profiler shown (page %d of %d)"
-msgstr "Profiler megjelenítése (lap: %d1 ennyiből : %d2)"
+msgstr "Profiler megjelenítése (lap: %d1 ennyiből: %d2)"
#: src/client/keycode.cpp
msgid "Apps"
@@ -1494,10 +1639,6 @@ msgid "Caps Lock"
msgstr "Caps Lock"
#: src/client/keycode.cpp
-msgid "Clear"
-msgstr "Törlés"
-
-#: src/client/keycode.cpp
msgid "Control"
msgstr "Control"
@@ -1756,12 +1897,20 @@ msgstr "Minimap radar módban, Nagyítás x%d"
#: src/client/minimap.cpp
#, c-format
msgid "Minimap in surface mode, Zoom x%d"
-msgstr "kistérkép terület módban x%d"
+msgstr "kistérkép terület módban x%d"
#: src/client/minimap.cpp
msgid "Minimap in texture mode"
msgstr "Minimap textúra módban"
+#: src/gui/guiChatConsole.cpp
+msgid "Failed to open webpage"
+msgstr "Weblap megnyitása nem sikerült"
+
+#: src/gui/guiChatConsole.cpp
+msgid "Opening webpage"
+msgstr "Weblap megnyitása"
+
#: src/gui/guiConfirmRegistration.cpp src/gui/guiPasswordChange.cpp
msgid "Passwords do not match!"
msgstr "A jelszavak nem egyeznek!"
@@ -1779,20 +1928,20 @@ msgid ""
"Please retype your password and click 'Register and Join' to confirm account "
"creation, or click 'Cancel' to abort."
msgstr ""
-"Te most %1$s szerverre csatlakozol \"%2$s\" névvel először.\n"
-"Ha folytatod, akkor egy új fiók lesz létrehozva a hitelesítő adatokkal a "
+"Most először csatlakozol erre a szerverre a \"%s\" névvel.\n"
+"Ha folytatod, akkor a hitelesítő adataiddal egy új fiók jön létre a "
"szerveren.\n"
-"Kérlek írd be újra a jelszavad, kattints Regisztrációra majd "
-"Bejelentkezésre, hogy megerősítsd a fióklétrehozást vagy kattints Kilépés "
-"gombra a megszakításhoz."
+"Kérlek írd be újra a jelszavad, majd kattints a \"Regisztráció és "
+"Bejelentkezés\"-re, hogy megerősítsd a fióklétrehozást, vagy kattints a "
+"\"Mégse\" gombra a megszakításhoz."
#: src/gui/guiFormSpecMenu.cpp
msgid "Proceed"
msgstr "Folytatás"
#: src/gui/guiKeyChangeMenu.cpp
-msgid "\"Special\" = climb down"
-msgstr "különleges = lemászás"
+msgid "\"Aux1\" = climb down"
+msgstr "\"Aux1\" = lemászás"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Autoforward"
@@ -1803,10 +1952,18 @@ msgid "Automatic jumping"
msgstr "Automatikus ugrás"
#: src/gui/guiKeyChangeMenu.cpp
+msgid "Aux1"
+msgstr "Aux1"
+
+#: src/gui/guiKeyChangeMenu.cpp
msgid "Backward"
msgstr "Hátra"
#: src/gui/guiKeyChangeMenu.cpp
+msgid "Block bounds"
+msgstr "Blokkhatárok"
+
+#: src/gui/guiKeyChangeMenu.cpp
msgid "Change camera"
msgstr "Nézet váltása"
@@ -1897,10 +2054,6 @@ msgid "Sneak"
msgstr "Lopakodás"
#: src/gui/guiKeyChangeMenu.cpp
-msgid "Special"
-msgstr "Különleges"
-
-#: src/gui/guiKeyChangeMenu.cpp
msgid "Toggle HUD"
msgstr "HUD váltása"
@@ -1961,8 +2114,9 @@ msgid "Muted"
msgstr "Némitva"
#: src/gui/guiVolumeChange.cpp
-msgid "Sound Volume: "
-msgstr "Hangerő: "
+#, c-format
+msgid "Sound Volume: %d%%"
+msgstr "Hangerő: %d%%"
#. ~ Imperative, as in "Enter/type in text".
#. Don't forget the space.
@@ -1988,12 +2142,12 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"(Android) Use virtual joystick to trigger \"aux\" button.\n"
-"If enabled, virtual joystick will also tap \"aux\" button when out of main "
+"(Android) Use virtual joystick to trigger \"Aux1\" button.\n"
+"If enabled, virtual joystick will also tap \"Aux1\" button when out of main "
"circle."
msgstr ""
-"(Android) Használd a virtuális joystick-ot az \"aux\" gomb kapcsolásához.\n"
-"Ha ez engedélyezve van, akkor a virtuális joystick is aktiválja az aux "
+"(Android) Használd a virtuális joystick-ot az \"Aux1\" gomb kapcsolásához.\n"
+"Ha ez engedélyezve van, akkor a virtuális joystick is aktiválja az \"Aux1\" "
"gombot ha kint van a fő körből."
#: src/settings_translation_file.cpp
@@ -2007,6 +2161,17 @@ msgid ""
"situations.\n"
"Range roughly -2 to 2. Multiply by 'scale' for offset in nodes."
msgstr ""
+"A fraktál (X,Y,Z) relatív pozíciója a világ közepéhez képest, egységekben "
+"mérve.\n"
+"Használható arra, hogy egy kívánt pontot a (0, 0)-ra tegyünk, hogy "
+"megfelelő\n"
+"játékoskezdőpontot készítsünk, vagy hogy \"rázoomoljunk\" egy kívánt pontra\n"
+"az egység növelése által.\n"
+"Az alapérték úgy lett meghatározva, hogy megfelelő játékoskezdőpontot adjon\n"
+"az alapparaméterekkel generált Mandelbrot-halmazokhoz, de egyéb esetben\n"
+"lehet, hogy meg kell változtatni.\n"
+"Nagyjából -2 és 2 közötti értékek. Blokkokban mért pozícióhoz szorzzunk az "
+"egységgel."
#: src/settings_translation_file.cpp
msgid ""
@@ -2018,6 +2183,13 @@ msgid ""
"Default is for a vertically-squashed shape suitable for\n"
"an island, set all 3 numbers equal for the raw shape."
msgstr ""
+"A fraktál (X,Y,Z) méretezési faktora blokktávolságban kifejezve.\n"
+"A fraktál tényleges mérete 2-3-szorosa lesz ennek.\n"
+"Ezek a számok nagyon nagyok is lehetnek, a fraktálnak\n"
+"nem kell elférnie a világban.\n"
+"Növelje meg, hogy \"rázoomoljon\" a fraktál részleteire.\n"
+"Az alapérték egy függőlegesen összenyomott alakot ad, amely\n"
+"szigetekhez alkalmas. Ha a 3 szám egyenlő, a nyers alakot kapjuk."
#: src/settings_translation_file.cpp
msgid "2D noise that controls the shape/size of ridged mountains."
@@ -2042,7 +2214,7 @@ msgstr "2D zaj, amely a dombok méretét/előfordulását szabályozza."
#: src/settings_translation_file.cpp
msgid "2D noise that controls the size/occurrence of step mountain ranges."
-msgstr ""
+msgstr "2D zaj, amely a lépcsős hegységek méretét/előrordulását szabályozza."
#: src/settings_translation_file.cpp
msgid "2D noise that locates the river valleys and channels."
@@ -2059,7 +2231,7 @@ msgstr "3D mód"
#: src/settings_translation_file.cpp
msgid "3D mode parallax strength"
-msgstr ""
+msgstr "3D mód parallax hatásának erőssége"
#: src/settings_translation_file.cpp
msgid "3D noise defining giant caverns."
@@ -2071,7 +2243,7 @@ msgid ""
"Also defines structure of floatland mountain terrain."
msgstr ""
"A hegyek szerkezetét és magasságát meghatározó 3D zaj.\n"
-"A lebegő tájak hegyeit is meghatározza."
+"A lebegő földek hegyeit is meghatározza."
#: src/settings_translation_file.cpp
msgid ""
@@ -2080,6 +2252,10 @@ msgid ""
"to be adjusted, as floatland tapering functions best when this noise has\n"
"a value range of approximately -2.0 to 2.0."
msgstr ""
+"A lebegő földek szerkezetét meghatározó 3D zaj.\n"
+"Ha az alapértékekekt megváltoztatják, a zajszintet is át kell állítani\n"
+"(0,7 alapbeállításban), mivel a lebegő földeket vékonyítása akkor a\n"
+"leghatékonyabb, ha ez az érték körülbelül -2,0 és 2,0 közötti."
#: src/settings_translation_file.cpp
msgid "3D noise defining structure of river canyon walls."
@@ -2099,7 +2275,6 @@ msgid "3D noise that determines number of dungeons per mapchunk."
msgstr "3D-s zaj, amely meghatározza a tömlöcök számát egy térképdarabkánként."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"3D support.\n"
"Currently supported:\n"
@@ -2114,12 +2289,14 @@ msgid ""
msgstr ""
"3D támogatás.\n"
"Jelenleg támogatott:\n"
-"- none: nincs 3d kimenet.\n"
-"- anaglyph: cián/magenta színű 3d.\n"
-"- interlaced: odd/even line based polarisation screen support.\n"
-"- topbottom: osztott képernyő fent/lent.\n"
-"- sidebyside: osztott képernyő kétoldalt.\n"
-"- pageflip: quadbuffer based 3d."
+"- none: nincs 3d kimenet.\n"
+"- anaglyph: cián/magenta színű 3d.\n"
+"- interlaced: páros/páratlan soralapú polarizációs képernyő támogatás.\n"
+"- topbottom: osztott képernyő fent/lent.\n"
+"- sidebyside: osztott képernyő kétoldalt.\n"
+"- crossview: bandzsítva nézendő 3d\n"
+"- pageflip: quadbuffer alapú 3d.\n"
+"Ne feledje, hogy az interlaced üzemmód, igényli az árnyékolók használatát."
#: src/settings_translation_file.cpp
msgid ""
@@ -2139,15 +2316,15 @@ msgstr "Az összes kliensen megjelenített üzenet a szerver leállításakor."
#: src/settings_translation_file.cpp
msgid "ABM interval"
-msgstr ""
+msgstr "ABM intervallum"
#: src/settings_translation_file.cpp
msgid "ABM time budget"
-msgstr ""
+msgstr "ABM időgazdálkodás"
#: src/settings_translation_file.cpp
msgid "Absolute limit of queued blocks to emerge"
-msgstr ""
+msgstr "A várakozó blokkok felbukkanásának határa"
#: src/settings_translation_file.cpp
msgid "Acceleration in air"
@@ -2196,6 +2373,12 @@ msgstr ""
"képernyőkhöz."
#: src/settings_translation_file.cpp
+msgid "Adjust the detected display density, used for scaling UI elements."
+msgstr ""
+"Az észlelt képsűrűség kiigazítása a felhasználói felület elemeinek "
+"méretezéséhez."
+
+#: src/settings_translation_file.cpp
#, c-format
msgid ""
"Adjusts the density of the floatland layer.\n"
@@ -2204,6 +2387,13 @@ msgid ""
"Value = 2.0 (can be higher depending on 'mgv7_np_floatland', always test\n"
"to be sure) creates a solid floatland layer."
msgstr ""
+"A lebegő föld réteg sűrűségét szabályozza.\n"
+"Nagyobb sűrűséghez használjon nagyobb értéket. Lehet pozitív vagy negatív is."
+"\n"
+"Érték = 0,0: a térfogat 50%-a lebegő föld.\n"
+"Érték = 2,0 (magasabb is lehet az 'mgv7_np_floatland'-től függően, a "
+"biztonság\n"
+"kedvéért mindig próbálja ki) egybefüggő lebegő föld réteget eredményez."
#: src/settings_translation_file.cpp
msgid "Advanced"
@@ -2217,6 +2407,11 @@ msgid ""
"This only has significant effect on daylight and artificial\n"
"light, it has very little effect on natural night light."
msgstr ""
+"Módosítja a fénygörbét gamma korrekció hozzáadásával.\n"
+"Magasabb értékek esetén a közepes és alacsony fényszintek világosabbak.\n"
+"Az 1,0-ás érték a fénygörbét érintetlenül hagyja.\n"
+"Csak a nappali és a mesterséges fényt befolyásolja jelentősen,\n"
+"a természetes éjszakai fényre nagyon kis hatása van."
#: src/settings_translation_file.cpp
msgid "Always fly and fast"
@@ -2224,7 +2419,7 @@ msgstr "Repülés és gyors mód mindig"
#: src/settings_translation_file.cpp
msgid "Ambient occlusion gamma"
-msgstr "Ambiens okklúzió gamma"
+msgstr "Környezeti árnyékolás gamma"
#: src/settings_translation_file.cpp
msgid "Amount of messages a player may send per 10 seconds."
@@ -2268,7 +2463,6 @@ msgid ""
"the arm when the camera moves."
msgstr ""
"A kar tehetetlensége reálisabb mozgást biztosít\n"
-"a karnak, amikor a kamera mozog.\n"
"a karnak, amikor a kamera mozog."
#: src/settings_translation_file.cpp
@@ -2289,14 +2483,16 @@ msgid ""
"optimization.\n"
"Stated in mapblocks (16 nodes)."
msgstr ""
-"Ennél a távolságnál a szerver agresszívan optimalizálja, melyik blokkokat "
+"Ennél a távolságnál a szerver agresszívan optimalizálja, hogy melyik "
+"blokkokat\n"
"küldje a klienseknek.\n"
"Kis értékek valószínűleg sokat javítanak a teljesítményen, látható "
-"megjelenítési hibák árán.\n"
-"(Néhány víz alatti és barlangokban lévő blokk nem jelenik meg, néha a "
-"felszínen lévők sem.)\n"
-"Ha nagyobb, mint a \"max_block_send_distance\", akkor nincs optimalizáció.\n"
-"A távolság blokkokban értendő (16 node)"
+"megjelenítési\n"
+"hibák árán. (Néhány víz alatti és barlangokban lévő blokk nem jelenik meg,\n"
+"néha a felszínen lévők sem.)\n"
+"Ha ez az érték nagyobb, mint a \"max_block_send_distance\", akkor nincs\n"
+"optimalizáció.\n"
+"A távolság blokkokban értendő (16 node)."
#: src/settings_translation_file.cpp
msgid "Automatic forward key"
@@ -2319,6 +2515,14 @@ msgid "Autoscaling mode"
msgstr "Automatikus méretezés mód"
#: src/settings_translation_file.cpp
+msgid "Aux1 key"
+msgstr "Aux1 gomb"
+
+#: src/settings_translation_file.cpp
+msgid "Aux1 key for climbing/descending"
+msgstr "Aux1 gomb a mászáshoz/ereszkedéshez"
+
+#: src/settings_translation_file.cpp
msgid "Backward key"
msgstr "Vissza gomb"
@@ -2363,10 +2567,6 @@ msgid "Biome noise"
msgstr "Biom zaj"
#: src/settings_translation_file.cpp
-msgid "Bits per pixel (aka color depth) in fullscreen mode."
-msgstr "Bit/pixel (vagyis színmélység) teljes képernyős módban."
-
-#: src/settings_translation_file.cpp
msgid "Block send optimize distance"
msgstr "Max blokk küldési távolság"
@@ -2401,6 +2601,12 @@ msgid ""
"Increasing can reduce artifacting on weaker GPUs.\n"
"0.1 = Default, 0.25 = Good value for weaker tablets."
msgstr ""
+"A kamera \"közelségi vágósíkjának\" blokktávolságban mért távolsága 0 és "
+"0,25 között.\n"
+"Csak GLES platformon működik. A legtöbb felhasználó változatlanul "
+"hagyhatja.\n"
+"Növelése csökkentheti a grafikai hibákat a gyengébb GPU-kon.\n"
+"0,1 = alapértelmezett, 0,25 = jóválasztás gyengébb tabletekhez."
#: src/settings_translation_file.cpp
msgid "Camera smoothing"
@@ -2463,6 +2669,16 @@ msgid ""
"Center of light curve boost range.\n"
"Where 0.0 is minimum light level, 1.0 is maximum light level."
msgstr ""
+"A fénygörbe közepének erősítési tartománya.\n"
+"Ahol 0,0 a minimális fényszint, 1,0 a maximális fényszint."
+
+#: src/settings_translation_file.cpp
+msgid "Chat command time message threshold"
+msgstr "Csevegésparancs üzeneteinek időkorlátja"
+
+#: src/settings_translation_file.cpp
+msgid "Chat commands"
+msgstr "Parancsok"
#: src/settings_translation_file.cpp
msgid "Chat font size"
@@ -2481,9 +2697,8 @@ msgid "Chat message count limit"
msgstr "Csevegőüzenetek számának korlátozása"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Chat message format"
-msgstr "Üzenet összeomláskor"
+msgstr "Üzenet formátum"
#: src/settings_translation_file.cpp
msgid "Chat message kick threshold"
@@ -2498,8 +2713,8 @@ msgid "Chat toggle key"
msgstr "Csevegés váltása gomb"
#: src/settings_translation_file.cpp
-msgid "Chatcommands"
-msgstr "Parancsok"
+msgid "Chat weblinks"
+msgstr "Internetes linkek a csevegésben"
#: src/settings_translation_file.cpp
msgid "Chunk size"
@@ -2518,6 +2733,14 @@ msgid "Clean transparent textures"
msgstr "Tiszta átlátszó textúrák"
#: src/settings_translation_file.cpp
+msgid ""
+"Clickable weblinks (middle-click or Ctrl+left-click) enabled in chat console "
+"output."
+msgstr ""
+"Kattintható internetes hivatkozások (középső egérkattintás vagy Ctrl+bal "
+"klikk) engedélyezve az elküldött chatüzenetekben."
+
+#: src/settings_translation_file.cpp
msgid "Client"
msgstr "Kliens"
@@ -2535,7 +2758,7 @@ msgstr "Kliens modolási korlátozások"
#: src/settings_translation_file.cpp
msgid "Client side node lookup range restriction"
-msgstr ""
+msgstr "A blokk keresési távolság kliensoldali korlátozása"
#: src/settings_translation_file.cpp
msgid "Climbing speed"
@@ -2562,6 +2785,10 @@ msgid "Colored fog"
msgstr "Színezett köd"
#: src/settings_translation_file.cpp
+msgid "Colored shadows"
+msgstr "Színezett árnyékok"
+
+#: src/settings_translation_file.cpp
msgid ""
"Comma-separated list of flags to hide in the content repository.\n"
"\"nonfree\" can be used to hide packages which do not qualify as 'free "
@@ -2571,6 +2798,14 @@ msgid ""
"These flags are independent from Minetest versions,\n"
"so see a full list at https://content.minetest.net/help/content_flags/"
msgstr ""
+"A tartalomtárban elrejtendő jelölők vesszővel tagolt listája.\n"
+"\"nonfree\" használatával elrejthetők azok a csomagok, amelyek nem tartoznak "
+"a\n"
+"\"szabad szoftverek kategóriájába a Free Software Foundation meghatározása "
+"szerint.\n"
+"Megadhatja továbbá a tartalom besorolásait is.\n"
+"Ezek a jelölők függetlenek a Minetest verziótól, ezért nézze meg\n"
+"a teljes listát itt: https://content.minetest.net/help/content_flags/"
#: src/settings_translation_file.cpp
msgid ""
@@ -2596,6 +2831,30 @@ msgid "Command key"
msgstr "Parancs gomb"
#: src/settings_translation_file.cpp
+msgid ""
+"Compression level to use when saving mapblocks to disk.\n"
+"-1 - use default compression level\n"
+"0 - least compression, fastest\n"
+"9 - best compression, slowest"
+msgstr ""
+"A tömörítés foka a térképblokkok lemezre mentéséhez.\n"
+"-1 - alapértelmezett tömörítési fok\n"
+"0 - legkisebb tömörítés, leggyorsabb\n"
+"9 - legjobb tömörítés, leglassabb"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Compression level to use when sending mapblocks to the client.\n"
+"-1 - use default compression level\n"
+"0 - least compression, fastest\n"
+"9 - best compression, slowest"
+msgstr ""
+"Tömörítés foka a térképblokkok kliensnek küldéséhez.\n"
+"-1 - alapértelmezett tömörítési fok\n"
+"0 - legkisebb tömörítés, leggyorsabb\n"
+"9 - legjobb tömörítés, leglassabb"
+
+#: src/settings_translation_file.cpp
msgid "Connect glass"
msgstr "Üveg csatlakozása"
@@ -2625,7 +2884,7 @@ msgstr "ContentDB zászló feketelista"
#: src/settings_translation_file.cpp
msgid "ContentDB Max Concurrent Downloads"
-msgstr ""
+msgstr "ContentDB egyidejű letöltések maximális száma"
#: src/settings_translation_file.cpp
msgid "ContentDB URL"
@@ -2640,6 +2899,9 @@ msgid ""
"Continuous forward movement, toggled by autoforward key.\n"
"Press the autoforward key again or the backwards movement to disable."
msgstr ""
+"Folyamatos előre mozgás, az \"autoforward\" gomb segítségével.\n"
+"Nyomja meg az \"autoforward\" gombot, vagy a hátrafelé gombot a "
+"kikapcsoláshoz."
#: src/settings_translation_file.cpp
msgid "Controls"
@@ -2651,12 +2913,12 @@ msgid ""
"Examples:\n"
"72 = 20min, 360 = 4min, 1 = 24hour, 0 = day/night/whatever stays unchanged."
msgstr ""
-"Nappal/éjjel ciklus hossza.\n"
-"Példák: 72 = 20 perc, 360 = 4 perc, 1 = 24 óra, 0 = nappal/éjjel/bármelyik "
+"Nappal/éjjel ciklus hosszát határozza meg.\n"
+"Példák:\n"
+"72 = 20 perc, 360 = 4 perc, 1 = 24 óra, 0 = nappal/éjjel/bármelyik "
"változatlan marad."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Controls sinking speed in liquid."
msgstr "Folyadékban a süllyedési sebességet szabályozza."
@@ -2674,6 +2936,10 @@ msgid ""
"Value >= 10.0 completely disables generation of tunnels and avoids the\n"
"intensive noise calculations."
msgstr ""
+"A csatornák szélességét irányítja, a kisebb érték szélesebb csatornát hoz "
+"létre.\n"
+"Érték >= 10.0 teljesen kikapcsolja a csatornák generálását és elkerüli az\n"
+"intenzív zajszámítást."
#: src/settings_translation_file.cpp
msgid "Crash message"
@@ -2688,11 +2954,12 @@ msgid "Crosshair alpha"
msgstr "Célkereszt átlátszóság"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Crosshair alpha (opaqueness, between 0 and 255).\n"
-"Also controls the object crosshair color"
-msgstr "Célkereszt átlátszóság (0 és 255 között)."
+"This also applies to the object crosshair."
+msgstr ""
+"Célkereszt átlátszóság (0 és 255 között).\n"
+"Az objektum célkereszt színét is meghatározza."
#: src/settings_translation_file.cpp
msgid "Crosshair color"
@@ -2703,6 +2970,8 @@ msgid ""
"Crosshair color (R,G,B).\n"
"Also controls the object crosshair color"
msgstr ""
+"Célkereszt szín (R,G,B).\n"
+"Az objektum célkereszt színét is állítja"
#: src/settings_translation_file.cpp
msgid "DPI"
@@ -2717,9 +2986,8 @@ msgid "Debug info toggle key"
msgstr "Hibakereső információra váltás gomb"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Debug log file size threshold"
-msgstr "Sivatag zajának küszöbszintje"
+msgstr "Hibakeresési naplófájl méretküszöbe"
#: src/settings_translation_file.cpp
msgid "Debug log level"
@@ -2766,17 +3034,18 @@ msgid "Default report format"
msgstr "Alapértelmezett jelentésformátum"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Default stack size"
-msgstr "Alapértelmezett játék"
+msgstr "Alapértelmezett kötegméret"
#: src/settings_translation_file.cpp
msgid ""
-"Default timeout for cURL, stated in milliseconds.\n"
-"Only has an effect if compiled with cURL."
+"Define shadow filtering quality.\n"
+"This simulates the soft shadows effect by applying a PCF or Poisson disk\n"
+"but also uses more resources."
msgstr ""
-"A cURL alapértelmezett időkorlátja ezredmásodpercekben.\n"
-"Csak akkor van hatása, ha a program cURL-lel lett lefordítva."
+"ÃrnyékszűrÅ‘k minÅ‘ségének beállítása.\n"
+"Lágy árnyék effektus szimulálása PCF vagy Poisson disk eljárással,\n"
+"de egyéb erőforrásokat is használ."
#: src/settings_translation_file.cpp
msgid "Defines areas where trees have apples."
@@ -2788,20 +3057,17 @@ msgstr "A homokos tengerpartok területeit határozza meg."
#: src/settings_translation_file.cpp
msgid "Defines distribution of higher terrain and steepness of cliffs."
-msgstr ""
-"A magasabb terep (hegytetők) területeit szabja meg és a szirtek\n"
-"meredekségére is hatással van."
+msgstr "A magasabb terep eloszlását, a szirtek meredekségét szabályozza."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Defines distribution of higher terrain."
-msgstr "A \"terrain_higher\" területeit határozza meg (hegytetők terepe)."
+msgstr "A magasabb területek eloszlását határozza meg."
#: src/settings_translation_file.cpp
msgid "Defines full size of caverns, smaller values create larger caverns."
msgstr ""
-"Az üregek teljes méretét adja meg. Kisebb értékek nagyobb\n"
-"üregeket képeznek."
+"Az üregek teljes méretét adja meg, a kisebb értékek nagyobb üregeket "
+"képeznek."
#: src/settings_translation_file.cpp
msgid "Defines large-scale river channel structure."
@@ -2822,8 +3088,7 @@ msgstr "A folyómedrek mélységét határozza meg."
#: src/settings_translation_file.cpp
msgid "Defines the maximal player transfer distance in blocks (0 = unlimited)."
msgstr ""
-"A maximális távolság, aminél a játékosok látják egymást,\n"
-"blokkokban megadva (0 = korlátlan)."
+"A maximális játékos küldési távolság blokkokban megadva (0 = korlátlan)."
#: src/settings_translation_file.cpp
msgid "Defines the width of the river channel."
@@ -2890,9 +3155,8 @@ msgid "Desynchronize block animation"
msgstr "Blokkanimáció deszinkronizálása"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Dig key"
-msgstr "Jobb gomb"
+msgstr "Ãsás gomb"
#: src/settings_translation_file.cpp
msgid "Digging particles"
@@ -2907,6 +3171,10 @@ msgid "Disallow empty passwords"
msgstr "Üres jelszavak tiltása"
#: src/settings_translation_file.cpp
+msgid "Display Density Scaling Factor"
+msgstr "Képsűrűség méretezési faktor"
+
+#: src/settings_translation_file.cpp
msgid "Domain name of server, to be displayed in the serverlist."
msgstr "A szerver domain neve, ami a szerverlistában megjelenik."
@@ -2927,12 +3195,10 @@ msgid "Dump the mapgen debug information."
msgstr "A térképgenerátor hibakeresési információinak kiírása."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Dungeon maximum Y"
-msgstr "Tömlöc maximális Y magassága"
+msgstr "Tömlöc maximális Y magassága"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Dungeon minimum Y"
msgstr "Tömlöc minimális Y magassága"
@@ -2945,6 +3211,8 @@ msgid ""
"Enable IPv6 support (for both client and server).\n"
"Required for IPv6 connections to work at all."
msgstr ""
+"IPv6 támogatás engedélyezése (a kliens és a szerver számára is).\n"
+"Szükséges, hogy az IPv6 kapcsolatok egyáltalán működjenek."
#: src/settings_translation_file.cpp
msgid ""
@@ -2955,16 +3223,33 @@ msgstr ""
"Ez a támogatás még kísérleti fázisban van, így az API változhat."
#: src/settings_translation_file.cpp
+msgid ""
+"Enable Poisson disk filtering.\n"
+"On true uses Poisson disk to make \"soft shadows\". Otherwise uses PCF "
+"filtering."
+msgstr ""
+"Poisson disk szűrés engedélyezése.\n"
+"Igazra állítás esetén Poisson disk eljárással képez lágy árnyékokat. "
+"Különben a PCF szűrőt használja."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable colored shadows.\n"
+"On true translucent nodes cast colored shadows. This is expensive."
+msgstr ""
+"Színes árnyékok engedélyezése.\n"
+"Igaz érték esetén áttettsző blokkok színes árnyékot vethetnek. "
+"Erőforrásigényes."
+
+#: src/settings_translation_file.cpp
msgid "Enable console window"
msgstr "Konzolablak engedélyezése"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Enable creative mode for all players"
-msgstr "Kreatív mód engedélyezése az újonnan létrehozott térképekhez."
+msgstr "Kreatív mód engedélyezése az összes játékos számára"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Enable joysticks"
msgstr "Joystick engedélyezése"
@@ -2987,25 +3272,24 @@ msgstr ""
"használható)."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Enable register confirmation"
-msgstr "Regisztermegerősítés engedélyezése"
+msgstr "Regisztráció megerősítés engedélyezése"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Enable register confirmation when connecting to server.\n"
"If disabled, new account will be registered automatically."
msgstr ""
-"Engedélyezze a regisztráció megerősítését, amikor csatlakozik a szerverhez.\n"
-"Letiltás esetén az új fiók automatikusan regisztrálásra kerül."
+"Ha be van kapcsolva, a regisztráció megerősítését kéri, amikor csatlakozik "
+"egy szerverhez.\n"
+"Ha ki van kapcsolva, az új fiók automatikusan regisztrálásra kerül."
#: src/settings_translation_file.cpp
msgid ""
"Enable smooth lighting with simple ambient occlusion.\n"
"Disable for speed or for different looks."
msgstr ""
-"A simított megvilágítás engedélyezése egyszerű ambient occlusion-nel.\n"
+"A simított megvilágítás engedélyezése egyszerű környezeti árnyékolással.\n"
"A sebesség érdekében vagy másféle kinézetért kikapcsolhatod."
#: src/settings_translation_file.cpp
@@ -3038,27 +3322,27 @@ msgid ""
"Enable vertex buffer objects.\n"
"This should greatly improve graphics performance."
msgstr ""
+"Vertex buffer objektumok engedélyezése.\n"
+"Ez nagyban javíthatja a grafikus teljesítményt."
#: src/settings_translation_file.cpp
msgid ""
"Enable view bobbing and amount of view bobbing.\n"
"For example: 0 for no view bobbing; 1.0 for normal; 2.0 for double."
msgstr ""
-"Bekapcsolja a fejmozgást és beállítja a mértékét.\n"
+"Bekapcsolja a fejbillegést és beállítja a mértékét.\n"
"Pl: 0 nincs fejmozgás; 1.0 alapértelmezett fejmozgás van; 2.0 dupla "
-"fejmozgás van"
+"fejmozgás van."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Enable/disable running an IPv6 server.\n"
"Ignored if bind_address is set.\n"
"Needs enable_ipv6 to be enabled."
msgstr ""
-"IPv6 szerver futtatásának engedélyezése/letiltása. Egy IPv6 szerver "
-"lehetséges, hogy\n"
-"IPv6 kliensekre van korlátozva, a rendszer konfigurációtól függően.\n"
-"Nincs figyelembe véve, ha bind_address van beállítva."
+"IPv6 szerver futtatásának engedélyezése/letiltása.\n"
+"Nincs figyelembe véve, ha bind_address van beállítva.\n"
+"Szükséges hozzá, hogy az ipv6 engedélyezve legyen."
#: src/settings_translation_file.cpp
msgid ""
@@ -3067,15 +3351,18 @@ msgid ""
"appearance of high dynamic range images. Mid-range contrast is slightly\n"
"enhanced, highlights and shadows are gradually compressed."
msgstr ""
+"Engedélyezi Hable 'Uncharted 2' színtónusleképezését.\n"
+"A fotófilmek színgörbéjét szimulálja és utánozza a nagy dinamikatartományú\n"
+"képi megjelenést. A közepző színtartomány kontrasztját kissé\n"
+"erősíti, a világosabb és sötétebb részeket fokozatosan tömöríti."
#: src/settings_translation_file.cpp
msgid "Enables animation of inventory items."
-msgstr "Az eszköztárelemek animációjának engedélyezése."
+msgstr "Az felszerelésben lévő tárgyak animációjának engedélyezése."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Enables caching of facedir rotated meshes."
-msgstr "Engedélyezi az elforgatott rácsvonalak gyorsítótárazását."
+msgstr "Az elforgatott hálók irányának gyorsítótárazásának engedélyezése."
#: src/settings_translation_file.cpp
msgid "Enables minimap."
@@ -3088,15 +3375,29 @@ msgid ""
"sound controls will be non-functional.\n"
"Changing this setting requires a restart."
msgstr ""
+"Engedélyezi a hangrendszert.\n"
+"Ha ki van kapcsolva, teljesen kikapcsol minden hangot és a játék "
+"hangvezérlői\n"
+"nem fognak működni.\n"
+"Ennek a beállításnak a megváltoztatása a játék újraindítását igényli."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enables tradeoffs that reduce CPU load or increase rendering performance\n"
+"at the expense of minor visual glitches that do not impact game playability."
+msgstr ""
+"Engedélyez olyan kompromisszimus megoldásokat, amelyek csökkentik a CPU "
+"terhelését vagy\n"
+"növelik a renderelési teljesítményt kisebb vizuális hibák árán, amelyek nem "
+"befolyásolják a játszhatóságot."
#: src/settings_translation_file.cpp
msgid "Engine profiling data print interval"
msgstr "Játékmotor profiler adatok kiírási időköze"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Entity methods"
-msgstr "Egység módszerek"
+msgstr "Entitás metódusok"
#: src/settings_translation_file.cpp
msgid ""
@@ -3107,41 +3408,33 @@ msgid ""
"Values < 1.0 (for example 0.25) create a more defined surface level with\n"
"flatter lowlands, suitable for a solid floatland layer."
msgstr ""
+"A lebegő földek vékonyításának kitevője. A vékonyítás módján változtat.\n"
+"Érték = 1,0 egyeneletes, lineáris vékonyítás.\n"
+"Értékek > 1,0 az alapértelmezett különálló lebegő földekhez illő könnyed\n"
+"vékonyítás.\n"
+"Értékek < 1,0 (például 0,25) határozottab felszínt képez laposabb "
+"alföldekkel,\n"
+"egybefüggű lebegő föld réteghez használható."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "FPS when unfocused or paused"
-msgstr "Maximum FPS a játék szüneteltetésekor."
+msgstr "FPS, amikor a játék meg van állítva, vagy nincs fókuszban"
#: src/settings_translation_file.cpp
msgid "FSAA"
msgstr "FSAA"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Factor noise"
msgstr "Tényezőzaj"
#: src/settings_translation_file.cpp
msgid "Fall bobbing factor"
-msgstr ""
+msgstr "Leesés utáni fejrázkódási tényező"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Fallback font path"
-msgstr "Tartalék betűtípus"
-
-#: src/settings_translation_file.cpp
-msgid "Fallback font shadow"
-msgstr "Tartalék betűtípus árnyéka"
-
-#: src/settings_translation_file.cpp
-msgid "Fallback font shadow alpha"
-msgstr "Tartalék betűtípus árnyék átlátszósága"
-
-#: src/settings_translation_file.cpp
-msgid "Fallback font size"
-msgstr "Tartalék betűtípus mérete"
+msgstr "Tartalék betűtípus útvonala"
#: src/settings_translation_file.cpp
msgid "Fast key"
@@ -3161,10 +3454,10 @@ msgstr "Gyors mozgás"
#: src/settings_translation_file.cpp
msgid ""
-"Fast movement (via the \"special\" key).\n"
+"Fast movement (via the \"Aux1\" key).\n"
"This requires the \"fast\" privilege on the server."
msgstr ""
-"Gyors mozgás (a használat gombbal).\n"
+"Gyors mozgás (az \"Aux1\" gombbal).\n"
"Szükséges hozzá a gyors mód jogosultság a szerveren."
#: src/settings_translation_file.cpp
@@ -3176,14 +3469,14 @@ msgid "Field of view in degrees."
msgstr "Látóterület fokokban."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"File in client/serverlist/ that contains your favorite servers displayed in "
"the\n"
"Multiplayer Tab."
msgstr ""
"A client/serverlist/ mappában lévő fájl, ami tartalmazza a kedvenc "
-"szervereket, amik a Többjátékos fül alatt jelennek meg."
+"szervereidet,\n"
+"amik a Többjátékos fül alatt jelennek meg."
#: src/settings_translation_file.cpp
msgid "Filler depth"
@@ -3200,10 +3493,18 @@ msgstr "Filmes tónus effekt"
#: 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."
+"which PNG optimizers usually discard, often resulting in dark or\n"
+"light edges to transparent textures. Apply a filter to clean that up\n"
+"at texture load time. This is automatically enabled if mipmapping is enabled."
msgstr ""
+"A szűrt textúrák vegyíthetik a teljesen átlátszó szomszédokkal rendelkező "
+"RGB értékeket,\n"
+"amit a PNG optimalizálók általában figyelmen kívül hagynak, és ez gyakran "
+"sötét vagy\n"
+"világos élekhez vezet az átlátszó textúráknál. Használjon szűrőt ezeknek a "
+"textúra betöltésekor\n"
+"történő eltüntetésére. Ez automatikusan bekapcsol, ha a mipmapping be van "
+"kapcsolva."
#: src/settings_translation_file.cpp
msgid "Filtering"
@@ -3212,17 +3513,19 @@ msgstr "Szűrés"
#: src/settings_translation_file.cpp
msgid "First of 4 2D noises that together define hill/mountain range height."
msgstr ""
+"Az első a négy 2D zajból, amelyek együttesen meghatározzák a dombságok/"
+"hegységek magasságát."
#: src/settings_translation_file.cpp
msgid "First of two 3D noises that together define tunnels."
msgstr ""
+"Az első a két 3D zajból, amelyek együttesen meghatározzák az alagutakat."
#: src/settings_translation_file.cpp
msgid "Fixed map seed"
msgstr "Fix térkép seed"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Fixed virtual joystick"
msgstr "Rögzített virtuális joystick"
@@ -3240,16 +3543,15 @@ msgstr "Lebegő földek minimális Y magassága"
#: src/settings_translation_file.cpp
msgid "Floatland noise"
-msgstr "Lebegőföldek zaja"
+msgstr "Lebegő földek zaja"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Floatland taper exponent"
-msgstr "A lebegő hegyek alapzaja"
+msgstr "A lebegő földek kúpkitevője"
#: src/settings_translation_file.cpp
msgid "Floatland tapering distance"
-msgstr "A lebegő földek hegyeinek távolsága"
+msgstr "A lebegő földek kúpjainak távolsága"
#: src/settings_translation_file.cpp
msgid "Floatland water level"
@@ -3296,25 +3598,46 @@ msgid "Font size"
msgstr "Betűtípus mérete"
#: src/settings_translation_file.cpp
-msgid "Font size of the default font in point (pt)."
-msgstr ""
+msgid "Font size divisible by"
+msgstr "Betűméret osztója"
#: src/settings_translation_file.cpp
-msgid "Font size of the fallback font in point (pt)."
+msgid "Font size of the default font where 1 unit = 1 pixel at 96 DPI"
msgstr ""
+"Az alapértelmezett betűtípus betűmérete, ahol 1 egység = 1 pixel 96 DPI "
+"esetén"
#: src/settings_translation_file.cpp
-msgid "Font size of the monospace font in point (pt)."
-msgstr ""
+msgid "Font size of the monospace font where 1 unit = 1 pixel at 96 DPI"
+msgstr "A monospace betűtípus betűmérete, ahol 1 egység = 1 pixel 96 DPI esetén"
#: src/settings_translation_file.cpp
msgid ""
"Font size of the recent chat text and chat prompt in point (pt).\n"
"Value 0 will use the default font size."
msgstr ""
+"A legutóbbi csevegésszövegek és üzenetek betűmérete pontban (pt).\n"
+"0 érték esetén az alapértelmezett betűméretet fogja használni."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"For pixel-style fonts that do not scale well, this ensures that font sizes "
+"used\n"
+"with this font will always be divisible by this value, in pixels. For "
+"instance,\n"
+"a pixel font 16 pixels tall should have this set to 16, so it will only ever "
+"be\n"
+"sized 16, 32, 48, etc., so a mod requesting a size of 25 will get 32."
+msgstr ""
+"A pixeles stílusú betűtípusokhoz, amelyek nem méretezhetők olyan jól, ez "
+"biztosítja, hogy a használt\n"
+"betűméretek az ilyen betűtípus esetén mindig oszthatók legyenek ezzel az "
+"értékkel, pixelben. Például\n"
+"egy 16 pixel magas pixeles stílusú betűtípus esetén ezt 16-ra kell állítani, "
+"ezáltal csak 16, 32, 48 stb.\n"
+"lesz használható, ezért ha egy mod 25-ös méretet igényel, 32-est fog kapni."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Format of player chat messages. The following strings are valid "
"placeholders:\n"
@@ -3322,7 +3645,7 @@ msgid ""
msgstr ""
"A játékos csevegési üzeneteinek formátuma. A következő karakterláncok "
"érvényesek:\n"
-"@ név, @ üzenet, @ időbélyeg (opcionális)"
+"@név, @üzenet, @időbélyeg (opcionális)"
#: src/settings_translation_file.cpp
msgid "Format of screenshots."
@@ -3330,36 +3653,34 @@ msgstr "Képernyőmentések formátuma."
#: src/settings_translation_file.cpp
msgid "Formspec Default Background Color"
-msgstr ""
+msgstr "Formspec panelek alapértelmezett háttérszíne"
#: src/settings_translation_file.cpp
msgid "Formspec Default Background Opacity"
-msgstr ""
+msgstr "Formspec panelek hátterének alapértelmezett átlátszósága"
#: src/settings_translation_file.cpp
msgid "Formspec Full-Screen Background Color"
-msgstr ""
+msgstr "Teljes képernyős Formspec panelek háttérszíne"
#: src/settings_translation_file.cpp
msgid "Formspec Full-Screen Background Opacity"
-msgstr ""
+msgstr "Teljes képernyős Formspec panelek hátterének átlátszósága"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Formspec default background color (R,G,B)."
-msgstr "Játékon belüli csevegő konzol hátterének színe (R,G,B)."
+msgstr "Formspec panelek alapértelmezett háttérszíne (R,G,B)."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Formspec default background opacity (between 0 and 255)."
msgstr ""
-"Játékon belüli csevegő konzol hátterének alfája (átlátszatlanság, 0 és 255 "
+"Játékon belüli kezelőpanelek hátterének alfája (átlátszatlanság, 0 és 255 "
"között)."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Formspec full-screen background color (R,G,B)."
-msgstr "Játékon belüli csevegő konzol hátterének színe (R,G,B)."
+msgstr ""
+"Játékon belüli teljes képrenyős kezelőpanelek hátterének színe (R,G,B)."
#: src/settings_translation_file.cpp
msgid "Formspec full-screen background opacity (between 0 and 255)."
@@ -3373,6 +3694,8 @@ msgstr "Előre gomb"
#: src/settings_translation_file.cpp
msgid "Fourth of 4 2D noises that together define hill/mountain range height."
msgstr ""
+"A negyedik a négy 2D zajból, amelyek együttesen meghatározzák a dombságok/"
+"hegységek magasságát."
#: src/settings_translation_file.cpp
msgid "Fractal type"
@@ -3380,11 +3703,7 @@ msgstr "Fraktál típusa"
#: src/settings_translation_file.cpp
msgid "Fraction of the visible distance at which fog starts to be rendered"
-msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid "FreeType fonts"
-msgstr "FreeType betűtípusok"
+msgstr "A látótávolságnak az a része, amelynél a köd renderelése kezdődik"
#: src/settings_translation_file.cpp
msgid ""
@@ -3409,16 +3728,20 @@ msgid ""
"to maintain active objects up to this distance in the direction the\n"
"player is looking. (This can avoid mobs suddenly disappearing from view)"
msgstr ""
+"Mekkora távolságból észleljék a kliensek az objektumokat, térképblokkokban "
+"mérve (16 blokk).\n"
+"\n"
+"Ha nagyobbra van állítva, mint az active_block_range, akkor a szervert arra "
+"kényszeríti, hogy\n"
+"az aktív objektumokat betöltve tartsa eddig a távolságig a játékos "
+"tekintetének irányában.\n"
+"(Ez megakadályozza, hogy a mobok hirtelen eltűnjenek a látómezőből)"
#: src/settings_translation_file.cpp
msgid "Full screen"
msgstr "Teljes képernyő"
#: src/settings_translation_file.cpp
-msgid "Full screen BPP"
-msgstr "Teljes képernyő BPP"
-
-#: src/settings_translation_file.cpp
msgid "Fullscreen mode."
msgstr "Teljes képernyős mód."
@@ -3435,36 +3758,36 @@ msgid "GUI scaling filter txr2img"
msgstr "Felhasználói felület méretarány szűrő txr2img"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Global callbacks"
-msgstr "Globális visszahívások"
+msgstr "Globális visszatérések"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Global map generation attributes.\n"
"In Mapgen v6 the 'decorations' flag controls all decorations except trees\n"
-"and junglegrass, in all other mapgens this flag controls all decorations."
+"and jungle grass, in all other mapgens this flag controls all decorations."
msgstr ""
-"Térkép generálási jellemzők csak a Flat (lapos) térképgenerátor esetében.\n"
-"Esetenkénti tavak és dombok generálása a lapos világba.\n"
-"The default flags set in the engine are: none\n"
-"The flags string modifies the engine defaults.\n"
-"Flags that are not specified in the flag string are not modified from the "
-"default.\n"
-"Flags starting with \"no\" are used to explicitly disable them."
+"Globális térképgenerálási jellemzők.\n"
+"A Mapgen v6 térképgenerátorban a 'decorations' jelző szabályozza az összes "
+"dekorációt,\n"
+"kivéve a fákat és a dzsungelfüvet, a többi térképgenerátornál pedig az "
+"összeset."
#: src/settings_translation_file.cpp
msgid ""
"Gradient of light curve at maximum light level.\n"
"Controls the contrast of the highest light levels."
msgstr ""
+"A fénygörbe gradiense a legmagasabb fényszinten.\n"
+"A legmagasabb fényszintek kontrasztrját szabályozza."
#: src/settings_translation_file.cpp
msgid ""
"Gradient of light curve at minimum light level.\n"
"Controls the contrast of the lowest light levels."
msgstr ""
+"A fénygörbe gradiense a legalacsonyabb fényszinten.\n"
+"A legalacsonyabb fényszintek kontrasztrját szabályozza."
#: src/settings_translation_file.cpp
msgid "Graphics"
@@ -3483,7 +3806,6 @@ msgid "Ground noise"
msgstr "Talaj zaj"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "HTTP mods"
msgstr "HTTP Modok"
@@ -3496,19 +3818,17 @@ msgid "HUD toggle key"
msgstr "HUD váltás gomb"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Handling for deprecated Lua API calls:\n"
"- none: Do not log deprecated calls\n"
"- log: mimic and log backtrace of deprecated call (default).\n"
"- error: abort on usage of deprecated call (suggested for mod developers)."
msgstr ""
-"Az elavult lua API hívások kezelése:\n"
-"-örökölt: (próbálja meg) a régi viselkedést utánozni (alapértelmezett).\n"
-"-log: elavult hívás visszakövetése és naplózása (hibakereséshez "
-"alapértelmezett).\n"
-"-error: Megszakítja az elavult hívás használatát (javasolt a mod "
-"fejlesztőknek)."
+"Az elavult Lua API hívások kezelése:\n"
+"-none: ne naplózza az elavult hívásokat\n"
+"-log: elavult hívás utánozása és naplózása (alapértelmezett).\n"
+"-error: megszakítja az elavult hívás használatát (javasolt a "
+"modfejlesztőknek)."
#: src/settings_translation_file.cpp
msgid ""
@@ -3518,6 +3838,11 @@ msgid ""
"call).\n"
"* Instrument the sampler being used to update the statistics."
msgstr ""
+"Hagyja, hogy a profiler behangolja magát:\n"
+"* Üres függvény behangolása.\n"
+"Ezáltal mérhető, hogy a hangolás maga mennyi időbe telik (+1 függvényhívás)."
+"\n"
+"* A mintavevő hangolása a mutatószámok frissítésehez."
#: src/settings_translation_file.cpp
msgid "Heat blend noise"
@@ -3528,8 +3853,10 @@ msgid "Heat noise"
msgstr "Hőzaj"
#: src/settings_translation_file.cpp
-msgid "Height component of the initial window size."
-msgstr "A kezdeti ablak magassága."
+msgid ""
+"Height component of the initial window size. Ignored in fullscreen mode."
+msgstr ""
+"A kezdőablak magassága. Teljes képernyős módban nem kerül figyelmbe vételre."
#: src/settings_translation_file.cpp
msgid "Height noise"
@@ -3540,10 +3867,6 @@ msgid "Height select noise"
msgstr "A magasságot kiválasztó zaj"
#: src/settings_translation_file.cpp
-msgid "High-precision FPU"
-msgstr "Nagy pontosságú FPU"
-
-#: src/settings_translation_file.cpp
msgid "Hill steepness"
msgstr "Domb meredekség"
@@ -3572,167 +3895,164 @@ msgid "Homepage of server, to be displayed in the serverlist."
msgstr "A szerver honlapja, ami a szerverlistában megjelenik."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Horizontal acceleration in air when jumping or falling,\n"
"in nodes per second per second."
msgstr ""
"Vízszintes gyorsulás a levegőben ugráskor vagy leeséskor,\n"
-"blokk/másodpercben"
+"node/másodperc/másodpercben."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Horizontal and vertical acceleration in fast mode,\n"
"in nodes per second per second."
msgstr ""
"Vízszintes és függőleges gyorsulás gyors módban,\n"
-"blokk/másodpercben."
+"node/másodperc/másodpercben."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Horizontal and vertical acceleration on ground or when climbing,\n"
"in nodes per second per second."
-msgstr "Vízszintes és függőleges gyorsulás a földön, blokk/másodpercben."
+msgstr ""
+"Vízszintes és függőleges gyorsulás a földön, vagy mászáskor,\n"
+"node/másodpercben."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Hotbar next key"
-msgstr "Gyorsgomb következő gomb"
+msgstr "Gyorselérési sáv következő gomb"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Hotbar previous key"
-msgstr "Gyorsgomb előző gomb"
+msgstr "Gyorselérési sáv előző gomb"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 1 key"
-msgstr ""
+msgstr "Gyorselérési sáv 1-es hely gomb"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 10 key"
-msgstr ""
+msgstr "Gyorselérési sáv 10-es hely gomb"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 11 key"
-msgstr ""
+msgstr "Gyorselérési sáv 11-es hely gomb"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 12 key"
-msgstr ""
+msgstr "Gyorselérési sáv 12-es hely gomb"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 13 key"
-msgstr ""
+msgstr "Gyorselérési sáv 13-as hely gomb"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 14 key"
-msgstr ""
+msgstr "Gyorselérési sáv 14-es hely gomb"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 15 key"
-msgstr ""
+msgstr "Gyorselérési sáv 15-ös hely gomb"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 16 key"
-msgstr ""
+msgstr "Gyorselérési sáv 16-os hely gomb"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 17 key"
-msgstr ""
+msgstr "Gyorselérési sáv 17-es hely gomb"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 18 key"
-msgstr ""
+msgstr "Gyorselérési sáv 18-as hely gomb"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 19 key"
-msgstr ""
+msgstr "Gyorselérési sáv 19-es hely gomb"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 2 key"
-msgstr ""
+msgstr "Gyorselérési sáv 2-es hely gomb"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 20 key"
-msgstr ""
+msgstr "Gyorselérési sáv 20-as hely gomb"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 21 key"
-msgstr ""
+msgstr "Gyorselérési sáv 21-es hely gomb"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 22 key"
-msgstr ""
+msgstr "Gyorselérési sáv 22-es hely gomb"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 23 key"
-msgstr ""
+msgstr "Gyorselérési sáv 23-as hely gomb"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 24 key"
-msgstr ""
+msgstr "Gyorselérési sáv 24-es hely gomb"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 25 key"
-msgstr ""
+msgstr "Gyorselérési sáv 25-ös hely gomb"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 26 key"
-msgstr ""
+msgstr "Gyorselérési sáv 26-os hely gomb"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 27 key"
-msgstr ""
+msgstr "Gyorselérési sáv 27-es hely gomb"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 28 key"
-msgstr ""
+msgstr "Gyorselérési sáv 28-as hely gomb"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 29 key"
-msgstr ""
+msgstr "Gyorselérési sáv 29-es hely gomb"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 3 key"
-msgstr ""
+msgstr "Gyorselérési sáv 3-as hely gomb"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 30 key"
-msgstr ""
+msgstr "Gyorselérési sáv 30-as hely gomb"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 31 key"
-msgstr ""
+msgstr "Gyorselérési sáv 31-es hely gomb"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 32 key"
-msgstr ""
+msgstr "Gyorselérési sáv 32-es hely gomb"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 4 key"
-msgstr ""
+msgstr "Gyorselérési sáv 4-es hely gomb"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 5 key"
-msgstr ""
+msgstr "Gyorselérési sáv 5-ös hely gomb"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 6 key"
-msgstr ""
+msgstr "Gyorselérési sáv 6-os hely gomb"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 7 key"
-msgstr ""
+msgstr "Gyorselérési sáv 7-es hely gomb"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 8 key"
-msgstr ""
+msgstr "Gyorselérési sáv 8-as hely gomb"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 9 key"
-msgstr ""
+msgstr "Gyorselérési sáv 9-es hely gomb"
#: src/settings_translation_file.cpp
msgid "How deep to make rivers."
@@ -3744,13 +4064,16 @@ msgid ""
"If negative, liquid waves will move backwards.\n"
"Requires waving liquids to be enabled."
msgstr ""
+"Milyen gyorsan mozognak a folyadékhullámok. Magasabb = gyorsabb.\n"
+"Ha negatív, a folyadékhullámok hátrafelé mozognak.\n"
+"A hullámzó folyadékokat engedélyezni kell hozzá."
#: 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 ""
-"Mennyi ideig vár a szerver, mielőtt betöltetlenné teszi a nem használt "
+"Mennyi ideig vár a szerver, mielőtt eltávolítja a memóriából a nem használt "
"térképblokkokat.\n"
"Magasabb érték egyenletesebb, de több RAM-ot használ."
@@ -3763,9 +4086,8 @@ msgid "Humidity blend noise"
msgstr "Páratartalom keverés zaj"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Humidity noise"
-msgstr "Páratartalomzaj"
+msgstr "Páratartalom zaj"
#: src/settings_translation_file.cpp
msgid "Humidity variation for biomes."
@@ -3788,14 +4110,11 @@ msgstr ""
"hogy ne pazaroljon CPU erőforrást feleslegesen."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
-"If disabled, \"special\" key is used to fly fast if both fly and fast mode "
-"are\n"
+"If disabled, \"Aux1\" key is used to fly fast if both fly and fast mode are\n"
"enabled."
msgstr ""
-"Ha le van tiltva, a használat (use) gomb lesz használatban a gyors "
-"repüléshez,\n"
+"Ha le van tiltva, az \"Aux1\" gomb lesz használatban a gyors repüléshez,\n"
"ha a repülés és a gyors mód is engedélyezve van."
#: src/settings_translation_file.cpp
@@ -3806,6 +4125,10 @@ msgid ""
"invisible\n"
"so that the utility of noclip mode is reduced."
msgstr ""
+"Ha engedélyezve, a szerver kiválogatja a takarásban lévő térképblokkokat\n"
+"a játékos szemszögének megfelelően. Ezáltal a kliensnek küldött blokkok\n"
+"száma 50-80%-kal csökkenthető. A klines nem kapja ezentúl a legtöbb nem\n"
+"látható blokkot, emiatt a noclip mód (falonátjárás) kevésbé lesz használható."
#: src/settings_translation_file.cpp
msgid ""
@@ -3817,23 +4140,23 @@ msgstr ""
"node-okon. Szükséges hozzá a noclip jogosultság a szerveren."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
-"If enabled, \"special\" key instead of \"sneak\" key is used for climbing "
-"down and\n"
+"If enabled, \"Aux1\" key instead of \"Sneak\" key is used for climbing down "
+"and\n"
"descending."
msgstr ""
-"Ha engedélyezve van, a \"használat\" (use) gomb lesz használatban a "
-"\"lopakodás\" (sneak) helyett lefelé mászáskor, vagy ereszkedéskor."
+"Ha engedélyezve van, az \"Aux1\"gomb lesz használatban a \"lopakodás"
+"\" (sneak) helyett lefelé mászáskor,\n"
+"vagy ereszkedéskor."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"If enabled, actions are recorded for rollback.\n"
"This option is only read when server starts."
msgstr ""
-"Ha engedélyezve van, akkor a műveleteket rögzíti a visszagörgetéshez.\n"
-"Ez az opció csak akkor olvasható, amikor a szerver elindul."
+"Ha engedélyezve van, akkor a műveletek rögzülnek a visszavonhatóság "
+"érdekében.\n"
+"Ez az opció csak akkor van beolvasva, amikor a szerver elindul."
#: src/settings_translation_file.cpp
msgid "If enabled, disable cheat prevention in multiplayer."
@@ -3876,6 +4199,19 @@ msgid ""
"limited\n"
"to this distance from the player to the node."
msgstr ""
+"Ha a CSM korlátozás be van kapcsolva az aktív blokktávolságra, akkor a "
+"get_node\n"
+"hívások korlátozva lesznek a játkostól e távolságon belül található "
+"blokkokra."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"If the execution of a chat command takes longer than this specified time in\n"
+"seconds, add the time information to the chat command message"
+msgstr ""
+"Ha egy parancs végrehajtása tovább tart, mint az itt másodpercben megadott "
+"idő,\n"
+"az időadatok hozzá lesznek fűzve a parancs visszajelző üzenetéhez"
#: src/settings_translation_file.cpp
msgid ""
@@ -3884,6 +4220,10 @@ msgid ""
"deleting an older debug.txt.1 if it exists.\n"
"debug.txt is only moved if this setting is positive."
msgstr ""
+"Ha a debug.txt fájlmérete megabájtban meghaladja megnyitáskor az itt \n"
+"megadott számot, a fájl átnevezésre kerül debug.txt.1-re,\n"
+"és ha létezett egy régebbi debug.txt.1, az törlésre kerül.\n"
+"A debug.txt csak akkor lesz átnevezve, ha ez a beállítás engedélyzve van."
#: src/settings_translation_file.cpp
msgid "If this is set, players will always (re)spawn at the given position."
@@ -3926,34 +4266,39 @@ msgid ""
"Instrument builtin.\n"
"This is usually only needed by core/builtin contributors"
msgstr ""
+"Beépülő behangolása.\n"
+"Erre általában csak core/builtin közreműködőknek van szükségük"
#: src/settings_translation_file.cpp
-msgid "Instrument chatcommands on registration."
-msgstr "Csevegésparancsok bemutatása regisztrációkor."
+msgid "Instrument chat commands on registration."
+msgstr "Csevegésparancsok behangolása regisztrációkor."
#: src/settings_translation_file.cpp
msgid ""
"Instrument global callback functions on registration.\n"
"(anything you pass to a minetest.register_*() function)"
msgstr ""
+"A globális callback függvények behangolása regisztrációkor.\n"
+"(bármi, amit átadsz egy minetest.register_*() függvénynek)"
#: src/settings_translation_file.cpp
msgid ""
"Instrument the action function of Active Block Modifiers on registration."
-msgstr ""
+msgstr "Az Aktív blokk módosítók akciófüggvényének behangolása regisztrációkor."
#: src/settings_translation_file.cpp
msgid ""
"Instrument the action function of Loading Block Modifiers on registration."
msgstr ""
+"A Betöltendő blokk módosítók akciófüggvényének behangolása regisztrációkor."
#: src/settings_translation_file.cpp
msgid "Instrument the methods of entities on registration."
-msgstr ""
+msgstr "Az entitások metódusainak hangolása regisztrációkor."
#: src/settings_translation_file.cpp
msgid "Instrumentation"
-msgstr ""
+msgstr "Behangolás"
#: src/settings_translation_file.cpp
msgid "Interval of saving important changes in the world, stated in seconds."
@@ -3962,15 +4307,15 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Interval of sending time of day to clients."
-msgstr ""
+msgstr "A napszak kliensnek való küldésének gyakorisága."
#: src/settings_translation_file.cpp
msgid "Inventory items animations"
-msgstr "Eszköztár elemek animációi"
+msgstr "Felszerelésben lévő tárgyak animációi"
#: src/settings_translation_file.cpp
msgid "Inventory key"
-msgstr "Eszköztár gomb"
+msgstr "Felszerelés gomb"
#: src/settings_translation_file.cpp
msgid "Invert mouse"
@@ -3989,12 +4334,10 @@ msgid "Italic monospace font path"
msgstr "Dőlt monspace betűtípus útvonal"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Item entity TTL"
msgstr "Elem entitás TTL"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Iterations"
msgstr "Ismétlések"
@@ -4020,13 +4363,12 @@ msgid "Joystick button repetition interval"
msgstr "Joystick gomb ismétlési időköz"
#: src/settings_translation_file.cpp
-#, fuzzy
-msgid "Joystick deadzone"
-msgstr "Joystick típus"
+msgid "Joystick dead zone"
+msgstr "Joystick holttér"
#: src/settings_translation_file.cpp
msgid "Joystick frustum sensitivity"
-msgstr "Joystick frustum érzékenység"
+msgstr "Joystick látómező érzékenység"
#: src/settings_translation_file.cpp
msgid "Joystick type"
@@ -4071,15 +4413,14 @@ msgstr ""
"Tartomány nagyjából -2 és 2 között."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Julia set only.\n"
"Z component of hypercomplex constant.\n"
"Alters the shape of the fractal.\n"
"Range roughly -2 to 2."
msgstr ""
-"Julia-halmaz.\n"
-"Z komponens hiperkomplex konstans.\n"
+"Csak Julia-halmaz.\n"
+"Hiperkomplex állandó Z összetevője.\n"
"Megváltoztatja a fraktál alakját.\n"
"Tartomány nagyjából -2 és 2 között."
@@ -4128,13 +4469,12 @@ msgstr ""
"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Key for digging.\n"
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
-"Gomb az ugráshoz.\n"
+"Gomb az ásáshoz.\n"
"Lásd: http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
@@ -4207,7 +4547,7 @@ msgid ""
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
"Gomb a játékos előre mozgásához.\n"
-"Lásd: http://irrlicht.sourceforge.net/docu/namespaceirr."
+"Lásd: http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
@@ -4276,18 +4616,17 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
-"Gomb az eszköztár megnyitásához.\n"
+"Gomb a felszerelés megnyitásához.\n"
"Lásd: http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Key for placing.\n"
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
-"Gomb az ugráshoz.\n"
+"Gomb az elhelyezéshez.\n"
"Lásd: http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
@@ -4801,6 +5140,9 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
+"A profiler kijelzőjének kapcsológombja. Fejlesztéshez használatos.\n"
+"Lásd http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
msgid ""
@@ -4887,6 +5229,9 @@ msgid ""
"updated over\n"
"network."
msgstr ""
+"A szerver órajelének hossza és az az intervallum, amely alatt az "
+"objektumokat általánosan\n"
+"frissíti a hálózaton."
#: src/settings_translation_file.cpp
msgid ""
@@ -4897,17 +5242,16 @@ msgstr ""
"A hullámzó folyadékok engedélyezése szükséges hozzá."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Length of time between Active Block Modifier (ABM) execution cycles"
msgstr "Az Aktív Blokk módosító (ABM) végrehajtási ciklusok közötti időtartam"
#: src/settings_translation_file.cpp
msgid "Length of time between NodeTimer execution cycles"
-msgstr ""
+msgstr "Két NodeTimer végrehajtás között eltelt idő"
#: src/settings_translation_file.cpp
msgid "Length of time between active block management cycles"
-msgstr ""
+msgstr "Két aktív blokk kezelési fázis között eltelt idő"
#: src/settings_translation_file.cpp
msgid ""
@@ -4931,27 +5275,27 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Light curve boost"
-msgstr ""
+msgstr "Fénygörbe kiemelés"
#: src/settings_translation_file.cpp
msgid "Light curve boost center"
-msgstr ""
+msgstr "Fénygörbe kiemelés középpontja"
#: src/settings_translation_file.cpp
msgid "Light curve boost spread"
-msgstr ""
+msgstr "Fénygörbe kiemelés kiterjedése"
#: src/settings_translation_file.cpp
msgid "Light curve gamma"
-msgstr ""
+msgstr "Fénygörbe kiemelés gammája"
#: src/settings_translation_file.cpp
msgid "Light curve high gradient"
-msgstr ""
+msgstr "A fénygörbe tetejének gradiense"
#: src/settings_translation_file.cpp
msgid "Light curve low gradient"
-msgstr ""
+msgstr "A fénygörbe aljának gradiense"
#: src/settings_translation_file.cpp
msgid ""
@@ -4959,6 +5303,11 @@ msgid ""
"Only mapchunks completely within the mapgen limit are generated.\n"
"Value is stored per-world."
msgstr ""
+"A térképgenerálás határa, node-okban, mind a 6 irányban a (0, 0, 0) "
+"pozíciótól kezdve.\n"
+"Csak a teljesen a térképgenerálási határon belül lévő térképdarabkák "
+"generálódnak le.\n"
+"Az érték világonként külön tárolódik."
#: src/settings_translation_file.cpp
msgid ""
@@ -4968,6 +5317,11 @@ msgid ""
"- Downloads performed by main menu (e.g. mod manager).\n"
"Only has an effect if compiled with cURL."
msgstr ""
+"A párhzamos HTTP-kérések számának korlátja. Hatása:\n"
+"- Médialekérések, ha a szerver remote_media beállítást használ.\n"
+"- Szerverlista letöltés és szerverközzététel.\n"
+"- Letöltések a főmenüből (pl. mod manager).\n"
+"Csak akkor van hatása, ha cURL-lel lett összeállítva."
#: src/settings_translation_file.cpp
msgid "Liquid fluidity"
@@ -4983,15 +5337,13 @@ msgstr "Folyadékhullámzás maximum"
#: src/settings_translation_file.cpp
msgid "Liquid queue purge time"
-msgstr ""
+msgstr "Folyadék sortisztítási ideje"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Liquid sinking"
msgstr "Folyadék süllyedés"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Liquid update interval in seconds."
msgstr "A folyadékok frissítési időköze másodpercben."
@@ -5009,13 +5361,16 @@ msgid ""
"Provides a /profiler command to access the compiled profile.\n"
"Useful for mod developers and server operators."
msgstr ""
+"A játék profiler betöltése hogy játékprofílozási adatokat gyűjtsön.\n"
+"Elérhetővé teszi a /profiler parancsot, amellyel elérhetők az összeállított "
+"profilok.\n"
+"Hasznos lehet mod fejelsztőknek és szerver üzemeltetőknek."
#: src/settings_translation_file.cpp
msgid "Loading Block Modifiers"
-msgstr "Blokk módosítók betöltése"
+msgstr "Betöltendő blokk módosítók"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Lower Y limit of dungeons."
msgstr "A tömlöcök alsó Y határa."
@@ -5035,23 +5390,16 @@ msgstr ""
"látószögtől."
#: src/settings_translation_file.cpp
-msgid "Makes DirectX work with LuaJIT. Disable if it causes troubles."
-msgstr ""
-"Lehetővé teszi, hogy a DirectX működjön a LuaJIT-tel. Tiltsd le, ha "
-"problémákat okoz."
-
-#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Makes all liquids opaque"
msgstr "Az összes folyadékot átlátszatlanná teszi"
#: src/settings_translation_file.cpp
msgid "Map Compression Level for Disk Storage"
-msgstr ""
+msgstr "A térkép tömörítésének foka merevlemezen való tároláshoz"
#: src/settings_translation_file.cpp
msgid "Map Compression Level for Network Transfer"
-msgstr ""
+msgstr "A térkép tömörítésének foka hálózati átvitelhez"
#: src/settings_translation_file.cpp
msgid "Map directory"
@@ -5059,36 +5407,25 @@ msgstr "Térkép mappája"
#: src/settings_translation_file.cpp
msgid "Map generation attributes specific to Mapgen Carpathian."
-msgstr ""
+msgstr "A Kárpátok térképgenerátorra vonatkozó térképgenerálási beállítások."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Map generation attributes specific to Mapgen Flat.\n"
"Occasional lakes and hills can be added to the flat world."
msgstr ""
-"Térkép generálási jellemzők csak a Flat (lapos) térképgenerátor esetében.\n"
-"Esetenkénti tavak és dombok generálása a lapos világba.\n"
-"The default flags set in the engine are: none\n"
-"The flags string modifies the engine defaults.\n"
-"Flags that are not specified in the flag string are not modified from the "
-"default.\n"
-"Flags starting with \"no\" are used to explicitly disable them."
+"A Lapos térképgenerátor sajátos tulajdonságai.\n"
+"Alkalmanként tavak és dombok hozzáadódhatnak a lapos világhoz."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Map generation attributes specific to Mapgen Fractal.\n"
"'terrain' enables the generation of non-fractal terrain:\n"
"ocean, islands and underground."
msgstr ""
-"Térkép generálási jellemzők csak a Flat (lapos) térképgenerátor esetében.\n"
-"Esetenkénti tavak és dombok generálása a lapos világba.\n"
-"The default flags set in the engine are: none\n"
-"The flags string modifies the engine defaults.\n"
-"Flags that are not specified in the flag string are not modified from the "
-"default.\n"
-"Flags starting with \"no\" are used to explicitly disable them."
+"A Fraktál térképgenerátor sajátos jellemzői.\n"
+"A 'terrain' engedélyezi a nem-fraktál terep generálását,\n"
+"mint az óceán, szigetek és a földalatti részek."
#: src/settings_translation_file.cpp
msgid ""
@@ -5099,43 +5436,42 @@ msgid ""
"to become shallower and occasionally dry.\n"
"'altitude_dry': Reduces humidity with altitude."
msgstr ""
+"A Völgyek térképgenerátor sajátos jellemzői.\n"
+"'altitude_chill': csökkenti a hőmérsékletet a magassággal.\n"
+"'humid_rivers': megnöveli a páratartalmat a folyók körül.\n"
+"'vary_river_depth': ha engedélyezve van, az alacsony páratalom és a magas\n"
+"hőmérséklet hatására a folyók sekélyebbé válnak, és lehet, hogy "
+"kiszáradnak.\n"
+"'altitude_dry': csökkenti a páratartalmat a magassággal."
#: src/settings_translation_file.cpp
msgid "Map generation attributes specific to Mapgen v5."
-msgstr ""
+msgstr "A v5 térképgenerátor sajátos tulajdonságai."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Map generation attributes specific to Mapgen v6.\n"
"The 'snowbiomes' flag enables the new 5 biome system.\n"
"When the 'snowbiomes' flag is enabled jungles are automatically enabled and\n"
"the 'jungles' flag is ignored."
msgstr ""
-"Térképgenerálási jellemzők csak a v6 térképgenerátor esetében.\n"
-"When snowbiomes are enabled jungles are enabled and the jungles flag is "
-"ignored.\n"
-"The default flags set in the engine are: biomeblend, mudflow\n"
-"The flags string modifies the engine defaults.\n"
-"Flags that are not specified in the flag string are not modified from the "
-"default.\n"
-"Flags starting with \"no\" are used to explicitly disable them."
+"A v6 térképgenerátor sajátos jellemzői.\n"
+"A 'snowbiomes' zászló engedélyezi az új 5 biomos rendszert.\n"
+"Amikor a 'snowbiomes' zászló engedélyezett a dzsungelek automatikusan "
+"engedélyezve vannak\n"
+"és a 'jungles' zászló figyelmen kívül van hagyva."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Map generation attributes specific to Mapgen v7.\n"
"'ridges': Rivers.\n"
"'floatlands': Floating land masses in the atmosphere.\n"
"'caverns': Giant caves deep underground."
msgstr ""
-"Térkép generálási jellemzők csak a Flat (lapos) térképgenerátor esetében.\n"
-"Esetenkénti tavak és dombok generálása a lapos világba.\n"
-"The default flags set in the engine are: none\n"
-"The flags string modifies the engine defaults.\n"
-"Flags that are not specified in the flag string are not modified from the "
-"default.\n"
-"Flags starting with \"no\" are used to explicitly disable them."
+"Térkép generálási jellemzők csak a v7 térképgenerátor esetében.\n"
+"'ridges': folyók.\n"
+"'floatlands': lebegő földtömegek a légkörben.\n"
+"'caverns': óriási barlangok mélyen a föld alatt."
#: src/settings_translation_file.cpp
msgid "Map generation limit"
@@ -5146,22 +5482,24 @@ msgid "Map save interval"
msgstr "Térkép mentésének időköze"
#: src/settings_translation_file.cpp
+msgid "Map shadows update frames"
+msgstr "Ãrnyéktérkép frissítési idÅ‘"
+
+#: src/settings_translation_file.cpp
msgid "Mapblock limit"
msgstr "Térképblokk korlát"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Mapblock mesh generation delay"
-msgstr "Térkép generálási korlát"
+msgstr "Térképblokk háló generálási késleltetés"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Mapblock mesh generator's MapBlock cache size in MB"
-msgstr "Térkép generálási korlát"
+msgstr "Térképblokk hálógenerátor MapBlock gyorsítótár mérete MB-ban"
#: src/settings_translation_file.cpp
msgid "Mapblock unload timeout"
-msgstr ""
+msgstr "Térképblokk memóriaürítésének időkorlátja"
#: src/settings_translation_file.cpp
msgid "Mapgen Carpathian"
@@ -5241,44 +5579,51 @@ msgstr "Max folyadék feldolgozva lépésenként."
#: src/settings_translation_file.cpp
msgid "Max. clearobjects extra blocks"
-msgstr ""
+msgstr "Max. objektumtakarítás az extra blokkora"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Max. packets per iteration"
-msgstr "Max csomag ismétlésenként"
+msgstr "Maximum csomagok ismétlésenként"
#: src/settings_translation_file.cpp
msgid "Maximum FPS"
msgstr "Maximum FPS (képkocka/mp)"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Maximum FPS when the window is not focused, or when the game is paused."
-msgstr "Maximum FPS a játék szüneteltetésekor."
+msgstr "Maximum FPS, amikor a játék szüneteltetve van, vagy nincs fókuszban."
+
+#: src/settings_translation_file.cpp
+msgid "Maximum distance to render shadows."
+msgstr "Az árnyékok renderelésének maximális távolsága."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Maximum forceloaded blocks"
-msgstr "A maximálisan terhelt blokkok"
+msgstr "Az erőltetett betöltésű blokkok maximuma"
#: src/settings_translation_file.cpp
msgid "Maximum hotbar width"
-msgstr "Maximum hotbar szélesség"
+msgstr "Gyorselérési sáv maximális szélessége"
#: src/settings_translation_file.cpp
msgid "Maximum limit of random number of large caves per mapchunk."
msgstr ""
+"A véletlenszerűen egy térképdarabkára jutó nagy barlangok számának maximális "
+"korlátja."
#: src/settings_translation_file.cpp
msgid "Maximum limit of random number of small caves per mapchunk."
msgstr ""
+"A véletlenszerűen egy térképdarabkára jutó kis barlangok számának maximális "
+"korlátja."
#: src/settings_translation_file.cpp
msgid ""
"Maximum liquid resistance. Controls deceleration when entering liquid at\n"
"high speed."
msgstr ""
+"Maximális közegellenállás folyadékban. A nagy sebességgel folyadékba való\n"
+"belépéskor bekövetkező lassulást szabályozza."
#: src/settings_translation_file.cpp
msgid ""
@@ -5286,28 +5631,29 @@ msgid ""
"The maximum total count is calculated dynamically:\n"
"max_total = ceil((#clients + max_users) * per_client / 4)"
msgstr ""
+"A szimultán küldött blokkok maximális száma kliensenként.\n"
+"A maximális összértéket így számoljuk dinamikusan:\n"
+"max_total = ceil((#clients + max_users) * per_client / 4)"
#: src/settings_translation_file.cpp
msgid "Maximum number of blocks that can be queued for loading."
msgstr "Maximum blokkok száma, amik sorban állhatnak betöltésre."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Maximum number of blocks to be queued that are to be generated.\n"
"This limit is enforced per player."
msgstr ""
"Maximum blokkok száma, amik sorban állhatnak generálásra.\n"
-"Hagyd üresen, hogy automatikusan legyen kiválasztva a megfelelő mennyiség."
+"Ez a korlát játékosonként van kényszerítve."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Maximum number of blocks to be queued that are to be loaded from file.\n"
"This limit is enforced per player."
msgstr ""
"Maximum blokkok száma, amik sorban állhatnak egy fájlból való betöltésre.\n"
-"Hagyd üresen, hogy automatikusan legyen kiválasztva a megfelelő mennyiség."
+"Ez a korlát játékosonként van kényszerítve."
#: src/settings_translation_file.cpp
msgid ""
@@ -5315,10 +5661,13 @@ msgid ""
"be queued.\n"
"This should be lower than curl_parallel_limit."
msgstr ""
+"Az egyszerre folyó letöltések maximális száma. A korláton túli letöltéseket "
+"várólistára teszi.\n"
+"A curl_parallel_limit-nél kisebbnek kell lennie."
#: src/settings_translation_file.cpp
msgid "Maximum number of forceloaded mapblocks."
-msgstr ""
+msgstr "Az erőltetetten betöltött térképblokkok maximális száma."
#: src/settings_translation_file.cpp
msgid ""
@@ -5334,55 +5683,67 @@ msgid ""
"try reducing it, but don't reduce it to a number below double of targeted\n"
"client number."
msgstr ""
+"A lépésenként küldött csomagok maximális száma,\n"
+"ha lassú kapcsolattal rendelkezel, próbáld csökkenteni,\n"
+"de ne csökkentsd a kívánt kliensszám duplája alá."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Maximum number of players that can be connected simultaneously."
msgstr "Az egy időben csatlakozó játékosok maximális száma."
#: src/settings_translation_file.cpp
msgid "Maximum number of recent chat messages to show"
-msgstr "A megjelenítendő csevegésüzenetek maximális száma."
+msgstr "A megjelenítendő csevegésüzenetek maximális száma"
#: src/settings_translation_file.cpp
msgid "Maximum number of statically stored objects in a block."
msgstr "Statikusan tárolt objektumok maximális száma egy térképblokkban."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Maximum objects per block"
-msgstr "Maximum objektum térképblokkonként"
+msgstr "Maximum objektumok térképblokkonként"
#: 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 ""
-"Az aktuális ablak maximum hányada a hotbar számára.\n"
-"Hasznos, ha valamit el kell helyezni a hotbar jobb, vagy bal oldalán."
+"Az aktuális ablak maximum hányada a gyorselérési sáv számára.\n"
+"Hasznos, ha valamit el kell helyezni a sáv jobb, vagy bal oldalán."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Maximum simultaneous block sends per client"
msgstr "Az egyidejűleg a kliensenként küldött térképblokkok maximális száma"
#: src/settings_translation_file.cpp
msgid "Maximum size of the out chat queue"
-msgstr ""
+msgstr "Kimenő üzenetek sorának maximális mérete"
#: src/settings_translation_file.cpp
msgid ""
"Maximum size of the out chat queue.\n"
"0 to disable queueing and -1 to make the queue size unlimited."
msgstr ""
+"A kimenő üzenetek sorának maximális mérete.\n"
+"0 letiltja a várolistára helyezést, míg -1 korlátlanná teszi a sor méretét."
#: src/settings_translation_file.cpp
-msgid "Maximum time in ms a file download (e.g. a mod download) may take."
+msgid ""
+"Maximum time a file download (e.g. a mod download) may take, stated in "
+"milliseconds."
msgstr ""
"Egy fájl letöltésének maximum ideje (milliszekundumban), amíg eltarthat (pl. "
"mod letöltés)."
#: src/settings_translation_file.cpp
+msgid ""
+"Maximum time an interactive request (e.g. server list fetch) may take, "
+"stated in milliseconds."
+msgstr ""
+"Az interaktív kérések (pl. szerverlista lekérése) számára rendelkezésre álló "
+"maximális idő milliszekundumban."
+
+#: src/settings_translation_file.cpp
msgid "Maximum users"
msgstr "Maximum felhasználók"
@@ -5392,7 +5753,7 @@ msgstr "Menük"
#: src/settings_translation_file.cpp
msgid "Mesh cache"
-msgstr ""
+msgstr "Poligonháló cashe"
#: src/settings_translation_file.cpp
msgid "Message of the day"
@@ -5408,7 +5769,7 @@ msgstr "Kijelölt objektum kiemelésére használt módszer."
#: src/settings_translation_file.cpp
msgid "Minimal level of logging to be written to chat."
-msgstr ""
+msgstr "A naplózás csevegésbe írásának minimális szintje."
#: src/settings_translation_file.cpp
msgid "Minimap"
@@ -5423,30 +5784,32 @@ msgid "Minimap scan height"
msgstr "Kistérkép letapogatási magasság"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Minimum limit of random number of large caves per mapchunk."
-msgstr "3D-s zaj, amely meghatározza a tömlöcök számát egy mapchunkonként."
+msgstr ""
+"A véletlenszerűen egy térképdarabkára jutó nagy barlangok számának minimális "
+"korlátja."
#: src/settings_translation_file.cpp
msgid "Minimum limit of random number of small caves per mapchunk."
msgstr ""
+"A véletlenszerűen egy térképdarabkára jutó kis barlangok számának minimális "
+"korlátja."
#: src/settings_translation_file.cpp
msgid "Minimum texture size"
msgstr "Minimum textúra méret"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Mipmapping"
-msgstr "Mip-mapping"
+msgstr "Mipmapping"
#: src/settings_translation_file.cpp
msgid "Mod channels"
msgstr "Mod csatornák"
#: src/settings_translation_file.cpp
-msgid "Modifies the size of the hudbar elements."
-msgstr "A hudbar elemméretét módosítja"
+msgid "Modifies the size of the HUD elements."
+msgstr "A HUD elemméretét módosítja."
#: src/settings_translation_file.cpp
msgid "Monospace font path"
@@ -5457,6 +5820,10 @@ msgid "Monospace font size"
msgstr "Monospace betűméret"
#: src/settings_translation_file.cpp
+msgid "Monospace font size divisible by"
+msgstr "Monospace betűméret osztója"
+
+#: src/settings_translation_file.cpp
msgid "Mountain height noise"
msgstr "Hegy magasság zaj"
@@ -5489,6 +5856,8 @@ msgid ""
"Multiplier for fall bobbing.\n"
"For example: 0 for no view bobbing; 1.0 for normal; 2.0 for double."
msgstr ""
+"A zuhanás utáni fejbillenés szorzója.\n"
+"Például: 0 nincs biccentés; 1,0 normál; 2,0 dupla."
#: src/settings_translation_file.cpp
msgid "Mute key"
@@ -5505,6 +5874,10 @@ msgid ""
"Current mapgens in a highly unstable state:\n"
"- The optional floatlands of v7 (disabled by default)."
msgstr ""
+"Az új világ létrehozásakor használandó térképgenerátor neve.\n"
+"Új világ főmenüben történő létrehozása felülírja ezt.\n"
+"Jelenleg a következő térképgenerátorok nagyon instabilak:\n"
+"- Az opcionális lebegő földek a v7-ben (alapértelmezés szerint tiltott)."
#: src/settings_translation_file.cpp
msgid ""
@@ -5536,6 +5909,8 @@ msgid ""
"Network port to listen (UDP).\n"
"This value will be overridden when starting from the main menu."
msgstr ""
+"Figyelt hálózati port (UDP).\n"
+"Főmenüből való indításkor felülíródik ez az érték."
#: src/settings_translation_file.cpp
msgid "New users need to input this password."
@@ -5543,7 +5918,7 @@ msgstr "Az új felhasználóknak ezt a jelszót kell megadniuk."
#: src/settings_translation_file.cpp
msgid "Noclip"
-msgstr ""
+msgstr "Noclip"
#: src/settings_translation_file.cpp
msgid "Noclip key"
@@ -5555,7 +5930,7 @@ msgstr "Node kiemelés"
#: src/settings_translation_file.cpp
msgid "NodeTimer interval"
-msgstr ""
+msgstr "NodeTimer időköz"
#: src/settings_translation_file.cpp
msgid "Noises"
@@ -5563,7 +5938,7 @@ msgstr "Zajok"
#: src/settings_translation_file.cpp
msgid "Number of emerge threads"
-msgstr ""
+msgstr "A térképblokk betöltő szálak száma"
#: src/settings_translation_file.cpp
msgid ""
@@ -5578,13 +5953,31 @@ msgid ""
"processes, especially in singleplayer and/or when running Lua code in\n"
"'on_generated'. For many users the optimum setting may be '1'."
msgstr ""
+"A térképblokkok betöltésére használt szálak száma.\n"
+"Érték 0:\n"
+"- Automatikus választás. A térképblokkok betöltését végző szálak száma\n"
+"- \"processzorok száma - 2\" lesz, de legalább 1.\n"
+"Bármilyen más érték:\n"
+"- Meghatározza a térképblokkbetöltő szálak számát, amelynek alsó korlátja "
+"1.\n"
+"FIGYELEM: A térképblokkbetöltő szálak számának növelése növeli a játékmotor "
+"mapgen\n"
+"folyamatainak sebességét, de csökkentheti a játékteljesítményt azáltal, hogy "
+"más\n"
+"folyamatokat akadályoznak, különösen egyjátékos módban és/vagy Lua kódok "
+"futtatásakor\n"
+"az 'on_generated' eseményben. Sok játékos számára valószínűleg az 1 az "
+"optimális beállítás."
#: 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"
+"This is a trade-off between SQLite transaction overhead and\n"
"memory consumption (4096=100MB, as a rule of thumb)."
msgstr ""
+"A /clearobjects parancs által egyidejűleg betölthető extra blokkok száma.\n"
+"Kompromisszum az SQLite tranzakciók erőforrásigénye és a\n"
+"memóriahasználat között (4096=100MB hüvelykujjszabályként)."
#: src/settings_translation_file.cpp
msgid "Online Content Repository"
@@ -5598,11 +5991,8 @@ msgstr "Ãtlátszatlan folyadékok"
msgid ""
"Opaqueness (alpha) of the shadow behind the default font, between 0 and 255."
msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid ""
-"Opaqueness (alpha) of the shadow behind the fallback font, between 0 and 255."
-msgstr ""
+"Az alapértelmezett betűtípus mögötti árnyék átlátszatlansága (alfa) 0 és 255 "
+"között."
#: src/settings_translation_file.cpp
msgid ""
@@ -5610,27 +6000,40 @@ msgid ""
"formspec is\n"
"open."
msgstr ""
+"Megnyitja a szünet menüt, ha az ablak kikerül a fókuszból. Nem szünetel, ha "
+"nyitva van\n"
+"egy formspec panel."
+
+#: src/settings_translation_file.cpp
+msgid "Optional override for chat weblink color."
+msgstr "A csevegésben lévő internetes linkek színének opcionális felülírása."
#: src/settings_translation_file.cpp
msgid ""
-"Path of the fallback font.\n"
-"If “freetype†setting is enabled: Must be a TrueType font.\n"
-"If “freetype†setting is disabled: Must be a bitmap or XML vectors font.\n"
+"Path of the fallback font. Must be a TrueType font.\n"
"This font will be used for certain languages or if the default font is "
"unavailable."
msgstr ""
+"A tartalék betűtípus elérési útvonala. TrueType betűtípusnak kell lenni.\n"
+"Bizonyos nyelvek ezt a betűtípust használják vagy ha az alapértelmezett "
+"betűtípus nem elérhető."
#: src/settings_translation_file.cpp
msgid ""
"Path to save screenshots at. Can be an absolute or relative path.\n"
"The folder will be created if it doesn't already exist."
msgstr ""
+"A képernyőképek mentésének elérési útvonala. Lehet abszolút vagy relatív "
+"elérési út.\n"
+"Ha még nem létezik a mappa, létre lesz hozva."
#: src/settings_translation_file.cpp
msgid ""
"Path to shader directory. If no path is defined, default location will be "
"used."
msgstr ""
+"Az árnyékolókat tartalmazó mappa elérési útvonala. Ha nincs beállítva, az "
+"alapértelmezett útvonalat használja."
#: src/settings_translation_file.cpp
msgid "Path to texture directory. All textures are first searched from here."
@@ -5638,31 +6041,34 @@ msgstr "Textúra mappa útvonala. Először minden textúrát itt keres a játé
#: src/settings_translation_file.cpp
msgid ""
-"Path to the default font.\n"
-"If “freetype†setting is enabled: Must be a TrueType font.\n"
-"If “freetype†setting is disabled: Must be a bitmap or XML vectors font.\n"
+"Path to the default font. Must be a TrueType font.\n"
"The fallback font will be used if the font cannot be loaded."
msgstr ""
+"Az alapértelmezett betűtípus elérési útja. TrueType betűtípusnak kell lenni."
+"\n"
+"Ha nem lehet betölteni a betűtípust, a tartalék betűtípust fogja használni."
#: src/settings_translation_file.cpp
msgid ""
-"Path to the monospace font.\n"
-"If “freetype†setting is enabled: Must be a TrueType font.\n"
-"If “freetype†setting is disabled: Must be a bitmap or XML vectors font.\n"
+"Path to the monospace font. Must be a TrueType font.\n"
"This font is used for e.g. the console and profiler screen."
msgstr ""
+"A monospace betűtípus elérési útvonala. TrueType betűtípusnak kell lenni.\n"
+"Ezt a betűtípust használja pl. a konzol és a profiler képernyő."
#: src/settings_translation_file.cpp
msgid "Pause on lost window focus"
-msgstr ""
+msgstr "Szüneteltetés ha az ablak kikerül a fókuszból"
#: src/settings_translation_file.cpp
msgid "Per-player limit of queued blocks load from disk"
msgstr ""
+"A merevlemezről várólistára töltött blokkok számának korlátja játékosonként"
#: src/settings_translation_file.cpp
msgid "Per-player limit of queued blocks to generate"
msgstr ""
+"A várólistára töltött létrehozandó blokkok számának korlátja játékosonként"
#: src/settings_translation_file.cpp
msgid "Physics"
@@ -5677,14 +6083,12 @@ msgid "Pitch move mode"
msgstr "Pályamozgás mód"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Place key"
-msgstr "Repülés gomb"
+msgstr "Elhelyezés gomb"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Place repetition interval"
-msgstr "Jobb kattintás ismétlési időköz"
+msgstr "Elhelyezés ismétlési időköz"
#: src/settings_translation_file.cpp
msgid ""
@@ -5700,13 +6104,17 @@ msgstr "Játékos neve"
#: src/settings_translation_file.cpp
msgid "Player transfer distance"
-msgstr ""
+msgstr "Játékosátviteli távolság"
#: src/settings_translation_file.cpp
msgid "Player versus player"
msgstr "Játékos játékos ellen"
#: src/settings_translation_file.cpp
+msgid "Poisson filtering"
+msgstr "Poisson szűrés"
+
+#: src/settings_translation_file.cpp
msgid ""
"Port to connect to (UDP).\n"
"Note that the port field in the main menu overrides this setting."
@@ -5719,6 +6127,10 @@ msgid ""
"Prevent digging and placing from repeating when holding the mouse buttons.\n"
"Enable this when you dig or place too often by accident."
msgstr ""
+"Ãsás és lehelyezés ismétlÅ‘désének megakadályozása, amikor nyomva tartod az "
+"egérbombokat.\n"
+"Engedélyezd, ha túl gyakran fordul elő, hogy véletlenül lehelyezel vagy "
+"kiásol blokkokat."
#: src/settings_translation_file.cpp
msgid "Prevent mods from doing insecure things like running shell commands."
@@ -5749,19 +6161,24 @@ msgstr "Profiler váltó gomb"
#: src/settings_translation_file.cpp
msgid "Profiling"
-msgstr ""
+msgstr "Pfolilozás"
#: src/settings_translation_file.cpp
msgid "Prometheus listener address"
-msgstr ""
+msgstr "Prometheus figyelési cím"
#: src/settings_translation_file.cpp
msgid ""
"Prometheus listener address.\n"
-"If minetest is compiled with ENABLE_PROMETHEUS option enabled,\n"
+"If Minetest is compiled with ENABLE_PROMETHEUS option enabled,\n"
"enable metrics listener for Prometheus on that address.\n"
-"Metrics can be fetch on http://127.0.0.1:30000/metrics"
+"Metrics can be fetched on http://127.0.0.1:30000/metrics"
msgstr ""
+"Prometheus figyelési cím.\n"
+"Ha a Minetest-et az ENABLE_PROMETHEUS opció engedélyezésével állítták össze,"
+"\n"
+"elérhetővé válnak a Prometheus mérőszám figyelői ezen a címen.\n"
+"A mérőszámok itt érhetők el: http://127.0.0.1:30000/metrics"
#: src/settings_translation_file.cpp
msgid "Proportion of large caves that contain liquid."
@@ -5773,6 +6190,8 @@ msgid ""
"Values larger than 26 will start to produce sharp cutoffs at cloud area "
"corners."
msgstr ""
+"A felhők kiterjedése 64 blokkos felhőnégyzetek számában mérve.\n"
+"26-nál nagyobb értékek éles határt eredményeznek a felhők sarkainál."
#: src/settings_translation_file.cpp
msgid "Raises terrain to make valleys around the rivers."
@@ -5791,9 +6210,8 @@ msgid "Recent Chat Messages"
msgstr "Legutóbbi csevegésüzenetek"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Regular font path"
-msgstr "Betűtípus helye"
+msgstr "Betűtípus útvonala"
#: src/settings_translation_file.cpp
msgid "Remote media"
@@ -5810,7 +6228,7 @@ msgid ""
msgstr ""
"Színkódok eltávolítása a bejövő csevegésüzenetekből\n"
"Használd ezt hogy megakadályozd, hogy a játékosok színeket használjanak az "
-"üzeneteikben."
+"üzeneteikben"
#: src/settings_translation_file.cpp
msgid "Replaces the default main menu with a custom one."
@@ -5833,22 +6251,32 @@ msgid ""
"csm_restriction_noderange)\n"
"READ_PLAYERINFO: 32 (disable get_player_names call client-side)"
msgstr ""
+"Korlátozza bizonyos kliensoldali függvényekhez a hozzáférést a szerveren.\n"
+"Kombináld az alábbi bájtcímkéket a kliensoldali képességek korlátozásához,\n"
+"vagy állítsd 0-ra a korlátozások eltávolításához:\n"
+"LOAD_CLIENT_MODS: 1 (letitlja a kliensoldali modok betöltését)\n"
+"CHAT_MESSAGES: 2 (letiltja a send_chat_message hívásokat kliensoldalon)\n"
+"READ_ITEMDEFS: 4 (letiltja a get_item_def hívásokat kliensoldalon)\n"
+"READ_NODEDEFS: 8 (letiltja a get_node_def hívásokat kliensoldalon)\n"
+"LOOKUP_NODES_LIMIT: 16 (korlátozza a get_node hívásokat kliensoldalon a\n"
+"csm_restriction_noderange esetén)\n"
+"READ_PLAYERINFO: 32 (letiltja a get_player_names hívásokat kliensoldalon)"
#: src/settings_translation_file.cpp
msgid "Ridge mountain spread noise"
-msgstr ""
+msgstr "A hegyvonulatok kiterjedésének zaja"
#: src/settings_translation_file.cpp
msgid "Ridge noise"
-msgstr ""
+msgstr "Hegygerinc zaj"
#: src/settings_translation_file.cpp
msgid "Ridge underwater noise"
-msgstr ""
+msgstr "Víz alatti hegygerinc zaj"
#: src/settings_translation_file.cpp
msgid "Ridged mountain size noise"
-msgstr ""
+msgstr "Hegyvonulatok méretének zaja"
#: src/settings_translation_file.cpp
msgid "Right key"
@@ -5880,7 +6308,7 @@ msgstr "Folyóvölgy szélessége"
#: src/settings_translation_file.cpp
msgid "Rollback recording"
-msgstr ""
+msgstr "Visszavonási pontok rögzítése"
#: src/settings_translation_file.cpp
msgid "Rolling hill size noise"
@@ -5900,7 +6328,7 @@ msgstr "Biztonságos ásás és elhelyezés"
#: src/settings_translation_file.cpp
msgid "Sandy beaches occur when np_beach exceeds this value."
-msgstr ""
+msgstr "Homokos partok képződnek, ha az np_beach meghaladja ezt az értéket."
#: src/settings_translation_file.cpp
msgid "Save the map received by the client on disk."
@@ -5926,7 +6354,7 @@ msgstr ""
"A legközelebbi-szomszéd-élsimítás szűrőt használja a GUI méretezésére.\n"
"Ez elsimít néhány durva élt, és elhajlítja a pixeleket a méretezés "
"csökkentésekor,\n"
-"de ennek az az ára, hogy elhomályosít néhány szélső pixelt, ha a képek nem\n"
+"de ennek az ára, hogy elhomályosít néhány szélső pixelt, ha a képek nem\n"
"egész számok alapján vannak méretezve."
#: src/settings_translation_file.cpp
@@ -5966,17 +6394,19 @@ msgstr "Folyómeder zaj"
#: src/settings_translation_file.cpp
msgid "Second of 4 2D noises that together define hill/mountain range height."
msgstr ""
+"A második a négy 2D zajból, amelyek együttesen meghatározzák a dombságok/"
+"hegységek magasságát."
#: src/settings_translation_file.cpp
msgid "Second of two 3D noises that together define tunnels."
msgstr ""
+"A második a két 3D zajból, amelyek együttesen meghatározzák az alagutakat."
#: src/settings_translation_file.cpp
msgid "Security"
msgstr "Biztonság"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "See https://www.sqlite.org/pragma.html#pragma_synchronous"
msgstr "Lásd: http://www.sqlite.org/pragma.html#pragma_synchronous"
@@ -5993,7 +6423,6 @@ msgid "Selection box width"
msgstr "Kijelölő doboz szélessége"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Selects one of 18 fractal types.\n"
"1 = 4D \"Roundy\" Mandelbrot set.\n"
@@ -6061,7 +6490,7 @@ msgstr "Szerver port"
#: src/settings_translation_file.cpp
msgid "Server side occlusion culling"
-msgstr ""
+msgstr "Takarásban lévő térképblokkok szerveroldali kiválogatása"
#: src/settings_translation_file.cpp
msgid "Serverlist URL"
@@ -6085,6 +6514,42 @@ msgstr "A csevegés maximális szöveghossza amelyet a kliensek küldhetnek."
#: src/settings_translation_file.cpp
msgid ""
+"Set the shadow strength.\n"
+"Lower value means lighter shadows, higher value means darker shadows."
+msgstr ""
+"Az árnyékok kivehetőségét szabályozza.\n"
+"Kisebb érték világosabb, magasabb érték sötétebb árnyékokat jelent."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set the soft shadow radius size.\n"
+"Lower values mean sharper shadows, bigger values mean softer shadows.\n"
+"Minimum value: 1.0; maximum value: 10.0"
+msgstr ""
+"Az árnyékok lágy szélének kiterjedését szabályozza.\n"
+"Kisebb érték élesebb, nagyobb érték lágyabb árnyékokat jelent.\n"
+"Minimális érték: 1,0; maximális érték: 10,0"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set the tilt of Sun/Moon orbit in degrees.\n"
+"Value of 0 means no tilt / vertical orbit.\n"
+"Minimum value: 0.0; maximum value: 60.0"
+msgstr ""
+"A Nap/Hold pályájának fokokban mért döntési szögét szabályozza.\n"
+"A 0 érték azt jelenti, hogy nincs döntés / függőleges a pályájuk.\n"
+"Minimális érték: 0,0; maximális érték: 60,0"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set to true to enable Shadow Mapping.\n"
+"Requires shaders to be enabled."
+msgstr ""
+"Ãllítsa igazra az árnyáktérképezés (Shadow Mapping) engedélyezéséhez.\n"
+"Az árnyalók engedélyezése szükséges hozzá."
+
+#: src/settings_translation_file.cpp
+msgid ""
"Set to true to enable waving leaves.\n"
"Requires shaders to be enabled."
msgstr ""
@@ -6108,6 +6573,16 @@ msgstr ""
"Az árnyalók engedélyezése szükséges hozzá."
#: src/settings_translation_file.cpp
+msgid ""
+"Sets shadow texture quality to 32 bits.\n"
+"On false, 16 bits texture will be used.\n"
+"This can cause much more artifacts in the shadow."
+msgstr ""
+"Az árnyék textúrájának minőségét 32 bitesre állítja.\n"
+"Ha hamis, 16 bites textúrát fog használni.\n"
+"Ez sokkal több grafikai hibát okoz az árnyékon."
+
+#: src/settings_translation_file.cpp
msgid "Shader path"
msgstr "Ãrnyaló útvonala"
@@ -6118,22 +6593,36 @@ msgid ""
"cards.\n"
"This only works with the OpenGL video backend."
msgstr ""
-"Az árnyalók fejlett vizuális effekteket engedélyeznek és növelhetik a "
-"teljesítményt néhány videókártya esetében.\n"
+"Az árnyalók fejlett vizuális effekteket tesznek lehetővé és növelhetik a "
+"teljesítményt\n"
+"néhány videókártya esetében.\n"
"Csak OpenGL-el működnek."
#: src/settings_translation_file.cpp
+msgid "Shadow filter quality"
+msgstr "Ãrnyék szűrÅ‘ minÅ‘ség"
+
+#: src/settings_translation_file.cpp
+msgid "Shadow map max distance in nodes to render shadows"
+msgstr "Az árnyéktérkép maximális renderelési távolsága blokkban"
+
+#: src/settings_translation_file.cpp
+msgid "Shadow map texture in 32 bits"
+msgstr "32 bites árnyéktérkép textúra"
+
+#: src/settings_translation_file.cpp
+msgid "Shadow map texture size"
+msgstr "Ãrnyéktérkép textúra méret"
+
+#: src/settings_translation_file.cpp
msgid ""
"Shadow offset (in pixels) of the default font. If 0, then shadow will not be "
"drawn."
msgstr "Betűtípus árnyékának eltolása. Ha 0, akkor nem lesz árnyék rajzolva."
#: src/settings_translation_file.cpp
-msgid ""
-"Shadow offset (in pixels) of the fallback font. If 0, then shadow will not "
-"be drawn."
-msgstr ""
-"Tartalék betűtípus árnyékának eltolása. Ha 0, akkor nem lesz árnyék rajzolva."
+msgid "Shadow strength"
+msgstr "Ãrnyék kivehetÅ‘sége"
#: src/settings_translation_file.cpp
msgid "Shape of the minimap. Enabled = round, disabled = square."
@@ -6150,18 +6639,16 @@ msgid "Show entity selection boxes"
msgstr "Entitások kijelölő dobozának megjelenítése"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Show entity selection boxes\n"
"A restart is required after changing this."
msgstr ""
-"Nyelv beállítása. Hagyd üresen a rendszer nyelvének használatához.\n"
+"Entitás hitboxok megjelenítése.\n"
"A változtatás után a játék újraindítása szükséges."
#: src/settings_translation_file.cpp
-#, fuzzy
-msgid "Show nametag backgrounds by default"
-msgstr "Félkövér betűtípus alapértelmezetten"
+msgid "Show name tag backgrounds by default"
+msgstr "Névcímkék háttere alapértelmezésben látszik"
#: src/settings_translation_file.cpp
msgid "Shutdown message"
@@ -6176,6 +6663,14 @@ msgid ""
"Altering this value is for special usage, leaving it unchanged is\n"
"recommended."
msgstr ""
+"A mapgen által generált térképdarabka mérete térképblokkokban (16 blokk) "
+"mérve.\n"
+"FIGYELEM!: Nincs értelme és bizonyos veszélyekkel is jár ennek az értéknek\n"
+"5 fölés emelése.\n"
+"Ha csökkentjük ezt az értéket, gyakrabban fordulnak elő barlangok és "
+"tömlöcök.\n"
+"Változtasd meg, ha valami különleges okból kell, de ajánlott\n"
+"változatlanul hagyni."
#: src/settings_translation_file.cpp
msgid ""
@@ -6183,10 +6678,18 @@ msgid ""
"increase the cache hit %, reducing the data being copied from the main\n"
"thread, thus reducing jitter."
msgstr ""
+"A poligonhálót generáló MapBlock cache mérete. Növelése megnöveli a\n"
+"cache kiszolgálási teljesítményét, ezáltal csökken a fő szálból másolt "
+"adatok\n"
+"mennyisége, és ezáltal csökken a szaggatás."
+
+#: src/settings_translation_file.cpp
+msgid "Sky Body Orbit Tilt"
+msgstr "Égitestek pályájának döntése"
#: src/settings_translation_file.cpp
msgid "Slice w"
-msgstr ""
+msgstr "W szelet"
#: src/settings_translation_file.cpp
msgid "Slope and fill work together to modify the heights."
@@ -6203,23 +6706,26 @@ msgstr "Kis barlangok minimális száma"
#: src/settings_translation_file.cpp
msgid "Small-scale humidity variation for blending biomes on borders."
msgstr ""
+"A biomok közötti átmeneti határra vonatkozó kisléptékű páratartalom-"
+"ingadozás."
#: src/settings_translation_file.cpp
msgid "Small-scale temperature variation for blending biomes on borders."
msgstr ""
+"A biomok közötti átmeneti határra vonatkozó kisléptékű hőmérséklet-ingadozás."
#: src/settings_translation_file.cpp
msgid "Smooth lighting"
msgstr "Simított megvilágítás"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Smooths camera when looking around. Also called look or mouse smoothing.\n"
"Useful for recording videos."
msgstr ""
-"Kamera mozgásának simítása mozgáskor és körbenézéskor.\n"
-"Videófelvételekhez hasznos."
+"Kamera mozgásának simítása körbenézéskor. Körbenézés és egérsimításnak is "
+"hívják.\n"
+"Hasznos videók felvételénél."
#: src/settings_translation_file.cpp
msgid "Smooths rotation of camera in cinematic mode. 0 to disable."
@@ -6239,19 +6745,15 @@ msgstr "Lopakodás sebessége"
#: src/settings_translation_file.cpp
msgid "Sneaking speed, in nodes per second."
-msgstr "Lopakodás sebessége node/másodpercben"
+msgstr "Lopakodás sebessége node/másodpercben."
#: src/settings_translation_file.cpp
-msgid "Sound"
-msgstr "Hang"
+msgid "Soft shadow radius"
+msgstr "Lágy árnyék sugara"
#: src/settings_translation_file.cpp
-msgid "Special key"
-msgstr "Különleges gomb"
-
-#: src/settings_translation_file.cpp
-msgid "Special key for climbing/descending"
-msgstr "Különleges gomb a mászáshoz/ereszkedéshez"
+msgid "Sound"
+msgstr "Hang"
#: src/settings_translation_file.cpp
msgid ""
@@ -6260,6 +6762,13 @@ msgid ""
"(obviously, remote_media should end with a slash).\n"
"Files that are not present will be fetched the usual way."
msgstr ""
+"Meghatározza, mely URL-ről töltse le a kliens a médiatartalmat az UDP "
+"helyett.\n"
+"$filename -nek elérhetőnek kell lennie a $remote_media$filename helyről "
+"cURL\n"
+"használatával (nyilván, a remote_media elérési útnak perjelre kell végződni)."
+"\n"
+"A nem elérhető fájlokat a normál módon fogja letölteni."
#: src/settings_translation_file.cpp
msgid ""
@@ -6267,6 +6776,21 @@ msgid ""
"Note that mods or games may explicitly set a stack for certain (or all) "
"items."
msgstr ""
+"A blokkok, tárgyak és eszközök alapértelmezett kötegméretét szabályozza.\n"
+"Megjegyzendő, hogy a modok vagy játékok kifejezetten meghatározhatják a "
+"kötegek méretét bizonyos vagy az összes tárgy esetén."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Spread a complete update of shadow map over given amount of frames.\n"
+"Higher values might make shadows laggy, lower values\n"
+"will consume more resources.\n"
+"Minimum value: 1; maximum value: 16"
+msgstr ""
+"Az árnyéktérkép firssítését széthúzza a megadott számú képkockára.\n"
+"Magasabb érték esetén az árnyékok késhetnek, alacsabb érékek\n"
+"viszont több erőforrást igényelnek.\n"
+"Minimális érték: 1; maximális érték: 16"
#: src/settings_translation_file.cpp
msgid ""
@@ -6274,6 +6798,9 @@ msgid ""
"Controls the width of the range to be boosted.\n"
"Standard deviation of the light curve boost Gaussian."
msgstr ""
+"A fénygörbe kiemelésének hatósugara.\n"
+"A kiemelendő tartomány szélességét szabályozza.\n"
+"A fénygörbe kiemelés Gauss-görbéjének szórása."
#: src/settings_translation_file.cpp
msgid "Static spawnpoint"
@@ -6284,18 +6811,16 @@ msgid "Steepness noise"
msgstr "Meredekség zaj"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Step mountain size noise"
-msgstr "Terep magasság"
+msgstr "Lépcsős hegyek méretének zajossága"
#: src/settings_translation_file.cpp
msgid "Step mountain spread noise"
-msgstr ""
+msgstr "Lépcsős hegy kiterjedésének zaja"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Strength of 3D mode parallax."
-msgstr "Generált normálfelületek erőssége."
+msgstr "3D mód parallax hatásának erőssége."
#: src/settings_translation_file.cpp
msgid ""
@@ -6303,14 +6828,17 @@ msgid ""
"The 3 'boost' parameters define a range of the light\n"
"curve that is boosted in brightness."
msgstr ""
+"A fénygörbe kiemelésének erőssége.\n"
+"A 3 'boost' parameter a fénygörbe egy tartományát\n"
+"határozza meg, amelyeken erősebbek a fények."
#: src/settings_translation_file.cpp
msgid "Strict protocol checking"
-msgstr ""
+msgstr "Szigorú protokollellenőrzés"
#: src/settings_translation_file.cpp
msgid "Strip color codes"
-msgstr ""
+msgstr "Színkódok kinyerése"
#: src/settings_translation_file.cpp
msgid ""
@@ -6325,10 +6853,27 @@ msgid ""
"server-intensive extreme water flow and to avoid vast flooding of the\n"
"world surface below."
msgstr ""
+"Az egybefüggő lebegő föld rétegre opcionálisan helyezhető vízfelület szintje."
+"\n"
+"Alapértelmezésben a víz nem engedélyezett és csak akkor helyezi le, ha ez "
+"az\n"
+"érték nagyobb, mint 'mgv7_floatland_ymax' - 'mgv7_floatland_taper' (a "
+"vékonyítás\n"
+"felső részének kezdete).\n"
+"***FIGYELEM! VESZÉLYES LEHET A VILÃGOKRA ÉS A SZERVERTELJESÃTMÉNYRE***:\n"
+"Ha endgedélyezve van a vízelhelyezés, úgy kell konfigurálni a lebegő "
+"földeket és\n"
+"tesztelni kell, hogy valóban egybefüggő réteget alkosson, az "
+"'mgv7_floatland_density'\n"
+"értékének 2,0-nak (vagy az 'mgv7_np_floatland'-től függően más szükséges "
+"értéknek)\n"
+"kell lenni, hogy elkerülhető legyen a szervert leterhelő extrém vízfolyás és "
+"az alatta lévő\n"
+"földfelszín elárasztása."
#: src/settings_translation_file.cpp
msgid "Synchronous SQLite"
-msgstr ""
+msgstr "Szinkron SQLite"
#: src/settings_translation_file.cpp
msgid "Temperature variation for biomes."
@@ -6343,7 +6888,6 @@ msgid "Terrain base noise"
msgstr "Terep alapzaj"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Terrain height"
msgstr "Terep magasság"
@@ -6361,6 +6905,9 @@ msgid ""
"Controls proportion of world area covered by hills.\n"
"Adjust towards 0.0 for a larger proportion."
msgstr ""
+"A dombok terep zajküszöbe.\n"
+"A világ dombokkal fedett területének arányát szabályozza.\n"
+"Ãllítsd 0,0-hoz közelebb, hogy az arány növekedjen."
#: src/settings_translation_file.cpp
msgid ""
@@ -6368,10 +6915,13 @@ msgid ""
"Controls proportion of world area covered by lakes.\n"
"Adjust towards 0.0 for a larger proportion."
msgstr ""
+"A tavak terep zajküszöbe.\n"
+"A világ tavakkal fedett területének arányát szabályozza.\n"
+"Ãllítsd 0,0-hoz közelebb, hogy az arány növekedjen."
#: src/settings_translation_file.cpp
msgid "Terrain persistence noise"
-msgstr ""
+msgstr "Terep folytonossági zaj"
#: src/settings_translation_file.cpp
msgid "Texture path"
@@ -6379,6 +6929,17 @@ msgstr "Textúrák útvonala"
#: src/settings_translation_file.cpp
msgid ""
+"Texture size to render the shadow map on.\n"
+"This must be a power of two.\n"
+"Bigger numbers create better shadows but it is also more expensive."
+msgstr ""
+"Az árnyéktérkép rendereléséhez használt textúraméret.\n"
+"Kettő hatványának kell lennie.\n"
+"Nagyobb számok nagyobb árnyékokat hoznak létre, de ez egyben "
+"erőforrásigényesebb is."
+
+#: src/settings_translation_file.cpp
+msgid ""
"Textures on a node may be aligned either to the node or to the world.\n"
"The former mode suits better things like machines, furniture, etc., while\n"
"the latter makes stairs and microblocks fit surroundings better.\n"
@@ -6386,30 +6947,42 @@ msgid ""
"this option allows enforcing it for certain node types. Note though that\n"
"that is considered EXPERIMENTAL and may not work properly."
msgstr ""
+"Egy blokk textúráját lehet a blokkhoz vagy a világhoz igazítani.\n"
+"Az első megoldás jobban illik olyan dolgokhoz, mint a gépek, bútorok stb.,\n"
+"míg a másodikkal jobban beleillenek a környezetükbe a lépcsők és "
+"mikroblokkok.\n"
+"Mivel azonban ez a lehetőség még új, és így a régebbi szerverek még nem "
+"használják,\n"
+"ezzel az opcióval ki lehet kényszeríteni ezt bizonyos blokkokra. Meg kell "
+"azonban\n"
+"jegyezni, hogy ez még KÃSÉRLETI fázisban van és lehet, hogy nem működik "
+"helyesen."
#: src/settings_translation_file.cpp
msgid "The URL for the content repository"
msgstr "Az URL a tartalomtárhoz"
#: src/settings_translation_file.cpp
-#, fuzzy
-msgid "The deadzone of the joystick"
-msgstr "A használni kívánt joystick azonosítója"
+msgid "The dead zone of the joystick"
+msgstr "A joystick holttere"
#: src/settings_translation_file.cpp
msgid ""
"The default format in which profiles are being saved,\n"
"when calling `/profiler save [format]` without format."
msgstr ""
+"A profilok mentéséhez használt alapértelmezett formátum, amikor\n"
+"formátum nélkül kerül meghívásra a `/profiler save [format]` parancs."
#: src/settings_translation_file.cpp
msgid "The depth of dirt or other biome filler node."
-msgstr ""
+msgstr "A föld vagy egyéb biom feltöltő blokk mélysége."
#: src/settings_translation_file.cpp
msgid ""
"The file path relative to your worldpath in which profiles will be saved to."
msgstr ""
+"A profilok mentésének relatív elérési útja a világod elérési útjához képest."
#: src/settings_translation_file.cpp
msgid "The identifier of the joystick to use"
@@ -6418,6 +6991,7 @@ msgstr "A használni kívánt joystick azonosítója"
#: src/settings_translation_file.cpp
msgid "The length in pixels it takes for touch screen interaction to start."
msgstr ""
+"Az érintőképernyős interakció megkezdéséhez szükséges távolság pixelekben."
#: src/settings_translation_file.cpp
msgid ""
@@ -6427,10 +7001,15 @@ msgid ""
"Default is 1.0 (1/2 node).\n"
"Requires waving liquids to be enabled."
msgstr ""
+"A hullámzó folyadékok felszínének maximális magassága.\n"
+"4,0 = A hullámok magasága két blokk.\n"
+"0,0 = A hullámok egyáltalán nem mozognak.\n"
+"Az alapértelmezett érték 1,0 (1/2 blokk).\n"
+"A hullámzó folyadék engedélyezése szükséges hozzá."
#: src/settings_translation_file.cpp
msgid "The network interface that the server listens on."
-msgstr ""
+msgstr "A hálózati interfész, amelyen a szerver figyel."
#: src/settings_translation_file.cpp
msgid ""
@@ -6451,22 +7030,38 @@ msgid ""
"maintained.\n"
"This should be configured together with active_object_send_range_blocks."
msgstr ""
+"A játékosok körüli blokktérfogat sugara, amelyen belül érvényesülnek\n"
+"az aktív blokkok dolgai. Térképblokkban (16 blokk) mérve.\n"
+"Az aktív blokkokban betöltődnek az objektumok és ABM-ek futnak.\n"
+"Ez egyben az a legkisebb sugár is, amelyen belül az aktív objektumokról "
+"(mobok) gondoskodik a játék.\n"
+"Ezt a beállítást az active_object_send_range_blocks-szal összhangban kell "
+"megadni."
#: src/settings_translation_file.cpp
msgid ""
-"The rendering back-end for Irrlicht.\n"
+"The rendering back-end.\n"
"A restart is required after changing this.\n"
"Note: On Android, stick with OGLES1 if unsure! App may fail to start "
"otherwise.\n"
"On other platforms, OpenGL is recommended.\n"
"Shaders are supported by OpenGL (desktop only) and OGLES2 (experimental)"
msgstr ""
+"A renderelő háttérprogram.\n"
+"Ha ezt megváltoztatod, újraindítás szükséges.\n"
+"Megjegyzés: Androidon, hagyd OGLES1-en, ha bizonytalan vagy! Lehet, hogy nem "
+"indul az app különben.\n"
+"Más platformokon az OpenGL az ajánlott.\n"
+"Az árnyékolókat az OpenGL (csak asztali rendszeren) és OGLES2 (kísérleti) "
+"támogatja"
#: src/settings_translation_file.cpp
msgid ""
"The sensitivity of the joystick axes for moving the\n"
-"ingame view frustum around."
+"in-game view frustum around."
msgstr ""
+"A jostick tengelyeinek érzékenysége, amely\n"
+"a játékbeli látómező mozgatását befolyásolja."
#: src/settings_translation_file.cpp
msgid ""
@@ -6475,6 +7070,12 @@ msgid ""
"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 ""
+"A körülvett, illetve takarásban lévő blokkok árnyékolásának erőssége "
+"(sötétsége).\n"
+"Alacsonyabb érték sötétebb, magasabb érték világosabb. E beállítás érvényes\n"
+"értéktartománya 0,25-től 4,0-ig terjed. Ha a tartományon kívüli értéket "
+"adunk meg,\n"
+"a legközelebbi érvényes értékre lesz állítva."
#: src/settings_translation_file.cpp
msgid ""
@@ -6482,29 +7083,33 @@ msgid ""
"capacity until an attempt is made to decrease its size by dumping old queue\n"
"items. A value of 0 disables the functionality."
msgstr ""
+"A másodpercben megadott idő, ameddig a folyadékok várólistája a számítási\n"
+"teljesítmény fölé nőhet, és ezután megpróbálja csökkenteni a méretét azáltal,"
+"\n"
+"hogy törli a régóta sorbanálló elemeket. A 0 érték letiltja ezt a funkciót."
#: src/settings_translation_file.cpp
msgid ""
"The time budget allowed for ABMs to execute on each step\n"
"(as a fraction of the ABM Interval)"
msgstr ""
+"Az ABM-ek rendelkezésére álló lépésenkénti végrehajtási időkeret\n"
+"(az ABM intervallum törtrésze)"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"The time in seconds it takes between repeated events\n"
"when holding down a joystick button combination."
msgstr ""
-"Ennyi másodperc szükséges az ismételt jobb kattintáshoz a jobb egérgomb "
-"nyomva tartásakor."
+"Ennyi másodperc szükséges az esemény megismétléséhez\n"
+"a joystick gombok nyomva tartásakor."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"The time in seconds it takes between repeated node placements when holding\n"
"the place button."
msgstr ""
-"Ennyi másodperc szükséges az ismételt jobb kattintáshoz a jobb egérgomb "
+"Ennyi másodperc szükséges az ismételt node elhelyezéshez az elhelyezés gomb\n"
"nyomva tartásakor."
#: src/settings_translation_file.cpp
@@ -6517,26 +7122,33 @@ msgid ""
"enabled. Also the vertical distance over which humidity drops by 10 if\n"
"'altitude_dry' is enabled."
msgstr ""
+"Az a függőleges távolság, amely során a hőmérséklet 20 fokkal csökken, ha az "
+"'altitude_chill'\n"
+"be van kapcsolva. Ugyanez a távolság, amely során a páratartalom esik 10 "
+"egységgel, ha az\n"
+"'altitude_dry' be van kapcsolva."
#: src/settings_translation_file.cpp
msgid "Third of 4 2D noises that together define hill/mountain range height."
msgstr ""
+"A harmadik a négy 2D zajból, amelyek együttesen meghatározzák a dombságok/"
+"hegységek magasságát."
#: 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 ""
-"Annak az ideje, hogy mennyi ideig \"élnek\" az eldobott tárgyak.\n"
+"Annak az ideje, hogy mennyi ideig maradnak meg az eldobott tárgyak.\n"
"-1-re állítás kikapcsolja ezt a funkciót."
#: src/settings_translation_file.cpp
msgid "Time of day when a new world is started, in millihours (0-23999)."
-msgstr ""
+msgstr "Az új világ létrehozásakor érvényes napszak milliórában (0-23999)."
#: src/settings_translation_file.cpp
msgid "Time send interval"
-msgstr ""
+msgstr "Idő küldési gyakoriság"
#: src/settings_translation_file.cpp
msgid "Time speed"
@@ -6545,6 +7157,8 @@ msgstr "Idő sebessége"
#: src/settings_translation_file.cpp
msgid "Timeout for client to remove unused map data from memory."
msgstr ""
+"A kliens rendelkezésére álló időkorlát, hogy eltávolítsa a használaton "
+"kívüli térképadatokat a memóriából."
#: src/settings_translation_file.cpp
msgid ""
@@ -6571,6 +7185,10 @@ msgid "Touch screen threshold"
msgstr "Érintőképernyő küszöbe"
#: src/settings_translation_file.cpp
+msgid "Tradeoffs for performance"
+msgstr "Teljesítménybeli kompromisszumok"
+
+#: src/settings_translation_file.cpp
msgid "Trees noise"
msgstr "Fa zaj"
@@ -6579,7 +7197,6 @@ msgid "Trilinear filtering"
msgstr "Trilineáris szűrés"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"True = 256\n"
"False = 128\n"
@@ -6598,9 +7215,8 @@ msgid "URL to the server list displayed in the Multiplayer Tab."
msgstr "A Többjátékos fül alatt megjelenített szerverlista URL-je."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Undersampling"
-msgstr "Renderelés:"
+msgstr "Alulmintavételezés"
#: src/settings_translation_file.cpp
msgid ""
@@ -6610,24 +7226,28 @@ msgid ""
"image.\n"
"Higher values result in a less detailed image."
msgstr ""
+"Az alulmintavételezés olyan, mintha kisebb képernyőfelbontást használnál, "
+"de\n"
+"csak a játék világára van hatással, a GUI-t változatlanul hagyja.\n"
+"Sokkal jobb teljesítmény érhető el vele annak árán, hogy a kép kevésbé\n"
+"részletgazdaggá válik. Magasabb értékek kevésbé részletes képet "
+"eredményeznek."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Unlimited player transfer distance"
msgstr "Korlátlan játékosátviteli távolság"
#: src/settings_translation_file.cpp
msgid "Unload unused server data"
-msgstr ""
+msgstr "A használaton kívüli szerveradatok eltávolítása a memóriából"
#: src/settings_translation_file.cpp
msgid "Upper Y limit of dungeons."
msgstr "A tömlöcök felső Y határa."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Upper Y limit of floatlands."
-msgstr "A tömlöcök felső Y határa."
+msgstr "A lebegő földek felső Y határa."
#: src/settings_translation_file.cpp
msgid "Use 3D cloud look instead of flat."
@@ -6647,10 +7267,13 @@ msgstr "Bilineáris szűrés a textúrák méretezésekor."
#: src/settings_translation_file.cpp
msgid ""
-"Use mip mapping to scale textures. May slightly increase performance,\n"
+"Use mipmapping to scale textures. May slightly increase performance,\n"
"especially when using a high resolution texture pack.\n"
"Gamma correct downscaling is not supported."
msgstr ""
+"Mipmapping használata a textúrák méretezéséhez. Kis mértékben növelheti a\n"
+"teljesítményt, különösen nagy felbontású textúracsomagok használatakor.\n"
+"Gamma-megőrző zsugorítás nem támogatott."
#: src/settings_translation_file.cpp
msgid ""
@@ -6662,6 +7285,13 @@ msgid ""
"If set to 0, MSAA is disabled.\n"
"A restart is required after changing this option."
msgstr ""
+"Többmintás élsimítás (MSAA) használata a blokkélek simításához.\n"
+"Ez az algoritmus kisimítja a 3D látómezőt miközben a kép éles marad,\n"
+"a textúrák beljsejét azonban nem módosítja\n"
+"(ami főleg az átlátszó textúráknál vehető észre).\n"
+"A blokkok között látható rések jelennek meg, ha az árnyékolók nincsenek\n"
+"engedélyezve. Ha 0-ra van állítva, az MSAA tiltva van.\n"
+"E beállítás megváltoztatása után újraindítás szükséges."
#: src/settings_translation_file.cpp
msgid "Use trilinear filtering when scaling textures."
@@ -6669,14 +7299,13 @@ msgstr "Trilineáris szűrés a textúrák méretezéséhez."
#: src/settings_translation_file.cpp
msgid "VBO"
-msgstr ""
+msgstr "VBO"
#: src/settings_translation_file.cpp
msgid "VSync"
msgstr "Függőleges szinkron"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Valley depth"
msgstr "Völgyek mélysége"
@@ -6685,12 +7314,10 @@ msgid "Valley fill"
msgstr "Völgyek kitöltése"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Valley profile"
-msgstr "Völgyek meredeksége"
+msgstr "Völgyek profilja"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Valley slope"
msgstr "Völgyek meredeksége"
@@ -6700,7 +7327,7 @@ msgstr "A biom töltőanyag mélységének változékonysága."
#: src/settings_translation_file.cpp
msgid "Variation of maximum mountain height (in nodes)."
-msgstr ""
+msgstr "A legnagyobb eltérés a hegyek magasságában (blokkokban)."
#: src/settings_translation_file.cpp
msgid "Variation of number of caves."
@@ -6711,20 +7338,24 @@ msgid ""
"Variation of terrain vertical scale.\n"
"When noise is < -0.55 terrain is near-flat."
msgstr ""
+"A terep függőleges kiterjedésének mozgástere.\n"
+"Ha a zaj < -0,55, akkor a terep szinte lapos."
#: src/settings_translation_file.cpp
msgid "Varies depth of biome surface nodes."
-msgstr ""
+msgstr "A biomok felületét képező blokkréteg mélységét variálja."
#: src/settings_translation_file.cpp
msgid ""
"Varies roughness of terrain.\n"
"Defines the 'persistence' value for terrain_base and terrain_alt noises."
msgstr ""
+"A terep töredezettségét variálja.\n"
+"Meghatározza a terrain_base és terrain_alt zajok folytonosságának értékét."
#: src/settings_translation_file.cpp
msgid "Varies steepness of cliffs."
-msgstr "A szirtek meredekségét állítja."
+msgstr "A szirtek meredekségét variálja."
#: src/settings_translation_file.cpp
msgid "Vertical climbing speed, in nodes per second."
@@ -6740,7 +7371,7 @@ msgstr "Videó driver"
#: src/settings_translation_file.cpp
msgid "View bobbing factor"
-msgstr ""
+msgstr "Fejbillegési faktor"
#: src/settings_translation_file.cpp
msgid "View distance in nodes."
@@ -6763,21 +7394,20 @@ msgid "Viewing range"
msgstr "Látóterület"
#: src/settings_translation_file.cpp
-msgid "Virtual joystick triggers aux button"
-msgstr ""
+msgid "Virtual joystick triggers Aux1 button"
+msgstr "Virtuális joystick gombok Aux1 gomb"
#: src/settings_translation_file.cpp
msgid "Volume"
msgstr "Hangerő"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Volume of all sounds.\n"
"Requires the sound system to be enabled."
msgstr ""
-"Parallax occlusion mapping bekapcsolása.\n"
-"A shaderek engedélyezve kell legyenek."
+"Az összes hang hangereje.\n"
+"A hangrendszer engedélyezésére van szükség hozzá."
#: src/settings_translation_file.cpp
msgid ""
@@ -6787,6 +7417,11 @@ msgid ""
"Has no effect on 3D fractals.\n"
"Range roughly -2 to 2."
msgstr ""
+"A 4D fraktál generált 3D szeletének W koordinátája.\n"
+"Meghatározza, hogy a 4D-s alakzat mely 3D-s szeletét kell generálni.\n"
+"Megváltoztatja a fraktál alakját.\n"
+"Nincs hatása a 3D fraktálokra.\n"
+"Nagyjából -2 és 2 közötti az értéktartománya."
#: src/settings_translation_file.cpp
msgid "Walking and flying speed, in nodes per second."
@@ -6837,11 +7472,18 @@ msgid "Waving plants"
msgstr "Hullámzó növények"
#: src/settings_translation_file.cpp
+msgid "Weblink color"
+msgstr "Internetes hivatkozások színe"
+
+#: 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 ""
+"Ha a gui_scaling_filter értéke igaz, minden GUI képet szoftveres\n"
+"szűrő fogja kezelni, de néhány kép közvetlenül a harverre\n"
+"generálódik (pl. a felszerelésben lévő blokkok textúrára renderelése)."
#: src/settings_translation_file.cpp
msgid ""
@@ -6850,6 +7492,10 @@ msgid ""
"to the old scaling method, for video drivers that don't\n"
"properly support downloading textures back from hardware."
msgstr ""
+"Ha a gui_scaling_filter_txr2img be van kapcsolva, ezeket a képeket\n"
+"a hardverről a szoftverbe másolja méretezésre. Ha ki van kapcsolva,\n"
+"a régi méretezési módszert használja, azoknál a videó drivereknél,\n"
+"amelyek nem megfelelően támogatják a textúra hardverről való letöltését."
#: src/settings_translation_file.cpp
msgid ""
@@ -6857,38 +7503,46 @@ msgid ""
"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.\n"
+"memory. Powers of 2 are recommended. This setting is ONLY applied if\n"
+"bilinear/trilinear/anisotropic filtering is enabled.\n"
"This is also used as the base node texture size for world-aligned\n"
"texture autoscaling."
msgstr ""
+"A bilineáris/trilineáris/anizotróp szűrők használatakor, a kis felbontású "
+"textúrák\n"
+"homályosak lehetnek, ezért automatikusan felskálázza őket legközelebbi\n"
+"szomszéd módszerrel, hogy megőrizze az éles pixeleket. Ez a beállítás "
+"meghatározza\n"
+"a minimális textúraméretet a felnagyított textúrákhoz; magasabb értéknél "
+"élesebb,\n"
+"de több memóriát igényel. 2 hatványait ajánlott használni. CSAK akkor "
+"érvényes ez a\n"
+"beállítás, ha a bilineáris/trilineáris/anizotróp szűrés engedélyezett.\n"
+"Ez egyben azon blokkok alap textúraméreteként is használatos, amelyeknél a "
+"világhoz\n"
+"igazítva kell méretezni a textúrát."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
-"Whether FreeType fonts are used, requires FreeType support to be compiled "
-"in.\n"
-"If disabled, bitmap and XML vectors fonts are used instead."
-msgstr ""
-"Használatban vannak-e freetype betűtípusok. Szükséges a beépített freetype "
-"támogatás."
-
-#: src/settings_translation_file.cpp
-msgid ""
-"Whether nametag backgrounds should be shown by default.\n"
+"Whether name tag backgrounds should be shown by default.\n"
"Mods may still set a background."
msgstr ""
+"Látszódjon-e a névcímkék háttere alapértelmezésként.\n"
+"A modok ettől még a beállíthatják a hátteret."
#: src/settings_translation_file.cpp
msgid "Whether node texture animations should be desynchronized per mapblock."
msgstr ""
+"Legyen-e független a blokkok textúraanimációinak időzítése az egyes "
+"térképblokkokban."
#: 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 ""
+"Lássák-e a játékosokat a kliensek mindenféle távolsági korlát nélkül.\n"
+"Elavult, használd a player_transfer_distance beállítást ehelyett."
#: src/settings_translation_file.cpp
msgid "Whether to allow players to damage and kill each other."
@@ -6913,6 +7567,10 @@ msgid ""
"In-game, you can toggle the mute state with the mute key or by using the\n"
"pause menu."
msgstr ""
+"Némítsuk-e le a hangokat. Bármikor visszakapcsolhatod a hangokat, kivéve,\n"
+"ha a hangrendszer le van tiltva (enable_sound=false).\n"
+"A játékon belül a némítás állapotát a némítás gombbal vagy a szünet\n"
+"menüben tudod beállítani."
#: src/settings_translation_file.cpp
msgid ""
@@ -6921,8 +7579,9 @@ msgstr ""
"A hibakereső információ megjelenítése (ugyanaz a hatás, ha F5-öt nyomunk)."
#: src/settings_translation_file.cpp
-msgid "Width component of the initial window size."
-msgstr "Kezdeti ablak szélessége."
+msgid "Width component of the initial window size. Ignored in fullscreen mode."
+msgstr ""
+"A kezdőablak szélessége. Teljes képernyős módban nem kerül figyelmbe vételre."
#: src/settings_translation_file.cpp
msgid "Width of the selection box lines around nodes."
@@ -6947,7 +7606,6 @@ msgstr ""
"Ez nem szükséges, ha a főmenüből indítják."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "World start time"
msgstr "Világ-kezdőidő"
@@ -6960,10 +7618,18 @@ msgid ""
"See also texture_min_size.\n"
"Warning: This option is EXPERIMENTAL!"
msgstr ""
+"A világhoz igazított textúrák több blokkra is ki kiterjedhetnek. A szerver\n"
+"azonban nem biztos, hogy az általad kívánt módon terjeszti ki azt, különösen,"
+"\n"
+"ha egyedi tervezésű textúracsomagról van szó; ezzel a beállítással a kliens\n"
+"megpróbálja automatikusan meghatározni a méretezést a textúra mérete alapján."
+"\n"
+"Lásd még texture_min_size.\n"
+"Figyelem: Ez KÃSÉRLETI beállítás!"
#: src/settings_translation_file.cpp
msgid "World-aligned textures mode"
-msgstr ""
+msgstr "Világhoz igazított textúrakezelési mód"
#: src/settings_translation_file.cpp
msgid "Y of flat ground."
@@ -6974,6 +7640,8 @@ msgid ""
"Y of mountain density gradient zero level. Used to shift mountains "
"vertically."
msgstr ""
+"A hegyek sűrűséggradiensének alapsíkjának Y koordinátája. A hegyek "
+"függőleges eltolásához használatos."
#: src/settings_translation_file.cpp
msgid "Y of upper limit of large caves."
@@ -6990,6 +7658,12 @@ msgid ""
"For a solid floatland layer, this controls the height of hills/mountains.\n"
"Must be less than or equal to half the distance between the Y limits."
msgstr ""
+"Az az Y irányú távolság, amely során a lebegő földek a maximális sűrűségtől "
+"kezdve teljesen elvékonyodnak.\n"
+"A vékonyítás ennél az Y határtól való távolságnál kezdőik.\n"
+"Egybefüggő lebegő föld rétegek esetén, ez a beállítás szabályozza a dombok/"
+"hegyek magasságát.\n"
+"Kisebbnek vagy egyenlőnek kell lennie az Y határok közötti távolság felénél."
#: src/settings_translation_file.cpp
msgid "Y-level of average terrain surface."
@@ -7012,34 +7686,22 @@ msgid "Y-level of seabed."
msgstr "Tengerfenék Y szintje."
#: src/settings_translation_file.cpp
-msgid ""
-"ZLib compression level to use when saving mapblocks to disk.\n"
-"-1 - Zlib's default compression level\n"
-"0 - no compresson, fastest\n"
-"9 - best compression, slowest\n"
-"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)"
-msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid ""
-"ZLib compression level to use when sending mapblocks to the client.\n"
-"-1 - Zlib's default compression level\n"
-"0 - no compresson, fastest\n"
-"9 - best compression, slowest\n"
-"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "cURL file download timeout"
msgstr "cURL fájlletöltés időkorlát"
#: src/settings_translation_file.cpp
+msgid "cURL interactive timeout"
+msgstr "cURL interaktív időtúllépés"
+
+#: src/settings_translation_file.cpp
msgid "cURL parallel limit"
msgstr "cURL párhuzamossági korlát"
-#: src/settings_translation_file.cpp
-msgid "cURL timeout"
-msgstr "cURL időkorlát"
+#~ msgid "- Creative Mode: "
+#~ msgstr "- Kreatív mód: "
+
+#~ msgid "- Damage: "
+#~ msgstr "- Sérülés: "
#~ msgid ""
#~ "0 = parallax occlusion with slope information (faster).\n"
@@ -7048,6 +7710,9 @@ msgstr "cURL időkorlát"
#~ "0 = parallax occlusion with slope information (gyorsabb).\n"
#~ "1 = relief mapping (lassabb, pontosabb)."
+#~ msgid "Address / Port"
+#~ msgstr "Cím / Port"
+
#~ msgid ""
#~ "Adjust the gamma encoding for the light tables. Higher numbers are "
#~ "brighter.\n"
@@ -7063,6 +7728,9 @@ msgstr "cURL időkorlát"
#~ msgid "Back"
#~ msgstr "Vissza"
+#~ msgid "Bits per pixel (aka color depth) in fullscreen mode."
+#~ msgstr "Bit/pixel (vagyis színmélység) teljes képernyős módban."
+
#~ msgid "Bump Mapping"
#~ msgstr "Bump mapping"
@@ -7104,13 +7772,26 @@ msgstr "cURL időkorlát"
#~ "A járatok szélességét határozza meg, alacsonyabb érték szélesebb "
#~ "járatokat hoz létre."
+#~ msgid "Credits"
+#~ msgstr "Köszönetnyilvánítás"
+
#~ msgid "Crosshair color (R,G,B)."
#~ msgstr "Célkereszt színe (R,G,B)."
+#~ msgid "Damage enabled"
+#~ msgstr "Sérülés engedélyezve"
+
#~ msgid "Darkness sharpness"
#~ msgstr "a sötétség élessége"
#~ msgid ""
+#~ "Default timeout for cURL, stated in milliseconds.\n"
+#~ "Only has an effect if compiled with cURL."
+#~ msgstr ""
+#~ "A cURL alapértelmezett időkorlátja ezredmásodpercekben.\n"
+#~ "Csak akkor van hatása, ha a program cURL-lel lett lefordítva."
+
+#~ msgid ""
#~ "Defines areas of floatland smooth terrain.\n"
#~ "Smooth floatlands occur when noise > 0."
#~ msgstr ""
@@ -7150,6 +7831,15 @@ msgstr "cURL időkorlát"
#~ msgid "FPS in pause menu"
#~ msgstr "FPS a szünet menüben"
+#~ msgid "Fallback font shadow"
+#~ msgstr "Tartalék betűtípus árnyéka"
+
+#~ msgid "Fallback font shadow alpha"
+#~ msgstr "Tartalék betűtípus árnyék átlátszósága"
+
+#~ msgid "Fallback font size"
+#~ msgstr "Tartalék betűtípus mérete"
+
#, fuzzy
#~ msgid "Floatland base height noise"
#~ msgstr "A lebegő hegyek alapmagassága"
@@ -7161,6 +7851,12 @@ msgstr "cURL időkorlát"
#~ msgid "Font shadow alpha (opaqueness, between 0 and 255)."
#~ msgstr "Betűtípus árnyék alfa (átlátszatlanság, 0 és 255 között)."
+#~ msgid "FreeType fonts"
+#~ msgstr "FreeType betűtípusok"
+
+#~ msgid "Full screen BPP"
+#~ msgstr "Teljes képernyő BPP"
+
#~ msgid "Gamma"
#~ msgstr "Gamma"
@@ -7170,9 +7866,15 @@ msgstr "cURL időkorlát"
#~ msgid "Generate normalmaps"
#~ msgstr "Normálfelületek generálása"
+#~ msgid "High-precision FPU"
+#~ msgstr "Nagy pontosságú FPU"
+
#~ msgid "IPv6 support."
#~ msgstr "IPv6 támogatás."
+#~ msgid "Install: file: \"$1\""
+#~ msgstr "Fájl telepítése: \"$1\""
+
#, fuzzy
#~ msgid "Lava depth"
#~ msgstr "Nagy barlang mélység"
@@ -7187,6 +7889,11 @@ msgstr "cURL időkorlát"
#~ msgid "Main menu style"
#~ msgstr "Főmenü stílusa"
+#~ msgid "Makes DirectX work with LuaJIT. Disable if it causes troubles."
+#~ msgstr ""
+#~ "Lehetővé teszi, hogy a DirectX működjön a LuaJIT-tel. Tiltsd le, ha "
+#~ "problémákat okoz."
+
#~ msgid "Minimap in radar mode, Zoom x2"
#~ msgstr "Kistérkép radar módban x2"
@@ -7199,6 +7906,9 @@ msgstr "cURL időkorlát"
#~ msgid "Minimap in surface mode, Zoom x4"
#~ msgstr "Kistérkép terület módban x4"
+#~ msgid "Name / Password"
+#~ msgstr "Név / Jelszó"
+
#~ msgid "Name/Password"
#~ msgstr "Név/jelszó"
@@ -7226,6 +7936,9 @@ msgstr "cURL időkorlát"
#~ msgid "Path to save screenshots at."
#~ msgstr "Képernyőmentések mappája."
+#~ msgid "PvP enabled"
+#~ msgstr "PvP engedélyezve"
+
#~ msgid "Reset singleplayer world"
#~ msgstr "Egyjátékos világ visszaállítása"
@@ -7236,6 +7949,19 @@ msgstr "cURL időkorlát"
#~ msgid "Shadow limit"
#~ msgstr "Térképblokk korlát"
+#~ msgid ""
+#~ "Shadow offset (in pixels) of the fallback font. If 0, then shadow will "
+#~ "not be drawn."
+#~ msgstr ""
+#~ "Tartalék betűtípus árnyékának eltolása. Ha 0, akkor nem lesz árnyék "
+#~ "rajzolva."
+
+#~ msgid "Special"
+#~ msgstr "Különleges"
+
+#~ msgid "Special key"
+#~ msgstr "Különleges gomb"
+
#~ msgid "Start Singleplayer"
#~ msgstr "Egyjátékos mód indítása"
@@ -7245,6 +7971,9 @@ msgstr "cURL időkorlát"
#~ msgid "This font will be used for certain languages."
#~ msgstr "Ezt a betűtípust bizonyos nyelvek használják."
+#~ msgid "To enable shaders the OpenGL driver needs to be used."
+#~ msgstr "Az árnyalók engedélyezéséhez OpenGL driver használata szükséges."
+
#~ msgid "Toggle Cinematic"
#~ msgstr "Váltás „mozi†módba"
@@ -7257,5 +7986,21 @@ msgstr "cURL időkorlát"
#~ msgid "Waving water"
#~ msgstr "Hullámzó víz"
+#~ msgid ""
+#~ "Whether FreeType fonts are used, requires FreeType support to be compiled "
+#~ "in.\n"
+#~ "If disabled, bitmap and XML vectors fonts are used instead."
+#~ msgstr ""
+#~ "Használhatók-e FreeType betűtípusok. Szükséges a beépített FreeType "
+#~ "támogatás.\n"
+#~ "Ha ki van kapcsolva, bittérképes és XML vektoros betűtípusok lesznek "
+#~ "használva helyette."
+
#~ msgid "Yes"
#~ msgstr "Igen"
+
+#~ msgid "You died."
+#~ msgstr "Meghaltál."
+
+#~ msgid "needs_fallback_font"
+#~ msgstr "no"
diff --git a/po/id/minetest.po b/po/id/minetest.po
index 5f62541b5..82f1da18f 100644
--- a/po/id/minetest.po
+++ b/po/id/minetest.po
@@ -2,9 +2,10 @@ msgid ""
msgstr ""
"Project-Id-Version: Indonesian (Minetest)\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-02-23 19:03+0100\n"
-"PO-Revision-Date: 2021-02-23 15:50+0000\n"
-"Last-Translator: Reza Almanda <rezaalmanda27@gmail.com>\n"
+"POT-Creation-Date: 2022-01-25 23:19+0100\n"
+"PO-Revision-Date: 2022-01-10 23:53+0000\n"
+"Last-Translator: Muhammad Rifqi Priyo Susanto "
+"<muhammadrifqipriyosusanto@gmail.com>\n"
"Language-Team: Indonesian <https://hosted.weblate.org/projects/minetest/"
"minetest/id/>\n"
"Language: id\n"
@@ -12,7 +13,43 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
-"X-Generator: Weblate 4.5\n"
+"X-Generator: Weblate 4.10.1\n"
+
+#: builtin/client/chatcommands.lua
+msgid "Clear the out chat queue"
+msgstr "Bersihkan antrean obrolan keluar"
+
+#: builtin/client/chatcommands.lua
+msgid "Empty command."
+msgstr "Perintah kosong."
+
+#: builtin/client/chatcommands.lua
+msgid "Exit to main menu"
+msgstr "Kembali ke menu utama"
+
+#: builtin/client/chatcommands.lua
+msgid "Invalid command: "
+msgstr "Perintah tidak sah "
+
+#: builtin/client/chatcommands.lua
+msgid "Issued command: "
+msgstr "Perintah yang dikeluarkan: "
+
+#: builtin/client/chatcommands.lua
+msgid "List online players"
+msgstr "Daftar pemain daring"
+
+#: builtin/client/chatcommands.lua
+msgid "Online players: "
+msgstr "Pemain daring: "
+
+#: builtin/client/chatcommands.lua
+msgid "The out chat queue is now empty."
+msgstr "Antran obrolan keluar sudah dibersihkan."
+
+#: builtin/client/chatcommands.lua
+msgid "This command is disabled by server."
+msgstr "Perintah ini dinonaktifkan oleh server."
#: builtin/client/death_formspec.lua src/client/game.cpp
msgid "Respawn"
@@ -22,11 +59,42 @@ msgstr "Bangkit kembali"
msgid "You died"
msgstr "Anda mati"
+#: builtin/common/chatcommands.lua
+msgid "Available commands:"
+msgstr "Perintah yang ada:"
+
+#: builtin/common/chatcommands.lua
+msgid "Available commands: "
+msgstr "Perintah yang ada: "
+
+#: builtin/common/chatcommands.lua
+msgid "Command not available: "
+msgstr "Perintah tidak tersedia: "
+
+#: builtin/common/chatcommands.lua
+msgid "Get help for commands"
+msgstr "Dapatkan bantuan untuk perintah-perintah"
+
+#: builtin/common/chatcommands.lua
+msgid ""
+"Use '.help <cmd>' to get more information, or '.help all' to list everything."
+msgstr ""
+"Pakai '.help <cmd>' untuk mendapatkan informasi lanjut atau '.help all' "
+"untuk menampilkan semuanya."
+
+#: builtin/common/chatcommands.lua
+msgid "[all | <cmd>]"
+msgstr "[semua | <cmd>]"
+
#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp
msgid "OK"
msgstr "Oke"
#: builtin/fstk/ui.lua
+msgid "<none available>"
+msgstr "<tiada yang tersedia>"
+
+#: builtin/fstk/ui.lua
msgid "An error occurred in a Lua script:"
msgstr "Suatu galat terjadi pada suatu skrip Lua:"
@@ -229,6 +297,10 @@ msgid "Install missing dependencies"
msgstr "Pasang dependensi yang belum ada"
#: builtin/mainmenu/dlg_contentstore.lua
+msgid "Install: Unsupported file type or broken archive"
+msgstr "Pemasangan: Tipe berkas tidak didukung atau arsip rusak"
+
+#: builtin/mainmenu/dlg_contentstore.lua
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Mods"
msgstr "Mod"
@@ -532,7 +604,7 @@ msgstr "< Halaman pengaturan"
msgid "Browse"
msgstr "Jelajahi"
-#: builtin/mainmenu/dlg_settings_advanced.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_settings.lua
msgid "Disabled"
msgstr "Dimatikan"
@@ -557,8 +629,8 @@ msgid "Offset"
msgstr "Pergeseran"
#: builtin/mainmenu/dlg_settings_advanced.lua
-msgid "Persistance"
-msgstr "Persistensi"
+msgid "Persistence"
+msgstr "Kegigihan"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Please enter a valid integer."
@@ -576,7 +648,7 @@ msgstr "Atur ke bawaan"
msgid "Scale"
msgstr "Skala"
-#: builtin/mainmenu/dlg_settings_advanced.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_online.lua
msgid "Search"
msgstr "Cari"
@@ -670,14 +742,6 @@ msgstr ""
"$1"
#: builtin/mainmenu/pkgmgr.lua
-msgid "Install: Unsupported file type \"$1\" or broken archive"
-msgstr "Pemasangan: Tipe berkas \"$1\" tidak didukung atau arsip rusak"
-
-#: builtin/mainmenu/pkgmgr.lua
-msgid "Install: file: \"$1\""
-msgstr "Pemasangan: berkas: \"$1\""
-
-#: builtin/mainmenu/pkgmgr.lua
msgid "Unable to find a valid mod or modpack"
msgstr "Tidak dapat mencari mod atau paket mod yang sah"
@@ -702,15 +766,50 @@ msgid "Loading..."
msgstr "Memuat..."
#: builtin/mainmenu/serverlistmgr.lua
-#, fuzzy
msgid "Public server list is disabled"
-msgstr "Skrip sisi klien dimatikan"
+msgstr "Daftar server publik dimatikan"
#: builtin/mainmenu/serverlistmgr.lua
msgid "Try reenabling public serverlist and check your internet connection."
msgstr ""
"Coba nyalakan ulang daftar server publik dan periksa sambungan internet Anda."
+#: builtin/mainmenu/tab_about.lua
+msgid "About"
+msgstr "Tentang"
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Active Contributors"
+msgstr "Penyumbang Aktif"
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Active renderer:"
+msgstr "Penggambar aktif:"
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Core Developers"
+msgstr "Pengembang Inti"
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Open User Data Directory"
+msgstr "Pilih direktori"
+
+#: builtin/mainmenu/tab_about.lua
+msgid ""
+"Opens the directory that contains user-provided worlds, games, mods,\n"
+"and texture packs in a file manager / explorer."
+msgstr ""
+"Membuka direktori yang berisi dunia, permainan, mod, dan paket tekstur\n"
+"dari pengguna dalam pengelola/penjelajah berkas."
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Previous Contributors"
+msgstr "Penyumbang Sebelumnya"
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Previous Core Developers"
+msgstr "Pengembang Inti Sebelumnya"
+
#: builtin/mainmenu/tab_content.lua
msgid "Browse online content"
msgstr "Jelajahi konten daring"
@@ -751,38 +850,6 @@ msgstr "Copot paket"
msgid "Use Texture Pack"
msgstr "Gunakan paket tekstur"
-#: builtin/mainmenu/tab_credits.lua
-msgid "Active Contributors"
-msgstr "Penyumbang Aktif"
-
-#: 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 "Open User Data Directory"
-msgstr "Pilih direktori"
-
-#: builtin/mainmenu/tab_credits.lua
-msgid ""
-"Opens the directory that contains user-provided worlds, games, mods,\n"
-"and texture packs in a file manager / explorer."
-msgstr ""
-"Membuka direktori yang berisi dunia, permainan, mod, dan paket tekstur\n"
-"dari pengguna dalam pengelola/penjelajah berkas."
-
-#: builtin/mainmenu/tab_credits.lua
-msgid "Previous Contributors"
-msgstr "Penyumbang Sebelumnya"
-
-#: builtin/mainmenu/tab_credits.lua
-msgid "Previous Core Developers"
-msgstr "Pengembang Inti Sebelumnya"
-
#: builtin/mainmenu/tab_local.lua
msgid "Announce Server"
msgstr "Umumkan Server"
@@ -811,7 +878,7 @@ msgstr "Host Server"
msgid "Install games from ContentDB"
msgstr "Pasang permainan dari ContentDB"
-#: builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
msgid "Name"
msgstr "Nama"
@@ -823,7 +890,7 @@ msgstr "Baru"
msgid "No world created or selected!"
msgstr "Tiada dunia yang dibuat atau dipilih!"
-#: builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
msgid "Password"
msgstr "Kata sandi"
@@ -831,7 +898,7 @@ msgstr "Kata sandi"
msgid "Play Game"
msgstr "Mainkan Permainan"
-#: builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
msgid "Port"
msgstr "Porta"
@@ -852,8 +919,12 @@ msgid "Start Game"
msgstr "Mulai Permainan"
#: builtin/mainmenu/tab_online.lua
-msgid "Address / Port"
-msgstr "Alamat/Porta"
+msgid "Address"
+msgstr "Alamat"
+
+#: builtin/mainmenu/tab_online.lua src/client/keycode.cpp
+msgid "Clear"
+msgstr "Clear"
#: builtin/mainmenu/tab_online.lua
msgid "Connect"
@@ -863,34 +934,42 @@ msgstr "Sambung"
msgid "Creative mode"
msgstr "Mode kreatif"
+#. ~ PvP = Player versus Player
#: builtin/mainmenu/tab_online.lua
-msgid "Damage enabled"
-msgstr "Kerusakan dinyalakan"
+msgid "Damage / PvP"
+msgstr "Kerusakan/PvP"
#: builtin/mainmenu/tab_online.lua
msgid "Del. Favorite"
msgstr "Hapus favorit"
#: builtin/mainmenu/tab_online.lua
-msgid "Favorite"
+msgid "Favorites"
msgstr "Favorit"
#: builtin/mainmenu/tab_online.lua
-msgid "Join Game"
-msgstr "Gabung Permainan"
+msgid "Incompatible Servers"
+msgstr "Server Tidak Kompatibel"
#: builtin/mainmenu/tab_online.lua
-msgid "Name / Password"
-msgstr "Nama/Kata Sandi"
+msgid "Join Game"
+msgstr "Gabung Permainan"
#: builtin/mainmenu/tab_online.lua
msgid "Ping"
msgstr "Ping"
-#. ~ PvP = Player versus Player
#: builtin/mainmenu/tab_online.lua
-msgid "PvP enabled"
-msgstr "PvP dinyalakan"
+msgid "Public Servers"
+msgstr "Server Publik"
+
+#: builtin/mainmenu/tab_online.lua
+msgid "Refresh"
+msgstr "Segarkan"
+
+#: builtin/mainmenu/tab_online.lua
+msgid "Server Description"
+msgstr "Keterangan Server"
#: builtin/mainmenu/tab_settings.lua
msgid "2x"
@@ -932,11 +1011,31 @@ msgstr "Ubah Tombol"
msgid "Connected Glass"
msgstr "Kaca Tersambung"
+#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
+msgid "Dynamic shadows"
+msgstr "Bayangan dinamis"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Dynamic shadows: "
+msgstr "Bayangan dinamis: "
+
#: builtin/mainmenu/tab_settings.lua
msgid "Fancy Leaves"
msgstr "Daun Megah"
#: builtin/mainmenu/tab_settings.lua
+msgid "High"
+msgstr "Tinggi"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Low"
+msgstr "Rendah"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Medium"
+msgstr "Menengah"
+
+#: builtin/mainmenu/tab_settings.lua
msgid "Mipmap"
msgstr "Mipmap"
@@ -962,7 +1061,7 @@ msgstr "Garis Bentuk Nodus"
#: builtin/mainmenu/tab_settings.lua
msgid "None"
-msgstr "Tidak ada"
+msgstr "Tidak Ada"
#: builtin/mainmenu/tab_settings.lua
msgid "Opaque Leaves"
@@ -1008,10 +1107,6 @@ msgstr "Pencahayaan Halus"
msgid "Texturing:"
msgstr "Peneksturan:"
-#: builtin/mainmenu/tab_settings.lua
-msgid "To enable shaders the OpenGL driver needs to be used."
-msgstr "Untuk menggunakan shader, pengandar OpenGL harus digunakan."
-
#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
msgid "Tone Mapping"
msgstr "Pemetaan Nada"
@@ -1025,6 +1120,14 @@ msgid "Trilinear Filter"
msgstr "Filter Trilinear"
#: builtin/mainmenu/tab_settings.lua
+msgid "Ultra High"
+msgstr "Ultratinggi"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Very Low"
+msgstr "Sangat Rendah"
+
+#: builtin/mainmenu/tab_settings.lua
msgid "Waving Leaves"
msgstr "Daun Melambai"
@@ -1036,7 +1139,7 @@ msgstr "Air Berombak"
msgid "Waving Plants"
msgstr "Tanaman Berayun"
-#: src/client/client.cpp
+#: src/client/client.cpp src/client/game.cpp
msgid "Connection timed out."
msgstr "Sambungan kehabisan waktu."
@@ -1065,8 +1168,8 @@ msgid "Connection error (timed out?)"
msgstr "Galat sambungan (terlalu lama?)"
#: src/client/clientlauncher.cpp
-msgid "Could not find or load game \""
-msgstr "Tidak dapat mencari atau memuat permainan \""
+msgid "Could not find or load game: "
+msgstr "Tidak dapat mencari atau memuat permainan: "
#: src/client/clientlauncher.cpp
msgid "Invalid gamespec."
@@ -1096,18 +1199,6 @@ msgstr "Berkas kata sandi yang diberikan gagal dibuka: "
msgid "Provided world path doesn't exist: "
msgstr "Jalur dunia yang diberikan tidak ada: "
-#. ~ DO NOT TRANSLATE THIS LITERALLY!
-#. This is a special string. Put either "no" or "yes"
-#. into the translation field (literally).
-#. Choose "yes" if the language requires use of the fallback
-#. font, "no" otherwise.
-#. The fallback font is (normally) required for languages with
-#. non-Latin script, like Chinese.
-#. When in doubt, test your translation.
-#: src/client/fontengine.cpp
-msgid "needs_fallback_font"
-msgstr "no"
-
#: src/client/game.cpp
msgid ""
"\n"
@@ -1121,14 +1212,6 @@ msgid "- Address: "
msgstr "- Alamat: "
#: src/client/game.cpp
-msgid "- Creative Mode: "
-msgstr "- Mode Kreatif: "
-
-#: src/client/game.cpp
-msgid "- Damage: "
-msgstr "- Kerusakan: "
-
-#: src/client/game.cpp
msgid "- Mode: "
msgstr "- Mode: "
@@ -1150,6 +1233,15 @@ msgid "- Server Name: "
msgstr "- Nama Server: "
#: src/client/game.cpp
+msgid "A serialization error occurred:"
+msgstr "Sebuah galat serialisasi terjadi:"
+
+#: src/client/game.cpp
+#, c-format
+msgid "Access denied. Reason: %s"
+msgstr "Akses ditolak. Alasan: %s"
+
+#: src/client/game.cpp
msgid "Automatic forward disabled"
msgstr "Maju otomatis dimatikan"
@@ -1158,6 +1250,22 @@ msgid "Automatic forward enabled"
msgstr "Maju otomatis dinyalakan"
#: src/client/game.cpp
+msgid "Block bounds hidden"
+msgstr "Batasan blok disembunyikan"
+
+#: src/client/game.cpp
+msgid "Block bounds shown for all blocks"
+msgstr "Batasan blok ditampilkan untuk semua blok"
+
+#: src/client/game.cpp
+msgid "Block bounds shown for current block"
+msgstr "Batasan blok ditampilkan untuk blok saat ini"
+
+#: src/client/game.cpp
+msgid "Block bounds shown for nearby blocks"
+msgstr "Batasan blok ditampilkan untuk blok sekitar"
+
+#: src/client/game.cpp
msgid "Camera update disabled"
msgstr "Pembaruan kamera dimatikan"
@@ -1166,8 +1274,12 @@ msgid "Camera update enabled"
msgstr "Pembaruan kamera dinyalakan"
#: src/client/game.cpp
+msgid "Can't show block bounds (need 'basic_debug' privilege)"
+msgstr "Tidak bisa menampilkan batasan blok (butuh hak 'basic_debug')"
+
+#: src/client/game.cpp
msgid "Change Password"
-msgstr "Ganti kata sandi"
+msgstr "Ganti Kata Sandi"
#: src/client/game.cpp
msgid "Cinematic mode disabled"
@@ -1178,6 +1290,10 @@ msgid "Cinematic mode enabled"
msgstr "Mode sinema dinyalakan"
#: src/client/game.cpp
+msgid "Client disconnected"
+msgstr "Klien terputus"
+
+#: src/client/game.cpp
msgid "Client side scripting is disabled"
msgstr "Skrip sisi klien dimatikan"
@@ -1186,6 +1302,10 @@ msgid "Connecting to server..."
msgstr "Menyambung ke server..."
#: src/client/game.cpp
+msgid "Connection failed for unknown reason"
+msgstr "Sambungan gagal karena sebab yang tak diketahui"
+
+#: src/client/game.cpp
msgid "Continue"
msgstr "Lanjutkan"
@@ -1223,6 +1343,11 @@ msgstr ""
"- %s: obrolan\n"
#: src/client/game.cpp
+#, c-format
+msgid "Couldn't resolve address: %s"
+msgstr "Tidak bisa menyelesaikan alamat: %s"
+
+#: src/client/game.cpp
msgid "Creating client..."
msgstr "Membuat klien..."
@@ -1351,6 +1476,10 @@ msgid "Minimap currently disabled by game or mod"
msgstr "Peta mini sedang dilarang oleh permainan atau mod"
#: src/client/game.cpp
+msgid "Multiplayer"
+msgstr "Multipemain"
+
+#: src/client/game.cpp
msgid "Noclip mode disabled"
msgstr "Mode tembus blok dimatikan"
@@ -1424,6 +1553,21 @@ msgstr "Suara dibunyikan"
#: src/client/game.cpp
#, c-format
+msgid "The server is probably running a different version of %s."
+msgstr "Server ini mungkin menjalankan versi %s yang berbeda."
+
+#: src/client/game.cpp
+#, c-format
+msgid "Unable to connect to %s because IPv6 is disabled"
+msgstr "Tidak bisa menyambung ke %s karena IPv6 dimatikan"
+
+#: src/client/game.cpp
+#, c-format
+msgid "Unable to listen on %s because IPv6 is disabled"
+msgstr "Tidak bisa mendengarkan %s karena IPv6 dimatikan"
+
+#: src/client/game.cpp
+#, c-format
msgid "Viewing range changed to %d"
msgstr "Jarak pandang diubah menjadi %d"
@@ -1492,10 +1636,6 @@ msgid "Caps Lock"
msgstr "Caps Lock"
#: src/client/keycode.cpp
-msgid "Clear"
-msgstr "Clear"
-
-#: src/client/keycode.cpp
msgid "Control"
msgstr "Control"
@@ -1517,7 +1657,7 @@ msgstr "Execute"
#: src/client/keycode.cpp
msgid "Help"
-msgstr "Help"
+msgstr "Bantuan"
#: src/client/keycode.cpp
msgid "Home"
@@ -1760,6 +1900,14 @@ msgstr "Peta mini mode permukaan, perbesaran %dx"
msgid "Minimap in texture mode"
msgstr "Peta mini mode tekstur"
+#: src/gui/guiChatConsole.cpp
+msgid "Failed to open webpage"
+msgstr "Gagal membuka laman web"
+
+#: src/gui/guiChatConsole.cpp
+msgid "Opening webpage"
+msgstr "Membuka laman web"
+
#: src/gui/guiConfirmRegistration.cpp src/gui/guiPasswordChange.cpp
msgid "Passwords do not match!"
msgstr "Kata sandi tidak cocok!"
@@ -1788,8 +1936,8 @@ msgid "Proceed"
msgstr "Lanjut"
#: src/gui/guiKeyChangeMenu.cpp
-msgid "\"Special\" = climb down"
-msgstr "\"Spesial\" = turun"
+msgid "\"Aux1\" = climb down"
+msgstr "\"Aux1\" = turun"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Autoforward"
@@ -1800,10 +1948,18 @@ msgid "Automatic jumping"
msgstr "Lompat otomatis"
#: src/gui/guiKeyChangeMenu.cpp
+msgid "Aux1"
+msgstr "Aux1"
+
+#: src/gui/guiKeyChangeMenu.cpp
msgid "Backward"
msgstr "Mundur"
#: src/gui/guiKeyChangeMenu.cpp
+msgid "Block bounds"
+msgstr "Batasan blok"
+
+#: src/gui/guiKeyChangeMenu.cpp
msgid "Change camera"
msgstr "Ubah kamera"
@@ -1894,10 +2050,6 @@ msgid "Sneak"
msgstr "Menyelinap"
#: src/gui/guiKeyChangeMenu.cpp
-msgid "Special"
-msgstr "Spesial"
-
-#: src/gui/guiKeyChangeMenu.cpp
msgid "Toggle HUD"
msgstr "Alih HUD"
@@ -1958,8 +2110,9 @@ msgid "Muted"
msgstr "Dibisukan"
#: src/gui/guiVolumeChange.cpp
-msgid "Sound Volume: "
-msgstr "Volume Suara: "
+#, c-format
+msgid "Sound Volume: %d%%"
+msgstr "Volume Suara: %d%%"
#. ~ Imperative, as in "Enter/type in text".
#. Don't forget the space.
@@ -1984,12 +2137,12 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"(Android) Use virtual joystick to trigger \"aux\" button.\n"
-"If enabled, virtual joystick will also tap \"aux\" button when out of main "
+"(Android) Use virtual joystick to trigger \"Aux1\" button.\n"
+"If enabled, virtual joystick will also tap \"Aux1\" button when out of main "
"circle."
msgstr ""
-"(Android) Gunakan joystick virtual untuk mengetuk tombol \"aux\".\n"
-"Jika dinyalakan, joystick virtual juga akan mengetuk tombol \"aux\" saat "
+"(Android) Gunakan joystick virtual untuk mengetuk tombol \"Aux1\".\n"
+"Jika dinyalakan, joystick virtual juga akan mengetuk tombol \"Aux1\" saat "
"berada di luar lingkaran utama."
#: src/settings_translation_file.cpp
@@ -2211,6 +2364,12 @@ msgstr ""
"layar 4K."
#: src/settings_translation_file.cpp
+msgid "Adjust the detected display density, used for scaling UI elements."
+msgstr ""
+"Menyesuaikan kepadatan tampilan yang dideteksi, dipakai untuk mengatur skala "
+"elemen UI."
+
+#: src/settings_translation_file.cpp
#, c-format
msgid ""
"Adjusts the density of the floatland layer.\n"
@@ -2343,6 +2502,14 @@ msgid "Autoscaling mode"
msgstr "Mode penyekalaan otomatis"
#: src/settings_translation_file.cpp
+msgid "Aux1 key"
+msgstr "Tombol Aux1"
+
+#: src/settings_translation_file.cpp
+msgid "Aux1 key for climbing/descending"
+msgstr "Tombol Aux1 untuk memanjat/turun"
+
+#: src/settings_translation_file.cpp
msgid "Backward key"
msgstr "Tombol mundur"
@@ -2387,10 +2554,6 @@ msgid "Biome noise"
msgstr "Noise bioma"
#: src/settings_translation_file.cpp
-msgid "Bits per pixel (aka color depth) in fullscreen mode."
-msgstr "Bit per piksel (alias kedalaman warna) dalam mode layar penuh."
-
-#: src/settings_translation_file.cpp
msgid "Block send optimize distance"
msgstr "Jarak optimasi pengiriman blok"
@@ -2495,6 +2658,14 @@ msgstr ""
"Nilai 0.0 adalah minimum, 1.0 adalah maksimum."
#: src/settings_translation_file.cpp
+msgid "Chat command time message threshold"
+msgstr "Ambang batas waktu pesan perintah obrolan"
+
+#: src/settings_translation_file.cpp
+msgid "Chat commands"
+msgstr "Perintah obrolan"
+
+#: src/settings_translation_file.cpp
msgid "Chat font size"
msgstr "Ukuran fon obrolan"
@@ -2527,8 +2698,8 @@ msgid "Chat toggle key"
msgstr "Tombol beralih obrolan"
#: src/settings_translation_file.cpp
-msgid "Chatcommands"
-msgstr "Perintah obrolan"
+msgid "Chat weblinks"
+msgstr "Tautan web obrolan"
#: src/settings_translation_file.cpp
msgid "Chunk size"
@@ -2547,6 +2718,14 @@ msgid "Clean transparent textures"
msgstr "Bersihkan tekstur transparan"
#: src/settings_translation_file.cpp
+msgid ""
+"Clickable weblinks (middle-click or Ctrl+left-click) enabled in chat console "
+"output."
+msgstr ""
+"Tautan web yang bisa diklik (klik-tengah atau Ctrl+klik-kiri) dibolehkan "
+"dalam konsol obrolan."
+
+#: src/settings_translation_file.cpp
msgid "Client"
msgstr "Klien"
@@ -2591,6 +2770,10 @@ msgid "Colored fog"
msgstr "Kabut berwarna"
#: src/settings_translation_file.cpp
+msgid "Colored shadows"
+msgstr "Bayangan berwarna"
+
+#: src/settings_translation_file.cpp
msgid ""
"Comma-separated list of flags to hide in the content repository.\n"
"\"nonfree\" can be used to hide packages which do not qualify as 'free "
@@ -2632,6 +2815,30 @@ msgid "Command key"
msgstr "Tombol perintah"
#: src/settings_translation_file.cpp
+msgid ""
+"Compression level to use when saving mapblocks to disk.\n"
+"-1 - use default compression level\n"
+"0 - least compression, fastest\n"
+"9 - best compression, slowest"
+msgstr ""
+"Tingkat kompresi saat menyimpan blok peta ke diska.\n"
+"-1 - tingkat kompresi bawaan\n"
+"0 - kompresi sedikit, tercepat\n"
+"9 - kompresi terbaik, terlambat"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Compression level to use when sending mapblocks to the client.\n"
+"-1 - use default compression level\n"
+"0 - least compression, fastest\n"
+"9 - best compression, slowest"
+msgstr ""
+"Tingkat kompresi saat mengirimkan blok peta kepada klien.\n"
+"-1 - tingkat kompresi bawaan\n"
+"0 - kompresi sedikit, tercepat\n"
+"9 - kompresi terbaik, terlambat"
+
+#: src/settings_translation_file.cpp
msgid "Connect glass"
msgstr "Sambungkan kaca"
@@ -2731,10 +2938,10 @@ msgstr "Keburaman crosshair"
#: src/settings_translation_file.cpp
msgid ""
"Crosshair alpha (opaqueness, between 0 and 255).\n"
-"Also controls the object crosshair color"
+"This also applies to the object crosshair."
msgstr ""
"Keburaman crosshair (keopakan, dari 0 sampai 255).\n"
-"Juga mengatur warna crosshair objek"
+"Juga mengatur warna crosshair objek."
#: src/settings_translation_file.cpp
msgid "Crosshair color"
@@ -2814,11 +3021,13 @@ msgstr "Ukuran tumpukan bawaan"
#: src/settings_translation_file.cpp
msgid ""
-"Default timeout for cURL, stated in milliseconds.\n"
-"Only has an effect if compiled with cURL."
+"Define shadow filtering quality.\n"
+"This simulates the soft shadows effect by applying a PCF or Poisson disk\n"
+"but also uses more resources."
msgstr ""
-"Batas waktu bawaan untuk cURL, dalam milidetik.\n"
-"Hanya berlaku jika dikompilasi dengan cURL."
+"Mengatur kualitas filter bayangan.\n"
+"Ini menyimulasikan efek bayangan halus dengan menerapkan PCF atau\n"
+"diska Poisson, tetapi menggunakan sumber daya lebih banyak."
#: src/settings_translation_file.cpp
msgid "Defines areas where trees have apples."
@@ -2944,6 +3153,10 @@ msgid "Disallow empty passwords"
msgstr "Larang kata sandi kosong"
#: src/settings_translation_file.cpp
+msgid "Display Density Scaling Factor"
+msgstr "Faktor Skala Kepadatan Tampilan"
+
+#: src/settings_translation_file.cpp
msgid "Domain name of server, to be displayed in the serverlist."
msgstr "Nama domain dari server yang akan ditampilkan pada daftar server."
@@ -2992,13 +3205,32 @@ msgstr ""
"Dukungan ini masih tahap percobaan dan API dapat berubah."
#: src/settings_translation_file.cpp
+msgid ""
+"Enable Poisson disk filtering.\n"
+"On true uses Poisson disk to make \"soft shadows\". Otherwise uses PCF "
+"filtering."
+msgstr ""
+"Menyalakan filter diska Poisson.\n"
+"Nilai true berarti memakai diska Poisson untuk \"bayangan halus\". Nilai "
+"lain berarti\n"
+"memakai filter PCF."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable colored shadows.\n"
+"On true translucent nodes cast colored shadows. This is expensive."
+msgstr ""
+"Menyalakan bayangan berwarna.\n"
+"Nilai true berarti nodus agak tembus pandang memiliki bayangan berwarna.\n"
+"Ini sangat membutuhkan sumber daya besar."
+
+#: src/settings_translation_file.cpp
msgid "Enable console window"
msgstr "Gunakan jendela konsol"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Enable creative mode for all players"
-msgstr "Gunakan mode kreatif pada peta baru."
+msgstr "Nyalakan mode kreatif untuk semua pemain"
#: src/settings_translation_file.cpp
msgid "Enable joysticks"
@@ -3127,6 +3359,12 @@ msgstr ""
"Perubahan pengaturan ini membutuhkan mulai ulang."
#: src/settings_translation_file.cpp
+msgid ""
+"Enables tradeoffs that reduce CPU load or increase rendering performance\n"
+"at the expense of minor visual glitches that do not impact game playability."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Engine profiling data print interval"
msgstr "Jarak pencetakan data profiling mesin"
@@ -3171,18 +3409,6 @@ msgid "Fallback font path"
msgstr "Jalur fon cadangan"
#: src/settings_translation_file.cpp
-msgid "Fallback font shadow"
-msgstr "Bayangan fon cadangan"
-
-#: src/settings_translation_file.cpp
-msgid "Fallback font shadow alpha"
-msgstr "Keburaman bayangan fon cadangan"
-
-#: src/settings_translation_file.cpp
-msgid "Fallback font size"
-msgstr "Ukuran fon cadangan"
-
-#: src/settings_translation_file.cpp
msgid "Fast key"
msgstr "Tombol gerak cepat"
@@ -3200,10 +3426,10 @@ msgstr "Gerak cepat"
#: src/settings_translation_file.cpp
msgid ""
-"Fast movement (via the \"special\" key).\n"
+"Fast movement (via the \"Aux1\" key).\n"
"This requires the \"fast\" privilege on the server."
msgstr ""
-"Gerak cepat (lewat tombol \"spesial\").\n"
+"Gerak cepat (lewat tombol \"Aux1\").\n"
"Membutuhkan hak \"fast\" pada server."
#: src/settings_translation_file.cpp
@@ -3238,14 +3464,16 @@ msgstr "Pemetaan suasana filmis"
#: 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."
+"which PNG optimizers usually discard, often resulting in dark or\n"
+"light edges to transparent textures. Apply a filter to clean that up\n"
+"at texture load time. This is automatically enabled if mipmapping is enabled."
msgstr ""
"Tekstur yang difilter dapat memadukan nilai RGB dengan tetangganya yang\n"
"sepenuhnya transparan, yang biasanya diabaikan oleh pengoptimal PNG,\n"
"terkadang menghasilkan tepi gelap atau terang pada tekstur transparan. \n"
-"Terapkan filter ini untuk membersihkannya ketika memuat tekstur."
+"Terapkan filter ini untuk membersihkannya ketika memuat tekstur. Ini "
+"dinyalakan\n"
+"otomatis jika mipmap dinyalakan."
#: src/settings_translation_file.cpp
msgid "Filtering"
@@ -3336,15 +3564,17 @@ msgid "Font size"
msgstr "Ukuran fon"
#: src/settings_translation_file.cpp
-msgid "Font size of the default font in point (pt)."
-msgstr "Ukuran fon bawaan dalam poin (pt)."
+msgid "Font size divisible by"
+msgstr ""
#: src/settings_translation_file.cpp
-msgid "Font size of the fallback font in point (pt)."
-msgstr "Ukuran fon cadangan bawaan dalam poin (pt)."
+#, fuzzy
+msgid "Font size of the default font where 1 unit = 1 pixel at 96 DPI"
+msgstr "Ukuran fon bawaan dalam poin (pt)."
#: src/settings_translation_file.cpp
-msgid "Font size of the monospace font in point (pt)."
+#, fuzzy
+msgid "Font size of the monospace font where 1 unit = 1 pixel at 96 DPI"
msgstr "Ukuran fon monospace bawaan dalam poin (pt)."
#: src/settings_translation_file.cpp
@@ -3357,6 +3587,17 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"For pixel-style fonts that do not scale well, this ensures that font sizes "
+"used\n"
+"with this font will always be divisible by this value, in pixels. For "
+"instance,\n"
+"a pixel font 16 pixels tall should have this set to 16, so it will only ever "
+"be\n"
+"sized 16, 32, 48, etc., so a mod requesting a size of 25 will get 32."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Format of player chat messages. The following strings are valid "
"placeholders:\n"
"@name, @message, @timestamp (optional)"
@@ -3417,10 +3658,6 @@ msgid "Fraction of the visible distance at which fog starts to be rendered"
msgstr "Bagian dari jarak pandang tempat kabut mulai tampak"
#: src/settings_translation_file.cpp
-msgid "FreeType fonts"
-msgstr "Fon FreeType"
-
-#: src/settings_translation_file.cpp
msgid ""
"From how far blocks are generated for clients, stated in mapblocks (16 "
"nodes)."
@@ -3453,10 +3690,6 @@ msgid "Full screen"
msgstr "Layar penuh"
#: src/settings_translation_file.cpp
-msgid "Full screen BPP"
-msgstr "BPP layar penuh"
-
-#: src/settings_translation_file.cpp
msgid "Fullscreen mode."
msgstr "Mode layar penuh."
@@ -3480,7 +3713,7 @@ msgstr "Callback global"
msgid ""
"Global map generation attributes.\n"
"In Mapgen v6 the 'decorations' flag controls all decorations except trees\n"
-"and junglegrass, in all other mapgens this flag controls all decorations."
+"and jungle grass, in all other mapgens this flag controls all decorations."
msgstr ""
"Atribut pembuatan peta global.\n"
"Dalam pembuat peta v6, flag \"decorations\" mengatur semua hiasan, kecuali\n"
@@ -3567,8 +3800,9 @@ msgid "Heat noise"
msgstr "Noise panas"
#: src/settings_translation_file.cpp
-msgid "Height component of the initial window size."
-msgstr "Tinggi ukuran jendela mula-mula."
+msgid ""
+"Height component of the initial window size. Ignored in fullscreen mode."
+msgstr "Tinggi ukuran jendela mula-mula. Ini diabaikan dalam mode layar penuh."
#: src/settings_translation_file.cpp
msgid "Height noise"
@@ -3579,10 +3813,6 @@ msgid "Height select noise"
msgstr "Noise pemilihan ketinggian"
#: src/settings_translation_file.cpp
-msgid "High-precision FPU"
-msgstr "FPU (satuan titik mengambang) berketelitian tinggi"
-
-#: src/settings_translation_file.cpp
msgid "Hill steepness"
msgstr "Kecuraman bukit"
@@ -3827,11 +4057,10 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"If disabled, \"special\" key is used to fly fast if both fly and fast mode "
-"are\n"
+"If disabled, \"Aux1\" key is used to fly fast if both fly and fast mode are\n"
"enabled."
msgstr ""
-"Jika dimatikan, tombol \"spesial\" digunakan untuk terbang cepat jika mode\n"
+"Jika dimatikan, tombol \"Aux1\" digunakan untuk terbang cepat jika mode\n"
"terbang dan cepat dinyalakan."
#: src/settings_translation_file.cpp
@@ -3859,12 +4088,11 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"If enabled, \"special\" key instead of \"sneak\" key is used for climbing "
-"down and\n"
+"If enabled, \"Aux1\" key instead of \"Sneak\" key is used for climbing down "
+"and\n"
"descending."
msgstr ""
-"Jika dinyalakan, tombol \"spesial\" digunakan untuk bergerak turun alih-"
-"alih\n"
+"Jika dinyalakan, tombol \"Aux1\" digunakan untuk bergerak turun alih-alih\n"
"tombol \"menyelinap\"."
#: src/settings_translation_file.cpp
@@ -3923,6 +4151,14 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"If the execution of a chat command takes longer than this specified time in\n"
+"seconds, add the time information to the chat command message"
+msgstr ""
+"Jika pelaksanaan perintah obrolan lebih lama daripada ini (dalam detik),\n"
+"tambahkan informasi waktu ke pesan perintah obrolan"
+
+#: src/settings_translation_file.cpp
+msgid ""
"If the file size of debug.txt exceeds the number of megabytes specified in\n"
"this setting when it is opened, the file is moved to debug.txt.1,\n"
"deleting an older debug.txt.1 if it exists.\n"
@@ -3977,8 +4213,8 @@ msgstr ""
"Ini biasanya hanya dibutuhkan oleh kontributor inti/bawaan"
#: src/settings_translation_file.cpp
-msgid "Instrument chatcommands on registration."
-msgstr "Melengkapi perintah obrolan saat didaftarkan, dengan perkakas."
+msgid "Instrument chat commands on registration."
+msgstr "Perkakas perintah obrolan saat pendaftaran."
#: src/settings_translation_file.cpp
msgid ""
@@ -4071,7 +4307,7 @@ msgid "Joystick button repetition interval"
msgstr "Jarak penekanan tombol joystick terus-menerus"
#: src/settings_translation_file.cpp
-msgid "Joystick deadzone"
+msgid "Joystick dead zone"
msgstr "Zona mati joystick"
#: src/settings_translation_file.cpp
@@ -5094,10 +5330,6 @@ msgstr ""
"pandangan."
#: src/settings_translation_file.cpp
-msgid "Makes DirectX work with LuaJIT. Disable if it causes troubles."
-msgstr "Buat DirectX bekerja dengan LuaJIT. Matikan jika bermasalah."
-
-#: src/settings_translation_file.cpp
msgid "Makes all liquids opaque"
msgstr "Buat semua cairan buram"
@@ -5188,6 +5420,10 @@ msgid "Map save interval"
msgstr "Selang waktu menyimpan peta"
#: src/settings_translation_file.cpp
+msgid "Map shadows update frames"
+msgstr "Bingkai pembaruan peta bayangan"
+
+#: src/settings_translation_file.cpp
msgid "Mapblock limit"
msgstr "Batas blok peta"
@@ -5298,6 +5534,10 @@ msgstr ""
"tidak difokuskan."
#: src/settings_translation_file.cpp
+msgid "Maximum distance to render shadows."
+msgstr "Jarak maksimum untuk menggambar bayangan."
+
+#: src/settings_translation_file.cpp
msgid "Maximum forceloaded blocks"
msgstr "Jumlah maksimum blok yang dipaksa muat (forceloaded)"
@@ -5425,9 +5665,19 @@ msgstr ""
"0 untuk mematikan pengantrean dan -1 untuk mengatur antrean tanpa batas."
#: src/settings_translation_file.cpp
-msgid "Maximum time in ms a file download (e.g. a mod download) may take."
+msgid ""
+"Maximum time a file download (e.g. a mod download) may take, stated in "
+"milliseconds."
msgstr ""
-"Waktu maksimum dalam milidetik saat mengunduh berkas (misal.: mengunduh mod)."
+"Waktu maksimum saat mengunduh berkas (misal.: mengunduh mod) dalam milidetik."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum time an interactive request (e.g. server list fetch) may take, "
+"stated in milliseconds."
+msgstr ""
+"Waktu maksimum permintaan interaktif (misal ambil daftar server), dalam "
+"milidetik."
#: src/settings_translation_file.cpp
msgid "Maximum users"
@@ -5490,8 +5740,8 @@ msgid "Mod channels"
msgstr "Saluran mod"
#: src/settings_translation_file.cpp
-msgid "Modifies the size of the hudbar elements."
-msgstr "Mengubah ukuran dari elemen hudbar."
+msgid "Modifies the size of the HUD elements."
+msgstr "Mengubah ukuran elemen HUD."
#: src/settings_translation_file.cpp
msgid "Monospace font path"
@@ -5502,6 +5752,11 @@ msgid "Monospace font size"
msgstr "Ukuran fon monospace"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Monospace font size divisible by"
+msgstr "Ukuran fon monospace"
+
+#: src/settings_translation_file.cpp
msgid "Mountain height noise"
msgstr "Noise ketinggian gunung"
@@ -5645,12 +5900,12 @@ 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"
+"This is a trade-off between SQLite transaction overhead and\n"
"memory consumption (4096=100MB, as a rule of thumb)."
msgstr ""
"Jumlah dari blok tambahan yang dapat dimuat oleh /clearobjects dalam satu "
"waktu.\n"
-"Ini adalah pemilihan antara transaksi sqlite dan\n"
+"Ini adalah pemilihan antara transaksi SQLite dan\n"
"penggunaan memori (4096=100MB, kasarannya)."
#: src/settings_translation_file.cpp
@@ -5668,11 +5923,6 @@ msgstr "Keburaman (alfa) bayangan di belakang fon bawaan, antara 0 dan 255."
#: src/settings_translation_file.cpp
msgid ""
-"Opaqueness (alpha) of the shadow behind the fallback font, between 0 and 255."
-msgstr "Keburaman (alfa) bayangan di belakang fon cadangan, antara 0 dan 255."
-
-#: src/settings_translation_file.cpp
-msgid ""
"Open the pause menu when the window's focus is lost. Does not pause if a "
"formspec is\n"
"open."
@@ -5682,10 +5932,13 @@ msgstr ""
"dibuka."
#: src/settings_translation_file.cpp
+msgid "Optional override for chat weblink color."
+msgstr "Penimpaan opsional untuk warna tautan web pada obrolan."
+
+#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
-"Path of the fallback font.\n"
-"If “freetype†setting is enabled: Must be a TrueType font.\n"
-"If “freetype†setting is disabled: Must be a bitmap or XML vectors font.\n"
+"Path of the fallback font. Must be a TrueType font.\n"
"This font will be used for certain languages or if the default font is "
"unavailable."
msgstr ""
@@ -5714,10 +5967,9 @@ msgid "Path to texture directory. All textures are first searched from here."
msgstr "Jalur ke direktori tekstur. Semua tekstur akan dicari mulai dari sini."
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
-"Path to the default font.\n"
-"If “freetype†setting is enabled: Must be a TrueType font.\n"
-"If “freetype†setting is disabled: Must be a bitmap or XML vectors font.\n"
+"Path to the default font. Must be a TrueType font.\n"
"The fallback font will be used if the font cannot be loaded."
msgstr ""
"Jalur ke fon bawaan.\n"
@@ -5726,10 +5978,9 @@ msgstr ""
"Fon cadangan akan dipakai jika fon tidak dapat dimuat."
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
-"Path to the monospace font.\n"
-"If “freetype†setting is enabled: Must be a TrueType font.\n"
-"If “freetype†setting is disabled: Must be a bitmap or XML vectors font.\n"
+"Path to the monospace font. Must be a TrueType font.\n"
"This font is used for e.g. the console and profiler screen."
msgstr ""
"Jalur ke fon monospace.\n"
@@ -5790,6 +6041,10 @@ msgid "Player versus player"
msgstr "Pemain lawan pemain"
#: src/settings_translation_file.cpp
+msgid "Poisson filtering"
+msgstr "Pemfilteran Poisson"
+
+#: src/settings_translation_file.cpp
msgid ""
"Port to connect to (UDP).\n"
"Note that the port field in the main menu overrides this setting."
@@ -5842,9 +6097,9 @@ msgstr "Alamat pendengar Prometheus"
#: src/settings_translation_file.cpp
msgid ""
"Prometheus listener address.\n"
-"If minetest is compiled with ENABLE_PROMETHEUS option enabled,\n"
+"If Minetest is compiled with ENABLE_PROMETHEUS option enabled,\n"
"enable metrics listener for Prometheus on that address.\n"
-"Metrics can be fetch on http://127.0.0.1:30000/metrics"
+"Metrics can be fetched on http://127.0.0.1:30000/metrics"
msgstr ""
"Alamat pendengar Prometheus.\n"
"Jika Minetest dikompilasi dengan pilihan ENABLE_PROMETHEUS dinyalakan,\n"
@@ -6182,6 +6437,43 @@ msgstr "Atur jumlah karakter maksimum per pesan obrolan yang dikirim klien."
#: src/settings_translation_file.cpp
msgid ""
+"Set the shadow strength.\n"
+"Lower value means lighter shadows, higher value means darker shadows."
+msgstr ""
+"Atur kekuatan bayangan.\n"
+"Nilai rendah berarti bayangan lebih terang, nilai tinggi berarti lebih gelap."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set the soft shadow radius size.\n"
+"Lower values mean sharper shadows, bigger values mean softer shadows.\n"
+"Minimum value: 1.0; maximum value: 10.0"
+msgstr ""
+"Atur besar jari-jari bayangan halus.\n"
+"Nilai rendah berarti bayangan lebih tajam, nilai tinggi berarti lebih "
+"halus.\n"
+"Nilai minimum: 1.0; nilai maksimum 10.0"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set the tilt of Sun/Moon orbit in degrees.\n"
+"Value of 0 means no tilt / vertical orbit.\n"
+"Minimum value: 0.0; maximum value: 60.0"
+msgstr ""
+"Atur kemiringan orbit Matahari/Bulan dalam derajat.\n"
+"Nilai 0 berarti tidak miring/orbit tegak.\n"
+"Nilai minimum: 0.0; nilai maksimum 60.0"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set to true to enable Shadow Mapping.\n"
+"Requires shaders to be enabled."
+msgstr ""
+"Atur ke true untuk menyalakan Pemetaan Bayangan.\n"
+"Membutuhkan penggunaan shader."
+
+#: src/settings_translation_file.cpp
+msgid ""
"Set to true to enable waving leaves.\n"
"Requires shaders to be enabled."
msgstr ""
@@ -6205,6 +6497,16 @@ msgstr ""
"Membutuhkan penggunaan shader."
#: src/settings_translation_file.cpp
+msgid ""
+"Sets shadow texture quality to 32 bits.\n"
+"On false, 16 bits texture will be used.\n"
+"This can cause much more artifacts in the shadow."
+msgstr ""
+"Atur kualitas tekstur bayangan ke 32 bit.\n"
+"Nilai false berarti tekstur 16 bit akan dipakai.\n"
+"Ini akan menimbulkan lebih banyak artefak pada bayangan."
+
+#: src/settings_translation_file.cpp
msgid "Shader path"
msgstr "Jalur shader"
@@ -6221,6 +6523,22 @@ msgstr ""
"Ini hanya bekerja dengan video OpenGL."
#: src/settings_translation_file.cpp
+msgid "Shadow filter quality"
+msgstr "Kualitas filter bayangan"
+
+#: src/settings_translation_file.cpp
+msgid "Shadow map max distance in nodes to render shadows"
+msgstr "Jarak maks. peta bayangan (dalam nodus) untuk digambar"
+
+#: src/settings_translation_file.cpp
+msgid "Shadow map texture in 32 bits"
+msgstr "Tekstur peta bayangan dalam 32 bit"
+
+#: src/settings_translation_file.cpp
+msgid "Shadow map texture size"
+msgstr "Ukuran tekstur peta bayangan"
+
+#: src/settings_translation_file.cpp
msgid ""
"Shadow offset (in pixels) of the default font. If 0, then shadow will not be "
"drawn."
@@ -6229,12 +6547,8 @@ msgstr ""
"digambar."
#: src/settings_translation_file.cpp
-msgid ""
-"Shadow offset (in pixels) of the fallback font. If 0, then shadow will not "
-"be drawn."
-msgstr ""
-"Pergeseran bayangan fon cadangan dalam piksel. Jika 0, bayangan tidak akan "
-"digambar."
+msgid "Shadow strength"
+msgstr "Kekuatan bayangan"
#: src/settings_translation_file.cpp
msgid "Shape of the minimap. Enabled = round, disabled = square."
@@ -6257,9 +6571,8 @@ msgstr ""
"Dibutuhkan mulai ulang setelah mengganti ini."
#: src/settings_translation_file.cpp
-#, fuzzy
-msgid "Show nametag backgrounds by default"
-msgstr "Fon tebal bawaan"
+msgid "Show name tag backgrounds by default"
+msgstr "Tampilkan latar belakang tanda nama secara bawaan"
#: src/settings_translation_file.cpp
msgid "Shutdown message"
@@ -6293,6 +6606,10 @@ msgstr ""
"utas utama, sehingga mengurangi jitter."
#: src/settings_translation_file.cpp
+msgid "Sky Body Orbit Tilt"
+msgstr "Kemiringan Orbit Benda Langit"
+
+#: src/settings_translation_file.cpp
msgid "Slice w"
msgstr "Irisan w"
@@ -6351,16 +6668,12 @@ msgid "Sneaking speed, in nodes per second."
msgstr "Kelajuan menyelinap dalam nodus per detik."
#: src/settings_translation_file.cpp
-msgid "Sound"
-msgstr "Suara"
-
-#: src/settings_translation_file.cpp
-msgid "Special key"
-msgstr "Tombol spesial"
+msgid "Soft shadow radius"
+msgstr "Jari-jari bayangan halus"
#: src/settings_translation_file.cpp
-msgid "Special key for climbing/descending"
-msgstr "Tombol spesial untuk memanjat/turun"
+msgid "Sound"
+msgstr "Suara"
#: src/settings_translation_file.cpp
msgid ""
@@ -6386,6 +6699,18 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Spread a complete update of shadow map over given amount of frames.\n"
+"Higher values might make shadows laggy, lower values\n"
+"will consume more resources.\n"
+"Minimum value: 1; maximum value: 16"
+msgstr ""
+"Menyebarkan pembaruan peta bayangan dalam jumlah bingkai yang diberikan.\n"
+"Nilai tinggi bisa membuat bayangan patah-patah, nilai rendah akan butuh\n"
+"sumber daya lebih banyak.\n"
+"Nilai minimum: 1; nilai maksimum: 16"
+
+#: src/settings_translation_file.cpp
+msgid ""
"Spread of light curve boost range.\n"
"Controls the width of the range to be boosted.\n"
"Standard deviation of the light curve boost Gaussian."
@@ -6514,6 +6839,16 @@ msgstr "Jalur tekstur"
#: src/settings_translation_file.cpp
msgid ""
+"Texture size to render the shadow map on.\n"
+"This must be a power of two.\n"
+"Bigger numbers create better shadows but it is also more expensive."
+msgstr ""
+"Ukuran tekstur tempat peta bayangan digambar.\n"
+"Ini harus bernilai perpangkatan dua.\n"
+"Nilai yang besar akan menghasilkan bayangan yang bagus, tetapi lebih berat."
+
+#: src/settings_translation_file.cpp
+msgid ""
"Textures on a node may be aligned either to the node or to the world.\n"
"The former mode suits better things like machines, furniture, etc., while\n"
"the latter makes stairs and microblocks fit surroundings better.\n"
@@ -6533,7 +6868,7 @@ msgid "The URL for the content repository"
msgstr "URL dari gudang konten"
#: src/settings_translation_file.cpp
-msgid "The deadzone of the joystick"
+msgid "The dead zone of the joystick"
msgstr "Zona mati joystick yang digunakan"
#: src/settings_translation_file.cpp
@@ -6609,7 +6944,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"The rendering back-end for Irrlicht.\n"
+"The rendering back-end.\n"
"A restart is required after changing this.\n"
"Note: On Android, stick with OGLES1 if unsure! App may fail to start "
"otherwise.\n"
@@ -6625,7 +6960,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"The sensitivity of the joystick axes for moving the\n"
-"ingame view frustum around."
+"in-game view frustum around."
msgstr ""
"Kepekaan dari sumbu joystick untuk menggerakkan batas\n"
"tampilan dalam permainan."
@@ -6746,6 +7081,10 @@ msgid "Touch screen threshold"
msgstr "Ambang batas layar sentuh"
#: src/settings_translation_file.cpp
+msgid "Tradeoffs for performance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Trees noise"
msgstr "Noise pepohonan"
@@ -6823,13 +7162,13 @@ msgstr "Gunakan pemfilteran bilinear saat mengubah ukuran tekstur."
#: src/settings_translation_file.cpp
msgid ""
-"Use mip mapping to scale textures. May slightly increase performance,\n"
+"Use mipmapping to scale textures. May slightly increase performance,\n"
"especially when using a high resolution texture pack.\n"
"Gamma correct downscaling is not supported."
msgstr ""
-"Pakai mip mapping untuk penyekalaan tekstur. Bisa sedikit menaikkan\n"
+"Pakai mipmap untuk penyekalaan tekstur. Bisa sedikit menaikkan\n"
"kinerja, terutama pada saat memakai paket tekstur beresolusi tinggi.\n"
-"Pengecilan dengan tepat gamma tidak didukung."
+"Pengecilan dengan tepat-gamma tidak didukung."
#: src/settings_translation_file.cpp
msgid ""
@@ -6950,8 +7289,8 @@ msgid "Viewing range"
msgstr "Jarak pandang"
#: src/settings_translation_file.cpp
-msgid "Virtual joystick triggers aux button"
-msgstr "Joystick virtual mengetuk tombol aux"
+msgid "Virtual joystick triggers Aux1 button"
+msgstr "Joystick virtual mengetuk tombol Aux1"
#: src/settings_translation_file.cpp
msgid "Volume"
@@ -7030,6 +7369,10 @@ msgid "Waving plants"
msgstr "Tanaman berayun"
#: src/settings_translation_file.cpp
+msgid "Weblink color"
+msgstr "Warna tautan web"
+
+#: 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"
@@ -7057,9 +7400,8 @@ msgid ""
"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.\n"
+"memory. Powers of 2 are recommended. This setting is ONLY applied if\n"
+"bilinear/trilinear/anisotropic filtering is enabled.\n"
"This is also used as the base node texture size for world-aligned\n"
"texture autoscaling."
msgstr ""
@@ -7067,27 +7409,19 @@ msgstr ""
"rendah dapat dikaburkan sehingga diperbesar otomatis dengan interpolasi\n"
"nearest-neighbor untuk menjaga ketajaman piksel. Ini mengatur ukuran\n"
"tekstur minimum untuk tekstur yang diperbesar; semakin tinggi semakin\n"
-"tajam, tetapi butuh memori lebih. Perpangkatan dua disarankan. Mengatur\n"
-"ini menjadi lebih dari 1 mungkin tidak tampak perubahannya kecuali\n"
-"menggunakan filter bilinear/trilinear/anisotropik.\n"
+"tajam, tetapi butuh memori lebih. Perpangkatan dua disarankan. Pengaturan\n"
+"ini HANYA diterapkan jika menggunakan filter bilinear/trilinear/"
+"anisotropik.\n"
"Ini juga dipakai sebagai ukuran dasar tekstur nodus untuk penyekalaan\n"
"otomatis tekstur yang sejajar dengan dunia."
#: src/settings_translation_file.cpp
msgid ""
-"Whether FreeType fonts are used, requires FreeType support to be compiled "
-"in.\n"
-"If disabled, bitmap and XML vectors fonts are used instead."
-msgstr ""
-"Apakah fon FreeType digunakan, membutuhkan dukungan FreeType saat "
-"dikompilasi.\n"
-"Jika dimatikan, fon bitmap dan vektor XML akan dipakai."
-
-#: src/settings_translation_file.cpp
-msgid ""
-"Whether nametag backgrounds should be shown by default.\n"
+"Whether name tag backgrounds should be shown by default.\n"
"Mods may still set a background."
msgstr ""
+"Apakah latar belakang tanda nama ditampilkan secara bawaan.\n"
+"Mod masih bisa mengatur latar belakang."
#: src/settings_translation_file.cpp
msgid "Whether node texture animations should be desynchronized per mapblock."
@@ -7135,8 +7469,8 @@ msgid ""
msgstr "Apakah menampilkan informasi awakutu klien (sama dengan menekan F5)."
#: src/settings_translation_file.cpp
-msgid "Width component of the initial window size."
-msgstr "Lebar ukuran jendela mula-mula."
+msgid "Width component of the initial window size. Ignored in fullscreen mode."
+msgstr "Lebar ukuran jendela mula-mula. Ini diabaikan dalam mode layar penuh."
#: src/settings_translation_file.cpp
msgid "Width of the selection box lines around nodes."
@@ -7237,44 +7571,22 @@ msgid "Y-level of seabed."
msgstr "Ketinggian Y dari dasar laut."
#: src/settings_translation_file.cpp
-msgid ""
-"ZLib compression level to use when saving mapblocks to disk.\n"
-"-1 - Zlib's default compression level\n"
-"0 - no compresson, fastest\n"
-"9 - best compression, slowest\n"
-"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)"
-msgstr ""
-"Tingkat kompresi ZLib saat pengiriman blok peta kepada klien.\n"
-"-1 - tingkat kompresi Zlib bawaan\n"
-"0 - tanpa kompresi, tercepat\n"
-"9 - kompresi terbaik, terlambat\n"
-"(tingkat 1-3 pakai metode \"cepat\" Zlib, 4-9 pakai metode normal)"
-
-#: src/settings_translation_file.cpp
-msgid ""
-"ZLib compression level to use when sending mapblocks to the client.\n"
-"-1 - Zlib's default compression level\n"
-"0 - no compresson, fastest\n"
-"9 - best compression, slowest\n"
-"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)"
-msgstr ""
-"Tingkat kompresi ZLib saat penyimpanan blok peta kepada klien.\n"
-"-1 - tingkat kompresi Zlib bawaan\n"
-"0 - tanpa kompresi, tercepat\n"
-"9 - kompresi terbaik, terlambat\n"
-"(tingkat 1-3 pakai metode \"cepat\" Zlib, 4-9 pakai metode normal)"
-
-#: src/settings_translation_file.cpp
msgid "cURL file download timeout"
msgstr "Batas waktu cURL mengunduh berkas"
#: src/settings_translation_file.cpp
+msgid "cURL interactive timeout"
+msgstr "Waktu habis untuk cURL"
+
+#: src/settings_translation_file.cpp
msgid "cURL parallel limit"
msgstr "Batas cURL paralel"
-#: src/settings_translation_file.cpp
-msgid "cURL timeout"
-msgstr "Waktu habis untuk cURL"
+#~ msgid "- Creative Mode: "
+#~ msgstr "- Mode Kreatif: "
+
+#~ msgid "- Damage: "
+#~ msgstr "- Kerusakan: "
#~ msgid ""
#~ "0 = parallax occlusion with slope information (faster).\n"
@@ -7283,6 +7595,9 @@ msgstr "Waktu habis untuk cURL"
#~ "0 = parallax occlusion dengan informasi kemiringan (cepat).\n"
#~ "1 = relief mapping (pelan, lebih akurat)."
+#~ msgid "Address / Port"
+#~ msgstr "Alamat/Porta"
+
#~ msgid ""
#~ "Adjust the gamma encoding for the light tables. Higher numbers are "
#~ "brighter.\n"
@@ -7302,6 +7617,9 @@ msgstr "Waktu habis untuk cURL"
#~ msgid "Back"
#~ msgstr "Kembali"
+#~ msgid "Bits per pixel (aka color depth) in fullscreen mode."
+#~ msgstr "Bit per piksel (alias kedalaman warna) dalam mode layar penuh."
+
#~ msgid "Bump Mapping"
#~ msgstr "Bump Mapping"
@@ -7343,13 +7661,26 @@ msgstr "Waktu habis untuk cURL"
#~ msgstr ""
#~ "Mengatur lebar terowongan, nilai lebih kecil terowongan semakin lebar."
+#~ msgid "Credits"
+#~ msgstr "Penghargaan"
+
#~ msgid "Crosshair color (R,G,B)."
#~ msgstr "Warna crosshair: (merah,hijau,biru) atau (R,G,B)."
+#~ msgid "Damage enabled"
+#~ msgstr "Kerusakan dinyalakan"
+
#~ msgid "Darkness sharpness"
#~ msgstr "Kecuraman kegelapan"
#~ msgid ""
+#~ "Default timeout for cURL, stated in milliseconds.\n"
+#~ "Only has an effect if compiled with cURL."
+#~ msgstr ""
+#~ "Batas waktu bawaan untuk cURL, dalam milidetik.\n"
+#~ "Hanya berlaku jika dikompilasi dengan cURL."
+
+#~ msgid ""
#~ "Defines areas of floatland smooth terrain.\n"
#~ "Smooth floatlands occur when noise > 0."
#~ msgstr ""
@@ -7406,6 +7737,15 @@ msgstr "Waktu habis untuk cURL"
#~ msgid "FPS in pause menu"
#~ msgstr "FPS (bingkai per detik) pada menu jeda"
+#~ msgid "Fallback font shadow"
+#~ msgstr "Bayangan fon cadangan"
+
+#~ msgid "Fallback font shadow alpha"
+#~ msgstr "Keburaman bayangan fon cadangan"
+
+#~ msgid "Fallback font size"
+#~ msgstr "Ukuran fon cadangan"
+
#~ msgid "Floatland base height noise"
#~ msgstr "Noise ketinggian dasar floatland"
@@ -7415,6 +7755,15 @@ msgstr "Waktu habis untuk cURL"
#~ msgid "Font shadow alpha (opaqueness, between 0 and 255)."
#~ msgstr "Keburaman bayangan fon (keopakan, dari 0 sampai 255)."
+#~ msgid "Font size of the fallback font in point (pt)."
+#~ msgstr "Ukuran fon cadangan bawaan dalam poin (pt)."
+
+#~ msgid "FreeType fonts"
+#~ msgstr "Fon FreeType"
+
+#~ msgid "Full screen BPP"
+#~ msgstr "BPP layar penuh"
+
#~ msgid "Gamma"
#~ msgstr "Gamma"
@@ -7424,9 +7773,15 @@ msgstr "Waktu habis untuk cURL"
#~ msgid "Generate normalmaps"
#~ msgstr "Buat normalmap"
+#~ msgid "High-precision FPU"
+#~ msgstr "FPU (satuan titik mengambang) berketelitian tinggi"
+
#~ msgid "IPv6 support."
#~ msgstr "Dukungan IPv6."
+#~ msgid "Install: file: \"$1\""
+#~ msgstr "Pemasangan: berkas: \"$1\""
+
#~ msgid "Lava depth"
#~ msgstr "Kedalaman lava"
@@ -7442,6 +7797,9 @@ msgstr "Waktu habis untuk cURL"
#~ msgid "Main menu style"
#~ msgstr "Gaya menu utama"
+#~ msgid "Makes DirectX work with LuaJIT. Disable if it causes troubles."
+#~ msgstr "Buat DirectX bekerja dengan LuaJIT. Matikan jika bermasalah."
+
#~ msgid "Minimap in radar mode, Zoom x2"
#~ msgstr "Peta mini mode radar, perbesaran 2x"
@@ -7454,6 +7812,9 @@ msgstr "Waktu habis untuk cURL"
#~ msgid "Minimap in surface mode, Zoom x4"
#~ msgstr "Peta mini mode permukaan, perbesaran 4x"
+#~ msgid "Name / Password"
+#~ msgstr "Nama/Kata Sandi"
+
#~ msgid "Name/Password"
#~ msgstr "Nama/Kata Sandi"
@@ -7472,6 +7833,12 @@ msgstr "Waktu habis untuk cURL"
#~ msgid "Ok"
#~ msgstr "Oke"
+#~ msgid ""
+#~ "Opaqueness (alpha) of the shadow behind the fallback font, between 0 and "
+#~ "255."
+#~ msgstr ""
+#~ "Keburaman (alfa) bayangan di belakang fon cadangan, antara 0 dan 255."
+
#~ msgid "Overall bias of parallax occlusion effect, usually scale/2."
#~ msgstr "Bias keseluruhan dari efek parallax occlusion, biasanya skala/2."
@@ -7508,6 +7875,9 @@ msgstr "Waktu habis untuk cURL"
#~ msgid "Projecting dungeons"
#~ msgstr "Dungeon yang menonjol"
+#~ msgid "PvP enabled"
+#~ msgstr "PvP dinyalakan"
+
#~ msgid "Reset singleplayer world"
#~ msgstr "Atur ulang dunia pemain tunggal"
@@ -7517,6 +7887,19 @@ msgstr "Waktu habis untuk cURL"
#~ msgid "Shadow limit"
#~ msgstr "Batas bayangan"
+#~ msgid ""
+#~ "Shadow offset (in pixels) of the fallback font. If 0, then shadow will "
+#~ "not be drawn."
+#~ msgstr ""
+#~ "Pergeseran bayangan fon cadangan dalam piksel. Jika 0, bayangan tidak "
+#~ "akan digambar."
+
+#~ msgid "Special"
+#~ msgstr "Spesial"
+
+#~ msgid "Special key"
+#~ msgstr "Tombol spesial"
+
#~ msgid "Start Singleplayer"
#~ msgstr "Mulai Pemain Tunggal"
@@ -7529,6 +7912,9 @@ msgstr "Waktu habis untuk cURL"
#~ msgid "This font will be used for certain languages."
#~ msgstr "Fon ini akan digunakan pada bahasa tertentu."
+#~ msgid "To enable shaders the OpenGL driver needs to be used."
+#~ msgstr "Untuk menggunakan shader, pengandar OpenGL harus digunakan."
+
#~ msgid "Toggle Cinematic"
#~ msgstr "Mode sinema"
@@ -7552,6 +7938,15 @@ msgstr "Waktu habis untuk cURL"
#~ msgid "Waving water"
#~ msgstr "Air berombak"
+#~ msgid ""
+#~ "Whether FreeType fonts are used, requires FreeType support to be compiled "
+#~ "in.\n"
+#~ "If disabled, bitmap and XML vectors fonts are used instead."
+#~ msgstr ""
+#~ "Apakah fon FreeType digunakan, membutuhkan dukungan FreeType saat "
+#~ "dikompilasi.\n"
+#~ "Jika dimatikan, fon bitmap dan vektor XML akan dipakai."
+
#~ msgid "Whether dungeons occasionally project from the terrain."
#~ msgstr "Apakah dungeon terkadang muncul dari medan."
@@ -7566,3 +7961,10 @@ msgstr "Waktu habis untuk cURL"
#~ msgid "Yes"
#~ msgstr "Ya"
+
+#, fuzzy
+#~ msgid "You died."
+#~ msgstr "Anda mati"
+
+#~ msgid "needs_fallback_font"
+#~ msgstr "no"
diff --git a/po/it/minetest.po b/po/it/minetest.po
index 6a2ef726a..0a0997f38 100644
--- a/po/it/minetest.po
+++ b/po/it/minetest.po
@@ -2,9 +2,9 @@ msgid ""
msgstr ""
"Project-Id-Version: Italian (Minetest)\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-02-23 19:03+0100\n"
-"PO-Revision-Date: 2021-03-25 17:29+0000\n"
-"Last-Translator: Alessandro Mandelli <mandelli.alessandro@ngi.it>\n"
+"POT-Creation-Date: 2022-01-25 23:19+0100\n"
+"PO-Revision-Date: 2021-12-02 01:31+0000\n"
+"Last-Translator: Simone Starace <simone.starace93@gmail.com>\n"
"Language-Team: Italian <https://hosted.weblate.org/projects/minetest/"
"minetest/it/>\n"
"Language: it\n"
@@ -12,7 +12,43 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 4.5.2-dev\n"
+"X-Generator: Weblate 4.10-dev\n"
+
+#: builtin/client/chatcommands.lua
+msgid "Clear the out chat queue"
+msgstr "Pulisci la coda esterna della chat"
+
+#: builtin/client/chatcommands.lua
+msgid "Empty command."
+msgstr "Comando vuoto."
+
+#: builtin/client/chatcommands.lua
+msgid "Exit to main menu"
+msgstr "Ritorna al menu principale"
+
+#: builtin/client/chatcommands.lua
+msgid "Invalid command: "
+msgstr "Comando Invalido: "
+
+#: builtin/client/chatcommands.lua
+msgid "Issued command: "
+msgstr "Comando rilasciato: "
+
+#: builtin/client/chatcommands.lua
+msgid "List online players"
+msgstr "Lista di giocatori online"
+
+#: builtin/client/chatcommands.lua
+msgid "Online players: "
+msgstr "Giocatori Online: "
+
+#: builtin/client/chatcommands.lua
+msgid "The out chat queue is now empty."
+msgstr "La coda esterna della chat è vuota adesso."
+
+#: builtin/client/chatcommands.lua
+msgid "This command is disabled by server."
+msgstr "Questo comando è stato disabilitato dal server."
#: builtin/client/death_formspec.lua src/client/game.cpp
msgid "Respawn"
@@ -22,11 +58,42 @@ msgstr "Rinasci"
msgid "You died"
msgstr "Sei morto"
+#: builtin/common/chatcommands.lua
+msgid "Available commands:"
+msgstr "Comandi disponibili:"
+
+#: builtin/common/chatcommands.lua
+msgid "Available commands: "
+msgstr "Comandi disponibili: "
+
+#: builtin/common/chatcommands.lua
+msgid "Command not available: "
+msgstr "Comando non disponibile: "
+
+#: builtin/common/chatcommands.lua
+msgid "Get help for commands"
+msgstr "Ottieni aiuto per i comandi"
+
+#: builtin/common/chatcommands.lua
+msgid ""
+"Use '.help <cmd>' to get more information, or '.help all' to list everything."
+msgstr ""
+"Scrivi '.help <cmd>' per avere più informazioni, oppure '.help all' per "
+"avere la lista completa."
+
+#: builtin/common/chatcommands.lua
+msgid "[all | <cmd>]"
+msgstr ""
+
#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp
msgid "OK"
msgstr "Ok"
#: builtin/fstk/ui.lua
+msgid "<none available>"
+msgstr "<nessuno disponibile>"
+
+#: builtin/fstk/ui.lua
msgid "An error occurred in a Lua script:"
msgstr "Si è verificato un errore in uno script Lua:"
@@ -229,6 +296,10 @@ msgid "Install missing dependencies"
msgstr "Installa le dipendenze mancanti"
#: builtin/mainmenu/dlg_contentstore.lua
+msgid "Install: Unsupported file type or broken archive"
+msgstr "Installazione: Tipo di file non supportato o archivio danneggiato"
+
+#: builtin/mainmenu/dlg_contentstore.lua
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Mods"
msgstr "Mod"
@@ -533,7 +604,7 @@ msgstr "< Torna a Impostazioni"
msgid "Browse"
msgstr "Scorri"
-#: builtin/mainmenu/dlg_settings_advanced.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_settings.lua
msgid "Disabled"
msgstr "Disabilitato"
@@ -558,7 +629,7 @@ msgid "Offset"
msgstr "Scarto"
#: builtin/mainmenu/dlg_settings_advanced.lua
-msgid "Persistance"
+msgid "Persistence"
msgstr "Persistenza"
#: builtin/mainmenu/dlg_settings_advanced.lua
@@ -577,7 +648,7 @@ msgstr "Ripristina"
msgid "Scale"
msgstr "Scala"
-#: builtin/mainmenu/dlg_settings_advanced.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_online.lua
msgid "Search"
msgstr "Cerca"
@@ -671,14 +742,6 @@ msgstr ""
"mod $1"
#: builtin/mainmenu/pkgmgr.lua
-msgid "Install: Unsupported file type \"$1\" or broken archive"
-msgstr "Installa: Tipo di file non supportato \"$1\" o archivio danneggiato"
-
-#: builtin/mainmenu/pkgmgr.lua
-msgid "Install: file: \"$1\""
-msgstr "Install: File: \"$1\""
-
-#: builtin/mainmenu/pkgmgr.lua
msgid "Unable to find a valid mod or modpack"
msgstr "Impossibile trovare un mod o un pacchetto mod validi"
@@ -712,6 +775,42 @@ msgstr ""
"Prova a riabilitare l'elenco dei server pubblici e controlla la tua "
"connessione internet."
+#: builtin/mainmenu/tab_about.lua
+msgid "About"
+msgstr "Riguardo a"
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Active Contributors"
+msgstr "Contributori attivi"
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Active renderer:"
+msgstr "Rendering Attivo:"
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Core Developers"
+msgstr "Sviluppatori principali"
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Open User Data Directory"
+msgstr "Apri la cartella dei dati utente"
+
+#: builtin/mainmenu/tab_about.lua
+msgid ""
+"Opens the directory that contains user-provided worlds, games, mods,\n"
+"and texture packs in a file manager / explorer."
+msgstr ""
+"Apre la cartella che contiene mondi, giochi, mod e pacchetti \n"
+"texture forniti dall'utente in un gestore di file / explorer."
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Previous Contributors"
+msgstr "Contributori precedenti"
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Previous Core Developers"
+msgstr "Sviluppatori principali precedenti"
+
#: builtin/mainmenu/tab_content.lua
msgid "Browse online content"
msgstr "Mostra contenuti online"
@@ -752,38 +851,6 @@ msgstr "Disinstalla pacchetto"
msgid "Use Texture Pack"
msgstr "Usa pacchetto texture"
-#: builtin/mainmenu/tab_credits.lua
-msgid "Active Contributors"
-msgstr "Contributori attivi"
-
-#: 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 "Open User Data Directory"
-msgstr "Apri la cartella dei dati utente"
-
-#: builtin/mainmenu/tab_credits.lua
-msgid ""
-"Opens the directory that contains user-provided worlds, games, mods,\n"
-"and texture packs in a file manager / explorer."
-msgstr ""
-"Apre la cartella che contiene mondi, giochi, mod e pacchetti \n"
-"texture forniti dall'utente in un gestore di file / explorer."
-
-#: builtin/mainmenu/tab_credits.lua
-msgid "Previous Contributors"
-msgstr "Contributori precedenti"
-
-#: builtin/mainmenu/tab_credits.lua
-msgid "Previous Core Developers"
-msgstr "Sviluppatori principali precedenti"
-
#: builtin/mainmenu/tab_local.lua
msgid "Announce Server"
msgstr "Annunciare il server"
@@ -812,7 +879,7 @@ msgstr "Ospita un server"
msgid "Install games from ContentDB"
msgstr "Installa giochi da ContentDB"
-#: builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
msgid "Name"
msgstr "Nome"
@@ -824,7 +891,7 @@ msgstr "Nuovo"
msgid "No world created or selected!"
msgstr "Nessun mondo creato o selezionato!"
-#: builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
msgid "Password"
msgstr "Password"
@@ -832,7 +899,7 @@ msgstr "Password"
msgid "Play Game"
msgstr "Avvia il gioco"
-#: builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
msgid "Port"
msgstr "Porta"
@@ -853,8 +920,12 @@ msgid "Start Game"
msgstr "Gioca"
#: builtin/mainmenu/tab_online.lua
-msgid "Address / Port"
-msgstr "Indirizzo / Porta"
+msgid "Address"
+msgstr "Indirizzo"
+
+#: builtin/mainmenu/tab_online.lua src/client/keycode.cpp
+msgid "Clear"
+msgstr "Canc"
#: builtin/mainmenu/tab_online.lua
msgid "Connect"
@@ -864,34 +935,43 @@ msgstr "Connettiti"
msgid "Creative mode"
msgstr "Modalità creativa"
+#. ~ PvP = Player versus Player
#: builtin/mainmenu/tab_online.lua
-msgid "Damage enabled"
-msgstr "Danno fisico abilitato"
+#, fuzzy
+msgid "Damage / PvP"
+msgstr "Ferimento"
#: builtin/mainmenu/tab_online.lua
msgid "Del. Favorite"
msgstr "Elimina preferito"
#: builtin/mainmenu/tab_online.lua
-msgid "Favorite"
-msgstr "Preferito"
+msgid "Favorites"
+msgstr "Preferiti"
#: builtin/mainmenu/tab_online.lua
-msgid "Join Game"
-msgstr "Gioca online"
+msgid "Incompatible Servers"
+msgstr "Server Incompatibili"
#: builtin/mainmenu/tab_online.lua
-msgid "Name / Password"
-msgstr "Nome / Password"
+msgid "Join Game"
+msgstr "Gioca online"
#: builtin/mainmenu/tab_online.lua
msgid "Ping"
msgstr "Ping"
-#. ~ PvP = Player versus Player
#: builtin/mainmenu/tab_online.lua
-msgid "PvP enabled"
-msgstr "PvP abilitato"
+msgid "Public Servers"
+msgstr "Server Pubblici"
+
+#: builtin/mainmenu/tab_online.lua
+msgid "Refresh"
+msgstr "Ricarica"
+
+#: builtin/mainmenu/tab_online.lua
+msgid "Server Description"
+msgstr "Descrizione del server"
#: builtin/mainmenu/tab_settings.lua
msgid "2x"
@@ -933,11 +1013,31 @@ msgstr "Cambia i tasti"
msgid "Connected Glass"
msgstr "Vetro contiguo"
+#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
+msgid "Dynamic shadows"
+msgstr "Ombre dinamiche"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Dynamic shadows: "
+msgstr "Ombre dinamiche: "
+
#: builtin/mainmenu/tab_settings.lua
msgid "Fancy Leaves"
msgstr "Foglie di qualità"
#: builtin/mainmenu/tab_settings.lua
+msgid "High"
+msgstr "Alto"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Low"
+msgstr "Basso"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Medium"
+msgstr "Medio"
+
+#: builtin/mainmenu/tab_settings.lua
msgid "Mipmap"
msgstr "Mipmap"
@@ -1009,10 +1109,6 @@ msgstr "Luce uniforme"
msgid "Texturing:"
msgstr "Resa immagini:"
-#: builtin/mainmenu/tab_settings.lua
-msgid "To enable shaders the OpenGL driver needs to be used."
-msgstr "Per abilitare gli shader si deve usare il driver OpenGL."
-
#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
msgid "Tone Mapping"
msgstr "Tone Mapping"
@@ -1026,6 +1122,14 @@ msgid "Trilinear Filter"
msgstr "Filtro trilineare"
#: builtin/mainmenu/tab_settings.lua
+msgid "Ultra High"
+msgstr "Molto Alto"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Very Low"
+msgstr "Molto Basso"
+
+#: builtin/mainmenu/tab_settings.lua
msgid "Waving Leaves"
msgstr "Foglie ondeggianti"
@@ -1037,7 +1141,7 @@ msgstr "Liquidi ondeggianti"
msgid "Waving Plants"
msgstr "Piante ondeggianti"
-#: src/client/client.cpp
+#: src/client/client.cpp src/client/game.cpp
msgid "Connection timed out."
msgstr "Connessione scaduta."
@@ -1066,8 +1170,8 @@ 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 \""
+msgid "Could not find or load game: "
+msgstr "Impossibile trovare o caricare il gioco \" "
#: src/client/clientlauncher.cpp
msgid "Invalid gamespec."
@@ -1097,18 +1201,6 @@ msgstr "Impossibile aprire il file password fornito: "
msgid "Provided world path doesn't exist: "
msgstr "Il percorso fornito per il mondo non esiste: "
-#. ~ DO NOT TRANSLATE THIS LITERALLY!
-#. This is a special string. Put either "no" or "yes"
-#. into the translation field (literally).
-#. Choose "yes" if the language requires use of the fallback
-#. font, "no" otherwise.
-#. The fallback font is (normally) required for languages with
-#. non-Latin script, like Chinese.
-#. When in doubt, test your translation.
-#: src/client/fontengine.cpp
-msgid "needs_fallback_font"
-msgstr "no"
-
#: src/client/game.cpp
msgid ""
"\n"
@@ -1122,14 +1214,6 @@ msgid "- Address: "
msgstr "- Indirizzo: "
#: src/client/game.cpp
-msgid "- Creative Mode: "
-msgstr "- Modalità creativa: "
-
-#: src/client/game.cpp
-msgid "- Damage: "
-msgstr "- Ferimento: "
-
-#: src/client/game.cpp
msgid "- Mode: "
msgstr "- Modalità: "
@@ -1151,6 +1235,15 @@ msgid "- Server Name: "
msgstr "- Nome server: "
#: src/client/game.cpp
+msgid "A serialization error occurred:"
+msgstr "Un errore di serializzazione si è verificato:"
+
+#: src/client/game.cpp
+#, c-format
+msgid "Access denied. Reason: %s"
+msgstr "Accesso negato. Motivo: %s"
+
+#: src/client/game.cpp
msgid "Automatic forward disabled"
msgstr "Avanzamento automatico disabilitato"
@@ -1159,6 +1252,22 @@ msgid "Automatic forward enabled"
msgstr "Avanzamento automatico abilitato"
#: src/client/game.cpp
+msgid "Block bounds hidden"
+msgstr "Limiti del blocco nascosto"
+
+#: src/client/game.cpp
+msgid "Block bounds shown for all blocks"
+msgstr "I limiti del blocco sono mostrati per tutti i blocchi"
+
+#: src/client/game.cpp
+msgid "Block bounds shown for current block"
+msgstr "I limiti del blocco sono mostrati per il blocco attuale"
+
+#: src/client/game.cpp
+msgid "Block bounds shown for nearby blocks"
+msgstr "I limiti del blocco sono mostrati per i blocchi vicini"
+
+#: src/client/game.cpp
msgid "Camera update disabled"
msgstr "Aggiornamento telecamera disabilitato"
@@ -1167,6 +1276,12 @@ msgid "Camera update enabled"
msgstr "Aggiornamento telecamera abilitato"
#: src/client/game.cpp
+msgid "Can't show block bounds (need 'basic_debug' privilege)"
+msgstr ""
+"Impossibile mostrare i limiti del blocco (si ha bisogno del privilegio "
+"'baisc_debug')"
+
+#: src/client/game.cpp
msgid "Change Password"
msgstr "Cambia password"
@@ -1179,6 +1294,10 @@ msgid "Cinematic mode enabled"
msgstr "Modalità cinematica abilitata"
#: src/client/game.cpp
+msgid "Client disconnected"
+msgstr "Client disconnesso"
+
+#: src/client/game.cpp
msgid "Client side scripting is disabled"
msgstr "Scripting su lato client disabilitato"
@@ -1187,6 +1306,10 @@ msgid "Connecting to server..."
msgstr "Connessione al server..."
#: src/client/game.cpp
+msgid "Connection failed for unknown reason"
+msgstr "Connessione fallita per motivo sconosciuto"
+
+#: src/client/game.cpp
msgid "Continue"
msgstr "Continua"
@@ -1224,6 +1347,11 @@ msgstr ""
"- %s: chat\n"
#: src/client/game.cpp
+#, c-format
+msgid "Couldn't resolve address: %s"
+msgstr "Impossibile risolvere l'indirizzo: %s"
+
+#: src/client/game.cpp
msgid "Creating client..."
msgstr "Creazione client..."
@@ -1352,6 +1480,10 @@ msgid "Minimap currently disabled by game or mod"
msgstr "Minimappa attualmente disabilitata dal gioco o da una mod"
#: src/client/game.cpp
+msgid "Multiplayer"
+msgstr "Multi giocatore"
+
+#: src/client/game.cpp
msgid "Noclip mode disabled"
msgstr "Modalità incorporea disabilitata"
@@ -1425,6 +1557,21 @@ msgstr "Suono attivato"
#: src/client/game.cpp
#, c-format
+msgid "The server is probably running a different version of %s."
+msgstr "Il server sta probabilmente eseguendo una versione differente di %s."
+
+#: src/client/game.cpp
+#, c-format
+msgid "Unable to connect to %s because IPv6 is disabled"
+msgstr "Impossibile connettersi a %s perché IPv6 è disabilitato"
+
+#: src/client/game.cpp
+#, c-format
+msgid "Unable to listen on %s because IPv6 is disabled"
+msgstr "Impossibile ascoltare su %s perché IPv6 è disabilitato"
+
+#: src/client/game.cpp
+#, c-format
msgid "Viewing range changed to %d"
msgstr "Raggio visivo cambiato a %d"
@@ -1493,10 +1640,6 @@ msgid "Caps Lock"
msgstr "Blocca maiusc."
#: src/client/keycode.cpp
-msgid "Clear"
-msgstr "Canc"
-
-#: src/client/keycode.cpp
msgid "Control"
msgstr "Ctrl"
@@ -1761,6 +1904,14 @@ msgstr "Minimappa in modalità superficie, ingrandimento x%d"
msgid "Minimap in texture mode"
msgstr "Minimappa in modalità texture"
+#: src/gui/guiChatConsole.cpp
+msgid "Failed to open webpage"
+msgstr "Impossibile aprire la pagina web"
+
+#: src/gui/guiChatConsole.cpp
+msgid "Opening webpage"
+msgstr "Apertura pagina web"
+
#: src/gui/guiConfirmRegistration.cpp src/gui/guiPasswordChange.cpp
msgid "Passwords do not match!"
msgstr "Le password non corrispondono!"
@@ -1789,7 +1940,8 @@ msgid "Proceed"
msgstr "Prosegui"
#: src/gui/guiKeyChangeMenu.cpp
-msgid "\"Special\" = climb down"
+#, fuzzy
+msgid "\"Aux1\" = climb down"
msgstr "\"Speciale\" = scendi"
#: src/gui/guiKeyChangeMenu.cpp
@@ -1801,10 +1953,18 @@ msgid "Automatic jumping"
msgstr "Salto automatico"
#: src/gui/guiKeyChangeMenu.cpp
+msgid "Aux1"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
msgid "Backward"
msgstr "Indietreggia"
#: src/gui/guiKeyChangeMenu.cpp
+msgid "Block bounds"
+msgstr "Limiti del blocco nascosto"
+
+#: src/gui/guiKeyChangeMenu.cpp
msgid "Change camera"
msgstr "Cambia vista"
@@ -1894,10 +2054,6 @@ msgid "Sneak"
msgstr "Furtivo"
#: src/gui/guiKeyChangeMenu.cpp
-msgid "Special"
-msgstr "Speciale"
-
-#: src/gui/guiKeyChangeMenu.cpp
msgid "Toggle HUD"
msgstr "HUD sì/no"
@@ -1958,8 +2114,9 @@ msgid "Muted"
msgstr "Silenziato"
#: src/gui/guiVolumeChange.cpp
-msgid "Sound Volume: "
-msgstr "Volume suono: "
+#, c-format
+msgid "Sound Volume: %d%%"
+msgstr "Volume suono: %d%%"
#. ~ Imperative, as in "Enter/type in text".
#. Don't forget the space.
@@ -1983,9 +2140,10 @@ msgstr ""
"Se disabilitato, il joystick sarà centrato alla posizione del primo tocco."
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
-"(Android) Use virtual joystick to trigger \"aux\" button.\n"
-"If enabled, virtual joystick will also tap \"aux\" button when out of main "
+"(Android) Use virtual joystick to trigger \"Aux1\" button.\n"
+"If enabled, virtual joystick will also tap \"Aux1\" button when out of main "
"circle."
msgstr ""
"(Android) Usa il joystick virtuale per attivare il pulsante \"aux\".\n"
@@ -2223,6 +2381,12 @@ msgstr ""
"es. per schermi 4K."
#: src/settings_translation_file.cpp
+msgid "Adjust the detected display density, used for scaling UI elements."
+msgstr ""
+"Aggiusta la densità del display rilevato, utilizzato per scalare gli "
+"elementi UI."
+
+#: src/settings_translation_file.cpp
#, c-format
msgid ""
"Adjusts the density of the floatland layer.\n"
@@ -2359,6 +2523,16 @@ msgid "Autoscaling mode"
msgstr "Modalità scalamento automatico"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Aux1 key"
+msgstr "Tasto salta"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Aux1 key for climbing/descending"
+msgstr "Tasto speciale per arrampicarsi/scendere"
+
+#: src/settings_translation_file.cpp
msgid "Backward key"
msgstr "Tasto per indietreggiare"
@@ -2403,10 +2577,6 @@ msgid "Biome noise"
msgstr "Rumore biomi"
#: src/settings_translation_file.cpp
-msgid "Bits per pixel (aka color depth) in fullscreen mode."
-msgstr "Bit per pixel (o profondità di colore) in modalità schermo intero."
-
-#: src/settings_translation_file.cpp
msgid "Block send optimize distance"
msgstr "Distanza di ottimizzazione dell'invio dei blocchi"
@@ -2512,6 +2682,15 @@ msgstr ""
"Dove 0.0 è il livello di luce minimo, 1.0 è il livello di luce massimo."
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Chat command time message threshold"
+msgstr "Limite dei messaggi di chat per l'espulsione"
+
+#: src/settings_translation_file.cpp
+msgid "Chat commands"
+msgstr "Comandi della chat"
+
+#: src/settings_translation_file.cpp
msgid "Chat font size"
msgstr "Dimensione del carattere dell'area di messaggistica"
@@ -2544,8 +2723,9 @@ msgid "Chat toggle key"
msgstr "Tasto di (dis)attivazione della chat"
#: src/settings_translation_file.cpp
-msgid "Chatcommands"
-msgstr "Comandi della chat"
+#, fuzzy
+msgid "Chat weblinks"
+msgstr "Chat visualizzata"
#: src/settings_translation_file.cpp
msgid "Chunk size"
@@ -2564,6 +2744,14 @@ msgid "Clean transparent textures"
msgstr "Pulizia delle texture trasparenti"
#: src/settings_translation_file.cpp
+msgid ""
+"Clickable weblinks (middle-click or Ctrl+left-click) enabled in chat console "
+"output."
+msgstr ""
+"Link web cliccabili (tasto-centrale o Ctrl+tasto-sinistro) abilitati nel "
+"output della chat."
+
+#: src/settings_translation_file.cpp
msgid "Client"
msgstr "Client"
@@ -2608,6 +2796,10 @@ msgid "Colored fog"
msgstr "Nebbia colorata"
#: src/settings_translation_file.cpp
+msgid "Colored shadows"
+msgstr "Ombre colorate"
+
+#: src/settings_translation_file.cpp
msgid ""
"Comma-separated list of flags to hide in the content repository.\n"
"\"nonfree\" can be used to hide packages which do not qualify as 'free "
@@ -2651,6 +2843,38 @@ msgid "Command key"
msgstr "Tasto comando"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid ""
+"Compression level to use when saving mapblocks to disk.\n"
+"-1 - use default compression level\n"
+"0 - least compression, fastest\n"
+"9 - best compression, slowest"
+msgstr ""
+"Livello di compressione ZLib da utilizzare quando si salvano i blocchi mappa "
+"su disco.\n"
+"-1 - Livello di compressione predefinito di Zlib\n"
+"0 - nessuna compressione, più veloce\n"
+"9 - migliore compressione, più lenta\n"
+"(i livelli 1-3 usano il metodo \"veloce\" di Zlib, 4-9 usano il metodo "
+"normale)"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid ""
+"Compression level to use when sending mapblocks to the client.\n"
+"-1 - use default compression level\n"
+"0 - least compression, fastest\n"
+"9 - best compression, slowest"
+msgstr ""
+"Livello di compressione ZLib da utilizzare quando si inviano i blocchi mappa "
+"al client.\n"
+"-1 - Livello di compressione predefinito di Zlib\n"
+"0 - nessuna compressione, più veloce\n"
+"9 - migliore compressione, più lenta\n"
+"(i livelli 1-3 usano il metodo \"veloce\" di Zlib, 4-9 usano il metodo "
+"normale)"
+
+#: src/settings_translation_file.cpp
msgid "Connect glass"
msgstr "Unire i vetri"
@@ -2750,9 +2974,10 @@ msgid "Crosshair alpha"
msgstr "Trasparenza del mirino"
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
"Crosshair alpha (opaqueness, between 0 and 255).\n"
-"Also controls the object crosshair color"
+"This also applies to the object crosshair."
msgstr ""
"Trasparenza del mirino (opacità, tra 0 e 255).\n"
"Controlla anche il colore del mirino dell'oggetto"
@@ -2835,11 +3060,14 @@ msgstr "Dimensione predefinita della pila"
#: src/settings_translation_file.cpp
msgid ""
-"Default timeout for cURL, stated in milliseconds.\n"
-"Only has an effect if compiled with cURL."
+"Define shadow filtering quality.\n"
+"This simulates the soft shadows effect by applying a PCF or Poisson disk\n"
+"but also uses more resources."
msgstr ""
-"Scadenza predefinita per cURL, fissata in millisecondi.\n"
-"Ha effetto solo se Minetest è stato compilato con cURL."
+"Definisci la qualità del filtraggio delle ombre.\n"
+"Questo simula l'effetto delle ombre morbide applicando un PCF o Poisson "
+"disk\n"
+"ma utilizza più risorse."
#: src/settings_translation_file.cpp
msgid "Defines areas where trees have apples."
@@ -2968,6 +3196,10 @@ msgid "Disallow empty passwords"
msgstr "Rifiutare le password vuote"
#: src/settings_translation_file.cpp
+msgid "Display Density Scaling Factor"
+msgstr "Fattore di Scala della densità del display"
+
+#: src/settings_translation_file.cpp
msgid "Domain name of server, to be displayed in the serverlist."
msgstr "Nome di dominio del server, da mostrarsi nell'elenco dei server."
@@ -3017,6 +3249,24 @@ msgstr ""
"Questo supporto è sperimentale e l'API potrebbe cambiare."
#: src/settings_translation_file.cpp
+msgid ""
+"Enable Poisson disk filtering.\n"
+"On true uses Poisson disk to make \"soft shadows\". Otherwise uses PCF "
+"filtering."
+msgstr ""
+"Abilità il filtraggio Poisson disk\n"
+"Se abilitato si hanno le \\\"ombre morbide\\\". Altrimenti utilizza il "
+"filtraggio PCF."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable colored shadows.\n"
+"On true translucent nodes cast colored shadows. This is expensive."
+msgstr ""
+"Abilità ombre colorate.\n"
+"Se abilitato nodi traslucidi producono ombre colorate. Questo è costoso."
+
+#: src/settings_translation_file.cpp
msgid "Enable console window"
msgstr "Attivare la finestra della console"
@@ -3159,6 +3409,12 @@ msgstr ""
"Cambiare questa impostazione richiede un riavvio."
#: src/settings_translation_file.cpp
+msgid ""
+"Enables tradeoffs that reduce CPU load or increase rendering performance\n"
+"at the expense of minor visual glitches that do not impact game playability."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Engine profiling data print interval"
msgstr "Intervallo di stampa dei dati di profilo del motore di gioco"
@@ -3205,18 +3461,6 @@ msgid "Fallback font path"
msgstr "Percorso del carattere di ripiego"
#: src/settings_translation_file.cpp
-msgid "Fallback font shadow"
-msgstr "Ombreggiatura del carattere di ripiego"
-
-#: src/settings_translation_file.cpp
-msgid "Fallback font shadow alpha"
-msgstr "Trasparenza del carattere di ripiego"
-
-#: src/settings_translation_file.cpp
-msgid "Fallback font size"
-msgstr "Dimensione del carattere di ripiego"
-
-#: src/settings_translation_file.cpp
msgid "Fast key"
msgstr "Tasto corsa"
@@ -3233,8 +3477,9 @@ msgid "Fast movement"
msgstr "Movimento rapido"
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
-"Fast movement (via the \"special\" key).\n"
+"Fast movement (via the \"Aux1\" key).\n"
"This requires the \"fast\" privilege on the server."
msgstr ""
"Movimento rapido (tramite il tasto \"speciale\").\n"
@@ -3271,11 +3516,12 @@ msgid "Filmic tone mapping"
msgstr "Filmic tone mapping"
#: src/settings_translation_file.cpp
+#, fuzzy
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."
+"which PNG optimizers usually discard, often resulting in dark or\n"
+"light edges to transparent textures. Apply a filter to clean that up\n"
+"at texture load time. This is automatically enabled if mipmapping is enabled."
msgstr ""
"Le texture a cui si applicano i filtri possono amalgamare i valori RGB con "
"quelle vicine completamente trasparenti,\n"
@@ -3375,15 +3621,17 @@ msgid "Font size"
msgstr "Dimensione del carattere"
#: src/settings_translation_file.cpp
-msgid "Font size of the default font in point (pt)."
-msgstr "Dimensione carattere del carattere predefinito, in punti (pt)."
+msgid "Font size divisible by"
+msgstr ""
#: src/settings_translation_file.cpp
-msgid "Font size of the fallback font in point (pt)."
-msgstr "Dimensione carattere del carattere di ripiego, in punti (pt)."
+#, fuzzy
+msgid "Font size of the default font where 1 unit = 1 pixel at 96 DPI"
+msgstr "Dimensione carattere del carattere predefinito, in punti (pt)."
#: src/settings_translation_file.cpp
-msgid "Font size of the monospace font in point (pt)."
+#, fuzzy
+msgid "Font size of the monospace font where 1 unit = 1 pixel at 96 DPI"
msgstr "Dimensione carattere del carattere a spaziatura fissa, in punti (pt)."
#: src/settings_translation_file.cpp
@@ -3397,6 +3645,17 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"For pixel-style fonts that do not scale well, this ensures that font sizes "
+"used\n"
+"with this font will always be divisible by this value, in pixels. For "
+"instance,\n"
+"a pixel font 16 pixels tall should have this set to 16, so it will only ever "
+"be\n"
+"sized 16, 32, 48, etc., so a mod requesting a size of 25 will get 32."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Format of player chat messages. The following strings are valid "
"placeholders:\n"
"@name, @message, @timestamp (optional)"
@@ -3461,10 +3720,6 @@ msgstr ""
"Frazione della distanza visibile alla quale si comincia a disegnare la nebbia"
#: src/settings_translation_file.cpp
-msgid "FreeType fonts"
-msgstr "Caratteri FreeType"
-
-#: src/settings_translation_file.cpp
msgid ""
"From how far blocks are generated for clients, stated in mapblocks (16 "
"nodes)."
@@ -3500,10 +3755,6 @@ msgid "Full screen"
msgstr "Schermo intero"
#: src/settings_translation_file.cpp
-msgid "Full screen BPP"
-msgstr "BPP dello schermo intero"
-
-#: src/settings_translation_file.cpp
msgid "Fullscreen mode."
msgstr "Modalità a schermo intero."
@@ -3524,10 +3775,11 @@ msgid "Global callbacks"
msgstr "Callback globali"
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
"Global map generation attributes.\n"
"In Mapgen v6 the 'decorations' flag controls all decorations except trees\n"
-"and junglegrass, in all other mapgens this flag controls all decorations."
+"and jungle grass, in all other mapgens this flag controls all decorations."
msgstr ""
"Attributi globali di generazione della mappa.\n"
"In Mapgen v6 il valore 'decorations' controlla tutte le decorazioni eccetto "
@@ -3616,8 +3868,11 @@ msgid "Heat noise"
msgstr "Rumore del calore"
#: src/settings_translation_file.cpp
-msgid "Height component of the initial window size."
-msgstr "Componente altezza della dimensione iniziale della finestra."
+msgid ""
+"Height component of the initial window size. Ignored in fullscreen mode."
+msgstr ""
+"Componente altezza della dimensione iniziale della finestra. Ignorata in "
+"modalità a schermo intero."
#: src/settings_translation_file.cpp
msgid "Height noise"
@@ -3628,10 +3883,6 @@ msgid "Height select noise"
msgstr "Rumore di selezione dell'altezza"
#: src/settings_translation_file.cpp
-msgid "High-precision FPU"
-msgstr "FPU ad alta precisione"
-
-#: src/settings_translation_file.cpp
msgid "Hill steepness"
msgstr "Ripidità delle colline"
@@ -3874,9 +4125,9 @@ msgstr ""
"per non sprecare la potenza della CPU senza alcun beneficio."
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
-"If disabled, \"special\" key is used to fly fast if both fly and fast mode "
-"are\n"
+"If disabled, \"Aux1\" key is used to fly fast if both fly and fast mode are\n"
"enabled."
msgstr ""
"Se disabilitata, si usa il tasto \"speciale\" per volare velocemente,\n"
@@ -3909,9 +4160,10 @@ msgstr ""
"Richiede il privilegio \"noclip\" sul server."
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
-"If enabled, \"special\" key instead of \"sneak\" key is used for climbing "
-"down and\n"
+"If enabled, \"Aux1\" key instead of \"Sneak\" key is used for climbing down "
+"and\n"
"descending."
msgstr ""
"Se abilitata, si usa il tasto \"speciale\" invece di \"furtivo\" per "
@@ -3974,6 +4226,15 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"If the execution of a chat command takes longer than this specified time in\n"
+"seconds, add the time information to the chat command message"
+msgstr ""
+"Se l'esecuzione del comando in chat impiega più tempo di quello specificato "
+"in\n"
+"secondi, aggiungi l'informazione sul tempo al messaggio di comando in chat"
+
+#: src/settings_translation_file.cpp
+msgid ""
"If the file size of debug.txt exceeds the number of megabytes specified in\n"
"this setting when it is opened, the file is moved to debug.txt.1,\n"
"deleting an older debug.txt.1 if it exists.\n"
@@ -4028,7 +4289,8 @@ msgstr ""
"Questo normalmente serve solo ai contributori principali"
#: src/settings_translation_file.cpp
-msgid "Instrument chatcommands on registration."
+#, fuzzy
+msgid "Instrument chat commands on registration."
msgstr "Predisporre i comandi della chat alla registrazione."
#: src/settings_translation_file.cpp
@@ -4125,7 +4387,8 @@ msgid "Joystick button repetition interval"
msgstr "Intervallo di ripetizione del pulsante del joystick"
#: src/settings_translation_file.cpp
-msgid "Joystick deadzone"
+#, fuzzy
+msgid "Joystick dead zone"
msgstr "Deadzone joystick"
#: src/settings_translation_file.cpp
@@ -5155,10 +5418,6 @@ msgstr ""
"tramonto) e direzione della visuale."
#: src/settings_translation_file.cpp
-msgid "Makes DirectX work with LuaJIT. Disable if it causes troubles."
-msgstr "Fa lavorare DirectX con LuaJIT. Disabilitare se provoca problemi."
-
-#: src/settings_translation_file.cpp
msgid "Makes all liquids opaque"
msgstr "Rende opachi tutti i liquidi"
@@ -5255,6 +5514,10 @@ msgid "Map save interval"
msgstr "Intervallo di salvataggio della mappa"
#: src/settings_translation_file.cpp
+msgid "Map shadows update frames"
+msgstr "Frame di aggiornamento delle mappe d'ombra"
+
+#: src/settings_translation_file.cpp
msgid "Mapblock limit"
msgstr "Limite dei blocchi mappa"
@@ -5365,6 +5628,10 @@ msgstr ""
"pausa."
#: src/settings_translation_file.cpp
+msgid "Maximum distance to render shadows."
+msgstr "Distanza massima per renderizzare le ombre."
+
+#: src/settings_translation_file.cpp
msgid "Maximum forceloaded blocks"
msgstr "Numero massimo di blocchi caricati a forza"
@@ -5498,10 +5765,20 @@ msgstr ""
"della coda."
#: src/settings_translation_file.cpp
-msgid "Maximum time in ms a file download (e.g. a mod download) may take."
+msgid ""
+"Maximum time a file download (e.g. a mod download) may take, stated in "
+"milliseconds."
msgstr ""
-"Tempo massimo in ms che può richiedere lo scaricamento di un file (es. un "
-"mod)."
+"Tempo massimo in millisecondi che può richiedere lo scaricamento di un file "
+"(es. un mod)."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum time an interactive request (e.g. server list fetch) may take, "
+"stated in milliseconds."
+msgstr ""
+"Tempo massimo che può richiedere una richiesta interattiva (es. lista presa "
+"dal server), dichiarato in secondi."
#: src/settings_translation_file.cpp
msgid "Maximum users"
@@ -5565,7 +5842,8 @@ msgid "Mod channels"
msgstr "Canali mod"
#: src/settings_translation_file.cpp
-msgid "Modifies the size of the hudbar elements."
+#, fuzzy
+msgid "Modifies the size of the HUD elements."
msgstr "Modifica la dimensione degli elementi della barra dell'HUD."
#: src/settings_translation_file.cpp
@@ -5577,6 +5855,11 @@ msgid "Monospace font size"
msgstr "Dimensione del carattere a spaziatura fissa"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Monospace font size divisible by"
+msgstr "Dimensione del carattere a spaziatura fissa"
+
+#: src/settings_translation_file.cpp
msgid "Mountain height noise"
msgstr "Rumore dell'altezza montana"
@@ -5725,12 +6008,12 @@ 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"
+"This is a trade-off between SQLite transaction overhead and\n"
"memory consumption (4096=100MB, as a rule of thumb)."
msgstr ""
"Numero di blocchi extra che possono essere caricati da /clearobjects in una "
"volta.\n"
-"Questo è un controbilanciare tra spesa di transazione sqlite e\n"
+"Questo è un compromesso tra spesa di transazione sqlite e\n"
"consumo di memoria (4096 = 100MB, come regola generale)."
#: src/settings_translation_file.cpp
@@ -5749,11 +6032,6 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Opaqueness (alpha) of the shadow behind the fallback font, between 0 and 255."
-msgstr "Opacità (alfa) dell'ombra dietro il carattere di riserva, tra 0 e 255."
-
-#: src/settings_translation_file.cpp
-msgid ""
"Open the pause menu when the window's focus is lost. Does not pause if a "
"formspec is\n"
"open."
@@ -5762,10 +6040,13 @@ msgstr ""
"mette in pausa se è aperta una finestra di dialogo."
#: src/settings_translation_file.cpp
+msgid "Optional override for chat weblink color."
+msgstr "Sovrascrittura opzionale per i colori dei link web in chat."
+
+#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
-"Path of the fallback font.\n"
-"If “freetype†setting is enabled: Must be a TrueType font.\n"
-"If “freetype†setting is disabled: Must be a bitmap or XML vectors font.\n"
+"Path of the fallback font. Must be a TrueType font.\n"
"This font will be used for certain languages or if the default font is "
"unavailable."
msgstr ""
@@ -5801,10 +6082,9 @@ msgstr ""
"cercate a partire da qui."
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
-"Path to the default font.\n"
-"If “freetype†setting is enabled: Must be a TrueType font.\n"
-"If “freetype†setting is disabled: Must be a bitmap or XML vectors font.\n"
+"Path to the default font. Must be a TrueType font.\n"
"The fallback font will be used if the font cannot be loaded."
msgstr ""
"Percorso del carattere predefinito.\n"
@@ -5816,10 +6096,9 @@ msgstr ""
"caricato."
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
-"Path to the monospace font.\n"
-"If “freetype†setting is enabled: Must be a TrueType font.\n"
-"If “freetype†setting is disabled: Must be a bitmap or XML vectors font.\n"
+"Path to the monospace font. Must be a TrueType font.\n"
"This font is used for e.g. the console and profiler screen."
msgstr ""
"Percorso del carattere a spaziatura fissa.\n"
@@ -5883,6 +6162,10 @@ msgid "Player versus player"
msgstr "Giocatore contro giocatore"
#: src/settings_translation_file.cpp
+msgid "Poisson filtering"
+msgstr "Filtraggio Poisson"
+
+#: src/settings_translation_file.cpp
msgid ""
"Port to connect to (UDP).\n"
"Note that the port field in the main menu overrides this setting."
@@ -5936,11 +6219,12 @@ msgid "Prometheus listener address"
msgstr "Indirizzo del listener Prometheus"
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
"Prometheus listener address.\n"
-"If minetest is compiled with ENABLE_PROMETHEUS option enabled,\n"
+"If Minetest is compiled with ENABLE_PROMETHEUS option enabled,\n"
"enable metrics listener for Prometheus on that address.\n"
-"Metrics can be fetch on http://127.0.0.1:30000/metrics"
+"Metrics can be fetched on http://127.0.0.1:30000/metrics"
msgstr ""
"Indirizzo del listener Prometheus.\n"
"Se Minetest viene compilato con l'opzione ENABLE_PROMETHEUS abilitata,\n"
@@ -6287,6 +6571,44 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Set the shadow strength.\n"
+"Lower value means lighter shadows, higher value means darker shadows."
+msgstr ""
+"Imposta l'intensità dell'ombra.\n"
+"Un valore basso significa avere ombre chiare, un valore alto significa avere "
+"ombre scure."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set the soft shadow radius size.\n"
+"Lower values mean sharper shadows, bigger values mean softer shadows.\n"
+"Minimum value: 1.0; maximum value: 10.0"
+msgstr ""
+"Imposta la dimensione del raggio delle ombre morbide.\n"
+"Valori bassi significano ombre nitide, valori alti significano ombre "
+"morbide.\n"
+"Valore minimo: 1.0; Valore massimo: 10.0"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set the tilt of Sun/Moon orbit in degrees.\n"
+"Value of 0 means no tilt / vertical orbit.\n"
+"Minimum value: 0.0; maximum value: 60.0"
+msgstr ""
+"Imposta l'inclinazione dell'orbita del Sole/Luna in gradi.\n"
+"Il valore 0 significa nessuna inclinazione/orbita verticale.\n"
+"Valore minimo: 0.0; valore massimo: 60.0"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set to true to enable Shadow Mapping.\n"
+"Requires shaders to be enabled."
+msgstr ""
+"Impostata su vero abilita la Mappatura delle ombre.\n"
+"Necessita l'attivazione degli shader."
+
+#: src/settings_translation_file.cpp
+msgid ""
"Set to true to enable waving leaves.\n"
"Requires shaders to be enabled."
msgstr ""
@@ -6311,6 +6633,16 @@ msgstr ""
"Necessita l'attivazione degli shader."
#: src/settings_translation_file.cpp
+msgid ""
+"Sets shadow texture quality to 32 bits.\n"
+"On false, 16 bits texture will be used.\n"
+"This can cause much more artifacts in the shadow."
+msgstr ""
+"Imposta la qualità della textura dell'ombra a 32 bit.\n"
+"Su falso, 16 bit di texture saranno utilizzati.\n"
+"Questo può causare molti più artefatti nell'ombra."
+
+#: src/settings_translation_file.cpp
msgid "Shader path"
msgstr "Percorso shader"
@@ -6327,6 +6659,23 @@ msgstr ""
"Ciò funziona solo col supporto video OpenGL."
#: src/settings_translation_file.cpp
+msgid "Shadow filter quality"
+msgstr "Qualità filtro ombra"
+
+#: src/settings_translation_file.cpp
+msgid "Shadow map max distance in nodes to render shadows"
+msgstr ""
+"Distanza massima della mappa delle ombre nei nodi per renderizzare le ombre"
+
+#: src/settings_translation_file.cpp
+msgid "Shadow map texture in 32 bits"
+msgstr "Texture della mappa delle ombre in 32 bit"
+
+#: src/settings_translation_file.cpp
+msgid "Shadow map texture size"
+msgstr "Dimensione della texture della mappa d'ombra"
+
+#: src/settings_translation_file.cpp
msgid ""
"Shadow offset (in pixels) of the default font. If 0, then shadow will not be "
"drawn."
@@ -6335,12 +6684,8 @@ msgstr ""
"allora l'ombra non sarà disegnata."
#: src/settings_translation_file.cpp
-msgid ""
-"Shadow offset (in pixels) of the fallback font. If 0, then shadow will not "
-"be drawn."
-msgstr ""
-"Scarto (in pixel) dell'ombreggiatura del carattere di riserva. Se è 0, "
-"allora l'ombra non sarà disegnata."
+msgid "Shadow strength"
+msgstr "Intensità dell'ombra"
#: src/settings_translation_file.cpp
msgid "Shape of the minimap. Enabled = round, disabled = square."
@@ -6363,7 +6708,8 @@ msgstr ""
"È necessario riavviare dopo aver cambiato questo."
#: src/settings_translation_file.cpp
-msgid "Show nametag backgrounds by default"
+#, fuzzy
+msgid "Show name tag backgrounds by default"
msgstr "Mostra lo sfondo del nome per impostazione predefinita"
#: src/settings_translation_file.cpp
@@ -6398,6 +6744,10 @@ msgstr ""
"i dati copiati dal thread principale, riducendo così lo sfarfallio."
#: src/settings_translation_file.cpp
+msgid "Sky Body Orbit Tilt"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Slice w"
msgstr "Fetta w"
@@ -6459,16 +6809,12 @@ msgid "Sneaking speed, in nodes per second."
msgstr "Velocità furtiva, in nodi al secondo."
#: src/settings_translation_file.cpp
-msgid "Sound"
-msgstr "Audio"
-
-#: src/settings_translation_file.cpp
-msgid "Special key"
-msgstr "Tasto speciale"
+msgid "Soft shadow radius"
+msgstr "Raggio dell'ombra morbida"
#: src/settings_translation_file.cpp
-msgid "Special key for climbing/descending"
-msgstr "Tasto speciale per arrampicarsi/scendere"
+msgid "Sound"
+msgstr "Audio"
#: src/settings_translation_file.cpp
msgid ""
@@ -6495,6 +6841,19 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Spread a complete update of shadow map over given amount of frames.\n"
+"Higher values might make shadows laggy, lower values\n"
+"will consume more resources.\n"
+"Minimum value: 1; maximum value: 16"
+msgstr ""
+"Diffondi un aggiornamento completo della mappa d'ombra su un certo numero di "
+"frame.\n"
+"Valori alti potrebbero rendere le ombre laggose, valori bassi\n"
+"consumeranno più risorse.\n"
+"Valore minimo: 1; valore massimo: 16"
+
+#: src/settings_translation_file.cpp
+msgid ""
"Spread of light curve boost range.\n"
"Controls the width of the range to be boosted.\n"
"Standard deviation of the light curve boost Gaussian."
@@ -6629,6 +6988,16 @@ msgstr "Percorso delle texture"
#: src/settings_translation_file.cpp
msgid ""
+"Texture size to render the shadow map on.\n"
+"This must be a power of two.\n"
+"Bigger numbers create better shadows but it is also more expensive."
+msgstr ""
+"Dimensione della texture su cui renderizzare la mappa d'ombra.\n"
+"Questa deve essere una potenza di due.\n"
+"Valori alti creano ombre migliori ma è anche molto costoso."
+
+#: src/settings_translation_file.cpp
+msgid ""
"Textures on a node may be aligned either to the node or to the world.\n"
"The former mode suits better things like machines, furniture, etc., while\n"
"the latter makes stairs and microblocks fit surroundings better.\n"
@@ -6650,7 +7019,8 @@ msgid "The URL for the content repository"
msgstr "L'URL per il deposito dei contenuti"
#: src/settings_translation_file.cpp
-msgid "The deadzone of the joystick"
+#, fuzzy
+msgid "The dead zone of the joystick"
msgstr "La deadzone del joystick"
#: src/settings_translation_file.cpp
@@ -6727,24 +7097,26 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"The rendering back-end for Irrlicht.\n"
+"The rendering back-end.\n"
"A restart is required after changing this.\n"
"Note: On Android, stick with OGLES1 if unsure! App may fail to start "
"otherwise.\n"
"On other platforms, OpenGL is recommended.\n"
"Shaders are supported by OpenGL (desktop only) and OGLES2 (experimental)"
msgstr ""
-"Il back-end di rendering per Irrlicht.\n"
+"Il rendering di back-end.\n"
"Dopo averlo cambiato è necessario un riavvio.\n"
"Nota: su Android, restare con OGLES1 se incerti! Altrimenti l'app potrebbe "
"non partire.\n"
"Su altre piattaforme, si raccomanda OpenGL\n"
-"Le shader sono supportate da OpenGL (solo su desktop) e OGLES2 (sperimentale)"
+"Gli shader sono supportati da OpenGL (solo su desktop) e OGLES2 "
+"(sperimentale)"
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
"The sensitivity of the joystick axes for moving the\n"
-"ingame view frustum around."
+"in-game view frustum around."
msgstr ""
"La sensibilità degli assi del joystick per spostare\n"
"il campo visivo durante il gioco."
@@ -6874,6 +7246,10 @@ msgid "Touch screen threshold"
msgstr "Soglia del touch screen"
#: src/settings_translation_file.cpp
+msgid "Tradeoffs for performance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Trees noise"
msgstr "Rumore degli alberi"
@@ -6954,8 +7330,9 @@ msgid "Use bilinear filtering when scaling textures."
msgstr "Usare il filtraggio bilineare quando si ridimensionano le texture."
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
-"Use mip mapping to scale textures. May slightly increase performance,\n"
+"Use mipmapping to scale textures. May slightly increase performance,\n"
"especially when using a high resolution texture pack.\n"
"Gamma correct downscaling is not supported."
msgstr ""
@@ -7086,7 +7463,8 @@ msgid "Viewing range"
msgstr "Raggio visivo"
#: src/settings_translation_file.cpp
-msgid "Virtual joystick triggers aux button"
+#, fuzzy
+msgid "Virtual joystick triggers Aux1 button"
msgstr "Il joystick virtuale attiva il pulsante aux"
#: src/settings_translation_file.cpp
@@ -7166,6 +7544,10 @@ msgid "Waving plants"
msgstr "Piante ondeggianti"
#: src/settings_translation_file.cpp
+msgid "Weblink color"
+msgstr "Colore del link web"
+
+#: 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"
@@ -7194,9 +7576,8 @@ msgid ""
"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.\n"
+"memory. Powers of 2 are recommended. This setting is ONLY applied if\n"
+"bilinear/trilinear/anisotropic filtering is enabled.\n"
"This is also used as the base node texture size for world-aligned\n"
"texture autoscaling."
msgstr ""
@@ -7205,30 +7586,20 @@ msgstr ""
"possono essere sfocate, così viene eseguito l'ingrandimento automatico con "
"l'interpolazione nearest-neighbor\n"
"per conservare pixel chiari. Questo imposta la dimensione minima delle "
-"immagini\n"
+"texture\n"
"per le texture ingrandite; valori più alti hanno un aspetto più nitido, ma "
"richiedono più memoria.\n"
-"Sono raccomandate le potenze di 2. Impostarla a un valore maggiore di 1 "
-"potrebbe non avere\n"
-"un effetto visibile, a meno che il filtraggio bilineare/trilineare/"
-"anisotropico sia abilitato.\n"
+"Sono raccomandate le potenze di 2. Questa impostazione è SOLO applicabile "
+"se\n"
+"il filtraggio bilineare/trilineare/anisotropico è abilitato.\n"
"Questo viene anche usato come dimensione di base per le immagini\n"
"dei nodi per l'autoridimensionamento delle immagini con allineamento\n"
"relativo al mondo."
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
-"Whether FreeType fonts are used, requires FreeType support to be compiled "
-"in.\n"
-"If disabled, bitmap and XML vectors fonts are used instead."
-msgstr ""
-"Se si usano caratteri FreeType, richiede la compilazione col supporto "
-"FreeType.\n"
-"Se disabilitati, si utilizzano invece i caratteri bitmap e XML vettoriali."
-
-#: src/settings_translation_file.cpp
-msgid ""
-"Whether nametag backgrounds should be shown by default.\n"
+"Whether name tag backgrounds should be shown by default.\n"
"Mods may still set a background."
msgstr ""
"Se lo sfondo del nome deve essere mostrato per impostazione predefinita.\n"
@@ -7286,8 +7657,10 @@ msgstr ""
"premere F5)."
#: src/settings_translation_file.cpp
-msgid "Width component of the initial window size."
-msgstr "Componente larghezza della dimensione iniziale della finestra."
+msgid "Width component of the initial window size. Ignored in fullscreen mode."
+msgstr ""
+"Componente larghezza della dimensione iniziale della finestra. Ignorata in "
+"modalità a schermo intero."
#: src/settings_translation_file.cpp
msgid "Width of the selection box lines around nodes."
@@ -7393,48 +7766,23 @@ msgid "Y-level of seabed."
msgstr "Livello Y del fondale marino."
#: src/settings_translation_file.cpp
-msgid ""
-"ZLib compression level to use when saving mapblocks to disk.\n"
-"-1 - Zlib's default compression level\n"
-"0 - no compresson, fastest\n"
-"9 - best compression, slowest\n"
-"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)"
-msgstr ""
-"Livello di compressione ZLib da utilizzare quando si salvano i blocchi mappa "
-"su disco.\n"
-"-1 - Livello di compressione predefinito di Zlib\n"
-"0 - nessuna compressione, più veloce\n"
-"9 - migliore compressione, più lenta\n"
-"(i livelli 1-3 usano il metodo \"veloce\" di Zlib, 4-9 usano il metodo "
-"normale)"
-
-#: src/settings_translation_file.cpp
-msgid ""
-"ZLib compression level to use when sending mapblocks to the client.\n"
-"-1 - Zlib's default compression level\n"
-"0 - no compresson, fastest\n"
-"9 - best compression, slowest\n"
-"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)"
-msgstr ""
-"Livello di compressione ZLib da utilizzare quando si inviano i blocchi mappa "
-"al client.\n"
-"-1 - Livello di compressione predefinito di Zlib\n"
-"0 - nessuna compressione, più veloce\n"
-"9 - migliore compressione, più lenta\n"
-"(i livelli 1-3 usano il metodo \"veloce\" di Zlib, 4-9 usano il metodo "
-"normale)"
-
-#: src/settings_translation_file.cpp
msgid "cURL file download timeout"
msgstr "Scadenza cURL scaricamento file"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "cURL interactive timeout"
+msgstr "Scadenza cURL"
+
+#: src/settings_translation_file.cpp
msgid "cURL parallel limit"
msgstr "Limite parallelo cURL"
-#: src/settings_translation_file.cpp
-msgid "cURL timeout"
-msgstr "Scadenza cURL"
+#~ msgid "- Creative Mode: "
+#~ msgstr "- Modalità creativa: "
+
+#~ msgid "- Damage: "
+#~ msgstr "- Ferimento: "
#~ msgid ""
#~ "0 = parallax occlusion with slope information (faster).\n"
@@ -7444,6 +7792,9 @@ msgstr "Scadenza cURL"
#~ "veloce).\n"
#~ "1 = relief mapping (più lenta, più accurata)."
+#~ msgid "Address / Port"
+#~ msgstr "Indirizzo / Porta"
+
#~ msgid ""
#~ "Adjust the gamma encoding for the light tables. Higher numbers are "
#~ "brighter.\n"
@@ -7464,6 +7815,9 @@ msgstr "Scadenza cURL"
#~ msgid "Back"
#~ msgstr "Indietro"
+#~ msgid "Bits per pixel (aka color depth) in fullscreen mode."
+#~ msgstr "Bit per pixel (o profondità di colore) in modalità schermo intero."
+
#~ msgid "Bump Mapping"
#~ msgstr "Bump Mapping"
@@ -7507,13 +7861,26 @@ msgstr "Scadenza cURL"
#~ "Controlla la larghezza delle gallerie, un valore più piccolo crea "
#~ "gallerie più larghe."
+#~ msgid "Credits"
+#~ msgstr "Riconoscimenti"
+
#~ msgid "Crosshair color (R,G,B)."
#~ msgstr "Colore del mirino (R,G,B)."
+#~ msgid "Damage enabled"
+#~ msgstr "Danno fisico abilitato"
+
#~ msgid "Darkness sharpness"
#~ msgstr "Nitidezza dell'oscurità"
#~ msgid ""
+#~ "Default timeout for cURL, stated in milliseconds.\n"
+#~ "Only has an effect if compiled with cURL."
+#~ msgstr ""
+#~ "Scadenza predefinita per cURL, fissata in millisecondi.\n"
+#~ "Ha effetto solo se Minetest è stato compilato con cURL."
+
+#~ msgid ""
#~ "Defines areas of floatland smooth terrain.\n"
#~ "Smooth floatlands occur when noise > 0."
#~ msgstr ""
@@ -7579,6 +7946,15 @@ msgstr "Scadenza cURL"
#~ msgid "FPS in pause menu"
#~ msgstr "FPS nel menu di pausa"
+#~ msgid "Fallback font shadow"
+#~ msgstr "Ombreggiatura del carattere di ripiego"
+
+#~ msgid "Fallback font shadow alpha"
+#~ msgstr "Trasparenza del carattere di ripiego"
+
+#~ msgid "Fallback font size"
+#~ msgstr "Dimensione del carattere di ripiego"
+
#~ msgid "Floatland base height noise"
#~ msgstr "Rumore base dell'altezza delle terre fluttuanti"
@@ -7588,6 +7964,15 @@ msgstr "Scadenza cURL"
#~ msgid "Font shadow alpha (opaqueness, between 0 and 255)."
#~ msgstr "Trasparenza ombreggiatura carattere (opacità, tra 0 e 255)."
+#~ msgid "Font size of the fallback font in point (pt)."
+#~ msgstr "Dimensione carattere del carattere di ripiego, in punti (pt)."
+
+#~ msgid "FreeType fonts"
+#~ msgstr "Caratteri FreeType"
+
+#~ msgid "Full screen BPP"
+#~ msgstr "BPP dello schermo intero"
+
#~ msgid "Gamma"
#~ msgstr "Gamma"
@@ -7597,9 +7982,15 @@ msgstr "Scadenza cURL"
#~ msgid "Generate normalmaps"
#~ msgstr "Generare le normalmap"
+#~ msgid "High-precision FPU"
+#~ msgstr "FPU ad alta precisione"
+
#~ msgid "IPv6 support."
#~ msgstr "Supporto IPv6."
+#~ msgid "Install: file: \"$1\""
+#~ msgstr "Install: File: \"$1\""
+
#~ msgid "Lava depth"
#~ msgstr "Profondità della lava"
@@ -7615,6 +8006,9 @@ msgstr "Scadenza cURL"
#~ msgid "Main menu style"
#~ msgstr "Stile del menu principale"
+#~ msgid "Makes DirectX work with LuaJIT. Disable if it causes troubles."
+#~ msgstr "Fa lavorare DirectX con LuaJIT. Disabilitare se provoca problemi."
+
#~ msgid "Minimap in radar mode, Zoom x2"
#~ msgstr "Minimappa in modalità radar, ingrandimento x2"
@@ -7627,6 +8021,9 @@ msgstr "Scadenza cURL"
#~ msgid "Minimap in surface mode, Zoom x4"
#~ msgstr "Minimappa in modalità superficie, ingrandimento x4"
+#~ msgid "Name / Password"
+#~ msgstr "Nome / Password"
+
#~ msgid "Name/Password"
#~ msgstr "Nome/Password"
@@ -7645,6 +8042,12 @@ msgstr "Scadenza cURL"
#~ msgid "Ok"
#~ msgstr "OK"
+#~ msgid ""
+#~ "Opaqueness (alpha) of the shadow behind the fallback font, between 0 and "
+#~ "255."
+#~ msgstr ""
+#~ "Opacità (alfa) dell'ombra dietro il carattere di riserva, tra 0 e 255."
+
#~ msgid "Overall bias of parallax occlusion effect, usually scale/2."
#~ msgstr ""
#~ "Deviazione complessiva dell'effetto di occlusione di parallasse, "
@@ -7683,6 +8086,9 @@ msgstr "Scadenza cURL"
#~ msgid "Projecting dungeons"
#~ msgstr "Sotterranei protundenti"
+#~ msgid "PvP enabled"
+#~ msgstr "PvP abilitato"
+
#~ msgid "Reset singleplayer world"
#~ msgstr "Azzera mondo locale"
@@ -7692,6 +8098,19 @@ msgstr "Scadenza cURL"
#~ msgid "Shadow limit"
#~ msgstr "Limite dell'ombra"
+#~ msgid ""
+#~ "Shadow offset (in pixels) of the fallback font. If 0, then shadow will "
+#~ "not be drawn."
+#~ msgstr ""
+#~ "Scarto (in pixel) dell'ombreggiatura del carattere di riserva. Se è 0, "
+#~ "allora l'ombra non sarà disegnata."
+
+#~ msgid "Special"
+#~ msgstr "Speciale"
+
+#~ msgid "Special key"
+#~ msgstr "Tasto speciale"
+
#~ msgid "Start Singleplayer"
#~ msgstr "Avvia in locale"
@@ -7704,6 +8123,9 @@ msgstr "Scadenza cURL"
#~ msgid "This font will be used for certain languages."
#~ msgstr "Questo carattere sarà usato per certe Lingue."
+#~ msgid "To enable shaders the OpenGL driver needs to be used."
+#~ msgstr "Per abilitare gli shader si deve usare il driver OpenGL."
+
#~ msgid "Toggle Cinematic"
#~ msgstr "Scegli cinematica"
@@ -7727,6 +8149,15 @@ msgstr "Scadenza cURL"
#~ msgid "Waving water"
#~ msgstr "Acqua ondeggiante"
+#~ msgid ""
+#~ "Whether FreeType fonts are used, requires FreeType support to be compiled "
+#~ "in.\n"
+#~ "If disabled, bitmap and XML vectors fonts are used instead."
+#~ msgstr ""
+#~ "Se si usano caratteri FreeType, richiede la compilazione col supporto "
+#~ "FreeType.\n"
+#~ "Se disabilitati, si utilizzano invece i caratteri bitmap e XML vettoriali."
+
#~ msgid "Whether dungeons occasionally project from the terrain."
#~ msgstr "Se i sotterranei saltuariamente si protendono dal terreno."
@@ -7743,3 +8174,10 @@ msgstr "Scadenza cURL"
#~ msgid "Yes"
#~ msgstr "Sì"
+
+#, fuzzy
+#~ msgid "You died."
+#~ msgstr "Sei morto"
+
+#~ msgid "needs_fallback_font"
+#~ msgstr "no"
diff --git a/po/ja/minetest.po b/po/ja/minetest.po
index 92df33b1f..722f8a728 100644
--- a/po/ja/minetest.po
+++ b/po/ja/minetest.po
@@ -2,8 +2,8 @@ msgid ""
msgstr ""
"Project-Id-Version: Japanese (Minetest)\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-02-23 19:03+0100\n"
-"PO-Revision-Date: 2021-04-08 18:26+0000\n"
+"POT-Creation-Date: 2022-01-25 23:19+0100\n"
+"PO-Revision-Date: 2022-01-29 21:28+0000\n"
"Last-Translator: BreadW <toshiharu.uno@gmail.com>\n"
"Language-Team: Japanese <https://hosted.weblate.org/projects/minetest/"
"minetest/ja/>\n"
@@ -12,7 +12,43 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
-"X-Generator: Weblate 4.6-dev\n"
+"X-Generator: Weblate 4.11-dev\n"
+
+#: builtin/client/chatcommands.lua
+msgid "Clear the out chat queue"
+msgstr "アウト ãƒãƒ£ãƒƒãƒˆ キューをクリアã™ã‚‹"
+
+#: builtin/client/chatcommands.lua
+msgid "Empty command."
+msgstr "空ã®ã‚³ãƒžãƒ³ãƒ‰ã§ã™ã€‚"
+
+#: builtin/client/chatcommands.lua
+msgid "Exit to main menu"
+msgstr "ãƒ¡ã‚¤ãƒ³ãƒ¡ãƒ‹ãƒ¥ãƒ¼ã«æˆ»ã‚‹"
+
+#: builtin/client/chatcommands.lua
+msgid "Invalid command: "
+msgstr "無効ãªã‚³ãƒžãƒ³ãƒ‰ï¼š "
+
+#: builtin/client/chatcommands.lua
+msgid "Issued command: "
+msgstr "発行ã•れãŸã‚³ãƒžãƒ³ãƒ‰ï¼š "
+
+#: builtin/client/chatcommands.lua
+msgid "List online players"
+msgstr "オンラインプレーヤーを一覧表示ã™ã‚‹"
+
+#: builtin/client/chatcommands.lua
+msgid "Online players: "
+msgstr "オンラインプレイヤー: "
+
+#: builtin/client/chatcommands.lua
+msgid "The out chat queue is now empty."
+msgstr "アウトãƒãƒ£ãƒƒãƒˆã‚­ãƒ¥ãƒ¼ã¯ç©ºã«ãªã‚Šã¾ã—ãŸã€‚"
+
+#: builtin/client/chatcommands.lua
+msgid "This command is disabled by server."
+msgstr "ã“ã®ã‚³ãƒžãƒ³ãƒ‰ã¯ã‚µãƒ¼ãƒã«ã‚ˆã£ã¦ç„¡åйã«ã•れã¦ã„ã¾ã™ã€‚"
#: builtin/client/death_formspec.lua src/client/game.cpp
msgid "Respawn"
@@ -22,11 +58,42 @@ msgstr "リスãƒãƒ¼ãƒ³"
msgid "You died"
msgstr "死んã§ã—ã¾ã£ãŸ"
+#: builtin/common/chatcommands.lua
+msgid "Available commands:"
+msgstr "使用å¯èƒ½ãªã‚³ãƒžãƒ³ãƒ‰ï¼š"
+
+#: builtin/common/chatcommands.lua
+msgid "Available commands: "
+msgstr "使用å¯èƒ½ãªã‚³ãƒžãƒ³ãƒ‰ï¼š "
+
+#: builtin/common/chatcommands.lua
+msgid "Command not available: "
+msgstr "コマンドã¯ä½¿ç”¨ã§ãã¾ã›ã‚“: "
+
+#: builtin/common/chatcommands.lua
+msgid "Get help for commands"
+msgstr "コマンドã®ãƒ˜ãƒ«ãƒ—を表示ã™ã‚‹"
+
+#: builtin/common/chatcommands.lua
+msgid ""
+"Use '.help <cmd>' to get more information, or '.help all' to list everything."
+msgstr ""
+"'.help <cmd>' を使用ã—ã¦è©³ç´°æƒ…報をå–å¾—ã™ã‚‹ã‹ã€ã¾ãŸã¯ '.help all' を使用ã—ã¦ã™"
+"ã¹ã¦ã‚’一覧表示ã—ã¾ã™ã€‚"
+
+#: builtin/common/chatcommands.lua
+msgid "[all | <cmd>]"
+msgstr "[all | <cmd>]"
+
#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp
msgid "OK"
msgstr "OK"
#: builtin/fstk/ui.lua
+msgid "<none available>"
+msgstr "<利用ã§ãã¾ã›ã‚“>"
+
+#: builtin/fstk/ui.lua
msgid "An error occurred in a Lua script:"
msgstr "Luaスクリプトã§ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸ:"
@@ -44,7 +111,7 @@ msgstr "å†æŽ¥ç¶š"
#: builtin/fstk/ui.lua
msgid "The server has requested a reconnect:"
-msgstr "サーãƒãŒå†æŽ¥ç¶šã‚’è¦æ±‚ã—ã¾ã—ãŸ:"
+msgstr "サーãƒãƒ¼ãŒå†æŽ¥ç¶šã‚’è¦æ±‚ã—ã¾ã—ãŸï¼š"
#: builtin/mainmenu/common.lua
msgid "Protocol version mismatch. "
@@ -52,11 +119,11 @@ msgstr "プロトコルã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ãŒä¸€è‡´ã—ã¦ã„ã¾ã›ã‚“。 "
#: builtin/mainmenu/common.lua
msgid "Server enforces protocol version $1. "
-msgstr "サーãƒã¯ãƒãƒ¼ã‚¸ãƒ§ãƒ³$1ã®ãƒ—ロトコルを強制ã—ã¦ã„ã¾ã™ã€‚ "
+msgstr "サーãƒãƒ¼ã¯ãƒãƒ¼ã‚¸ãƒ§ãƒ³$1ã®ãƒ—ロトコルを強制ã—ã¦ã„ã¾ã™ã€‚ "
#: builtin/mainmenu/common.lua
msgid "Server supports protocol versions between $1 and $2. "
-msgstr "サーãƒã¯$1ã‹ã‚‰$2ã¾ã§ã®ãƒ—ロトコルã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’サãƒãƒ¼ãƒˆã—ã¦ã„ã¾ã™ã€‚ "
+msgstr "サーãƒãƒ¼ã¯$1ã‹ã‚‰$2ã¾ã§ã®ãƒ—ロトコルã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’サãƒãƒ¼ãƒˆã—ã¦ã„ã¾ã™ã€‚ "
#: builtin/mainmenu/common.lua
msgid "We only support protocol version $1."
@@ -229,6 +296,10 @@ msgid "Install missing dependencies"
msgstr "ä¸è¶³ä¾å­˜Modインストール"
#: builtin/mainmenu/dlg_contentstore.lua
+msgid "Install: Unsupported file type or broken archive"
+msgstr "インストール: éžå¯¾å¿œã®ãƒ•ァイル形å¼ã‹ã€å£Šã‚ŒãŸã‚¢ãƒ¼ã‚«ã‚¤ãƒ–"
+
+#: builtin/mainmenu/dlg_contentstore.lua
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Mods"
msgstr "Mod"
@@ -531,7 +602,7 @@ msgstr "< è¨­å®šãƒšãƒ¼ã‚¸ã«æˆ»ã‚‹"
msgid "Browse"
msgstr "å‚ç…§"
-#: builtin/mainmenu/dlg_settings_advanced.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_settings.lua
msgid "Disabled"
msgstr "無効"
@@ -556,7 +627,7 @@ msgid "Offset"
msgstr "オフセット"
#: builtin/mainmenu/dlg_settings_advanced.lua
-msgid "Persistance"
+msgid "Persistence"
msgstr "永続性"
#: builtin/mainmenu/dlg_settings_advanced.lua
@@ -575,7 +646,7 @@ msgstr "åˆæœŸè¨­å®šã«æˆ»ã™"
msgid "Scale"
msgstr "スケール"
-#: builtin/mainmenu/dlg_settings_advanced.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_online.lua
msgid "Search"
msgstr "検索"
@@ -667,14 +738,6 @@ msgid "Install Mod: Unable to find suitable folder name for modpack $1"
msgstr "Modインストール: Modパック $1 ã«é©ã—ãŸãƒ•ォルダåãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“"
#: builtin/mainmenu/pkgmgr.lua
-msgid "Install: Unsupported file type \"$1\" or broken archive"
-msgstr "インストール: \"$1\"ã¯éžå¯¾å¿œã®ãƒ•ァイル形å¼ã‹ã€å£Šã‚ŒãŸã‚¢ãƒ¼ã‚«ã‚¤ãƒ–ã§ã™"
-
-#: builtin/mainmenu/pkgmgr.lua
-msgid "Install: file: \"$1\""
-msgstr "インストール: ファイル: \"$1\""
-
-#: builtin/mainmenu/pkgmgr.lua
msgid "Unable to find a valid mod or modpack"
msgstr "有効ãªModã¾ãŸã¯ModパックãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“"
@@ -700,11 +763,47 @@ msgstr "読ã¿è¾¼ã¿ä¸­..."
#: builtin/mainmenu/serverlistmgr.lua
msgid "Public server list is disabled"
-msgstr "公開サーãƒä¸€è¦§ã¯ç„¡åй"
+msgstr "公開サーãƒãƒ¼ä¸€è¦§ã¯ç„¡åй"
#: builtin/mainmenu/serverlistmgr.lua
msgid "Try reenabling public serverlist and check your internet connection."
-msgstr "インターãƒãƒƒãƒˆæŽ¥ç¶šã‚’確èªã—ã€å…¬é–‹ã‚µãƒ¼ãƒä¸€è¦§ã‚’冿œ‰åŠ¹åŒ–ã—ã¦ãã ã•ã„。"
+msgstr "インターãƒãƒƒãƒˆæŽ¥ç¶šã‚’確èªã—ã€å…¬é–‹ã‚µãƒ¼ãƒãƒ¼ä¸€è¦§ã‚’冿œ‰åŠ¹åŒ–ã—ã¦ãã ã•ã„。"
+
+#: builtin/mainmenu/tab_about.lua
+msgid "About"
+msgstr "情報"
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Active Contributors"
+msgstr "活動中ã®è²¢çŒ®è€…"
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Active renderer:"
+msgstr "アクティブãªãƒ¬ãƒ³ãƒ€ãƒ©ãƒ¼ï¼š"
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Core Developers"
+msgstr "開発者"
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Open User Data Directory"
+msgstr "ディレクトリを開ã"
+
+#: builtin/mainmenu/tab_about.lua
+msgid ""
+"Opens the directory that contains user-provided worlds, games, mods,\n"
+"and texture packs in a file manager / explorer."
+msgstr ""
+"ファイルマãƒãƒ¼ã‚¸ãƒ£ãƒ¼/エクスプローラーã§ã€ãƒ¯ãƒ¼ãƒ«ãƒ‰ã€ã‚²ãƒ¼ãƒ ã€Modã€\n"
+"ãŠã‚ˆã³ãƒ†ã‚¯ã‚¹ãƒãƒ£ãƒ‘ックをå«ã‚€ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã‚’é–‹ãã¾ã™ã€‚"
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Previous Contributors"
+msgstr "以å‰ã®è²¢çŒ®è€…"
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Previous Core Developers"
+msgstr "以å‰ã®é–‹ç™ºè€…"
#: builtin/mainmenu/tab_content.lua
msgid "Browse online content"
@@ -746,41 +845,9 @@ msgstr "パッケージを削除"
msgid "Use Texture Pack"
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 "Open User Data Directory"
-msgstr "ディレクトリを開ã"
-
-#: builtin/mainmenu/tab_credits.lua
-msgid ""
-"Opens the directory that contains user-provided worlds, games, mods,\n"
-"and texture packs in a file manager / explorer."
-msgstr ""
-"ファイルマãƒãƒ¼ã‚¸ãƒ£ãƒ¼/エクスプローラーã§ã€ãƒ¯ãƒ¼ãƒ«ãƒ‰ã€ã‚²ãƒ¼ãƒ ã€Modã€\n"
-"ãŠã‚ˆã³ãƒ†ã‚¯ã‚¹ãƒãƒ£ãƒ‘ックをå«ã‚€ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã‚’é–‹ãã¾ã™ã€‚"
-
-#: builtin/mainmenu/tab_credits.lua
-msgid "Previous Contributors"
-msgstr "以å‰ã®è²¢çŒ®è€…"
-
-#: builtin/mainmenu/tab_credits.lua
-msgid "Previous Core Developers"
-msgstr "以å‰ã®é–‹ç™ºè€…"
-
#: builtin/mainmenu/tab_local.lua
msgid "Announce Server"
-msgstr "公開サーãƒ"
+msgstr "公開サーãƒãƒ¼"
#: builtin/mainmenu/tab_local.lua
msgid "Bind Address"
@@ -800,13 +867,13 @@ msgstr "ゲームホスト"
#: builtin/mainmenu/tab_local.lua
msgid "Host Server"
-msgstr "ホストサーãƒ"
+msgstr "ホストサーãƒãƒ¼"
#: builtin/mainmenu/tab_local.lua
msgid "Install games from ContentDB"
msgstr "コンテンツDBã‹ã‚‰ã‚²ãƒ¼ãƒ ã‚’インストール"
-#: builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
msgid "Name"
msgstr "åå‰"
@@ -818,7 +885,7 @@ msgstr "æ–°è¦ä½œæˆ"
msgid "No world created or selected!"
msgstr "ワールドãŒä½œæˆã¾ãŸã¯é¸æŠžã•れã¦ã„ã¾ã›ã‚“ï¼"
-#: builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
msgid "Password"
msgstr "パスワード"
@@ -826,7 +893,7 @@ msgstr "パスワード"
msgid "Play Game"
msgstr "ゲームプレイ"
-#: builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
msgid "Port"
msgstr "ãƒãƒ¼ãƒˆ"
@@ -840,15 +907,19 @@ msgstr "ãƒ¯ãƒ¼ãƒ«ãƒ‰ã‚’é¸æŠž:"
#: builtin/mainmenu/tab_local.lua
msgid "Server Port"
-msgstr "サーãƒã®ãƒãƒ¼ãƒˆ"
+msgstr "サーãƒãƒ¼ã®ãƒãƒ¼ãƒˆ"
#: builtin/mainmenu/tab_local.lua
msgid "Start Game"
msgstr "ゲームスタート"
#: builtin/mainmenu/tab_online.lua
-msgid "Address / Port"
-msgstr "アドレス / ãƒãƒ¼ãƒˆ"
+msgid "Address"
+msgstr "アドレス"
+
+#: builtin/mainmenu/tab_online.lua src/client/keycode.cpp
+msgid "Clear"
+msgstr "Clear"
#: builtin/mainmenu/tab_online.lua
msgid "Connect"
@@ -858,34 +929,42 @@ msgstr "接続"
msgid "Creative mode"
msgstr "クリエイティブモード"
+#. ~ PvP = Player versus Player
#: builtin/mainmenu/tab_online.lua
-msgid "Damage enabled"
-msgstr "ダメージ有効"
+msgid "Damage / PvP"
+msgstr "ダメージ / PvP"
#: builtin/mainmenu/tab_online.lua
msgid "Del. Favorite"
msgstr "ãŠæ°—ã«å…¥ã‚Šå‰Šé™¤"
#: builtin/mainmenu/tab_online.lua
-msgid "Favorite"
+msgid "Favorites"
msgstr "ãŠæ°—ã«å…¥ã‚Š"
#: builtin/mainmenu/tab_online.lua
-msgid "Join Game"
-msgstr "ゲームã«å‚加"
+msgid "Incompatible Servers"
+msgstr "äº’æ›æ€§ã®ãªã„サーãƒ"
#: builtin/mainmenu/tab_online.lua
-msgid "Name / Password"
-msgstr "åå‰ / パスワード"
+msgid "Join Game"
+msgstr "ゲームã«å‚加"
#: builtin/mainmenu/tab_online.lua
msgid "Ping"
msgstr "応答速度"
-#. ~ PvP = Player versus Player
#: builtin/mainmenu/tab_online.lua
-msgid "PvP enabled"
-msgstr "PvP有効"
+msgid "Public Servers"
+msgstr "公開サーãƒãƒ¼"
+
+#: builtin/mainmenu/tab_online.lua
+msgid "Refresh"
+msgstr "å†èª­è¾¼"
+
+#: builtin/mainmenu/tab_online.lua
+msgid "Server Description"
+msgstr "サーãƒãƒ¼ã®èª¬æ˜Ž"
#: builtin/mainmenu/tab_settings.lua
msgid "2x"
@@ -927,11 +1006,31 @@ msgstr "キー変更"
msgid "Connected Glass"
msgstr "ガラスを繋ã’ã‚‹"
+#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
+msgid "Dynamic shadows"
+msgstr "å‹•çš„ãªå½±"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Dynamic shadows: "
+msgstr "å‹•çš„ãªå½±ï¼š "
+
#: builtin/mainmenu/tab_settings.lua
msgid "Fancy Leaves"
msgstr "綺麗ãªè‘‰"
#: builtin/mainmenu/tab_settings.lua
+msgid "High"
+msgstr "å¼·ã‚"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Low"
+msgstr "å¼±ã‚"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Medium"
+msgstr "普通"
+
+#: builtin/mainmenu/tab_settings.lua
msgid "Mipmap"
msgstr "ミップマップ"
@@ -1003,10 +1102,6 @@ msgstr "滑らã‹ãªå…‰"
msgid "Texturing:"
msgstr "テクスãƒãƒ£ãƒªãƒ³ã‚°:"
-#: builtin/mainmenu/tab_settings.lua
-msgid "To enable shaders the OpenGL driver needs to be used."
-msgstr "シェーダーを有効ã«ã™ã‚‹ã«ã¯OpenGLã®ãƒ‰ãƒ©ã‚¤ãƒã‚’使用ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚"
-
#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
msgid "Tone Mapping"
msgstr "トーンマッピング"
@@ -1020,6 +1115,14 @@ msgid "Trilinear Filter"
msgstr "トライリニアフィルタ"
#: builtin/mainmenu/tab_settings.lua
+msgid "Ultra High"
+msgstr "è¶…å¼·ã"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Very Low"
+msgstr "ã¨ã¦ã‚‚å¼±ã"
+
+#: builtin/mainmenu/tab_settings.lua
msgid "Waving Leaves"
msgstr "æºã‚Œã‚‹è‘‰"
@@ -1031,7 +1134,7 @@ msgstr "æºã‚Œã‚‹æ¶²ä½“"
msgid "Waving Plants"
msgstr "æºã‚Œã‚‹è‰èб"
-#: src/client/client.cpp
+#: src/client/client.cpp src/client/game.cpp
msgid "Connection timed out."
msgstr "接続ãŒã‚¿ã‚¤ãƒ ã‚¢ã‚¦ãƒˆã—ã¾ã—ãŸã€‚"
@@ -1060,8 +1163,8 @@ msgid "Connection error (timed out?)"
msgstr "接続エラー (タイムアウト?)"
#: src/client/clientlauncher.cpp
-msgid "Could not find or load game \""
-msgstr "以下ã®ã‚²ãƒ¼ãƒ ãŒè¦‹ã¤ã‹ã‚‰ãªã„ã‹èª­ã¿è¾¼ã‚ã¾ã›ã‚“ \""
+msgid "Could not find or load game: "
+msgstr "ゲームãŒè¦‹ã¤ã‹ã‚‰ãªã„ã‹èª­ã¿è¾¼ã‚ã¾ã›ã‚“: "
#: src/client/clientlauncher.cpp
msgid "Invalid gamespec."
@@ -1091,18 +1194,6 @@ msgstr "パスワードファイルを開ã‘ã¾ã›ã‚“ã§ã—ãŸ: "
msgid "Provided world path doesn't exist: "
msgstr "ワールドãŒå­˜åœ¨ã—ã¾ã›ã‚“: "
-#. ~ DO NOT TRANSLATE THIS LITERALLY!
-#. This is a special string. Put either "no" or "yes"
-#. into the translation field (literally).
-#. Choose "yes" if the language requires use of the fallback
-#. font, "no" otherwise.
-#. The fallback font is (normally) required for languages with
-#. non-Latin script, like Chinese.
-#. When in doubt, test your translation.
-#: src/client/fontengine.cpp
-msgid "needs_fallback_font"
-msgstr "yes"
-
#: src/client/game.cpp
msgid ""
"\n"
@@ -1116,14 +1207,6 @@ msgid "- Address: "
msgstr "- アドレス: "
#: src/client/game.cpp
-msgid "- Creative Mode: "
-msgstr "- クリエイティブモード: "
-
-#: src/client/game.cpp
-msgid "- Damage: "
-msgstr "- ダメージ: "
-
-#: src/client/game.cpp
msgid "- Mode: "
msgstr "- モード: "
@@ -1133,7 +1216,7 @@ msgstr "- ãƒãƒ¼ãƒˆ: "
#: src/client/game.cpp
msgid "- Public: "
-msgstr "- 公開サーãƒ: "
+msgstr "- 公開サーãƒãƒ¼: "
#. ~ PvP = Player versus Player
#: src/client/game.cpp
@@ -1142,7 +1225,16 @@ msgstr "- PvP: "
#: src/client/game.cpp
msgid "- Server Name: "
-msgstr "- サーãƒå: "
+msgstr "- サーãƒãƒ¼å: "
+
+#: src/client/game.cpp
+msgid "A serialization error occurred:"
+msgstr "シリアライズエラーãŒç™ºç”Ÿã—ã¾ã—ãŸ:"
+
+#: src/client/game.cpp
+#, c-format
+msgid "Access denied. Reason: %s"
+msgstr "ã‚¢ã‚¯ã‚»ã‚¹ãŒæ‹’å¦ã•れã¾ã—ãŸã€‚ç†ç”±: %s"
#: src/client/game.cpp
msgid "Automatic forward disabled"
@@ -1153,6 +1245,22 @@ msgid "Automatic forward enabled"
msgstr "自動å‰é€² 有効"
#: src/client/game.cpp
+msgid "Block bounds hidden"
+msgstr "ブロック境界線をéžè¡¨ç¤º"
+
+#: src/client/game.cpp
+msgid "Block bounds shown for all blocks"
+msgstr "ã™ã¹ã¦ã®ãƒ–ロックã«ãƒ–ロック境界線を表示"
+
+#: src/client/game.cpp
+msgid "Block bounds shown for current block"
+msgstr "ç¾åœ¨ã®ãƒ–ロックã«ãƒ–ロック境界を表示"
+
+#: src/client/game.cpp
+msgid "Block bounds shown for nearby blocks"
+msgstr "è¿‘ãã®ãƒ–ロックã«ãƒ–ロック境界を表示"
+
+#: src/client/game.cpp
msgid "Camera update disabled"
msgstr "カメラ更新 無効"
@@ -1161,6 +1269,10 @@ msgid "Camera update enabled"
msgstr "カメラ更新 有効"
#: src/client/game.cpp
+msgid "Can't show block bounds (need 'basic_debug' privilege)"
+msgstr "ブロック境界線を表示ã§ãã¾ã›ã‚“ ('basic_debug' 特権ãŒå¿…è¦ã§ã™)"
+
+#: src/client/game.cpp
msgid "Change Password"
msgstr "パスワード変更"
@@ -1173,12 +1285,20 @@ msgid "Cinematic mode enabled"
msgstr "映画風モード 有効"
#: src/client/game.cpp
+msgid "Client disconnected"
+msgstr "クライアントãŒåˆ‡æ–­ã•れã¾ã—ãŸ"
+
+#: src/client/game.cpp
msgid "Client side scripting is disabled"
msgstr "クライアントå´ã®ã‚¹ã‚¯ãƒªãƒ—トã¯ç„¡åй"
#: src/client/game.cpp
msgid "Connecting to server..."
-msgstr "サーãƒã«æŽ¥ç¶šä¸­..."
+msgstr "サーãƒãƒ¼ã«æŽ¥ç¶šä¸­..."
+
+#: src/client/game.cpp
+msgid "Connection failed for unknown reason"
+msgstr "未知ã®ç†ç”±ã§æŽ¥ç¶šã«å¤±æ•—ã—ã¾ã—ãŸ"
#: src/client/game.cpp
msgid "Continue"
@@ -1218,12 +1338,17 @@ msgstr ""
"- %s: ãƒãƒ£ãƒƒãƒˆ\n"
#: src/client/game.cpp
+#, c-format
+msgid "Couldn't resolve address: %s"
+msgstr "アドレスを解決ã§ãã¾ã›ã‚“ã§ã—ãŸ: %s"
+
+#: src/client/game.cpp
msgid "Creating client..."
msgstr "クライアントを作æˆä¸­..."
#: src/client/game.cpp
msgid "Creating server..."
-msgstr "サーãƒã‚’作æˆä¸­..."
+msgstr "サーãƒãƒ¼ã‚’作æˆä¸­..."
#: src/client/game.cpp
msgid "Debug info and profiler graph hidden"
@@ -1323,7 +1448,7 @@ msgstr "ãƒãƒ¼ã‚ºãƒ¡ãƒ‹ãƒ¥ãƒ¼"
#: src/client/game.cpp
msgid "Hosting server"
-msgstr "ホスティングサーãƒ"
+msgstr "ホスティングサーãƒãƒ¼"
#: src/client/game.cpp
msgid "Item definitions..."
@@ -1346,6 +1471,10 @@ msgid "Minimap currently disabled by game or mod"
msgstr "ミニマップã¯ç¾åœ¨ã‚²ãƒ¼ãƒ ã¾ãŸã¯Modã«ã‚ˆã‚Šç„¡åй"
#: src/client/game.cpp
+msgid "Multiplayer"
+msgstr "マルãƒãƒ—レイヤー"
+
+#: src/client/game.cpp
msgid "Noclip mode disabled"
msgstr "ã™ã‚ŠæŠœã‘モード 無効"
@@ -1383,7 +1512,7 @@ msgstr "観測記録グラフ 表示"
#: src/client/game.cpp
msgid "Remote server"
-msgstr "リモートサーãƒ"
+msgstr "リモートサーãƒãƒ¼"
#: src/client/game.cpp
msgid "Resolving address..."
@@ -1419,6 +1548,21 @@ msgstr "消音 å–り消ã—"
#: src/client/game.cpp
#, c-format
+msgid "The server is probably running a different version of %s."
+msgstr "サーãƒãƒ¼ãŒåˆ¥ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ %s を実行ã—ã¦ã„ã‚‹å¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚"
+
+#: src/client/game.cpp
+#, c-format
+msgid "Unable to connect to %s because IPv6 is disabled"
+msgstr "IPv6ãŒç„¡åйãªãŸã‚ã€%sã«æŽ¥ç¶šã§ãã¾ã›ã‚“"
+
+#: src/client/game.cpp
+#, c-format
+msgid "Unable to listen on %s because IPv6 is disabled"
+msgstr "IPv6ãŒç„¡åйãªãŸã‚ã€%sã§ãƒªãƒƒã‚¹ãƒ³ã§ãã¾ã›ã‚“"
+
+#: src/client/game.cpp
+#, c-format
msgid "Viewing range changed to %d"
msgstr "視野を %d ã«å¤‰æ›´"
@@ -1487,10 +1631,6 @@ msgid "Caps Lock"
msgstr "Caps Lock"
#: src/client/keycode.cpp
-msgid "Clear"
-msgstr "Clear"
-
-#: src/client/keycode.cpp
msgid "Control"
msgstr "Ctrl"
@@ -1755,6 +1895,14 @@ msgstr "ミニマップ 表é¢ãƒ¢ãƒ¼ãƒ‰ã€ã‚ºãƒ¼ãƒ  x%d"
msgid "Minimap in texture mode"
msgstr "ミニマップ テクスãƒãƒ£ãƒ¢ãƒ¼ãƒ‰"
+#: src/gui/guiChatConsole.cpp
+msgid "Failed to open webpage"
+msgstr "ウェブページを開ã‘ã¾ã›ã‚“ã§ã—ãŸ"
+
+#: src/gui/guiChatConsole.cpp
+msgid "Opening webpage"
+msgstr "ウェブページを開ã„ã¦ã„ã¾ã™"
+
#: src/gui/guiConfirmRegistration.cpp src/gui/guiPasswordChange.cpp
msgid "Passwords do not match!"
msgstr "パスワードãŒä¸€è‡´ã—ã¾ã›ã‚“ï¼"
@@ -1772,8 +1920,8 @@ msgid ""
"Please retype your password and click 'Register and Join' to confirm account "
"creation, or click 'Cancel' to abort."
msgstr ""
-"ã‚ãªãŸã¯ã“ã®ã‚µãƒ¼ãƒ ã«åå‰ \"%s\" ã§åˆã‚ã¦å‚加ã—よã†ã¨ã—ã¦ã„ã¾ã™ã€‚\n"
-"続行ã™ã‚‹å ´åˆã€ã‚ãªãŸã®æƒ…å ±ãŒæ–°ã—ã„アカウントã¨ã—ã¦ã“ã®ã‚µãƒ¼ãƒã«ä½œæˆã•れã¾"
+"ã‚ãªãŸã¯ã“ã®ã‚µãƒ¼ãƒ ーã«åå‰ \"%s\" ã§ã¯ã˜ã‚ã¦å‚加ã—よã†ã¨ã—ã¦ã„ã¾ã™ã€‚\n"
+"続行ã™ã‚‹å ´åˆã€ã‚ãªãŸã®æƒ…å ±ãŒæ–°ã—ã„アカウントã¨ã—ã¦ã“ã®ã‚µãƒ¼ãƒãƒ¼ã«ä½œæˆã•れã¾"
"ã™ã€‚\n"
"ã‚ãªãŸã®ãƒ‘スワードをå†å…¥åŠ›ã—ã¦ã‹ã‚‰ 'å‚加登録' をクリックã—ã¦ã‚¢ã‚«ã‚¦ãƒ³ãƒˆä½œæˆã™"
"ã‚‹ã‹ã€\n"
@@ -1784,7 +1932,7 @@ msgid "Proceed"
msgstr "決定"
#: src/gui/guiKeyChangeMenu.cpp
-msgid "\"Special\" = climb down"
+msgid "\"Aux1\" = climb down"
msgstr "\"スペシャル\" = é™ã‚Šã‚‹"
#: src/gui/guiKeyChangeMenu.cpp
@@ -1796,10 +1944,18 @@ msgid "Automatic jumping"
msgstr "自動ジャンプ"
#: src/gui/guiKeyChangeMenu.cpp
+msgid "Aux1"
+msgstr "Aux1"
+
+#: src/gui/guiKeyChangeMenu.cpp
msgid "Backward"
msgstr "後退"
#: src/gui/guiKeyChangeMenu.cpp
+msgid "Block bounds"
+msgstr "ブロック境界線表示切替"
+
+#: src/gui/guiKeyChangeMenu.cpp
msgid "Change camera"
msgstr "視点変更"
@@ -1890,10 +2046,6 @@ msgid "Sneak"
msgstr "スニーク"
#: src/gui/guiKeyChangeMenu.cpp
-msgid "Special"
-msgstr "スペシャル"
-
-#: src/gui/guiKeyChangeMenu.cpp
msgid "Toggle HUD"
msgstr "HUD表示切替"
@@ -1954,8 +2106,9 @@ msgid "Muted"
msgstr "消音"
#: src/gui/guiVolumeChange.cpp
-msgid "Sound Volume: "
-msgstr "音é‡: "
+#, c-format
+msgid "Sound Volume: %d%%"
+msgstr "音é‡: %d%%"
#. ~ Imperative, as in "Enter/type in text".
#. Don't forget the space.
@@ -1980,13 +2133,13 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"(Android) Use virtual joystick to trigger \"aux\" button.\n"
-"If enabled, virtual joystick will also tap \"aux\" button when out of main "
+"(Android) Use virtual joystick to trigger \"Aux1\" button.\n"
+"If enabled, virtual joystick will also tap \"Aux1\" button when out of main "
"circle."
msgstr ""
-"(Android) ãƒãƒ¼ãƒãƒ£ãƒ«ãƒ‘ッドを使用ã—ã¦\"aux\"ボタンを起動ã—ã¾ã™ã€‚\n"
+"(Android) ãƒãƒ¼ãƒãƒ£ãƒ«ãƒ‘ッドを使用ã—ã¦\"Aux1\"ボタンを起動ã—ã¾ã™ã€‚\n"
"有効ã«ã—ãŸå ´åˆã€ãƒãƒ¼ãƒãƒ£ãƒ«ãƒ‘ッドã¯ãƒ¡ã‚¤ãƒ³ã‚µãƒ¼ã‚¯ãƒ«ã‹ã‚‰å¤–れãŸã¨ãã«ã‚‚\n"
-"\"aux\"ボタンをタップã—ã¾ã™ã€‚"
+"\"Aux1\"ボタンをタップã—ã¾ã™ã€‚"
#: src/settings_translation_file.cpp
msgid ""
@@ -2139,11 +2292,11 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "A message to be displayed to all clients when the server crashes."
-msgstr "サーãƒã‚¯ãƒ©ãƒƒã‚·ãƒ¥æ™‚ã«å…¨ã¦ã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã¸è¡¨ç¤ºã™ã‚‹ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã€‚"
+msgstr "サーãƒãƒ¼ã‚¯ãƒ©ãƒƒã‚·ãƒ¥æ™‚ã«ã™ã¹ã¦ã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã¸è¡¨ç¤ºã™ã‚‹ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã€‚"
#: src/settings_translation_file.cpp
msgid "A message to be displayed to all clients when the server shuts down."
-msgstr "サーãƒçµ‚了時ã«å…¨ã¦ã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã¸è¡¨ç¤ºã™ã‚‹ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã€‚"
+msgstr "サーãƒãƒ¼çµ‚了時ã«ã™ã¹ã¦ã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã¸è¡¨ç¤ºã™ã‚‹ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã€‚"
#: src/settings_translation_file.cpp
msgid "ABM interval"
@@ -2188,7 +2341,7 @@ msgid ""
"Note that the address field in the main menu overrides this setting."
msgstr ""
"接続先ã®ã‚¢ãƒ‰ãƒ¬ã‚¹ã§ã™ã€‚\n"
-"ローカルサーãƒã‚’èµ·å‹•ã™ã‚‹éš›ã¯ç©ºç™½ã«è¨­å®šã—ã¦ãã ã•ã„。\n"
+"ローカルサーãƒãƒ¼ã‚’èµ·å‹•ã™ã‚‹éš›ã¯ç©ºç™½ã«è¨­å®šã—ã¦ãã ã•ã„。\n"
"メインメニューã®ã‚¢ãƒ‰ãƒ¬ã‚¹æ¬„ã¯ã“ã®è¨­å®šã‚’上書ãã™ã‚‹ã“ã¨ã«æ³¨æ„ã—ã¦ãã ã•ã„。"
#: src/settings_translation_file.cpp
@@ -2203,6 +2356,11 @@ msgstr ""
"4kスクリーンãªã©ã®ãŸã‚ã®ã€ç”»é¢ã®è§£åƒåº¦ã®è¨­å®šã§ã™ (éžX11/Android環境ã®ã¿)。"
#: src/settings_translation_file.cpp
+msgid "Adjust the detected display density, used for scaling UI elements."
+msgstr ""
+"検出ã•れãŸãƒ‡ã‚£ã‚¹ãƒ—レイã®å¯†åº¦ã‚’調整ã—ã€UIè¦ç´ ã®ã‚¹ã‚±ãƒ¼ãƒªãƒ³ã‚°ã«ä½¿ç”¨ã—ã¾ã™ã€‚"
+
+#: src/settings_translation_file.cpp
#, c-format
msgid ""
"Adjusts the density of the floatland layer.\n"
@@ -2257,11 +2415,11 @@ msgstr "異方性フィルタリング"
#: src/settings_translation_file.cpp
msgid "Announce server"
-msgstr "サーãƒã‚’公開"
+msgstr "サーãƒãƒ¼ã‚’公開"
#: src/settings_translation_file.cpp
msgid "Announce to this serverlist."
-msgstr "ã“ã®ã‚µãƒ¼ãƒä¸€è¦§ã«å‘ŠçŸ¥ã—ã¾ã™ã€‚"
+msgstr "ã“ã®ã‚µãƒ¼ãƒãƒ¼ä¸€è¦§ã«å‘ŠçŸ¥ã—ã¾ã™ã€‚"
#: src/settings_translation_file.cpp
msgid "Append item name"
@@ -2305,11 +2463,11 @@ msgid ""
"optimization.\n"
"Stated in mapblocks (16 nodes)."
msgstr ""
-"ã“ã®è·é›¢ã§ã‚µãƒ¼ãƒã¯ã©ã®ãƒ–ロックをクライアントã¸é€ä¿¡ã™ã‚‹ã‹ã‚’ç©æ¥µçš„ã«\n"
+"ã“ã®è·é›¢ã§ã‚µãƒ¼ãƒãƒ¼ã¯ã©ã®ãƒ–ロックをクライアントã¸é€ä¿¡ã™ã‚‹ã‹ã‚’ç©æ¥µçš„ã«\n"
"最é©åŒ–ã—ã¾ã™ã€‚\n"
-"å°ã•ã„値ã«è¨­å®šã™ã‚‹ã¨ã€ãƒ¬ãƒ³ãƒ€ãƒªãƒ³ã‚°ã®è¦–覚的ãªä¸å…·åˆã‚’犠牲ã«ã—ã¦ã€\n"
+"å°ã•ã„値ã«è¨­å®šã™ã‚‹ã¨ã€æç”»ã®è¦–覚的ãªä¸å…·åˆã‚’犠牲ã«ã—ã¦ã€\n"
"パフォーマンスãŒå¤§å¹…ã«å‘上ã™ã‚‹å¯èƒ½æ€§ãŒã‚りã¾ã™(ã„ãã¤ã‹ã®ãƒ–ロックã¯\n"
-"æ°´ä¸­ã‚„æ´žçªŸã€æ™‚ã«ã¯é™¸ã®ä¸Šã§ã‚‚レンダリングã•れã¾ã›ã‚“)。\n"
+"æ°´ä¸­ã‚„æ´žçªŸã€æ™‚ã«ã¯é™¸ã®ä¸Šã§ã‚‚æç”»ã•れã¾ã›ã‚“)。\n"
"max_block_send_distance より大ãã„値ã«è¨­å®šã™ã‚‹ã¨ã€ã“ã®æœ€é©åŒ–ã¯\n"
"無効ã«ãªã‚Šã¾ã™ã€‚ \n"
"マップブロック(16ノード)ã§è¡¨è¨˜ã€‚"
@@ -2324,7 +2482,7 @@ msgstr "自動的ã«1ノードã®éšœå®³ç‰©ã‚’ジャンプã—ã¾ã™ã€‚"
#: src/settings_translation_file.cpp
msgid "Automatically report to the serverlist."
-msgstr "サーãƒä¸€è¦§ã«è‡ªå‹•çš„ã«å ±å‘Šã—ã¾ã™ã€‚"
+msgstr "サーãƒãƒ¼ä¸€è¦§ã«è‡ªå‹•çš„ã«å ±å‘Šã—ã¾ã™ã€‚"
#: src/settings_translation_file.cpp
msgid "Autosave screen size"
@@ -2335,6 +2493,14 @@ msgid "Autoscaling mode"
msgstr "自動拡大縮å°ãƒ¢ãƒ¼ãƒ‰"
#: src/settings_translation_file.cpp
+msgid "Aux1 key"
+msgstr "Aux1キー"
+
+#: src/settings_translation_file.cpp
+msgid "Aux1 key for climbing/descending"
+msgstr "昇é™ç”¨ã®Aux1キー"
+
+#: src/settings_translation_file.cpp
msgid "Backward key"
msgstr "後退キー"
@@ -2379,10 +2545,6 @@ msgid "Biome noise"
msgstr "ãƒã‚¤ã‚ªãƒ¼ãƒ ãƒŽã‚¤ã‚º"
#: src/settings_translation_file.cpp
-msgid "Bits per pixel (aka color depth) in fullscreen mode."
-msgstr "フルスクリーンモードã§ã®ãƒ“ット数(色深度)。"
-
-#: src/settings_translation_file.cpp
msgid "Block send optimize distance"
msgstr "ブロックé€ä¿¡æœ€é©åŒ–è·é›¢"
@@ -2488,6 +2650,14 @@ msgstr ""
"0.0ã¯æœ€å°å…‰ãƒ¬ãƒ™ãƒ«ã€1.0ã¯æœ€å¤§å…‰ãƒ¬ãƒ™ãƒ«ã§ã™ã€‚"
#: src/settings_translation_file.cpp
+msgid "Chat command time message threshold"
+msgstr "ãƒãƒ£ãƒƒãƒˆã‚³ãƒžãƒ³ãƒ‰æ™‚間切れメッセージã®ã—ãã„値"
+
+#: src/settings_translation_file.cpp
+msgid "Chat commands"
+msgstr "ãƒãƒ£ãƒƒãƒˆã‚³ãƒžãƒ³ãƒ‰"
+
+#: src/settings_translation_file.cpp
msgid "Chat font size"
msgstr "ãƒãƒ£ãƒƒãƒˆã®ãƒ•ォントサイズ"
@@ -2520,8 +2690,8 @@ msgid "Chat toggle key"
msgstr "ãƒãƒ£ãƒƒãƒˆåˆ‡æ›¿ã‚­ãƒ¼"
#: src/settings_translation_file.cpp
-msgid "Chatcommands"
-msgstr "ãƒãƒ£ãƒƒãƒˆã‚³ãƒžãƒ³ãƒ‰"
+msgid "Chat weblinks"
+msgstr "ãƒãƒ£ãƒƒãƒˆã®ã‚¦ã‚§ãƒ–リンク"
#: src/settings_translation_file.cpp
msgid "Chunk size"
@@ -2540,12 +2710,20 @@ msgid "Clean transparent textures"
msgstr "テクスãƒãƒ£ã®é€éŽã‚’削除"
#: src/settings_translation_file.cpp
+msgid ""
+"Clickable weblinks (middle-click or Ctrl+left-click) enabled in chat console "
+"output."
+msgstr ""
+"ãƒãƒ£ãƒƒãƒˆã‚³ãƒ³ã‚½ãƒ¼ãƒ«ã®å‡ºåŠ›ã§ã€ã‚¯ãƒªãƒƒã‚¯å¯èƒ½ãªã‚¦ã‚§ãƒ–リンク(中クリックã¾ãŸã¯Ctrl"
+"+左クリック)を有効ã«ãªã‚Šã¾ã™ã€‚"
+
+#: src/settings_translation_file.cpp
msgid "Client"
msgstr "クライアント"
#: src/settings_translation_file.cpp
msgid "Client and Server"
-msgstr "クライアントã¨ã‚µãƒ¼ãƒ"
+msgstr "クライアントã¨ã‚µãƒ¼ãƒãƒ¼"
#: src/settings_translation_file.cpp
msgid "Client modding"
@@ -2584,6 +2762,10 @@ msgid "Colored fog"
msgstr "色ã¤ãã®éœ§"
#: src/settings_translation_file.cpp
+msgid "Colored shadows"
+msgstr "色ã¤ãã®å½±"
+
+#: src/settings_translation_file.cpp
msgid ""
"Comma-separated list of flags to hide in the content repository.\n"
"\"nonfree\" can be used to hide packages which do not qualify as 'free "
@@ -2623,12 +2805,36 @@ msgid "Command key"
msgstr "コマンドキー"
#: src/settings_translation_file.cpp
+msgid ""
+"Compression level to use when saving mapblocks to disk.\n"
+"-1 - use default compression level\n"
+"0 - least compression, fastest\n"
+"9 - best compression, slowest"
+msgstr ""
+"マップブロックをディスクã«ä¿å­˜ã™ã‚‹ã¨ãã«ä½¿ç”¨ã™ã‚‹åœ§ç¸®ãƒ¬ãƒ™ãƒ«ã€‚\n"
+"-1 - è¦å®šã®åœ§ç¸®ãƒ¬ãƒ™ãƒ«ã‚’使用\n"
+"0 - 最å°ã®åœ§ç¸®ã€æœ€ã‚‚速ã„\n"
+"9 - 最高ã®åœ§ç¸®ã€æœ€ã‚‚é…ã„"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Compression level to use when sending mapblocks to the client.\n"
+"-1 - use default compression level\n"
+"0 - least compression, fastest\n"
+"9 - best compression, slowest"
+msgstr ""
+"マップブロックをクライアントã«é€ä¿¡ã™ã‚‹ã¨ãã«ä½¿ç”¨ã™ã‚‹åœ§ç¸®ãƒ¬ãƒ™ãƒ«ã€‚\n"
+"-1 - è¦å®šã®åœ§ç¸®ãƒ¬ãƒ™ãƒ«ã‚’使用\n"
+"0 - 最å°ã®åœ§ç¸®ã€æœ€ã‚‚速ã„\n"
+"9 - 最高ã®åœ§ç¸®ã€æœ€ã‚‚é…ã„"
+
+#: src/settings_translation_file.cpp
msgid "Connect glass"
msgstr "ガラスを繋ã’ã‚‹"
#: src/settings_translation_file.cpp
msgid "Connect to external media server"
-msgstr "外部メディアサーãƒã«æŽ¥ç¶š"
+msgstr "外部メディアサーãƒãƒ¼ã«æŽ¥ç¶š"
#: src/settings_translation_file.cpp
msgid "Connects glass if supported by node."
@@ -2721,10 +2927,10 @@ msgstr "å字カーソルã®é€éŽåº¦"
#: src/settings_translation_file.cpp
msgid ""
"Crosshair alpha (opaqueness, between 0 and 255).\n"
-"Also controls the object crosshair color"
+"This also applies to the object crosshair."
msgstr ""
"å字カーソルã®é€éŽåº¦ï¼ˆä¸é€æ˜Žã€0~255ã®é–“)。\n"
-"オブジェクトå字カーソルã®è‰²ã‚‚制御"
+"ã“れã¯ã‚ªãƒ–ジェクトã®å字カーソルã«ã‚‚é©ç”¨ã•れã¾ã™ã€‚"
#: src/settings_translation_file.cpp
msgid "Crosshair color"
@@ -2768,7 +2974,7 @@ msgstr "ã“ã®å€¤ã‚’å°ã•ãã™ã‚‹ã¨ã€ç§»å‹•æ™‚ã®æ¶²ä½“抵抗ãŒå¢—加ã—ã¾
#: src/settings_translation_file.cpp
msgid "Dedicated server step"
-msgstr "専用サーãƒã‚¹ãƒ†ãƒƒãƒ—"
+msgstr "専用サーãƒãƒ¼ã‚¹ãƒ†ãƒƒãƒ—"
#: src/settings_translation_file.cpp
msgid "Default acceleration"
@@ -2804,11 +3010,14 @@ msgstr "既定ã®ã‚¹ã‚¿ãƒƒã‚¯æ•°"
#: src/settings_translation_file.cpp
msgid ""
-"Default timeout for cURL, stated in milliseconds.\n"
-"Only has an effect if compiled with cURL."
+"Define shadow filtering quality.\n"
+"This simulates the soft shadows effect by applying a PCF or Poisson disk\n"
+"but also uses more resources."
msgstr ""
-"cURLã®æ—¢å®šã®ã‚¿ã‚¤ãƒ ã‚¢ã‚¦ãƒˆã€ãƒŸãƒªç§’ã§å®šã‚ã¾ã™ã€‚\n"
-"cURLã§ã‚³ãƒ³ãƒ‘イルã•れãŸå ´åˆã«ã®ã¿åŠ¹æžœãŒã‚りã¾ã™ã€‚"
+"影フィルタã®å“質を定義ã—ã¾ã™ã€‚\n"
+"ã“れã¯ã€PCFã¾ãŸã¯ãƒã‚¢ã‚½ãƒ³ãƒ‡ã‚£ã‚¹ã‚¯ã‚’é©ç”¨ã™ã‚‹ã“ã¨ã§ã€ã‚„ã‚らãªã„影効果をシミュ"
+"レートã™ã‚‹ã‚‚ã®ã§ã™ã€‚\n"
+"ã—ã‹ã—ã€ã‚ˆã‚Šå¤šãã®ãƒªã‚½ãƒ¼ã‚¹ã‚’消費ã—ã¾ã™ã€‚"
#: src/settings_translation_file.cpp
msgid "Defines areas where trees have apples."
@@ -2894,7 +3103,7 @@ msgstr "ã“ã‚Œä»¥ä¸‹ã®æ·±ã•ã§å¤§ããªæ´žçªŸãŒè¦‹ã¤ã‹ã‚Šã¾ã™ã€‚"
msgid ""
"Description of server, to be displayed when players join and in the "
"serverlist."
-msgstr "サーãƒã®èª¬æ˜Žã€‚プレイヤーãŒå‚加ã—ãŸã¨ãã¨ã‚µãƒ¼ãƒä¸€è¦§ã«è¡¨ç¤ºã•れã¾ã™ã€‚"
+msgstr "サーãƒãƒ¼ã®èª¬æ˜Žã€‚プレイヤーãŒå‚加ã—ãŸã¨ãã¨ã‚µãƒ¼ãƒãƒ¼ä¸€è¦§ã«è¡¨ç¤ºã•れã¾ã™ã€‚"
#: src/settings_translation_file.cpp
msgid "Desert noise threshold"
@@ -2929,8 +3138,12 @@ msgid "Disallow empty passwords"
msgstr "空ã®ãƒ‘スワードを許å¯ã—ãªã„"
#: src/settings_translation_file.cpp
+msgid "Display Density Scaling Factor"
+msgstr "ディスプレイ密度スケーリング係数"
+
+#: src/settings_translation_file.cpp
msgid "Domain name of server, to be displayed in the serverlist."
-msgstr "サーãƒä¸€è¦§ã«è¡¨ç¤ºã•れるサーãƒã®ãƒ‰ãƒ¡ã‚¤ãƒ³å。"
+msgstr "サーãƒãƒ¼ä¸€è¦§ã«è¡¨ç¤ºã•れるサーãƒãƒ¼ã®ãƒ‰ãƒ¡ã‚¤ãƒ³å。"
#: src/settings_translation_file.cpp
msgid "Double tap jump for fly"
@@ -2977,6 +3190,24 @@ msgstr ""
"ã“ã®ã‚µãƒãƒ¼ãƒˆã¯å®Ÿé¨“çš„ã§ã‚りã€APIã¯å¤‰ã‚ã‚‹ã“ã¨ãŒã‚りã¾ã™ã€‚"
#: src/settings_translation_file.cpp
+msgid ""
+"Enable Poisson disk filtering.\n"
+"On true uses Poisson disk to make \"soft shadows\". Otherwise uses PCF "
+"filtering."
+msgstr ""
+"ãƒã‚¢ã‚½ãƒ³ãƒ‡ã‚£ã‚¹ã‚¯ã«ã‚ˆã‚‹ãƒ•ィルタリングを有効ã«ã—ã¾ã™ã€‚\n"
+"true ã®å ´åˆã€ãƒã‚¢ã‚½ãƒ³ãƒ‡ã‚£ã‚¹ã‚¯ã‚’使用ã—ã¦ã€Œã‚„ã‚らãªã„å½±ã€ã‚’作りã¾ã™ã€‚ãれ以外ã®"
+"å ´åˆã¯ã€PCFフィルタリングを使用ã—ã¾ã™ã€‚"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable colored shadows.\n"
+"On true translucent nodes cast colored shadows. This is expensive."
+msgstr ""
+"色ã¤ãã®å½±ã‚’有効ã«ã—ã¾ã™ã€‚\n"
+"真ã®åŠé€æ˜ŽãƒŽãƒ¼ãƒ‰ã§ã¯ã€è‰²ã¤ãã®å½±ã‚’è½ã¨ã—ã¾ã™ã€‚ã“れã¯è² è·ãŒå¤§ãã„ã§ã™ã€‚"
+
+#: src/settings_translation_file.cpp
msgid "Enable console window"
msgstr "コンソールウィンドウを有効化"
@@ -3013,7 +3244,7 @@ msgid ""
"Enable register confirmation when connecting to server.\n"
"If disabled, new account will be registered automatically."
msgstr ""
-"サーãƒã¸ã®æŽ¥ç¶šæ™‚ã«ç™»éŒ²ç¢ºèªã‚’有効ã«ã—ã¾ã™ã€‚\n"
+"サーãƒãƒ¼ã¸ã®æŽ¥ç¶šæ™‚ã«ç™»éŒ²ç¢ºèªã‚’有効ã«ã—ã¾ã™ã€‚\n"
"無効ã«ã™ã‚‹ã¨ã€æ–°ã—ã„アカウントãŒè‡ªå‹•çš„ã«ç™»éŒ²ã•れã¾ã™ã€‚"
#: src/settings_translation_file.cpp
@@ -3033,7 +3264,7 @@ msgid ""
"expecting."
msgstr ""
"å¤ã„ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆãŒæŽ¥ç¶šã§ããªã„よã†ã«ã—ã¾ã™ã€‚\n"
-"å¤ã„ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã¯æ–°ã—ã„サーãƒã«æŽ¥ç¶šã—ã¦ã‚‚クラッシュã—ãªã„ã¨ã„ã†\n"
+"å¤ã„ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã¯æ–°ã—ã„サーãƒãƒ¼ã«æŽ¥ç¶šã—ã¦ã‚‚クラッシュã—ãªã„ã¨ã„ã†\n"
"æ„味ã§äº’æ›æ€§ãŒã‚りã¾ã™ãŒã€æœŸå¾…ã—ã¦ã„ã‚‹ã™ã¹ã¦ã®æ–°æ©Ÿèƒ½ã‚’サãƒãƒ¼ãƒˆ\n"
"ã—ã¦ã„ã‚‹ã‚ã‘ã§ã¯ã‚りã¾ã›ã‚“。"
@@ -3044,9 +3275,9 @@ msgid ""
"textures)\n"
"when connecting to the server."
msgstr ""
-"リモートメディアサーãƒã®ä½¿ç”¨ã‚’有効ã«ã—ã¾ã™ (サーãƒã«ã‚ˆã£ã¦æä¾›\n"
+"リモートメディアサーãƒãƒ¼ã®ä½¿ç”¨ã‚’有効ã«ã—ã¾ã™ (サーãƒãƒ¼ã«ã‚ˆã£ã¦æä¾›\n"
"ã•れã¦ã„ã‚‹å ´åˆ)。\n"
-"リモートサーãƒã¯ã‚µãƒ¼ãƒã«æŽ¥ç¶šã™ã‚‹ã¨ãã«ãƒ¡ãƒ‡ã‚£ã‚¢ (例ãˆã°ã€ãƒ†ã‚¯ã‚¹ãƒãƒ£) ã‚’\n"
+"リモートサーãƒã¯ã‚µãƒ¼ãƒãƒ¼ã«æŽ¥ç¶šã™ã‚‹ã¨ãã«ãƒ¡ãƒ‡ã‚£ã‚¢ (例ãˆã°ã€ãƒ†ã‚¯ã‚¹ãƒãƒ£) ã‚’\n"
"ダウンロードã™ã‚‹ãŸã‚ã®éžå¸¸ã«é«˜é€Ÿãªæ–¹æ³•ã‚’æä¾›ã—ã¾ã™ã€‚"
#: src/settings_translation_file.cpp
@@ -3112,6 +3343,14 @@ msgstr ""
"ã“ã®è¨­å®šã‚’変更ã™ã‚‹ã«ã¯å†èµ·å‹•ãŒå¿…è¦ã§ã™ã€‚"
#: src/settings_translation_file.cpp
+msgid ""
+"Enables tradeoffs that reduce CPU load or increase rendering performance\n"
+"at the expense of minor visual glitches that do not impact game playability."
+msgstr ""
+"ゲームã®ãƒ—レイアビリティã«å½±éŸ¿ã‚’与ãˆãªã„å°ã•ãªè¦–覚的ãªä¸å…·åˆã‚’犠牲ã«ã—ã¦\n"
+"CPUè² è·ã‚’軽減ã™ã‚‹ã‹ã€ãƒ¬ãƒ³ãƒ€ãƒªãƒ³ã‚°ãƒ‘フォーマンスをå‘上ã•ã›ã‚‹ãƒˆãƒ¬ãƒ¼ãƒ‰ã‚ªãƒ•を有効ã«ã—ã¾ã™ã€‚"
+
+#: src/settings_translation_file.cpp
msgid "Engine profiling data print interval"
msgstr "エンジンプロファイリングデータã®å‡ºåŠ›é–“éš”"
@@ -3156,18 +3395,6 @@ msgid "Fallback font path"
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 "高速移動モード切替キー"
@@ -3185,11 +3412,11 @@ msgstr "高速移動モード"
#: src/settings_translation_file.cpp
msgid ""
-"Fast movement (via the \"special\" key).\n"
+"Fast movement (via the \"Aux1\" key).\n"
"This requires the \"fast\" privilege on the server."
msgstr ""
-"高速移動 (\"スペシャル\"キーã«ã‚ˆã‚‹)。\n"
-"ã“れã«ã¯ã‚µãƒ¼ãƒä¸Šã« \"fast\" 特権ãŒå¿…è¦ã§ã™ã€‚"
+"高速移動 (\"Aux1\"キーã«ã‚ˆã‚‹)。\n"
+"ã“れã«ã¯ã‚µãƒ¼ãƒãƒ¼ä¸Šã« \"fast\" 特権ãŒå¿…è¦ã§ã™ã€‚"
#: src/settings_translation_file.cpp
msgid "Field of view"
@@ -3206,7 +3433,7 @@ msgid ""
"Multiplayer Tab."
msgstr ""
"client/serverlist/ フォルダ内ã®ãƒ•ァイルã§ã€ã‚²ãƒ¼ãƒ ã«å‚加タブã§è¡¨ç¤ºã•れã¦ã„ã‚‹\n"
-"ãŠæ°—ã«å…¥ã‚Šã®ã‚µãƒ¼ãƒãŒå«ã¾ã‚Œã¦ã„ã¾ã™ã€‚"
+"ãŠæ°—ã«å…¥ã‚Šã®ã‚µãƒ¼ãƒãƒ¼ãŒå«ã¾ã‚Œã¦ã„ã¾ã™ã€‚"
#: src/settings_translation_file.cpp
msgid "Filler depth"
@@ -3223,14 +3450,15 @@ 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."
+"which PNG optimizers usually discard, often resulting in dark or\n"
+"light edges to transparent textures. Apply a filter to clean that up\n"
+"at texture load time. This is automatically enabled if mipmapping is enabled."
msgstr ""
-"フィルタ処ç†ã•れãŸãƒ†ã‚¯ã‚¹ãƒãƒ£ã¯RGB値ã¨å®Œå…¨ã«é€æ˜Žãªéš£ã‚Šåˆã†ã‚‚ã®ã¨æ··ãœã‚‹\n"
-"ã“ã¨ãŒã§ãã¾ã™ã€‚PNGオプティマイザã¯é€šå¸¸ã“れを破棄ã—ã¾ã™ã€‚ãã®çµæžœã€\n"
-"逿˜Žãªãƒ†ã‚¯ã‚¹ãƒãƒ£ã«å¯¾ã—ã¦æš—ã„ã¾ãŸã¯æ˜Žã‚‹ã„エッジãŒç”Ÿã˜ã‚‹ã“ã¨ãŒã‚りã¾ã™ã€‚\n"
-"ã“ã®ãƒ•ィルタをé©ç”¨ã—ã¦ãƒ†ã‚¯ã‚¹ãƒãƒ£èª­ã¿è¾¼ã¿æ™‚ã«ãれをãれã„ã«ã—ã¾ã™ã€‚"
+"フィルタ処ç†ã•れãŸãƒ†ã‚¯ã‚¹ãƒãƒ£ã¯ã€RGB値を完全ã«é€æ˜Žãªéš£ã‚Šåˆã†ã‚‚ã®ã¨\n"
+"æ··ãœã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ã“れã¯PNGオプティマイザーãŒé€šå¸¸å»ƒæ£„ã™ã‚‹ã‚‚ã®ã§ã€\n"
+"é€éŽãƒ†ã‚¯ã‚¹ãƒãƒ£ã®ç«¯ãŒæš—ããªã£ãŸã‚Šæ˜Žã‚‹ããªã£ãŸã‚Šã™ã‚‹ã“ã¨ãŒã‚ˆãã‚りã¾ã™ã€‚\n"
+"テクスãƒãƒ£ã®èª­ã¿è¾¼ã¿æ™‚ã«ãƒ•ィルタをé©ç”¨ã—ã¦ãれをãれã„ã«ã—ã¾ã™ã€‚\n"
+"ã“れã¯ãƒŸãƒƒãƒ—ãƒžãƒƒãƒ”ãƒ³ã‚°ãŒæœ‰åйãªå ´åˆã«è‡ªå‹•çš„ã«æœ‰åйã«ãªã‚Šã¾ã™ã€‚"
#: src/settings_translation_file.cpp
msgid "Filtering"
@@ -3321,16 +3549,16 @@ msgid "Font size"
msgstr "フォントã®å¤§ãã•"
#: src/settings_translation_file.cpp
-msgid "Font size of the default font in point (pt)."
-msgstr "既定ã®ãƒ•ォントã®ãƒ•ォント サイズ (pt)。"
+msgid "Font size divisible by"
+msgstr "割り切れるフォントサイズ"
#: src/settings_translation_file.cpp
-msgid "Font size of the fallback font in point (pt)."
-msgstr "フォールãƒãƒƒã‚¯ãƒ•ォントã®ãƒ•ォント サイズ (pt)。"
+msgid "Font size of the default font where 1 unit = 1 pixel at 96 DPI"
+msgstr "96 DPIã§1ユニットï¼1ピクセルã¨ãªã‚‹æ—¢å®šã®ãƒ•ォントã®ãƒ•ォントサイズ"
#: src/settings_translation_file.cpp
-msgid "Font size of the monospace font in point (pt)."
-msgstr "固定幅フォントã®ãƒ•ォントサイズ (pt)。"
+msgid "Font size of the monospace font where 1 unit = 1 pixel at 96 DPI"
+msgstr "96 DPIã§1ユニットï¼1ピクセルã¨ãªã‚‹å›ºå®šå¹…フォントã®ãƒ•ォントサイズ"
#: src/settings_translation_file.cpp
msgid ""
@@ -3342,6 +3570,21 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"For pixel-style fonts that do not scale well, this ensures that font sizes "
+"used\n"
+"with this font will always be divisible by this value, in pixels. For "
+"instance,\n"
+"a pixel font 16 pixels tall should have this set to 16, so it will only ever "
+"be\n"
+"sized 16, 32, 48, etc., so a mod requesting a size of 25 will get 32."
+msgstr ""
+"拡大縮å°ãŒã†ã¾ãã„ã‹ãªã„ピクセルスタイルã®ãƒ•ォントã®å ´åˆã€ã“ã®ãƒ•ォントã§\n"
+"使用ã•れるフォントサイズã¯ã€å¸¸ã«ã“ã®å€¤ã§å‰²ã‚Šåˆ‡ã‚Œã¾ã™ã€‚例ãˆã°é«˜ã•16ピクセルã®\n"
+"ピクセルフォントã®å ´åˆã€ã“ã®å€¤ã‚’16ã«è¨­å®šã™ã‚‹ã¨ã€16ã€32ã€48ãªã©ã®ã‚µã‚¤ã‚ºã«ã—ã‹\n"
+"ãªã‚Šã¾ã›ã‚“ã®ã§ã€25ã®ã‚µã‚¤ã‚ºã‚’è¦æ±‚ã—ãŸMODã¯32ã‚’å–å¾—ã—ã¾ã™ã€‚"
+
+#: src/settings_translation_file.cpp
+msgid ""
"Format of player chat messages. The following strings are valid "
"placeholders:\n"
"@name, @message, @timestamp (optional)"
@@ -3400,11 +3643,7 @@ msgstr "フラクタルã®ç¨®é¡ž"
#: src/settings_translation_file.cpp
msgid "Fraction of the visible distance at which fog starts to be rendered"
-msgstr "霧ãŒãƒ¬ãƒ³ãƒ€ãƒªãƒ³ã‚°ã•れ始ã‚ã‚‹å¯è¦–è·é›¢ã®å‰²åˆ"
-
-#: src/settings_translation_file.cpp
-msgid "FreeType fonts"
-msgstr "フリータイプフォント"
+msgstr "éœ§ãŒæç”»ã•れ始ã‚ã‚‹å¯è¦–è·é›¢ã®å‰²åˆ"
#: src/settings_translation_file.cpp
msgid ""
@@ -3432,7 +3671,7 @@ msgstr ""
"クライアントãŒã©ã‚Œãらã„ã®è·é›¢ã®ã‚ªãƒ–ジェクトを知ã£ã¦ã„ã‚‹ã‹ã€\n"
"マップブロック(16ノード)ã§å®šã‚ã¾ã™ã€‚\n"
"\n"
-"ã“れを active_block_range よりも大ãã設定ã™ã‚‹ã¨ã€ã‚µãƒ¼ãƒã¯\n"
+"ã“れを active_block_range よりも大ãã設定ã™ã‚‹ã¨ã€ã‚µãƒ¼ãƒãƒ¼ã¯\n"
"ã“ã®è·é›¢ã¾ã§ãƒ—レーヤーãŒè¦‹ã¦ã„ã‚‹æ–¹å‘ã«\n"
"アクティブãªã‚ªãƒ–ジェクトを維æŒã—ã¾ã™ã€‚(ã“れã«ã‚ˆã‚Šãƒ¢ãƒ–ãŒçªç„¶\n"
"視野ã‹ã‚‰æ¶ˆãˆã‚‹ã®ã‚’é¿ã‘ã‚‹ã“ã¨ãŒã§ãã¾ã™ï¼‰"
@@ -3442,10 +3681,6 @@ msgid "Full screen"
msgstr "フルスクリーン表示"
#: src/settings_translation_file.cpp
-msgid "Full screen BPP"
-msgstr "フルスクリーンã®BPP"
-
-#: src/settings_translation_file.cpp
msgid "Fullscreen mode."
msgstr "全画é¢è¡¨ç¤ºãƒ¢ãƒ¼ãƒ‰ã§ã™ã€‚"
@@ -3469,10 +3704,10 @@ msgstr "グローãƒãƒ«ã‚³ãƒ¼ãƒ«ãƒãƒƒã‚¯"
msgid ""
"Global map generation attributes.\n"
"In Mapgen v6 the 'decorations' flag controls all decorations except trees\n"
-"and junglegrass, in all other mapgens this flag controls all decorations."
+"and jungle grass, in all other mapgens this flag controls all decorations."
msgstr ""
-"グローãƒãƒ«ãƒžãƒƒãƒ—生æˆå±žæ€§ã€‚\n"
-"マップジェãƒãƒ¬ãƒ¼ã‚¿v6ã§ã¯ã€'decorations' ãƒ•ãƒ©ã‚°ã¯æœ¨ã¨ã‚¸ãƒ£ãƒ³ã‚°ãƒ«ã®è‰ã‚’\n"
+"全体的ãªãƒžãƒƒãƒ—生æˆå±žæ€§ã€‚\n"
+"マップジェãƒãƒ¬ãƒ¼ã‚¿v6ã§ã¯ã€'decorations' ãƒ•ãƒ©ã‚°ã§æœ¨ã¨ã‚¸ãƒ£ãƒ³ã‚°ãƒ«ã®è‰ã‚’\n"
"除ãã™ã¹ã¦ã®è£…飾を制御ã—ã¾ã™ãŒã€ä»–ã®ã™ã¹ã¦ã®ãƒžãƒƒãƒ—ジェãƒãƒ¬ãƒ¼ã‚¿ã§ã¯\n"
"ã“ã®ãƒ•ラグãŒã™ã¹ã¦ã®è£…飾を制御ã—ã¾ã™ã€‚"
@@ -3555,8 +3790,9 @@ msgid "Heat noise"
msgstr "熱ノイズ"
#: src/settings_translation_file.cpp
-msgid "Height component of the initial window size."
-msgstr "ウィンドウ高ã•ã®åˆæœŸå€¤ã€‚"
+msgid ""
+"Height component of the initial window size. Ignored in fullscreen mode."
+msgstr "åˆæœŸã‚¦ã‚£ãƒ³ãƒ‰ã‚¦ã‚µã‚¤ã‚ºã®é«˜ã•。フルスクリーンモードã§ã¯ç„¡è¦–ã•れã¾ã™ã€‚"
#: src/settings_translation_file.cpp
msgid "Height noise"
@@ -3567,10 +3803,6 @@ msgid "Height select noise"
msgstr "高ã•é¸æŠžãƒŽã‚¤ã‚º"
#: src/settings_translation_file.cpp
-msgid "High-precision FPU"
-msgstr "高精度FPU"
-
-#: src/settings_translation_file.cpp
msgid "Hill steepness"
msgstr "丘陵ã®é™ºã—ã•"
@@ -3596,7 +3828,7 @@ msgstr "丘陵性4ノイズ"
#: src/settings_translation_file.cpp
msgid "Homepage of server, to be displayed in the serverlist."
-msgstr "サーãƒä¸€è¦§ã«è¡¨ç¤ºã•れるサーãƒã®ãƒ›ãƒ¼ãƒ ãƒšãƒ¼ã‚¸ã€‚"
+msgstr "サーãƒãƒ¼ä¸€è¦§ã«è¡¨ç¤ºã•れるサーãƒã®ãƒ›ãƒ¼ãƒ ãƒšãƒ¼ã‚¸ã€‚"
#: src/settings_translation_file.cpp
msgid ""
@@ -3777,7 +4009,7 @@ msgid ""
"How much the server will wait before unloading unused mapblocks.\n"
"Higher value is smoother, but will use more RAM."
msgstr ""
-"未使用ã®ãƒžãƒƒãƒ—ブロックをアンロードã™ã‚‹ã¾ã§ã«ã‚µãƒ¼ãƒãŒå¾…機ã™ã‚‹é‡ã€‚\n"
+"未使用ã®ãƒžãƒƒãƒ—ブロックを破棄ã™ã‚‹ã¾ã§ã«ã‚µãƒ¼ãƒãƒ¼ãŒå¾…機ã™ã‚‹é‡ã€‚\n"
"値ãŒå¤§ãã„ã»ã©æ»‘らã‹ã«ãªã‚Šã¾ã™ãŒã€ã‚ˆã‚Šå¤šãã®RAMãŒä½¿ç”¨ã•れã¾ã™ã€‚"
#: src/settings_translation_file.cpp
@@ -3802,7 +4034,7 @@ msgstr "IPv6"
#: src/settings_translation_file.cpp
msgid "IPv6 server"
-msgstr "IPv6 サーãƒ"
+msgstr "IPv6 サーãƒãƒ¼"
#: src/settings_translation_file.cpp
msgid ""
@@ -3814,12 +4046,11 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"If disabled, \"special\" key is used to fly fast if both fly and fast mode "
-"are\n"
+"If disabled, \"Aux1\" key is used to fly fast if both fly and fast mode are\n"
"enabled."
msgstr ""
"無効ã«ãªã£ã¦ã„ã‚‹å ´åˆã€é£›è¡Œãƒ¢ãƒ¼ãƒ‰ã¨é«˜é€Ÿç§»å‹•モードã®ä¸¡æ–¹ãŒæœ‰åйã«ãªã£ã¦\n"
-"ã„ã‚‹ã¨ã€\"スペシャル\"キーを使用ã—ã¦é«˜é€Ÿã§é£›è¡Œã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚"
+"ã„ã‚‹ã¨ã€\"Aux1\"キーを使用ã—ã¦é«˜é€Ÿã§é£›è¡Œã§ãã¾ã™ã€‚"
#: src/settings_translation_file.cpp
msgid ""
@@ -3829,7 +4060,7 @@ msgid ""
"invisible\n"
"so that the utility of noclip mode is reduced."
msgstr ""
-"有効ã«ã™ã‚‹ã¨ã€ã‚µãƒ¼ãƒã¯ãƒ—レーヤーã®ç›®ã®ä½ç½®ã«åŸºã¥ã„ã¦ãƒžãƒƒãƒ—ブロック\n"
+"有効ã«ã™ã‚‹ã¨ã€ã‚µãƒ¼ãƒãƒ¼ã¯ãƒ—レーヤーã®ç›®ã®ä½ç½®ã«åŸºã¥ã„ã¦ãƒžãƒƒãƒ—ブロック\n"
"オクルージョンカリングを実行ã—ã¾ã™ã€‚ã“れã«ã‚ˆã‚Šã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã«é€ä¿¡ã•れる\n"
"ブロック数を50〜80%減らã™ã“ã¨ãŒã§ãã¾ã™ã€‚ã™ã‚ŠæŠœã‘ãƒ¢ãƒ¼ãƒ‰ã®æœ‰ç”¨æ€§ãŒ\n"
"減るよã†ã«ã€ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã¯ã‚‚ã¯ã‚„ç›®ã«è¦‹ãˆãªã„ã‚‚ã®ã‚’å—ã‘å–りã¾ã›ã‚“。"
@@ -3846,12 +4077,12 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"If enabled, \"special\" key instead of \"sneak\" key is used for climbing "
-"down and\n"
+"If enabled, \"Aux1\" key instead of \"Sneak\" key is used for climbing down "
+"and\n"
"descending."
msgstr ""
-"有効ã«ã™ã‚‹ã¨ã€é™ã‚Šã‚‹ã¨ãや水中を潜るã¨ã \"スニーク\" キーã®ä»£ã‚Šã« \n"
-"\"スペシャル\" キーãŒä½¿ç”¨ã•れã¾ã™ã€‚"
+"有効ã«ã™ã‚‹ã¨ã€é™ã‚Šã‚‹ã¨ã \"スニーク\" キーã®ä»£ã‚Šã« \n"
+"\"Aux1\" キーãŒä½¿ç”¨ã•れã¾ã™ã€‚"
#: src/settings_translation_file.cpp
msgid ""
@@ -3859,7 +4090,7 @@ msgid ""
"This option is only read when server starts."
msgstr ""
"有効ã«ã—ãŸå ´åˆã€ãƒ­ãƒ¼ãƒ«ãƒãƒƒã‚¯ã®ãŸã‚ã«è¡Œå‹•ãŒè¨˜éŒ²ã•れã¾ã™ã€‚\n"
-"ã“ã®ã‚ªãƒ—ションã¯ã‚µãƒ¼ãƒèµ·å‹•時ã«ã®ã¿èª­ã¿è¾¼ã¾ã‚Œã¾ã™ã€‚"
+"ã“ã®ã‚ªãƒ—ションã¯ã‚µãƒ¼ãƒãƒ¼èµ·å‹•時ã«ã®ã¿èª­ã¿è¾¼ã¾ã‚Œã¾ã™ã€‚"
#: src/settings_translation_file.cpp
msgid "If enabled, disable cheat prevention in multiplayer."
@@ -3870,7 +4101,7 @@ 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 ""
-"有効ã«ã—ãŸå ´åˆã€ç„¡åйãªãƒ¯ãƒ¼ãƒ«ãƒ‰ãƒ‡ãƒ¼ã‚¿ã«ã‚ˆã£ã¦ã‚µãƒ¼ãƒãŒã‚·ãƒ£ãƒƒãƒˆãƒ€ã‚¦ãƒ³\n"
+"有効ã«ã—ãŸå ´åˆã€ç„¡åйãªãƒ¯ãƒ¼ãƒ«ãƒ‰ãƒ‡ãƒ¼ã‚¿ã«ã‚ˆã£ã¦ã‚µãƒ¼ãƒãƒ¼ãŒã‚·ãƒ£ãƒƒãƒˆãƒ€ã‚¦ãƒ³\n"
"ã™ã‚‹ã“ã¨ã¯ã‚りã¾ã›ã‚“。\n"
"自分ãŒã—ã¦ã„ã‚‹ã“ã¨ãŒã‚ã‹ã£ã¦ã„ã‚‹å ´åˆã®ã¿ã“れを有効ã«ã—ã¾ã™ã€‚"
@@ -3907,6 +4138,14 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"If the execution of a chat command takes longer than this specified time in\n"
+"seconds, add the time information to the chat command message"
+msgstr ""
+"ãƒãƒ£ãƒƒãƒˆã‚³ãƒžãƒ³ãƒ‰ã®å®Ÿè¡ŒãŒã€ã“ã®æŒ‡å®šã•ã‚ŒãŸæ™‚間(秒)よりも長ãã‹ã‹ã‚‹å ´åˆã¯\n"
+"ãƒãƒ£ãƒƒãƒˆã‚³ãƒžãƒ³ãƒ‰ã®ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã«æ™‚é–“ã®æƒ…報を追加ã—ã¾ã™ã€‚"
+
+#: src/settings_translation_file.cpp
+msgid ""
"If the file size of debug.txt exceeds the number of megabytes specified in\n"
"this setting when it is opened, the file is moved to debug.txt.1,\n"
"deleting an older debug.txt.1 if it exists.\n"
@@ -3958,7 +4197,7 @@ msgstr ""
"ã“れã¯é€šå¸¸ã€ã‚³ã‚¢/ビルトイン貢献者ã«ã®ã¿å¿…è¦"
#: src/settings_translation_file.cpp
-msgid "Instrument chatcommands on registration."
+msgid "Instrument chat commands on registration."
msgstr "ãƒãƒ£ãƒƒãƒˆã‚³ãƒžãƒ³ãƒ‰ãŒç™»éŒ²ã•れるã¨ã™ãã«è¨ˆæ¸¬ã—ã¾ã™ã€‚"
#: src/settings_translation_file.cpp
@@ -4052,7 +4291,7 @@ msgid "Joystick button repetition interval"
msgstr "ジョイスティックボタンã®ç¹°ã‚Šè¿”ã—é–“éš”"
#: src/settings_translation_file.cpp
-msgid "Joystick deadzone"
+msgid "Joystick dead zone"
msgstr "ジョイスティックã®ãƒ‡ãƒƒãƒ‰ã‚¾ãƒ¼ãƒ³"
#: src/settings_translation_file.cpp
@@ -4914,7 +5153,8 @@ msgid ""
"Length of a server tick and the interval at which objects are generally "
"updated over\n"
"network."
-msgstr "サーãƒã®é–“éš”ã®é•·ã•ã¨ã‚ªãƒ–ジェクトãŒé€šå¸¸ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ä¸Šã§æ›´æ–°ã•れる間隔。"
+msgstr ""
+"サーãƒãƒ¼ãŒæ™‚を刻む間隔ã¨ã‚ªãƒ–ジェクトãŒé€šå¸¸ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ä¸Šã§æ›´æ–°ã•れる間隔。"
#: src/settings_translation_file.cpp
msgid ""
@@ -4999,8 +5239,8 @@ msgid ""
"Only has an effect if compiled with cURL."
msgstr ""
"並列HTTPãƒªã‚¯ã‚¨ã‚¹ãƒˆã®æ•°ã‚’制é™ã—ã¾ã™ã€‚影響:\n"
-"- サーãƒãŒ remote_media 設定を使用ã—ã¦ã„ã‚‹å ´åˆã¯ãƒ¡ãƒ‡ã‚£ã‚¢ã®å–得。\n"
-"- サーãƒä¸€è¦§ã®ãƒ€ã‚¦ãƒ³ãƒ­ãƒ¼ãƒ‰ã¨ã‚µãƒ¼ãƒã®å…¬é–‹ã€‚\n"
+"- サーãƒãƒ¼ãŒ remote_media 設定を使用ã—ã¦ã„ã‚‹å ´åˆã¯ãƒ¡ãƒ‡ã‚£ã‚¢ã®å–得。\n"
+"- サーãƒãƒ¼ä¸€è¦§ã®ãƒ€ã‚¦ãƒ³ãƒ­ãƒ¼ãƒ‰ã¨ã‚µãƒ¼ãƒã®å…¬é–‹ã€‚\n"
"- メインメニューã§å®Ÿè¡Œã•れãŸãƒ€ã‚¦ãƒ³ãƒ­ãƒ¼ãƒ‰ï¼ˆä¾‹ãˆã°ã€ã‚³ãƒ³ãƒ†ãƒ³ãƒ„)。\n"
"cURLã§ã‚³ãƒ³ãƒ‘イルã•れãŸå ´åˆã«ã®ã¿åŠ¹æžœãŒã‚りã¾ã™ã€‚"
@@ -5044,7 +5284,7 @@ msgid ""
msgstr ""
"ゲームã®è¦³æ¸¬è¨˜éŒ²ã‚’読ã¿è¾¼ã‚“ã§ã€ã‚²ãƒ¼ãƒ ã®è¦³æ¸¬ãƒ‡ãƒ¼ã‚¿ã‚’åŽé›†ã—ã¾ã™ã€‚\n"
"集ã‚られãŸè¦³æ¸¬è¨˜éŒ²ã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ãŸã‚ã® /profiler コマンドをæä¾›ã—ã¾ã™ã€‚\n"
-"Mod開発者やサーãƒã‚ªãƒšãƒ¬ãƒ¼ã‚¿ãƒ¼ã«å½¹ç«‹ã¡ã¾ã™ã€‚"
+"Mod開発者やサーãƒãƒ¼ã‚ªãƒšãƒ¬ãƒ¼ã‚¿ãƒ¼ã«å½¹ç«‹ã¡ã¾ã™ã€‚"
#: src/settings_translation_file.cpp
msgid "Loading Block Modifiers"
@@ -5068,10 +5308,6 @@ msgid ""
msgstr "霧ã¨ç©ºã®è‰²ã‚’日中(夜明ã‘/日没)ã¨è¦–ç·šæ–¹å‘ã«ä¾å­˜ã•ã›ã¾ã™ã€‚"
#: src/settings_translation_file.cpp
-msgid "Makes DirectX work with LuaJIT. Disable if it causes troubles."
-msgstr "DirectX ã‚’ LuaJIT ã¨é€£æºã•ã›ã¾ã™ã€‚å•題ãŒã‚ã‚‹å ´åˆã¯ç„¡åйã«ã—ã¦ãã ã•ã„。"
-
-#: src/settings_translation_file.cpp
msgid "Makes all liquids opaque"
msgstr "ã™ã¹ã¦ã®æ¶²ä½“ã‚’ä¸é€æ˜Žã«ã™ã‚‹"
@@ -5162,6 +5398,10 @@ msgid "Map save interval"
msgstr "マップä¿å­˜é–“éš”"
#: src/settings_translation_file.cpp
+msgid "Map shadows update frames"
+msgstr "地図ã®å½±ã®æ›´æ–°ãƒ•レーム"
+
+#: src/settings_translation_file.cpp
msgid "Mapblock limit"
msgstr "マップブロック制é™"
@@ -5175,7 +5415,7 @@ msgstr "メッシュ生æˆã®ãƒžãƒƒãƒ—ブロックキャッシュサイズ(MB)"
#: src/settings_translation_file.cpp
msgid "Mapblock unload timeout"
-msgstr "マップブロックアンロードタイムアウト"
+msgstr "マップブロック破棄タイムアウト"
#: src/settings_translation_file.cpp
msgid "Mapgen Carpathian"
@@ -5272,6 +5512,10 @@ msgstr ""
"FPS。"
#: src/settings_translation_file.cpp
+msgid "Maximum distance to render shadows."
+msgstr "影をæç”»ã™ã‚‹æœ€å¤§è·é›¢ã€‚"
+
+#: src/settings_translation_file.cpp
msgid "Maximum forceloaded blocks"
msgstr "最大強制読ã¿è¾¼ã¿ãƒ–ロック"
@@ -5396,8 +5640,20 @@ msgstr ""
"キューを無効ã«ã™ã‚‹ã«ã¯ 0ã€ã‚µã‚¤ã‚ºã‚’無制é™ã«ã™ã‚‹ã«ã¯ -1 を指定ã—ã¾ã™ã€‚"
#: src/settings_translation_file.cpp
-msgid "Maximum time in ms a file download (e.g. a mod download) may take."
-msgstr "ファイルダウンロード (例: Modã®ãƒ€ã‚¦ãƒ³ãƒ­ãƒ¼ãƒ‰)ã®æœ€å¤§çµŒéŽæ™‚間。"
+msgid ""
+"Maximum time a file download (e.g. a mod download) may take, stated in "
+"milliseconds."
+msgstr ""
+"ファイルダウンロード(Modã®ãƒ€ã‚¦ãƒ³ãƒ­ãƒ¼ãƒ‰ãªã©ï¼‰ã«ã‹ã‹ã‚‹æœ€å¤§æ™‚間をミリ秒å˜ä½ã§æŒ‡"
+"定ã—ã¾ã™ã€‚"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum time an interactive request (e.g. server list fetch) may take, "
+"stated in milliseconds."
+msgstr ""
+"インタラクティブリクエスト(サーãƒãƒ¼ä¸€è¦§ã®å–å¾—ãªã©ï¼‰ã«ã‹ã‹ã‚‹æœ€å¤§æ™‚間をミリ秒"
+"å˜ä½ã§æŒ‡å®šã—ã¾ã™ã€‚"
#: src/settings_translation_file.cpp
msgid "Maximum users"
@@ -5460,8 +5716,8 @@ msgid "Mod channels"
msgstr "Modãƒãƒ£ãƒ³ãƒãƒ«"
#: src/settings_translation_file.cpp
-msgid "Modifies the size of the hudbar elements."
-msgstr "HUDãƒãƒ¼è¦ç´ ã®ã‚µã‚¤ã‚ºã‚’変更ã—ã¾ã™ã€‚"
+msgid "Modifies the size of the HUD elements."
+msgstr "HUDè¦ç´ ã®ã‚µã‚¤ã‚ºã‚’変更ã—ã¾ã™ã€‚"
#: src/settings_translation_file.cpp
msgid "Monospace font path"
@@ -5472,6 +5728,10 @@ msgid "Monospace font size"
msgstr "固定幅フォントã®ã‚µã‚¤ã‚º"
#: src/settings_translation_file.cpp
+msgid "Monospace font size divisible by"
+msgstr "割り切れる固定幅フォントã®ã‚µã‚¤ã‚º"
+
+#: src/settings_translation_file.cpp
msgid "Mountain height noise"
msgstr "å±±ã®é«˜ã•ノイズ"
@@ -5534,14 +5794,14 @@ msgid ""
"When starting from the main menu, this is overridden."
msgstr ""
"プレイヤーã®åå‰ã€‚\n"
-"サーãƒã‚’実行ã—ã¦ã„ã‚‹å ´åˆã€ã“ã®åå‰ã§æŽ¥ç¶šã—ã¦ã„るクライアントã¯ç®¡ç†è€…\n"
+"サーãƒãƒ¼ã‚’実行ã—ã¦ã„ã‚‹å ´åˆã€ã“ã®åå‰ã§æŽ¥ç¶šã—ã¦ã„るクライアントã¯ç®¡ç†è€…\n"
"ã§ã™ã€‚\n"
"メインメニューã‹ã‚‰èµ·å‹•ã™ã‚‹ã¨ã€ã“れã¯ä¸Šæ›¸ãã•れã¾ã™ã€‚"
#: src/settings_translation_file.cpp
msgid ""
"Name of the server, to be displayed when players join and in the serverlist."
-msgstr "プレイヤーãŒå‚加ã—ãŸã¨ãã«ã‚µãƒ¼ãƒä¸€è¦§ã«è¡¨ç¤ºã•れるサーãƒã®åå‰ã€‚"
+msgstr "プレイヤーãŒå‚加ã—ãŸã¨ãã«ã‚µãƒ¼ãƒãƒ¼ä¸€è¦§ã«è¡¨ç¤ºã•れるサーãƒãƒ¼ã®åå‰ã€‚"
#: src/settings_translation_file.cpp
msgid "Near plane"
@@ -5615,12 +5875,12 @@ 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"
+"This is a trade-off between SQLite transaction overhead and\n"
"memory consumption (4096=100MB, as a rule of thumb)."
msgstr ""
-"一度㫠/clearobjects ã«ã‚ˆã£ã¦ãƒ­ãƒ¼ãƒ‰ã§ãã‚‹è¿½åŠ ãƒ–ãƒ­ãƒƒã‚¯ã®æ•°ã€‚\n"
+"/clearobjects ã«ã‚ˆã£ã¦ä¸€åº¦ã«èª­ã¿è¾¼ã¿ã§ãã‚‹è¿½åŠ ãƒ–ãƒ­ãƒƒã‚¯ã®æ•°ã§ã™ã€‚\n"
"ã“れã¯ã€SQLiteトランザクションã®ã‚ªãƒ¼ãƒãƒ¼ãƒ˜ãƒƒãƒ‰ã¨ãƒ¡ãƒ¢ãƒªæ¶ˆè²»ã®é–“ã®\n"
-"トレードオフã§ã™ (経験則ã¨ã—ã¦ã€4096 = 100MB)。"
+"トレードオフã§ã™ (大体 4096 = 100MB)。"
#: src/settings_translation_file.cpp
msgid "Online Content Repository"
@@ -5637,11 +5897,6 @@ msgstr "既定ã®ãƒ•ォントã®å½±ã®ä¸é€æ˜Žåº¦ï¼ˆé€éŽï¼‰ã¯0ã‹ã‚‰255ã®é–
#: src/settings_translation_file.cpp
msgid ""
-"Opaqueness (alpha) of the shadow behind the fallback font, between 0 and 255."
-msgstr "フォールãƒãƒƒã‚¯ãƒ•ォントã®å½±ã®ä¸é€æ˜Žåº¦ï¼ˆé€éŽï¼‰ã¯0ã‹ã‚‰255ã®é–“ã§ã™ã€‚"
-
-#: src/settings_translation_file.cpp
-msgid ""
"Open the pause menu when the window's focus is lost. Does not pause if a "
"formspec is\n"
"open."
@@ -5650,20 +5905,17 @@ msgstr ""
"フォームスペックãŒé–‹ã‹ã‚Œã¦ã„ã‚‹ã¨ãã¯ãƒãƒ¼ã‚ºãƒ¡ãƒ‹ãƒ¥ãƒ¼ã‚’é–‹ãã¾ã›ã‚“。"
#: src/settings_translation_file.cpp
+msgid "Optional override for chat weblink color."
+msgstr "ãƒãƒ£ãƒƒãƒˆã®ã‚¦ã‚§ãƒ–リンクã®è‰²ã‚’上書ãã™ã‚‹ã‚ªãƒ—ションã§ã™ã€‚"
+
+#: src/settings_translation_file.cpp
msgid ""
-"Path of the fallback font.\n"
-"If “freetype†setting is enabled: Must be a TrueType font.\n"
-"If “freetype†setting is disabled: Must be a bitmap or XML vectors font.\n"
+"Path of the fallback font. Must be a TrueType font.\n"
"This font will be used for certain languages or if the default font is "
"unavailable."
msgstr ""
-"フォールãƒãƒƒã‚¯ãƒ•ォントã®ãƒ‘ス。\n"
-"「フリータイプフォントã€ãŒæœ‰åйãªå ´åˆï¼šTrueTypeフォントã§ãªã‘れã°ãªã‚Šã¾ã›"
-"ん。\n"
-"「フリータイプフォントã€ãŒç„¡åйãªå ´åˆï¼šãƒ“ットマップã¾ãŸã¯XMLベクターフォント\n"
-"ã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“。\n"
-"ã“ã®ãƒ•ォントã¯ç‰¹å®šã®è¨€èªžã§ä½¿ç”¨ã•れるã‹ã€è¦å®šã®ãƒ•ォントãŒä½¿ç”¨ã§ããªã„\n"
-"ã¨ãã«ä½¿ç”¨ã•れã¾ã™ã€‚"
+"フォールãƒãƒƒã‚¯ãƒ•ォントã®ãƒ‘ス。TrueType フォントã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“。\n"
+"ã“ã®ãƒ•ォントã¯ç‰¹å®šã®è¨€èªžã‹ã€è¦å®šã®ãƒ•ォントãŒä½¿ç”¨ã§ããªã„ã¨ãã«ä½¿ç”¨ã•れã¾ã™ã€‚"
#: src/settings_translation_file.cpp
msgid ""
@@ -5689,30 +5941,18 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Path to the default font.\n"
-"If “freetype†setting is enabled: Must be a TrueType font.\n"
-"If “freetype†setting is disabled: Must be a bitmap or XML vectors font.\n"
+"Path to the default font. Must be a TrueType font.\n"
"The fallback font will be used if the font cannot be loaded."
msgstr ""
-"既定ã®ãƒ•ォントã®ãƒ‘ス。\n"
-"「フリータイプフォントã€ãŒæœ‰åйãªå ´åˆï¼šTrueTypeフォントã§ãªã‘れã°ãªã‚Šã¾ã›"
-"ん。\n"
-"「フリータイプフォントã€ãŒç„¡åйãªå ´åˆï¼šãƒ“ットマップã¾ãŸã¯XMLベクターフォント\n"
-"ã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“。\n"
+"既定ã®ãƒ•ォントã®ãƒ‘ス。TrueType フォントã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“。\n"
"ã“ã®ãƒ•ォールãƒãƒƒã‚¯ãƒ•ォントã¯ãƒ•ォントãŒèª­ã¿è¾¼ã‚ãªã„ã¨ãã«ä½¿ç”¨ã•れã¾ã™ã€‚"
#: src/settings_translation_file.cpp
msgid ""
-"Path to the monospace font.\n"
-"If “freetype†setting is enabled: Must be a TrueType font.\n"
-"If “freetype†setting is disabled: Must be a bitmap or XML vectors font.\n"
+"Path to the monospace font. Must be a TrueType font.\n"
"This font is used for e.g. the console and profiler screen."
msgstr ""
-"固定幅フォントã®ãƒ‘ス。\n"
-"「フリータイプフォントã€ãŒæœ‰åйãªå ´åˆï¼šTrueTypeフォントã§ãªã‘れã°ãªã‚Šã¾ã›"
-"ん。\n"
-"「フリータイプフォントã€ãŒç„¡åйãªå ´åˆï¼šãƒ“ットマップã¾ãŸã¯XMLベクターフォント\n"
-"ã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“。\n"
+"固定幅フォントã®ãƒ‘ス。TrueType フォントã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“。\n"
"ã“ã®ãƒ•ォントã¯ã‚³ãƒ³ã‚½ãƒ¼ãƒ«ã‚„観測記録画é¢ãªã©ã§ä½¿ç”¨ã•れã¾ã™ã€‚"
#: src/settings_translation_file.cpp
@@ -5768,6 +6008,10 @@ msgid "Player versus player"
msgstr "プレイヤー対プレイヤー"
#: src/settings_translation_file.cpp
+msgid "Poisson filtering"
+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."
@@ -5818,15 +6062,15 @@ msgstr "プロメテウスリスナーã®ã‚¢ãƒ‰ãƒ¬ã‚¹"
#: src/settings_translation_file.cpp
msgid ""
"Prometheus listener address.\n"
-"If minetest is compiled with ENABLE_PROMETHEUS option enabled,\n"
+"If Minetest is compiled with ENABLE_PROMETHEUS option enabled,\n"
"enable metrics listener for Prometheus on that address.\n"
-"Metrics can be fetch on http://127.0.0.1:30000/metrics"
+"Metrics can be fetched on http://127.0.0.1:30000/metrics"
msgstr ""
"プロメテウスリスナーã®ã‚¢ãƒ‰ãƒ¬ã‚¹ã€‚\n"
-"minetest ㌠ENABLE_PROMETHEUS オプションを有効ã«ã—ã¦ã‚³ãƒ³ãƒ‘イルã•れã¦ã„ã‚‹å ´"
+"Minetest ㌠ENABLE_PROMETHEUS オプションを有効ã«ã—ã¦ã‚³ãƒ³ãƒ‘イルã•れã¦ã„ã‚‹å ´"
"åˆã€\n"
"ãã®ã‚¢ãƒ‰ãƒ¬ã‚¹ã®ãƒ—ロメテウスã®ãƒ¡ãƒˆãƒªãƒƒã‚¯ã‚¹ãƒªã‚¹ãƒŠãƒ¼ã‚’有効ã«ã—ã¾ã™ã€‚\n"
-"メトリック㯠http://127.0.0.1:30000/metrics ã§å–å¾—å¯èƒ½"
+"メトリックス㯠http://127.0.0.1:30000/metrics ã§å–å¾—å¯èƒ½"
#: src/settings_translation_file.cpp
msgid "Proportion of large caves that contain liquid."
@@ -5899,7 +6143,7 @@ msgid ""
"csm_restriction_noderange)\n"
"READ_PLAYERINFO: 32 (disable get_player_names call client-side)"
msgstr ""
-"サーãƒã§ç‰¹å®šã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆå´æ©Ÿèƒ½ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’制é™ã—ã¾ã™ã€‚\n"
+"サーãƒãƒ¼ã§ç‰¹å®šã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆå´æ©Ÿèƒ½ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’制é™ã—ã¾ã™ã€‚\n"
"以下㮠byteflags ã‚’åˆã‚ã›ã¦ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆå´ã®æ©Ÿèƒ½ã‚’制é™ã™ã‚‹ã‹ã€åˆ¶é™ãªã—ã®\n"
"å ´åˆã¯ 0 ã«è¨­å®šã—ã¾ã™ã€‚\n"
"LOAD_CLIENT_MODS: 1 (クライアントæä¾›ã®Modã®èª­ã¿è¾¼ã¿ã‚’無効)\n"
@@ -5988,7 +6232,7 @@ msgstr "ウィンドウサイズ変更時ã«è‡ªå‹•çš„ã«ä¿å­˜ã—ã¾ã™ã€‚"
#: src/settings_translation_file.cpp
msgid "Saving map received from server"
-msgstr "サーãƒã‹ã‚‰å—ä¿¡ã—ãŸãƒžãƒƒãƒ—ä¿å­˜"
+msgstr "サーãƒãƒ¼ã‹ã‚‰å—ä¿¡ã—ãŸãƒžãƒƒãƒ—ä¿å­˜"
#: src/settings_translation_file.cpp
msgid ""
@@ -6110,39 +6354,39 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Server / Singleplayer"
-msgstr "サーム/ シングルプレイヤー"
+msgstr "サーãƒãƒ¼ / シングルプレイヤー"
#: src/settings_translation_file.cpp
msgid "Server URL"
-msgstr "サーãƒURL"
+msgstr "サーãƒãƒ¼URL"
#: src/settings_translation_file.cpp
msgid "Server address"
-msgstr "サーãƒã‚¢ãƒ‰ãƒ¬ã‚¹"
+msgstr "サーãƒãƒ¼ã‚¢ãƒ‰ãƒ¬ã‚¹"
#: src/settings_translation_file.cpp
msgid "Server description"
-msgstr "サーãƒèª¬æ˜Ž"
+msgstr "サーãƒãƒ¼èª¬æ˜Ž"
#: src/settings_translation_file.cpp
msgid "Server name"
-msgstr "サーãƒå"
+msgstr "サーãƒãƒ¼å"
#: src/settings_translation_file.cpp
msgid "Server port"
-msgstr "サーãƒãƒãƒ¼ãƒˆ"
+msgstr "サーãƒãƒ¼ãƒãƒ¼ãƒˆ"
#: src/settings_translation_file.cpp
msgid "Server side occlusion culling"
-msgstr "サーãƒå´ã®ã‚ªã‚¯ãƒ«ãƒ¼ã‚¸ãƒ§ãƒ³ã‚«ãƒªãƒ³ã‚°"
+msgstr "サーãƒãƒ¼å´ã®ã‚ªã‚¯ãƒ«ãƒ¼ã‚¸ãƒ§ãƒ³ã‚«ãƒªãƒ³ã‚°"
#: src/settings_translation_file.cpp
msgid "Serverlist URL"
-msgstr "サーãƒä¸€è¦§URL"
+msgstr "サーãƒãƒ¼ä¸€è¦§URL"
#: src/settings_translation_file.cpp
msgid "Serverlist file"
-msgstr "サーãƒä¸€è¦§ãƒ•ァイル"
+msgstr "サーãƒãƒ¼ä¸€è¦§ãƒ•ァイル"
#: src/settings_translation_file.cpp
msgid ""
@@ -6158,6 +6402,42 @@ msgstr "クライアントã‹ã‚‰é€ä¿¡ã•れるãƒãƒ£ãƒƒãƒˆãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã®æœ€
#: src/settings_translation_file.cpp
msgid ""
+"Set the shadow strength.\n"
+"Lower value means lighter shadows, higher value means darker shadows."
+msgstr ""
+"å½±ã®å¼·ã•を設定ã—ã¾ã™ã€‚\n"
+"値ãŒå°ã•ã„ã»ã©å½±ãŒè–„ãã€å€¤ãŒå¤§ãã„ã»ã©å½±ãŒæ¿ƒããªã‚Šã¾ã™ã€‚"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set the soft shadow radius size.\n"
+"Lower values mean sharper shadows, bigger values mean softer shadows.\n"
+"Minimum value: 1.0; maximum value: 10.0"
+msgstr ""
+"ã‚„ã‚らãªã„å½±ã®åŠå¾„サイズを設定ã—ã¾ã™ã€‚\n"
+"値ãŒå°ã•ã„ã»ã©ã‚·ãƒ£ãƒ¼ãƒ—ãªå½±ã€å¤§ãã„ã»ã©ã‚„ã‚らãªã„å½±ã«ãªã‚Šã¾ã™ã€‚\n"
+"最å°å€¤: 1.0ã€æœ€å¤§å€¤: 10.0"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set the tilt of Sun/Moon orbit in degrees.\n"
+"Value of 0 means no tilt / vertical orbit.\n"
+"Minimum value: 0.0; maximum value: 60.0"
+msgstr ""
+"太陽/月ã®è»Œé“ã®å‚¾ãを度数ã§è¨­å®šã—ã¾ã™ã€‚\n"
+"0 ã¯å‚¾ãã®ãªã„垂直ãªè»Œé“ã§ã™ã€‚\n"
+"最å°å€¤: 0.0ã€æœ€å¤§å€¤: 60.0"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set to true to enable Shadow Mapping.\n"
+"Requires shaders to be enabled."
+msgstr ""
+"有効ã«ã™ã‚‹ã¨å½±ã‚’映ã—ã¾ã™ã€‚\n"
+"ã‚·ã‚§ãƒ¼ãƒ€ãƒ¼ãŒæœ‰åйã§ã‚ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚"
+
+#: src/settings_translation_file.cpp
+msgid ""
"Set to true to enable waving leaves.\n"
"Requires shaders to be enabled."
msgstr ""
@@ -6181,6 +6461,16 @@ msgstr ""
"ã‚·ã‚§ãƒ¼ãƒ€ãƒ¼ãŒæœ‰åйã§ã‚ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚"
#: src/settings_translation_file.cpp
+msgid ""
+"Sets shadow texture quality to 32 bits.\n"
+"On false, 16 bits texture will be used.\n"
+"This can cause much more artifacts in the shadow."
+msgstr ""
+"å½±ã®ãƒ†ã‚¯ã‚¹ãƒãƒ£ã®å“質を 32 ビットã«è¨­å®šã—ã¾ã™ã€‚\n"
+"false ã®å ´åˆã€16ビットã®ãƒ†ã‚¯ã‚¹ãƒãƒ£ãŒä½¿ç”¨ã•れã¾ã™ã€‚\n"
+"ã“れã¯ã€å½±ãŒã•らä¸è‡ªç„¶ã«ãªã‚‹å¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚"
+
+#: src/settings_translation_file.cpp
msgid "Shader path"
msgstr "シェーダーパス"
@@ -6196,6 +6486,22 @@ msgstr ""
"ã“れã¯OpenGLビデオãƒãƒƒã‚¯ã‚¨ãƒ³ãƒ‰ã§ã®ã¿æ©Ÿèƒ½ã—ã¾ã™ã€‚"
#: src/settings_translation_file.cpp
+msgid "Shadow filter quality"
+msgstr "影フィルタã®å“質"
+
+#: src/settings_translation_file.cpp
+msgid "Shadow map max distance in nodes to render shadows"
+msgstr "影をæç”»ã™ã‚‹ãŸã‚ã®ãƒŽãƒ¼ãƒ‰ã®æœ€å¤§è·é›¢"
+
+#: src/settings_translation_file.cpp
+msgid "Shadow map texture in 32 bits"
+msgstr "32ビットã®å½±æŠ•影テクスãƒãƒ£"
+
+#: src/settings_translation_file.cpp
+msgid "Shadow map texture size"
+msgstr "影投影テクスãƒãƒ£ã‚µã‚¤ã‚º"
+
+#: src/settings_translation_file.cpp
msgid ""
"Shadow offset (in pixels) of the default font. If 0, then shadow will not be "
"drawn."
@@ -6204,12 +6510,8 @@ msgstr ""
"ん。"
#: src/settings_translation_file.cpp
-msgid ""
-"Shadow offset (in pixels) of the fallback font. If 0, then shadow will not "
-"be drawn."
-msgstr ""
-"フォールãƒãƒƒã‚¯ãƒ•ォントã®å½±ã®ã‚ªãƒ•セット(ピクセルå˜ä½ï¼‰ã€‚ \n"
-"0ã®å ´åˆã€å½±ã¯æç”»ã•れã¾ã›ã‚“。"
+msgid "Shadow strength"
+msgstr "å½±ã®å¼·ã•"
#: src/settings_translation_file.cpp
msgid "Shape of the minimap. Enabled = round, disabled = square."
@@ -6232,12 +6534,12 @@ msgstr ""
"変更後ã¯å†èµ·å‹•ãŒå¿…è¦ã§ã™ã€‚"
#: src/settings_translation_file.cpp
-msgid "Show nametag backgrounds by default"
-msgstr "既定ã§ãƒãƒ¼ãƒ ã‚¿ã‚°ã®èƒŒæ™¯ã‚’表示"
+msgid "Show name tag backgrounds by default"
+msgstr "ãƒãƒ¼ãƒ ã‚¿ã‚°ã®èƒŒæ™¯ã‚’既定ã§è¡¨ç¤º"
#: src/settings_translation_file.cpp
msgid "Shutdown message"
-msgstr "サーãƒçµ‚了時ã®ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸"
+msgstr "サーãƒãƒ¼çµ‚了時ã®ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸"
#: src/settings_translation_file.cpp
msgid ""
@@ -6266,6 +6568,10 @@ msgstr ""
"減るãŸã‚ã€ã‚¸ãƒƒã‚¿ãŒæ¸›å°‘ã—ã¾ã™ã€‚"
#: src/settings_translation_file.cpp
+msgid "Sky Body Orbit Tilt"
+msgstr "天体ã®è»Œé“傾斜角"
+
+#: src/settings_translation_file.cpp
msgid "Slice w"
msgstr "スライス w"
@@ -6323,16 +6629,12 @@ msgid "Sneaking speed, in nodes per second."
msgstr "スニーク時ã®é€Ÿåº¦ã€1ç§’ã‚ãŸã‚Šã®ãƒŽãƒ¼ãƒ‰æ•°ã§ã™ã€‚"
#: src/settings_translation_file.cpp
-msgid "Sound"
-msgstr "サウンド"
+msgid "Soft shadow radius"
+msgstr "ã‚„ã‚らãªã„å½±åŠå¾„"
#: src/settings_translation_file.cpp
-msgid "Special key"
-msgstr "スペシャルキー"
-
-#: src/settings_translation_file.cpp
-msgid "Special key for climbing/descending"
-msgstr "é™ã‚Šã‚‹ãŸã‚ã®ã‚¹ãƒšã‚·ãƒ£ãƒ«ã‚­ãƒ¼"
+msgid "Sound"
+msgstr "サウンド"
#: src/settings_translation_file.cpp
msgid ""
@@ -6358,6 +6660,18 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Spread a complete update of shadow map over given amount of frames.\n"
+"Higher values might make shadows laggy, lower values\n"
+"will consume more resources.\n"
+"Minimum value: 1; maximum value: 16"
+msgstr ""
+"å½±ã®æç”»ã®å®Œå…¨ãªæ›´æ–°ã‚’指定ã•れãŸãƒ•レーム数ã«åºƒã’ã¾ã™ã€‚\n"
+"値を大ããã™ã‚‹ã¨å½±ãŒé…å»¶ã™ã‚‹ã“ã¨ãŒã‚りã€å€¤ã‚’å°ã•ãã™ã‚‹ã¨\n"
+"より多ãã®ãƒªã‚½ãƒ¼ã‚¹ã‚’消費ã—ã¾ã™ã€‚\n"
+"最å°å€¤: 1ã€æœ€å¤§å€¤: 16"
+
+#: src/settings_translation_file.cpp
+msgid ""
"Spread of light curve boost range.\n"
"Controls the width of the range to be boosted.\n"
"Standard deviation of the light curve boost Gaussian."
@@ -6486,6 +6800,16 @@ msgstr "テクスãƒãƒ£ãƒ‘ス"
#: src/settings_translation_file.cpp
msgid ""
+"Texture size to render the shadow map on.\n"
+"This must be a power of two.\n"
+"Bigger numbers create better shadows but it is also more expensive."
+msgstr ""
+"影をæç”»ã™ã‚‹ãŸã‚ã®ãƒ†ã‚¯ã‚¹ãƒãƒ£ã‚µã‚¤ã‚ºã§ã™ã€‚\n"
+"ã“れã¯2ã®ç´¯ä¹—ã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“。\n"
+"æ•°å­—ãŒå¤§ãã„ã»ã©ã‚ˆã‚Šè‰¯ã„å½±ãŒã§ãã¾ã™ãŒã€è² è·ã‚‚高ããªã‚Šã¾ã™ã€‚"
+
+#: src/settings_translation_file.cpp
+msgid ""
"Textures on a node may be aligned either to the node or to the world.\n"
"The former mode suits better things like machines, furniture, etc., while\n"
"the latter makes stairs and microblocks fit surroundings better.\n"
@@ -6497,7 +6821,7 @@ msgstr ""
"ã“ã¨ãŒã§ãã¾ã™ã€‚\n"
"å‰è€…ã®ãƒ¢ãƒ¼ãƒ‰ã¯ã€æ©Ÿæ¢°ã€å®¶å…·ãªã©ã®ã‚ˆã†ãªã‚‚ã®ã«é©ã—ã¦ã„ã¾ã™ãŒã€\n"
"後者ã®ãƒ¢ãƒ¼ãƒ‰ã¯éšŽæ®µã‚„マイクロブロックを周囲ã®ç’°å¢ƒã«åˆã‚ã›ã‚„ã™ãã—ã¾ã™ã€‚\n"
-"ã—ã‹ã—ã€ã“ã®æ©Ÿèƒ½ã¯æ–°ã—ãã€å¤ã„サーãƒã§ã¯ä½¿ç”¨ã§ããªã„å¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚\n"
+"ã—ã‹ã—ã€ã“ã®æ©Ÿèƒ½ã¯æ–°ã—ãã€å¤ã„サーãƒãƒ¼ã§ã¯ä½¿ç”¨ã§ããªã„å¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚\n"
"ã“ã®ã‚ªãƒ—ションを使用ã™ã‚‹ã¨ç‰¹å®šã®ãƒŽãƒ¼ãƒ‰ã‚¿ã‚¤ãƒ—ã«é©ç”¨ã§ãã¾ã™ã€‚ãŸã ã—ã€\n"
"ã“れã¯å®Ÿé¨“çš„ãªã‚‚ã®ã§ã‚ã‚Šã€æ­£ã—ãæ©Ÿèƒ½ã—ãªã„å¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚"
@@ -6506,7 +6830,7 @@ msgid "The URL for the content repository"
msgstr "コンテンツリãƒã‚¸ãƒˆãƒªã®URL"
#: src/settings_translation_file.cpp
-msgid "The deadzone of the joystick"
+msgid "The dead zone of the joystick"
msgstr "ジョイスティックã®ãƒ‡ãƒƒãƒ‰ã‚¾ãƒ¼ãƒ³"
#: src/settings_translation_file.cpp
@@ -6550,7 +6874,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "The network interface that the server listens on."
-msgstr "サーãƒãŒå¾…機ã—ã¦ã„ã‚‹ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェース。"
+msgstr "サーãƒãŒãƒ¼å¾…機ã—ã¦ã„ã‚‹ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェース。"
#: src/settings_translation_file.cpp
msgid ""
@@ -6558,7 +6882,7 @@ msgid ""
"See /privs in game for a full list on your server and mod configuration."
msgstr ""
"æ–°è¦ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒè‡ªå‹•çš„ã«å–å¾—ã™ã‚‹ç‰¹æ¨©ã€‚\n"
-"サーãƒã¨Modã®æ§‹æˆã®å®Œå…¨ãªãƒªã‚¹ãƒˆã«ã¤ã„ã¦ã¯ã€ã‚²ãƒ¼ãƒ å†…ã® /privs ã‚’å‚ç…§\n"
+"サーãƒãƒ¼ã¨Modã®æ§‹æˆã®å®Œå…¨ãªãƒªã‚¹ãƒˆã«ã¤ã„ã¦ã¯ã€ã‚²ãƒ¼ãƒ å†…ã® /privs ã‚’å‚ç…§\n"
"ã—ã¦ãã ã•ã„。"
#: src/settings_translation_file.cpp
@@ -6579,24 +6903,25 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"The rendering back-end for Irrlicht.\n"
+"The rendering back-end.\n"
"A restart is required after changing this.\n"
"Note: On Android, stick with OGLES1 if unsure! App may fail to start "
"otherwise.\n"
"On other platforms, OpenGL is recommended.\n"
"Shaders are supported by OpenGL (desktop only) and OGLES2 (experimental)"
msgstr ""
-"Irrlichtã®ãƒ¬ãƒ³ãƒ€ãƒªãƒ³ã‚°ãƒãƒƒã‚¯ã‚¨ãƒ³ãƒ‰ã€‚\n"
+"レンダリングã®ãƒãƒƒã‚¯ã‚¨ãƒ³ãƒ‰ã§ã™ã€‚\n"
"変更後ã¯å†èµ·å‹•ãŒå¿…è¦ã§ã™ã€‚\n"
-"注æ„:Android ã®å ´åˆã€ã‚ˆãã‚ã‹ã‚‰ãªã„å ´åˆã¯ OGLES1 を使用ã—ã¦ãã ã•ã„ï¼\n"
-"ãã†ã—ãªã„ã¨ã‚¢ãƒ—リã®èµ·å‹•ã«å¤±æ•—ã™ã‚‹ã“ã¨ãŒã‚りã¾ã™ã€‚\n"
-"ãã®ä»–ã®ãƒ—ラットフォームã§ã¯ã€OpenGL ãŒæŽ¨å¥¨ã•れã¦ã„ã¾ã™ã€‚\n"
-"シェーダー㯠OpenGL(デスクトップã®ã¿ï¼‰ã¨ OGLES2(実験的)ã§ã‚µãƒãƒ¼ãƒˆ"
+"注:Androidã§ã¯ã€ä¸æ˜Žãªå ´åˆã¯OGRES1を使用ã—ã¦ãã ã•ã„ï¼ãã†ã—ãªã„ã¨ã‚¢ãƒ—リã®èµ·"
+"å‹•ã«å¤±æ•—ã™ã‚‹ã“ã¨ãŒã‚りã¾ã™ã€‚\n"
+"ãã®ä»–ã®ãƒ—ラットフォームã§ã¯ã€OpenGLを推奨ã—ã¾ã™ã€‚\n"
+"シェーダーã¯ã€OpenGL(デスクトップã®ã¿ï¼‰ã¨OGRES2(実験的)ã§ã‚µãƒãƒ¼ãƒˆã•れã¦ã„"
+"ã¾ã™ã€‚"
#: src/settings_translation_file.cpp
msgid ""
"The sensitivity of the joystick axes for moving the\n"
-"ingame view frustum around."
+"in-game view frustum around."
msgstr "ゲーム内ã®è¦–éŒå°ã‚’å‹•ã‹ã™ãŸã‚ã®ã‚¸ãƒ§ã‚¤ã‚¹ãƒ†ã‚£ãƒƒã‚¯è»¸ã®æ„Ÿåº¦ã€‚"
#: src/settings_translation_file.cpp
@@ -6708,6 +7033,10 @@ msgid "Touch screen threshold"
msgstr "タッãƒã‚¹ã‚¯ãƒªãƒ¼ãƒ³ã®ã—ãã„値"
#: src/settings_translation_file.cpp
+msgid "Tradeoffs for performance"
+msgstr "パフォーマンスã®ãŸã‚ã®ãƒˆãƒ¬ãƒ¼ãƒ‰ã‚ªãƒ•"
+
+#: src/settings_translation_file.cpp
msgid "Trees noise"
msgstr "木ã®ãƒŽã‚¤ã‚º"
@@ -6731,7 +7060,7 @@ msgstr "ä¿¡é ¼ã™ã‚‹Mod"
#: src/settings_translation_file.cpp
msgid "URL to the server list displayed in the Multiplayer Tab."
-msgstr "ゲームã«å‚加タブã§è¡¨ç¤ºã•れるサーãƒä¸€è¦§ã¸ã®URL。"
+msgstr "ゲームã«å‚加タブã§è¡¨ç¤ºã•れるサーãƒãƒ¼ä¸€è¦§ã¸ã®URL。"
#: src/settings_translation_file.cpp
msgid "Undersampling"
@@ -6756,7 +7085,7 @@ msgstr "無制é™ã®ãƒ—レーヤー転é€è·é›¢"
#: src/settings_translation_file.cpp
msgid "Unload unused server data"
-msgstr "未使用ã®ã‚µãƒ¼ãƒãƒ‡ãƒ¼ã‚¿ã‚’アンロード"
+msgstr "未使用ã®ã‚µãƒ¼ãƒãƒ¼ãƒ‡ãƒ¼ã‚¿ã‚’破棄"
#: src/settings_translation_file.cpp
msgid "Upper Y limit of dungeons."
@@ -6784,14 +7113,13 @@ msgstr "テクスãƒãƒ£ã‚’拡大縮å°ã™ã‚‹å ´åˆã¯ãƒã‚¤ãƒªãƒ‹ã‚¢ãƒ•ィルタ
#: src/settings_translation_file.cpp
msgid ""
-"Use mip mapping to scale textures. May slightly increase performance,\n"
+"Use mipmapping to scale textures. May slightly increase performance,\n"
"especially when using a high resolution texture pack.\n"
"Gamma correct downscaling is not supported."
msgstr ""
"ミップマッピングを使用ã—ã¦ãƒ†ã‚¯ã‚¹ãƒãƒ£ã‚’拡大縮å°ã—ã¾ã™ã€‚特ã«é«˜è§£åƒåº¦ã®\n"
"テクスãƒãƒ£ãƒ‘ックを使用ã™ã‚‹å ´åˆã¯ã€ãƒ‘フォーマンスãŒã‚ãšã‹ã«å‘上ã™ã‚‹\n"
-"å¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚\n"
-"ガンマ補正縮å°ã¯ã‚µãƒãƒ¼ãƒˆã•れã¦ã„ã¾ã›ã‚“。"
+"å¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚ガンマ補正縮å°ã¯ã‚µãƒãƒ¼ãƒˆã•れã¦ã„ã¾ã›ã‚“。"
#: src/settings_translation_file.cpp
msgid ""
@@ -6913,8 +7241,8 @@ msgid "Viewing range"
msgstr "視野"
#: src/settings_translation_file.cpp
-msgid "Virtual joystick triggers aux button"
-msgstr "ãƒãƒ¼ãƒãƒ£ãƒ«ãƒ‘ッドã§auxボタン動作"
+msgid "Virtual joystick triggers Aux1 button"
+msgstr "ãƒãƒ¼ãƒãƒ£ãƒ«ãƒ‘ッド㧠Aux1 ボタン動作"
#: src/settings_translation_file.cpp
msgid "Volume"
@@ -6991,6 +7319,10 @@ msgid "Waving plants"
msgstr "æºã‚Œã‚‹è‰èб"
#: src/settings_translation_file.cpp
+msgid "Weblink color"
+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"
@@ -7019,40 +7351,29 @@ msgid ""
"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.\n"
+"memory. Powers of 2 are recommended. This setting is ONLY applied if\n"
+"bilinear/trilinear/anisotropic filtering is enabled.\n"
"This is also used as the base node texture size for world-aligned\n"
"texture autoscaling."
msgstr ""
"ãƒã‚¤ãƒªãƒ‹ã‚¢/トライリニア/異方性フィルタを使用ã™ã‚‹ã¨ã€ä½Žè§£åƒåº¦ã®\n"
"テクスãƒãƒ£ãŒã¼ã‚„ã‘ã‚‹å¯èƒ½æ€§ãŒã‚ã‚‹ãŸã‚ã€é®®æ˜Žãªãƒ”ã‚¯ã‚»ãƒ«ã‚’ä¿æŒã™ã‚‹ãŸã‚ã«\n"
-"最近å‚補間を使用ã—ã¦è‡ªå‹•çš„ã«ãれらを拡大ã—ã¾ã™ã€‚\n"
-"ã“ã‚Œã¯æ‹¡å¤§ã•れãŸãƒ†ã‚¯ã‚¹ãƒãƒ£ã®ãŸã‚ã®æœ€å°ãƒ†ã‚¯ã‚¹ãƒãƒ£ã‚µã‚¤ã‚ºã‚’設定ã—ã¾ã™ã€‚\n"
-"より高ã„値ã¯ã‚ˆã‚Šã‚·ãƒ£ãƒ¼ãƒ—ã«è¦‹ãˆã¾ã™ãŒã€ã‚ˆã‚Šå¤šãã®ãƒ¡ãƒ¢ãƒªã‚’å¿…è¦ã¨ã—ã¾ã™ã€‚\n"
-"2ã®ã¹ãä¹—ãŒæŽ¨å¥¨ã•れã¾ã™ã€‚ã“れを1より高ã設定ã™ã‚‹ã¨ã€\n"
-"ãƒã‚¤ãƒªãƒ‹ã‚¢/トライリニア/ç•°æ–¹æ€§ãƒ•ã‚£ãƒ«ã‚¿ãƒªãƒ³ã‚°ãŒæœ‰åйã«ãªã£ã¦ã„ãªã„é™ã‚Šã€\n"
-"ç›®ã«è¦‹ãˆã‚‹åŠ¹æžœãŒãªã„å ´åˆãŒã‚りã¾ã™ã€‚\n"
+"最近å‚補間を使用ã—ã¦è‡ªå‹•çš„ã«ãれらを拡大ã—ã¾ã™ã€‚ã“ã‚Œã¯æ‹¡å¤§ã•れãŸãƒ†ã‚¯ã‚¹ãƒãƒ£"
+"ã®\n"
+"ãŸã‚ã®æœ€å°ãƒ†ã‚¯ã‚¹ãƒãƒ£ã‚µã‚¤ã‚ºã‚’設定ã—ã¾ã™ã€‚より高ã„値ã¯ã‚ˆã‚Šã‚·ãƒ£ãƒ¼ãƒ—ã«è¦‹ãˆã¾ã™"
+"ãŒã€\n"
+"より多ãã®ãƒ¡ãƒ¢ãƒªã‚’å¿…è¦ã¨ã—ã¾ã™ã€‚2ã®ç´¯ä¹—ãŒæŽ¨å¥¨ã•れã¾ã™ã€‚ã“ã®è¨­å®šã¯ã€\n"
+"ãƒã‚¤ãƒªãƒ‹ã‚¢/トライリニア/ç•°æ–¹æ€§ãƒ•ã‚£ãƒ«ã‚¿ãƒªãƒ³ã‚°ãŒæœ‰åйã®å ´åˆã«ã®ã¿é©ç”¨ã•れã¾"
+"ã™ã€‚\n"
"ã“ã‚Œã¯æ•´åˆ—テクスãƒãƒ£ã®è‡ªå‹•スケーリング用ã®åŸºæº–ノードテクスãƒãƒ£ã‚µã‚¤ã‚ºã¨\n"
"ã—ã¦ã‚‚使用ã•れã¾ã™ã€‚"
#: src/settings_translation_file.cpp
msgid ""
-"Whether FreeType fonts are used, requires FreeType support to be compiled "
-"in.\n"
-"If disabled, bitmap and XML vectors fonts are used instead."
-msgstr ""
-"フリータイプフォントを使用ã™ã‚‹ã‹ã©ã†ã‹ã¯ã€ãƒ•リータイプをサãƒãƒ¼ãƒˆã—ã¦\n"
-"コンパイルã•れã¦ã„ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ \n"
-"無効ã«ã—ãŸå ´åˆã€ä»£ã‚りã«ãƒ“ットマップãŠã‚ˆã³ XML ベクターフォントãŒä½¿ç”¨ã•れã¾"
-"ã™ã€‚"
-
-#: src/settings_translation_file.cpp
-msgid ""
-"Whether nametag backgrounds should be shown by default.\n"
+"Whether name tag backgrounds should be shown by default.\n"
"Mods may still set a background."
msgstr ""
-"既定ã§ãƒãƒ¼ãƒ ã‚¿ã‚°ã®èƒŒæ™¯ã‚’表示ã™ã‚‹ã‹ã©ã†ã‹ã§ã™ã€‚\n"
+"ãƒãƒ¼ãƒ ã‚¿ã‚°ã®èƒŒæ™¯ã‚’既定ã§è¡¨ç¤ºã™ã‚‹ã‹ã©ã†ã‹ã§ã™ã€‚\n"
"Modã§èƒŒæ™¯ã‚’設定ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚"
#: src/settings_translation_file.cpp
@@ -7080,7 +7401,7 @@ msgid ""
msgstr ""
"(LuaãŒ)クラッシュã—ãŸéš›ã«ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã«å†æŽ¥ç¶šã‚’è¦æ±‚ã™ã‚‹ã‹ã©ã†ã‹ã®\n"
"設定ã§ã™ã€‚\n"
-"サーãƒãŒè‡ªå‹•ã§å†èµ·å‹•ã•れるよã†ã«è¨­å®šã•れã¦ã„ã‚‹ãªã‚‰ã° true ã«è¨­å®š\n"
+"サーãƒãƒ¼ãŒè‡ªå‹•ã§å†èµ·å‹•ã•れるよã†ã«è¨­å®šã•れã¦ã„ã‚‹ãªã‚‰ã° true ã«è¨­å®š\n"
"ã—ã¦ãã ã•ã„。"
#: src/settings_translation_file.cpp
@@ -7107,8 +7428,8 @@ msgstr ""
"(F5を押ã™ã®ã¨åŒã˜åŠ¹æžœ)。"
#: src/settings_translation_file.cpp
-msgid "Width component of the initial window size."
-msgstr "ウィンドウ幅ã®åˆæœŸå€¤ã€‚"
+msgid "Width component of the initial window size. Ignored in fullscreen mode."
+msgstr "åˆæœŸã‚¦ã‚£ãƒ³ãƒ‰ã‚¦ã‚µã‚¤ã‚ºã®å¹…。フルスクリーンモードã§ã¯ç„¡è¦–ã•れã¾ã™ã€‚"
#: src/settings_translation_file.cpp
msgid "Width of the selection box lines around nodes."
@@ -7210,44 +7531,22 @@ msgid "Y-level of seabed."
msgstr "海底ã®Yレベル。"
#: src/settings_translation_file.cpp
-msgid ""
-"ZLib compression level to use when saving mapblocks to disk.\n"
-"-1 - Zlib's default compression level\n"
-"0 - no compresson, fastest\n"
-"9 - best compression, slowest\n"
-"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)"
-msgstr ""
-"マップブロックをディスクã«ä¿å­˜ã™ã‚‹ã¨ãã«ä½¿ç”¨ã™ã‚‹ ZLib圧縮レベル。\n"
-"-1 - Zlib ã®è¦å®šã®åœ§ç¸®ãƒ¬ãƒ™ãƒ«\n"
-"0 - 圧縮ãªã—ã€æœ€é€Ÿ\n"
-"9 - 最高ã®åœ§ç¸®ã€æœ€ã‚‚é…ã„\n"
-"(レベル 1〜3 ã¯Zlibã®ã€Œé«˜é€Ÿã€æ–¹å¼ã‚’使用ã—ã€4〜9 ã¯é€šå¸¸æ–¹å¼ã‚’使用)"
-
-#: src/settings_translation_file.cpp
-msgid ""
-"ZLib compression level to use when sending mapblocks to the client.\n"
-"-1 - Zlib's default compression level\n"
-"0 - no compresson, fastest\n"
-"9 - best compression, slowest\n"
-"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)"
-msgstr ""
-"マップブロックをクライアントã«é€ä¿¡ã™ã‚‹ã¨ãã«ä½¿ç”¨ã™ã‚‹ ZLib圧縮レベル。\n"
-"-1 - Zlib ã®è¦å®šã®åœ§ç¸®ãƒ¬ãƒ™ãƒ«\n"
-"0 - 圧縮ãªã—ã€æœ€é€Ÿ\n"
-"9 - 最高ã®åœ§ç¸®ã€æœ€ã‚‚é…ã„\n"
-"(レベル 1〜3 ã¯Zlibã®ã€Œé«˜é€Ÿã€æ–¹å¼ã‚’使用ã—ã€4〜9 ã¯é€šå¸¸æ–¹å¼ã‚’使用)"
-
-#: src/settings_translation_file.cpp
msgid "cURL file download timeout"
msgstr "cURLファイルダウンロードタイムアウト"
#: src/settings_translation_file.cpp
+msgid "cURL interactive timeout"
+msgstr "cURL インタラクティブタイムアウト"
+
+#: src/settings_translation_file.cpp
msgid "cURL parallel limit"
msgstr "cURL並行処ç†åˆ¶é™"
-#: src/settings_translation_file.cpp
-msgid "cURL timeout"
-msgstr "cURLタイムアウト"
+#~ msgid "- Creative Mode: "
+#~ msgstr "- クリエイティブモード: "
+
+#~ msgid "- Damage: "
+#~ msgstr "- ダメージ: "
#~ msgid ""
#~ "0 = parallax occlusion with slope information (faster).\n"
@@ -7256,6 +7555,9 @@ msgstr "cURLタイムアウト"
#~ "0 = æ–œé¢æƒ…報付ãã®è¦–å·®é®è”½ãƒžãƒƒãƒ”ング(高速)。\n"
#~ "1 = リリーフマッピング(正確ã ãŒä½Žé€Ÿ)。"
+#~ msgid "Address / Port"
+#~ msgstr "アドレス / ãƒãƒ¼ãƒˆ"
+
#~ msgid ""
#~ "Adjust the gamma encoding for the light tables. Higher numbers are "
#~ "brighter.\n"
@@ -7273,6 +7575,9 @@ msgstr "cURLタイムアウト"
#~ msgid "Back"
#~ msgstr "戻る"
+#~ msgid "Bits per pixel (aka color depth) in fullscreen mode."
+#~ msgstr "フルスクリーンモードã§ã®ãƒ“ット数(色深度)。"
+
#~ msgid "Bump Mapping"
#~ msgstr "ãƒãƒ³ãƒ—マッピング"
@@ -7312,13 +7617,26 @@ msgstr "cURLタイムアウト"
#~ msgid "Controls width of tunnels, a smaller value creates wider tunnels."
#~ msgstr "トンãƒãƒ«ã®å¹…を制御ã€å°ã•ã„æ–¹ã®å€¤ã»ã©åºƒã„トンãƒãƒ«ã‚’生æˆã—ã¾ã™ã€‚"
+#~ msgid "Credits"
+#~ msgstr "クレジット"
+
#~ msgid "Crosshair color (R,G,B)."
#~ msgstr "照準線ã®è‰² (R,G,B)。"
+#~ msgid "Damage enabled"
+#~ msgstr "ダメージ有効"
+
#~ msgid "Darkness sharpness"
#~ msgstr "æš—ã•ã®é‹­ã•"
#~ msgid ""
+#~ "Default timeout for cURL, stated in milliseconds.\n"
+#~ "Only has an effect if compiled with cURL."
+#~ msgstr ""
+#~ "cURLã®æ—¢å®šã®ã‚¿ã‚¤ãƒ ã‚¢ã‚¦ãƒˆã€ãƒŸãƒªç§’ã§å®šã‚ã¾ã™ã€‚\n"
+#~ "cURLã§ã‚³ãƒ³ãƒ‘イルã•れãŸå ´åˆã«ã®ã¿åŠ¹æžœãŒã‚りã¾ã™ã€‚"
+
+#~ msgid ""
#~ "Defines areas of floatland smooth terrain.\n"
#~ "Smooth floatlands occur when noise > 0."
#~ msgstr ""
@@ -7384,6 +7702,15 @@ msgstr "cURLタイムアウト"
#~ msgid "FPS in pause menu"
#~ msgstr "ãƒãƒ¼ã‚ºãƒ¡ãƒ‹ãƒ¥ãƒ¼ã§ã®FPS"
+#~ msgid "Fallback font shadow"
+#~ msgstr "フォールãƒãƒƒã‚¯ãƒ•ォントã®å½±"
+
+#~ msgid "Fallback font shadow alpha"
+#~ msgstr "フォールãƒãƒƒã‚¯ãƒ•ォントã®å½±ã®é€éŽ"
+
+#~ msgid "Fallback font size"
+#~ msgstr "フォールãƒãƒƒã‚¯ãƒ•ォントã®å¤§ãã•"
+
#~ msgid "Floatland base height noise"
#~ msgstr "æµ®éŠå¤§é™¸ã®åŸºæº–高ã•ノイズ"
@@ -7393,6 +7720,15 @@ msgstr "cURLタイムアウト"
#~ msgid "Font shadow alpha (opaqueness, between 0 and 255)."
#~ msgstr "フォントã®å½±ã®é€éŽ (ä¸é€æ˜Žã€0~255ã®é–“)。"
+#~ msgid "Font size of the fallback font in point (pt)."
+#~ msgstr "フォールãƒãƒƒã‚¯ãƒ•ォントã®ãƒ•ォント サイズ (pt)。"
+
+#~ msgid "FreeType fonts"
+#~ msgstr "フリータイプフォント"
+
+#~ msgid "Full screen BPP"
+#~ msgstr "フルスクリーンã®BPP"
+
#~ msgid "Gamma"
#~ msgstr "ガンマ"
@@ -7402,9 +7738,15 @@ msgstr "cURLタイムアウト"
#~ msgid "Generate normalmaps"
#~ msgstr "法線マップã®ç”Ÿæˆ"
+#~ msgid "High-precision FPU"
+#~ msgstr "高精度FPU"
+
#~ msgid "IPv6 support."
#~ msgstr "IPv6 サãƒãƒ¼ãƒˆã€‚"
+#~ msgid "Install: file: \"$1\""
+#~ msgstr "インストール: ファイル: \"$1\""
+
#~ msgid "Lava depth"
#~ msgstr "æº¶å²©ã®æ·±ã•"
@@ -7420,6 +7762,10 @@ msgstr "cURLタイムアウト"
#~ msgid "Main menu style"
#~ msgstr "メインメニューã®ã‚¹ã‚¿ã‚¤ãƒ«"
+#~ msgid "Makes DirectX work with LuaJIT. Disable if it causes troubles."
+#~ msgstr ""
+#~ "DirectX ã‚’ LuaJIT ã¨é€£æºã•ã›ã¾ã™ã€‚å•題ãŒã‚ã‚‹å ´åˆã¯ç„¡åйã«ã—ã¦ãã ã•ã„。"
+
#~ msgid "Minimap in radar mode, Zoom x2"
#~ msgstr "ミニマップ レーダーモードã€ã‚ºãƒ¼ãƒ  x2"
@@ -7432,6 +7778,9 @@ msgstr "cURLタイムアウト"
#~ msgid "Minimap in surface mode, Zoom x4"
#~ msgstr "ミニマップ 表é¢ãƒ¢ãƒ¼ãƒ‰ã€ã‚ºãƒ¼ãƒ  x4"
+#~ msgid "Name / Password"
+#~ msgstr "åå‰ / パスワード"
+
#~ msgid "Name/Password"
#~ msgstr "åå‰ / パスワード"
@@ -7450,6 +7799,11 @@ msgstr "cURLタイムアウト"
#~ msgid "Ok"
#~ msgstr "決定"
+#~ msgid ""
+#~ "Opaqueness (alpha) of the shadow behind the fallback font, between 0 and "
+#~ "255."
+#~ msgstr "フォールãƒãƒƒã‚¯ãƒ•ォントã®å½±ã®ä¸é€æ˜Žåº¦ï¼ˆé€éŽï¼‰ã¯0ã‹ã‚‰255ã®é–“ã§ã™ã€‚"
+
#~ msgid "Overall bias of parallax occlusion effect, usually scale/2."
#~ msgstr "視差é®è”½åŠ¹æžœã®å…¨ä½“çš„ãƒã‚¤ã‚¢ã‚¹ã€é€šå¸¸ スケール/2 ã§ã™ã€‚"
@@ -7486,15 +7840,42 @@ msgstr "cURLタイムアウト"
#~ msgid "Projecting dungeons"
#~ msgstr "çªå‡ºã™ã‚‹ãƒ€ãƒ³ã‚¸ãƒ§ãƒ³"
+#~ msgid "PvP enabled"
+#~ msgstr "PvP有効"
+
#~ msgid "Reset singleplayer world"
#~ msgstr "ワールドをリセット"
#~ msgid "Select Package File:"
#~ msgstr "ãƒ‘ãƒƒã‚±ãƒ¼ã‚¸ãƒ•ã‚¡ã‚¤ãƒ«ã‚’é¸æŠž:"
+#~ msgid ""
+#~ "Set the shadow update time.\n"
+#~ "Lower value means shadows and map updates faster, but it consume more "
+#~ "resources.\n"
+#~ "Minimun value 0.001 seconds max value 0.2 seconds"
+#~ msgstr ""
+#~ "å½±ã®æ›´æ–°æ™‚間を設定ã—ã¾ã™ã€‚\n"
+#~ "値ãŒå°ã•ã„ã»ã©å½±ã‚„ãƒžãƒƒãƒ—ã®æ›´æ–°ãŒé€Ÿããªã‚Šã¾ã™ãŒã€ãƒªã‚½ãƒ¼ã‚¹ã‚’å¤šãæ¶ˆè²»ã—ã¾"
+#~ "ã™ã€‚\n"
+#~ "最å°å€¤0.001ç§’ã€æœ€å¤§å€¤0.2ç§’"
+
#~ msgid "Shadow limit"
#~ msgstr "å½±ã®åˆ¶é™"
+#~ msgid ""
+#~ "Shadow offset (in pixels) of the fallback font. If 0, then shadow will "
+#~ "not be drawn."
+#~ msgstr ""
+#~ "フォールãƒãƒƒã‚¯ãƒ•ォントã®å½±ã®ã‚ªãƒ•セット(ピクセルå˜ä½ï¼‰ã€‚ \n"
+#~ "0ã®å ´åˆã€å½±ã¯æç”»ã•れã¾ã›ã‚“。"
+
+#~ msgid "Special"
+#~ msgstr "スペシャル"
+
+#~ msgid "Special key"
+#~ msgstr "スペシャルキー"
+
#~ msgid "Start Singleplayer"
#~ msgstr "シングルプレイスタート"
@@ -7507,6 +7888,10 @@ msgstr "cURLタイムアウト"
#~ msgid "This font will be used for certain languages."
#~ msgstr "ã“ã®ãƒ•ォントã¯ç‰¹å®šã®è¨€èªžã§ä½¿ç”¨ã•れã¾ã™ã€‚"
+#~ msgid "To enable shaders the OpenGL driver needs to be used."
+#~ msgstr ""
+#~ "シェーダーを有効ã«ã™ã‚‹ã«ã¯OpenGLã®ãƒ‰ãƒ©ã‚¤ãƒã‚’使用ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚"
+
#~ msgid "Toggle Cinematic"
#~ msgstr "映画風モード切替"
@@ -7526,6 +7911,16 @@ msgstr "cURLタイムアウト"
#~ msgid "Waving water"
#~ msgstr "æºã‚Œã‚‹æ°´"
+#~ msgid ""
+#~ "Whether FreeType fonts are used, requires FreeType support to be compiled "
+#~ "in.\n"
+#~ "If disabled, bitmap and XML vectors fonts are used instead."
+#~ msgstr ""
+#~ "フリータイプフォントを使用ã™ã‚‹ã‹ã©ã†ã‹ã¯ã€ãƒ•リータイプをサãƒãƒ¼ãƒˆã—ã¦\n"
+#~ "コンパイルã•れã¦ã„ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ \n"
+#~ "無効ã«ã—ãŸå ´åˆã€ä»£ã‚りã«ãƒ“ットマップãŠã‚ˆã³ XML ベクターフォントãŒä½¿ç”¨ã•れ"
+#~ "ã¾ã™ã€‚"
+
#~ msgid "Whether dungeons occasionally project from the terrain."
#~ msgstr "ãƒ€ãƒ³ã‚¸ãƒ§ãƒ³ãŒæ™‚折地形ã‹ã‚‰çªå‡ºã™ã‚‹ã‹ã©ã†ã‹ã€‚"
@@ -7540,3 +7935,9 @@ msgstr "cURLタイムアウト"
#~ msgid "Yes"
#~ msgstr "ã¯ã„"
+
+#~ msgid "You died."
+#~ msgstr "ã‚ãªãŸã¯æ­»ã«ã¾ã—ãŸã€‚"
+
+#~ msgid "needs_fallback_font"
+#~ msgstr "yes"
diff --git a/po/jbo/minetest.po b/po/jbo/minetest.po
index 83ccdb9df..b9e52297e 100644
--- a/po/jbo/minetest.po
+++ b/po/jbo/minetest.po
@@ -2,7 +2,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Lojban (Minetest)\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-02-23 19:03+0100\n"
+"POT-Creation-Date: 2022-01-25 23:19+0100\n"
"PO-Revision-Date: 2021-02-13 08:50+0000\n"
"Last-Translator: Wuzzy <almikes@aol.com>\n"
"Language-Team: Lojban <https://hosted.weblate.org/projects/minetest/minetest/"
@@ -14,6 +14,47 @@ msgstr ""
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: Weblate 4.5-dev\n"
+#: builtin/client/chatcommands.lua
+msgid "Clear the out chat queue"
+msgstr ""
+
+#: builtin/client/chatcommands.lua
+#, fuzzy
+msgid "Empty command."
+msgstr "minde"
+
+#: builtin/client/chatcommands.lua
+#, fuzzy
+msgid "Exit to main menu"
+msgstr "sisti tu'a le se kelci"
+
+#: builtin/client/chatcommands.lua
+#, fuzzy
+msgid "Invalid command: "
+msgstr "minde"
+
+#: builtin/client/chatcommands.lua
+msgid "Issued command: "
+msgstr ""
+
+#: builtin/client/chatcommands.lua
+#, fuzzy
+msgid "List online players"
+msgstr "nonselkansa"
+
+#: builtin/client/chatcommands.lua
+#, fuzzy
+msgid "Online players: "
+msgstr "nonselkansa"
+
+#: builtin/client/chatcommands.lua
+msgid "The out chat queue is now empty."
+msgstr ""
+
+#: builtin/client/chatcommands.lua
+msgid "This command is disabled by server."
+msgstr ""
+
#: builtin/client/death_formspec.lua src/client/game.cpp
msgid "Respawn"
msgstr "tolcanci"
@@ -22,11 +63,42 @@ msgstr "tolcanci"
msgid "You died"
msgstr ".i do morsi"
+#: builtin/common/chatcommands.lua
+#, fuzzy
+msgid "Available commands:"
+msgstr "minde"
+
+#: builtin/common/chatcommands.lua
+#, fuzzy
+msgid "Available commands: "
+msgstr "minde"
+
+#: builtin/common/chatcommands.lua
+msgid "Command not available: "
+msgstr ""
+
+#: builtin/common/chatcommands.lua
+msgid "Get help for commands"
+msgstr ""
+
+#: builtin/common/chatcommands.lua
+msgid ""
+"Use '.help <cmd>' to get more information, or '.help all' to list everything."
+msgstr ""
+
+#: builtin/common/chatcommands.lua
+msgid "[all | <cmd>]"
+msgstr ""
+
#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp
msgid "OK"
msgstr "fitytu'i"
#: builtin/fstk/ui.lua
+msgid "<none available>"
+msgstr ""
+
+#: builtin/fstk/ui.lua
#, fuzzy
msgid "An error occurred in a Lua script:"
msgstr ""
@@ -238,6 +310,10 @@ msgid "Install missing dependencies"
msgstr "na'e se nitcu"
#: builtin/mainmenu/dlg_contentstore.lua
+msgid "Install: Unsupported file type or broken archive"
+msgstr ""
+
+#: builtin/mainmenu/dlg_contentstore.lua
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Mods"
msgstr "se samtcise'a"
@@ -544,7 +620,7 @@ msgstr ""
msgid "Browse"
msgstr ""
-#: builtin/mainmenu/dlg_settings_advanced.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_settings.lua
msgid "Disabled"
msgstr "ganda"
@@ -569,7 +645,7 @@ msgid "Offset"
msgstr ""
#: builtin/mainmenu/dlg_settings_advanced.lua
-msgid "Persistance"
+msgid "Persistence"
msgstr ""
#: builtin/mainmenu/dlg_settings_advanced.lua
@@ -588,7 +664,7 @@ msgstr "xruti fi le zmiselcu'a"
msgid "Scale"
msgstr ""
-#: builtin/mainmenu/dlg_settings_advanced.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_online.lua
msgid "Search"
msgstr "sisku"
@@ -682,14 +758,6 @@ msgid "Install Mod: Unable to find suitable folder name for modpack $1"
msgstr ""
#: builtin/mainmenu/pkgmgr.lua
-msgid "Install: Unsupported file type \"$1\" or broken archive"
-msgstr ""
-
-#: builtin/mainmenu/pkgmgr.lua
-msgid "Install: file: \"$1\""
-msgstr ""
-
-#: builtin/mainmenu/pkgmgr.lua
msgid "Unable to find a valid mod or modpack"
msgstr ""
@@ -723,6 +791,41 @@ msgstr ""
".i ko troci lo nu za'u re'u samymo'i lo liste be lo'i samse'u .i ko cipcta "
"lo do te samjo'e"
+#: builtin/mainmenu/tab_about.lua
+msgid "About"
+msgstr ""
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Active Contributors"
+msgstr "liste lu'i ro ca gunka"
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Active renderer:"
+msgstr ""
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Core Developers"
+msgstr ""
+
+#: builtin/mainmenu/tab_about.lua
+#, fuzzy
+msgid "Open User Data Directory"
+msgstr "cuxna fi lu'i le datnyveimei"
+
+#: builtin/mainmenu/tab_about.lua
+msgid ""
+"Opens the directory that contains user-provided worlds, games, mods,\n"
+"and texture packs in a file manager / explorer."
+msgstr ""
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Previous Contributors"
+msgstr "liste lu'i ro pu je nai ca gunka"
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Previous Core Developers"
+msgstr ""
+
#: builtin/mainmenu/tab_content.lua
msgid "Browse online content"
msgstr ""
@@ -766,37 +869,6 @@ msgstr "to'e samtcise'a le bakfu"
msgid "Use Texture Pack"
msgstr ""
-#: builtin/mainmenu/tab_credits.lua
-msgid "Active Contributors"
-msgstr "liste lu'i ro ca gunka"
-
-#: builtin/mainmenu/tab_credits.lua
-msgid "Core Developers"
-msgstr ""
-
-#: builtin/mainmenu/tab_credits.lua
-msgid "Credits"
-msgstr "liste lu'i ro gunka"
-
-#: builtin/mainmenu/tab_credits.lua
-#, fuzzy
-msgid "Open User Data Directory"
-msgstr "cuxna fi lu'i le datnyveimei"
-
-#: builtin/mainmenu/tab_credits.lua
-msgid ""
-"Opens the directory that contains user-provided worlds, games, mods,\n"
-"and texture packs in a file manager / explorer."
-msgstr ""
-
-#: builtin/mainmenu/tab_credits.lua
-msgid "Previous Contributors"
-msgstr "liste lu'i ro pu je nai ca gunka"
-
-#: builtin/mainmenu/tab_credits.lua
-msgid "Previous Core Developers"
-msgstr ""
-
#: builtin/mainmenu/tab_local.lua
msgid "Announce Server"
msgstr ""
@@ -826,7 +898,7 @@ msgstr "co'a samtcise'u"
msgid "Install games from ContentDB"
msgstr ""
-#: builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
msgid "Name"
msgstr ""
@@ -838,7 +910,7 @@ msgstr "cnino"
msgid "No world created or selected!"
msgstr ".i do no munje cu cupra ja cu cuxna"
-#: builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
msgid "Password"
msgstr "lo lerpoijaspu"
@@ -846,7 +918,7 @@ msgstr "lo lerpoijaspu"
msgid "Play Game"
msgstr "co'a kelci"
-#: builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
msgid "Port"
msgstr "judrnporte"
@@ -868,8 +940,13 @@ msgid "Start Game"
msgstr "co'a kelci"
#: builtin/mainmenu/tab_online.lua
-msgid "Address / Port"
-msgstr "lo samjudri jo'u judrnporte"
+#, fuzzy
+msgid "Address"
+msgstr "- judri: "
+
+#: builtin/mainmenu/tab_online.lua src/client/keycode.cpp
+msgid "Clear"
+msgstr ""
#: builtin/mainmenu/tab_online.lua
msgid "Connect"
@@ -879,8 +956,9 @@ msgstr "co'a samjo'e"
msgid "Creative mode"
msgstr "finti se kelci"
+#. ~ PvP = Player versus Player
#: builtin/mainmenu/tab_online.lua
-msgid "Damage enabled"
+msgid "Damage / PvP"
msgstr ""
#: builtin/mainmenu/tab_online.lua
@@ -888,26 +966,35 @@ msgid "Del. Favorite"
msgstr "co'u cmima lu'i ro nelci se tcita"
#: builtin/mainmenu/tab_online.lua
-msgid "Favorite"
+#, fuzzy
+msgid "Favorites"
msgstr "nelci se tcita"
#: builtin/mainmenu/tab_online.lua
-msgid "Join Game"
-msgstr "co'a kansa fi le ka kelci"
+msgid "Incompatible Servers"
+msgstr ""
#: builtin/mainmenu/tab_online.lua
-msgid "Name / Password"
-msgstr "lo cmene .e lo lerpoijaspu"
+msgid "Join Game"
+msgstr "co'a kansa fi le ka kelci"
#: builtin/mainmenu/tab_online.lua
msgid "Ping"
msgstr ".pin. temci"
-#. ~ PvP = Player versus Player
#: builtin/mainmenu/tab_online.lua
-msgid "PvP enabled"
+msgid "Public Servers"
+msgstr ""
+
+#: builtin/mainmenu/tab_online.lua
+msgid "Refresh"
msgstr ""
+#: builtin/mainmenu/tab_online.lua
+#, fuzzy
+msgid "Server Description"
+msgstr "ve skicu le samtcise'u"
+
#: builtin/mainmenu/tab_settings.lua
msgid "2x"
msgstr ""
@@ -949,12 +1036,32 @@ msgstr ""
msgid "Connected Glass"
msgstr "lo jorne blaci"
+#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
+msgid "Dynamic shadows"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Dynamic shadows: "
+msgstr ""
+
#: builtin/mainmenu/tab_settings.lua
#, fuzzy
msgid "Fancy Leaves"
msgstr "lo tolkli pezli"
#: builtin/mainmenu/tab_settings.lua
+msgid "High"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Low"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Medium"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
msgid "Mipmap"
msgstr "lo puvrmipmepi"
@@ -1033,10 +1140,6 @@ msgstr "lo xutla se gusni"
msgid "Texturing:"
msgstr ""
-#: builtin/mainmenu/tab_settings.lua
-msgid "To enable shaders the OpenGL driver needs to be used."
-msgstr ""
-
#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
#, fuzzy
msgid "Tone Mapping"
@@ -1051,6 +1154,14 @@ msgid "Trilinear Filter"
msgstr "puvycibli'iju'e"
#: builtin/mainmenu/tab_settings.lua
+msgid "Ultra High"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Very Low"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
#, fuzzy
msgid "Waving Leaves"
msgstr "lo melbi pezli"
@@ -1065,7 +1176,7 @@ msgstr ".i ca'o samymo'i lo me la'o gy.node.gy."
msgid "Waving Plants"
msgstr "lo melbi pezli"
-#: src/client/client.cpp
+#: src/client/client.cpp src/client/game.cpp
msgid "Connection timed out."
msgstr ""
@@ -1099,7 +1210,8 @@ msgstr ""
"toi"
#: src/client/clientlauncher.cpp
-msgid "Could not find or load game \""
+#, fuzzy
+msgid "Could not find or load game: "
msgstr ""
".i na cumki fa le nu le se kelci cu jai se facki je cu se samymo'i .i ky. du "
"la'o zoi."
@@ -1132,18 +1244,6 @@ msgstr ""
msgid "Provided world path doesn't exist: "
msgstr ""
-#. ~ DO NOT TRANSLATE THIS LITERALLY!
-#. This is a special string. Put either "no" or "yes"
-#. into the translation field (literally).
-#. Choose "yes" if the language requires use of the fallback
-#. font, "no" otherwise.
-#. The fallback font is (normally) required for languages with
-#. non-Latin script, like Chinese.
-#. When in doubt, test your translation.
-#: src/client/fontengine.cpp
-msgid "needs_fallback_font"
-msgstr "no"
-
#: src/client/game.cpp
msgid ""
"\n"
@@ -1157,14 +1257,6 @@ msgid "- Address: "
msgstr "- judri: "
#: src/client/game.cpp
-msgid "- Creative Mode: "
-msgstr "- finti se kelci: "
-
-#: src/client/game.cpp
-msgid "- Damage: "
-msgstr ""
-
-#: src/client/game.cpp
msgid "- Mode: "
msgstr ""
@@ -1188,6 +1280,16 @@ msgstr "- cmene le samtcise'u: "
#: src/client/game.cpp
#, fuzzy
+msgid "A serialization error occurred:"
+msgstr ".i da nabmi"
+
+#: src/client/game.cpp
+#, c-format
+msgid "Access denied. Reason: %s"
+msgstr ""
+
+#: src/client/game.cpp
+#, fuzzy
msgid "Automatic forward disabled"
msgstr "za'i ca'u muvdu"
@@ -1197,6 +1299,22 @@ msgid "Automatic forward enabled"
msgstr "za'i ca'u muvdu"
#: src/client/game.cpp
+msgid "Block bounds hidden"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Block bounds shown for all blocks"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Block bounds shown for current block"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Block bounds shown for nearby blocks"
+msgstr ""
+
+#: src/client/game.cpp
msgid "Camera update disabled"
msgstr ""
@@ -1205,6 +1323,10 @@ msgid "Camera update enabled"
msgstr ""
#: src/client/game.cpp
+msgid "Can't show block bounds (need 'basic_debug' privilege)"
+msgstr ""
+
+#: src/client/game.cpp
msgid "Change Password"
msgstr "basti fi le ka lerpoijaspu"
@@ -1219,6 +1341,11 @@ msgid "Cinematic mode enabled"
msgstr "le nu finti kelci"
#: src/client/game.cpp
+#, fuzzy
+msgid "Client disconnected"
+msgstr "lo samtciselse'u"
+
+#: src/client/game.cpp
msgid "Client side scripting is disabled"
msgstr ""
@@ -1227,6 +1354,10 @@ msgid "Connecting to server..."
msgstr ".i ca'o samjo'e le samse'u"
#: src/client/game.cpp
+msgid "Connection failed for unknown reason"
+msgstr ""
+
+#: src/client/game.cpp
msgid "Continue"
msgstr "ranji"
@@ -1250,6 +1381,11 @@ msgid ""
msgstr ""
#: src/client/game.cpp
+#, c-format
+msgid "Couldn't resolve address: %s"
+msgstr ""
+
+#: src/client/game.cpp
msgid "Creating client..."
msgstr ".i ca'o cupra le samtciselse'u"
@@ -1370,6 +1506,11 @@ msgid "Minimap currently disabled by game or mod"
msgstr ""
#: src/client/game.cpp
+#, fuzzy
+msgid "Multiplayer"
+msgstr "nonselkansa"
+
+#: src/client/game.cpp
msgid "Noclip mode disabled"
msgstr ""
@@ -1446,6 +1587,21 @@ msgstr "lo ni sance "
#: src/client/game.cpp
#, c-format
+msgid "The server is probably running a different version of %s."
+msgstr ""
+
+#: src/client/game.cpp
+#, c-format
+msgid "Unable to connect to %s because IPv6 is disabled"
+msgstr ""
+
+#: src/client/game.cpp
+#, c-format
+msgid "Unable to listen on %s because IPv6 is disabled"
+msgstr ""
+
+#: src/client/game.cpp
+#, c-format
msgid "Viewing range changed to %d"
msgstr ""
@@ -1514,10 +1670,6 @@ msgid "Caps Lock"
msgstr ""
#: src/client/keycode.cpp
-msgid "Clear"
-msgstr ""
-
-#: src/client/keycode.cpp
msgid "Control"
msgstr ""
@@ -1788,6 +1940,15 @@ msgstr ""
msgid "Minimap in texture mode"
msgstr ""
+#: src/gui/guiChatConsole.cpp
+#, fuzzy
+msgid "Failed to open webpage"
+msgstr ".i da nabmi fi le nu kibycpa la'o zoi. $1 .zoi"
+
+#: src/gui/guiChatConsole.cpp
+msgid "Opening webpage"
+msgstr ""
+
#: src/gui/guiConfirmRegistration.cpp src/gui/guiPasswordChange.cpp
msgid "Passwords do not match!"
msgstr ".i lu'i le re lerpoijaspu na simxu le ka mintu"
@@ -1811,7 +1972,7 @@ msgid "Proceed"
msgstr ""
#: src/gui/guiKeyChangeMenu.cpp
-msgid "\"Special\" = climb down"
+msgid "\"Aux1\" = climb down"
msgstr ""
#: src/gui/guiKeyChangeMenu.cpp
@@ -1824,10 +1985,18 @@ msgid "Automatic jumping"
msgstr ""
#: src/gui/guiKeyChangeMenu.cpp
+msgid "Aux1"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
msgid "Backward"
msgstr "ti'a muvdu"
#: src/gui/guiKeyChangeMenu.cpp
+msgid "Block bounds"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
#, fuzzy
msgid "Change camera"
msgstr "gafygau lo lerpoijaspu"
@@ -1918,10 +2087,6 @@ msgid "Sneak"
msgstr "masno cadzu"
#: src/gui/guiKeyChangeMenu.cpp
-msgid "Special"
-msgstr ""
-
-#: src/gui/guiKeyChangeMenu.cpp
#, fuzzy
msgid "Toggle HUD"
msgstr "mu'e co'a jonai mo'u vofli"
@@ -1994,8 +2159,8 @@ msgid "Muted"
msgstr "ko da'ergau le batke"
#: src/gui/guiVolumeChange.cpp
-#, fuzzy
-msgid "Sound Volume: "
+#, fuzzy, c-format
+msgid "Sound Volume: %d%%"
msgstr "lo ni sance "
#. ~ Imperative, as in "Enter/type in text".
@@ -2019,8 +2184,8 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"(Android) Use virtual joystick to trigger \"aux\" button.\n"
-"If enabled, virtual joystick will also tap \"aux\" button when out of main "
+"(Android) Use virtual joystick to trigger \"Aux1\" button.\n"
+"If enabled, virtual joystick will also tap \"Aux1\" button when out of main "
"circle."
msgstr ""
@@ -2204,6 +2369,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Adjust the detected display density, used for scaling UI elements."
+msgstr ""
+
+#: src/settings_translation_file.cpp
#, c-format
msgid ""
"Adjusts the density of the floatland layer.\n"
@@ -2318,6 +2487,15 @@ msgstr ""
#: src/settings_translation_file.cpp
#, fuzzy
+msgid "Aux1 key"
+msgstr "mu'e plipe"
+
+#: src/settings_translation_file.cpp
+msgid "Aux1 key for climbing/descending"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
msgid "Backward key"
msgstr "za'i ti'a muvdu"
@@ -2363,10 +2541,6 @@ msgid "Biome noise"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Bits per pixel (aka color depth) in fullscreen mode."
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Block send optimize distance"
msgstr ""
@@ -2465,6 +2639,15 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Chat command time message threshold"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Chat commands"
+msgstr "minde"
+
+#: src/settings_translation_file.cpp
msgid "Chat font size"
msgstr ""
@@ -2499,8 +2682,8 @@ msgstr ""
#: src/settings_translation_file.cpp
#, fuzzy
-msgid "Chatcommands"
-msgstr "minde"
+msgid "Chat weblinks"
+msgstr ".i ca viska le tavla .uidje"
#: src/settings_translation_file.cpp
msgid "Chunk size"
@@ -2521,6 +2704,12 @@ msgid "Clean transparent textures"
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Clickable weblinks (middle-click or Ctrl+left-click) enabled in chat console "
+"output."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Client"
msgstr "lo samtciselse'u"
@@ -2568,6 +2757,11 @@ msgid "Colored fog"
msgstr "le bumgapci cu skari"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Colored shadows"
+msgstr "le bumgapci cu skari"
+
+#: src/settings_translation_file.cpp
msgid ""
"Comma-separated list of flags to hide in the content repository.\n"
"\"nonfree\" can be used to hide packages which do not qualify as 'free "
@@ -2596,6 +2790,22 @@ msgid "Command key"
msgstr "minde"
#: src/settings_translation_file.cpp
+msgid ""
+"Compression level to use when saving mapblocks to disk.\n"
+"-1 - use default compression level\n"
+"0 - least compression, fastest\n"
+"9 - best compression, slowest"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Compression level to use when sending mapblocks to the client.\n"
+"-1 - use default compression level\n"
+"0 - least compression, fastest\n"
+"9 - best compression, slowest"
+msgstr ""
+
+#: src/settings_translation_file.cpp
#, fuzzy
msgid "Connect glass"
msgstr "lo jorne blaci"
@@ -2689,7 +2899,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"Crosshair alpha (opaqueness, between 0 and 255).\n"
-"Also controls the object crosshair color"
+"This also applies to the object crosshair."
msgstr ""
#: src/settings_translation_file.cpp
@@ -2766,8 +2976,9 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Default timeout for cURL, stated in milliseconds.\n"
-"Only has an effect if compiled with cURL."
+"Define shadow filtering quality.\n"
+"This simulates the soft shadows effect by applying a PCF or Poisson disk\n"
+"but also uses more resources."
msgstr ""
#: src/settings_translation_file.cpp
@@ -2887,6 +3098,10 @@ msgid "Disallow empty passwords"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Display Density Scaling Factor"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Domain name of server, to be displayed in the serverlist."
msgstr ""
@@ -2931,6 +3146,19 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Enable Poisson disk filtering.\n"
+"On true uses Poisson disk to make \"soft shadows\". Otherwise uses PCF "
+"filtering."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable colored shadows.\n"
+"On true translucent nodes cast colored shadows. This is expensive."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Enable console window"
msgstr ""
@@ -3039,6 +3267,12 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Enables tradeoffs that reduce CPU load or increase rendering performance\n"
+"at the expense of minor visual glitches that do not impact game playability."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Engine profiling data print interval"
msgstr ""
@@ -3078,18 +3312,6 @@ msgid "Fallback font path"
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 ""
@@ -3107,7 +3329,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Fast movement (via the \"special\" key).\n"
+"Fast movement (via the \"Aux1\" key).\n"
"This requires the \"fast\" privilege on the server."
msgstr ""
@@ -3141,9 +3363,9 @@ 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."
+"which PNG optimizers usually discard, often resulting in dark or\n"
+"light edges to transparent textures. Apply a filter to clean that up\n"
+"at texture load time. This is automatically enabled if mipmapping is enabled."
msgstr ""
#: src/settings_translation_file.cpp
@@ -3235,15 +3457,15 @@ msgid "Font size"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Font size of the default font in point (pt)."
+msgid "Font size divisible by"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Font size of the fallback font in point (pt)."
+msgid "Font size of the default font where 1 unit = 1 pixel at 96 DPI"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Font size of the monospace font in point (pt)."
+msgid "Font size of the monospace font where 1 unit = 1 pixel at 96 DPI"
msgstr ""
#: src/settings_translation_file.cpp
@@ -3254,6 +3476,17 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"For pixel-style fonts that do not scale well, this ensures that font sizes "
+"used\n"
+"with this font will always be divisible by this value, in pixels. For "
+"instance,\n"
+"a pixel font 16 pixels tall should have this set to 16, so it will only ever "
+"be\n"
+"sized 16, 32, 48, etc., so a mod requesting a size of 25 will get 32."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Format of player chat messages. The following strings are valid "
"placeholders:\n"
"@name, @message, @timestamp (optional)"
@@ -3313,10 +3546,6 @@ msgid "Fraction of the visible distance at which fog starts to be rendered"
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)."
@@ -3341,10 +3570,6 @@ msgid "Full screen"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Full screen BPP"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Fullscreen mode."
msgstr ""
@@ -3368,7 +3593,7 @@ msgstr ""
msgid ""
"Global map generation attributes.\n"
"In Mapgen v6 the 'decorations' flag controls all decorations except trees\n"
-"and junglegrass, in all other mapgens this flag controls all decorations."
+"and jungle grass, in all other mapgens this flag controls all decorations."
msgstr ""
#: src/settings_translation_file.cpp
@@ -3437,7 +3662,8 @@ msgid "Heat noise"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Height component of the initial window size."
+msgid ""
+"Height component of the initial window size. Ignored in fullscreen mode."
msgstr ""
#: src/settings_translation_file.cpp
@@ -3449,10 +3675,6 @@ msgid "Height select noise"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "High-precision FPU"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Hill steepness"
msgstr ""
@@ -3683,8 +3905,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"If disabled, \"special\" key is used to fly fast if both fly and fast mode "
-"are\n"
+"If disabled, \"Aux1\" key is used to fly fast if both fly and fast mode are\n"
"enabled."
msgstr ""
@@ -3706,8 +3927,8 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"If enabled, \"special\" key instead of \"sneak\" key is used for climbing "
-"down and\n"
+"If enabled, \"Aux1\" key instead of \"Sneak\" key is used for climbing down "
+"and\n"
"descending."
msgstr ""
@@ -3753,6 +3974,12 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"If the execution of a chat command takes longer than this specified time in\n"
+"seconds, add the time information to the chat command message"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"If the file size of debug.txt exceeds the number of megabytes specified in\n"
"this setting when it is opened, the file is moved to debug.txt.1,\n"
"deleting an older debug.txt.1 if it exists.\n"
@@ -3798,7 +4025,7 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Instrument chatcommands on registration."
+msgid "Instrument chat commands on registration."
msgstr ""
#: src/settings_translation_file.cpp
@@ -3883,7 +4110,7 @@ msgid "Joystick button repetition interval"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Joystick deadzone"
+msgid "Joystick dead zone"
msgstr ""
#: src/settings_translation_file.cpp
@@ -4644,10 +4871,6 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Makes DirectX work with LuaJIT. Disable if it causes troubles."
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Makes all liquids opaque"
msgstr ""
@@ -4719,6 +4942,10 @@ msgid "Map save interval"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Map shadows update frames"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Mapblock limit"
msgstr ""
@@ -4827,6 +5054,10 @@ msgid "Maximum FPS when the window is not focused, or when the game is paused."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Maximum distance to render shadows."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Maximum forceloaded blocks"
msgstr ""
@@ -4932,7 +5163,15 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Maximum time in ms a file download (e.g. a mod download) may take."
+msgid ""
+"Maximum time a file download (e.g. a mod download) may take, stated in "
+"milliseconds."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum time an interactive request (e.g. server list fetch) may take, "
+"stated in milliseconds."
msgstr ""
#: src/settings_translation_file.cpp
@@ -4996,7 +5235,7 @@ msgid "Mod channels"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Modifies the size of the hudbar elements."
+msgid "Modifies the size of the HUD elements."
msgstr ""
#: src/settings_translation_file.cpp
@@ -5008,6 +5247,10 @@ msgid "Monospace font size"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Monospace font size divisible by"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Mountain height noise"
msgstr ""
@@ -5129,7 +5372,7 @@ 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"
+"This is a trade-off between SQLite transaction overhead and\n"
"memory consumption (4096=100MB, as a rule of thumb)."
msgstr ""
@@ -5148,21 +5391,18 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Opaqueness (alpha) of the shadow behind the fallback font, between 0 and 255."
-msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid ""
"Open the pause menu when the window's focus is lost. Does not pause if a "
"formspec is\n"
"open."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Optional override for chat weblink color."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid ""
-"Path of the fallback font.\n"
-"If “freetype†setting is enabled: Must be a TrueType font.\n"
-"If “freetype†setting is disabled: Must be a bitmap or XML vectors font.\n"
+"Path of the fallback font. Must be a TrueType font.\n"
"This font will be used for certain languages or if the default font is "
"unavailable."
msgstr ""
@@ -5185,17 +5425,13 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Path to the default font.\n"
-"If “freetype†setting is enabled: Must be a TrueType font.\n"
-"If “freetype†setting is disabled: Must be a bitmap or XML vectors font.\n"
+"Path to the default font. Must be a TrueType font.\n"
"The fallback font will be used if the font cannot be loaded."
msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Path to the monospace font.\n"
-"If “freetype†setting is enabled: Must be a TrueType font.\n"
-"If “freetype†setting is disabled: Must be a bitmap or XML vectors font.\n"
+"Path to the monospace font. Must be a TrueType font.\n"
"This font is used for e.g. the console and profiler screen."
msgstr ""
@@ -5252,6 +5488,11 @@ msgid "Player versus player"
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Poisson filtering"
+msgstr "puvyrelyli'iju'e"
+
+#: src/settings_translation_file.cpp
msgid ""
"Port to connect to (UDP).\n"
"Note that the port field in the main menu overrides this setting."
@@ -5296,9 +5537,9 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"Prometheus listener address.\n"
-"If minetest is compiled with ENABLE_PROMETHEUS option enabled,\n"
+"If Minetest is compiled with ENABLE_PROMETHEUS option enabled,\n"
"enable metrics listener for Prometheus on that address.\n"
-"Metrics can be fetch on http://127.0.0.1:30000/metrics"
+"Metrics can be fetched on http://127.0.0.1:30000/metrics"
msgstr ""
#: src/settings_translation_file.cpp
@@ -5591,6 +5832,32 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Set the shadow strength.\n"
+"Lower value means lighter shadows, higher value means darker shadows."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set the soft shadow radius size.\n"
+"Lower values mean sharper shadows, bigger values mean softer shadows.\n"
+"Minimum value: 1.0; maximum value: 10.0"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set the tilt of Sun/Moon orbit in degrees.\n"
+"Value of 0 means no tilt / vertical orbit.\n"
+"Minimum value: 0.0; maximum value: 60.0"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set to true to enable Shadow Mapping.\n"
+"Requires shaders to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Set to true to enable waving leaves.\n"
"Requires shaders to be enabled."
msgstr ""
@@ -5608,6 +5875,13 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Sets shadow texture quality to 32 bits.\n"
+"On false, 16 bits texture will be used.\n"
+"This can cause much more artifacts in the shadow."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Shader path"
msgstr "judri le ti'orkemsamtci"
@@ -5620,15 +5894,29 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Shadow filter quality"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Shadow map max distance in nodes to render shadows"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Shadow map texture in 32 bits"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Shadow map texture size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid ""
"Shadow offset (in pixels) of the default font. If 0, then shadow will not be "
"drawn."
msgstr ""
#: src/settings_translation_file.cpp
-msgid ""
-"Shadow offset (in pixels) of the fallback font. If 0, then shadow will not "
-"be drawn."
+msgid "Shadow strength"
msgstr ""
#: src/settings_translation_file.cpp
@@ -5650,7 +5938,7 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Show nametag backgrounds by default"
+msgid "Show name tag backgrounds by default"
msgstr ""
#: src/settings_translation_file.cpp
@@ -5675,6 +5963,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Sky Body Orbit Tilt"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Slice w"
msgstr ""
@@ -5732,16 +6024,11 @@ msgid "Sneaking speed, in nodes per second."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Sound"
+msgid "Soft shadow radius"
msgstr ""
#: src/settings_translation_file.cpp
-#, fuzzy
-msgid "Special key"
-msgstr "za'i masno cadzu"
-
-#: src/settings_translation_file.cpp
-msgid "Special key for climbing/descending"
+msgid "Sound"
msgstr ""
#: src/settings_translation_file.cpp
@@ -5761,6 +6048,14 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Spread a complete update of shadow map over given amount of frames.\n"
+"Higher values might make shadows laggy, lower values\n"
+"will consume more resources.\n"
+"Minimum value: 1; maximum value: 16"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Spread of light curve boost range.\n"
"Controls the width of the range to be boosted.\n"
"Standard deviation of the light curve boost Gaussian."
@@ -5867,6 +6162,13 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Texture size to render the shadow map on.\n"
+"This must be a power of two.\n"
+"Bigger numbers create better shadows but it is also more expensive."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Textures on a node may be aligned either to the node or to the world.\n"
"The former mode suits better things like machines, furniture, etc., while\n"
"the latter makes stairs and microblocks fit surroundings better.\n"
@@ -5880,7 +6182,7 @@ msgid "The URL for the content repository"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "The deadzone of the joystick"
+msgid "The dead zone of the joystick"
msgstr ""
#: src/settings_translation_file.cpp
@@ -5938,7 +6240,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"The rendering back-end for Irrlicht.\n"
+"The rendering back-end.\n"
"A restart is required after changing this.\n"
"Note: On Android, stick with OGLES1 if unsure! App may fail to start "
"otherwise.\n"
@@ -5949,7 +6251,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"The sensitivity of the joystick axes for moving the\n"
-"ingame view frustum around."
+"in-game view frustum around."
msgstr ""
#: src/settings_translation_file.cpp
@@ -6043,6 +6345,10 @@ msgid "Touch screen threshold"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Tradeoffs for performance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Trees noise"
msgstr ""
@@ -6113,7 +6419,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Use mip mapping to scale textures. May slightly increase performance,\n"
+"Use mipmapping to scale textures. May slightly increase performance,\n"
"especially when using a high resolution texture pack.\n"
"Gamma correct downscaling is not supported."
msgstr ""
@@ -6226,7 +6532,7 @@ msgid "Viewing range"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Virtual joystick triggers aux button"
+msgid "Virtual joystick triggers Aux1 button"
msgstr ""
#: src/settings_translation_file.cpp
@@ -6303,6 +6609,10 @@ msgid "Waving plants"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Weblink color"
+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"
@@ -6323,23 +6633,15 @@ msgid ""
"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.\n"
+"memory. Powers of 2 are recommended. This setting is ONLY applied if\n"
+"bilinear/trilinear/anisotropic filtering is enabled.\n"
"This is also used as the base node texture size for world-aligned\n"
"texture autoscaling."
msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Whether FreeType fonts are used, requires FreeType support to be compiled "
-"in.\n"
-"If disabled, bitmap and XML vectors fonts are used instead."
-msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid ""
-"Whether nametag backgrounds should be shown by default.\n"
+"Whether name tag backgrounds should be shown by default.\n"
"Mods may still set a background."
msgstr ""
@@ -6381,7 +6683,7 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Width component of the initial window size."
+msgid "Width component of the initial window size. Ignored in fullscreen mode."
msgstr ""
#: src/settings_translation_file.cpp
@@ -6467,34 +6769,22 @@ msgid "Y-level of seabed."
msgstr ""
#: src/settings_translation_file.cpp
-msgid ""
-"ZLib compression level to use when saving mapblocks to disk.\n"
-"-1 - Zlib's default compression level\n"
-"0 - no compresson, fastest\n"
-"9 - best compression, slowest\n"
-"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)"
-msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid ""
-"ZLib compression level to use when sending mapblocks to the client.\n"
-"-1 - Zlib's default compression level\n"
-"0 - no compresson, fastest\n"
-"9 - best compression, slowest\n"
-"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)"
+msgid "cURL file download timeout"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "cURL file download timeout"
+msgid "cURL interactive timeout"
msgstr ""
#: src/settings_translation_file.cpp
msgid "cURL parallel limit"
msgstr ""
-#: src/settings_translation_file.cpp
-msgid "cURL timeout"
-msgstr ""
+#~ msgid "- Creative Mode: "
+#~ msgstr "- finti se kelci: "
+
+#~ msgid "Address / Port"
+#~ msgstr "lo samjudri jo'u judrnporte"
#~ msgid "Are you sure to reset your singleplayer world?"
#~ msgstr ".i xu do djica le nu xruti le do nonselkansa munje"
@@ -6509,6 +6799,9 @@ msgstr ""
#~ msgid "Configure"
#~ msgstr "tcimi'e"
+#~ msgid "Credits"
+#~ msgstr "liste lu'i ro gunka"
+
#~ msgid "Downloading and installing $1, please wait..."
#~ msgstr ".i ca'o kibycpa la'o zoi. $1 .zoi je cu samtcise'a ri .i ko denpa"
@@ -6523,6 +6816,9 @@ msgstr ""
#~ msgid "Main menu style"
#~ msgstr "lo ralju"
+#~ msgid "Name / Password"
+#~ msgstr "lo cmene .e lo lerpoijaspu"
+
#~ msgid "Name/Password"
#~ msgstr "cmene .i lerpoijaspu"
@@ -6535,8 +6831,19 @@ msgstr ""
#~ msgid "Reset singleplayer world"
#~ msgstr "xruti le nonselkansa munje"
+#, fuzzy
+#~ msgid "Special key"
+#~ msgstr "za'i masno cadzu"
+
#~ msgid "Start Singleplayer"
#~ msgstr "co'a nonselkansa kelci"
#~ msgid "Yes"
#~ msgstr "go'i"
+
+#, fuzzy
+#~ msgid "You died."
+#~ msgstr ".i do morsi"
+
+#~ msgid "needs_fallback_font"
+#~ msgstr "no"
diff --git a/po/kk/minetest.po b/po/kk/minetest.po
index 26fdf44e8..679dc4078 100644
--- a/po/kk/minetest.po
+++ b/po/kk/minetest.po
@@ -2,7 +2,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Kazakh (Minetest)\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-02-23 19:03+0100\n"
+"POT-Creation-Date: 2022-01-25 23:19+0100\n"
"PO-Revision-Date: 2020-09-09 01:23+0000\n"
"Last-Translator: Fontan 030 <pomanfedurin@gmail.com>\n"
"Language-Team: Kazakh <https://hosted.weblate.org/projects/minetest/minetest/"
@@ -14,6 +14,45 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 4.3-dev\n"
+#: builtin/client/chatcommands.lua
+msgid "Clear the out chat queue"
+msgstr ""
+
+#: builtin/client/chatcommands.lua
+msgid "Empty command."
+msgstr ""
+
+#: builtin/client/chatcommands.lua
+#, fuzzy
+msgid "Exit to main menu"
+msgstr "Мәзірге шығу"
+
+#: builtin/client/chatcommands.lua
+msgid "Invalid command: "
+msgstr ""
+
+#: builtin/client/chatcommands.lua
+msgid "Issued command: "
+msgstr ""
+
+#: builtin/client/chatcommands.lua
+#, fuzzy
+msgid "List online players"
+msgstr "Бір ойыншы"
+
+#: builtin/client/chatcommands.lua
+#, fuzzy
+msgid "Online players: "
+msgstr "Бір ойыншы"
+
+#: builtin/client/chatcommands.lua
+msgid "The out chat queue is now empty."
+msgstr ""
+
+#: builtin/client/chatcommands.lua
+msgid "This command is disabled by server."
+msgstr ""
+
#: builtin/client/death_formspec.lua src/client/game.cpp
msgid "Respawn"
msgstr ""
@@ -22,11 +61,40 @@ msgstr ""
msgid "You died"
msgstr ""
+#: builtin/common/chatcommands.lua
+msgid "Available commands:"
+msgstr ""
+
+#: builtin/common/chatcommands.lua
+msgid "Available commands: "
+msgstr ""
+
+#: builtin/common/chatcommands.lua
+msgid "Command not available: "
+msgstr ""
+
+#: builtin/common/chatcommands.lua
+msgid "Get help for commands"
+msgstr ""
+
+#: builtin/common/chatcommands.lua
+msgid ""
+"Use '.help <cmd>' to get more information, or '.help all' to list everything."
+msgstr ""
+
+#: builtin/common/chatcommands.lua
+msgid "[all | <cmd>]"
+msgstr ""
+
#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp
msgid "OK"
msgstr ""
#: builtin/fstk/ui.lua
+msgid "<none available>"
+msgstr ""
+
+#: builtin/fstk/ui.lua
msgid "An error occurred in a Lua script:"
msgstr "Lua Ñкриптінде қате кездеÑті:"
@@ -227,6 +295,10 @@ msgid "Install missing dependencies"
msgstr ""
#: builtin/mainmenu/dlg_contentstore.lua
+msgid "Install: Unsupported file type or broken archive"
+msgstr ""
+
+#: builtin/mainmenu/dlg_contentstore.lua
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Mods"
msgstr "Модтар"
@@ -527,7 +599,7 @@ msgstr ""
msgid "Browse"
msgstr ""
-#: builtin/mainmenu/dlg_settings_advanced.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_settings.lua
msgid "Disabled"
msgstr ""
@@ -552,7 +624,7 @@ msgid "Offset"
msgstr ""
#: builtin/mainmenu/dlg_settings_advanced.lua
-msgid "Persistance"
+msgid "Persistence"
msgstr ""
#: builtin/mainmenu/dlg_settings_advanced.lua
@@ -571,7 +643,7 @@ msgstr ""
msgid "Scale"
msgstr ""
-#: builtin/mainmenu/dlg_settings_advanced.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_online.lua
msgid "Search"
msgstr "Іздеу"
@@ -663,14 +735,6 @@ msgid "Install Mod: Unable to find suitable folder name for modpack $1"
msgstr ""
#: builtin/mainmenu/pkgmgr.lua
-msgid "Install: Unsupported file type \"$1\" or broken archive"
-msgstr ""
-
-#: builtin/mainmenu/pkgmgr.lua
-msgid "Install: file: \"$1\""
-msgstr ""
-
-#: builtin/mainmenu/pkgmgr.lua
msgid "Unable to find a valid mod or modpack"
msgstr ""
@@ -702,6 +766,40 @@ msgstr ""
msgid "Try reenabling public serverlist and check your internet connection."
msgstr ""
+#: builtin/mainmenu/tab_about.lua
+msgid "About"
+msgstr ""
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Active Contributors"
+msgstr ""
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Active renderer:"
+msgstr ""
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Core Developers"
+msgstr ""
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Open User Data Directory"
+msgstr ""
+
+#: builtin/mainmenu/tab_about.lua
+msgid ""
+"Opens the directory that contains user-provided worlds, games, mods,\n"
+"and texture packs in a file manager / explorer."
+msgstr ""
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Previous Contributors"
+msgstr ""
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Previous Core Developers"
+msgstr ""
+
#: builtin/mainmenu/tab_content.lua
msgid "Browse online content"
msgstr ""
@@ -742,36 +840,6 @@ msgstr ""
msgid "Use Texture Pack"
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 "Open User Data Directory"
-msgstr ""
-
-#: builtin/mainmenu/tab_credits.lua
-msgid ""
-"Opens the directory that contains user-provided worlds, games, mods,\n"
-"and texture packs in a file manager / explorer."
-msgstr ""
-
-#: builtin/mainmenu/tab_credits.lua
-msgid "Previous Contributors"
-msgstr ""
-
-#: builtin/mainmenu/tab_credits.lua
-msgid "Previous Core Developers"
-msgstr ""
-
#: builtin/mainmenu/tab_local.lua
msgid "Announce Server"
msgstr ""
@@ -800,7 +868,7 @@ msgstr ""
msgid "Install games from ContentDB"
msgstr ""
-#: builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
msgid "Name"
msgstr ""
@@ -812,7 +880,7 @@ msgstr "Жаңа"
msgid "No world created or selected!"
msgstr ""
-#: builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
#, fuzzy
msgid "Password"
msgstr "ÒšÒ±Ð¿Ð¸Ñ Ñөзді өзгерту"
@@ -821,7 +889,7 @@ msgstr "ÒšÒ±Ð¿Ð¸Ñ Ñөзді өзгерту"
msgid "Play Game"
msgstr ""
-#: builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
msgid "Port"
msgstr ""
@@ -842,7 +910,11 @@ msgid "Start Game"
msgstr ""
#: builtin/mainmenu/tab_online.lua
-msgid "Address / Port"
+msgid "Address"
+msgstr ""
+
+#: builtin/mainmenu/tab_online.lua src/client/keycode.cpp
+msgid "Clear"
msgstr ""
#: builtin/mainmenu/tab_online.lua
@@ -853,8 +925,9 @@ msgstr ""
msgid "Creative mode"
msgstr ""
+#. ~ PvP = Player versus Player
#: builtin/mainmenu/tab_online.lua
-msgid "Damage enabled"
+msgid "Damage / PvP"
msgstr ""
#: builtin/mainmenu/tab_online.lua
@@ -862,24 +935,31 @@ msgid "Del. Favorite"
msgstr ""
#: builtin/mainmenu/tab_online.lua
-msgid "Favorite"
+msgid "Favorites"
msgstr ""
#: builtin/mainmenu/tab_online.lua
-msgid "Join Game"
+msgid "Incompatible Servers"
msgstr ""
#: builtin/mainmenu/tab_online.lua
-msgid "Name / Password"
+msgid "Join Game"
msgstr ""
#: builtin/mainmenu/tab_online.lua
msgid "Ping"
msgstr ""
-#. ~ PvP = Player versus Player
#: builtin/mainmenu/tab_online.lua
-msgid "PvP enabled"
+msgid "Public Servers"
+msgstr ""
+
+#: builtin/mainmenu/tab_online.lua
+msgid "Refresh"
+msgstr ""
+
+#: builtin/mainmenu/tab_online.lua
+msgid "Server Description"
msgstr ""
#: builtin/mainmenu/tab_settings.lua
@@ -922,11 +1002,31 @@ msgstr ""
msgid "Connected Glass"
msgstr ""
+#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
+msgid "Dynamic shadows"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Dynamic shadows: "
+msgstr ""
+
#: builtin/mainmenu/tab_settings.lua
msgid "Fancy Leaves"
msgstr ""
#: builtin/mainmenu/tab_settings.lua
+msgid "High"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Low"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Medium"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
msgid "Mipmap"
msgstr ""
@@ -998,10 +1098,6 @@ msgstr ""
msgid "Texturing:"
msgstr "ТекÑтурлеу:"
-#: builtin/mainmenu/tab_settings.lua
-msgid "To enable shaders the OpenGL driver needs to be used."
-msgstr ""
-
#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
msgid "Tone Mapping"
msgstr ""
@@ -1015,6 +1111,14 @@ msgid "Trilinear Filter"
msgstr "ҮшÑызықты фильтрациÑ"
#: builtin/mainmenu/tab_settings.lua
+msgid "Ultra High"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Very Low"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
msgid "Waving Leaves"
msgstr ""
@@ -1026,7 +1130,7 @@ msgstr ""
msgid "Waving Plants"
msgstr ""
-#: src/client/client.cpp
+#: src/client/client.cpp src/client/game.cpp
msgid "Connection timed out."
msgstr ""
@@ -1055,7 +1159,7 @@ msgid "Connection error (timed out?)"
msgstr ""
#: src/client/clientlauncher.cpp
-msgid "Could not find or load game \""
+msgid "Could not find or load game: "
msgstr ""
#: src/client/clientlauncher.cpp
@@ -1086,18 +1190,6 @@ msgstr ""
msgid "Provided world path doesn't exist: "
msgstr ""
-#. ~ DO NOT TRANSLATE THIS LITERALLY!
-#. This is a special string. Put either "no" or "yes"
-#. into the translation field (literally).
-#. Choose "yes" if the language requires use of the fallback
-#. font, "no" otherwise.
-#. The fallback font is (normally) required for languages with
-#. non-Latin script, like Chinese.
-#. When in doubt, test your translation.
-#: src/client/fontengine.cpp
-msgid "needs_fallback_font"
-msgstr "yes"
-
#: src/client/game.cpp
msgid ""
"\n"
@@ -1109,14 +1201,6 @@ msgid "- Address: "
msgstr ""
#: src/client/game.cpp
-msgid "- Creative Mode: "
-msgstr ""
-
-#: src/client/game.cpp
-msgid "- Damage: "
-msgstr ""
-
-#: src/client/game.cpp
msgid "- Mode: "
msgstr ""
@@ -1138,6 +1222,16 @@ msgid "- Server Name: "
msgstr ""
#: src/client/game.cpp
+#, fuzzy
+msgid "A serialization error occurred:"
+msgstr "Қате кездеÑті:"
+
+#: src/client/game.cpp
+#, c-format
+msgid "Access denied. Reason: %s"
+msgstr ""
+
+#: src/client/game.cpp
msgid "Automatic forward disabled"
msgstr ""
@@ -1146,6 +1240,22 @@ msgid "Automatic forward enabled"
msgstr ""
#: src/client/game.cpp
+msgid "Block bounds hidden"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Block bounds shown for all blocks"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Block bounds shown for current block"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Block bounds shown for nearby blocks"
+msgstr ""
+
+#: src/client/game.cpp
msgid "Camera update disabled"
msgstr ""
@@ -1154,6 +1264,10 @@ msgid "Camera update enabled"
msgstr ""
#: src/client/game.cpp
+msgid "Can't show block bounds (need 'basic_debug' privilege)"
+msgstr ""
+
+#: src/client/game.cpp
msgid "Change Password"
msgstr "ÒšÒ±Ð¿Ð¸Ñ Ñөзді өзгерту"
@@ -1166,6 +1280,10 @@ msgid "Cinematic mode enabled"
msgstr ""
#: src/client/game.cpp
+msgid "Client disconnected"
+msgstr ""
+
+#: src/client/game.cpp
msgid "Client side scripting is disabled"
msgstr ""
@@ -1174,6 +1292,10 @@ msgid "Connecting to server..."
msgstr ""
#: src/client/game.cpp
+msgid "Connection failed for unknown reason"
+msgstr ""
+
+#: src/client/game.cpp
msgid "Continue"
msgstr "ЖалғаÑтыру"
@@ -1197,6 +1319,11 @@ msgid ""
msgstr ""
#: src/client/game.cpp
+#, c-format
+msgid "Couldn't resolve address: %s"
+msgstr ""
+
+#: src/client/game.cpp
msgid "Creating client..."
msgstr ""
@@ -1313,6 +1440,11 @@ msgid "Minimap currently disabled by game or mod"
msgstr ""
#: src/client/game.cpp
+#, fuzzy
+msgid "Multiplayer"
+msgstr "Бір ойыншы"
+
+#: src/client/game.cpp
msgid "Noclip mode disabled"
msgstr ""
@@ -1386,6 +1518,21 @@ msgstr ""
#: src/client/game.cpp
#, c-format
+msgid "The server is probably running a different version of %s."
+msgstr ""
+
+#: src/client/game.cpp
+#, c-format
+msgid "Unable to connect to %s because IPv6 is disabled"
+msgstr ""
+
+#: src/client/game.cpp
+#, c-format
+msgid "Unable to listen on %s because IPv6 is disabled"
+msgstr ""
+
+#: src/client/game.cpp
+#, c-format
msgid "Viewing range changed to %d"
msgstr ""
@@ -1454,10 +1601,6 @@ msgid "Caps Lock"
msgstr ""
#: src/client/keycode.cpp
-msgid "Clear"
-msgstr ""
-
-#: src/client/keycode.cpp
msgid "Control"
msgstr ""
@@ -1722,6 +1865,14 @@ msgstr ""
msgid "Minimap in texture mode"
msgstr ""
+#: src/gui/guiChatConsole.cpp
+msgid "Failed to open webpage"
+msgstr ""
+
+#: src/gui/guiChatConsole.cpp
+msgid "Opening webpage"
+msgstr ""
+
#: src/gui/guiConfirmRegistration.cpp src/gui/guiPasswordChange.cpp
msgid "Passwords do not match!"
msgstr ""
@@ -1745,7 +1896,7 @@ msgid "Proceed"
msgstr ""
#: src/gui/guiKeyChangeMenu.cpp
-msgid "\"Special\" = climb down"
+msgid "\"Aux1\" = climb down"
msgstr ""
#: src/gui/guiKeyChangeMenu.cpp
@@ -1757,10 +1908,18 @@ msgid "Automatic jumping"
msgstr ""
#: src/gui/guiKeyChangeMenu.cpp
+msgid "Aux1"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
msgid "Backward"
msgstr ""
#: src/gui/guiKeyChangeMenu.cpp
+msgid "Block bounds"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
msgid "Change camera"
msgstr ""
@@ -1849,10 +2008,6 @@ msgid "Sneak"
msgstr ""
#: src/gui/guiKeyChangeMenu.cpp
-msgid "Special"
-msgstr ""
-
-#: src/gui/guiKeyChangeMenu.cpp
msgid "Toggle HUD"
msgstr ""
@@ -1913,7 +2068,8 @@ msgid "Muted"
msgstr ""
#: src/gui/guiVolumeChange.cpp
-msgid "Sound Volume: "
+#, c-format
+msgid "Sound Volume: %d%%"
msgstr ""
#. ~ Imperative, as in "Enter/type in text".
@@ -1937,8 +2093,8 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"(Android) Use virtual joystick to trigger \"aux\" button.\n"
-"If enabled, virtual joystick will also tap \"aux\" button when out of main "
+"(Android) Use virtual joystick to trigger \"Aux1\" button.\n"
+"If enabled, virtual joystick will also tap \"Aux1\" button when out of main "
"circle."
msgstr ""
@@ -2121,6 +2277,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Adjust the detected display density, used for scaling UI elements."
+msgstr ""
+
+#: src/settings_translation_file.cpp
#, c-format
msgid ""
"Adjusts the density of the floatland layer.\n"
@@ -2233,6 +2393,14 @@ msgid "Autoscaling mode"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Aux1 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Aux1 key for climbing/descending"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Backward key"
msgstr ""
@@ -2277,10 +2445,6 @@ msgid "Biome noise"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Bits per pixel (aka color depth) in fullscreen mode."
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Block send optimize distance"
msgstr ""
@@ -2379,6 +2543,15 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Chat command time message threshold"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Chat commands"
+msgstr "Чат көрÑетілді"
+
+#: src/settings_translation_file.cpp
msgid "Chat font size"
msgstr ""
@@ -2411,8 +2584,9 @@ msgid "Chat toggle key"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Chatcommands"
-msgstr ""
+#, fuzzy
+msgid "Chat weblinks"
+msgstr "Чат көрÑетілді"
#: src/settings_translation_file.cpp
msgid "Chunk size"
@@ -2431,6 +2605,12 @@ msgid "Clean transparent textures"
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Clickable weblinks (middle-click or Ctrl+left-click) enabled in chat console "
+"output."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Client"
msgstr ""
@@ -2475,6 +2655,10 @@ msgid "Colored fog"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Colored shadows"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid ""
"Comma-separated list of flags to hide in the content repository.\n"
"\"nonfree\" can be used to hide packages which do not qualify as 'free "
@@ -2502,6 +2686,22 @@ msgid "Command key"
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Compression level to use when saving mapblocks to disk.\n"
+"-1 - use default compression level\n"
+"0 - least compression, fastest\n"
+"9 - best compression, slowest"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Compression level to use when sending mapblocks to the client.\n"
+"-1 - use default compression level\n"
+"0 - least compression, fastest\n"
+"9 - best compression, slowest"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Connect glass"
msgstr ""
@@ -2592,7 +2792,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"Crosshair alpha (opaqueness, between 0 and 255).\n"
-"Also controls the object crosshair color"
+"This also applies to the object crosshair."
msgstr ""
#: src/settings_translation_file.cpp
@@ -2669,8 +2869,9 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Default timeout for cURL, stated in milliseconds.\n"
-"Only has an effect if compiled with cURL."
+"Define shadow filtering quality.\n"
+"This simulates the soft shadows effect by applying a PCF or Poisson disk\n"
+"but also uses more resources."
msgstr ""
#: src/settings_translation_file.cpp
@@ -2788,6 +2989,10 @@ msgid "Disallow empty passwords"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Display Density Scaling Factor"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Domain name of server, to be displayed in the serverlist."
msgstr ""
@@ -2832,6 +3037,19 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Enable Poisson disk filtering.\n"
+"On true uses Poisson disk to make \"soft shadows\". Otherwise uses PCF "
+"filtering."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable colored shadows.\n"
+"On true translucent nodes cast colored shadows. This is expensive."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Enable console window"
msgstr ""
@@ -2940,6 +3158,12 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Enables tradeoffs that reduce CPU load or increase rendering performance\n"
+"at the expense of minor visual glitches that do not impact game playability."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Engine profiling data print interval"
msgstr ""
@@ -2978,18 +3202,6 @@ msgid "Fallback font path"
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 ""
@@ -3007,7 +3219,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Fast movement (via the \"special\" key).\n"
+"Fast movement (via the \"Aux1\" key).\n"
"This requires the \"fast\" privilege on the server."
msgstr ""
@@ -3041,9 +3253,9 @@ 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."
+"which PNG optimizers usually discard, often resulting in dark or\n"
+"light edges to transparent textures. Apply a filter to clean that up\n"
+"at texture load time. This is automatically enabled if mipmapping is enabled."
msgstr ""
#: src/settings_translation_file.cpp
@@ -3135,15 +3347,15 @@ msgid "Font size"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Font size of the default font in point (pt)."
+msgid "Font size divisible by"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Font size of the fallback font in point (pt)."
+msgid "Font size of the default font where 1 unit = 1 pixel at 96 DPI"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Font size of the monospace font in point (pt)."
+msgid "Font size of the monospace font where 1 unit = 1 pixel at 96 DPI"
msgstr ""
#: src/settings_translation_file.cpp
@@ -3154,6 +3366,17 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"For pixel-style fonts that do not scale well, this ensures that font sizes "
+"used\n"
+"with this font will always be divisible by this value, in pixels. For "
+"instance,\n"
+"a pixel font 16 pixels tall should have this set to 16, so it will only ever "
+"be\n"
+"sized 16, 32, 48, etc., so a mod requesting a size of 25 will get 32."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Format of player chat messages. The following strings are valid "
"placeholders:\n"
"@name, @message, @timestamp (optional)"
@@ -3212,10 +3435,6 @@ msgid "Fraction of the visible distance at which fog starts to be rendered"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "FreeType fonts"
-msgstr "FreeType қаріптері"
-
-#: src/settings_translation_file.cpp
msgid ""
"From how far blocks are generated for clients, stated in mapblocks (16 "
"nodes)."
@@ -3240,10 +3459,6 @@ msgid "Full screen"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Full screen BPP"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Fullscreen mode."
msgstr ""
@@ -3267,7 +3482,7 @@ msgstr ""
msgid ""
"Global map generation attributes.\n"
"In Mapgen v6 the 'decorations' flag controls all decorations except trees\n"
-"and junglegrass, in all other mapgens this flag controls all decorations."
+"and jungle grass, in all other mapgens this flag controls all decorations."
msgstr ""
#: src/settings_translation_file.cpp
@@ -3336,7 +3551,8 @@ msgid "Heat noise"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Height component of the initial window size."
+msgid ""
+"Height component of the initial window size. Ignored in fullscreen mode."
msgstr ""
#: src/settings_translation_file.cpp
@@ -3348,10 +3564,6 @@ msgid "Height select noise"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "High-precision FPU"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Hill steepness"
msgstr ""
@@ -3582,8 +3794,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"If disabled, \"special\" key is used to fly fast if both fly and fast mode "
-"are\n"
+"If disabled, \"Aux1\" key is used to fly fast if both fly and fast mode are\n"
"enabled."
msgstr ""
@@ -3605,8 +3816,8 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"If enabled, \"special\" key instead of \"sneak\" key is used for climbing "
-"down and\n"
+"If enabled, \"Aux1\" key instead of \"Sneak\" key is used for climbing down "
+"and\n"
"descending."
msgstr ""
@@ -3652,6 +3863,12 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"If the execution of a chat command takes longer than this specified time in\n"
+"seconds, add the time information to the chat command message"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"If the file size of debug.txt exceeds the number of megabytes specified in\n"
"this setting when it is opened, the file is moved to debug.txt.1,\n"
"deleting an older debug.txt.1 if it exists.\n"
@@ -3697,7 +3914,7 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Instrument chatcommands on registration."
+msgid "Instrument chat commands on registration."
msgstr ""
#: src/settings_translation_file.cpp
@@ -3781,7 +3998,7 @@ msgid "Joystick button repetition interval"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Joystick deadzone"
+msgid "Joystick dead zone"
msgstr ""
#: src/settings_translation_file.cpp
@@ -4539,10 +4756,6 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Makes DirectX work with LuaJIT. Disable if it causes troubles."
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Makes all liquids opaque"
msgstr ""
@@ -4614,6 +4827,10 @@ msgid "Map save interval"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Map shadows update frames"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Mapblock limit"
msgstr ""
@@ -4722,6 +4939,10 @@ msgid "Maximum FPS when the window is not focused, or when the game is paused."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Maximum distance to render shadows."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Maximum forceloaded blocks"
msgstr ""
@@ -4827,7 +5048,15 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Maximum time in ms a file download (e.g. a mod download) may take."
+msgid ""
+"Maximum time a file download (e.g. a mod download) may take, stated in "
+"milliseconds."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum time an interactive request (e.g. server list fetch) may take, "
+"stated in milliseconds."
msgstr ""
#: src/settings_translation_file.cpp
@@ -4891,7 +5120,7 @@ msgid "Mod channels"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Modifies the size of the hudbar elements."
+msgid "Modifies the size of the HUD elements."
msgstr ""
#: src/settings_translation_file.cpp
@@ -4903,6 +5132,10 @@ msgid "Monospace font size"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Monospace font size divisible by"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Mountain height noise"
msgstr ""
@@ -5023,7 +5256,7 @@ 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"
+"This is a trade-off between SQLite transaction overhead and\n"
"memory consumption (4096=100MB, as a rule of thumb)."
msgstr ""
@@ -5042,21 +5275,18 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Opaqueness (alpha) of the shadow behind the fallback font, between 0 and 255."
-msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid ""
"Open the pause menu when the window's focus is lost. Does not pause if a "
"formspec is\n"
"open."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Optional override for chat weblink color."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid ""
-"Path of the fallback font.\n"
-"If “freetype†setting is enabled: Must be a TrueType font.\n"
-"If “freetype†setting is disabled: Must be a bitmap or XML vectors font.\n"
+"Path of the fallback font. Must be a TrueType font.\n"
"This font will be used for certain languages or if the default font is "
"unavailable."
msgstr ""
@@ -5079,17 +5309,13 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Path to the default font.\n"
-"If “freetype†setting is enabled: Must be a TrueType font.\n"
-"If “freetype†setting is disabled: Must be a bitmap or XML vectors font.\n"
+"Path to the default font. Must be a TrueType font.\n"
"The fallback font will be used if the font cannot be loaded."
msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Path to the monospace font.\n"
-"If “freetype†setting is enabled: Must be a TrueType font.\n"
-"If “freetype†setting is disabled: Must be a bitmap or XML vectors font.\n"
+"Path to the monospace font. Must be a TrueType font.\n"
"This font is used for e.g. the console and profiler screen."
msgstr ""
@@ -5144,6 +5370,10 @@ msgid "Player versus player"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Poisson filtering"
+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."
@@ -5188,9 +5418,9 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"Prometheus listener address.\n"
-"If minetest is compiled with ENABLE_PROMETHEUS option enabled,\n"
+"If Minetest is compiled with ENABLE_PROMETHEUS option enabled,\n"
"enable metrics listener for Prometheus on that address.\n"
-"Metrics can be fetch on http://127.0.0.1:30000/metrics"
+"Metrics can be fetched on http://127.0.0.1:30000/metrics"
msgstr ""
#: src/settings_translation_file.cpp
@@ -5479,6 +5709,32 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Set the shadow strength.\n"
+"Lower value means lighter shadows, higher value means darker shadows."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set the soft shadow radius size.\n"
+"Lower values mean sharper shadows, bigger values mean softer shadows.\n"
+"Minimum value: 1.0; maximum value: 10.0"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set the tilt of Sun/Moon orbit in degrees.\n"
+"Value of 0 means no tilt / vertical orbit.\n"
+"Minimum value: 0.0; maximum value: 60.0"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set to true to enable Shadow Mapping.\n"
+"Requires shaders to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Set to true to enable waving leaves.\n"
"Requires shaders to be enabled."
msgstr ""
@@ -5496,6 +5752,13 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Sets shadow texture quality to 32 bits.\n"
+"On false, 16 bits texture will be used.\n"
+"This can cause much more artifacts in the shadow."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Shader path"
msgstr ""
@@ -5508,15 +5771,29 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Shadow filter quality"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Shadow map max distance in nodes to render shadows"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Shadow map texture in 32 bits"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Shadow map texture size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid ""
"Shadow offset (in pixels) of the default font. If 0, then shadow will not be "
"drawn."
msgstr ""
#: src/settings_translation_file.cpp
-msgid ""
-"Shadow offset (in pixels) of the fallback font. If 0, then shadow will not "
-"be drawn."
+msgid "Shadow strength"
msgstr ""
#: src/settings_translation_file.cpp
@@ -5538,7 +5815,7 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Show nametag backgrounds by default"
+msgid "Show name tag backgrounds by default"
msgstr ""
#: src/settings_translation_file.cpp
@@ -5563,6 +5840,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Sky Body Orbit Tilt"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Slice w"
msgstr ""
@@ -5617,15 +5898,11 @@ msgid "Sneaking speed, in nodes per second."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Sound"
-msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid "Special key"
+msgid "Soft shadow radius"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Special key for climbing/descending"
+msgid "Sound"
msgstr ""
#: src/settings_translation_file.cpp
@@ -5645,6 +5922,14 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Spread a complete update of shadow map over given amount of frames.\n"
+"Higher values might make shadows laggy, lower values\n"
+"will consume more resources.\n"
+"Minimum value: 1; maximum value: 16"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Spread of light curve boost range.\n"
"Controls the width of the range to be boosted.\n"
"Standard deviation of the light curve boost Gaussian."
@@ -5751,6 +6036,13 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Texture size to render the shadow map on.\n"
+"This must be a power of two.\n"
+"Bigger numbers create better shadows but it is also more expensive."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Textures on a node may be aligned either to the node or to the world.\n"
"The former mode suits better things like machines, furniture, etc., while\n"
"the latter makes stairs and microblocks fit surroundings better.\n"
@@ -5764,7 +6056,7 @@ msgid "The URL for the content repository"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "The deadzone of the joystick"
+msgid "The dead zone of the joystick"
msgstr ""
#: src/settings_translation_file.cpp
@@ -5822,7 +6114,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"The rendering back-end for Irrlicht.\n"
+"The rendering back-end.\n"
"A restart is required after changing this.\n"
"Note: On Android, stick with OGLES1 if unsure! App may fail to start "
"otherwise.\n"
@@ -5833,7 +6125,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"The sensitivity of the joystick axes for moving the\n"
-"ingame view frustum around."
+"in-game view frustum around."
msgstr ""
#: src/settings_translation_file.cpp
@@ -5927,6 +6219,10 @@ msgid "Touch screen threshold"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Tradeoffs for performance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Trees noise"
msgstr ""
@@ -5996,7 +6292,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Use mip mapping to scale textures. May slightly increase performance,\n"
+"Use mipmapping to scale textures. May slightly increase performance,\n"
"especially when using a high resolution texture pack.\n"
"Gamma correct downscaling is not supported."
msgstr ""
@@ -6109,7 +6405,7 @@ msgid "Viewing range"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Virtual joystick triggers aux button"
+msgid "Virtual joystick triggers Aux1 button"
msgstr ""
#: src/settings_translation_file.cpp
@@ -6180,6 +6476,10 @@ msgid "Waving plants"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Weblink color"
+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"
@@ -6200,23 +6500,15 @@ msgid ""
"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.\n"
+"memory. Powers of 2 are recommended. This setting is ONLY applied if\n"
+"bilinear/trilinear/anisotropic filtering is enabled.\n"
"This is also used as the base node texture size for world-aligned\n"
"texture autoscaling."
msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Whether FreeType fonts are used, requires FreeType support to be compiled "
-"in.\n"
-"If disabled, bitmap and XML vectors fonts are used instead."
-msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid ""
-"Whether nametag backgrounds should be shown by default.\n"
+"Whether name tag backgrounds should be shown by default.\n"
"Mods may still set a background."
msgstr ""
@@ -6258,7 +6550,7 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Width component of the initial window size."
+msgid "Width component of the initial window size. Ignored in fullscreen mode."
msgstr ""
#: src/settings_translation_file.cpp
@@ -6343,34 +6635,19 @@ msgid "Y-level of seabed."
msgstr ""
#: src/settings_translation_file.cpp
-msgid ""
-"ZLib compression level to use when saving mapblocks to disk.\n"
-"-1 - Zlib's default compression level\n"
-"0 - no compresson, fastest\n"
-"9 - best compression, slowest\n"
-"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)"
-msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid ""
-"ZLib compression level to use when sending mapblocks to the client.\n"
-"-1 - Zlib's default compression level\n"
-"0 - no compresson, fastest\n"
-"9 - best compression, slowest\n"
-"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)"
+msgid "cURL file download timeout"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "cURL file download timeout"
+msgid "cURL interactive timeout"
msgstr ""
#: src/settings_translation_file.cpp
msgid "cURL parallel limit"
msgstr ""
-#: src/settings_translation_file.cpp
-msgid "cURL timeout"
-msgstr ""
+#~ msgid "FreeType fonts"
+#~ msgstr "FreeType қаріптері"
#~ msgid "Main"
#~ msgstr "БаÑты мәзір"
@@ -6380,3 +6657,6 @@ msgstr ""
#~ msgid "Yes"
#~ msgstr "Иә"
+
+#~ msgid "needs_fallback_font"
+#~ msgstr "yes"
diff --git a/po/kn/minetest.po b/po/kn/minetest.po
index d820e246c..1bba13a11 100644
--- a/po/kn/minetest.po
+++ b/po/kn/minetest.po
@@ -2,7 +2,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Kannada (Minetest)\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-02-23 19:03+0100\n"
+"POT-Creation-Date: 2022-01-25 23:19+0100\n"
"PO-Revision-Date: 2021-01-02 07:29+0000\n"
"Last-Translator: Tejaswi Hegde <tejaswihegde1@gmail.com>\n"
"Language-Team: Kannada <https://hosted.weblate.org/projects/minetest/"
@@ -14,6 +14,43 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=n > 1;\n"
"X-Generator: Weblate 4.4.1-dev\n"
+#: builtin/client/chatcommands.lua
+msgid "Clear the out chat queue"
+msgstr ""
+
+#: builtin/client/chatcommands.lua
+msgid "Empty command."
+msgstr ""
+
+#: builtin/client/chatcommands.lua
+#, fuzzy
+msgid "Exit to main menu"
+msgstr "ಮà³à²–à³à²¯ ಮೆನà³à²—ೆ ಹಿಂತಿರà³à²—ಿ"
+
+#: builtin/client/chatcommands.lua
+msgid "Invalid command: "
+msgstr ""
+
+#: builtin/client/chatcommands.lua
+msgid "Issued command: "
+msgstr ""
+
+#: builtin/client/chatcommands.lua
+msgid "List online players"
+msgstr ""
+
+#: builtin/client/chatcommands.lua
+msgid "Online players: "
+msgstr ""
+
+#: builtin/client/chatcommands.lua
+msgid "The out chat queue is now empty."
+msgstr ""
+
+#: builtin/client/chatcommands.lua
+msgid "This command is disabled by server."
+msgstr ""
+
#: builtin/client/death_formspec.lua src/client/game.cpp
msgid "Respawn"
msgstr "ಮತà³à²¤à³† ಹà³à²Ÿà³à²Ÿà³"
@@ -22,11 +59,40 @@ msgstr "ಮತà³à²¤à³† ಹà³à²Ÿà³à²Ÿà³"
msgid "You died"
msgstr "ನೀನೠಸತà³à²¤à³à²¹à³‹à²¦à³†"
+#: builtin/common/chatcommands.lua
+msgid "Available commands:"
+msgstr ""
+
+#: builtin/common/chatcommands.lua
+msgid "Available commands: "
+msgstr ""
+
+#: builtin/common/chatcommands.lua
+msgid "Command not available: "
+msgstr ""
+
+#: builtin/common/chatcommands.lua
+msgid "Get help for commands"
+msgstr ""
+
+#: builtin/common/chatcommands.lua
+msgid ""
+"Use '.help <cmd>' to get more information, or '.help all' to list everything."
+msgstr ""
+
+#: builtin/common/chatcommands.lua
+msgid "[all | <cmd>]"
+msgstr ""
+
#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp
msgid "OK"
msgstr "ಸರಿ"
#: builtin/fstk/ui.lua
+msgid "<none available>"
+msgstr ""
+
+#: builtin/fstk/ui.lua
msgid "An error occurred in a Lua script:"
msgstr "ಒಂದೠಲà³à²µà²¾ ಸà³à²•à³à²°à²¿à²ªà³à²Ÿà³ ನಲà³à²²à²¿ ತಪà³à²ªà²¾à²—ಿದೆ:"
@@ -230,6 +296,10 @@ msgid "Install missing dependencies"
msgstr "à²à²šà³à²›à²¿à²• ಅವಲಂಬನೆಗಳà³:"
#: builtin/mainmenu/dlg_contentstore.lua
+msgid "Install: Unsupported file type or broken archive"
+msgstr ""
+
+#: builtin/mainmenu/dlg_contentstore.lua
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Mods"
msgstr "ಮಾಡà³â€à²—ಳà³"
@@ -546,7 +616,7 @@ msgstr ""
msgid "Browse"
msgstr ""
-#: builtin/mainmenu/dlg_settings_advanced.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_settings.lua
msgid "Disabled"
msgstr ""
@@ -571,7 +641,7 @@ msgid "Offset"
msgstr ""
#: builtin/mainmenu/dlg_settings_advanced.lua
-msgid "Persistance"
+msgid "Persistence"
msgstr ""
#: builtin/mainmenu/dlg_settings_advanced.lua
@@ -590,7 +660,7 @@ msgstr ""
msgid "Scale"
msgstr ""
-#: builtin/mainmenu/dlg_settings_advanced.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_online.lua
msgid "Search"
msgstr "ಹà³à²¡à³à²•à³"
@@ -682,14 +752,6 @@ msgid "Install Mod: Unable to find suitable folder name for modpack $1"
msgstr ""
#: builtin/mainmenu/pkgmgr.lua
-msgid "Install: Unsupported file type \"$1\" or broken archive"
-msgstr ""
-
-#: builtin/mainmenu/pkgmgr.lua
-msgid "Install: file: \"$1\""
-msgstr ""
-
-#: builtin/mainmenu/pkgmgr.lua
msgid "Unable to find a valid mod or modpack"
msgstr ""
@@ -721,6 +783,40 @@ msgstr ""
msgid "Try reenabling public serverlist and check your internet connection."
msgstr "ಪಬà³à²²à²¿à²•ೠಸರà³à²µà²°à³à²²à²¿à²¸à³à²Ÿà³à²…ನà³à²¨à³ ರಿಎನೆಬಲೠಮಾಡಿ ಮತà³à²¤à³ ಅಂತರà³à²œà²¾à²² ಸಂಪರà³à²• ಪರಿಶೀಲಿಸಿ."
+#: builtin/mainmenu/tab_about.lua
+msgid "About"
+msgstr ""
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Active Contributors"
+msgstr ""
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Active renderer:"
+msgstr ""
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Core Developers"
+msgstr ""
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Open User Data Directory"
+msgstr ""
+
+#: builtin/mainmenu/tab_about.lua
+msgid ""
+"Opens the directory that contains user-provided worlds, games, mods,\n"
+"and texture packs in a file manager / explorer."
+msgstr ""
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Previous Contributors"
+msgstr ""
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Previous Core Developers"
+msgstr ""
+
#: builtin/mainmenu/tab_content.lua
msgid "Browse online content"
msgstr ""
@@ -761,36 +857,6 @@ msgstr ""
msgid "Use Texture Pack"
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 "Open User Data Directory"
-msgstr ""
-
-#: builtin/mainmenu/tab_credits.lua
-msgid ""
-"Opens the directory that contains user-provided worlds, games, mods,\n"
-"and texture packs in a file manager / explorer."
-msgstr ""
-
-#: builtin/mainmenu/tab_credits.lua
-msgid "Previous Contributors"
-msgstr ""
-
-#: builtin/mainmenu/tab_credits.lua
-msgid "Previous Core Developers"
-msgstr ""
-
#: builtin/mainmenu/tab_local.lua
msgid "Announce Server"
msgstr ""
@@ -819,7 +885,7 @@ msgstr ""
msgid "Install games from ContentDB"
msgstr ""
-#: builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
msgid "Name"
msgstr ""
@@ -831,7 +897,7 @@ msgstr ""
msgid "No world created or selected!"
msgstr ""
-#: builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
msgid "Password"
msgstr ""
@@ -839,7 +905,7 @@ msgstr ""
msgid "Play Game"
msgstr ""
-#: builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
msgid "Port"
msgstr ""
@@ -860,7 +926,11 @@ msgid "Start Game"
msgstr ""
#: builtin/mainmenu/tab_online.lua
-msgid "Address / Port"
+msgid "Address"
+msgstr ""
+
+#: builtin/mainmenu/tab_online.lua src/client/keycode.cpp
+msgid "Clear"
msgstr ""
#: builtin/mainmenu/tab_online.lua
@@ -871,8 +941,9 @@ msgstr ""
msgid "Creative mode"
msgstr ""
+#. ~ PvP = Player versus Player
#: builtin/mainmenu/tab_online.lua
-msgid "Damage enabled"
+msgid "Damage / PvP"
msgstr ""
#: builtin/mainmenu/tab_online.lua
@@ -880,24 +951,32 @@ msgid "Del. Favorite"
msgstr ""
#: builtin/mainmenu/tab_online.lua
-msgid "Favorite"
+msgid "Favorites"
msgstr ""
#: builtin/mainmenu/tab_online.lua
-msgid "Join Game"
+msgid "Incompatible Servers"
msgstr ""
#: builtin/mainmenu/tab_online.lua
-msgid "Name / Password"
+msgid "Join Game"
msgstr ""
#: builtin/mainmenu/tab_online.lua
msgid "Ping"
msgstr ""
-#. ~ PvP = Player versus Player
#: builtin/mainmenu/tab_online.lua
-msgid "PvP enabled"
+#, fuzzy
+msgid "Public Servers"
+msgstr "ಆರà³à²¦à³à²° ನದಿಗಳà³"
+
+#: builtin/mainmenu/tab_online.lua
+msgid "Refresh"
+msgstr ""
+
+#: builtin/mainmenu/tab_online.lua
+msgid "Server Description"
msgstr ""
#: builtin/mainmenu/tab_settings.lua
@@ -940,11 +1019,31 @@ msgstr ""
msgid "Connected Glass"
msgstr ""
+#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
+msgid "Dynamic shadows"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Dynamic shadows: "
+msgstr ""
+
#: builtin/mainmenu/tab_settings.lua
msgid "Fancy Leaves"
msgstr ""
#: builtin/mainmenu/tab_settings.lua
+msgid "High"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Low"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Medium"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
msgid "Mipmap"
msgstr ""
@@ -1017,10 +1116,6 @@ msgstr ""
msgid "Texturing:"
msgstr ""
-#: builtin/mainmenu/tab_settings.lua
-msgid "To enable shaders the OpenGL driver needs to be used."
-msgstr ""
-
#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
msgid "Tone Mapping"
msgstr ""
@@ -1034,6 +1129,14 @@ msgid "Trilinear Filter"
msgstr ""
#: builtin/mainmenu/tab_settings.lua
+msgid "Ultra High"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Very Low"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
msgid "Waving Leaves"
msgstr ""
@@ -1045,7 +1148,7 @@ msgstr ""
msgid "Waving Plants"
msgstr ""
-#: src/client/client.cpp
+#: src/client/client.cpp src/client/game.cpp
msgid "Connection timed out."
msgstr ""
@@ -1074,7 +1177,7 @@ msgid "Connection error (timed out?)"
msgstr ""
#: src/client/clientlauncher.cpp
-msgid "Could not find or load game \""
+msgid "Could not find or load game: "
msgstr ""
#: src/client/clientlauncher.cpp
@@ -1105,18 +1208,6 @@ msgstr ""
msgid "Provided world path doesn't exist: "
msgstr ""
-#. ~ DO NOT TRANSLATE THIS LITERALLY!
-#. This is a special string. Put either "no" or "yes"
-#. into the translation field (literally).
-#. Choose "yes" if the language requires use of the fallback
-#. font, "no" otherwise.
-#. The fallback font is (normally) required for languages with
-#. non-Latin script, like Chinese.
-#. When in doubt, test your translation.
-#: src/client/fontengine.cpp
-msgid "needs_fallback_font"
-msgstr "yes"
-
#: src/client/game.cpp
msgid ""
"\n"
@@ -1128,14 +1219,6 @@ msgid "- Address: "
msgstr ""
#: src/client/game.cpp
-msgid "- Creative Mode: "
-msgstr ""
-
-#: src/client/game.cpp
-msgid "- Damage: "
-msgstr ""
-
-#: src/client/game.cpp
msgid "- Mode: "
msgstr ""
@@ -1157,6 +1240,16 @@ msgid "- Server Name: "
msgstr ""
#: src/client/game.cpp
+#, fuzzy
+msgid "A serialization error occurred:"
+msgstr "ದೋಷ ವೊಂದೠಸಂಭವಿಸಿದೆ:"
+
+#: src/client/game.cpp
+#, c-format
+msgid "Access denied. Reason: %s"
+msgstr ""
+
+#: src/client/game.cpp
msgid "Automatic forward disabled"
msgstr ""
@@ -1165,6 +1258,22 @@ msgid "Automatic forward enabled"
msgstr ""
#: src/client/game.cpp
+msgid "Block bounds hidden"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Block bounds shown for all blocks"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Block bounds shown for current block"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Block bounds shown for nearby blocks"
+msgstr ""
+
+#: src/client/game.cpp
msgid "Camera update disabled"
msgstr ""
@@ -1173,6 +1282,10 @@ msgid "Camera update enabled"
msgstr ""
#: src/client/game.cpp
+msgid "Can't show block bounds (need 'basic_debug' privilege)"
+msgstr ""
+
+#: src/client/game.cpp
msgid "Change Password"
msgstr ""
@@ -1185,6 +1298,10 @@ msgid "Cinematic mode enabled"
msgstr ""
#: src/client/game.cpp
+msgid "Client disconnected"
+msgstr ""
+
+#: src/client/game.cpp
msgid "Client side scripting is disabled"
msgstr ""
@@ -1193,6 +1310,10 @@ msgid "Connecting to server..."
msgstr ""
#: src/client/game.cpp
+msgid "Connection failed for unknown reason"
+msgstr ""
+
+#: src/client/game.cpp
msgid "Continue"
msgstr ""
@@ -1216,6 +1337,11 @@ msgid ""
msgstr ""
#: src/client/game.cpp
+#, c-format
+msgid "Couldn't resolve address: %s"
+msgstr ""
+
+#: src/client/game.cpp
msgid "Creating client..."
msgstr ""
@@ -1332,6 +1458,10 @@ msgid "Minimap currently disabled by game or mod"
msgstr ""
#: src/client/game.cpp
+msgid "Multiplayer"
+msgstr ""
+
+#: src/client/game.cpp
msgid "Noclip mode disabled"
msgstr ""
@@ -1405,6 +1535,21 @@ msgstr ""
#: src/client/game.cpp
#, c-format
+msgid "The server is probably running a different version of %s."
+msgstr ""
+
+#: src/client/game.cpp
+#, c-format
+msgid "Unable to connect to %s because IPv6 is disabled"
+msgstr ""
+
+#: src/client/game.cpp
+#, c-format
+msgid "Unable to listen on %s because IPv6 is disabled"
+msgstr ""
+
+#: src/client/game.cpp
+#, c-format
msgid "Viewing range changed to %d"
msgstr ""
@@ -1473,10 +1618,6 @@ msgid "Caps Lock"
msgstr ""
#: src/client/keycode.cpp
-msgid "Clear"
-msgstr ""
-
-#: src/client/keycode.cpp
msgid "Control"
msgstr ""
@@ -1741,6 +1882,15 @@ msgstr ""
msgid "Minimap in texture mode"
msgstr ""
+#: src/gui/guiChatConsole.cpp
+#, fuzzy
+msgid "Failed to open webpage"
+msgstr "$1 ಡೌನà³à²²à³‹à²¡à³ ಮಾಡಲೠಆಗಿಲà³à²²"
+
+#: src/gui/guiChatConsole.cpp
+msgid "Opening webpage"
+msgstr ""
+
#: src/gui/guiConfirmRegistration.cpp src/gui/guiPasswordChange.cpp
msgid "Passwords do not match!"
msgstr ""
@@ -1764,7 +1914,7 @@ msgid "Proceed"
msgstr ""
#: src/gui/guiKeyChangeMenu.cpp
-msgid "\"Special\" = climb down"
+msgid "\"Aux1\" = climb down"
msgstr ""
#: src/gui/guiKeyChangeMenu.cpp
@@ -1776,10 +1926,18 @@ msgid "Automatic jumping"
msgstr ""
#: src/gui/guiKeyChangeMenu.cpp
+msgid "Aux1"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
msgid "Backward"
msgstr ""
#: src/gui/guiKeyChangeMenu.cpp
+msgid "Block bounds"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
msgid "Change camera"
msgstr ""
@@ -1868,10 +2026,6 @@ msgid "Sneak"
msgstr ""
#: src/gui/guiKeyChangeMenu.cpp
-msgid "Special"
-msgstr ""
-
-#: src/gui/guiKeyChangeMenu.cpp
msgid "Toggle HUD"
msgstr ""
@@ -1932,7 +2086,8 @@ msgid "Muted"
msgstr ""
#: src/gui/guiVolumeChange.cpp
-msgid "Sound Volume: "
+#, c-format
+msgid "Sound Volume: %d%%"
msgstr ""
#. ~ Imperative, as in "Enter/type in text".
@@ -1956,8 +2111,8 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"(Android) Use virtual joystick to trigger \"aux\" button.\n"
-"If enabled, virtual joystick will also tap \"aux\" button when out of main "
+"(Android) Use virtual joystick to trigger \"Aux1\" button.\n"
+"If enabled, virtual joystick will also tap \"Aux1\" button when out of main "
"circle."
msgstr ""
@@ -2140,6 +2295,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Adjust the detected display density, used for scaling UI elements."
+msgstr ""
+
+#: src/settings_translation_file.cpp
#, c-format
msgid ""
"Adjusts the density of the floatland layer.\n"
@@ -2252,6 +2411,14 @@ msgid "Autoscaling mode"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Aux1 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Aux1 key for climbing/descending"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Backward key"
msgstr ""
@@ -2296,10 +2463,6 @@ msgid "Biome noise"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Bits per pixel (aka color depth) in fullscreen mode."
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Block send optimize distance"
msgstr ""
@@ -2398,6 +2561,14 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Chat command time message threshold"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Chat commands"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Chat font size"
msgstr ""
@@ -2430,7 +2601,7 @@ msgid "Chat toggle key"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Chatcommands"
+msgid "Chat weblinks"
msgstr ""
#: src/settings_translation_file.cpp
@@ -2450,6 +2621,12 @@ msgid "Clean transparent textures"
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Clickable weblinks (middle-click or Ctrl+left-click) enabled in chat console "
+"output."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Client"
msgstr ""
@@ -2494,6 +2671,10 @@ msgid "Colored fog"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Colored shadows"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid ""
"Comma-separated list of flags to hide in the content repository.\n"
"\"nonfree\" can be used to hide packages which do not qualify as 'free "
@@ -2521,6 +2702,22 @@ msgid "Command key"
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Compression level to use when saving mapblocks to disk.\n"
+"-1 - use default compression level\n"
+"0 - least compression, fastest\n"
+"9 - best compression, slowest"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Compression level to use when sending mapblocks to the client.\n"
+"-1 - use default compression level\n"
+"0 - least compression, fastest\n"
+"9 - best compression, slowest"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Connect glass"
msgstr ""
@@ -2611,7 +2808,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"Crosshair alpha (opaqueness, between 0 and 255).\n"
-"Also controls the object crosshair color"
+"This also applies to the object crosshair."
msgstr ""
#: src/settings_translation_file.cpp
@@ -2688,8 +2885,9 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Default timeout for cURL, stated in milliseconds.\n"
-"Only has an effect if compiled with cURL."
+"Define shadow filtering quality.\n"
+"This simulates the soft shadows effect by applying a PCF or Poisson disk\n"
+"but also uses more resources."
msgstr ""
#: src/settings_translation_file.cpp
@@ -2807,6 +3005,10 @@ msgid "Disallow empty passwords"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Display Density Scaling Factor"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Domain name of server, to be displayed in the serverlist."
msgstr ""
@@ -2851,6 +3053,19 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Enable Poisson disk filtering.\n"
+"On true uses Poisson disk to make \"soft shadows\". Otherwise uses PCF "
+"filtering."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable colored shadows.\n"
+"On true translucent nodes cast colored shadows. This is expensive."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Enable console window"
msgstr ""
@@ -2959,6 +3174,12 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Enables tradeoffs that reduce CPU load or increase rendering performance\n"
+"at the expense of minor visual glitches that do not impact game playability."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Engine profiling data print interval"
msgstr ""
@@ -2997,18 +3218,6 @@ msgid "Fallback font path"
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 ""
@@ -3026,7 +3235,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Fast movement (via the \"special\" key).\n"
+"Fast movement (via the \"Aux1\" key).\n"
"This requires the \"fast\" privilege on the server."
msgstr ""
@@ -3060,9 +3269,9 @@ 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."
+"which PNG optimizers usually discard, often resulting in dark or\n"
+"light edges to transparent textures. Apply a filter to clean that up\n"
+"at texture load time. This is automatically enabled if mipmapping is enabled."
msgstr ""
#: src/settings_translation_file.cpp
@@ -3154,15 +3363,15 @@ msgid "Font size"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Font size of the default font in point (pt)."
+msgid "Font size divisible by"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Font size of the fallback font in point (pt)."
+msgid "Font size of the default font where 1 unit = 1 pixel at 96 DPI"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Font size of the monospace font in point (pt)."
+msgid "Font size of the monospace font where 1 unit = 1 pixel at 96 DPI"
msgstr ""
#: src/settings_translation_file.cpp
@@ -3173,6 +3382,17 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"For pixel-style fonts that do not scale well, this ensures that font sizes "
+"used\n"
+"with this font will always be divisible by this value, in pixels. For "
+"instance,\n"
+"a pixel font 16 pixels tall should have this set to 16, so it will only ever "
+"be\n"
+"sized 16, 32, 48, etc., so a mod requesting a size of 25 will get 32."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Format of player chat messages. The following strings are valid "
"placeholders:\n"
"@name, @message, @timestamp (optional)"
@@ -3231,10 +3451,6 @@ msgid "Fraction of the visible distance at which fog starts to be rendered"
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)."
@@ -3259,10 +3475,6 @@ msgid "Full screen"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Full screen BPP"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Fullscreen mode."
msgstr ""
@@ -3286,7 +3498,7 @@ msgstr ""
msgid ""
"Global map generation attributes.\n"
"In Mapgen v6 the 'decorations' flag controls all decorations except trees\n"
-"and junglegrass, in all other mapgens this flag controls all decorations."
+"and jungle grass, in all other mapgens this flag controls all decorations."
msgstr ""
#: src/settings_translation_file.cpp
@@ -3355,7 +3567,8 @@ msgid "Heat noise"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Height component of the initial window size."
+msgid ""
+"Height component of the initial window size. Ignored in fullscreen mode."
msgstr ""
#: src/settings_translation_file.cpp
@@ -3367,10 +3580,6 @@ msgid "Height select noise"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "High-precision FPU"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Hill steepness"
msgstr ""
@@ -3601,8 +3810,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"If disabled, \"special\" key is used to fly fast if both fly and fast mode "
-"are\n"
+"If disabled, \"Aux1\" key is used to fly fast if both fly and fast mode are\n"
"enabled."
msgstr ""
@@ -3624,8 +3832,8 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"If enabled, \"special\" key instead of \"sneak\" key is used for climbing "
-"down and\n"
+"If enabled, \"Aux1\" key instead of \"Sneak\" key is used for climbing down "
+"and\n"
"descending."
msgstr ""
@@ -3671,6 +3879,12 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"If the execution of a chat command takes longer than this specified time in\n"
+"seconds, add the time information to the chat command message"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"If the file size of debug.txt exceeds the number of megabytes specified in\n"
"this setting when it is opened, the file is moved to debug.txt.1,\n"
"deleting an older debug.txt.1 if it exists.\n"
@@ -3716,7 +3930,7 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Instrument chatcommands on registration."
+msgid "Instrument chat commands on registration."
msgstr ""
#: src/settings_translation_file.cpp
@@ -3800,7 +4014,7 @@ msgid "Joystick button repetition interval"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Joystick deadzone"
+msgid "Joystick dead zone"
msgstr ""
#: src/settings_translation_file.cpp
@@ -4558,10 +4772,6 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Makes DirectX work with LuaJIT. Disable if it causes troubles."
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Makes all liquids opaque"
msgstr ""
@@ -4633,6 +4843,10 @@ msgid "Map save interval"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Map shadows update frames"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Mapblock limit"
msgstr ""
@@ -4741,6 +4955,10 @@ msgid "Maximum FPS when the window is not focused, or when the game is paused."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Maximum distance to render shadows."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Maximum forceloaded blocks"
msgstr ""
@@ -4846,7 +5064,15 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Maximum time in ms a file download (e.g. a mod download) may take."
+msgid ""
+"Maximum time a file download (e.g. a mod download) may take, stated in "
+"milliseconds."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum time an interactive request (e.g. server list fetch) may take, "
+"stated in milliseconds."
msgstr ""
#: src/settings_translation_file.cpp
@@ -4910,7 +5136,7 @@ msgid "Mod channels"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Modifies the size of the hudbar elements."
+msgid "Modifies the size of the HUD elements."
msgstr ""
#: src/settings_translation_file.cpp
@@ -4922,6 +5148,10 @@ msgid "Monospace font size"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Monospace font size divisible by"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Mountain height noise"
msgstr ""
@@ -5042,7 +5272,7 @@ 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"
+"This is a trade-off between SQLite transaction overhead and\n"
"memory consumption (4096=100MB, as a rule of thumb)."
msgstr ""
@@ -5061,21 +5291,18 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Opaqueness (alpha) of the shadow behind the fallback font, between 0 and 255."
-msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid ""
"Open the pause menu when the window's focus is lost. Does not pause if a "
"formspec is\n"
"open."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Optional override for chat weblink color."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid ""
-"Path of the fallback font.\n"
-"If “freetype†setting is enabled: Must be a TrueType font.\n"
-"If “freetype†setting is disabled: Must be a bitmap or XML vectors font.\n"
+"Path of the fallback font. Must be a TrueType font.\n"
"This font will be used for certain languages or if the default font is "
"unavailable."
msgstr ""
@@ -5098,17 +5325,13 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Path to the default font.\n"
-"If “freetype†setting is enabled: Must be a TrueType font.\n"
-"If “freetype†setting is disabled: Must be a bitmap or XML vectors font.\n"
+"Path to the default font. Must be a TrueType font.\n"
"The fallback font will be used if the font cannot be loaded."
msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Path to the monospace font.\n"
-"If “freetype†setting is enabled: Must be a TrueType font.\n"
-"If “freetype†setting is disabled: Must be a bitmap or XML vectors font.\n"
+"Path to the monospace font. Must be a TrueType font.\n"
"This font is used for e.g. the console and profiler screen."
msgstr ""
@@ -5163,6 +5386,10 @@ msgid "Player versus player"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Poisson filtering"
+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."
@@ -5207,9 +5434,9 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"Prometheus listener address.\n"
-"If minetest is compiled with ENABLE_PROMETHEUS option enabled,\n"
+"If Minetest is compiled with ENABLE_PROMETHEUS option enabled,\n"
"enable metrics listener for Prometheus on that address.\n"
-"Metrics can be fetch on http://127.0.0.1:30000/metrics"
+"Metrics can be fetched on http://127.0.0.1:30000/metrics"
msgstr ""
#: src/settings_translation_file.cpp
@@ -5498,6 +5725,32 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Set the shadow strength.\n"
+"Lower value means lighter shadows, higher value means darker shadows."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set the soft shadow radius size.\n"
+"Lower values mean sharper shadows, bigger values mean softer shadows.\n"
+"Minimum value: 1.0; maximum value: 10.0"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set the tilt of Sun/Moon orbit in degrees.\n"
+"Value of 0 means no tilt / vertical orbit.\n"
+"Minimum value: 0.0; maximum value: 60.0"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set to true to enable Shadow Mapping.\n"
+"Requires shaders to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Set to true to enable waving leaves.\n"
"Requires shaders to be enabled."
msgstr ""
@@ -5515,6 +5768,13 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Sets shadow texture quality to 32 bits.\n"
+"On false, 16 bits texture will be used.\n"
+"This can cause much more artifacts in the shadow."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Shader path"
msgstr ""
@@ -5527,15 +5787,29 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Shadow filter quality"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Shadow map max distance in nodes to render shadows"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Shadow map texture in 32 bits"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Shadow map texture size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid ""
"Shadow offset (in pixels) of the default font. If 0, then shadow will not be "
"drawn."
msgstr ""
#: src/settings_translation_file.cpp
-msgid ""
-"Shadow offset (in pixels) of the fallback font. If 0, then shadow will not "
-"be drawn."
+msgid "Shadow strength"
msgstr ""
#: src/settings_translation_file.cpp
@@ -5557,7 +5831,7 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Show nametag backgrounds by default"
+msgid "Show name tag backgrounds by default"
msgstr ""
#: src/settings_translation_file.cpp
@@ -5582,6 +5856,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Sky Body Orbit Tilt"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Slice w"
msgstr ""
@@ -5636,15 +5914,11 @@ msgid "Sneaking speed, in nodes per second."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Sound"
-msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid "Special key"
+msgid "Soft shadow radius"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Special key for climbing/descending"
+msgid "Sound"
msgstr ""
#: src/settings_translation_file.cpp
@@ -5664,6 +5938,14 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Spread a complete update of shadow map over given amount of frames.\n"
+"Higher values might make shadows laggy, lower values\n"
+"will consume more resources.\n"
+"Minimum value: 1; maximum value: 16"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Spread of light curve boost range.\n"
"Controls the width of the range to be boosted.\n"
"Standard deviation of the light curve boost Gaussian."
@@ -5770,6 +6052,13 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Texture size to render the shadow map on.\n"
+"This must be a power of two.\n"
+"Bigger numbers create better shadows but it is also more expensive."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Textures on a node may be aligned either to the node or to the world.\n"
"The former mode suits better things like machines, furniture, etc., while\n"
"the latter makes stairs and microblocks fit surroundings better.\n"
@@ -5783,7 +6072,7 @@ msgid "The URL for the content repository"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "The deadzone of the joystick"
+msgid "The dead zone of the joystick"
msgstr ""
#: src/settings_translation_file.cpp
@@ -5841,7 +6130,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"The rendering back-end for Irrlicht.\n"
+"The rendering back-end.\n"
"A restart is required after changing this.\n"
"Note: On Android, stick with OGLES1 if unsure! App may fail to start "
"otherwise.\n"
@@ -5852,7 +6141,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"The sensitivity of the joystick axes for moving the\n"
-"ingame view frustum around."
+"in-game view frustum around."
msgstr ""
#: src/settings_translation_file.cpp
@@ -5946,6 +6235,10 @@ msgid "Touch screen threshold"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Tradeoffs for performance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Trees noise"
msgstr ""
@@ -6015,7 +6308,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Use mip mapping to scale textures. May slightly increase performance,\n"
+"Use mipmapping to scale textures. May slightly increase performance,\n"
"especially when using a high resolution texture pack.\n"
"Gamma correct downscaling is not supported."
msgstr ""
@@ -6128,7 +6421,7 @@ msgid "Viewing range"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Virtual joystick triggers aux button"
+msgid "Virtual joystick triggers Aux1 button"
msgstr ""
#: src/settings_translation_file.cpp
@@ -6199,6 +6492,10 @@ msgid "Waving plants"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Weblink color"
+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"
@@ -6219,23 +6516,15 @@ msgid ""
"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.\n"
+"memory. Powers of 2 are recommended. This setting is ONLY applied if\n"
+"bilinear/trilinear/anisotropic filtering is enabled.\n"
"This is also used as the base node texture size for world-aligned\n"
"texture autoscaling."
msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Whether FreeType fonts are used, requires FreeType support to be compiled "
-"in.\n"
-"If disabled, bitmap and XML vectors fonts are used instead."
-msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid ""
-"Whether nametag backgrounds should be shown by default.\n"
+"Whether name tag backgrounds should be shown by default.\n"
"Mods may still set a background."
msgstr ""
@@ -6277,7 +6566,7 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Width component of the initial window size."
+msgid "Width component of the initial window size. Ignored in fullscreen mode."
msgstr ""
#: src/settings_translation_file.cpp
@@ -6362,33 +6651,15 @@ msgid "Y-level of seabed."
msgstr ""
#: src/settings_translation_file.cpp
-msgid ""
-"ZLib compression level to use when saving mapblocks to disk.\n"
-"-1 - Zlib's default compression level\n"
-"0 - no compresson, fastest\n"
-"9 - best compression, slowest\n"
-"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)"
-msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid ""
-"ZLib compression level to use when sending mapblocks to the client.\n"
-"-1 - Zlib's default compression level\n"
-"0 - no compresson, fastest\n"
-"9 - best compression, slowest\n"
-"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "cURL file download timeout"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "cURL parallel limit"
+msgid "cURL interactive timeout"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "cURL timeout"
+msgid "cURL parallel limit"
msgstr ""
#~ msgid "Back"
@@ -6403,3 +6674,10 @@ msgstr ""
#, fuzzy
#~ msgid "View"
#~ msgstr "ತೋರಿಸà³"
+
+#, fuzzy
+#~ msgid "You died."
+#~ msgstr "ನೀನೠಸತà³à²¤à³à²¹à³‹à²¦à³†"
+
+#~ msgid "needs_fallback_font"
+#~ msgstr "yes"
diff --git a/po/ko/minetest.po b/po/ko/minetest.po
index d08dc7d72..2db18a179 100644
--- a/po/ko/minetest.po
+++ b/po/ko/minetest.po
@@ -2,7 +2,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Korean (Minetest)\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-02-23 19:03+0100\n"
+"POT-Creation-Date: 2022-01-25 23:19+0100\n"
"PO-Revision-Date: 2020-12-05 15:29+0000\n"
"Last-Translator: HunSeongPark <gnstjd980831@naver.com>\n"
"Language-Team: Korean <https://hosted.weblate.org/projects/minetest/minetest/"
@@ -14,6 +14,47 @@ msgstr ""
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: Weblate 4.4-dev\n"
+#: builtin/client/chatcommands.lua
+msgid "Clear the out chat queue"
+msgstr ""
+
+#: builtin/client/chatcommands.lua
+#, fuzzy
+msgid "Empty command."
+msgstr "채팅 명ë ì–´"
+
+#: builtin/client/chatcommands.lua
+#, fuzzy
+msgid "Exit to main menu"
+msgstr "메뉴로 나가기"
+
+#: builtin/client/chatcommands.lua
+#, fuzzy
+msgid "Invalid command: "
+msgstr "지역 명령어"
+
+#: builtin/client/chatcommands.lua
+msgid "Issued command: "
+msgstr ""
+
+#: builtin/client/chatcommands.lua
+#, fuzzy
+msgid "List online players"
+msgstr "싱글 플레ì´ì–´"
+
+#: builtin/client/chatcommands.lua
+#, fuzzy
+msgid "Online players: "
+msgstr "싱글 플레ì´ì–´"
+
+#: builtin/client/chatcommands.lua
+msgid "The out chat queue is now empty."
+msgstr ""
+
+#: builtin/client/chatcommands.lua
+msgid "This command is disabled by server."
+msgstr ""
+
#: builtin/client/death_formspec.lua src/client/game.cpp
msgid "Respawn"
msgstr "리스í°"
@@ -22,11 +63,42 @@ msgstr "리스í°"
msgid "You died"
msgstr "사ë§í–ˆìŠµë‹ˆë‹¤"
+#: builtin/common/chatcommands.lua
+#, fuzzy
+msgid "Available commands:"
+msgstr "지역 명령어"
+
+#: builtin/common/chatcommands.lua
+#, fuzzy
+msgid "Available commands: "
+msgstr "지역 명령어"
+
+#: builtin/common/chatcommands.lua
+msgid "Command not available: "
+msgstr ""
+
+#: builtin/common/chatcommands.lua
+msgid "Get help for commands"
+msgstr ""
+
+#: builtin/common/chatcommands.lua
+msgid ""
+"Use '.help <cmd>' to get more information, or '.help all' to list everything."
+msgstr ""
+
+#: builtin/common/chatcommands.lua
+msgid "[all | <cmd>]"
+msgstr ""
+
#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp
msgid "OK"
msgstr "확ì¸"
#: builtin/fstk/ui.lua
+msgid "<none available>"
+msgstr ""
+
+#: builtin/fstk/ui.lua
msgid "An error occurred in a Lua script:"
msgstr "Lua 스í¬ë¦½íЏì—서 오류가 ë°œìƒí–ˆìŠµë‹ˆë‹¤:"
@@ -232,6 +304,13 @@ msgid "Install missing dependencies"
msgstr "종ì†ì„± ì„ íƒ:"
#: builtin/mainmenu/dlg_contentstore.lua
+#, fuzzy
+msgid "Install: Unsupported file type or broken archive"
+msgstr ""
+"모드 설치: \"$1\"는(ì€) ì§€ì› ë˜ì§€ 않는 íŒŒì¼ í˜•ì‹ ì´ê±°ë‚˜ ì†ìƒëœ ì••ì¶• 파ì¼ìž…니"
+"다"
+
+#: builtin/mainmenu/dlg_contentstore.lua
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Mods"
msgstr "모드"
@@ -535,7 +614,7 @@ msgstr "< 설정 페ì´ì§€ë¡œ ëŒì•„가기"
msgid "Browse"
msgstr "열기"
-#: builtin/mainmenu/dlg_settings_advanced.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_settings.lua
msgid "Disabled"
msgstr "비활성화ë¨"
@@ -560,7 +639,8 @@ msgid "Offset"
msgstr "오프셋"
#: builtin/mainmenu/dlg_settings_advanced.lua
-msgid "Persistance"
+#, fuzzy
+msgid "Persistence"
msgstr "플레ì´ì–´ 전송 거리"
#: builtin/mainmenu/dlg_settings_advanced.lua
@@ -579,7 +659,7 @@ msgstr "기본값 ë³µì›"
msgid "Scale"
msgstr "스케ì¼"
-#: builtin/mainmenu/dlg_settings_advanced.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_online.lua
msgid "Search"
msgstr "찾기"
@@ -671,16 +751,6 @@ msgid "Install Mod: Unable to find suitable folder name for modpack $1"
msgstr "모드 설치: 모드 팩 $1 (ì´)ì˜ ì˜¬ë°”ë¥¸ í´ë”ì´ë¦„ì„ ì°¾ì„ ìˆ˜ 없습니다"
#: builtin/mainmenu/pkgmgr.lua
-msgid "Install: Unsupported file type \"$1\" or broken archive"
-msgstr ""
-"모드 설치: \"$1\"는(ì€) ì§€ì› ë˜ì§€ 않는 íŒŒì¼ í˜•ì‹ ì´ê±°ë‚˜ ì†ìƒëœ ì••ì¶• 파ì¼ìž…니"
-"다"
-
-#: builtin/mainmenu/pkgmgr.lua
-msgid "Install: file: \"$1\""
-msgstr "모드 설치: 파ì¼: \"$1\""
-
-#: builtin/mainmenu/pkgmgr.lua
msgid "Unable to find a valid mod or modpack"
msgstr "설치 모드: 모드 팩 $1 (ì´)ì˜ ì˜¬ë°”ë¥¸ í´ë”ì´ë¦„ì„ ì°¾ì„ ìˆ˜ 없습니다"
@@ -713,6 +783,42 @@ msgstr "í´ë¼ì´ì–¸íЏ 스í¬ë¦½íŠ¸ê°€ 비활성화ë¨"
msgid "Try reenabling public serverlist and check your internet connection."
msgstr "ì¸í„°ë„· ì—°ê²°ì„ í™•ì¸í•œ 후 서버 목ë¡ì„ 새로 ê³ ì³ë³´ì„¸ìš”."
+#: builtin/mainmenu/tab_about.lua
+msgid "About"
+msgstr ""
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Active Contributors"
+msgstr "활ë™ì ì¸ 공헌ìž"
+
+#: builtin/mainmenu/tab_about.lua
+#, fuzzy
+msgid "Active renderer:"
+msgstr "ê°ì²´ 전달 범위 활성화"
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Core Developers"
+msgstr "코어 개발ìž"
+
+#: builtin/mainmenu/tab_about.lua
+#, fuzzy
+msgid "Open User Data Directory"
+msgstr "경로를 ì„ íƒí•˜ì„¸ìš”"
+
+#: builtin/mainmenu/tab_about.lua
+msgid ""
+"Opens the directory that contains user-provided worlds, games, mods,\n"
+"and texture packs in a file manager / explorer."
+msgstr ""
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Previous Contributors"
+msgstr "ì´ì „ 공헌ìžë“¤"
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Previous Core Developers"
+msgstr "ì´ì „ 코어 개발ìžë“¤"
+
#: builtin/mainmenu/tab_content.lua
msgid "Browse online content"
msgstr "온ë¼ì¸ 컨í…츠 검색"
@@ -753,37 +859,6 @@ msgstr "패키지 삭제"
msgid "Use Texture Pack"
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
-#, fuzzy
-msgid "Open User Data Directory"
-msgstr "경로를 ì„ íƒí•˜ì„¸ìš”"
-
-#: builtin/mainmenu/tab_credits.lua
-msgid ""
-"Opens the directory that contains user-provided worlds, games, mods,\n"
-"and texture packs in a file manager / explorer."
-msgstr ""
-
-#: builtin/mainmenu/tab_credits.lua
-msgid "Previous Contributors"
-msgstr "ì´ì „ 공헌ìžë“¤"
-
-#: builtin/mainmenu/tab_credits.lua
-msgid "Previous Core Developers"
-msgstr "ì´ì „ 코어 개발ìžë“¤"
-
#: builtin/mainmenu/tab_local.lua
msgid "Announce Server"
msgstr "서버 알리기"
@@ -812,7 +887,7 @@ msgstr "호스트 서버"
msgid "Install games from ContentDB"
msgstr "ContentDBì—서 게임 설치"
-#: builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
msgid "Name"
msgstr ""
@@ -824,7 +899,7 @@ msgstr "새로 만들기"
msgid "No world created or selected!"
msgstr "월드를 만들거나 ì„ íƒí•˜ì§€ 않았습니다!"
-#: builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
#, fuzzy
msgid "Password"
msgstr "새로운 비밀번호"
@@ -833,7 +908,7 @@ msgstr "새로운 비밀번호"
msgid "Play Game"
msgstr "게임하기"
-#: builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
msgid "Port"
msgstr "í¬íЏ"
@@ -855,8 +930,13 @@ msgid "Start Game"
msgstr "게임 시작"
#: builtin/mainmenu/tab_online.lua
-msgid "Address / Port"
-msgstr "주소/í¬íЏ"
+#, fuzzy
+msgid "Address"
+msgstr "- 주소: "
+
+#: builtin/mainmenu/tab_online.lua src/client/keycode.cpp
+msgid "Clear"
+msgstr "지우기"
#: builtin/mainmenu/tab_online.lua
msgid "Connect"
@@ -866,34 +946,46 @@ msgstr "ì—°ê²°"
msgid "Creative mode"
msgstr "í¬ë¦¬ì—ì´í‹°ë¸Œ 모드"
+#. ~ PvP = Player versus Player
#: builtin/mainmenu/tab_online.lua
-msgid "Damage enabled"
-msgstr "ë°ë¯¸ì§€ 활성화"
+#, fuzzy
+msgid "Damage / PvP"
+msgstr "ë°ë¯¸ì§€"
#: builtin/mainmenu/tab_online.lua
msgid "Del. Favorite"
msgstr "ì¦ê²¨ì°¾ê¸° ì‚­ì œ"
#: builtin/mainmenu/tab_online.lua
-msgid "Favorite"
+#, fuzzy
+msgid "Favorites"
msgstr "ì¦ê²¨ì°¾ê¸°"
#: builtin/mainmenu/tab_online.lua
-msgid "Join Game"
-msgstr "게임 참가"
+msgid "Incompatible Servers"
+msgstr ""
#: builtin/mainmenu/tab_online.lua
-msgid "Name / Password"
-msgstr "ì´ë¦„/비밀번호"
+msgid "Join Game"
+msgstr "게임 참가"
#: builtin/mainmenu/tab_online.lua
msgid "Ping"
msgstr "í•‘"
-#. ~ PvP = Player versus Player
#: builtin/mainmenu/tab_online.lua
-msgid "PvP enabled"
-msgstr "PvP 가능"
+#, fuzzy
+msgid "Public Servers"
+msgstr "서버 알리기"
+
+#: builtin/mainmenu/tab_online.lua
+msgid "Refresh"
+msgstr ""
+
+#: builtin/mainmenu/tab_online.lua
+#, fuzzy
+msgid "Server Description"
+msgstr "서버 설명"
#: builtin/mainmenu/tab_settings.lua
msgid "2x"
@@ -935,11 +1027,32 @@ msgstr "키 변경"
msgid "Connected Glass"
msgstr "ì—°ê²°ëœ ìœ ë¦¬"
+#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
+#, fuzzy
+msgid "Dynamic shadows"
+msgstr "글꼴 그림ìž"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Dynamic shadows: "
+msgstr ""
+
#: builtin/mainmenu/tab_settings.lua
msgid "Fancy Leaves"
msgstr "아름다운 나뭇잎 효과"
#: builtin/mainmenu/tab_settings.lua
+msgid "High"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Low"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Medium"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
msgid "Mipmap"
msgstr "ë°‰ ë§µ"
@@ -1012,10 +1125,6 @@ msgstr "부드러운 조명 효과"
msgid "Texturing:"
msgstr "질ê°:"
-#: builtin/mainmenu/tab_settings.lua
-msgid "To enable shaders the OpenGL driver needs to be used."
-msgstr "ì‰ì´ë”를 사용하려면 OpenGL 드ë¼ì´ë²„를 사용할 필요가 있습니다."
-
#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
msgid "Tone Mapping"
msgstr "톤 매핑"
@@ -1029,6 +1138,14 @@ msgid "Trilinear Filter"
msgstr "선형 필터"
#: builtin/mainmenu/tab_settings.lua
+msgid "Ultra High"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Very Low"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
msgid "Waving Leaves"
msgstr "움ì§ì´ëŠ” 나뭇잎 효과"
@@ -1040,7 +1157,7 @@ msgstr "물 ë“±ì˜ ë¬¼ê²°íš¨ê³¼"
msgid "Waving Plants"
msgstr "움ì§ì´ëŠ” ì‹ë¬¼ 효과"
-#: src/client/client.cpp
+#: src/client/client.cpp src/client/game.cpp
msgid "Connection timed out."
msgstr "ì—°ê²° ì‹œê°„ì´ ì´ˆê³¼í–ˆìŠµë‹ˆë‹¤."
@@ -1069,7 +1186,8 @@ msgid "Connection error (timed out?)"
msgstr "연결 오류 (시간초과)"
#: src/client/clientlauncher.cpp
-msgid "Could not find or load game \""
+#, fuzzy
+msgid "Could not find or load game: "
msgstr "ê²Œìž„ì„ ì°¾ì§€ 못했거나 로딩할 수 없습니다\""
#: src/client/clientlauncher.cpp
@@ -1100,18 +1218,6 @@ msgstr "패스워드 파ì¼ì„ ì—¬ëŠ”ë° ì‹¤íŒ¨í–ˆìŠµë‹ˆë‹¤: "
msgid "Provided world path doesn't exist: "
msgstr "월드 경로가 존재하지 않습니다: "
-#. ~ DO NOT TRANSLATE THIS LITERALLY!
-#. This is a special string. Put either "no" or "yes"
-#. into the translation field (literally).
-#. Choose "yes" if the language requires use of the fallback
-#. font, "no" otherwise.
-#. The fallback font is (normally) required for languages with
-#. non-Latin script, like Chinese.
-#. When in doubt, test your translation.
-#: src/client/fontengine.cpp
-msgid "needs_fallback_font"
-msgstr "yes"
-
#: src/client/game.cpp
msgid ""
"\n"
@@ -1125,14 +1231,6 @@ msgid "- Address: "
msgstr "- 주소: "
#: src/client/game.cpp
-msgid "- Creative Mode: "
-msgstr "- í¬ë¦¬ì—ì´í‹°ë¸Œ 모드: "
-
-#: src/client/game.cpp
-msgid "- Damage: "
-msgstr "- ë°ë¯¸ì§€: "
-
-#: src/client/game.cpp
msgid "- Mode: "
msgstr "- 모드: "
@@ -1154,6 +1252,16 @@ msgid "- Server Name: "
msgstr "- 서버 ì´ë¦„: "
#: src/client/game.cpp
+#, fuzzy
+msgid "A serialization error occurred:"
+msgstr "오류가 ë°œìƒí–ˆìŠµë‹ˆë‹¤:"
+
+#: src/client/game.cpp
+#, c-format
+msgid "Access denied. Reason: %s"
+msgstr ""
+
+#: src/client/game.cpp
msgid "Automatic forward disabled"
msgstr "ìžë™ ì „ì§„ 비활성화"
@@ -1162,6 +1270,22 @@ msgid "Automatic forward enabled"
msgstr "ìžë™ ì „ì§„ 활성화"
#: src/client/game.cpp
+msgid "Block bounds hidden"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Block bounds shown for all blocks"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Block bounds shown for current block"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Block bounds shown for nearby blocks"
+msgstr ""
+
+#: src/client/game.cpp
msgid "Camera update disabled"
msgstr "ì¹´ë©”ë¼ ì—…ë°ì´íЏ 비활성화"
@@ -1170,6 +1294,10 @@ msgid "Camera update enabled"
msgstr "ì¹´ë©”ë¼ ì—…ë°ì´íЏ 활성화"
#: src/client/game.cpp
+msgid "Can't show block bounds (need 'basic_debug' privilege)"
+msgstr ""
+
+#: src/client/game.cpp
msgid "Change Password"
msgstr "비밀번호 변경"
@@ -1182,6 +1310,11 @@ msgid "Cinematic mode enabled"
msgstr "시네마틱 모드 활성화"
#: src/client/game.cpp
+#, fuzzy
+msgid "Client disconnected"
+msgstr "í´ë¼ì´ì–¸íЏ 모딩"
+
+#: src/client/game.cpp
msgid "Client side scripting is disabled"
msgstr "í´ë¼ì´ì–¸íЏ 스í¬ë¦½íŠ¸ê°€ 비활성화ë¨"
@@ -1190,6 +1323,10 @@ msgid "Connecting to server..."
msgstr "서버 연결중..."
#: src/client/game.cpp
+msgid "Connection failed for unknown reason"
+msgstr ""
+
+#: src/client/game.cpp
msgid "Continue"
msgstr "계ì†"
@@ -1227,6 +1364,11 @@ msgstr ""
"-%s: 채팅\n"
#: src/client/game.cpp
+#, c-format
+msgid "Couldn't resolve address: %s"
+msgstr ""
+
+#: src/client/game.cpp
msgid "Creating client..."
msgstr "í´ë¼ì´ì–¸íЏ 만드는 중..."
@@ -1355,6 +1497,11 @@ msgid "Minimap currently disabled by game or mod"
msgstr "게임 ë˜ëŠ” ëª¨ë“œì— ì˜í•´ 현재 미니맵 비활성화"
#: src/client/game.cpp
+#, fuzzy
+msgid "Multiplayer"
+msgstr "싱글 플레ì´ì–´"
+
+#: src/client/game.cpp
msgid "Noclip mode disabled"
msgstr "Noclip 모드 비활성화"
@@ -1428,6 +1575,21 @@ msgstr "ìŒì†Œê±° í•´ì œ"
#: src/client/game.cpp
#, c-format
+msgid "The server is probably running a different version of %s."
+msgstr ""
+
+#: src/client/game.cpp
+#, c-format
+msgid "Unable to connect to %s because IPv6 is disabled"
+msgstr ""
+
+#: src/client/game.cpp
+#, c-format
+msgid "Unable to listen on %s because IPv6 is disabled"
+msgstr ""
+
+#: src/client/game.cpp
+#, c-format
msgid "Viewing range changed to %d"
msgstr "시야 범위 %d로 바꿈"
@@ -1496,10 +1658,6 @@ msgid "Caps Lock"
msgstr "캡스ë½"
#: src/client/keycode.cpp
-msgid "Clear"
-msgstr "지우기"
-
-#: src/client/keycode.cpp
msgid "Control"
msgstr "컨트롤"
@@ -1765,6 +1923,15 @@ msgstr "표면 ëª¨ë“œì˜ ë¯¸ë‹ˆë§µ, 1ë°° 확대"
msgid "Minimap in texture mode"
msgstr "최소 í…스처 í¬ê¸°"
+#: src/gui/guiChatConsole.cpp
+#, fuzzy
+msgid "Failed to open webpage"
+msgstr "$1ì„ ë‹¤ìš´ë¡œë“œí•˜ëŠ” ë°ì— 실패했습니다"
+
+#: src/gui/guiChatConsole.cpp
+msgid "Opening webpage"
+msgstr ""
+
#: src/gui/guiConfirmRegistration.cpp src/gui/guiPasswordChange.cpp
msgid "Passwords do not match!"
msgstr "비밀번호가 맞지 않습니다!"
@@ -1792,7 +1959,8 @@ msgid "Proceed"
msgstr "계ì†í•˜ê¸°"
#: src/gui/guiKeyChangeMenu.cpp
-msgid "\"Special\" = climb down"
+#, fuzzy
+msgid "\"Aux1\" = climb down"
msgstr "\"특별함\" = 아래로 타고 내려가기"
#: src/gui/guiKeyChangeMenu.cpp
@@ -1804,10 +1972,18 @@ msgid "Automatic jumping"
msgstr "ìžë™ ì í”„"
#: src/gui/guiKeyChangeMenu.cpp
+msgid "Aux1"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
msgid "Backward"
msgstr "뒤로"
#: src/gui/guiKeyChangeMenu.cpp
+msgid "Block bounds"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
msgid "Change camera"
msgstr "ì¹´ë©”ë¼ ë³€ê²½"
@@ -1897,10 +2073,6 @@ msgid "Sneak"
msgstr "살금살금"
#: src/gui/guiKeyChangeMenu.cpp
-msgid "Special"
-msgstr "특별함"
-
-#: src/gui/guiKeyChangeMenu.cpp
msgid "Toggle HUD"
msgstr "HUD 토글"
@@ -1961,7 +2133,8 @@ msgid "Muted"
msgstr "ìŒì†Œê±°"
#: src/gui/guiVolumeChange.cpp
-msgid "Sound Volume: "
+#, fuzzy, c-format
+msgid "Sound Volume: %d%%"
msgstr "볼륨 조절: "
#. ~ Imperative, as in "Enter/type in text".
@@ -1986,9 +2159,10 @@ msgstr ""
"비활성화하면, ê°€ìƒ ì¡°ì´ìŠ¤í‹±ì´ ì²«ë²ˆì§¸ 터치 ìœ„ì¹˜ì˜ ì¤‘ì•™ì— ìœ„ì¹˜í•©ë‹ˆë‹¤."
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
-"(Android) Use virtual joystick to trigger \"aux\" button.\n"
-"If enabled, virtual joystick will also tap \"aux\" button when out of main "
+"(Android) Use virtual joystick to trigger \"Aux1\" button.\n"
+"If enabled, virtual joystick will also tap \"Aux1\" button when out of main "
"circle."
msgstr ""
"(Android) ê°€ìƒ ì¡°ì´ìŠ¤í‹±ì„ ì‚¬ìš©í•˜ì—¬ \"aux\"ë²„íŠ¼ì„ íŠ¸ë¦¬ê±°í•©ë‹ˆë‹¤.\n"
@@ -2212,6 +2386,10 @@ msgstr ""
"í™”ë©´ì— ë§žê²Œ dpi êµ¬ì„±ì„ ì¡°ì •í•©ë‹ˆë‹¤ (X11 ë¯¸ì§€ì› / Android ë§Œ 해당). 4k 화면 ìš©."
#: src/settings_translation_file.cpp
+msgid "Adjust the detected display density, used for scaling UI elements."
+msgstr ""
+
+#: src/settings_translation_file.cpp
#, c-format
msgid ""
"Adjusts the density of the floatland layer.\n"
@@ -2344,6 +2522,16 @@ msgid "Autoscaling mode"
msgstr "ìžë™ 스케ì¼ë§ 모드"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Aux1 key"
+msgstr "ì í”„ 키"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Aux1 key for climbing/descending"
+msgstr "오르기/내리기 ì— ì‚¬ìš©ë˜ëŠ” 특수키"
+
+#: src/settings_translation_file.cpp
msgid "Backward key"
msgstr "뒤로 ì´ë™í•˜ëŠ” 키"
@@ -2388,10 +2576,6 @@ msgid "Biome noise"
msgstr "Biome ë…¸ì´ì¦ˆ"
#: src/settings_translation_file.cpp
-msgid "Bits per pixel (aka color depth) in fullscreen mode."
-msgstr "ì „ì²´ 화면 모드ì—서 (ì¼ëª… 색 ë†ë„) 픽셀 당 비트."
-
-#: src/settings_translation_file.cpp
msgid "Block send optimize distance"
msgstr "ë¸”ë¡ ì „ì†¡ 최ì í™” 거리"
@@ -2497,6 +2681,16 @@ msgstr ""
"0.0ì€ ìµœì†Œ 조명 수준ì´ê³  1.0ì€ ìµœëŒ€ 조명 수준입니다."
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Chat command time message threshold"
+msgstr "채팅 메세지 강제퇴장 임계값"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Chat commands"
+msgstr "채팅 명ë ì–´"
+
+#: src/settings_translation_file.cpp
msgid "Chat font size"
msgstr "채팅 ê¸€ìž í¬ê¸°"
@@ -2529,8 +2723,9 @@ msgid "Chat toggle key"
msgstr "채팅 스위치"
#: src/settings_translation_file.cpp
-msgid "Chatcommands"
-msgstr "채팅 명ë ì–´"
+#, fuzzy
+msgid "Chat weblinks"
+msgstr "채팅 ë³´ì´ê¸°"
#: src/settings_translation_file.cpp
msgid "Chunk size"
@@ -2549,6 +2744,12 @@ msgid "Clean transparent textures"
msgstr "깨ë—하고 투명한 í…스처"
#: src/settings_translation_file.cpp
+msgid ""
+"Clickable weblinks (middle-click or Ctrl+left-click) enabled in chat console "
+"output."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Client"
msgstr "í´ë¼ì´ì–¸íЏ"
@@ -2593,6 +2794,11 @@ msgid "Colored fog"
msgstr "색깔있는 안개"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Colored shadows"
+msgstr "색깔있는 안개"
+
+#: src/settings_translation_file.cpp
msgid ""
"Comma-separated list of flags to hide in the content repository.\n"
"\"nonfree\" can be used to hide packages which do not qualify as 'free "
@@ -2632,6 +2838,22 @@ msgid "Command key"
msgstr "명령 키"
#: src/settings_translation_file.cpp
+msgid ""
+"Compression level to use when saving mapblocks to disk.\n"
+"-1 - use default compression level\n"
+"0 - least compression, fastest\n"
+"9 - best compression, slowest"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Compression level to use when sending mapblocks to the client.\n"
+"-1 - use default compression level\n"
+"0 - least compression, fastest\n"
+"9 - best compression, slowest"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Connect glass"
msgstr "유리를 연결"
@@ -2731,7 +2953,7 @@ msgstr "ì‹­ìžì„  투명ë„"
#, fuzzy
msgid ""
"Crosshair alpha (opaqueness, between 0 and 255).\n"
-"Also controls the object crosshair color"
+"This also applies to the object crosshair."
msgstr "ì‹­ìžì„  íˆ¬ëª…ë„ (불투명 함, 0ê³¼ 255 사ì´)."
#: src/settings_translation_file.cpp
@@ -2810,11 +3032,10 @@ msgstr "기본 ìŠ¤íƒ í¬ê¸°"
#: src/settings_translation_file.cpp
msgid ""
-"Default timeout for cURL, stated in milliseconds.\n"
-"Only has an effect if compiled with cURL."
+"Define shadow filtering quality.\n"
+"This simulates the soft shadows effect by applying a PCF or Poisson disk\n"
+"but also uses more resources."
msgstr ""
-"cURLì— ëŒ€í•œ 기본 제한 시간 (밀리 ì´ˆ 단위).\n"
-"cURL로 ì»´íŒŒì¼ ëœ ê²½ìš°ì—ë§Œ 효과가 있습니다."
#: src/settings_translation_file.cpp
msgid "Defines areas where trees have apples."
@@ -2932,6 +3153,10 @@ msgid "Disallow empty passwords"
msgstr "비밀번호 없으면 불가"
#: src/settings_translation_file.cpp
+msgid "Display Density Scaling Factor"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Domain name of server, to be displayed in the serverlist."
msgstr "ë„ë©”ì¸ ì„œë²„ì˜ ì´ë¦„ì€ ì„œë²„ë¦¬ìŠ¤íŠ¸ì— í‘œì‹œ ë©ë‹ˆë‹¤."
@@ -2976,6 +3201,19 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Enable Poisson disk filtering.\n"
+"On true uses Poisson disk to make \"soft shadows\". Otherwise uses PCF "
+"filtering."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable colored shadows.\n"
+"On true translucent nodes cast colored shadows. This is expensive."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Enable console window"
msgstr ""
@@ -3097,6 +3335,12 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Enables tradeoffs that reduce CPU load or increase rendering performance\n"
+"at the expense of minor visual glitches that do not impact game playability."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Engine profiling data print interval"
msgstr "엔진 프로 파ì¼ë§ ë°ì´í„° 출력 간격"
@@ -3136,18 +3380,6 @@ msgid "Fallback font path"
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 "빠른 키"
@@ -3164,8 +3396,9 @@ msgid "Fast movement"
msgstr "빠른 ì´ë™"
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
-"Fast movement (via the \"special\" key).\n"
+"Fast movement (via the \"Aux1\" key).\n"
"This requires the \"fast\" privilege on the server."
msgstr ""
"빠른 ì´ë™ ( \"특수\"키 사용).\n"
@@ -3203,9 +3436,9 @@ 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."
+"which PNG optimizers usually discard, often resulting in dark or\n"
+"light edges to transparent textures. Apply a filter to clean that up\n"
+"at texture load time. This is automatically enabled if mipmapping is enabled."
msgstr ""
#: src/settings_translation_file.cpp
@@ -3297,15 +3530,15 @@ msgid "Font size"
msgstr "글꼴 í¬ê¸°"
#: src/settings_translation_file.cpp
-msgid "Font size of the default font in point (pt)."
+msgid "Font size divisible by"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Font size of the fallback font in point (pt)."
+msgid "Font size of the default font where 1 unit = 1 pixel at 96 DPI"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Font size of the monospace font in point (pt)."
+msgid "Font size of the monospace font where 1 unit = 1 pixel at 96 DPI"
msgstr ""
#: src/settings_translation_file.cpp
@@ -3316,6 +3549,17 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"For pixel-style fonts that do not scale well, this ensures that font sizes "
+"used\n"
+"with this font will always be divisible by this value, in pixels. For "
+"instance,\n"
+"a pixel font 16 pixels tall should have this set to 16, so it will only ever "
+"be\n"
+"sized 16, 32, 48, etc., so a mod requesting a size of 25 will get 32."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Format of player chat messages. The following strings are valid "
"placeholders:\n"
"@name, @message, @timestamp (optional)"
@@ -3374,10 +3618,6 @@ msgid "Fraction of the visible distance at which fog starts to be rendered"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "FreeType fonts"
-msgstr "Freetype 글꼴"
-
-#: src/settings_translation_file.cpp
msgid ""
"From how far blocks are generated for clients, stated in mapblocks (16 "
"nodes)."
@@ -3402,10 +3642,6 @@ msgid "Full screen"
msgstr "전체 화면"
#: src/settings_translation_file.cpp
-msgid "Full screen BPP"
-msgstr "전체 화면 BPP"
-
-#: src/settings_translation_file.cpp
msgid "Fullscreen mode."
msgstr "전체 화면 모드."
@@ -3429,7 +3665,7 @@ msgstr "글로벌 콜백"
msgid ""
"Global map generation attributes.\n"
"In Mapgen v6 the 'decorations' flag controls all decorations except trees\n"
-"and junglegrass, in all other mapgens this flag controls all decorations."
+"and jungle grass, in all other mapgens this flag controls all decorations."
msgstr ""
#: src/settings_translation_file.cpp
@@ -3498,7 +3734,9 @@ msgid "Heat noise"
msgstr "용암 ìž¡ìŒ"
#: src/settings_translation_file.cpp
-msgid "Height component of the initial window size."
+#, fuzzy
+msgid ""
+"Height component of the initial window size. Ignored in fullscreen mode."
msgstr "초기 ì°½ í¬ê¸°ì˜ ë†’ì´ êµ¬ì„± 요소입니다."
#: src/settings_translation_file.cpp
@@ -3510,10 +3748,6 @@ msgid "Height select noise"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "High-precision FPU"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Hill steepness"
msgstr ""
@@ -3744,8 +3978,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"If disabled, \"special\" key is used to fly fast if both fly and fast mode "
-"are\n"
+"If disabled, \"Aux1\" key is used to fly fast if both fly and fast mode are\n"
"enabled."
msgstr ""
@@ -3766,9 +3999,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
-"If enabled, \"special\" key instead of \"sneak\" key is used for climbing "
-"down and\n"
+"If enabled, \"Aux1\" key instead of \"Sneak\" key is used for climbing down "
+"and\n"
"descending."
msgstr ""
"활성화시, \"sneak\"키 대신 \"특수\"키가 ë‚´ë ¤ê°€ëŠ”ë° \n"
@@ -3818,6 +4052,12 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"If the execution of a chat command takes longer than this specified time in\n"
+"seconds, add the time information to the chat command message"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"If the file size of debug.txt exceeds the number of megabytes specified in\n"
"this setting when it is opened, the file is moved to debug.txt.1,\n"
"deleting an older debug.txt.1 if it exists.\n"
@@ -3863,7 +4103,7 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Instrument chatcommands on registration."
+msgid "Instrument chat commands on registration."
msgstr ""
#: src/settings_translation_file.cpp
@@ -3947,7 +4187,7 @@ msgid "Joystick button repetition interval"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Joystick deadzone"
+msgid "Joystick dead zone"
msgstr ""
#: src/settings_translation_file.cpp
@@ -4929,10 +5169,6 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Makes DirectX work with LuaJIT. Disable if it causes troubles."
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Makes all liquids opaque"
msgstr "모든 액체를 불투명하게 만들기"
@@ -5004,6 +5240,10 @@ msgid "Map save interval"
msgstr "맵 저장 간격"
#: src/settings_translation_file.cpp
+msgid "Map shadows update frames"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Mapblock limit"
msgstr ""
@@ -5113,6 +5353,10 @@ msgid "Maximum FPS when the window is not focused, or when the game is paused."
msgstr "ê²Œìž„ì´ ì¼ì‹œì •ì§€ë ë•Œì˜ 최대 FPS."
#: src/settings_translation_file.cpp
+msgid "Maximum distance to render shadows."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Maximum forceloaded blocks"
msgstr "최대 강제 로딩 블럭"
@@ -5220,12 +5464,21 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Maximum time in ms a file download (e.g. a mod download) may take."
+#, fuzzy
+msgid ""
+"Maximum time a file download (e.g. a mod download) may take, stated in "
+"milliseconds."
msgstr ""
"ms ì—서 파ì¼ì„ 다운로드하면 (예 : 모드 다운로드) 최대 ì‹œê°„ì´ ê±¸ë¦´ 수 있습니"
"다."
#: src/settings_translation_file.cpp
+msgid ""
+"Maximum time an interactive request (e.g. server list fetch) may take, "
+"stated in milliseconds."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Maximum users"
msgstr "최대 사용ìž"
@@ -5286,7 +5539,7 @@ msgid "Mod channels"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Modifies the size of the hudbar elements."
+msgid "Modifies the size of the HUD elements."
msgstr ""
#: src/settings_translation_file.cpp
@@ -5298,6 +5551,11 @@ msgid "Monospace font size"
msgstr "ê³ ì • í­ ê¸€ê¼´ í¬ê¸°"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Monospace font size divisible by"
+msgstr "ê³ ì • í­ ê¸€ê¼´ í¬ê¸°"
+
+#: src/settings_translation_file.cpp
msgid "Mountain height noise"
msgstr ""
@@ -5423,7 +5681,7 @@ 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"
+"This is a trade-off between SQLite transaction overhead and\n"
"memory consumption (4096=100MB, as a rule of thumb)."
msgstr ""
@@ -5442,21 +5700,18 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Opaqueness (alpha) of the shadow behind the fallback font, between 0 and 255."
-msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid ""
"Open the pause menu when the window's focus is lost. Does not pause if a "
"formspec is\n"
"open."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Optional override for chat weblink color."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid ""
-"Path of the fallback font.\n"
-"If “freetype†setting is enabled: Must be a TrueType font.\n"
-"If “freetype†setting is disabled: Must be a bitmap or XML vectors font.\n"
+"Path of the fallback font. Must be a TrueType font.\n"
"This font will be used for certain languages or if the default font is "
"unavailable."
msgstr ""
@@ -5480,17 +5735,13 @@ msgstr "í…스처 디렉터리 경로입니다. 모든 í…스처는 여기ì—서
#: src/settings_translation_file.cpp
msgid ""
-"Path to the default font.\n"
-"If “freetype†setting is enabled: Must be a TrueType font.\n"
-"If “freetype†setting is disabled: Must be a bitmap or XML vectors font.\n"
+"Path to the default font. Must be a TrueType font.\n"
"The fallback font will be used if the font cannot be loaded."
msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Path to the monospace font.\n"
-"If “freetype†setting is enabled: Must be a TrueType font.\n"
-"If “freetype†setting is disabled: Must be a bitmap or XML vectors font.\n"
+"Path to the monospace font. Must be a TrueType font.\n"
"This font is used for e.g. the console and profiler screen."
msgstr ""
@@ -5549,6 +5800,11 @@ msgid "Player versus player"
msgstr "PVP"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Poisson filtering"
+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."
@@ -5597,9 +5853,9 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"Prometheus listener address.\n"
-"If minetest is compiled with ENABLE_PROMETHEUS option enabled,\n"
+"If Minetest is compiled with ENABLE_PROMETHEUS option enabled,\n"
"enable metrics listener for Prometheus on that address.\n"
-"Metrics can be fetch on http://127.0.0.1:30000/metrics"
+"Metrics can be fetched on http://127.0.0.1:30000/metrics"
msgstr ""
#: src/settings_translation_file.cpp
@@ -5914,6 +6170,35 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Set the shadow strength.\n"
+"Lower value means lighter shadows, higher value means darker shadows."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set the soft shadow radius size.\n"
+"Lower values mean sharper shadows, bigger values mean softer shadows.\n"
+"Minimum value: 1.0; maximum value: 10.0"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set the tilt of Sun/Moon orbit in degrees.\n"
+"Value of 0 means no tilt / vertical orbit.\n"
+"Minimum value: 0.0; maximum value: 60.0"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid ""
+"Set to true to enable Shadow Mapping.\n"
+"Requires shaders to be enabled."
+msgstr ""
+"True로 설정하면 í”들리는 나뭇잎 효과가 ì ìš©ë©ë‹ˆë‹¤.\n"
+"ì‰ì´ë”를 활성화 해야 합니다."
+
+#: src/settings_translation_file.cpp
+msgid ""
"Set to true to enable waving leaves.\n"
"Requires shaders to be enabled."
msgstr ""
@@ -5937,6 +6222,13 @@ msgstr ""
"ì‰ì´ë”를 활성화 해야 합니다."
#: src/settings_translation_file.cpp
+msgid ""
+"Sets shadow texture quality to 32 bits.\n"
+"On false, 16 bits texture will be used.\n"
+"This can cause much more artifacts in the shadow."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Shader path"
msgstr "ì‰ì´ë” 경로"
@@ -5953,16 +6245,32 @@ msgstr ""
"ìž‘ë™í•©ë‹ˆë‹¤."
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Shadow filter quality"
+msgstr "스í¬ë¦°ìƒ· 품질"
+
+#: src/settings_translation_file.cpp
+msgid "Shadow map max distance in nodes to render shadows"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Shadow map texture in 32 bits"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Shadow map texture size"
+msgstr "최소 í…스처 í¬ê¸°"
+
+#: src/settings_translation_file.cpp
msgid ""
"Shadow offset (in pixels) of the default font. If 0, then shadow will not be "
"drawn."
msgstr "글꼴 ê·¸ë¦¼ìž ì˜¤í”„ì…‹, 만약 0 ì´ë©´ 그림ìžëŠ” 나타나지 ì•Šì„ ê²ƒìž…ë‹ˆë‹¤."
#: src/settings_translation_file.cpp
-msgid ""
-"Shadow offset (in pixels) of the fallback font. If 0, then shadow will not "
-"be drawn."
-msgstr "글꼴 ê·¸ë¦¼ìž ì˜¤í”„ì…‹, 만약 0 ì´ë©´ 그림ìžëŠ” 나타나지 ì•Šì„ ê²ƒìž…ë‹ˆë‹¤."
+msgid "Shadow strength"
+msgstr ""
#: src/settings_translation_file.cpp
msgid "Shape of the minimap. Enabled = round, disabled = square."
@@ -5986,7 +6294,7 @@ msgstr ""
"설정 ì ìš© 후 ìž¬ì‹œìž‘ì´ í•„ìš”í•©ë‹ˆë‹¤."
#: src/settings_translation_file.cpp
-msgid "Show nametag backgrounds by default"
+msgid "Show name tag backgrounds by default"
msgstr ""
#: src/settings_translation_file.cpp
@@ -6011,6 +6319,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Sky Body Orbit Tilt"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Slice w"
msgstr ""
@@ -6070,16 +6382,13 @@ msgid "Sneaking speed, in nodes per second."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Sound"
-msgstr "사운드"
-
-#: src/settings_translation_file.cpp
-msgid "Special key"
-msgstr "특수 키"
+#, fuzzy
+msgid "Soft shadow radius"
+msgstr "글꼴 ê·¸ë¦¼ìž íˆ¬ëª…ë„"
#: src/settings_translation_file.cpp
-msgid "Special key for climbing/descending"
-msgstr "오르기/내리기 ì— ì‚¬ìš©ë˜ëŠ” 특수키"
+msgid "Sound"
+msgstr "사운드"
#: src/settings_translation_file.cpp
msgid ""
@@ -6098,6 +6407,14 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Spread a complete update of shadow map over given amount of frames.\n"
+"Higher values might make shadows laggy, lower values\n"
+"will consume more resources.\n"
+"Minimum value: 1; maximum value: 16"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Spread of light curve boost range.\n"
"Controls the width of the range to be boosted.\n"
"Standard deviation of the light curve boost Gaussian."
@@ -6204,6 +6521,13 @@ msgstr "í…스처 경로"
#: src/settings_translation_file.cpp
msgid ""
+"Texture size to render the shadow map on.\n"
+"This must be a power of two.\n"
+"Bigger numbers create better shadows but it is also more expensive."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Textures on a node may be aligned either to the node or to the world.\n"
"The former mode suits better things like machines, furniture, etc., while\n"
"the latter makes stairs and microblocks fit surroundings better.\n"
@@ -6217,7 +6541,7 @@ msgid "The URL for the content repository"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "The deadzone of the joystick"
+msgid "The dead zone of the joystick"
msgstr ""
#: src/settings_translation_file.cpp
@@ -6278,7 +6602,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"The rendering back-end for Irrlicht.\n"
+"The rendering back-end.\n"
"A restart is required after changing this.\n"
"Note: On Android, stick with OGLES1 if unsure! App may fail to start "
"otherwise.\n"
@@ -6289,7 +6613,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"The sensitivity of the joystick axes for moving the\n"
-"ingame view frustum around."
+"in-game view frustum around."
msgstr ""
#: src/settings_translation_file.cpp
@@ -6389,6 +6713,10 @@ msgid "Touch screen threshold"
msgstr "터치임계값 (픽셀)"
#: src/settings_translation_file.cpp
+msgid "Tradeoffs for performance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Trees noise"
msgstr ""
@@ -6461,7 +6789,7 @@ msgstr "ì´ì¤‘ 선형 í•„í„°ë§ì€ ì§ˆê° ìŠ¤ì¼€ì¼ë§ì„ í•  때 사용 합니ë
#: src/settings_translation_file.cpp
msgid ""
-"Use mip mapping to scale textures. May slightly increase performance,\n"
+"Use mipmapping to scale textures. May slightly increase performance,\n"
"especially when using a high resolution texture pack.\n"
"Gamma correct downscaling is not supported."
msgstr ""
@@ -6574,7 +6902,7 @@ msgid "Viewing range"
msgstr "시야 범위"
#: src/settings_translation_file.cpp
-msgid "Virtual joystick triggers aux button"
+msgid "Virtual joystick triggers Aux1 button"
msgstr ""
#: src/settings_translation_file.cpp
@@ -6647,6 +6975,11 @@ msgid "Waving plants"
msgstr "í”들리는 ì‹ë¬¼ 효과"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Weblink color"
+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"
@@ -6666,14 +6999,14 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
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.\n"
+"memory. Powers of 2 are recommended. This setting is ONLY applied if\n"
+"bilinear/trilinear/anisotropic filtering is enabled.\n"
"This is also used as the base node texture size for world-aligned\n"
"texture autoscaling."
msgstr ""
@@ -6690,14 +7023,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Whether FreeType fonts are used, requires FreeType support to be compiled "
-"in.\n"
-"If disabled, bitmap and XML vectors fonts are used instead."
-msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid ""
-"Whether nametag backgrounds should be shown by default.\n"
+"Whether name tag backgrounds should be shown by default.\n"
"Mods may still set a background."
msgstr ""
@@ -6739,7 +7065,8 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Width component of the initial window size."
+#, fuzzy
+msgid "Width component of the initial window size. Ignored in fullscreen mode."
msgstr "í­ì€ 초기 ì°½ í¬ê¸°ë¡œ 구성ë˜ì–´ 있습니다."
#: src/settings_translation_file.cpp
@@ -6828,34 +7155,22 @@ msgid "Y-level of seabed."
msgstr ""
#: src/settings_translation_file.cpp
-msgid ""
-"ZLib compression level to use when saving mapblocks to disk.\n"
-"-1 - Zlib's default compression level\n"
-"0 - no compresson, fastest\n"
-"9 - best compression, slowest\n"
-"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)"
-msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid ""
-"ZLib compression level to use when sending mapblocks to the client.\n"
-"-1 - Zlib's default compression level\n"
-"0 - no compresson, fastest\n"
-"9 - best compression, slowest\n"
-"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)"
+msgid "cURL file download timeout"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "cURL file download timeout"
+msgid "cURL interactive timeout"
msgstr ""
#: src/settings_translation_file.cpp
msgid "cURL parallel limit"
msgstr ""
-#: src/settings_translation_file.cpp
-msgid "cURL timeout"
-msgstr ""
+#~ msgid "- Creative Mode: "
+#~ msgstr "- í¬ë¦¬ì—ì´í‹°ë¸Œ 모드: "
+
+#~ msgid "- Damage: "
+#~ msgstr "- ë°ë¯¸ì§€: "
#~ msgid ""
#~ "0 = parallax occlusion with slope information (faster).\n"
@@ -6864,12 +7179,18 @@ msgstr ""
#~ "0 = 경사 정보가 존재 (빠름).\n"
#~ "1 = 릴리프 매핑 (ë” ëŠë¦¬ê³  정확함)."
+#~ msgid "Address / Port"
+#~ msgstr "주소/í¬íЏ"
+
#~ msgid "Are you sure to reset your singleplayer world?"
#~ msgstr "싱글 플레ì´ì–´ 월드를 리셋하겠습니까?"
#~ msgid "Back"
#~ msgstr "뒤로"
+#~ msgid "Bits per pixel (aka color depth) in fullscreen mode."
+#~ msgstr "ì „ì²´ 화면 모드ì—서 (ì¼ëª… 색 ë†ë„) 픽셀 당 비트."
+
#~ msgid "Bump Mapping"
#~ msgstr "범프 매핑"
@@ -6898,9 +7219,22 @@ msgstr ""
#~ msgid "Controls width of tunnels, a smaller value creates wider tunnels."
#~ msgstr "í„°ë„ ë„ˆë¹„ë¥¼ ì¡°ì ˆ, ìž‘ì€ ìˆ˜ì¹˜ëŠ” ë„“ì€ í„°ë„ì„ ë§Œë“­ë‹ˆë‹¤."
+#~ msgid "Credits"
+#~ msgstr "만든ì´"
+
#~ msgid "Crosshair color (R,G,B)."
#~ msgstr "ì‹­ìžì„  색 (빨, ì´ˆ, 파)."
+#~ msgid "Damage enabled"
+#~ msgstr "ë°ë¯¸ì§€ 활성화"
+
+#~ msgid ""
+#~ "Default timeout for cURL, stated in milliseconds.\n"
+#~ "Only has an effect if compiled with cURL."
+#~ msgstr ""
+#~ "cURLì— ëŒ€í•œ 기본 제한 시간 (밀리 ì´ˆ 단위).\n"
+#~ "cURL로 ì»´íŒŒì¼ ëœ ê²½ìš°ì—ë§Œ 효과가 있습니다."
+
#~ msgid ""
#~ "Defines sampling step of texture.\n"
#~ "A higher value results in smoother normal maps."
@@ -6942,9 +7276,24 @@ msgstr ""
#~ msgid "FPS in pause menu"
#~ msgstr "ì¼ì‹œì •ì§€ 메뉴ì—서 FPS"
+#~ msgid "Fallback font shadow"
+#~ msgstr "대체 글꼴 그림ìž"
+
+#~ msgid "Fallback font shadow alpha"
+#~ msgstr "대체 글꼴 ê·¸ë¦¼ìž íˆ¬ëª…ë„"
+
+#~ msgid "Fallback font size"
+#~ msgstr "대체 글꼴 í¬ê¸°"
+
#~ msgid "Font shadow alpha (opaqueness, between 0 and 255)."
#~ msgstr "글꼴 ê·¸ë¦¼ìž íˆ¬ëª…ë„ (불투명 함, 0ê³¼ 255 사ì´)."
+#~ msgid "FreeType fonts"
+#~ msgstr "Freetype 글꼴"
+
+#~ msgid "Full screen BPP"
+#~ msgstr "전체 화면 BPP"
+
#~ msgid "Gamma"
#~ msgstr "ê°ë§ˆ"
@@ -6954,6 +7303,9 @@ msgstr ""
#~ msgid "Generate normalmaps"
#~ msgstr "Normalmaps ìƒì„±"
+#~ msgid "Install: file: \"$1\""
+#~ msgstr "모드 설치: 파ì¼: \"$1\""
+
#, fuzzy
#~ msgid "Lava depth"
#~ msgstr "í° ë™êµ´ 깊ì´"
@@ -6976,6 +7328,9 @@ msgstr ""
#~ msgid "Minimap in surface mode, Zoom x4"
#~ msgstr "표면 ëª¨ë“œì˜ ë¯¸ë‹ˆë§µ, 4ë°° 확대"
+#~ msgid "Name / Password"
+#~ msgstr "ì´ë¦„/비밀번호"
+
#~ msgid "Name/Password"
#~ msgstr "ì´ë¦„/비밀번호"
@@ -7028,6 +7383,9 @@ msgstr ""
#~ msgid "Path to save screenshots at."
#~ msgstr "스í¬ë¦°ìƒ· 저장 경로입니다."
+#~ msgid "PvP enabled"
+#~ msgstr "PvP 가능"
+
#~ msgid "Reset singleplayer world"
#~ msgstr "싱글 플레ì´ì–´ 월드 초기화"
@@ -7038,6 +7396,17 @@ msgstr ""
#~ msgid "Shadow limit"
#~ msgstr "ê·¸ë¦¼ìž ì œí•œ"
+#~ msgid ""
+#~ "Shadow offset (in pixels) of the fallback font. If 0, then shadow will "
+#~ "not be drawn."
+#~ msgstr "글꼴 ê·¸ë¦¼ìž ì˜¤í”„ì…‹, 만약 0 ì´ë©´ 그림ìžëŠ” 나타나지 ì•Šì„ ê²ƒìž…ë‹ˆë‹¤."
+
+#~ msgid "Special"
+#~ msgstr "특별함"
+
+#~ msgid "Special key"
+#~ msgstr "특수 키"
+
#~ msgid "Start Singleplayer"
#~ msgstr "싱글 플레ì´ì–´ 시작"
@@ -7047,6 +7416,9 @@ msgstr ""
#~ msgid "This font will be used for certain languages."
#~ msgstr "ì´ ê¸€ê¼´ì€ íŠ¹ì • ì–¸ì–´ì— ì‚¬ìš© ë©ë‹ˆë‹¤."
+#~ msgid "To enable shaders the OpenGL driver needs to be used."
+#~ msgstr "ì‰ì´ë”를 사용하려면 OpenGL 드ë¼ì´ë²„를 사용할 필요가 있습니다."
+
#~ msgid "Toggle Cinematic"
#~ msgstr "시네마틱 스위치"
@@ -7061,3 +7433,10 @@ msgstr ""
#~ msgid "Yes"
#~ msgstr "예"
+
+#, fuzzy
+#~ msgid "You died."
+#~ msgstr "사ë§í–ˆìŠµë‹ˆë‹¤"
+
+#~ msgid "needs_fallback_font"
+#~ msgstr "yes"
diff --git a/po/ky/minetest.po b/po/ky/minetest.po
index 91c6e11b8..ca0910781 100644
--- a/po/ky/minetest.po
+++ b/po/ky/minetest.po
@@ -2,7 +2,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Kyrgyz (Minetest)\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-02-23 19:03+0100\n"
+"POT-Creation-Date: 2022-01-25 23:19+0100\n"
"PO-Revision-Date: 2019-11-10 15:04+0000\n"
"Last-Translator: Krock <mk939@ymail.com>\n"
"Language-Team: Kyrgyz <https://hosted.weblate.org/projects/minetest/minetest/"
@@ -14,6 +14,47 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 3.10-dev\n"
+#: builtin/client/chatcommands.lua
+msgid "Clear the out chat queue"
+msgstr ""
+
+#: builtin/client/chatcommands.lua
+#, fuzzy
+msgid "Empty command."
+msgstr "Команда"
+
+#: builtin/client/chatcommands.lua
+#, fuzzy
+msgid "Exit to main menu"
+msgstr "Менюга чыгуу"
+
+#: builtin/client/chatcommands.lua
+#, fuzzy
+msgid "Invalid command: "
+msgstr "Команда"
+
+#: builtin/client/chatcommands.lua
+msgid "Issued command: "
+msgstr ""
+
+#: builtin/client/chatcommands.lua
+#, fuzzy
+msgid "List online players"
+msgstr "Бир кишилик"
+
+#: builtin/client/chatcommands.lua
+#, fuzzy
+msgid "Online players: "
+msgstr "Бир кишилик"
+
+#: builtin/client/chatcommands.lua
+msgid "The out chat queue is now empty."
+msgstr ""
+
+#: builtin/client/chatcommands.lua
+msgid "This command is disabled by server."
+msgstr ""
+
#: builtin/client/death_formspec.lua src/client/game.cpp
msgid "Respawn"
msgstr "Кайтадан жаралуу"
@@ -23,11 +64,42 @@ msgstr "Кайтадан жаралуу"
msgid "You died"
msgstr "Сиз өлдүңүз."
+#: builtin/common/chatcommands.lua
+#, fuzzy
+msgid "Available commands:"
+msgstr "Команда"
+
+#: builtin/common/chatcommands.lua
+#, fuzzy
+msgid "Available commands: "
+msgstr "Команда"
+
+#: builtin/common/chatcommands.lua
+msgid "Command not available: "
+msgstr ""
+
+#: builtin/common/chatcommands.lua
+msgid "Get help for commands"
+msgstr ""
+
+#: builtin/common/chatcommands.lua
+msgid ""
+"Use '.help <cmd>' to get more information, or '.help all' to list everything."
+msgstr ""
+
+#: builtin/common/chatcommands.lua
+msgid "[all | <cmd>]"
+msgstr ""
+
#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp
msgid "OK"
msgstr ""
#: builtin/fstk/ui.lua
+msgid "<none available>"
+msgstr ""
+
+#: builtin/fstk/ui.lua
msgid "An error occurred in a Lua script:"
msgstr ""
@@ -241,6 +313,10 @@ msgid "Install missing dependencies"
msgstr ""
#: builtin/mainmenu/dlg_contentstore.lua
+msgid "Install: Unsupported file type or broken archive"
+msgstr ""
+
+#: builtin/mainmenu/dlg_contentstore.lua
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Mods"
msgstr ""
@@ -542,7 +618,7 @@ msgstr ""
msgid "Browse"
msgstr ""
-#: builtin/mainmenu/dlg_settings_advanced.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_settings.lua
#, fuzzy
msgid "Disabled"
msgstr "Баарын өчүрүү"
@@ -569,7 +645,7 @@ msgid "Offset"
msgstr ""
#: builtin/mainmenu/dlg_settings_advanced.lua
-msgid "Persistance"
+msgid "Persistence"
msgstr ""
#: builtin/mainmenu/dlg_settings_advanced.lua
@@ -588,7 +664,7 @@ msgstr ""
msgid "Scale"
msgstr ""
-#: builtin/mainmenu/dlg_settings_advanced.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_online.lua
msgid "Search"
msgstr ""
@@ -685,14 +761,6 @@ msgid "Install Mod: Unable to find suitable folder name for modpack $1"
msgstr ""
#: builtin/mainmenu/pkgmgr.lua
-msgid "Install: Unsupported file type \"$1\" or broken archive"
-msgstr ""
-
-#: builtin/mainmenu/pkgmgr.lua
-msgid "Install: file: \"$1\""
-msgstr ""
-
-#: builtin/mainmenu/pkgmgr.lua
msgid "Unable to find a valid mod or modpack"
msgstr ""
@@ -728,6 +796,41 @@ msgstr ""
msgid "Try reenabling public serverlist and check your internet connection."
msgstr ""
+#: builtin/mainmenu/tab_about.lua
+msgid "About"
+msgstr ""
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Active Contributors"
+msgstr ""
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Active renderer:"
+msgstr ""
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Core Developers"
+msgstr ""
+
+#: builtin/mainmenu/tab_about.lua
+#, fuzzy
+msgid "Open User Data Directory"
+msgstr "Дүйнөнү тандаңыз:"
+
+#: builtin/mainmenu/tab_about.lua
+msgid ""
+"Opens the directory that contains user-provided worlds, games, mods,\n"
+"and texture packs in a file manager / explorer."
+msgstr ""
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Previous Contributors"
+msgstr ""
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Previous Core Developers"
+msgstr ""
+
#: builtin/mainmenu/tab_content.lua
msgid "Browse online content"
msgstr ""
@@ -770,37 +873,6 @@ msgstr ""
msgid "Use Texture Pack"
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
-#, fuzzy
-msgid "Open User Data Directory"
-msgstr "Дүйнөнү тандаңыз:"
-
-#: builtin/mainmenu/tab_credits.lua
-msgid ""
-"Opens the directory that contains user-provided worlds, games, mods,\n"
-"and texture packs in a file manager / explorer."
-msgstr ""
-
-#: builtin/mainmenu/tab_credits.lua
-msgid "Previous Contributors"
-msgstr ""
-
-#: builtin/mainmenu/tab_credits.lua
-msgid "Previous Core Developers"
-msgstr ""
-
#: builtin/mainmenu/tab_local.lua
msgid "Announce Server"
msgstr ""
@@ -830,7 +902,7 @@ msgstr ""
msgid "Install games from ContentDB"
msgstr ""
-#: builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
msgid "Name"
msgstr ""
@@ -842,7 +914,7 @@ msgstr "Жаңы"
msgid "No world created or selected!"
msgstr ""
-#: builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
#, fuzzy
msgid "Password"
msgstr "Жаңы ÑырÑөз"
@@ -852,7 +924,7 @@ msgstr "Жаңы ÑырÑөз"
msgid "Play Game"
msgstr "Оюнду баштоо/туташуу"
-#: builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
msgid "Port"
msgstr ""
@@ -876,9 +948,13 @@ msgstr "Оюн"
#: builtin/mainmenu/tab_online.lua
#, fuzzy
-msgid "Address / Port"
+msgid "Address"
msgstr "Дареги/порту"
+#: builtin/mainmenu/tab_online.lua src/client/keycode.cpp
+msgid "Clear"
+msgstr "Тазалоо"
+
#: builtin/mainmenu/tab_online.lua
msgid "Connect"
msgstr "Туташуу"
@@ -888,10 +964,11 @@ msgstr "Туташуу"
msgid "Creative mode"
msgstr "Жаратуу режими"
+#. ~ PvP = Player versus Player
#: builtin/mainmenu/tab_online.lua
#, fuzzy
-msgid "Damage enabled"
-msgstr "күйгүзүлгөн"
+msgid "Damage / PvP"
+msgstr "Убалды күйгүзүү"
#: builtin/mainmenu/tab_online.lua
#, fuzzy
@@ -900,28 +977,33 @@ msgstr "Тандалмалар:"
#: builtin/mainmenu/tab_online.lua
#, fuzzy
-msgid "Favorite"
+msgid "Favorites"
msgstr "Тандалмалар:"
#: builtin/mainmenu/tab_online.lua
+msgid "Incompatible Servers"
+msgstr ""
+
+#: builtin/mainmenu/tab_online.lua
#, fuzzy
msgid "Join Game"
msgstr "Оюн"
#: builtin/mainmenu/tab_online.lua
-#, fuzzy
-msgid "Name / Password"
-msgstr "Ðты/ÑырÑөзү"
+msgid "Ping"
+msgstr ""
#: builtin/mainmenu/tab_online.lua
-msgid "Ping"
+msgid "Public Servers"
msgstr ""
-#. ~ PvP = Player versus Player
#: builtin/mainmenu/tab_online.lua
-#, fuzzy
-msgid "PvP enabled"
-msgstr "күйгүзүлгөн"
+msgid "Refresh"
+msgstr ""
+
+#: builtin/mainmenu/tab_online.lua
+msgid "Server Description"
+msgstr ""
#: builtin/mainmenu/tab_settings.lua
msgid "2x"
@@ -968,12 +1050,32 @@ msgstr "БаÑкычтарды өзгөртүү"
msgid "Connected Glass"
msgstr "Туташуу"
+#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
+msgid "Dynamic shadows"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Dynamic shadows: "
+msgstr ""
+
#: builtin/mainmenu/tab_settings.lua
#, fuzzy
msgid "Fancy Leaves"
msgstr "Күңүрт Ñуу"
#: builtin/mainmenu/tab_settings.lua
+msgid "High"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Low"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Medium"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
#, fuzzy
msgid "Mipmap"
msgstr "Mip-текÑтуралоо"
@@ -1056,10 +1158,6 @@ msgstr "Тегиз жарык"
msgid "Texturing:"
msgstr ""
-#: builtin/mainmenu/tab_settings.lua
-msgid "To enable shaders the OpenGL driver needs to be used."
-msgstr ""
-
#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
#, fuzzy
msgid "Tone Mapping"
@@ -1075,6 +1173,14 @@ msgid "Trilinear Filter"
msgstr "ҮчÑызык чыпкалооÑу"
#: builtin/mainmenu/tab_settings.lua
+msgid "Ultra High"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Very Low"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
#, fuzzy
msgid "Waving Leaves"
msgstr "Кооз бактар"
@@ -1089,7 +1195,7 @@ msgstr "Кооз бактар"
msgid "Waving Plants"
msgstr "Кооз бактар"
-#: src/client/client.cpp
+#: src/client/client.cpp src/client/game.cpp
#, fuzzy
msgid "Connection timed out."
msgstr "Туташтыруу катаÑÑ‹ (убактыңыз өтүп кеттиби?)"
@@ -1121,7 +1227,8 @@ msgid "Connection error (timed out?)"
msgstr "Туташтыруу катаÑÑ‹ (убактыңыз өтүп кеттиби?)"
#: src/client/clientlauncher.cpp
-msgid "Could not find or load game \""
+#, fuzzy
+msgid "Could not find or load game: "
msgstr "Оюнду табуу же жүктөө мүмкүн ÑÐ¼ÐµÑ \""
#: src/client/clientlauncher.cpp
@@ -1152,18 +1259,6 @@ msgstr ""
msgid "Provided world path doesn't exist: "
msgstr ""
-#. ~ DO NOT TRANSLATE THIS LITERALLY!
-#. This is a special string. Put either "no" or "yes"
-#. into the translation field (literally).
-#. Choose "yes" if the language requires use of the fallback
-#. font, "no" otherwise.
-#. The fallback font is (normally) required for languages with
-#. non-Latin script, like Chinese.
-#. When in doubt, test your translation.
-#: src/client/fontengine.cpp
-msgid "needs_fallback_font"
-msgstr "yes"
-
#: src/client/game.cpp
msgid ""
"\n"
@@ -1178,16 +1273,6 @@ msgid "- Address: "
msgstr "Дареги/порту"
#: src/client/game.cpp
-#, fuzzy
-msgid "- Creative Mode: "
-msgstr "Жаратуу режими"
-
-#: src/client/game.cpp
-#, fuzzy
-msgid "- Damage: "
-msgstr "Убалды күйгүзүү"
-
-#: src/client/game.cpp
msgid "- Mode: "
msgstr ""
@@ -1210,6 +1295,15 @@ msgid "- Server Name: "
msgstr ""
#: src/client/game.cpp
+msgid "A serialization error occurred:"
+msgstr ""
+
+#: src/client/game.cpp
+#, c-format
+msgid "Access denied. Reason: %s"
+msgstr ""
+
+#: src/client/game.cpp
#, fuzzy
msgid "Automatic forward disabled"
msgstr "Ðлга"
@@ -1220,6 +1314,22 @@ msgid "Automatic forward enabled"
msgstr "Ðлга"
#: src/client/game.cpp
+msgid "Block bounds hidden"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Block bounds shown for all blocks"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Block bounds shown for current block"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Block bounds shown for nearby blocks"
+msgstr ""
+
+#: src/client/game.cpp
msgid "Camera update disabled"
msgstr ""
@@ -1229,6 +1339,10 @@ msgid "Camera update enabled"
msgstr "күйгүзүлгөн"
#: src/client/game.cpp
+msgid "Can't show block bounds (need 'basic_debug' privilege)"
+msgstr ""
+
+#: src/client/game.cpp
msgid "Change Password"
msgstr "СырÑөздү өзгөртүү"
@@ -1243,6 +1357,10 @@ msgid "Cinematic mode enabled"
msgstr "Жаратуу режими"
#: src/client/game.cpp
+msgid "Client disconnected"
+msgstr ""
+
+#: src/client/game.cpp
msgid "Client side scripting is disabled"
msgstr ""
@@ -1251,6 +1369,10 @@ msgid "Connecting to server..."
msgstr "Серверге туташтырылууда..."
#: src/client/game.cpp
+msgid "Connection failed for unknown reason"
+msgstr ""
+
+#: src/client/game.cpp
msgid "Continue"
msgstr "Улантуу"
@@ -1285,6 +1407,11 @@ msgstr ""
"- T: маек\n"
#: src/client/game.cpp
+#, c-format
+msgid "Couldn't resolve address: %s"
+msgstr ""
+
+#: src/client/game.cpp
msgid "Creating client..."
msgstr "Клиент жаратылууда..."
@@ -1411,6 +1538,11 @@ msgid "Minimap currently disabled by game or mod"
msgstr ""
#: src/client/game.cpp
+#, fuzzy
+msgid "Multiplayer"
+msgstr "Бир кишилик"
+
+#: src/client/game.cpp
msgid "Noclip mode disabled"
msgstr ""
@@ -1488,6 +1620,21 @@ msgstr "Үн көлөмү"
#: src/client/game.cpp
#, c-format
+msgid "The server is probably running a different version of %s."
+msgstr ""
+
+#: src/client/game.cpp
+#, c-format
+msgid "Unable to connect to %s because IPv6 is disabled"
+msgstr ""
+
+#: src/client/game.cpp
+#, c-format
+msgid "Unable to listen on %s because IPv6 is disabled"
+msgstr ""
+
+#: src/client/game.cpp
+#, c-format
msgid "Viewing range changed to %d"
msgstr ""
@@ -1558,10 +1705,6 @@ msgid "Caps Lock"
msgstr ""
#: src/client/keycode.cpp
-msgid "Clear"
-msgstr "Тазалоо"
-
-#: src/client/keycode.cpp
msgid "Control"
msgstr "Ctrl"
@@ -1830,6 +1973,15 @@ msgstr ""
msgid "Minimap in texture mode"
msgstr ""
+#: src/gui/guiChatConsole.cpp
+#, fuzzy
+msgid "Failed to open webpage"
+msgstr "Дүйнөнү инициалдаштыруу катаÑÑ‹"
+
+#: src/gui/guiChatConsole.cpp
+msgid "Opening webpage"
+msgstr ""
+
#: src/gui/guiConfirmRegistration.cpp src/gui/guiPasswordChange.cpp
msgid "Passwords do not match!"
msgstr "СырÑөздөр дал келген жок!"
@@ -1853,7 +2005,7 @@ msgid "Proceed"
msgstr "Улантуу"
#: src/gui/guiKeyChangeMenu.cpp
-msgid "\"Special\" = climb down"
+msgid "\"Aux1\" = climb down"
msgstr ""
#: src/gui/guiKeyChangeMenu.cpp
@@ -1866,10 +2018,18 @@ msgid "Automatic jumping"
msgstr ""
#: src/gui/guiKeyChangeMenu.cpp
+msgid "Aux1"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
msgid "Backward"
msgstr "Ðртка"
#: src/gui/guiKeyChangeMenu.cpp
+msgid "Block bounds"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
#, fuzzy
msgid "Change camera"
msgstr "БаÑкычтарды өзгөртүү"
@@ -1963,10 +2123,6 @@ msgid "Sneak"
msgstr "Уурданып баÑуу"
#: src/gui/guiKeyChangeMenu.cpp
-msgid "Special"
-msgstr ""
-
-#: src/gui/guiKeyChangeMenu.cpp
#, fuzzy
msgid "Toggle HUD"
msgstr "Учууга которуу"
@@ -2033,7 +2189,8 @@ msgid "Muted"
msgstr "баÑкычты баÑыңыз"
#: src/gui/guiVolumeChange.cpp
-msgid "Sound Volume: "
+#, fuzzy, c-format
+msgid "Sound Volume: %d%%"
msgstr "Үн көлөмү: "
#. ~ Imperative, as in "Enter/type in text".
@@ -2057,8 +2214,8 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"(Android) Use virtual joystick to trigger \"aux\" button.\n"
-"If enabled, virtual joystick will also tap \"aux\" button when out of main "
+"(Android) Use virtual joystick to trigger \"Aux1\" button.\n"
+"If enabled, virtual joystick will also tap \"Aux1\" button when out of main "
"circle."
msgstr ""
@@ -2242,6 +2399,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Adjust the detected display density, used for scaling UI elements."
+msgstr ""
+
+#: src/settings_translation_file.cpp
#, c-format
msgid ""
"Adjusts the density of the floatland layer.\n"
@@ -2357,6 +2518,15 @@ msgstr ""
#: src/settings_translation_file.cpp
#, fuzzy
+msgid "Aux1 key"
+msgstr "Секирүү"
+
+#: src/settings_translation_file.cpp
+msgid "Aux1 key for climbing/descending"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
msgid "Backward key"
msgstr "Ðртка"
@@ -2403,10 +2573,6 @@ msgid "Biome noise"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Bits per pixel (aka color depth) in fullscreen mode."
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Block send optimize distance"
msgstr ""
@@ -2506,6 +2672,15 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Chat command time message threshold"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Chat commands"
+msgstr "Команда"
+
+#: src/settings_translation_file.cpp
msgid "Chat font size"
msgstr ""
@@ -2541,9 +2716,8 @@ msgid "Chat toggle key"
msgstr "БаÑкычтарды өзгөртүү"
#: src/settings_translation_file.cpp
-#, fuzzy
-msgid "Chatcommands"
-msgstr "Команда"
+msgid "Chat weblinks"
+msgstr ""
#: src/settings_translation_file.cpp
msgid "Chunk size"
@@ -2564,6 +2738,12 @@ msgid "Clean transparent textures"
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Clickable weblinks (middle-click or Ctrl+left-click) enabled in chat console "
+"output."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Client"
msgstr ""
@@ -2610,6 +2790,10 @@ msgid "Colored fog"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Colored shadows"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid ""
"Comma-separated list of flags to hide in the content repository.\n"
"\"nonfree\" can be used to hide packages which do not qualify as 'free "
@@ -2638,6 +2822,22 @@ msgid "Command key"
msgstr "Команда"
#: src/settings_translation_file.cpp
+msgid ""
+"Compression level to use when saving mapblocks to disk.\n"
+"-1 - use default compression level\n"
+"0 - least compression, fastest\n"
+"9 - best compression, slowest"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Compression level to use when sending mapblocks to the client.\n"
+"-1 - use default compression level\n"
+"0 - least compression, fastest\n"
+"9 - best compression, slowest"
+msgstr ""
+
+#: src/settings_translation_file.cpp
#, fuzzy
msgid "Connect glass"
msgstr "Туташуу"
@@ -2736,7 +2936,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"Crosshair alpha (opaqueness, between 0 and 255).\n"
-"Also controls the object crosshair color"
+"This also applies to the object crosshair."
msgstr ""
#: src/settings_translation_file.cpp
@@ -2815,8 +3015,9 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Default timeout for cURL, stated in milliseconds.\n"
-"Only has an effect if compiled with cURL."
+"Define shadow filtering quality.\n"
+"This simulates the soft shadows effect by applying a PCF or Poisson disk\n"
+"but also uses more resources."
msgstr ""
#: src/settings_translation_file.cpp
@@ -2937,6 +3138,10 @@ msgid "Disallow empty passwords"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Display Density Scaling Factor"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Domain name of server, to be displayed in the serverlist."
msgstr ""
@@ -2981,6 +3186,19 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Enable Poisson disk filtering.\n"
+"On true uses Poisson disk to make \"soft shadows\". Otherwise uses PCF "
+"filtering."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable colored shadows.\n"
+"On true translucent nodes cast colored shadows. This is expensive."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Enable console window"
msgstr ""
@@ -3090,6 +3308,12 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Enables tradeoffs that reduce CPU load or increase rendering performance\n"
+"at the expense of minor visual glitches that do not impact game playability."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Engine profiling data print interval"
msgstr ""
@@ -3128,18 +3352,6 @@ msgid "Fallback font path"
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 ""
@@ -3157,7 +3369,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Fast movement (via the \"special\" key).\n"
+"Fast movement (via the \"Aux1\" key).\n"
"This requires the \"fast\" privilege on the server."
msgstr ""
@@ -3191,9 +3403,9 @@ 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."
+"which PNG optimizers usually discard, often resulting in dark or\n"
+"light edges to transparent textures. Apply a filter to clean that up\n"
+"at texture load time. This is automatically enabled if mipmapping is enabled."
msgstr ""
#: src/settings_translation_file.cpp
@@ -3286,15 +3498,15 @@ msgid "Font size"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Font size of the default font in point (pt)."
+msgid "Font size divisible by"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Font size of the fallback font in point (pt)."
+msgid "Font size of the default font where 1 unit = 1 pixel at 96 DPI"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Font size of the monospace font in point (pt)."
+msgid "Font size of the monospace font where 1 unit = 1 pixel at 96 DPI"
msgstr ""
#: src/settings_translation_file.cpp
@@ -3305,6 +3517,17 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"For pixel-style fonts that do not scale well, this ensures that font sizes "
+"used\n"
+"with this font will always be divisible by this value, in pixels. For "
+"instance,\n"
+"a pixel font 16 pixels tall should have this set to 16, so it will only ever "
+"be\n"
+"sized 16, 32, 48, etc., so a mod requesting a size of 25 will get 32."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Format of player chat messages. The following strings are valid "
"placeholders:\n"
"@name, @message, @timestamp (optional)"
@@ -3364,10 +3587,6 @@ msgid "Fraction of the visible distance at which fog starts to be rendered"
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)."
@@ -3392,10 +3611,6 @@ msgid "Full screen"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Full screen BPP"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Fullscreen mode."
msgstr ""
@@ -3419,7 +3634,7 @@ msgstr ""
msgid ""
"Global map generation attributes.\n"
"In Mapgen v6 the 'decorations' flag controls all decorations except trees\n"
-"and junglegrass, in all other mapgens this flag controls all decorations."
+"and jungle grass, in all other mapgens this flag controls all decorations."
msgstr ""
#: src/settings_translation_file.cpp
@@ -3488,7 +3703,8 @@ msgid "Heat noise"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Height component of the initial window size."
+msgid ""
+"Height component of the initial window size. Ignored in fullscreen mode."
msgstr ""
#: src/settings_translation_file.cpp
@@ -3501,10 +3717,6 @@ msgid "Height select noise"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "High-precision FPU"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Hill steepness"
msgstr ""
@@ -3735,8 +3947,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"If disabled, \"special\" key is used to fly fast if both fly and fast mode "
-"are\n"
+"If disabled, \"Aux1\" key is used to fly fast if both fly and fast mode are\n"
"enabled."
msgstr ""
@@ -3758,8 +3969,8 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"If enabled, \"special\" key instead of \"sneak\" key is used for climbing "
-"down and\n"
+"If enabled, \"Aux1\" key instead of \"Sneak\" key is used for climbing down "
+"and\n"
"descending."
msgstr ""
@@ -3805,6 +4016,12 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"If the execution of a chat command takes longer than this specified time in\n"
+"seconds, add the time information to the chat command message"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"If the file size of debug.txt exceeds the number of megabytes specified in\n"
"this setting when it is opened, the file is moved to debug.txt.1,\n"
"deleting an older debug.txt.1 if it exists.\n"
@@ -3852,7 +4069,7 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Instrument chatcommands on registration."
+msgid "Instrument chat commands on registration."
msgstr ""
#: src/settings_translation_file.cpp
@@ -3937,7 +4154,7 @@ msgid "Joystick button repetition interval"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Joystick deadzone"
+msgid "Joystick dead zone"
msgstr ""
#: src/settings_translation_file.cpp
@@ -4699,10 +4916,6 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Makes DirectX work with LuaJIT. Disable if it causes troubles."
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Makes all liquids opaque"
msgstr ""
@@ -4774,6 +4987,10 @@ msgid "Map save interval"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Map shadows update frames"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Mapblock limit"
msgstr ""
@@ -4882,6 +5099,10 @@ msgid "Maximum FPS when the window is not focused, or when the game is paused."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Maximum distance to render shadows."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Maximum forceloaded blocks"
msgstr ""
@@ -4987,7 +5208,15 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Maximum time in ms a file download (e.g. a mod download) may take."
+msgid ""
+"Maximum time a file download (e.g. a mod download) may take, stated in "
+"milliseconds."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum time an interactive request (e.g. server list fetch) may take, "
+"stated in milliseconds."
msgstr ""
#: src/settings_translation_file.cpp
@@ -5053,7 +5282,7 @@ msgid "Mod channels"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Modifies the size of the hudbar elements."
+msgid "Modifies the size of the HUD elements."
msgstr ""
#: src/settings_translation_file.cpp
@@ -5065,6 +5294,10 @@ msgid "Monospace font size"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Monospace font size divisible by"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Mountain height noise"
msgstr ""
@@ -5186,7 +5419,7 @@ 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"
+"This is a trade-off between SQLite transaction overhead and\n"
"memory consumption (4096=100MB, as a rule of thumb)."
msgstr ""
@@ -5205,21 +5438,18 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Opaqueness (alpha) of the shadow behind the fallback font, between 0 and 255."
-msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid ""
"Open the pause menu when the window's focus is lost. Does not pause if a "
"formspec is\n"
"open."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Optional override for chat weblink color."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid ""
-"Path of the fallback font.\n"
-"If “freetype†setting is enabled: Must be a TrueType font.\n"
-"If “freetype†setting is disabled: Must be a bitmap or XML vectors font.\n"
+"Path of the fallback font. Must be a TrueType font.\n"
"This font will be used for certain languages or if the default font is "
"unavailable."
msgstr ""
@@ -5242,17 +5472,13 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Path to the default font.\n"
-"If “freetype†setting is enabled: Must be a TrueType font.\n"
-"If “freetype†setting is disabled: Must be a bitmap or XML vectors font.\n"
+"Path to the default font. Must be a TrueType font.\n"
"The fallback font will be used if the font cannot be loaded."
msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Path to the monospace font.\n"
-"If “freetype†setting is enabled: Must be a TrueType font.\n"
-"If “freetype†setting is disabled: Must be a bitmap or XML vectors font.\n"
+"Path to the monospace font. Must be a TrueType font.\n"
"This font is used for e.g. the console and profiler screen."
msgstr ""
@@ -5309,6 +5535,11 @@ msgid "Player versus player"
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Poisson filtering"
+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."
@@ -5353,9 +5584,9 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"Prometheus listener address.\n"
-"If minetest is compiled with ENABLE_PROMETHEUS option enabled,\n"
+"If Minetest is compiled with ENABLE_PROMETHEUS option enabled,\n"
"enable metrics listener for Prometheus on that address.\n"
-"Metrics can be fetch on http://127.0.0.1:30000/metrics"
+"Metrics can be fetched on http://127.0.0.1:30000/metrics"
msgstr ""
#: src/settings_translation_file.cpp
@@ -5653,6 +5884,32 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Set the shadow strength.\n"
+"Lower value means lighter shadows, higher value means darker shadows."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set the soft shadow radius size.\n"
+"Lower values mean sharper shadows, bigger values mean softer shadows.\n"
+"Minimum value: 1.0; maximum value: 10.0"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set the tilt of Sun/Moon orbit in degrees.\n"
+"Value of 0 means no tilt / vertical orbit.\n"
+"Minimum value: 0.0; maximum value: 60.0"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set to true to enable Shadow Mapping.\n"
+"Requires shaders to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Set to true to enable waving leaves.\n"
"Requires shaders to be enabled."
msgstr ""
@@ -5670,6 +5927,13 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Sets shadow texture quality to 32 bits.\n"
+"On false, 16 bits texture will be used.\n"
+"This can cause much more artifacts in the shadow."
+msgstr ""
+
+#: src/settings_translation_file.cpp
#, fuzzy
msgid "Shader path"
msgstr "Көлөкөлөгүчтөр"
@@ -5683,15 +5947,30 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Shadow filter quality"
+msgstr "Тез Ñүрөт"
+
+#: src/settings_translation_file.cpp
+msgid "Shadow map max distance in nodes to render shadows"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Shadow map texture in 32 bits"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Shadow map texture size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid ""
"Shadow offset (in pixels) of the default font. If 0, then shadow will not be "
"drawn."
msgstr ""
#: src/settings_translation_file.cpp
-msgid ""
-"Shadow offset (in pixels) of the fallback font. If 0, then shadow will not "
-"be drawn."
+msgid "Shadow strength"
msgstr ""
#: src/settings_translation_file.cpp
@@ -5713,7 +5992,7 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Show nametag backgrounds by default"
+msgid "Show name tag backgrounds by default"
msgstr ""
#: src/settings_translation_file.cpp
@@ -5738,6 +6017,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Sky Body Orbit Tilt"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Slice w"
msgstr ""
@@ -5795,16 +6078,11 @@ msgid "Sneaking speed, in nodes per second."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Sound"
+msgid "Soft shadow radius"
msgstr ""
#: src/settings_translation_file.cpp
-#, fuzzy
-msgid "Special key"
-msgstr "Уурданып баÑуу"
-
-#: src/settings_translation_file.cpp
-msgid "Special key for climbing/descending"
+msgid "Sound"
msgstr ""
#: src/settings_translation_file.cpp
@@ -5824,6 +6102,14 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Spread a complete update of shadow map over given amount of frames.\n"
+"Higher values might make shadows laggy, lower values\n"
+"will consume more resources.\n"
+"Minimum value: 1; maximum value: 16"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Spread of light curve boost range.\n"
"Controls the width of the range to be boosted.\n"
"Standard deviation of the light curve boost Gaussian."
@@ -5930,6 +6216,13 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Texture size to render the shadow map on.\n"
+"This must be a power of two.\n"
+"Bigger numbers create better shadows but it is also more expensive."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Textures on a node may be aligned either to the node or to the world.\n"
"The former mode suits better things like machines, furniture, etc., while\n"
"the latter makes stairs and microblocks fit surroundings better.\n"
@@ -5943,7 +6236,7 @@ msgid "The URL for the content repository"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "The deadzone of the joystick"
+msgid "The dead zone of the joystick"
msgstr ""
#: src/settings_translation_file.cpp
@@ -6001,7 +6294,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"The rendering back-end for Irrlicht.\n"
+"The rendering back-end.\n"
"A restart is required after changing this.\n"
"Note: On Android, stick with OGLES1 if unsure! App may fail to start "
"otherwise.\n"
@@ -6012,7 +6305,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"The sensitivity of the joystick axes for moving the\n"
-"ingame view frustum around."
+"in-game view frustum around."
msgstr ""
#: src/settings_translation_file.cpp
@@ -6106,6 +6399,10 @@ msgid "Touch screen threshold"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Tradeoffs for performance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Trees noise"
msgstr ""
@@ -6176,7 +6473,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Use mip mapping to scale textures. May slightly increase performance,\n"
+"Use mipmapping to scale textures. May slightly increase performance,\n"
"especially when using a high resolution texture pack.\n"
"Gamma correct downscaling is not supported."
msgstr ""
@@ -6289,7 +6586,7 @@ msgid "Viewing range"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Virtual joystick triggers aux button"
+msgid "Virtual joystick triggers Aux1 button"
msgstr ""
#: src/settings_translation_file.cpp
@@ -6366,6 +6663,10 @@ msgid "Waving plants"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Weblink color"
+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"
@@ -6386,23 +6687,15 @@ msgid ""
"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.\n"
+"memory. Powers of 2 are recommended. This setting is ONLY applied if\n"
+"bilinear/trilinear/anisotropic filtering is enabled.\n"
"This is also used as the base node texture size for world-aligned\n"
"texture autoscaling."
msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Whether FreeType fonts are used, requires FreeType support to be compiled "
-"in.\n"
-"If disabled, bitmap and XML vectors fonts are used instead."
-msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid ""
-"Whether nametag backgrounds should be shown by default.\n"
+"Whether name tag backgrounds should be shown by default.\n"
"Mods may still set a background."
msgstr ""
@@ -6444,7 +6737,7 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Width component of the initial window size."
+msgid "Width component of the initial window size. Ignored in fullscreen mode."
msgstr ""
#: src/settings_translation_file.cpp
@@ -6530,34 +6823,28 @@ msgid "Y-level of seabed."
msgstr ""
#: src/settings_translation_file.cpp
-msgid ""
-"ZLib compression level to use when saving mapblocks to disk.\n"
-"-1 - Zlib's default compression level\n"
-"0 - no compresson, fastest\n"
-"9 - best compression, slowest\n"
-"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)"
-msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid ""
-"ZLib compression level to use when sending mapblocks to the client.\n"
-"-1 - Zlib's default compression level\n"
-"0 - no compresson, fastest\n"
-"9 - best compression, slowest\n"
-"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)"
+msgid "cURL file download timeout"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "cURL file download timeout"
+msgid "cURL interactive timeout"
msgstr ""
#: src/settings_translation_file.cpp
msgid "cURL parallel limit"
msgstr ""
-#: src/settings_translation_file.cpp
-msgid "cURL timeout"
-msgstr ""
+#, fuzzy
+#~ msgid "- Creative Mode: "
+#~ msgstr "Жаратуу режими"
+
+#, fuzzy
+#~ msgid "- Damage: "
+#~ msgstr "Убалды күйгүзүү"
+
+#, fuzzy
+#~ msgid "Address / Port"
+#~ msgstr "Дареги/порту"
#, fuzzy
#~ msgid "Are you sure to reset your singleplayer world?"
@@ -6581,6 +6868,13 @@ msgstr ""
#~ msgid "Configure"
#~ msgstr "ЫраÑтоо"
+#~ msgid "Credits"
+#~ msgstr "Ðлкыштар"
+
+#, fuzzy
+#~ msgid "Damage enabled"
+#~ msgstr "күйгүзүлгөн"
+
#, fuzzy
#~ msgid "Enable VBO"
#~ msgstr "Баарын күйгүзүү"
@@ -6597,6 +6891,10 @@ msgstr ""
#~ msgid "Main menu style"
#~ msgstr "Башкы меню"
+#, fuzzy
+#~ msgid "Name / Password"
+#~ msgstr "Ðты/ÑырÑөзү"
+
#~ msgid "Name/Password"
#~ msgstr "Ðты/ÑырÑөзү"
@@ -6604,6 +6902,10 @@ msgstr ""
#~ msgstr "Жок"
#, fuzzy
+#~ msgid "PvP enabled"
+#~ msgstr "күйгүзүлгөн"
+
+#, fuzzy
#~ msgid "Reset singleplayer world"
#~ msgstr "Бир кишилик"
@@ -6612,6 +6914,10 @@ msgstr ""
#~ msgstr "Дүйнөнү тандаңыз:"
#, fuzzy
+#~ msgid "Special key"
+#~ msgstr "Уурданып баÑуу"
+
+#, fuzzy
#~ msgid "Start Singleplayer"
#~ msgstr "Бир кишилик"
@@ -6621,3 +6927,10 @@ msgstr ""
#~ msgid "Yes"
#~ msgstr "Ооба"
+
+#, fuzzy
+#~ msgid "You died."
+#~ msgstr "Сиз өлдүңүз."
+
+#~ msgid "needs_fallback_font"
+#~ msgstr "yes"
diff --git a/po/lt/minetest.po b/po/lt/minetest.po
index 98bcff78d..20c24fd0b 100644
--- a/po/lt/minetest.po
+++ b/po/lt/minetest.po
@@ -2,8 +2,8 @@ msgid ""
msgstr ""
"Project-Id-Version: Lithuanian (Minetest)\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-02-23 19:03+0100\n"
-"PO-Revision-Date: 2021-02-23 15:50+0000\n"
+"POT-Creation-Date: 2022-01-25 23:19+0100\n"
+"PO-Revision-Date: 2021-04-10 15:49+0000\n"
"Last-Translator: Kornelijus TvarijanaviÄius <kornelitvari@protonmail.com>\n"
"Language-Team: Lithuanian <https://hosted.weblate.org/projects/minetest/"
"minetest/lt/>\n"
@@ -13,7 +13,48 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n"
"%100<10 || n%100>=20) ? 1 : 2);\n"
-"X-Generator: Weblate 4.5\n"
+"X-Generator: Weblate 4.6-dev\n"
+
+#: builtin/client/chatcommands.lua
+msgid "Clear the out chat queue"
+msgstr ""
+
+#: builtin/client/chatcommands.lua
+#, fuzzy
+msgid "Empty command."
+msgstr "Komanda"
+
+#: builtin/client/chatcommands.lua
+#, fuzzy
+msgid "Exit to main menu"
+msgstr "Grįžti į meniu"
+
+#: builtin/client/chatcommands.lua
+#, fuzzy
+msgid "Invalid command: "
+msgstr "Komanda"
+
+#: builtin/client/chatcommands.lua
+msgid "Issued command: "
+msgstr ""
+
+#: builtin/client/chatcommands.lua
+#, fuzzy
+msgid "List online players"
+msgstr "Žaisti vienam"
+
+#: builtin/client/chatcommands.lua
+#, fuzzy
+msgid "Online players: "
+msgstr "Žaisti vienam"
+
+#: builtin/client/chatcommands.lua
+msgid "The out chat queue is now empty."
+msgstr ""
+
+#: builtin/client/chatcommands.lua
+msgid "This command is disabled by server."
+msgstr ""
#: builtin/client/death_formspec.lua src/client/game.cpp
msgid "Respawn"
@@ -23,11 +64,42 @@ msgstr "Prisikelti"
msgid "You died"
msgstr "Jūs numirėte"
+#: builtin/common/chatcommands.lua
+#, fuzzy
+msgid "Available commands:"
+msgstr "Komanda"
+
+#: builtin/common/chatcommands.lua
+#, fuzzy
+msgid "Available commands: "
+msgstr "Komanda"
+
+#: builtin/common/chatcommands.lua
+msgid "Command not available: "
+msgstr ""
+
+#: builtin/common/chatcommands.lua
+msgid "Get help for commands"
+msgstr ""
+
+#: builtin/common/chatcommands.lua
+msgid ""
+"Use '.help <cmd>' to get more information, or '.help all' to list everything."
+msgstr ""
+
+#: builtin/common/chatcommands.lua
+msgid "[all | <cmd>]"
+msgstr ""
+
#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp
msgid "OK"
msgstr ""
#: builtin/fstk/ui.lua
+msgid "<none available>"
+msgstr ""
+
+#: builtin/fstk/ui.lua
msgid "An error occurred in a Lua script:"
msgstr "Įvyko klaida Lua skripte:"
@@ -100,12 +172,11 @@ msgid "Enable modpack"
msgstr "Aktyvuoti papildinį"
#: builtin/mainmenu/dlg_config_world.lua
-#, fuzzy
msgid ""
"Failed to enable mod \"$1\" as it contains disallowed characters. Only "
"characters [a-z0-9_] are allowed."
msgstr ""
-"Nepavyko įjungti papildinio „$1“, nes jis turi neleistų rašmenų. Tik "
+"Nepavyko įjungti papildinio „$1“, nes jis turi neleistinų rašmenų. Tik "
"rašmenys [a-z0-9_] yra leidžiami."
#: builtin/mainmenu/dlg_config_world.lua
@@ -188,33 +259,28 @@ msgid "All packages"
msgstr ""
#: builtin/mainmenu/dlg_contentstore.lua
-#, fuzzy
msgid "Already installed"
-msgstr "Klavišas jau naudojamas"
+msgstr "Jau įdiegta"
#: builtin/mainmenu/dlg_contentstore.lua
-#, fuzzy
msgid "Back to Main Menu"
-msgstr "Pagrindinis meniu"
+msgstr "Atgal į Pagrindinį Meniu"
#: builtin/mainmenu/dlg_contentstore.lua
-#, fuzzy
msgid "Base Game:"
-msgstr "SlÄ—pti vidinius"
+msgstr "Pagrindinis Žaidimas:"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "ContentDB is not available when Minetest was compiled without cURL"
-msgstr ""
+msgstr "ContentDB nÄ—ra prieinama, kai Minetest sukompiliuojamas be cURL"
#: builtin/mainmenu/dlg_contentstore.lua
-#, fuzzy
msgid "Downloading..."
-msgstr "Įkeliama..."
+msgstr "SiunÄiama..."
#: builtin/mainmenu/dlg_contentstore.lua
-#, fuzzy
msgid "Failed to download $1"
-msgstr "Nepavyko įdiegti $1 į $2"
+msgstr "Nepavyko parsiųsti $1"
#: builtin/mainmenu/dlg_contentstore.lua
#: builtin/mainmenu/dlg_settings_advanced.lua
@@ -236,6 +302,12 @@ msgid "Install missing dependencies"
msgstr "Inicijuojami mazgai"
#: builtin/mainmenu/dlg_contentstore.lua
+#, fuzzy
+msgid "Install: Unsupported file type or broken archive"
+msgstr ""
+"Papildinio diegimas: nepalaikomas failo tipas „$1“ arba sugadintas archyvas"
+
+#: builtin/mainmenu/dlg_contentstore.lua
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Mods"
msgstr "Papildiniai"
@@ -546,7 +618,7 @@ msgstr "< Atgal į Nustatymus"
msgid "Browse"
msgstr "Naršyti"
-#: builtin/mainmenu/dlg_settings_advanced.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_settings.lua
#, fuzzy
msgid "Disabled"
msgstr "Išjungti papildinį"
@@ -573,7 +645,7 @@ msgid "Offset"
msgstr ""
#: builtin/mainmenu/dlg_settings_advanced.lua
-msgid "Persistance"
+msgid "Persistence"
msgstr ""
#: builtin/mainmenu/dlg_settings_advanced.lua
@@ -592,7 +664,7 @@ msgstr ""
msgid "Scale"
msgstr ""
-#: builtin/mainmenu/dlg_settings_advanced.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_online.lua
msgid "Search"
msgstr "Ieškoti"
@@ -691,16 +763,6 @@ msgstr ""
"paketui $1"
#: builtin/mainmenu/pkgmgr.lua
-msgid "Install: Unsupported file type \"$1\" or broken archive"
-msgstr ""
-"Papildinio diegimas: nepalaikomas failo tipas „$1“ arba sugadintas archyvas"
-
-#: builtin/mainmenu/pkgmgr.lua
-#, fuzzy
-msgid "Install: file: \"$1\""
-msgstr "Įdiegti papildinį: failas: „$1“"
-
-#: builtin/mainmenu/pkgmgr.lua
#, fuzzy
msgid "Unable to find a valid mod or modpack"
msgstr ""
@@ -741,6 +803,41 @@ msgstr ""
"Pabandykite dar kart įjungti viešą serverių sąrašą ir patikrinkite savo "
"interneto ryšį."
+#: builtin/mainmenu/tab_about.lua
+msgid "About"
+msgstr ""
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Active Contributors"
+msgstr "Aktyvūs pagalbininkai"
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Active renderer:"
+msgstr ""
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Core Developers"
+msgstr "Pagrindiniai kūrėjai"
+
+#: builtin/mainmenu/tab_about.lua
+#, fuzzy
+msgid "Open User Data Directory"
+msgstr "Pasirinkite aplankÄ…"
+
+#: builtin/mainmenu/tab_about.lua
+msgid ""
+"Opens the directory that contains user-provided worlds, games, mods,\n"
+"and texture packs in a file manager / explorer."
+msgstr ""
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Previous Contributors"
+msgstr "Ankstesni bendradarbiai"
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Previous Core Developers"
+msgstr "Ankstesni pagrindiniai kūrėjai"
+
#: builtin/mainmenu/tab_content.lua
msgid "Browse online content"
msgstr ""
@@ -787,37 +884,6 @@ msgstr "Pašalinti pasirinktą papildinį"
msgid "Use Texture Pack"
msgstr "Tekstūrų paketai"
-#: builtin/mainmenu/tab_credits.lua
-msgid "Active Contributors"
-msgstr "Aktyvūs pagalbininkai"
-
-#: 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
-#, fuzzy
-msgid "Open User Data Directory"
-msgstr "Pasirinkite aplankÄ…"
-
-#: builtin/mainmenu/tab_credits.lua
-msgid ""
-"Opens the directory that contains user-provided worlds, games, mods,\n"
-"and texture packs in a file manager / explorer."
-msgstr ""
-
-#: builtin/mainmenu/tab_credits.lua
-msgid "Previous Contributors"
-msgstr "Ankstesni bendradarbiai"
-
-#: builtin/mainmenu/tab_credits.lua
-msgid "Previous Core Developers"
-msgstr "Ankstesni pagrindiniai kūrėjai"
-
#: builtin/mainmenu/tab_local.lua
msgid "Announce Server"
msgstr "Paskelbti Serverį"
@@ -848,7 +914,7 @@ msgstr "Serveris"
msgid "Install games from ContentDB"
msgstr ""
-#: builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
msgid "Name"
msgstr ""
@@ -860,7 +926,7 @@ msgstr "Naujas"
msgid "No world created or selected!"
msgstr "Nesukurtas ar pasirinktas joks pasaulis!"
-#: builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
#, fuzzy
msgid "Password"
msgstr "Naujas slaptažodis"
@@ -870,7 +936,7 @@ msgstr "Naujas slaptažodis"
msgid "Play Game"
msgstr "Pradėti žaidimą"
-#: builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
msgid "Port"
msgstr "Prievadas"
@@ -893,8 +959,13 @@ msgid "Start Game"
msgstr "SlÄ—pti vidinius"
#: builtin/mainmenu/tab_online.lua
-msgid "Address / Port"
-msgstr "Adresas / Prievadas"
+#, fuzzy
+msgid "Address"
+msgstr "- Adresas: "
+
+#: builtin/mainmenu/tab_online.lua src/client/keycode.cpp
+msgid "Clear"
+msgstr "Išvalyti"
#: builtin/mainmenu/tab_online.lua
msgid "Connect"
@@ -904,9 +975,11 @@ msgstr "Jungtis"
msgid "Creative mode"
msgstr "Kūrybinė veiksena"
+#. ~ PvP = Player versus Player
#: builtin/mainmenu/tab_online.lua
-msgid "Damage enabled"
-msgstr "Žalojimas įjungtas"
+#, fuzzy
+msgid "Damage / PvP"
+msgstr "Leisti sužeidimus"
#: builtin/mainmenu/tab_online.lua
msgid "Del. Favorite"
@@ -914,26 +987,35 @@ msgstr "Pašalinti iš mėgiamų"
#: builtin/mainmenu/tab_online.lua
#, fuzzy
-msgid "Favorite"
+msgid "Favorites"
msgstr "MÄ—giami:"
#: builtin/mainmenu/tab_online.lua
+msgid "Incompatible Servers"
+msgstr ""
+
+#: builtin/mainmenu/tab_online.lua
#, fuzzy
msgid "Join Game"
msgstr "SlÄ—pti vidinius"
#: builtin/mainmenu/tab_online.lua
-msgid "Name / Password"
-msgstr "Vardas / Slaptažodis"
+msgid "Ping"
+msgstr ""
#: builtin/mainmenu/tab_online.lua
-msgid "Ping"
+#, fuzzy
+msgid "Public Servers"
+msgstr "Paskelbti Serverį"
+
+#: builtin/mainmenu/tab_online.lua
+msgid "Refresh"
msgstr ""
-#. ~ PvP = Player versus Player
#: builtin/mainmenu/tab_online.lua
-msgid "PvP enabled"
-msgstr "PvP įjungtas"
+#, fuzzy
+msgid "Server Description"
+msgstr "Serverio prievadas"
#: builtin/mainmenu/tab_settings.lua
msgid "2x"
@@ -977,12 +1059,32 @@ msgstr "Nustatyti klavišus"
msgid "Connected Glass"
msgstr "Jungtis"
+#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
+msgid "Dynamic shadows"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Dynamic shadows: "
+msgstr ""
+
#: builtin/mainmenu/tab_settings.lua
#, fuzzy
msgid "Fancy Leaves"
msgstr "Nepermatomi lapai"
#: builtin/mainmenu/tab_settings.lua
+msgid "High"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Low"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Medium"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
msgid "Mipmap"
msgstr ""
@@ -1059,10 +1161,6 @@ msgstr "Apšvietimo efektai"
msgid "Texturing:"
msgstr ""
-#: builtin/mainmenu/tab_settings.lua
-msgid "To enable shaders the OpenGL driver needs to be used."
-msgstr ""
-
#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
msgid "Tone Mapping"
msgstr ""
@@ -1076,6 +1174,14 @@ msgid "Trilinear Filter"
msgstr ""
#: builtin/mainmenu/tab_settings.lua
+msgid "Ultra High"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Very Low"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
#, fuzzy
msgid "Waving Leaves"
msgstr "Nepermatomi lapai"
@@ -1089,7 +1195,7 @@ msgstr "Nepermatomi lapai"
msgid "Waving Plants"
msgstr ""
-#: src/client/client.cpp
+#: src/client/client.cpp src/client/game.cpp
msgid "Connection timed out."
msgstr "BaigÄ—si prijungimo laikas."
@@ -1118,7 +1224,8 @@ msgid "Connection error (timed out?)"
msgstr "Ryšio klaida (baigėsi prijungimo laikas?)"
#: src/client/clientlauncher.cpp
-msgid "Could not find or load game \""
+#, fuzzy
+msgid "Could not find or load game: "
msgstr "Nepavyko rasti ar įkelti žaidimo „"
#: src/client/clientlauncher.cpp
@@ -1150,18 +1257,6 @@ msgstr ""
msgid "Provided world path doesn't exist: "
msgstr "Pateiktas pasaulio kelias neegzistuoja: "
-#. ~ DO NOT TRANSLATE THIS LITERALLY!
-#. This is a special string. Put either "no" or "yes"
-#. into the translation field (literally).
-#. Choose "yes" if the language requires use of the fallback
-#. font, "no" otherwise.
-#. The fallback font is (normally) required for languages with
-#. non-Latin script, like Chinese.
-#. When in doubt, test your translation.
-#: src/client/fontengine.cpp
-msgid "needs_fallback_font"
-msgstr "no"
-
#: src/client/game.cpp
msgid ""
"\n"
@@ -1175,14 +1270,6 @@ msgid "- Address: "
msgstr "- Adresas: "
#: src/client/game.cpp
-msgid "- Creative Mode: "
-msgstr "- Kūrybinis režimas "
-
-#: src/client/game.cpp
-msgid "- Damage: "
-msgstr "- Sužeidimai: "
-
-#: src/client/game.cpp
msgid "- Mode: "
msgstr ""
@@ -1205,6 +1292,16 @@ msgstr "- Serverio pavadinimas: "
#: src/client/game.cpp
#, fuzzy
+msgid "A serialization error occurred:"
+msgstr "Įvyko klaida:"
+
+#: src/client/game.cpp
+#, c-format
+msgid "Access denied. Reason: %s"
+msgstr ""
+
+#: src/client/game.cpp
+#, fuzzy
msgid "Automatic forward disabled"
msgstr "Pirmyn"
@@ -1214,6 +1311,22 @@ msgid "Automatic forward enabled"
msgstr "Pirmyn"
#: src/client/game.cpp
+msgid "Block bounds hidden"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Block bounds shown for all blocks"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Block bounds shown for current block"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Block bounds shown for nearby blocks"
+msgstr ""
+
+#: src/client/game.cpp
msgid "Camera update disabled"
msgstr ""
@@ -1223,6 +1336,10 @@ msgid "Camera update enabled"
msgstr "Žalojimas įjungtas"
#: src/client/game.cpp
+msgid "Can't show block bounds (need 'basic_debug' privilege)"
+msgstr ""
+
+#: src/client/game.cpp
msgid "Change Password"
msgstr "Keisti slaptažodį"
@@ -1237,6 +1354,11 @@ msgid "Cinematic mode enabled"
msgstr "Kūrybinė veiksena"
#: src/client/game.cpp
+#, fuzzy
+msgid "Client disconnected"
+msgstr "Žaisti tinkle(klientas)"
+
+#: src/client/game.cpp
msgid "Client side scripting is disabled"
msgstr ""
@@ -1245,6 +1367,10 @@ msgid "Connecting to server..."
msgstr "Jungiamasi prie serverio..."
#: src/client/game.cpp
+msgid "Connection failed for unknown reason"
+msgstr ""
+
+#: src/client/game.cpp
msgid "Continue"
msgstr "Tęsti"
@@ -1282,6 +1408,11 @@ msgstr ""
"- %s: kalbÄ—tis\n"
#: src/client/game.cpp
+#, c-format
+msgid "Couldn't resolve address: %s"
+msgstr ""
+
+#: src/client/game.cpp
msgid "Creating client..."
msgstr "Kuriamas klientas..."
@@ -1417,6 +1548,11 @@ msgid "Minimap currently disabled by game or mod"
msgstr ""
#: src/client/game.cpp
+#, fuzzy
+msgid "Multiplayer"
+msgstr "Žaisti vienam"
+
+#: src/client/game.cpp
msgid "Noclip mode disabled"
msgstr ""
@@ -1493,6 +1629,21 @@ msgstr "Garso lygis"
#: src/client/game.cpp
#, c-format
+msgid "The server is probably running a different version of %s."
+msgstr ""
+
+#: src/client/game.cpp
+#, c-format
+msgid "Unable to connect to %s because IPv6 is disabled"
+msgstr ""
+
+#: src/client/game.cpp
+#, c-format
+msgid "Unable to listen on %s because IPv6 is disabled"
+msgstr ""
+
+#: src/client/game.cpp
+#, c-format
msgid "Viewing range changed to %d"
msgstr ""
@@ -1563,10 +1714,6 @@ msgid "Caps Lock"
msgstr ""
#: src/client/keycode.cpp
-msgid "Clear"
-msgstr "Išvalyti"
-
-#: src/client/keycode.cpp
msgid "Control"
msgstr "Valdymas"
@@ -1837,6 +1984,15 @@ msgstr ""
msgid "Minimap in texture mode"
msgstr ""
+#: src/gui/guiChatConsole.cpp
+#, fuzzy
+msgid "Failed to open webpage"
+msgstr "Nepavyko parsiųsti $1"
+
+#: src/gui/guiChatConsole.cpp
+msgid "Opening webpage"
+msgstr ""
+
#: src/gui/guiConfirmRegistration.cpp src/gui/guiPasswordChange.cpp
msgid "Passwords do not match!"
msgstr "Slaptažodžiai nesutampa!"
@@ -1861,7 +2017,7 @@ msgstr "Vykdyti"
#: src/gui/guiKeyChangeMenu.cpp
#, fuzzy
-msgid "\"Special\" = climb down"
+msgid "\"Aux1\" = climb down"
msgstr "„Naudoti“ = kopti žemyn"
#: src/gui/guiKeyChangeMenu.cpp
@@ -1874,10 +2030,18 @@ msgid "Automatic jumping"
msgstr ""
#: src/gui/guiKeyChangeMenu.cpp
+msgid "Aux1"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
msgid "Backward"
msgstr "Atgal"
#: src/gui/guiKeyChangeMenu.cpp
+msgid "Block bounds"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
#, fuzzy
msgid "Change camera"
msgstr "Nustatyti klavišus"
@@ -1970,10 +2134,6 @@ msgid "Sneak"
msgstr "SÄ—linti"
#: src/gui/guiKeyChangeMenu.cpp
-msgid "Special"
-msgstr ""
-
-#: src/gui/guiKeyChangeMenu.cpp
#, fuzzy
msgid "Toggle HUD"
msgstr "Įjungti skrydį"
@@ -2040,7 +2200,8 @@ msgid "Muted"
msgstr "paspauskite klavišą"
#: src/gui/guiVolumeChange.cpp
-msgid "Sound Volume: "
+#, fuzzy, c-format
+msgid "Sound Volume: %d%%"
msgstr "Garso lygis: "
#. ~ Imperative, as in "Enter/type in text".
@@ -2064,8 +2225,8 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"(Android) Use virtual joystick to trigger \"aux\" button.\n"
-"If enabled, virtual joystick will also tap \"aux\" button when out of main "
+"(Android) Use virtual joystick to trigger \"Aux1\" button.\n"
+"If enabled, virtual joystick will also tap \"Aux1\" button when out of main "
"circle."
msgstr ""
@@ -2249,6 +2410,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Adjust the detected display density, used for scaling UI elements."
+msgstr ""
+
+#: src/settings_translation_file.cpp
#, c-format
msgid ""
"Adjusts the density of the floatland layer.\n"
@@ -2363,6 +2528,15 @@ msgstr ""
#: src/settings_translation_file.cpp
#, fuzzy
+msgid "Aux1 key"
+msgstr "Pašokti"
+
+#: src/settings_translation_file.cpp
+msgid "Aux1 key for climbing/descending"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
msgid "Backward key"
msgstr "Atgal"
@@ -2408,10 +2582,6 @@ msgid "Biome noise"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Bits per pixel (aka color depth) in fullscreen mode."
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Block send optimize distance"
msgstr ""
@@ -2510,6 +2680,15 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Chat command time message threshold"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Chat commands"
+msgstr "Komanda"
+
+#: src/settings_translation_file.cpp
msgid "Chat font size"
msgstr ""
@@ -2545,9 +2724,8 @@ msgid "Chat toggle key"
msgstr "Nustatyti klavišus"
#: src/settings_translation_file.cpp
-#, fuzzy
-msgid "Chatcommands"
-msgstr "Komanda"
+msgid "Chat weblinks"
+msgstr ""
#: src/settings_translation_file.cpp
msgid "Chunk size"
@@ -2568,6 +2746,12 @@ msgid "Clean transparent textures"
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Clickable weblinks (middle-click or Ctrl+left-click) enabled in chat console "
+"output."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Client"
msgstr "Žaisti tinkle(klientas)"
@@ -2616,6 +2800,10 @@ msgid "Colored fog"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Colored shadows"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid ""
"Comma-separated list of flags to hide in the content repository.\n"
"\"nonfree\" can be used to hide packages which do not qualify as 'free "
@@ -2644,6 +2832,22 @@ msgid "Command key"
msgstr "Komanda"
#: src/settings_translation_file.cpp
+msgid ""
+"Compression level to use when saving mapblocks to disk.\n"
+"-1 - use default compression level\n"
+"0 - least compression, fastest\n"
+"9 - best compression, slowest"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Compression level to use when sending mapblocks to the client.\n"
+"-1 - use default compression level\n"
+"0 - least compression, fastest\n"
+"9 - best compression, slowest"
+msgstr ""
+
+#: src/settings_translation_file.cpp
#, fuzzy
msgid "Connect glass"
msgstr "Jungtis"
@@ -2739,7 +2943,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"Crosshair alpha (opaqueness, between 0 and 255).\n"
-"Also controls the object crosshair color"
+"This also applies to the object crosshair."
msgstr ""
#: src/settings_translation_file.cpp
@@ -2820,8 +3024,9 @@ msgstr "keisti žaidimą"
#: src/settings_translation_file.cpp
msgid ""
-"Default timeout for cURL, stated in milliseconds.\n"
-"Only has an effect if compiled with cURL."
+"Define shadow filtering quality.\n"
+"This simulates the soft shadows effect by applying a PCF or Poisson disk\n"
+"but also uses more resources."
msgstr ""
#: src/settings_translation_file.cpp
@@ -2941,6 +3146,10 @@ msgid "Disallow empty passwords"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Display Density Scaling Factor"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Domain name of server, to be displayed in the serverlist."
msgstr ""
@@ -2985,6 +3194,19 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Enable Poisson disk filtering.\n"
+"On true uses Poisson disk to make \"soft shadows\". Otherwise uses PCF "
+"filtering."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable colored shadows.\n"
+"On true translucent nodes cast colored shadows. This is expensive."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Enable console window"
msgstr ""
@@ -3094,6 +3316,12 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Enables tradeoffs that reduce CPU load or increase rendering performance\n"
+"at the expense of minor visual glitches that do not impact game playability."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Engine profiling data print interval"
msgstr ""
@@ -3132,18 +3360,6 @@ msgid "Fallback font path"
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 ""
@@ -3161,7 +3377,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Fast movement (via the \"special\" key).\n"
+"Fast movement (via the \"Aux1\" key).\n"
"This requires the \"fast\" privilege on the server."
msgstr ""
@@ -3195,9 +3411,9 @@ 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."
+"which PNG optimizers usually discard, often resulting in dark or\n"
+"light edges to transparent textures. Apply a filter to clean that up\n"
+"at texture load time. This is automatically enabled if mipmapping is enabled."
msgstr ""
#: src/settings_translation_file.cpp
@@ -3289,15 +3505,15 @@ msgid "Font size"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Font size of the default font in point (pt)."
+msgid "Font size divisible by"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Font size of the fallback font in point (pt)."
+msgid "Font size of the default font where 1 unit = 1 pixel at 96 DPI"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Font size of the monospace font in point (pt)."
+msgid "Font size of the monospace font where 1 unit = 1 pixel at 96 DPI"
msgstr ""
#: src/settings_translation_file.cpp
@@ -3308,6 +3524,17 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"For pixel-style fonts that do not scale well, this ensures that font sizes "
+"used\n"
+"with this font will always be divisible by this value, in pixels. For "
+"instance,\n"
+"a pixel font 16 pixels tall should have this set to 16, so it will only ever "
+"be\n"
+"sized 16, 32, 48, etc., so a mod requesting a size of 25 will get 32."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Format of player chat messages. The following strings are valid "
"placeholders:\n"
"@name, @message, @timestamp (optional)"
@@ -3367,10 +3594,6 @@ msgid "Fraction of the visible distance at which fog starts to be rendered"
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)."
@@ -3395,10 +3618,6 @@ msgid "Full screen"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Full screen BPP"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Fullscreen mode."
msgstr ""
@@ -3422,7 +3641,7 @@ msgstr ""
msgid ""
"Global map generation attributes.\n"
"In Mapgen v6 the 'decorations' flag controls all decorations except trees\n"
-"and junglegrass, in all other mapgens this flag controls all decorations."
+"and jungle grass, in all other mapgens this flag controls all decorations."
msgstr ""
#: src/settings_translation_file.cpp
@@ -3492,7 +3711,8 @@ msgid "Heat noise"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Height component of the initial window size."
+msgid ""
+"Height component of the initial window size. Ignored in fullscreen mode."
msgstr ""
#: src/settings_translation_file.cpp
@@ -3505,10 +3725,6 @@ msgid "Height select noise"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "High-precision FPU"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Hill steepness"
msgstr ""
@@ -3739,8 +3955,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"If disabled, \"special\" key is used to fly fast if both fly and fast mode "
-"are\n"
+"If disabled, \"Aux1\" key is used to fly fast if both fly and fast mode are\n"
"enabled."
msgstr ""
@@ -3762,8 +3977,8 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"If enabled, \"special\" key instead of \"sneak\" key is used for climbing "
-"down and\n"
+"If enabled, \"Aux1\" key instead of \"Sneak\" key is used for climbing down "
+"and\n"
"descending."
msgstr ""
@@ -3809,6 +4024,12 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"If the execution of a chat command takes longer than this specified time in\n"
+"seconds, add the time information to the chat command message"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"If the file size of debug.txt exceeds the number of megabytes specified in\n"
"this setting when it is opened, the file is moved to debug.txt.1,\n"
"deleting an older debug.txt.1 if it exists.\n"
@@ -3856,7 +4077,7 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Instrument chatcommands on registration."
+msgid "Instrument chat commands on registration."
msgstr ""
#: src/settings_translation_file.cpp
@@ -3941,7 +4162,7 @@ msgid "Joystick button repetition interval"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Joystick deadzone"
+msgid "Joystick dead zone"
msgstr ""
#: src/settings_translation_file.cpp
@@ -4703,10 +4924,6 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Makes DirectX work with LuaJIT. Disable if it causes troubles."
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Makes all liquids opaque"
msgstr ""
@@ -4778,6 +4995,10 @@ msgid "Map save interval"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Map shadows update frames"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Mapblock limit"
msgstr ""
@@ -4895,6 +5116,10 @@ msgid "Maximum FPS when the window is not focused, or when the game is paused."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Maximum distance to render shadows."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Maximum forceloaded blocks"
msgstr ""
@@ -5000,7 +5225,15 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Maximum time in ms a file download (e.g. a mod download) may take."
+msgid ""
+"Maximum time a file download (e.g. a mod download) may take, stated in "
+"milliseconds."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum time an interactive request (e.g. server list fetch) may take, "
+"stated in milliseconds."
msgstr ""
#: src/settings_translation_file.cpp
@@ -5065,7 +5298,7 @@ msgid "Mod channels"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Modifies the size of the hudbar elements."
+msgid "Modifies the size of the HUD elements."
msgstr ""
#: src/settings_translation_file.cpp
@@ -5077,6 +5310,10 @@ msgid "Monospace font size"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Monospace font size divisible by"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Mountain height noise"
msgstr ""
@@ -5198,7 +5435,7 @@ 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"
+"This is a trade-off between SQLite transaction overhead and\n"
"memory consumption (4096=100MB, as a rule of thumb)."
msgstr ""
@@ -5217,21 +5454,18 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Opaqueness (alpha) of the shadow behind the fallback font, between 0 and 255."
-msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid ""
"Open the pause menu when the window's focus is lost. Does not pause if a "
"formspec is\n"
"open."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Optional override for chat weblink color."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid ""
-"Path of the fallback font.\n"
-"If “freetype†setting is enabled: Must be a TrueType font.\n"
-"If “freetype†setting is disabled: Must be a bitmap or XML vectors font.\n"
+"Path of the fallback font. Must be a TrueType font.\n"
"This font will be used for certain languages or if the default font is "
"unavailable."
msgstr ""
@@ -5254,17 +5488,13 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Path to the default font.\n"
-"If “freetype†setting is enabled: Must be a TrueType font.\n"
-"If “freetype†setting is disabled: Must be a bitmap or XML vectors font.\n"
+"Path to the default font. Must be a TrueType font.\n"
"The fallback font will be used if the font cannot be loaded."
msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Path to the monospace font.\n"
-"If “freetype†setting is enabled: Must be a TrueType font.\n"
-"If “freetype†setting is disabled: Must be a bitmap or XML vectors font.\n"
+"Path to the monospace font. Must be a TrueType font.\n"
"This font is used for e.g. the console and profiler screen."
msgstr ""
@@ -5321,6 +5551,10 @@ msgid "Player versus player"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Poisson filtering"
+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."
@@ -5365,9 +5599,9 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"Prometheus listener address.\n"
-"If minetest is compiled with ENABLE_PROMETHEUS option enabled,\n"
+"If Minetest is compiled with ENABLE_PROMETHEUS option enabled,\n"
"enable metrics listener for Prometheus on that address.\n"
-"Metrics can be fetch on http://127.0.0.1:30000/metrics"
+"Metrics can be fetched on http://127.0.0.1:30000/metrics"
msgstr ""
#: src/settings_translation_file.cpp
@@ -5666,6 +5900,32 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Set the shadow strength.\n"
+"Lower value means lighter shadows, higher value means darker shadows."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set the soft shadow radius size.\n"
+"Lower values mean sharper shadows, bigger values mean softer shadows.\n"
+"Minimum value: 1.0; maximum value: 10.0"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set the tilt of Sun/Moon orbit in degrees.\n"
+"Value of 0 means no tilt / vertical orbit.\n"
+"Minimum value: 0.0; maximum value: 60.0"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set to true to enable Shadow Mapping.\n"
+"Requires shaders to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Set to true to enable waving leaves.\n"
"Requires shaders to be enabled."
msgstr ""
@@ -5683,6 +5943,13 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Sets shadow texture quality to 32 bits.\n"
+"On false, 16 bits texture will be used.\n"
+"This can cause much more artifacts in the shadow."
+msgstr ""
+
+#: src/settings_translation_file.cpp
#, fuzzy
msgid "Shader path"
msgstr "Šešėliavimai"
@@ -5696,15 +5963,29 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Shadow filter quality"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Shadow map max distance in nodes to render shadows"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Shadow map texture in 32 bits"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Shadow map texture size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid ""
"Shadow offset (in pixels) of the default font. If 0, then shadow will not be "
"drawn."
msgstr ""
#: src/settings_translation_file.cpp
-msgid ""
-"Shadow offset (in pixels) of the fallback font. If 0, then shadow will not "
-"be drawn."
+msgid "Shadow strength"
msgstr ""
#: src/settings_translation_file.cpp
@@ -5726,7 +6007,7 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Show nametag backgrounds by default"
+msgid "Show name tag backgrounds by default"
msgstr ""
#: src/settings_translation_file.cpp
@@ -5751,6 +6032,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Sky Body Orbit Tilt"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Slice w"
msgstr ""
@@ -5808,16 +6093,11 @@ msgid "Sneaking speed, in nodes per second."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Sound"
+msgid "Soft shadow radius"
msgstr ""
#: src/settings_translation_file.cpp
-#, fuzzy
-msgid "Special key"
-msgstr "Nustatyti klavišus"
-
-#: src/settings_translation_file.cpp
-msgid "Special key for climbing/descending"
+msgid "Sound"
msgstr ""
#: src/settings_translation_file.cpp
@@ -5837,6 +6117,14 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Spread a complete update of shadow map over given amount of frames.\n"
+"Higher values might make shadows laggy, lower values\n"
+"will consume more resources.\n"
+"Minimum value: 1; maximum value: 16"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Spread of light curve boost range.\n"
"Controls the width of the range to be boosted.\n"
"Standard deviation of the light curve boost Gaussian."
@@ -5943,6 +6231,13 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Texture size to render the shadow map on.\n"
+"This must be a power of two.\n"
+"Bigger numbers create better shadows but it is also more expensive."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Textures on a node may be aligned either to the node or to the world.\n"
"The former mode suits better things like machines, furniture, etc., while\n"
"the latter makes stairs and microblocks fit surroundings better.\n"
@@ -5956,7 +6251,7 @@ msgid "The URL for the content repository"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "The deadzone of the joystick"
+msgid "The dead zone of the joystick"
msgstr ""
#: src/settings_translation_file.cpp
@@ -6014,7 +6309,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"The rendering back-end for Irrlicht.\n"
+"The rendering back-end.\n"
"A restart is required after changing this.\n"
"Note: On Android, stick with OGLES1 if unsure! App may fail to start "
"otherwise.\n"
@@ -6025,7 +6320,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"The sensitivity of the joystick axes for moving the\n"
-"ingame view frustum around."
+"in-game view frustum around."
msgstr ""
#: src/settings_translation_file.cpp
@@ -6119,6 +6414,10 @@ msgid "Touch screen threshold"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Tradeoffs for performance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Trees noise"
msgstr ""
@@ -6188,7 +6487,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Use mip mapping to scale textures. May slightly increase performance,\n"
+"Use mipmapping to scale textures. May slightly increase performance,\n"
"especially when using a high resolution texture pack.\n"
"Gamma correct downscaling is not supported."
msgstr ""
@@ -6301,7 +6600,7 @@ msgid "Viewing range"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Virtual joystick triggers aux button"
+msgid "Virtual joystick triggers Aux1 button"
msgstr ""
#: src/settings_translation_file.cpp
@@ -6376,6 +6675,10 @@ msgid "Waving plants"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Weblink color"
+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"
@@ -6396,23 +6699,15 @@ msgid ""
"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.\n"
+"memory. Powers of 2 are recommended. This setting is ONLY applied if\n"
+"bilinear/trilinear/anisotropic filtering is enabled.\n"
"This is also used as the base node texture size for world-aligned\n"
"texture autoscaling."
msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Whether FreeType fonts are used, requires FreeType support to be compiled "
-"in.\n"
-"If disabled, bitmap and XML vectors fonts are used instead."
-msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid ""
-"Whether nametag backgrounds should be shown by default.\n"
+"Whether name tag backgrounds should be shown by default.\n"
"Mods may still set a background."
msgstr ""
@@ -6454,7 +6749,7 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Width component of the initial window size."
+msgid "Width component of the initial window size. Ignored in fullscreen mode."
msgstr ""
#: src/settings_translation_file.cpp
@@ -6540,34 +6835,25 @@ msgid "Y-level of seabed."
msgstr ""
#: src/settings_translation_file.cpp
-msgid ""
-"ZLib compression level to use when saving mapblocks to disk.\n"
-"-1 - Zlib's default compression level\n"
-"0 - no compresson, fastest\n"
-"9 - best compression, slowest\n"
-"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)"
-msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid ""
-"ZLib compression level to use when sending mapblocks to the client.\n"
-"-1 - Zlib's default compression level\n"
-"0 - no compresson, fastest\n"
-"9 - best compression, slowest\n"
-"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)"
+msgid "cURL file download timeout"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "cURL file download timeout"
+msgid "cURL interactive timeout"
msgstr ""
#: src/settings_translation_file.cpp
msgid "cURL parallel limit"
msgstr ""
-#: src/settings_translation_file.cpp
-msgid "cURL timeout"
-msgstr ""
+#~ msgid "- Creative Mode: "
+#~ msgstr "- Kūrybinis režimas "
+
+#~ msgid "- Damage: "
+#~ msgstr "- Sužeidimai: "
+
+#~ msgid "Address / Port"
+#~ msgstr "Adresas / Prievadas"
#~ msgid "Are you sure to reset your singleplayer world?"
#~ msgstr "Ar tikrai norite perkurti savo lokalų pasaulį?"
@@ -6581,6 +6867,12 @@ msgstr ""
#~ msgid "Configure"
#~ msgstr "Konfigūruoti"
+#~ msgid "Credits"
+#~ msgstr "PadÄ—kos"
+
+#~ msgid "Damage enabled"
+#~ msgstr "Žalojimas įjungtas"
+
#, fuzzy
#~ msgid "Downloading and installing $1, please wait..."
#~ msgstr "AtsiunÄiama $1, praÅ¡ome palaukti..."
@@ -6593,6 +6885,10 @@ msgstr ""
#~ msgid "Enables filmic tone mapping"
#~ msgstr "Leisti sužeidimus"
+#, fuzzy
+#~ msgid "Install: file: \"$1\""
+#~ msgstr "Įdiegti papildinį: failas: „$1“"
+
#~ msgid "Main"
#~ msgstr "Pagrindinis"
@@ -6600,6 +6896,9 @@ msgstr ""
#~ msgid "Main menu style"
#~ msgstr "Pagrindinis meniu"
+#~ msgid "Name / Password"
+#~ msgstr "Vardas / Slaptažodis"
+
#~ msgid "Name/Password"
#~ msgstr "Vardas/slaptažodis"
@@ -6616,6 +6915,9 @@ msgstr ""
#~ msgid "Parallax occlusion scale"
#~ msgstr "ParalaksinÄ— okliuzija"
+#~ msgid "PvP enabled"
+#~ msgstr "PvP įjungtas"
+
#, fuzzy
#~ msgid "Reset singleplayer world"
#~ msgstr "Atstatyti vieno žaidėjo pasaulį"
@@ -6624,6 +6926,10 @@ msgstr ""
#~ msgid "Select Package File:"
#~ msgstr "Pasirinkite papildinio failÄ…:"
+#, fuzzy
+#~ msgid "Special key"
+#~ msgstr "Nustatyti klavišus"
+
#~ msgid "Start Singleplayer"
#~ msgstr "Atstatyti vieno žaidėjo pasaulį"
@@ -6632,3 +6938,10 @@ msgstr ""
#~ msgid "Yes"
#~ msgstr "Taip"
+
+#, fuzzy
+#~ msgid "You died."
+#~ msgstr "Jūs numirėte"
+
+#~ msgid "needs_fallback_font"
+#~ msgstr "no"
diff --git a/po/lv/minetest.po b/po/lv/minetest.po
index 36ea08ae0..24fc8faeb 100644
--- a/po/lv/minetest.po
+++ b/po/lv/minetest.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: minetest\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-02-23 19:03+0100\n"
+"POT-Creation-Date: 2022-01-25 23:19+0100\n"
"PO-Revision-Date: 2021-04-02 10:26+0000\n"
"Last-Translator: Dainis <dainis.skuja@gmail.com>\n"
"Language-Team: Latvian <https://hosted.weblate.org/projects/minetest/"
@@ -20,6 +20,46 @@ msgstr ""
"19) ? 0 : ((n % 10 == 1 && n % 100 != 11) ? 1 : 2);\n"
"X-Generator: Weblate 4.6-dev\n"
+#: builtin/client/chatcommands.lua
+msgid "Clear the out chat queue"
+msgstr ""
+
+#: builtin/client/chatcommands.lua
+msgid "Empty command."
+msgstr ""
+
+#: builtin/client/chatcommands.lua
+#, fuzzy
+msgid "Exit to main menu"
+msgstr "Iziet uz izvēlni"
+
+#: builtin/client/chatcommands.lua
+#, fuzzy
+msgid "Invalid command: "
+msgstr "LokÄlÄ komanda"
+
+#: builtin/client/chatcommands.lua
+msgid "Issued command: "
+msgstr ""
+
+#: builtin/client/chatcommands.lua
+#, fuzzy
+msgid "List online players"
+msgstr "Viena spÄ“lÄ“tÄja režīms"
+
+#: builtin/client/chatcommands.lua
+#, fuzzy
+msgid "Online players: "
+msgstr "Viena spÄ“lÄ“tÄja režīms"
+
+#: builtin/client/chatcommands.lua
+msgid "The out chat queue is now empty."
+msgstr ""
+
+#: builtin/client/chatcommands.lua
+msgid "This command is disabled by server."
+msgstr ""
+
#: builtin/client/death_formspec.lua src/client/game.cpp
msgid "Respawn"
msgstr "Atdzīvoties"
@@ -28,11 +68,42 @@ msgstr "Atdzīvoties"
msgid "You died"
msgstr "JÅ«s nomirÄt"
+#: builtin/common/chatcommands.lua
+#, fuzzy
+msgid "Available commands:"
+msgstr "LokÄlÄ komanda"
+
+#: builtin/common/chatcommands.lua
+#, fuzzy
+msgid "Available commands: "
+msgstr "LokÄlÄ komanda"
+
+#: builtin/common/chatcommands.lua
+msgid "Command not available: "
+msgstr ""
+
+#: builtin/common/chatcommands.lua
+msgid "Get help for commands"
+msgstr ""
+
+#: builtin/common/chatcommands.lua
+msgid ""
+"Use '.help <cmd>' to get more information, or '.help all' to list everything."
+msgstr ""
+
+#: builtin/common/chatcommands.lua
+msgid "[all | <cmd>]"
+msgstr ""
+
#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp
msgid "OK"
msgstr ""
#: builtin/fstk/ui.lua
+msgid "<none available>"
+msgstr ""
+
+#: builtin/fstk/ui.lua
msgid "An error occurred in a Lua script:"
msgstr "Lua skriptÄ radÄs kļūme:"
@@ -239,6 +310,11 @@ msgid "Install missing dependencies"
msgstr "NeobligÄtÄs atkarÄ«bas:"
#: builtin/mainmenu/dlg_contentstore.lua
+#, fuzzy
+msgid "Install: Unsupported file type or broken archive"
+msgstr "InstalÄcija: NeatbalstÄ«ts faila tips “$1†vai arÄ« sabojÄts arhÄ«vs"
+
+#: builtin/mainmenu/dlg_contentstore.lua
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Mods"
msgstr "Modi"
@@ -544,7 +620,7 @@ msgstr "< Atpakaļ uz Iestatījumu lapu"
msgid "Browse"
msgstr "PÄrlÅ«kot"
-#: builtin/mainmenu/dlg_settings_advanced.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_settings.lua
msgid "Disabled"
msgstr "Atspējots"
@@ -569,7 +645,8 @@ msgid "Offset"
msgstr "Nobīde"
#: builtin/mainmenu/dlg_settings_advanced.lua
-msgid "Persistance"
+#, fuzzy
+msgid "Persistence"
msgstr "Noturība"
#: builtin/mainmenu/dlg_settings_advanced.lua
@@ -588,7 +665,7 @@ msgstr "Atiestatīt uz noklusējumu"
msgid "Scale"
msgstr "Mērogs"
-#: builtin/mainmenu/dlg_settings_advanced.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_online.lua
msgid "Search"
msgstr "Meklēt"
@@ -682,14 +759,6 @@ msgstr ""
"komplekta “$1â€"
#: builtin/mainmenu/pkgmgr.lua
-msgid "Install: Unsupported file type \"$1\" or broken archive"
-msgstr "InstalÄcija: NeatbalstÄ«ts faila tips “$1†vai arÄ« sabojÄts arhÄ«vs"
-
-#: builtin/mainmenu/pkgmgr.lua
-msgid "Install: file: \"$1\""
-msgstr "InstalÄcija: fails: “$1â€"
-
-#: builtin/mainmenu/pkgmgr.lua
msgid "Unable to find a valid mod or modpack"
msgstr "NeizdevÄs atrast derÄ«gu modu vai modu komplektu"
@@ -724,6 +793,41 @@ msgstr ""
"Pamēģiniet atkÄrtoti ieslÄ“gt publisko serveru sarakstu un pÄrbaudiet "
"interneta savienojumu."
+#: builtin/mainmenu/tab_about.lua
+msgid "About"
+msgstr ""
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Active Contributors"
+msgstr "Aktīvie dalībnieki"
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Active renderer:"
+msgstr ""
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Core Developers"
+msgstr "Pamata izstrÄdÄtÄji"
+
+#: builtin/mainmenu/tab_about.lua
+#, fuzzy
+msgid "Open User Data Directory"
+msgstr "Izvēlēties mapi"
+
+#: builtin/mainmenu/tab_about.lua
+msgid ""
+"Opens the directory that contains user-provided worlds, games, mods,\n"
+"and texture packs in a file manager / explorer."
+msgstr ""
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Previous Contributors"
+msgstr "Bijušie dalībnieki"
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Previous Core Developers"
+msgstr "BijuÅ¡ie pamata izstrÄdÄtÄji"
+
#: builtin/mainmenu/tab_content.lua
msgid "Browse online content"
msgstr "PÄrlÅ«kot tieÅ¡saistes saturu"
@@ -764,37 +868,6 @@ msgstr "AtinstalÄ“t papildinÄjumu"
msgid "Use Texture Pack"
msgstr "Iespējot tekstūru komplektu"
-#: builtin/mainmenu/tab_credits.lua
-msgid "Active Contributors"
-msgstr "Aktīvie dalībnieki"
-
-#: builtin/mainmenu/tab_credits.lua
-msgid "Core Developers"
-msgstr "Pamata izstrÄdÄtÄji"
-
-#: builtin/mainmenu/tab_credits.lua
-msgid "Credits"
-msgstr "Pateicības"
-
-#: builtin/mainmenu/tab_credits.lua
-#, fuzzy
-msgid "Open User Data Directory"
-msgstr "Izvēlēties mapi"
-
-#: builtin/mainmenu/tab_credits.lua
-msgid ""
-"Opens the directory that contains user-provided worlds, games, mods,\n"
-"and texture packs in a file manager / explorer."
-msgstr ""
-
-#: builtin/mainmenu/tab_credits.lua
-msgid "Previous Contributors"
-msgstr "Bijušie dalībnieki"
-
-#: builtin/mainmenu/tab_credits.lua
-msgid "Previous Core Developers"
-msgstr "BijuÅ¡ie pamata izstrÄdÄtÄji"
-
#: builtin/mainmenu/tab_local.lua
msgid "Announce Server"
msgstr "Paziņot par serveri"
@@ -823,7 +896,7 @@ msgstr "Palaist serveri"
msgid "Install games from ContentDB"
msgstr ""
-#: builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
msgid "Name"
msgstr ""
@@ -835,7 +908,7 @@ msgstr "Jauns"
msgid "No world created or selected!"
msgstr "Pasaule nav ne izveidota, ne izvēlēta!"
-#: builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
#, fuzzy
msgid "Password"
msgstr "JaunÄ parole"
@@ -844,7 +917,7 @@ msgstr "JaunÄ parole"
msgid "Play Game"
msgstr "Spēlēt"
-#: builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
msgid "Port"
msgstr "Ports"
@@ -866,8 +939,13 @@ msgid "Start Game"
msgstr "SÄkt spÄ“li"
#: builtin/mainmenu/tab_online.lua
-msgid "Address / Port"
-msgstr "Adrese / Ports"
+#, fuzzy
+msgid "Address"
+msgstr "- Adrese: "
+
+#: builtin/mainmenu/tab_online.lua src/client/keycode.cpp
+msgid "Clear"
+msgstr "Notīrīt"
#: builtin/mainmenu/tab_online.lua
msgid "Connect"
@@ -877,34 +955,46 @@ msgstr "Pieslēgties"
msgid "Creative mode"
msgstr "Radošais režīms"
+#. ~ PvP = Player versus Player
#: builtin/mainmenu/tab_online.lua
-msgid "Damage enabled"
-msgstr "BojÄjumi iespÄ“joti"
+#, fuzzy
+msgid "Damage / PvP"
+msgstr "- BojÄjumi: "
#: builtin/mainmenu/tab_online.lua
msgid "Del. Favorite"
msgstr "Izdzēst no izlases"
#: builtin/mainmenu/tab_online.lua
-msgid "Favorite"
+#, fuzzy
+msgid "Favorites"
msgstr "Pievienot izlasei"
#: builtin/mainmenu/tab_online.lua
-msgid "Join Game"
-msgstr "Pievienoties spēlei"
+msgid "Incompatible Servers"
+msgstr ""
#: builtin/mainmenu/tab_online.lua
-msgid "Name / Password"
-msgstr "VÄrds / Parole"
+msgid "Join Game"
+msgstr "Pievienoties spēlei"
#: builtin/mainmenu/tab_online.lua
msgid "Ping"
msgstr "Pings"
-#. ~ PvP = Player versus Player
#: builtin/mainmenu/tab_online.lua
-msgid "PvP enabled"
-msgstr "PvP iespējots"
+#, fuzzy
+msgid "Public Servers"
+msgstr "Paziņot par serveri"
+
+#: builtin/mainmenu/tab_online.lua
+msgid "Refresh"
+msgstr ""
+
+#: builtin/mainmenu/tab_online.lua
+#, fuzzy
+msgid "Server Description"
+msgstr "Servera ports"
#: builtin/mainmenu/tab_settings.lua
msgid "2x"
@@ -946,11 +1036,31 @@ msgstr "Nomainīt kontroles"
msgid "Connected Glass"
msgstr "Savienots stikls"
+#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
+msgid "Dynamic shadows"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Dynamic shadows: "
+msgstr ""
+
#: builtin/mainmenu/tab_settings.lua
msgid "Fancy Leaves"
msgstr "Skaistas lapas"
#: builtin/mainmenu/tab_settings.lua
+msgid "High"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Low"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Medium"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
msgid "Mipmap"
msgstr "“Mipmapâ€"
@@ -1023,10 +1133,6 @@ msgstr "Gluds apgaismojums"
msgid "Texturing:"
msgstr "Teksturēšana:"
-#: builtin/mainmenu/tab_settings.lua
-msgid "To enable shaders the OpenGL driver needs to be used."
-msgstr "Lai iespÄ“jotu Å¡eiderus, jÄizmanto OpenGL draiveris."
-
#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
msgid "Tone Mapping"
msgstr "Toņu atbilstība"
@@ -1040,6 +1146,14 @@ msgid "Trilinear Filter"
msgstr "TrilineÄrais filtrs"
#: builtin/mainmenu/tab_settings.lua
+msgid "Ultra High"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Very Low"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
msgid "Waving Leaves"
msgstr "Viļņojošas lapas"
@@ -1051,7 +1165,7 @@ msgstr "Viļņojoši šķidrumi"
msgid "Waving Plants"
msgstr "Viļņojoši augi"
-#: src/client/client.cpp
+#: src/client/client.cpp src/client/game.cpp
msgid "Connection timed out."
msgstr "Savienojuma noildze."
@@ -1080,7 +1194,8 @@ msgid "Connection error (timed out?)"
msgstr "Savienojuma kļūme (noildze?)"
#: src/client/clientlauncher.cpp
-msgid "Could not find or load game \""
+#, fuzzy
+msgid "Could not find or load game: "
msgstr "NevarÄ“ja atrast vai ielÄdÄ“t spÄ“li \""
#: src/client/clientlauncher.cpp
@@ -1111,18 +1226,6 @@ msgstr "NeizdevÄs atvÄ“rt iestatÄ«to paroļu failu: "
msgid "Provided world path doesn't exist: "
msgstr "SniegtÄ pasaules atraÅ¡anÄs vieta neeksistÄ“: "
-#. ~ DO NOT TRANSLATE THIS LITERALLY!
-#. This is a special string. Put either "no" or "yes"
-#. into the translation field (literally).
-#. Choose "yes" if the language requires use of the fallback
-#. font, "no" otherwise.
-#. The fallback font is (normally) required for languages with
-#. non-Latin script, like Chinese.
-#. When in doubt, test your translation.
-#: src/client/fontengine.cpp
-msgid "needs_fallback_font"
-msgstr "no"
-
#: src/client/game.cpp
msgid ""
"\n"
@@ -1136,14 +1239,6 @@ msgid "- Address: "
msgstr "- Adrese: "
#: src/client/game.cpp
-msgid "- Creative Mode: "
-msgstr "- Radošais režīms: "
-
-#: src/client/game.cpp
-msgid "- Damage: "
-msgstr "- BojÄjumi: "
-
-#: src/client/game.cpp
msgid "- Mode: "
msgstr "- Režīms: "
@@ -1165,6 +1260,16 @@ msgid "- Server Name: "
msgstr "- Severa nosaukums: "
#: src/client/game.cpp
+#, fuzzy
+msgid "A serialization error occurred:"
+msgstr "RadÄs kļūme:"
+
+#: src/client/game.cpp
+#, c-format
+msgid "Access denied. Reason: %s"
+msgstr ""
+
+#: src/client/game.cpp
msgid "Automatic forward disabled"
msgstr "AutomÄtiskÄ pÄrvietoÅ¡anÄs izslÄ“gta"
@@ -1173,6 +1278,22 @@ msgid "Automatic forward enabled"
msgstr "AutomÄtiskÄ pÄrvietoÅ¡anÄs ieslÄ“gta"
#: src/client/game.cpp
+msgid "Block bounds hidden"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Block bounds shown for all blocks"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Block bounds shown for current block"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Block bounds shown for nearby blocks"
+msgstr ""
+
+#: src/client/game.cpp
msgid "Camera update disabled"
msgstr "Kameras atjaunošana atspējota"
@@ -1181,6 +1302,10 @@ msgid "Camera update enabled"
msgstr "Kameras atjaunošana iespējota"
#: src/client/game.cpp
+msgid "Can't show block bounds (need 'basic_debug' privilege)"
+msgstr ""
+
+#: src/client/game.cpp
msgid "Change Password"
msgstr "Nomainīt paroli"
@@ -1193,6 +1318,10 @@ msgid "Cinematic mode enabled"
msgstr "Kino režīms ieslēgts"
#: src/client/game.cpp
+msgid "Client disconnected"
+msgstr ""
+
+#: src/client/game.cpp
msgid "Client side scripting is disabled"
msgstr "Klienta puses skriptēšana ir atspējota"
@@ -1201,6 +1330,10 @@ msgid "Connecting to server..."
msgstr "Savienojas ar serveri..."
#: src/client/game.cpp
+msgid "Connection failed for unknown reason"
+msgstr ""
+
+#: src/client/game.cpp
msgid "Continue"
msgstr "TurpinÄt"
@@ -1238,6 +1371,11 @@ msgstr ""
"- %s: Äats\n"
#: src/client/game.cpp
+#, c-format
+msgid "Couldn't resolve address: %s"
+msgstr ""
+
+#: src/client/game.cpp
msgid "Creating client..."
msgstr "Izveido klientu..."
@@ -1367,6 +1505,11 @@ msgid "Minimap currently disabled by game or mod"
msgstr "Minikarte šobrīd atspējota vai nu spēlei, vai modam"
#: src/client/game.cpp
+#, fuzzy
+msgid "Multiplayer"
+msgstr "Viena spÄ“lÄ“tÄja režīms"
+
+#: src/client/game.cpp
msgid "Noclip mode disabled"
msgstr "“Noclip†režīms izslēgts"
@@ -1440,6 +1583,21 @@ msgstr "Skaņa ieslēgta"
#: src/client/game.cpp
#, c-format
+msgid "The server is probably running a different version of %s."
+msgstr ""
+
+#: src/client/game.cpp
+#, c-format
+msgid "Unable to connect to %s because IPv6 is disabled"
+msgstr ""
+
+#: src/client/game.cpp
+#, c-format
+msgid "Unable to listen on %s because IPv6 is disabled"
+msgstr ""
+
+#: src/client/game.cpp
+#, c-format
msgid "Viewing range changed to %d"
msgstr "Redzamības diapazons nomainīts uz %d"
@@ -1508,10 +1666,6 @@ msgid "Caps Lock"
msgstr "Caps Lock"
#: src/client/keycode.cpp
-msgid "Clear"
-msgstr "Notīrīt"
-
-#: src/client/keycode.cpp
msgid "Control"
msgstr "Ctrl"
@@ -1777,6 +1931,15 @@ msgstr "Minikarte virsmas režīmÄ, palielinÄjums x1"
msgid "Minimap in texture mode"
msgstr "Minikarte virsmas režīmÄ, palielinÄjums x1"
+#: src/gui/guiChatConsole.cpp
+#, fuzzy
+msgid "Failed to open webpage"
+msgstr "NeizdevÄs lejuplÄdÄ“t $1"
+
+#: src/gui/guiChatConsole.cpp
+msgid "Opening webpage"
+msgstr ""
+
#: src/gui/guiConfirmRegistration.cpp src/gui/guiPasswordChange.cpp
msgid "Passwords do not match!"
msgstr "Paroles nesakrīt!"
@@ -1806,7 +1969,8 @@ msgid "Proceed"
msgstr "TurpinÄt"
#: src/gui/guiKeyChangeMenu.cpp
-msgid "\"Special\" = climb down"
+#, fuzzy
+msgid "\"Aux1\" = climb down"
msgstr "“SpeciÄlais†= kÄpt lejÄ"
#: src/gui/guiKeyChangeMenu.cpp
@@ -1818,10 +1982,18 @@ msgid "Automatic jumping"
msgstr "AutomÄtiskÄ lekÅ¡ana"
#: src/gui/guiKeyChangeMenu.cpp
+msgid "Aux1"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
msgid "Backward"
msgstr "Atmuguriski"
#: src/gui/guiKeyChangeMenu.cpp
+msgid "Block bounds"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
msgid "Change camera"
msgstr "Mainīt kameru"
@@ -1912,10 +2084,6 @@ msgid "Sneak"
msgstr "Lavīties"
#: src/gui/guiKeyChangeMenu.cpp
-msgid "Special"
-msgstr "SpeciÄlais"
-
-#: src/gui/guiKeyChangeMenu.cpp
msgid "Toggle HUD"
msgstr "Spēles saskarne"
@@ -1976,7 +2144,8 @@ msgid "Muted"
msgstr "ApklusinÄts"
#: src/gui/guiVolumeChange.cpp
-msgid "Sound Volume: "
+#, fuzzy, c-format
+msgid "Sound Volume: %d%%"
msgstr "Skaņas skaļums: "
#. ~ Imperative, as in "Enter/type in text".
@@ -2000,8 +2169,8 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"(Android) Use virtual joystick to trigger \"aux\" button.\n"
-"If enabled, virtual joystick will also tap \"aux\" button when out of main "
+"(Android) Use virtual joystick to trigger \"Aux1\" button.\n"
+"If enabled, virtual joystick will also tap \"Aux1\" button when out of main "
"circle."
msgstr ""
@@ -2184,6 +2353,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Adjust the detected display density, used for scaling UI elements."
+msgstr ""
+
+#: src/settings_translation_file.cpp
#, c-format
msgid ""
"Adjusts the density of the floatland layer.\n"
@@ -2296,6 +2469,14 @@ msgid "Autoscaling mode"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Aux1 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Aux1 key for climbing/descending"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Backward key"
msgstr ""
@@ -2340,10 +2521,6 @@ msgid "Biome noise"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Bits per pixel (aka color depth) in fullscreen mode."
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Block send optimize distance"
msgstr ""
@@ -2442,6 +2619,15 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Chat command time message threshold"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Chat commands"
+msgstr "Komanda"
+
+#: src/settings_translation_file.cpp
msgid "Chat font size"
msgstr ""
@@ -2474,8 +2660,9 @@ msgid "Chat toggle key"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Chatcommands"
-msgstr ""
+#, fuzzy
+msgid "Chat weblinks"
+msgstr "ÄŒats parÄdÄ«ts"
#: src/settings_translation_file.cpp
msgid "Chunk size"
@@ -2494,6 +2681,12 @@ msgid "Clean transparent textures"
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Clickable weblinks (middle-click or Ctrl+left-click) enabled in chat console "
+"output."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Client"
msgstr ""
@@ -2538,6 +2731,10 @@ msgid "Colored fog"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Colored shadows"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid ""
"Comma-separated list of flags to hide in the content repository.\n"
"\"nonfree\" can be used to hide packages which do not qualify as 'free "
@@ -2565,6 +2762,22 @@ msgid "Command key"
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Compression level to use when saving mapblocks to disk.\n"
+"-1 - use default compression level\n"
+"0 - least compression, fastest\n"
+"9 - best compression, slowest"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Compression level to use when sending mapblocks to the client.\n"
+"-1 - use default compression level\n"
+"0 - least compression, fastest\n"
+"9 - best compression, slowest"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Connect glass"
msgstr ""
@@ -2655,7 +2868,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"Crosshair alpha (opaqueness, between 0 and 255).\n"
-"Also controls the object crosshair color"
+"This also applies to the object crosshair."
msgstr ""
#: src/settings_translation_file.cpp
@@ -2732,8 +2945,9 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Default timeout for cURL, stated in milliseconds.\n"
-"Only has an effect if compiled with cURL."
+"Define shadow filtering quality.\n"
+"This simulates the soft shadows effect by applying a PCF or Poisson disk\n"
+"but also uses more resources."
msgstr ""
#: src/settings_translation_file.cpp
@@ -2851,6 +3065,10 @@ msgid "Disallow empty passwords"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Display Density Scaling Factor"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Domain name of server, to be displayed in the serverlist."
msgstr ""
@@ -2895,6 +3113,19 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Enable Poisson disk filtering.\n"
+"On true uses Poisson disk to make \"soft shadows\". Otherwise uses PCF "
+"filtering."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable colored shadows.\n"
+"On true translucent nodes cast colored shadows. This is expensive."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Enable console window"
msgstr ""
@@ -3003,6 +3234,12 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Enables tradeoffs that reduce CPU load or increase rendering performance\n"
+"at the expense of minor visual glitches that do not impact game playability."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Engine profiling data print interval"
msgstr ""
@@ -3041,18 +3278,6 @@ msgid "Fallback font path"
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 ""
@@ -3069,10 +3294,13 @@ msgid "Fast movement"
msgstr "Ä€trÄ pÄrvietoÅ¡anÄs"
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
-"Fast movement (via the \"special\" key).\n"
+"Fast movement (via the \"Aux1\" key).\n"
"This requires the \"fast\" privilege on the server."
msgstr ""
+"SpÄ“lÄ“tÄjs var lidot ignorÄ“jot gravitÄciju.\n"
+"Šim ir vajadzīga “fly†privilēģija servera pusē."
#: src/settings_translation_file.cpp
msgid "Field of view"
@@ -3104,9 +3332,9 @@ 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."
+"which PNG optimizers usually discard, often resulting in dark or\n"
+"light edges to transparent textures. Apply a filter to clean that up\n"
+"at texture load time. This is automatically enabled if mipmapping is enabled."
msgstr ""
#: src/settings_translation_file.cpp
@@ -3198,15 +3426,15 @@ msgid "Font size"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Font size of the default font in point (pt)."
+msgid "Font size divisible by"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Font size of the fallback font in point (pt)."
+msgid "Font size of the default font where 1 unit = 1 pixel at 96 DPI"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Font size of the monospace font in point (pt)."
+msgid "Font size of the monospace font where 1 unit = 1 pixel at 96 DPI"
msgstr ""
#: src/settings_translation_file.cpp
@@ -3217,6 +3445,17 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"For pixel-style fonts that do not scale well, this ensures that font sizes "
+"used\n"
+"with this font will always be divisible by this value, in pixels. For "
+"instance,\n"
+"a pixel font 16 pixels tall should have this set to 16, so it will only ever "
+"be\n"
+"sized 16, 32, 48, etc., so a mod requesting a size of 25 will get 32."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Format of player chat messages. The following strings are valid "
"placeholders:\n"
"@name, @message, @timestamp (optional)"
@@ -3275,10 +3514,6 @@ msgid "Fraction of the visible distance at which fog starts to be rendered"
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)."
@@ -3303,10 +3538,6 @@ msgid "Full screen"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Full screen BPP"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Fullscreen mode."
msgstr ""
@@ -3330,7 +3561,7 @@ msgstr ""
msgid ""
"Global map generation attributes.\n"
"In Mapgen v6 the 'decorations' flag controls all decorations except trees\n"
-"and junglegrass, in all other mapgens this flag controls all decorations."
+"and jungle grass, in all other mapgens this flag controls all decorations."
msgstr ""
#: src/settings_translation_file.cpp
@@ -3399,7 +3630,8 @@ msgid "Heat noise"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Height component of the initial window size."
+msgid ""
+"Height component of the initial window size. Ignored in fullscreen mode."
msgstr ""
#: src/settings_translation_file.cpp
@@ -3411,10 +3643,6 @@ msgid "Height select noise"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "High-precision FPU"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Hill steepness"
msgstr ""
@@ -3645,8 +3873,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"If disabled, \"special\" key is used to fly fast if both fly and fast mode "
-"are\n"
+"If disabled, \"Aux1\" key is used to fly fast if both fly and fast mode are\n"
"enabled."
msgstr ""
@@ -3668,8 +3895,8 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"If enabled, \"special\" key instead of \"sneak\" key is used for climbing "
-"down and\n"
+"If enabled, \"Aux1\" key instead of \"Sneak\" key is used for climbing down "
+"and\n"
"descending."
msgstr ""
@@ -3719,6 +3946,12 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"If the execution of a chat command takes longer than this specified time in\n"
+"seconds, add the time information to the chat command message"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"If the file size of debug.txt exceeds the number of megabytes specified in\n"
"this setting when it is opened, the file is moved to debug.txt.1,\n"
"deleting an older debug.txt.1 if it exists.\n"
@@ -3764,7 +3997,7 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Instrument chatcommands on registration."
+msgid "Instrument chat commands on registration."
msgstr ""
#: src/settings_translation_file.cpp
@@ -3848,7 +4081,7 @@ msgid "Joystick button repetition interval"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Joystick deadzone"
+msgid "Joystick dead zone"
msgstr ""
#: src/settings_translation_file.cpp
@@ -4606,10 +4839,6 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Makes DirectX work with LuaJIT. Disable if it causes troubles."
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Makes all liquids opaque"
msgstr ""
@@ -4681,6 +4910,10 @@ msgid "Map save interval"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Map shadows update frames"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Mapblock limit"
msgstr ""
@@ -4789,6 +5022,10 @@ msgid "Maximum FPS when the window is not focused, or when the game is paused."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Maximum distance to render shadows."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Maximum forceloaded blocks"
msgstr ""
@@ -4894,7 +5131,15 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Maximum time in ms a file download (e.g. a mod download) may take."
+msgid ""
+"Maximum time a file download (e.g. a mod download) may take, stated in "
+"milliseconds."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum time an interactive request (e.g. server list fetch) may take, "
+"stated in milliseconds."
msgstr ""
#: src/settings_translation_file.cpp
@@ -4958,7 +5203,7 @@ msgid "Mod channels"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Modifies the size of the hudbar elements."
+msgid "Modifies the size of the HUD elements."
msgstr ""
#: src/settings_translation_file.cpp
@@ -4970,6 +5215,10 @@ msgid "Monospace font size"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Monospace font size divisible by"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Mountain height noise"
msgstr ""
@@ -5090,7 +5339,7 @@ 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"
+"This is a trade-off between SQLite transaction overhead and\n"
"memory consumption (4096=100MB, as a rule of thumb)."
msgstr ""
@@ -5109,21 +5358,18 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Opaqueness (alpha) of the shadow behind the fallback font, between 0 and 255."
-msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid ""
"Open the pause menu when the window's focus is lost. Does not pause if a "
"formspec is\n"
"open."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Optional override for chat weblink color."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid ""
-"Path of the fallback font.\n"
-"If “freetype†setting is enabled: Must be a TrueType font.\n"
-"If “freetype†setting is disabled: Must be a bitmap or XML vectors font.\n"
+"Path of the fallback font. Must be a TrueType font.\n"
"This font will be used for certain languages or if the default font is "
"unavailable."
msgstr ""
@@ -5146,17 +5392,13 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Path to the default font.\n"
-"If “freetype†setting is enabled: Must be a TrueType font.\n"
-"If “freetype†setting is disabled: Must be a bitmap or XML vectors font.\n"
+"Path to the default font. Must be a TrueType font.\n"
"The fallback font will be used if the font cannot be loaded."
msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Path to the monospace font.\n"
-"If “freetype†setting is enabled: Must be a TrueType font.\n"
-"If “freetype†setting is disabled: Must be a bitmap or XML vectors font.\n"
+"Path to the monospace font. Must be a TrueType font.\n"
"This font is used for e.g. the console and profiler screen."
msgstr ""
@@ -5213,6 +5455,10 @@ msgid "Player versus player"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Poisson filtering"
+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."
@@ -5257,9 +5503,9 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"Prometheus listener address.\n"
-"If minetest is compiled with ENABLE_PROMETHEUS option enabled,\n"
+"If Minetest is compiled with ENABLE_PROMETHEUS option enabled,\n"
"enable metrics listener for Prometheus on that address.\n"
-"Metrics can be fetch on http://127.0.0.1:30000/metrics"
+"Metrics can be fetched on http://127.0.0.1:30000/metrics"
msgstr ""
#: src/settings_translation_file.cpp
@@ -5548,6 +5794,32 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Set the shadow strength.\n"
+"Lower value means lighter shadows, higher value means darker shadows."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set the soft shadow radius size.\n"
+"Lower values mean sharper shadows, bigger values mean softer shadows.\n"
+"Minimum value: 1.0; maximum value: 10.0"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set the tilt of Sun/Moon orbit in degrees.\n"
+"Value of 0 means no tilt / vertical orbit.\n"
+"Minimum value: 0.0; maximum value: 60.0"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set to true to enable Shadow Mapping.\n"
+"Requires shaders to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Set to true to enable waving leaves.\n"
"Requires shaders to be enabled."
msgstr ""
@@ -5565,6 +5837,13 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Sets shadow texture quality to 32 bits.\n"
+"On false, 16 bits texture will be used.\n"
+"This can cause much more artifacts in the shadow."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Shader path"
msgstr ""
@@ -5577,15 +5856,29 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Shadow filter quality"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Shadow map max distance in nodes to render shadows"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Shadow map texture in 32 bits"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Shadow map texture size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid ""
"Shadow offset (in pixels) of the default font. If 0, then shadow will not be "
"drawn."
msgstr ""
#: src/settings_translation_file.cpp
-msgid ""
-"Shadow offset (in pixels) of the fallback font. If 0, then shadow will not "
-"be drawn."
+msgid "Shadow strength"
msgstr ""
#: src/settings_translation_file.cpp
@@ -5607,7 +5900,7 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Show nametag backgrounds by default"
+msgid "Show name tag backgrounds by default"
msgstr ""
#: src/settings_translation_file.cpp
@@ -5632,6 +5925,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Sky Body Orbit Tilt"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Slice w"
msgstr ""
@@ -5686,15 +5983,11 @@ msgid "Sneaking speed, in nodes per second."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Sound"
-msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid "Special key"
+msgid "Soft shadow radius"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Special key for climbing/descending"
+msgid "Sound"
msgstr ""
#: src/settings_translation_file.cpp
@@ -5714,6 +6007,14 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Spread a complete update of shadow map over given amount of frames.\n"
+"Higher values might make shadows laggy, lower values\n"
+"will consume more resources.\n"
+"Minimum value: 1; maximum value: 16"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Spread of light curve boost range.\n"
"Controls the width of the range to be boosted.\n"
"Standard deviation of the light curve boost Gaussian."
@@ -5820,6 +6121,13 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Texture size to render the shadow map on.\n"
+"This must be a power of two.\n"
+"Bigger numbers create better shadows but it is also more expensive."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Textures on a node may be aligned either to the node or to the world.\n"
"The former mode suits better things like machines, furniture, etc., while\n"
"the latter makes stairs and microblocks fit surroundings better.\n"
@@ -5833,7 +6141,7 @@ msgid "The URL for the content repository"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "The deadzone of the joystick"
+msgid "The dead zone of the joystick"
msgstr ""
#: src/settings_translation_file.cpp
@@ -5891,7 +6199,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"The rendering back-end for Irrlicht.\n"
+"The rendering back-end.\n"
"A restart is required after changing this.\n"
"Note: On Android, stick with OGLES1 if unsure! App may fail to start "
"otherwise.\n"
@@ -5902,7 +6210,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"The sensitivity of the joystick axes for moving the\n"
-"ingame view frustum around."
+"in-game view frustum around."
msgstr ""
#: src/settings_translation_file.cpp
@@ -5996,6 +6304,10 @@ msgid "Touch screen threshold"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Tradeoffs for performance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Trees noise"
msgstr ""
@@ -6065,7 +6377,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Use mip mapping to scale textures. May slightly increase performance,\n"
+"Use mipmapping to scale textures. May slightly increase performance,\n"
"especially when using a high resolution texture pack.\n"
"Gamma correct downscaling is not supported."
msgstr ""
@@ -6178,7 +6490,7 @@ msgid "Viewing range"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Virtual joystick triggers aux button"
+msgid "Virtual joystick triggers Aux1 button"
msgstr ""
#: src/settings_translation_file.cpp
@@ -6249,6 +6561,10 @@ msgid "Waving plants"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Weblink color"
+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"
@@ -6269,23 +6585,15 @@ msgid ""
"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.\n"
+"memory. Powers of 2 are recommended. This setting is ONLY applied if\n"
+"bilinear/trilinear/anisotropic filtering is enabled.\n"
"This is also used as the base node texture size for world-aligned\n"
"texture autoscaling."
msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Whether FreeType fonts are used, requires FreeType support to be compiled "
-"in.\n"
-"If disabled, bitmap and XML vectors fonts are used instead."
-msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid ""
-"Whether nametag backgrounds should be shown by default.\n"
+"Whether name tag backgrounds should be shown by default.\n"
"Mods may still set a background."
msgstr ""
@@ -6327,7 +6635,7 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Width component of the initial window size."
+msgid "Width component of the initial window size. Ignored in fullscreen mode."
msgstr ""
#: src/settings_translation_file.cpp
@@ -6412,34 +6720,25 @@ msgid "Y-level of seabed."
msgstr ""
#: src/settings_translation_file.cpp
-msgid ""
-"ZLib compression level to use when saving mapblocks to disk.\n"
-"-1 - Zlib's default compression level\n"
-"0 - no compresson, fastest\n"
-"9 - best compression, slowest\n"
-"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)"
-msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid ""
-"ZLib compression level to use when sending mapblocks to the client.\n"
-"-1 - Zlib's default compression level\n"
-"0 - no compresson, fastest\n"
-"9 - best compression, slowest\n"
-"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)"
+msgid "cURL file download timeout"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "cURL file download timeout"
+msgid "cURL interactive timeout"
msgstr ""
#: src/settings_translation_file.cpp
msgid "cURL parallel limit"
msgstr ""
-#: src/settings_translation_file.cpp
-msgid "cURL timeout"
-msgstr ""
+#~ msgid "- Creative Mode: "
+#~ msgstr "- Radošais režīms: "
+
+#~ msgid "- Damage: "
+#~ msgstr "- BojÄjumi: "
+
+#~ msgid "Address / Port"
+#~ msgstr "Adrese / Ports"
#~ msgid "Are you sure to reset your singleplayer world?"
#~ msgstr ""
@@ -6458,12 +6757,21 @@ msgstr ""
#~ msgid "Configure"
#~ msgstr "Iestatīt"
+#~ msgid "Credits"
+#~ msgstr "Pateicības"
+
+#~ msgid "Damage enabled"
+#~ msgstr "BojÄjumi iespÄ“joti"
+
#~ msgid "Downloading and installing $1, please wait..."
#~ msgstr "LejuplÄdÄ“jas un instalÄ“jas $1, lÅ«dzu uzgaidiet..."
#~ msgid "Generate Normal Maps"
#~ msgstr "Izveidot normÄl-kartes"
+#~ msgid "Install: file: \"$1\""
+#~ msgstr "InstalÄcija: fails: “$1â€"
+
#~ msgid "Main"
#~ msgstr "GalvenÄ izvÄ“lne"
@@ -6479,6 +6787,9 @@ msgstr ""
#~ msgid "Minimap in surface mode, Zoom x4"
#~ msgstr "Minikarte virsmas režīmÄ, palielinÄjums x4"
+#~ msgid "Name / Password"
+#~ msgstr "VÄrds / Parole"
+
#~ msgid "Name/Password"
#~ msgstr "VÄrds/Parole"
@@ -6491,11 +6802,27 @@ msgstr ""
#~ msgid "Parallax Occlusion"
#~ msgstr "Tekstūru dziļums"
+#~ msgid "PvP enabled"
+#~ msgstr "PvP iespējots"
+
#~ msgid "Reset singleplayer world"
#~ msgstr "AtiestatÄ«t viena spÄ“lÄ“tÄja pasauli"
+#~ msgid "Special"
+#~ msgstr "SpeciÄlais"
+
#~ msgid "Start Singleplayer"
#~ msgstr "SÄkt viena spÄ“lÄ“tÄja spÄ“li"
+#~ msgid "To enable shaders the OpenGL driver needs to be used."
+#~ msgstr "Lai iespÄ“jotu Å¡eiderus, jÄizmanto OpenGL draiveris."
+
#~ msgid "Yes"
#~ msgstr "JÄ"
+
+#, fuzzy
+#~ msgid "You died."
+#~ msgstr "JÅ«s nomirÄt"
+
+#~ msgid "needs_fallback_font"
+#~ msgstr "no"
diff --git a/po/lzh/minetest.po b/po/lzh/minetest.po
new file mode 100644
index 000000000..0b3030538
--- /dev/null
+++ b/po/lzh/minetest.po
@@ -0,0 +1,6641 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the minetest package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: minetest\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2022-01-25 23:19+0100\n"
+"PO-Revision-Date: 2022-01-20 14:35+0000\n"
+"Last-Translator: Gao Tiesuan <yepifoas@666email.com>\n"
+"Language-Team: Chinese (Literary) <https://hosted.weblate.org/projects/"
+"minetest/minetest/lzh/>\n"
+"Language: lzh\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 4.11-dev\n"
+
+#: builtin/client/chatcommands.lua
+msgid "Clear the out chat queue"
+msgstr ""
+
+#: builtin/client/chatcommands.lua
+msgid "Empty command."
+msgstr "空令。"
+
+#: builtin/client/chatcommands.lua
+msgid "Exit to main menu"
+msgstr ""
+
+#: builtin/client/chatcommands.lua
+msgid "Invalid command: "
+msgstr ""
+
+#: builtin/client/chatcommands.lua
+msgid "Issued command: "
+msgstr "令之传者: "
+
+#: builtin/client/chatcommands.lua
+msgid "List online players"
+msgstr ""
+
+#: builtin/client/chatcommands.lua
+msgid "Online players: "
+msgstr ""
+
+#: builtin/client/chatcommands.lua
+msgid "The out chat queue is now empty."
+msgstr ""
+
+#: builtin/client/chatcommands.lua
+msgid "This command is disabled by server."
+msgstr ""
+
+#: builtin/client/death_formspec.lua src/client/game.cpp
+msgid "Respawn"
+msgstr "å¤ç”Ÿ"
+
+#: builtin/client/death_formspec.lua src/client/game.cpp
+msgid "You died"
+msgstr "尔死矣"
+
+#: builtin/common/chatcommands.lua
+msgid "Available commands:"
+msgstr ""
+
+#: builtin/common/chatcommands.lua
+msgid "Available commands: "
+msgstr ""
+
+#: builtin/common/chatcommands.lua
+msgid "Command not available: "
+msgstr ""
+
+#: builtin/common/chatcommands.lua
+msgid "Get help for commands"
+msgstr ""
+
+#: builtin/common/chatcommands.lua
+msgid ""
+"Use '.help <cmd>' to get more information, or '.help all' to list everything."
+msgstr ""
+
+#: builtin/common/chatcommands.lua
+msgid "[all | <cmd>]"
+msgstr ""
+
+#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp
+msgid "OK"
+msgstr ""
+
+#: builtin/fstk/ui.lua
+msgid "<none available>"
+msgstr ""
+
+#: builtin/fstk/ui.lua
+msgid "An error occurred in a Lua script:"
+msgstr ""
+
+#: builtin/fstk/ui.lua
+msgid "An error occurred:"
+msgstr ""
+
+#: builtin/fstk/ui.lua
+msgid "Main menu"
+msgstr ""
+
+#: builtin/fstk/ui.lua
+msgid "Reconnect"
+msgstr ""
+
+#: builtin/fstk/ui.lua
+msgid "The server has requested a reconnect:"
+msgstr ""
+
+#: 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 "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_contentstore.lua
+#: builtin/mainmenu/dlg_create_world.lua
+#: builtin/mainmenu/dlg_delete_content.lua
+#: builtin/mainmenu/dlg_delete_world.lua
+#: builtin/mainmenu/dlg_rename_modpack.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua src/client/keycode.cpp
+#: src/gui/guiConfirmRegistration.cpp src/gui/guiKeyChangeMenu.cpp
+#: src/gui/guiPasswordChange.cpp
+msgid "Cancel"
+msgstr ""
+
+#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/dlg_contentstore.lua
+#: builtin/mainmenu/tab_content.lua
+msgid "Dependencies:"
+msgstr ""
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "Disable all"
+msgstr ""
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "Disable modpack"
+msgstr ""
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "Enable all"
+msgstr ""
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "Enable modpack"
+msgstr ""
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid ""
+"Failed to enable mod \"$1\" as it contains disallowed characters. Only "
+"characters [a-z0-9_] are allowed."
+msgstr ""
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "Find More Mods"
+msgstr ""
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "Mod:"
+msgstr ""
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "No (optional) dependencies"
+msgstr ""
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "No game description provided."
+msgstr ""
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "No hard dependencies"
+msgstr ""
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "No modpack description provided."
+msgstr ""
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "No optional dependencies"
+msgstr ""
+
+#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_content.lua
+msgid "Optional dependencies:"
+msgstr ""
+
+#: builtin/mainmenu/dlg_config_world.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua src/gui/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_contentstore.lua
+msgid "\"$1\" already exists. Would you like to overwrite it?"
+msgstr ""
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "$1 and $2 dependencies will be installed."
+msgstr ""
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "$1 by $2"
+msgstr ""
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid ""
+"$1 downloading,\n"
+"$2 queued"
+msgstr ""
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "$1 downloading..."
+msgstr ""
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "$1 required dependencies could not be found."
+msgstr ""
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "$1 will be installed, and $2 dependencies will be skipped."
+msgstr ""
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "All packages"
+msgstr ""
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "Already installed"
+msgstr ""
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "Back to Main Menu"
+msgstr ""
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "Base Game:"
+msgstr ""
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "ContentDB is not available when Minetest was compiled without cURL"
+msgstr ""
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "Downloading..."
+msgstr ""
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "Failed to download $1"
+msgstr ""
+
+#: builtin/mainmenu/dlg_contentstore.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Games"
+msgstr ""
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "Install"
+msgstr ""
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "Install $1"
+msgstr ""
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "Install missing dependencies"
+msgstr ""
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "Install: Unsupported file type or broken archive"
+msgstr ""
+
+#: builtin/mainmenu/dlg_contentstore.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Mods"
+msgstr ""
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "No packages could be retrieved"
+msgstr ""
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "No results"
+msgstr ""
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "No updates"
+msgstr ""
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "Not found"
+msgstr ""
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "Overwrite"
+msgstr ""
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "Please check that the base game is correct."
+msgstr ""
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "Queued"
+msgstr ""
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "Texture packs"
+msgstr ""
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "Uninstall"
+msgstr ""
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "Update"
+msgstr ""
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "Update All [$1]"
+msgstr ""
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "View more information in a web browser"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "A world named \"$1\" already exists"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Additional terrain"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
+msgid "Altitude chill"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Altitude dry"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Biome blending"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Biomes"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Caverns"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Caves"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Create"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Decorations"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Download a game, 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
+msgid "Dungeons"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Flat terrain"
+msgstr "平地"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Floating landmasses in the sky"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Floatlands (experimental)"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
+msgid "Game"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Generate non-fractal terrain: Oceans and underground"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Hills"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Humid rivers"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Increases humidity around rivers"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Lakes"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Low humidity and high heat causes shallow or dry rivers"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
+msgid "Mapgen"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
+msgid "Mapgen flags"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Mapgen-specific flags"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Mountains"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Mud flow"
+msgstr "æ³¥æµ"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Network of tunnels and caves"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "No game selected"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Reduces heat with altitude"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Reduces humidity with altitude"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Rivers"
+msgstr "å·"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Sea level rivers"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Seed"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Smooth transition between biomes"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid ""
+"Structures appearing on the terrain (no effect on trees and jungle grass "
+"created by v6)"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Structures appearing on the terrain, typically trees and plants"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Temperate, Desert"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Temperate, Desert, Jungle"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Temperate, Desert, Jungle, Tundra, Taiga"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Terrain surface erosion"
+msgstr "地表之蚀"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Trees and jungle grass"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Vary river depth"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Very large caverns deep in the underground"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Warning: The 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 games installed."
+msgstr ""
+
+#: builtin/mainmenu/dlg_delete_content.lua
+msgid "Are you sure you want to delete \"$1\"?"
+msgstr ""
+
+#: builtin/mainmenu/dlg_delete_content.lua
+#: builtin/mainmenu/dlg_delete_world.lua builtin/mainmenu/tab_local.lua
+#: src/client/keycode.cpp
+msgid "Delete"
+msgstr ""
+
+#: builtin/mainmenu/dlg_delete_content.lua
+msgid "pkgmgr: failed to delete \"$1\""
+msgstr ""
+
+#: builtin/mainmenu/dlg_delete_content.lua
+msgid "pkgmgr: invalid path \"$1\""
+msgstr ""
+
+#: builtin/mainmenu/dlg_delete_world.lua
+msgid "Delete World \"$1\"?"
+msgstr ""
+
+#: builtin/mainmenu/dlg_rename_modpack.lua
+msgid "Accept"
+msgstr ""
+
+#: builtin/mainmenu/dlg_rename_modpack.lua
+msgid "Rename Modpack:"
+msgstr ""
+
+#: builtin/mainmenu/dlg_rename_modpack.lua
+msgid ""
+"This modpack has an explicit name given in its modpack.conf which will "
+"override any renaming here."
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "(No description of setting given)"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "2D Noise"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "< Back to Settings page"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Browse"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_settings.lua
+msgid "Disabled"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Edit"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Enabled"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Lacunarity"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Octaves"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua src/settings_translation_file.cpp
+msgid "Offset"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Persistence"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Please enter a valid integer."
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Please enter a valid number."
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Restore Default"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua src/settings_translation_file.cpp
+msgid "Scale"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_online.lua
+msgid "Search"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Select directory"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Select file"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Show technical names"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "The value must be at least $1."
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "The value must not be larger than $1."
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "X"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "X spread"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Y"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Y spread"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Z"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Z spread"
+msgstr ""
+
+#. ~ "absvalue" is a noise parameter flag.
+#. It is short for "absolute value".
+#. It can be enabled in noise settings in
+#. main menu -> "All Settings".
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "absvalue"
+msgstr ""
+
+#. ~ "defaults" is a noise parameter flag.
+#. It describes the default processing options
+#. for noise settings in main menu -> "All Settings".
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "defaults"
+msgstr ""
+
+#. ~ "eased" is a noise parameter flag.
+#. It is used to make the map smoother and
+#. can be enabled in noise settings in
+#. main menu -> "All Settings".
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "eased"
+msgstr ""
+
+#: builtin/mainmenu/pkgmgr.lua
+msgid "$1 (Enabled)"
+msgstr ""
+
+#: builtin/mainmenu/pkgmgr.lua
+msgid "$1 mods"
+msgstr ""
+
+#: builtin/mainmenu/pkgmgr.lua
+msgid "Failed to install $1 to $2"
+msgstr ""
+
+#: builtin/mainmenu/pkgmgr.lua
+msgid "Install Mod: Unable to find real mod name for: $1"
+msgstr ""
+
+#: builtin/mainmenu/pkgmgr.lua
+msgid "Install Mod: Unable to find suitable folder name for modpack $1"
+msgstr ""
+
+#: builtin/mainmenu/pkgmgr.lua
+msgid "Unable to find a valid mod or modpack"
+msgstr ""
+
+#: builtin/mainmenu/pkgmgr.lua
+msgid "Unable to install a $1 as a texture pack"
+msgstr ""
+
+#: builtin/mainmenu/pkgmgr.lua
+msgid "Unable to install a game as a $1"
+msgstr ""
+
+#: builtin/mainmenu/pkgmgr.lua
+msgid "Unable to install a mod as a $1"
+msgstr ""
+
+#: builtin/mainmenu/pkgmgr.lua
+msgid "Unable to install a modpack as a $1"
+msgstr ""
+
+#: builtin/mainmenu/serverlistmgr.lua src/client/game.cpp
+msgid "Loading..."
+msgstr ""
+
+#: builtin/mainmenu/serverlistmgr.lua
+msgid "Public server list is disabled"
+msgstr ""
+
+#: builtin/mainmenu/serverlistmgr.lua
+msgid "Try reenabling public serverlist and check your internet connection."
+msgstr ""
+
+#: builtin/mainmenu/tab_about.lua
+msgid "About"
+msgstr ""
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Active Contributors"
+msgstr ""
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Active renderer:"
+msgstr ""
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Core Developers"
+msgstr ""
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Open User Data Directory"
+msgstr ""
+
+#: builtin/mainmenu/tab_about.lua
+msgid ""
+"Opens the directory that contains user-provided worlds, games, mods,\n"
+"and texture packs in a file manager / explorer."
+msgstr ""
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Previous Contributors"
+msgstr ""
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Previous Core Developers"
+msgstr ""
+
+#: builtin/mainmenu/tab_content.lua
+msgid "Browse online content"
+msgstr ""
+
+#: builtin/mainmenu/tab_content.lua
+msgid "Content"
+msgstr ""
+
+#: builtin/mainmenu/tab_content.lua
+msgid "Disable Texture Pack"
+msgstr ""
+
+#: builtin/mainmenu/tab_content.lua
+msgid "Information:"
+msgstr ""
+
+#: builtin/mainmenu/tab_content.lua
+msgid "Installed Packages:"
+msgstr ""
+
+#: builtin/mainmenu/tab_content.lua
+msgid "No dependencies."
+msgstr ""
+
+#: builtin/mainmenu/tab_content.lua
+msgid "No package description available"
+msgstr ""
+
+#: builtin/mainmenu/tab_content.lua
+msgid "Rename"
+msgstr ""
+
+#: builtin/mainmenu/tab_content.lua
+msgid "Uninstall Package"
+msgstr ""
+
+#: builtin/mainmenu/tab_content.lua
+msgid "Use Texture Pack"
+msgstr ""
+
+#: builtin/mainmenu/tab_local.lua
+msgid "Announce Server"
+msgstr ""
+
+#: builtin/mainmenu/tab_local.lua
+msgid "Bind Address"
+msgstr ""
+
+#: builtin/mainmenu/tab_local.lua
+msgid "Creative Mode"
+msgstr ""
+
+#: builtin/mainmenu/tab_local.lua
+msgid "Enable Damage"
+msgstr ""
+
+#: builtin/mainmenu/tab_local.lua
+msgid "Host Game"
+msgstr ""
+
+#: builtin/mainmenu/tab_local.lua
+msgid "Host Server"
+msgstr ""
+
+#: builtin/mainmenu/tab_local.lua
+msgid "Install games from ContentDB"
+msgstr ""
+
+#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
+msgid "Name"
+msgstr ""
+
+#: builtin/mainmenu/tab_local.lua
+msgid "New"
+msgstr ""
+
+#: builtin/mainmenu/tab_local.lua
+msgid "No world created or selected!"
+msgstr ""
+
+#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
+msgid "Password"
+msgstr ""
+
+#: builtin/mainmenu/tab_local.lua
+msgid "Play Game"
+msgstr ""
+
+#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
+msgid "Port"
+msgstr ""
+
+#: builtin/mainmenu/tab_local.lua
+msgid "Select Mods"
+msgstr ""
+
+#: builtin/mainmenu/tab_local.lua
+msgid "Select World:"
+msgstr ""
+
+#: builtin/mainmenu/tab_local.lua
+msgid "Server Port"
+msgstr ""
+
+#: builtin/mainmenu/tab_local.lua
+msgid "Start Game"
+msgstr ""
+
+#: builtin/mainmenu/tab_online.lua
+msgid "Address"
+msgstr ""
+
+#: builtin/mainmenu/tab_online.lua src/client/keycode.cpp
+msgid "Clear"
+msgstr ""
+
+#: builtin/mainmenu/tab_online.lua
+msgid "Connect"
+msgstr ""
+
+#: builtin/mainmenu/tab_online.lua
+msgid "Creative mode"
+msgstr ""
+
+#. ~ PvP = Player versus Player
+#: builtin/mainmenu/tab_online.lua
+msgid "Damage / PvP"
+msgstr ""
+
+#: builtin/mainmenu/tab_online.lua
+msgid "Del. Favorite"
+msgstr ""
+
+#: builtin/mainmenu/tab_online.lua
+msgid "Favorites"
+msgstr ""
+
+#: builtin/mainmenu/tab_online.lua
+msgid "Incompatible Servers"
+msgstr ""
+
+#: builtin/mainmenu/tab_online.lua
+msgid "Join Game"
+msgstr ""
+
+#: builtin/mainmenu/tab_online.lua
+msgid "Ping"
+msgstr ""
+
+#: builtin/mainmenu/tab_online.lua
+msgid "Public Servers"
+msgstr ""
+
+#: builtin/mainmenu/tab_online.lua
+msgid "Refresh"
+msgstr ""
+
+#: builtin/mainmenu/tab_online.lua
+msgid "Server Description"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "2x"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "3D Clouds"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "4x"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "8x"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "All Settings"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Antialiasing:"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Autosave Screen Size"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Bilinear Filter"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua src/client/game.cpp
+msgid "Change Keys"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Connected Glass"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
+msgid "Dynamic shadows"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Dynamic shadows: "
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Fancy Leaves"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "High"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Low"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Medium"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Mipmap"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Mipmap + Aniso. Filter"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "No Filter"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "No Mipmap"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Node Highlighting"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Node Outlining"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "None"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Opaque Leaves"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Opaque Water"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Particles"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Screen:"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Settings"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
+msgid "Shaders"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Shaders (experimental)"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Shaders (unavailable)"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Simple Leaves"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Smooth Lighting"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Texturing:"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
+msgid "Tone Mapping"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Touchthreshold: (px)"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Trilinear Filter"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Ultra High"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Very Low"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Waving Leaves"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Waving Liquids"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Waving Plants"
+msgstr ""
+
+#: src/client/client.cpp src/client/game.cpp
+msgid "Connection timed out."
+msgstr ""
+
+#: src/client/client.cpp
+msgid "Done!"
+msgstr ""
+
+#: src/client/client.cpp
+msgid "Initializing nodes"
+msgstr ""
+
+#: src/client/client.cpp
+msgid "Initializing nodes..."
+msgstr ""
+
+#: src/client/client.cpp
+msgid "Loading textures..."
+msgstr ""
+
+#: src/client/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 "Please choose a name!"
+msgstr ""
+
+#: src/client/clientlauncher.cpp
+msgid "Provided password file failed to open: "
+msgstr ""
+
+#: src/client/clientlauncher.cpp
+msgid "Provided world path doesn't exist: "
+msgstr ""
+
+#: src/client/game.cpp
+msgid ""
+"\n"
+"Check debug.txt for details."
+msgstr ""
+
+#: src/client/game.cpp
+msgid "- Address: "
+msgstr ""
+
+#: src/client/game.cpp
+msgid "- Mode: "
+msgstr ""
+
+#: src/client/game.cpp
+msgid "- Port: "
+msgstr ""
+
+#: src/client/game.cpp
+msgid "- Public: "
+msgstr ""
+
+#. ~ PvP = Player versus Player
+#: src/client/game.cpp
+msgid "- PvP: "
+msgstr ""
+
+#: src/client/game.cpp
+msgid "- Server Name: "
+msgstr ""
+
+#: src/client/game.cpp
+msgid "A serialization error occurred:"
+msgstr ""
+
+#: src/client/game.cpp
+#, c-format
+msgid "Access denied. Reason: %s"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Automatic forward disabled"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Automatic forward enabled"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Block bounds hidden"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Block bounds shown for all blocks"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Block bounds shown for current block"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Block bounds shown for nearby blocks"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Camera update disabled"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Camera update enabled"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Can't show block bounds (need 'basic_debug' privilege)"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Change Password"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Cinematic mode disabled"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Cinematic mode enabled"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Client disconnected"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Client side scripting is disabled"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Connecting to server..."
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Connection failed for unknown reason"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Continue"
+msgstr ""
+
+#: src/client/game.cpp
+#, c-format
+msgid ""
+"Controls:\n"
+"- %s: move forwards\n"
+"- %s: move backwards\n"
+"- %s: move left\n"
+"- %s: move right\n"
+"- %s: jump/climb up\n"
+"- %s: dig/punch\n"
+"- %s: place/use\n"
+"- %s: sneak/climb down\n"
+"- %s: drop item\n"
+"- %s: inventory\n"
+"- Mouse: turn/look\n"
+"- Mouse wheel: select item\n"
+"- %s: chat\n"
+msgstr ""
+
+#: src/client/game.cpp
+#, c-format
+msgid "Couldn't resolve address: %s"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Creating client..."
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Creating server..."
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Debug info and profiler graph hidden"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Debug info shown"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Debug info, profiler graph, and wireframe hidden"
+msgstr ""
+
+#: src/client/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/client/game.cpp
+msgid "Disabled unlimited viewing range"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Enabled unlimited viewing range"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Exit to Menu"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Exit to OS"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Fast mode disabled"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Fast mode enabled"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Fast mode enabled (note: no 'fast' privilege)"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Fly mode disabled"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Fly mode enabled"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Fly mode enabled (note: no 'fly' privilege)"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Fog disabled"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Fog enabled"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Game info:"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Game paused"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Hosting server"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Item definitions..."
+msgstr ""
+
+#: src/client/game.cpp
+msgid "KiB/s"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Media..."
+msgstr ""
+
+#: src/client/game.cpp
+msgid "MiB/s"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Minimap currently disabled by game or mod"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Multiplayer"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Noclip mode disabled"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Noclip mode enabled"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Noclip mode enabled (note: no 'noclip' privilege)"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Node definitions..."
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Off"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "On"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Pitch move mode disabled"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Pitch move mode enabled"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Profiler graph shown"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Remote server"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Resolving address..."
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Shutting down..."
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Singleplayer"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Sound Volume"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Sound muted"
+msgstr "消音"
+
+#: src/client/game.cpp
+msgid "Sound system is disabled"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Sound system is not supported on this build"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Sound unmuted"
+msgstr ""
+
+#: src/client/game.cpp
+#, c-format
+msgid "The server is probably running a different version of %s."
+msgstr ""
+
+#: src/client/game.cpp
+#, c-format
+msgid "Unable to connect to %s because IPv6 is disabled"
+msgstr ""
+
+#: src/client/game.cpp
+#, c-format
+msgid "Unable to listen on %s because IPv6 is disabled"
+msgstr ""
+
+#: src/client/game.cpp
+#, c-format
+msgid "Viewing range changed to %d"
+msgstr ""
+
+#: src/client/game.cpp
+#, c-format
+msgid "Viewing range is at maximum: %d"
+msgstr ""
+
+#: src/client/game.cpp
+#, c-format
+msgid "Viewing range is at minimum: %d"
+msgstr ""
+
+#: src/client/game.cpp
+#, c-format
+msgid "Volume changed to %d%%"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Wireframe shown"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Zoom currently disabled by game or mod"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "ok"
+msgstr ""
+
+#: src/client/gameui.cpp
+msgid "Chat hidden"
+msgstr ""
+
+#: src/client/gameui.cpp
+msgid "Chat shown"
+msgstr ""
+
+#: src/client/gameui.cpp
+msgid "HUD hidden"
+msgstr ""
+
+#: src/client/gameui.cpp
+msgid "HUD shown"
+msgstr ""
+
+#: src/client/gameui.cpp
+msgid "Profiler hidden"
+msgstr ""
+
+#: src/client/gameui.cpp
+#, c-format
+msgid "Profiler shown (page %d of %d)"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Apps"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Backspace"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Caps Lock"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Control"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Down"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "End"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Erase EOF"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Execute"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Help"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Home"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "IME Accept"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "IME Convert"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "IME Escape"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "IME Mode Change"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "IME Nonconvert"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Insert"
+msgstr ""
+
+#: src/client/keycode.cpp src/gui/guiKeyChangeMenu.cpp
+msgid "Left"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Left Button"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Left Control"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Left Menu"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Left Shift"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Left Windows"
+msgstr ""
+
+#. ~ Key name, common on Windows keyboards
+#: src/client/keycode.cpp
+msgid "Menu"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Middle Button"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Num Lock"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Numpad *"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Numpad +"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Numpad -"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Numpad ."
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Numpad /"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Numpad 0"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Numpad 1"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Numpad 2"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Numpad 3"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Numpad 4"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Numpad 5"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Numpad 6"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Numpad 7"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Numpad 8"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Numpad 9"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "OEM Clear"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Page down"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Page up"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Pause"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Play"
+msgstr ""
+
+#. ~ "Print screen" key
+#: src/client/keycode.cpp
+msgid "Print"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Return"
+msgstr ""
+
+#: src/client/keycode.cpp src/gui/guiKeyChangeMenu.cpp
+msgid "Right"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Right Button"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Right Control"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Right Menu"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Right Shift"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Right Windows"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Scroll Lock"
+msgstr ""
+
+#. ~ Key name
+#: src/client/keycode.cpp
+msgid "Select"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Shift"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Sleep"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Snapshot"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Space"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Tab"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Up"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "X Button 1"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "X Button 2"
+msgstr ""
+
+#: src/client/keycode.cpp src/gui/guiKeyChangeMenu.cpp
+msgid "Zoom"
+msgstr ""
+
+#: src/client/minimap.cpp
+msgid "Minimap hidden"
+msgstr ""
+
+#: src/client/minimap.cpp
+#, c-format
+msgid "Minimap in radar mode, Zoom x%d"
+msgstr ""
+
+#: src/client/minimap.cpp
+#, c-format
+msgid "Minimap in surface mode, Zoom x%d"
+msgstr ""
+
+#: src/client/minimap.cpp
+msgid "Minimap in texture mode"
+msgstr ""
+
+#: src/gui/guiChatConsole.cpp
+msgid "Failed to open webpage"
+msgstr ""
+
+#: src/gui/guiChatConsole.cpp
+msgid "Opening webpage"
+msgstr ""
+
+#: src/gui/guiConfirmRegistration.cpp src/gui/guiPasswordChange.cpp
+msgid "Passwords do not match!"
+msgstr ""
+
+#: src/gui/guiConfirmRegistration.cpp
+msgid "Register and Join"
+msgstr ""
+
+#: src/gui/guiConfirmRegistration.cpp
+#, c-format
+msgid ""
+"You are about to join this server with the name \"%s\" for the first time.\n"
+"If you proceed, a new account using your credentials will be created on this "
+"server.\n"
+"Please retype your password and click 'Register and Join' to confirm account "
+"creation, or click 'Cancel' to abort."
+msgstr ""
+
+#: src/gui/guiFormSpecMenu.cpp
+msgid "Proceed"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "\"Aux1\" = climb down"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Autoforward"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp src/settings_translation_file.cpp
+msgid "Automatic jumping"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Aux1"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Backward"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Block bounds"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Change camera"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Chat"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Command"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Console"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Dec. range"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Dec. volume"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Double tap \"jump\" to toggle fly"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Drop"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Forward"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Inc. range"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Inc. volume"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Inventory"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Jump"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Key already in use"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Local command"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Mute"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Next item"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Prev. item"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Range select"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp src/settings_translation_file.cpp
+msgid "Screenshot"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Sneak"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Toggle HUD"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Toggle chat log"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Toggle fast"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Toggle fly"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Toggle fog"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Toggle minimap"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Toggle noclip"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Toggle pitchmove"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "press key"
+msgstr ""
+
+#: src/gui/guiPasswordChange.cpp
+msgid "Change"
+msgstr ""
+
+#: src/gui/guiPasswordChange.cpp
+msgid "Confirm Password"
+msgstr ""
+
+#: src/gui/guiPasswordChange.cpp
+msgid "New Password"
+msgstr ""
+
+#: src/gui/guiPasswordChange.cpp
+msgid "Old Password"
+msgstr ""
+
+#: src/gui/guiVolumeChange.cpp
+msgid "Exit"
+msgstr ""
+
+#: src/gui/guiVolumeChange.cpp
+msgid "Muted"
+msgstr ""
+
+#: src/gui/guiVolumeChange.cpp
+#, c-format
+msgid "Sound Volume: %d%%"
+msgstr ""
+
+#. ~ Imperative, as in "Enter/type in text".
+#. Don't forget the space.
+#: src/gui/modalMenu.cpp
+msgid "Enter "
+msgstr ""
+
+#. ~ DO NOT TRANSLATE THIS LITERALLY!
+#. This is a special string which needs to contain the translation's
+#. language code (e.g. "de" for German).
+#: src/network/clientpackethandler.cpp src/script/lua_api/l_client.cpp
+msgid "LANG_CODE"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"(Android) Fixes the position of virtual joystick.\n"
+"If disabled, virtual joystick will center to first-touch's position."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"(Android) Use virtual joystick to trigger \"Aux1\" button.\n"
+"If enabled, virtual joystick will also tap \"Aux1\" button when out of main "
+"circle."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"(X,Y,Z) offset of fractal from world center in units of 'scale'.\n"
+"Can be used to move a desired point to (0, 0) to create a\n"
+"suitable spawn point, or to allow 'zooming in' on a desired\n"
+"point by increasing 'scale'.\n"
+"The default is tuned for a suitable spawn point for Mandelbrot\n"
+"sets with default parameters, it may need altering in other\n"
+"situations.\n"
+"Range roughly -2 to 2. Multiply by 'scale' for offset in nodes."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"(X,Y,Z) scale of fractal in nodes.\n"
+"Actual fractal size will be 2 to 3 times larger.\n"
+"These numbers can be made very large, the fractal does\n"
+"not have to fit inside the world.\n"
+"Increase these to 'zoom' into the detail of the fractal.\n"
+"Default is for a vertically-squashed shape suitable for\n"
+"an island, set all 3 numbers equal for the raw shape."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "2D noise that controls the shape/size of ridged mountains."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "2D noise that controls the shape/size of rolling hills."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "2D noise that controls the shape/size of step mountains."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "2D noise that controls the size/occurrence of ridged mountain ranges."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "2D noise that controls the size/occurrence of rolling hills."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "2D noise that controls the size/occurrence of step mountain ranges."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "2D noise that locates the river valleys and channels."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "3D clouds"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "3D mode"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "3D mode parallax strength"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "3D noise defining giant caverns."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"3D noise defining mountain structure and height.\n"
+"Also defines structure of floatland mountain terrain."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"3D noise defining structure of floatlands.\n"
+"If altered from the default, the noise 'scale' (0.7 by default) may need\n"
+"to be adjusted, as floatland tapering functions best when this noise has\n"
+"a value range of approximately -2.0 to 2.0."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "3D noise defining structure of river canyon walls."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "3D noise defining terrain."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "3D noise for mountain overhangs, cliffs, etc. Usually small variations."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "3D noise that determines number of dungeons per mapchunk."
+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.\n"
+"- crossview: Cross-eyed 3d\n"
+"- pageflip: quadbuffer based 3d.\n"
+"Note that the interlaced mode requires shaders to be enabled."
+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 "ABM interval"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "ABM time budget"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Absolute limit of queued blocks to emerge"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Acceleration in air"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Acceleration of gravity, in nodes per second per second."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Active Block Modifiers"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Active block management interval"
+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 "Adds particles when digging a node."
+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 detected display density, used for scaling UI elements."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, c-format
+msgid ""
+"Adjusts the density of the floatland layer.\n"
+"Increase value to increase density. Can be positive or negative.\n"
+"Value = 0.0: 50% of volume is floatland.\n"
+"Value = 2.0 (can be higher depending on 'mgv7_np_floatland', always test\n"
+"to be sure) creates a solid floatland layer."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Advanced"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Alters the light curve by applying 'gamma correction' to it.\n"
+"Higher values make middle and lower light levels brighter.\n"
+"Value '1.0' leaves the light curve unaltered.\n"
+"This only has significant effect on daylight and artificial\n"
+"light, it has very little effect on natural night light."
+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 "Amount of messages a player may send per 10 seconds."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Amplifies the valleys."
+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."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Append item name"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Append item name to tooltip."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Apple trees noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Arm inertia"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Arm inertia, gives a more realistic movement of\n"
+"the arm when the camera moves."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Ask to reconnect after crash"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"At this distance the server will aggressively optimize which blocks are sent "
+"to\n"
+"clients.\n"
+"Small values potentially improve performance a lot, at the expense of "
+"visible\n"
+"rendering glitches (some blocks will not be rendered under water and in "
+"caves,\n"
+"as well as sometimes on land).\n"
+"Setting this to a value greater than max_block_send_distance disables this\n"
+"optimization.\n"
+"Stated in mapblocks (16 nodes)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Automatic forward key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Automatically jump up single-node obstacles."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Automatically report to the serverlist."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Autosave screen size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Autoscaling mode"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Aux1 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Aux1 key for climbing/descending"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Backward key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Base ground level"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Base terrain height."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Basic"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Basic privileges"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Beach noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Beach noise threshold"
+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 "Biome API temperature and humidity noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Biome noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Block send optimize distance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Bold and italic font path"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Bold and italic monospace font path"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Bold font path"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Bold monospace font path"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Build inside player"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Builtin"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Camera 'near clipping plane' distance in nodes, between 0 and 0.25\n"
+"Only works on GLES platforms. Most users will not need to change this.\n"
+"Increasing can reduce artifacting on weaker GPUs.\n"
+"0.1 = Default, 0.25 = Good value for weaker tablets."
+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 "Cave noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Cave noise #1"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Cave noise #2"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Cave width"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Cave1 noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Cave2 noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Cavern limit"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Cavern noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Cavern taper"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Cavern threshold"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Cavern upper limit"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Center of light curve boost range.\n"
+"Where 0.0 is minimum light level, 1.0 is maximum light level."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Chat command time message threshold"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Chat commands"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Chat font size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Chat key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Chat log level"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Chat message count limit"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Chat message format"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Chat message kick threshold"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Chat message max length"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Chat toggle key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Chat weblinks"
+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 ""
+"Clickable weblinks (middle-click or Ctrl+left-click) enabled in chat console "
+"output."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Client"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Client and Server"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Client modding"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Client side modding restrictions"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Client side node lookup range restriction"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Climbing speed"
+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 "Colored shadows"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Comma-separated list of flags to hide in the content repository.\n"
+"\"nonfree\" can be used to hide packages which do not qualify as 'free "
+"software',\n"
+"as defined by the Free Software Foundation.\n"
+"You can also specify content ratings.\n"
+"These flags are independent from Minetest versions,\n"
+"so see a full list at https://content.minetest.net/help/content_flags/"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Comma-separated list of mods that are allowed to access HTTP APIs, which\n"
+"allow them to upload and download data to/from the internet."
+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 ""
+"Compression level to use when saving mapblocks to disk.\n"
+"-1 - use default compression level\n"
+"0 - least compression, fastest\n"
+"9 - best compression, slowest"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Compression level to use when sending mapblocks to the client.\n"
+"-1 - use default compression level\n"
+"0 - least compression, fastest\n"
+"9 - best compression, slowest"
+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 height"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "ContentDB Flag Blacklist"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "ContentDB Max Concurrent Downloads"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "ContentDB URL"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Continuous forward"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Continuous forward movement, toggled by autoforward key.\n"
+"Press the autoforward key again or the backwards movement to disable."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Controls"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Controls length of day/night cycle.\n"
+"Examples:\n"
+"72 = 20min, 360 = 4min, 1 = 24hour, 0 = day/night/whatever stays unchanged."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Controls sinking speed in liquid."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Controls steepness/depth of lake depressions."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Controls steepness/height of hills."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Controls width of tunnels, a smaller value creates wider tunnels.\n"
+"Value >= 10.0 completely disables generation of tunnels and avoids the\n"
+"intensive noise calculations."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Crash message"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Creative"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Crosshair alpha"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Crosshair alpha (opaqueness, between 0 and 255).\n"
+"This also applies to the object crosshair."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Crosshair color"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Crosshair color (R,G,B).\n"
+"Also controls the object crosshair color"
+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 file size threshold"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Debug log level"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Dec. volume key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Decrease this to increase liquid resistance to movement."
+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 report format"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Default stack size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Define shadow filtering quality.\n"
+"This simulates the soft shadows effect by applying a PCF or Poisson disk\n"
+"but also uses more resources."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Defines areas where trees have apples."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Defines areas with sandy beaches."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Defines distribution of higher terrain and steepness of cliffs."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Defines distribution of higher terrain."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Defines full size of caverns, smaller values create larger caverns."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Defines large-scale river channel structure."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Defines location and terrain of optional hills and lakes."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Defines the base ground level."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Defines the depth of the river channel."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Defines the maximal player transfer distance in blocks (0 = unlimited)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Defines the width of the river channel."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Defines the width of the river valley."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Defines tree areas and tree density."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Delay between mesh updates on the client in ms. Increasing this will slow\n"
+"down the rate of mesh updates, thus reducing jitter on slower clients."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Delay in sending blocks after building"
+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 "Depth below which you'll find giant caverns."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Depth below which you'll find large caves."
+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 "Desert noise threshold"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Deserts occur when np_biome exceeds this value.\n"
+"When the 'snowbiomes' flag is enabled, this is ignored."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Desynchronize block animation"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Dig key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Digging particles"
+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 "Display Density Scaling Factor"
+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 information."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Dungeon maximum Y"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Dungeon minimum Y"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Dungeon noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable IPv6 support (for both client and server).\n"
+"Required for IPv6 connections to work at all."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable Lua modding support on client.\n"
+"This support is experimental and API can change."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable Poisson disk filtering.\n"
+"On true uses Poisson disk to make \"soft shadows\". Otherwise uses PCF "
+"filtering."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable colored shadows.\n"
+"On true translucent nodes cast colored shadows. This is expensive."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Enable console window"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Enable creative mode for all players"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Enable joysticks"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Enable mod channels support."
+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 register confirmation"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable register confirmation when connecting to server.\n"
+"If disabled, new account will be registered automatically."
+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 vertex buffer objects.\n"
+"This should greatly improve graphics performance."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable view bobbing and amount of 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 ""
+"Enable/disable running an IPv6 server.\n"
+"Ignored if bind_address is set.\n"
+"Needs enable_ipv6 to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enables Hable's 'Uncharted 2' filmic tone mapping.\n"
+"Simulates the tone curve of photographic film and how this approximates the\n"
+"appearance of high dynamic range images. Mid-range contrast is slightly\n"
+"enhanced, highlights and shadows are gradually compressed."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Enables animation of inventory items."
+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 the sound system.\n"
+"If disabled, this completely disables all sounds everywhere and the in-game\n"
+"sound controls will be non-functional.\n"
+"Changing this setting requires a restart."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enables tradeoffs that reduce CPU load or increase rendering performance\n"
+"at the expense of minor visual glitches that do not impact game playability."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Engine profiling data print interval"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Entity methods"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Exponent of the floatland tapering. Alters the tapering behaviour.\n"
+"Value = 1.0 creates a uniform, linear tapering.\n"
+"Values > 1.0 create a smooth tapering suitable for the default separated\n"
+"floatlands.\n"
+"Values < 1.0 (for example 0.25) create a more defined surface level with\n"
+"flatter lowlands, suitable for a solid floatland layer."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "FPS when unfocused or paused"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "FSAA"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Factor noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fall bobbing factor"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fallback font path"
+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 the \"Aux1\" key).\n"
+"This requires the \"fast\" privilege on the server."
+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\n"
+"Multiplayer Tab."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Filler depth"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Filler depth noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Filmic tone mapping"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Filtered textures can blend RGB values with fully-transparent neighbors,\n"
+"which PNG optimizers usually discard, often resulting in dark or\n"
+"light edges to transparent textures. Apply a filter to clean that up\n"
+"at texture load time. This is automatically enabled if mipmapping is enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Filtering"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "First of 4 2D noises that together define hill/mountain range height."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "First of two 3D noises that together define tunnels."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fixed map seed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fixed virtual joystick"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland density"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland maximum Y"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland minimum Y"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland taper exponent"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland tapering distance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland water level"
+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 start"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fog toggle key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Font bold by default"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Font italic by default"
+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 size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Font size divisible by"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Font size of the default font where 1 unit = 1 pixel at 96 DPI"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Font size of the monospace font where 1 unit = 1 pixel at 96 DPI"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Font size of the recent chat text and chat prompt in point (pt).\n"
+"Value 0 will use the default font size."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"For pixel-style fonts that do not scale well, this ensures that font sizes "
+"used\n"
+"with this font will always be divisible by this value, in pixels. For "
+"instance,\n"
+"a pixel font 16 pixels tall should have this set to 16, so it will only ever "
+"be\n"
+"sized 16, 32, 48, etc., so a mod requesting a size of 25 will get 32."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Format of player chat messages. The following strings are valid "
+"placeholders:\n"
+"@name, @message, @timestamp (optional)"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Format of screenshots."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Formspec Default Background Color"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Formspec Default Background Opacity"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Formspec Full-Screen Background Color"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Formspec Full-Screen Background Opacity"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Formspec default background color (R,G,B)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Formspec default background opacity (between 0 and 255)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Formspec full-screen background color (R,G,B)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Formspec full-screen background opacity (between 0 and 255)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Forward key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fourth of 4 2D noises that together define hill/mountain range height."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fractal type"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fraction of the visible distance at which fog starts to be rendered"
+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).\n"
+"\n"
+"Setting this larger than active_block_range will also cause the server\n"
+"to maintain active objects up to this distance in the direction the\n"
+"player is looking. (This can avoid mobs suddenly disappearing from view)"
+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 "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 "Global callbacks"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Global map generation attributes.\n"
+"In Mapgen v6 the 'decorations' flag controls all decorations except trees\n"
+"and jungle grass, in all other mapgens this flag controls all decorations."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Gradient of light curve at maximum light level.\n"
+"Controls the contrast of the highest light levels."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Gradient of light curve at minimum light level.\n"
+"Controls the contrast of the lowest light levels."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Graphics"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Gravity"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Ground level"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Ground noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "HTTP mods"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "HUD scale factor"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "HUD toggle key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Handling for deprecated Lua API calls:\n"
+"- none: Do not log deprecated calls\n"
+"- log: mimic and log backtrace of deprecated call (default).\n"
+"- error: abort on usage of deprecated call (suggested for mod developers)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Have the profiler instrument itself:\n"
+"* Instrument an empty function.\n"
+"This estimates the overhead, that instrumentation is adding (+1 function "
+"call).\n"
+"* Instrument the sampler being used to update the statistics."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Heat blend noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Heat noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Height component of the initial window size. Ignored in fullscreen mode."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Height noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Height select noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hill steepness"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hill threshold"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hilliness1 noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hilliness2 noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hilliness3 noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hilliness4 noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Homepage of server, to be displayed in the serverlist."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Horizontal acceleration in air when jumping or falling,\n"
+"in nodes per second per second."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Horizontal and vertical acceleration in fast mode,\n"
+"in nodes per second per second."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Horizontal and vertical acceleration on ground or when climbing,\n"
+"in nodes per second per second."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar next key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar previous key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 1 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 10 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 11 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 12 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 13 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 14 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 15 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 16 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 17 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 18 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 19 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 2 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 20 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 21 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 22 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 23 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 24 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 25 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 26 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 27 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 28 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 29 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 3 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 30 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 31 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 32 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 4 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 5 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 6 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 7 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 8 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 9 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "How deep to make rivers."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"How fast liquid waves will move. Higher = faster.\n"
+"If negative, liquid waves will move backwards.\n"
+"Requires waving liquids to be enabled."
+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 "How wide to make rivers."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Humidity blend noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Humidity noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Humidity variation for biomes."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "IPv6"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "IPv6 server"
+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, \"Aux1\" key is used to fly fast if both fly and fast mode are\n"
+"enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"If enabled the server will perform map block occlusion culling based on\n"
+"on the eye position of the player. This can reduce the number of blocks\n"
+"sent to the client 50-80%. The client will not longer receive most "
+"invisible\n"
+"so that the utility of noclip mode is reduced."
+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 \"noclip\" privilege on the server."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"If enabled, \"Aux1\" key instead of \"Sneak\" key is used for climbing down "
+"and\n"
+"descending."
+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, makes move directions relative to the player's pitch when flying "
+"or swimming."
+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 the CSM restriction for node range is enabled, get_node calls are "
+"limited\n"
+"to this distance from the player to the node."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"If the execution of a chat command takes longer than this specified time in\n"
+"seconds, add the time information to the chat command message"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"If the file size of debug.txt exceeds the number of megabytes specified in\n"
+"this setting when it is opened, the file is moved to debug.txt.1,\n"
+"deleting an older debug.txt.1 if it exists.\n"
+"debug.txt is only moved if this setting is positive."
+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 "In-game chat console height, between 0.1 (10%) and 1.0 (100%)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Inc. volume key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Initial vertical speed when jumping, in nodes per second."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Instrument builtin.\n"
+"This is usually only needed by core/builtin contributors"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Instrument chat commands on registration."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Instrument global callback functions on registration.\n"
+"(anything you pass to a minetest.register_*() function)"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Instrument the action function of Active Block Modifiers on registration."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Instrument the action function of Loading Block Modifiers on registration."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Instrument the methods of entities on registration."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Instrumentation"
+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 items animations"
+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 "Italic font path"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Italic monospace font path"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Item entity TTL"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Iterations"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Iterations of the recursive function.\n"
+"Increasing this increases the amount of fine detail, but also\n"
+"increases processing load.\n"
+"At iterations = 20 this mapgen has a similar load to mapgen V7."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Joystick ID"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Joystick button repetition interval"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Joystick dead zone"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Joystick frustum sensitivity"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Joystick type"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Julia set only.\n"
+"W component of hypercomplex constant.\n"
+"Alters the shape of the fractal.\n"
+"Has no effect on 3D fractals.\n"
+"Range roughly -2 to 2."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Julia set only.\n"
+"X component of hypercomplex constant.\n"
+"Alters the shape of the fractal.\n"
+"Range roughly -2 to 2."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Julia set only.\n"
+"Y component of hypercomplex constant.\n"
+"Alters the shape of the fractal.\n"
+"Range roughly -2 to 2."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Julia set only.\n"
+"Z component of hypercomplex constant.\n"
+"Alters the shape of the fractal.\n"
+"Range roughly -2 to 2."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Julia w"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Julia x"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Julia y"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Julia z"
+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.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for decreasing the volume.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for digging.\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.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for increasing the volume.\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"
+"Will also disable autoforward, when active.\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 muting the game.\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 to type local 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 placing.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 11th hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 12th hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 13th hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 14th hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 15th hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 16th hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 17th hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 18th hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 19th hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 20th hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 21st hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 22nd hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 23rd hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 24th hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 25th hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 26th hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 27th hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 28th hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 29th hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 30th hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 31st hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 32nd hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the eighth hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the fifth hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the first hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the fourth hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the next item in the hotbar.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the ninth hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the previous item in the hotbar.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the second hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the seventh hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the sixth hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the tenth hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the third hotbar slot.\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 autoforward.\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 pitch move mode.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling the camera 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 chat.\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 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 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 large chat console.\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 to use view zoom when possible.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Kick players who sent more than X messages per 10 seconds."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Lake steepness"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Lake threshold"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Language"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Large cave depth"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Large cave maximum number"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Large cave minimum number"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Large cave proportion flooded"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Large chat console key"
+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\n"
+"network."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Length of liquid waves.\n"
+"Requires waving liquids to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Length of time between Active Block Modifier (ABM) execution cycles"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Length of time between NodeTimer execution cycles"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Length of time between active block management cycles"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Level of logging to be written to debug.txt:\n"
+"- <nothing> (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 "Light curve boost"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Light curve boost center"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Light curve boost spread"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Light curve gamma"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Light curve high gradient"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Light curve low gradient"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Limit of map generation, in nodes, in all 6 directions from (0, 0, 0).\n"
+"Only mapchunks completely within the mapgen limit are generated.\n"
+"Value is stored per-world."
+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 sinking"
+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 "Load the game profiler"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Load the game profiler to collect game profiling data.\n"
+"Provides a /profiler command to access the compiled profile.\n"
+"Useful for mod developers and server operators."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Loading Block Modifiers"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Lower Y limit of dungeons."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Lower Y limit of floatlands."
+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 all liquids opaque"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Map Compression Level for Disk Storage"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Map Compression Level for Network Transfer"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Map directory"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Map generation attributes specific to Mapgen Carpathian."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Map generation attributes specific to Mapgen Flat.\n"
+"Occasional lakes and hills can be added to the flat world."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Map generation attributes specific to Mapgen Fractal.\n"
+"'terrain' enables the generation of non-fractal terrain:\n"
+"ocean, islands and underground."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Map generation attributes specific to Mapgen Valleys.\n"
+"'altitude_chill': Reduces heat with altitude.\n"
+"'humid_rivers': Increases humidity around rivers.\n"
+"'vary_river_depth': If enabled, low humidity and high heat causes rivers\n"
+"to become shallower and occasionally dry.\n"
+"'altitude_dry': Reduces humidity with altitude."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Map generation attributes specific to Mapgen v5."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Map generation attributes specific to Mapgen v6.\n"
+"The 'snowbiomes' flag enables the new 5 biome system.\n"
+"When the 'snowbiomes' flag is enabled jungles are automatically enabled and\n"
+"the 'jungles' flag is ignored."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Map generation attributes specific to Mapgen v7.\n"
+"'ridges': Rivers.\n"
+"'floatlands': Floating land masses in the atmosphere.\n"
+"'caverns': Giant caves deep underground."
+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 "Map shadows update frames"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapblock limit"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapblock mesh generation delay"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapblock mesh generator's MapBlock cache size in MB"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapblock unload timeout"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen Carpathian"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen Carpathian specific flags"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen Flat"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen Flat specific flags"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen Fractal"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen Fractal specific flags"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen V5"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen V5 specific flags"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen V6"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen V6 specific flags"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen V7"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen V7 specific flags"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen Valleys"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen Valleys specific flags"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen debug"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen name"
+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 the window is not focused, or when the game is paused."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum distance to render shadows."
+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 limit of random number of large caves per mapchunk."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum limit of random number of small caves per mapchunk."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum liquid resistance. Controls deceleration when entering liquid at\n"
+"high speed."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum number of blocks that are simultaneously sent per client.\n"
+"The maximum total count is calculated dynamically:\n"
+"max_total = ceil((#clients + max_users) * per_client / 4)"
+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"
+"This limit is enforced per player."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum number of blocks to be queued that are to be loaded from file.\n"
+"This limit is enforced per player."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum number of concurrent downloads. Downloads exceeding this limit will "
+"be queued.\n"
+"This should be lower than curl_parallel_limit."
+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 be connected simultaneously."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum number of recent chat messages to show"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum number of statically stored objects in a block."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum objects per 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 simultaneous block sends per client"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum size of the out chat queue"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum size of the out chat queue.\n"
+"0 to disable queueing and -1 to make the queue size unlimited."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum time a file download (e.g. a mod download) may take, stated in "
+"milliseconds."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum time an interactive request (e.g. server list fetch) may take, "
+"stated in milliseconds."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum users"
+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 "Method used to highlight selected object."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Minimal level of logging to be written to chat."
+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 limit of random number of large caves per mapchunk."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Minimum limit of random number of small caves per mapchunk."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Minimum texture size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mipmapping"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mod channels"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Modifies the size of the HUD elements."
+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 "Monospace font size divisible by"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mountain height noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mountain noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mountain variation noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mountain zero level"
+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 "Mud noise"
+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 "Mute key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mute sound"
+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.\n"
+"Current mapgens in a highly unstable state:\n"
+"- The optional floatlands of v7 (disabled by default)."
+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 "Near plane"
+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 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 "NodeTimer interval"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Noises"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Number of emerge threads"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Number of emerge threads to use.\n"
+"Value 0:\n"
+"- Automatic selection. The number of emerge threads will be\n"
+"- 'number of processors - 2', with a lower limit of 1.\n"
+"Any other value:\n"
+"- Specifies the number of emerge threads, with a lower limit of 1.\n"
+"WARNING: Increasing the number of emerge threads increases engine mapgen\n"
+"speed, but this may harm game performance by interfering with other\n"
+"processes, especially in singleplayer and/or when running Lua code in\n"
+"'on_generated'. For many users the optimum setting may be '1'."
+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 "Online Content Repository"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Opaque liquids"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Opaqueness (alpha) of the shadow behind the default font, between 0 and 255."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Open the pause menu when the window's focus is lost. Does not pause if a "
+"formspec is\n"
+"open."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Optional override for chat weblink color."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Path of the fallback font. Must be a TrueType font.\n"
+"This font will be used for certain languages or if the default font is "
+"unavailable."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Path to save screenshots at. Can be an absolute or relative path.\n"
+"The folder will be created if it doesn't already exist."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Path to shader directory. If no path is defined, default location will be "
+"used."
+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 ""
+"Path to the default font. Must be a TrueType font.\n"
+"The fallback font will be used if the font cannot be loaded."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Path to the monospace font. Must be a TrueType font.\n"
+"This font is used for e.g. the console and profiler screen."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Pause on lost window focus"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Per-player limit of queued blocks load from disk"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Per-player limit of queued blocks to generate"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Physics"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Pitch move key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Pitch move mode"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Place key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Place repetition interval"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Player is able to fly without being affected by gravity.\n"
+"This requires the \"fly\" privilege on the server."
+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 "Poisson filtering"
+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 ""
+"Prevent digging and placing from repeating when holding the mouse buttons.\n"
+"Enable this when you dig or place too often by accident."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Prevent mods from doing insecure things like running shell commands."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Print the engine's profiling data in regular intervals (in seconds).\n"
+"0 = disable. Useful for developers."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Privileges that players with basic_privs can grant"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Profiler"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Profiler toggle key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Profiling"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Prometheus listener address"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Prometheus listener address.\n"
+"If Minetest is compiled with ENABLE_PROMETHEUS option enabled,\n"
+"enable metrics listener for Prometheus on that address.\n"
+"Metrics can be fetched on http://127.0.0.1:30000/metrics"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Proportion of large caves that contain liquid."
+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 "Raises terrain to make valleys around the rivers."
+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 "Recent Chat Messages"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Regular font path"
+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 ""
+"Remove color codes from incoming chat messages\n"
+"Use this to stop players from being able to use color in their messages"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Replaces the default main menu with a custom one."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Report path"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Restricts the access of certain client-side functions on servers.\n"
+"Combine the byteflags below to restrict client-side features, or set to 0\n"
+"for no restrictions:\n"
+"LOAD_CLIENT_MODS: 1 (disable loading client-provided mods)\n"
+"CHAT_MESSAGES: 2 (disable send_chat_message call client-side)\n"
+"READ_ITEMDEFS: 4 (disable get_item_def call client-side)\n"
+"READ_NODEDEFS: 8 (disable get_node_def call client-side)\n"
+"LOOKUP_NODES_LIMIT: 16 (limits get_node call client-side to\n"
+"csm_restriction_noderange)\n"
+"READ_PLAYERINFO: 32 (disable get_player_names call client-side)"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Ridge mountain spread noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Ridge noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Ridge underwater noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Ridged mountain size noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Right key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "River channel depth"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "River channel width"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "River depth"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "River noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "River size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "River valley width"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Rollback recording"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Rolling hill size noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Rolling hills spread noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Round minimap"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Safe digging and placing"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Sandy beaches occur when np_beach exceeds this value."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Save the map received by the client on disk."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Save window size automatically when modified."
+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 folder"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Screenshot format"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Screenshot quality"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Screenshot quality. Only used for JPEG format.\n"
+"1 means worst quality; 100 means best quality.\n"
+"Use 0 for default quality."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Seabed noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Second of 4 2D noises that together define hill/mountain range height."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Second of two 3D noises that together define tunnels."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Security"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "See https://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 ""
+"Selects one of 18 fractal types.\n"
+"1 = 4D \"Roundy\" Mandelbrot set.\n"
+"2 = 4D \"Roundy\" Julia set.\n"
+"3 = 4D \"Squarry\" Mandelbrot set.\n"
+"4 = 4D \"Squarry\" Julia set.\n"
+"5 = 4D \"Mandy Cousin\" Mandelbrot set.\n"
+"6 = 4D \"Mandy Cousin\" Julia set.\n"
+"7 = 4D \"Variation\" Mandelbrot set.\n"
+"8 = 4D \"Variation\" Julia set.\n"
+"9 = 3D \"Mandelbrot/Mandelbar\" Mandelbrot set.\n"
+"10 = 3D \"Mandelbrot/Mandelbar\" Julia set.\n"
+"11 = 3D \"Christmas Tree\" Mandelbrot set.\n"
+"12 = 3D \"Christmas Tree\" Julia set.\n"
+"13 = 3D \"Mandelbulb\" Mandelbrot set.\n"
+"14 = 3D \"Mandelbulb\" Julia set.\n"
+"15 = 3D \"Cosine Mandelbulb\" Mandelbrot set.\n"
+"16 = 3D \"Cosine Mandelbulb\" Julia set.\n"
+"17 = 4D \"Mandelbulb\" Mandelbrot set.\n"
+"18 = 4D \"Mandelbulb\" Julia set."
+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 "Server side occlusion culling"
+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 the maximum character length of a chat message sent by clients."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set the shadow strength.\n"
+"Lower value means lighter shadows, higher value means darker shadows."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set the soft shadow radius size.\n"
+"Lower values mean sharper shadows, bigger values mean softer shadows.\n"
+"Minimum value: 1.0; maximum value: 10.0"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set the tilt of Sun/Moon orbit in degrees.\n"
+"Value of 0 means no tilt / vertical orbit.\n"
+"Minimum value: 0.0; maximum value: 60.0"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set to true to enable Shadow Mapping.\n"
+"Requires shaders to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set to true to enable waving leaves.\n"
+"Requires shaders to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set to true to enable waving liquids (like water).\n"
+"Requires shaders to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set to true to enable waving plants.\n"
+"Requires shaders to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Sets shadow texture quality to 32 bits.\n"
+"On false, 16 bits texture will be used.\n"
+"This can cause much more artifacts in the shadow."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Shader path"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Shaders allow advanced visual effects and may increase performance on some "
+"video\n"
+"cards.\n"
+"This only works with the OpenGL video backend."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Shadow filter quality"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Shadow map max distance in nodes to render shadows"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Shadow map texture in 32 bits"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Shadow map texture size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Shadow offset (in pixels) of the default font. If 0, then shadow will not be "
+"drawn."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Shadow strength"
+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 "Show entity selection boxes"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Show entity selection boxes\n"
+"A restart is required after changing this."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Show name tag backgrounds by default"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Shutdown message"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Size of mapchunks generated by mapgen, stated in mapblocks (16 nodes).\n"
+"WARNING!: There is no benefit, and there are several dangers, in\n"
+"increasing this value above 5.\n"
+"Reducing this value increases cave and dungeon density.\n"
+"Altering this value is for special usage, leaving it unchanged is\n"
+"recommended."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Size of the MapBlock cache of the mesh generator. Increasing this will\n"
+"increase the cache hit %, reducing the data being copied from the main\n"
+"thread, thus reducing jitter."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Sky Body Orbit Tilt"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Slice w"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Slope and fill work together to modify the heights."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Small cave maximum number"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Small cave minimum number"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Small-scale humidity variation for blending biomes on borders."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Small-scale temperature variation for blending biomes on borders."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Smooth lighting"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Smooths camera when looking around. Also called look or mouse smoothing.\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 "Sneaking speed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Sneaking speed, in nodes per second."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Soft shadow radius"
+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 ""
+"Specifies the default stack size of nodes, items and tools.\n"
+"Note that mods or games may explicitly set a stack for certain (or all) "
+"items."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Spread a complete update of shadow map over given amount of frames.\n"
+"Higher values might make shadows laggy, lower values\n"
+"will consume more resources.\n"
+"Minimum value: 1; maximum value: 16"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Spread of light curve boost range.\n"
+"Controls the width of the range to be boosted.\n"
+"Standard deviation of the light curve boost Gaussian."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Static spawnpoint"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Steepness noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Step mountain size noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Step mountain spread noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Strength of 3D mode parallax."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Strength of light curve boost.\n"
+"The 3 'boost' parameters define a range of the light\n"
+"curve that is boosted in brightness."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Strict protocol checking"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Strip color codes"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Surface level of optional water placed on a solid floatland layer.\n"
+"Water is disabled by default and will only be placed if this value is set\n"
+"to above 'mgv7_floatland_ymax' - 'mgv7_floatland_taper' (the start of the\n"
+"upper tapering).\n"
+"***WARNING, POTENTIAL DANGER TO WORLDS AND SERVER PERFORMANCE***:\n"
+"When enabling water placement the floatlands must be configured and tested\n"
+"to be a solid layer by setting 'mgv7_floatland_density' to 2.0 (or other\n"
+"required value depending on 'mgv7_np_floatland'), to avoid\n"
+"server-intensive extreme water flow and to avoid vast flooding of the\n"
+"world surface below."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Synchronous SQLite"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Temperature variation for biomes."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Terrain alternative noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Terrain base noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Terrain height"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Terrain higher noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Terrain noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Terrain noise threshold for hills.\n"
+"Controls proportion of world area covered by hills.\n"
+"Adjust towards 0.0 for a larger proportion."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Terrain noise threshold for lakes.\n"
+"Controls proportion of world area covered by lakes.\n"
+"Adjust towards 0.0 for a larger proportion."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Terrain persistence noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Texture path"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Texture size to render the shadow map on.\n"
+"This must be a power of two.\n"
+"Bigger numbers create better shadows but it is also more expensive."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Textures on a node may be aligned either to the node or to the world.\n"
+"The former mode suits better things like machines, furniture, etc., while\n"
+"the latter makes stairs and microblocks fit surroundings better.\n"
+"However, as this possibility is new, thus may not be used by older servers,\n"
+"this option allows enforcing it for certain node types. Note though that\n"
+"that is considered EXPERIMENTAL and may not work properly."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "The URL for the content repository"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "The dead zone of the joystick"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The default format in which profiles are being saved,\n"
+"when calling `/profiler save [format]` without format."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "The depth of dirt or other biome filler node."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The file path relative to your worldpath in which profiles will be saved to."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "The identifier of the joystick to use"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "The length in pixels it takes for touch screen interaction to start."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The maximum height of the surface of waving liquids.\n"
+"4.0 = Wave height is two nodes.\n"
+"0.0 = Wave doesn't move at all.\n"
+"Default is 1.0 (1/2 node).\n"
+"Requires waving liquids to be enabled."
+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 radius of the volume of blocks around every player that is subject to "
+"the\n"
+"active block stuff, stated in mapblocks (16 nodes).\n"
+"In active blocks objects are loaded and ABMs run.\n"
+"This is also the minimum range in which active objects (mobs) are "
+"maintained.\n"
+"This should be configured together with active_object_send_range_blocks."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The rendering back-end.\n"
+"A restart is required after changing this.\n"
+"Note: On Android, stick with OGLES1 if unsure! App may fail to start "
+"otherwise.\n"
+"On other platforms, OpenGL is recommended.\n"
+"Shaders are supported by OpenGL (desktop only) and OGLES2 (experimental)"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The sensitivity of the joystick axes for moving the\n"
+"in-game view frustum around."
+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 budget allowed for ABMs to execute on each step\n"
+"(as a fraction of the ABM Interval)"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The time in seconds it takes between repeated events\n"
+"when holding down a joystick button combination."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The time in seconds it takes between repeated node placements when holding\n"
+"the place button."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "The type of joystick"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The vertical distance over which heat drops by 20 if 'altitude_chill' is\n"
+"enabled. Also the vertical distance over which humidity drops by 10 if\n"
+"'altitude_dry' is enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Third of 4 2D noises that together define hill/mountain range height."
+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 of day when a new world is started, in millihours (0-23999)."
+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 "Touch screen threshold"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Tradeoffs for performance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Trees noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Trilinear filtering"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"True = 256\n"
+"False = 128\n"
+"Usable 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 "Undersampling"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Undersampling is similar to using a lower screen resolution, but it applies\n"
+"to the game world only, keeping the GUI intact.\n"
+"It should give a significant performance boost at the cost of less detailed "
+"image.\n"
+"Higher values result in a less detailed image."
+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 "Upper Y limit of dungeons."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Upper Y limit of floatlands."
+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 mipmapping to scale textures. May slightly increase performance,\n"
+"especially when using a high resolution texture pack.\n"
+"Gamma correct downscaling is not supported."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Use multi-sample antialiasing (MSAA) to smooth out block edges.\n"
+"This algorithm smooths out the 3D viewport while keeping the image sharp,\n"
+"but it doesn't affect the insides of textures\n"
+"(which is especially noticeable with transparent textures).\n"
+"Visible spaces appear between nodes when shaders are disabled.\n"
+"If set to 0, MSAA is disabled.\n"
+"A restart is required after changing this option."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Use trilinear filtering when scaling textures."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "VBO"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "VSync"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Valley depth"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Valley fill"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Valley profile"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Valley slope"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Variation of biome filler depth."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Variation of maximum mountain height (in nodes)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Variation of number of caves."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Variation of terrain vertical scale.\n"
+"When noise is < -0.55 terrain is near-flat."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Varies depth of biome surface nodes."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Varies roughness of terrain.\n"
+"Defines the 'persistence' value for terrain_base and terrain_alt noises."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Varies steepness of cliffs."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Vertical climbing speed, in nodes per second."
+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 factor"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "View distance in nodes."
+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 "View zoom key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Viewing range"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Virtual joystick triggers Aux1 button"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Volume"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Volume of all sounds.\n"
+"Requires the sound system to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"W coordinate of the generated 3D slice of a 4D fractal.\n"
+"Determines which 3D slice of the 4D shape is generated.\n"
+"Alters the shape of the fractal.\n"
+"Has no effect on 3D fractals.\n"
+"Range roughly -2 to 2."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Walking and flying speed, in nodes per second."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Walking speed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Walking, flying and climbing speed in fast mode, in nodes per second."
+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 liquids"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Waving liquids wave height"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Waving liquids wave speed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Waving liquids wavelength"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Waving plants"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Weblink color"
+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"
+"properly 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. This setting is ONLY applied if\n"
+"bilinear/trilinear/anisotropic filtering is enabled.\n"
+"This is also used as the base node texture size for world-aligned\n"
+"texture autoscaling."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Whether name tag backgrounds should be shown by default.\n"
+"Mods may still set a background."
+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 mute sounds. You can unmute sounds at any time, unless the\n"
+"sound system is disabled (enable_sound=false).\n"
+"In-game, you can toggle the mute state with the mute key or by using the\n"
+"pause menu."
+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 component of the initial window size. Ignored in fullscreen mode."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Width of the selection box lines around nodes."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Windows systems only: Start Minetest with the command line window in the "
+"background.\n"
+"Contains the same information as the file debug.txt (default name)."
+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 "World start time"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"World-aligned textures may be scaled to span several nodes. However,\n"
+"the server may not send the scale you want, especially if you use\n"
+"a specially-designed texture pack; with this option, the client tries\n"
+"to determine the scale automatically basing on the texture size.\n"
+"See also texture_min_size.\n"
+"Warning: This option is EXPERIMENTAL!"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "World-aligned textures mode"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Y of flat ground."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Y of mountain density gradient zero level. Used to shift mountains "
+"vertically."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Y of upper limit of large caves."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Y-distance over which caverns expand to full size."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Y-distance over which floatlands taper from full density to nothing.\n"
+"Tapering starts at this distance from the Y limit.\n"
+"For a solid floatland layer, this controls the height of hills/mountains.\n"
+"Must be less than or equal to half the distance between the Y limits."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Y-level of average terrain surface."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Y-level of cavern upper limit."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Y-level of higher terrain that creates cliffs."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Y-level of lower terrain and seabed."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Y-level of seabed."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "cURL file download timeout"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "cURL interactive timeout"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "cURL parallel limit"
+msgstr ""
diff --git a/po/minetest.pot b/po/minetest.pot
index 9881f5032..0cddb4abf 100644
--- a/po/minetest.pot
+++ b/po/minetest.pot
@@ -8,15 +8,51 @@ msgid ""
msgstr ""
"Project-Id-Version: minetest\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-02-23 19:03+0100\n"
+"POT-Creation-Date: 2022-01-25 23:19+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"Language: \n"
"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Type: text/plain; charset=CHARSET\n"
"Content-Transfer-Encoding: 8bit\n"
+#: builtin/client/chatcommands.lua
+msgid "Issued command: "
+msgstr ""
+
+#: builtin/client/chatcommands.lua
+msgid "Empty command."
+msgstr ""
+
+#: builtin/client/chatcommands.lua
+msgid "Invalid command: "
+msgstr ""
+
+#: builtin/client/chatcommands.lua
+msgid "List online players"
+msgstr ""
+
+#: builtin/client/chatcommands.lua
+msgid "This command is disabled by server."
+msgstr ""
+
+#: builtin/client/chatcommands.lua
+msgid "Online players: "
+msgstr ""
+
+#: builtin/client/chatcommands.lua
+msgid "Exit to main menu"
+msgstr ""
+
+#: builtin/client/chatcommands.lua
+msgid "Clear the out chat queue"
+msgstr ""
+
+#: builtin/client/chatcommands.lua
+msgid "The out chat queue is now empty."
+msgstr ""
+
#: builtin/client/death_formspec.lua src/client/game.cpp
msgid "You died"
msgstr ""
@@ -25,11 +61,40 @@ msgstr ""
msgid "Respawn"
msgstr ""
+#: builtin/common/chatcommands.lua
+msgid "Available commands: "
+msgstr ""
+
+#: builtin/common/chatcommands.lua
+msgid ""
+"Use '.help <cmd>' to get more information, or '.help all' to list everything."
+msgstr ""
+
+#: builtin/common/chatcommands.lua
+msgid "Available commands:"
+msgstr ""
+
+#: builtin/common/chatcommands.lua
+msgid "Command not available: "
+msgstr ""
+
+#: builtin/common/chatcommands.lua
+msgid "[all | <cmd>]"
+msgstr ""
+
+#: builtin/common/chatcommands.lua
+msgid "Get help for commands"
+msgstr ""
+
#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp
msgid "OK"
msgstr ""
#: builtin/fstk/ui.lua
+msgid "<none available>"
+msgstr ""
+
+#: builtin/fstk/ui.lua
msgid "The server has requested a reconnect:"
msgstr ""
@@ -179,6 +244,10 @@ msgid "Failed to download $1"
msgstr ""
#: builtin/mainmenu/dlg_contentstore.lua
+msgid "Install: Unsupported file type or broken archive"
+msgstr ""
+
+#: builtin/mainmenu/dlg_contentstore.lua
msgid "Already installed"
msgstr ""
@@ -289,11 +358,11 @@ msgid "Very large caverns deep in the underground"
msgstr ""
#: builtin/mainmenu/dlg_create_world.lua
-msgid "Sea level rivers"
+msgid "Rivers"
msgstr ""
#: builtin/mainmenu/dlg_create_world.lua
-msgid "Rivers"
+msgid "Sea level rivers"
msgstr ""
#: builtin/mainmenu/dlg_create_world.lua
@@ -468,11 +537,11 @@ msgid "Create"
msgstr ""
#: builtin/mainmenu/dlg_create_world.lua
-msgid "A world named \"$1\" already exists"
+msgid "No game selected"
msgstr ""
#: builtin/mainmenu/dlg_create_world.lua
-msgid "No game selected"
+msgid "A world named \"$1\" already exists"
msgstr ""
#: builtin/mainmenu/dlg_delete_content.lua
@@ -511,7 +580,7 @@ msgstr ""
msgid "Rename Modpack:"
msgstr ""
-#: builtin/mainmenu/dlg_settings_advanced.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_settings.lua
msgid "Disabled"
msgstr ""
@@ -552,7 +621,7 @@ msgid "Octaves"
msgstr ""
#: builtin/mainmenu/dlg_settings_advanced.lua
-msgid "Persistance"
+msgid "Persistence"
msgstr ""
#: builtin/mainmenu/dlg_settings_advanced.lua
@@ -622,7 +691,7 @@ msgstr ""
msgid "Select file"
msgstr ""
-#: builtin/mainmenu/dlg_settings_advanced.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_online.lua
msgid "Search"
msgstr ""
@@ -679,14 +748,6 @@ msgid "Unable to install a game as a $1"
msgstr ""
#: builtin/mainmenu/pkgmgr.lua
-msgid "Install: file: \"$1\""
-msgstr ""
-
-#: builtin/mainmenu/pkgmgr.lua
-msgid "Install: Unsupported file type \"$1\" or broken archive"
-msgstr ""
-
-#: builtin/mainmenu/pkgmgr.lua
msgid "$1 mods"
msgstr ""
@@ -702,6 +763,40 @@ msgstr ""
msgid "Public server list is disabled"
msgstr ""
+#: builtin/mainmenu/tab_about.lua
+msgid "About"
+msgstr ""
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Core Developers"
+msgstr ""
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Active Contributors"
+msgstr ""
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Previous Core Developers"
+msgstr ""
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Previous Contributors"
+msgstr ""
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Active renderer:"
+msgstr ""
+
+#: builtin/mainmenu/tab_about.lua
+msgid ""
+"Opens the directory that contains user-provided worlds, games, mods,\n"
+"and texture packs in a file manager / explorer."
+msgstr ""
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Open User Data Directory"
+msgstr ""
+
#: builtin/mainmenu/tab_content.lua
msgid "Installed Packages:"
msgstr ""
@@ -742,62 +837,32 @@ msgstr ""
msgid "Content"
msgstr ""
-#: builtin/mainmenu/tab_credits.lua
-msgid "Credits"
-msgstr ""
-
-#: builtin/mainmenu/tab_credits.lua
-msgid "Core Developers"
-msgstr ""
-
-#: builtin/mainmenu/tab_credits.lua
-msgid "Active Contributors"
-msgstr ""
-
-#: builtin/mainmenu/tab_credits.lua
-msgid "Previous Core Developers"
-msgstr ""
-
-#: builtin/mainmenu/tab_credits.lua
-msgid "Previous Contributors"
-msgstr ""
-
-#: builtin/mainmenu/tab_credits.lua
-msgid ""
-"Opens the directory that contains user-provided worlds, games, mods,\n"
-"and texture packs in a file manager / explorer."
-msgstr ""
-
-#: builtin/mainmenu/tab_credits.lua
-msgid "Open User Data Directory"
-msgstr ""
-
#: builtin/mainmenu/tab_local.lua
msgid "Install games from ContentDB"
msgstr ""
#: builtin/mainmenu/tab_local.lua
-msgid "Select Mods"
+msgid "Creative Mode"
msgstr ""
#: builtin/mainmenu/tab_local.lua
-msgid "New"
+msgid "Enable Damage"
msgstr ""
#: builtin/mainmenu/tab_local.lua
-msgid "Select World:"
+msgid "Host Server"
msgstr ""
#: builtin/mainmenu/tab_local.lua
-msgid "Creative Mode"
+msgid "Select Mods"
msgstr ""
#: builtin/mainmenu/tab_local.lua
-msgid "Enable Damage"
+msgid "New"
msgstr ""
#: builtin/mainmenu/tab_local.lua
-msgid "Host Server"
+msgid "Select World:"
msgstr ""
#: builtin/mainmenu/tab_local.lua
@@ -808,11 +873,11 @@ msgstr ""
msgid "Announce Server"
msgstr ""
-#: builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
msgid "Name"
msgstr ""
-#: builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
msgid "Password"
msgstr ""
@@ -820,7 +885,7 @@ msgstr ""
msgid "Bind Address"
msgstr ""
-#: builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
msgid "Port"
msgstr ""
@@ -840,24 +905,28 @@ msgstr ""
msgid "Start Game"
msgstr ""
+#: builtin/mainmenu/tab_online.lua src/client/keycode.cpp
+msgid "Clear"
+msgstr ""
+
#: builtin/mainmenu/tab_online.lua
-msgid "Address / Port"
+msgid "Refresh"
msgstr ""
#: builtin/mainmenu/tab_online.lua
-msgid "Name / Password"
+msgid "Address"
msgstr ""
#: builtin/mainmenu/tab_online.lua
-msgid "Connect"
+msgid "Server Description"
msgstr ""
#: builtin/mainmenu/tab_online.lua
-msgid "Del. Favorite"
+msgid "Connect"
msgstr ""
#: builtin/mainmenu/tab_online.lua
-msgid "Favorite"
+msgid "Del. Favorite"
msgstr ""
#: builtin/mainmenu/tab_online.lua
@@ -868,13 +937,21 @@ msgstr ""
msgid "Creative mode"
msgstr ""
+#. ~ PvP = Player versus Player
#: builtin/mainmenu/tab_online.lua
-msgid "Damage enabled"
+msgid "Damage / PvP"
+msgstr ""
+
+#: builtin/mainmenu/tab_online.lua
+msgid "Favorites"
+msgstr ""
+
+#: builtin/mainmenu/tab_online.lua
+msgid "Public Servers"
msgstr ""
-#. ~ PvP = Player versus Player
#: builtin/mainmenu/tab_online.lua
-msgid "PvP enabled"
+msgid "Incompatible Servers"
msgstr ""
#: builtin/mainmenu/tab_online.lua
@@ -942,6 +1019,26 @@ msgid "8x"
msgstr ""
#: builtin/mainmenu/tab_settings.lua
+msgid "Very Low"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Low"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Medium"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "High"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Ultra High"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
msgid "Smooth Lighting"
msgstr ""
@@ -1018,14 +1115,18 @@ msgid "Waving Plants"
msgstr ""
#: builtin/mainmenu/tab_settings.lua
-msgid "To enable shaders the OpenGL driver needs to be used."
+msgid "Dynamic shadows: "
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
+msgid "Dynamic shadows"
msgstr ""
#: builtin/mainmenu/tab_settings.lua
msgid "Settings"
msgstr ""
-#: src/client/client.cpp
+#: src/client/client.cpp src/client/game.cpp
msgid "Connection timed out."
msgstr ""
@@ -1078,25 +1179,13 @@ msgid "Provided world path doesn't exist: "
msgstr ""
#: src/client/clientlauncher.cpp
-msgid "Could not find or load game \""
+msgid "Could not find or load game: "
msgstr ""
#: src/client/clientlauncher.cpp
msgid "Invalid gamespec."
msgstr ""
-#. ~ DO NOT TRANSLATE THIS LITERALLY!
-#. This is a special string. Put either "no" or "yes"
-#. into the translation field (literally).
-#. Choose "yes" if the language requires use of the fallback
-#. font, "no" otherwise.
-#. The fallback font is (normally) required for languages with
-#. non-Latin script, like Chinese.
-#. When in doubt, test your translation.
-#: src/client/fontengine.cpp
-msgid "needs_fallback_font"
-msgstr ""
-
#: src/client/game.cpp
msgid "Shutting down..."
msgstr ""
@@ -1106,18 +1195,54 @@ msgid "Creating server..."
msgstr ""
#: src/client/game.cpp
+#, c-format
+msgid "Unable to listen on %s because IPv6 is disabled"
+msgstr ""
+
+#: src/client/game.cpp
msgid "Creating client..."
msgstr ""
#: src/client/game.cpp
+msgid "Connection failed for unknown reason"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Singleplayer"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Multiplayer"
+msgstr ""
+
+#: src/client/game.cpp
msgid "Resolving address..."
msgstr ""
#: src/client/game.cpp
+#, c-format
+msgid "Couldn't resolve address: %s"
+msgstr ""
+
+#: src/client/game.cpp
+#, c-format
+msgid "Unable to connect to %s because IPv6 is disabled"
+msgstr ""
+
+#: src/client/game.cpp
+#, c-format
+msgid "Access denied. Reason: %s"
+msgstr ""
+
+#: src/client/game.cpp
msgid "Connecting to server..."
msgstr ""
#: src/client/game.cpp
+msgid "Client disconnected"
+msgstr ""
+
+#: src/client/game.cpp
msgid "Item definitions..."
msgstr ""
@@ -1219,6 +1344,26 @@ msgid "Cinematic mode disabled"
msgstr ""
#: src/client/game.cpp
+msgid "Block bounds hidden"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Block bounds shown for current block"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Block bounds shown for nearby blocks"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Block bounds shown for all blocks"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Can't show block bounds (need 'basic_debug' privilege)"
+msgstr ""
+
+#: src/client/game.cpp
msgid "Automatic forward enabled"
msgstr ""
@@ -1377,10 +1522,6 @@ msgid "- Port: "
msgstr ""
#: src/client/game.cpp
-msgid "Singleplayer"
-msgstr ""
-
-#: src/client/game.cpp
msgid "On"
msgstr ""
@@ -1388,25 +1529,26 @@ msgstr ""
msgid "Off"
msgstr ""
+#. ~ PvP = Player versus Player
#: src/client/game.cpp
-msgid "- Damage: "
+msgid "- PvP: "
msgstr ""
#: src/client/game.cpp
-msgid "- Creative Mode: "
+msgid "- Public: "
msgstr ""
-#. ~ PvP = Player versus Player
#: src/client/game.cpp
-msgid "- PvP: "
+msgid "- Server Name: "
msgstr ""
#: src/client/game.cpp
-msgid "- Public: "
+#, c-format
+msgid "The server is probably running a different version of %s."
msgstr ""
#: src/client/game.cpp
-msgid "- Server Name: "
+msgid "A serialization error occurred:"
msgstr ""
#: src/client/game.cpp
@@ -1469,10 +1611,6 @@ msgid "Tab"
msgstr ""
#: src/client/keycode.cpp
-msgid "Clear"
-msgstr ""
-
-#: src/client/keycode.cpp
msgid "Return"
msgstr ""
@@ -1721,6 +1859,14 @@ msgstr ""
msgid "Minimap in texture mode"
msgstr ""
+#: src/gui/guiChatConsole.cpp
+msgid "Opening webpage"
+msgstr ""
+
+#: src/gui/guiChatConsole.cpp
+msgid "Failed to open webpage"
+msgstr ""
+
#: src/gui/guiConfirmRegistration.cpp
#, c-format
msgid ""
@@ -1748,7 +1894,7 @@ msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)"
msgstr ""
#: src/gui/guiKeyChangeMenu.cpp
-msgid "\"Special\" = climb down"
+msgid "\"Aux1\" = climb down"
msgstr ""
#: src/gui/guiKeyChangeMenu.cpp
@@ -1776,7 +1922,7 @@ msgid "Backward"
msgstr ""
#: src/gui/guiKeyChangeMenu.cpp
-msgid "Special"
+msgid "Aux1"
msgstr ""
#: src/gui/guiKeyChangeMenu.cpp
@@ -1876,6 +2022,10 @@ msgid "Local command"
msgstr ""
#: src/gui/guiKeyChangeMenu.cpp
+msgid "Block bounds"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
msgid "Toggle HUD"
msgstr ""
@@ -1904,7 +2054,8 @@ msgid "Change"
msgstr ""
#: src/gui/guiVolumeChange.cpp
-msgid "Sound Volume: "
+#, c-format
+msgid "Sound Volume: %d%%"
msgstr ""
#: src/gui/guiVolumeChange.cpp
@@ -1969,7 +2120,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Fast movement (via the \"special\" key).\n"
+"Fast movement (via the \"Aux1\" key).\n"
"This requires the \"fast\" privilege on the server."
msgstr ""
@@ -2027,13 +2178,13 @@ msgid "Mouse sensitivity multiplier."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Special key for climbing/descending"
+msgid "Aux1 key for climbing/descending"
msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"If enabled, \"special\" key instead of \"sneak\" key is used for climbing "
-"down and\n"
+"If enabled, \"Aux1\" key instead of \"Sneak\" key is used for climbing down "
+"and\n"
"descending."
msgstr ""
@@ -2051,8 +2202,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"If disabled, \"special\" key is used to fly fast if both fly and fast mode "
-"are\n"
+"If disabled, \"Aux1\" key is used to fly fast if both fly and fast mode are\n"
"enabled."
msgstr ""
@@ -2117,13 +2267,13 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Virtual joystick triggers aux button"
+msgid "Virtual joystick triggers Aux1 button"
msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"(Android) Use virtual joystick to trigger \"aux\" button.\n"
-"If enabled, virtual joystick will also tap \"aux\" button when out of main "
+"(Android) Use virtual joystick to trigger \"Aux1\" button.\n"
+"If enabled, virtual joystick will also tap \"Aux1\" button when out of main "
"circle."
msgstr ""
@@ -2158,11 +2308,11 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Joystick deadzone"
+msgid "Joystick dead zone"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "The deadzone of the joystick"
+msgid "The dead zone of the joystick"
msgstr ""
#: src/settings_translation_file.cpp
@@ -2172,7 +2322,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"The sensitivity of the joystick axes for moving the\n"
-"ingame view frustum around."
+"in-game view frustum around."
msgstr ""
#: src/settings_translation_file.cpp
@@ -2278,7 +2428,7 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Special key"
+msgid "Aux1 key"
msgstr ""
#: src/settings_translation_file.cpp
@@ -2964,12 +3114,12 @@ msgid "Basic"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Show nametag backgrounds by default"
+msgid "Show name tag backgrounds by default"
msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Whether nametag backgrounds should be shown by default.\n"
+"Whether name tag backgrounds should be shown by default.\n"
"Mods may still set a background."
msgstr ""
@@ -3022,6 +3172,16 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Tradeoffs for performance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enables tradeoffs that reduce CPU load or increase rendering performance\n"
+"at the expense of minor visual glitches that do not impact game playability."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Clouds"
msgstr ""
@@ -3063,7 +3223,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Use mip mapping to scale textures. May slightly increase performance,\n"
+"Use mipmapping to scale textures. May slightly increase performance,\n"
"especially when using a high resolution texture pack.\n"
"Gamma correct downscaling is not supported."
msgstr ""
@@ -3099,9 +3259,9 @@ 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."
+"which PNG optimizers usually discard, often resulting in dark or\n"
+"light edges to transparent textures. Apply a filter to clean that up\n"
+"at texture load time. This is automatically enabled if mipmapping is enabled."
msgstr ""
#: src/settings_translation_file.cpp
@@ -3114,9 +3274,8 @@ msgid ""
"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.\n"
+"memory. Powers of 2 are recommended. This setting is ONLY applied if\n"
+"bilinear/trilinear/anisotropic filtering is enabled.\n"
"This is also used as the base node texture size for world-aligned\n"
"texture autoscaling."
msgstr ""
@@ -3248,6 +3407,118 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Set to true to enable Shadow Mapping.\n"
+"Requires shaders to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Shadow strength"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set the shadow strength.\n"
+"Lower value means lighter shadows, higher value means darker shadows."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Shadow map max distance in nodes to render shadows"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum distance to render shadows."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Shadow map texture size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Texture size to render the shadow map on.\n"
+"This must be a power of two.\n"
+"Bigger numbers create better shadows but it is also more expensive."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Shadow map texture in 32 bits"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Sets shadow texture quality to 32 bits.\n"
+"On false, 16 bits texture will be used.\n"
+"This can cause much more artifacts in the shadow."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Poisson filtering"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable Poisson disk filtering.\n"
+"On true uses Poisson disk to make \"soft shadows\". Otherwise uses PCF "
+"filtering."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Shadow filter quality"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Define shadow filtering quality.\n"
+"This simulates the soft shadows effect by applying a PCF or Poisson disk\n"
+"but also uses more resources."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Colored shadows"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable colored shadows.\n"
+"On true translucent nodes cast colored shadows. This is expensive."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Map shadows update frames"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Spread a complete update of shadow map over given amount of frames.\n"
+"Higher values might make shadows laggy, lower values\n"
+"will consume more resources.\n"
+"Minimum value: 1; maximum value: 16"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Soft shadow radius"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set the soft shadow radius size.\n"
+"Lower values mean sharper shadows, bigger values mean softer shadows.\n"
+"Minimum value: 1.0; maximum value: 10.0"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Sky Body Orbit Tilt"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set the tilt of Sun/Moon orbit in degrees.\n"
+"Value of 0 means no tilt / vertical orbit.\n"
+"Minimum value: 0.0; maximum value: 60.0"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Advanced"
msgstr ""
@@ -3315,7 +3586,7 @@ msgid "Screen width"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Width component of the initial window size."
+msgid "Width component of the initial window size. Ignored in fullscreen mode."
msgstr ""
#: src/settings_translation_file.cpp
@@ -3323,7 +3594,8 @@ msgid "Screen height"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Height component of the initial window size."
+msgid ""
+"Height component of the initial window size. Ignored in fullscreen mode."
msgstr ""
#: src/settings_translation_file.cpp
@@ -3343,14 +3615,6 @@ 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 "VSync"
msgstr ""
@@ -3445,7 +3709,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"The rendering back-end for Irrlicht.\n"
+"The rendering back-end.\n"
"A restart is required after changing this.\n"
"Note: On Android, stick with OGLES1 if unsure! App may fail to start "
"otherwise.\n"
@@ -3599,7 +3863,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"Crosshair alpha (opaqueness, between 0 and 255).\n"
-"Also controls the object crosshair color"
+"This also applies to the object crosshair."
msgstr ""
#: src/settings_translation_file.cpp
@@ -3633,7 +3897,7 @@ msgid "HUD scale factor"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Modifies the size of the hudbar elements."
+msgid "Modifies the size of the HUD elements."
msgstr ""
#: src/settings_translation_file.cpp
@@ -3840,17 +4104,6 @@ msgid "Append item name to tooltip."
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.\n"
-"If disabled, bitmap and XML vectors fonts are used instead."
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Font bold by default"
msgstr ""
@@ -3882,7 +4135,22 @@ msgid "Font size"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Font size of the default font in point (pt)."
+msgid "Font size of the default font where 1 unit = 1 pixel at 96 DPI"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Font size divisible by"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"For pixel-style fonts that do not scale well, this ensures that font sizes "
+"used\n"
+"with this font will always be divisible by this value, in pixels. For "
+"instance,\n"
+"a pixel font 16 pixels tall should have this set to 16, so it will only ever "
+"be\n"
+"sized 16, 32, 48, etc., so a mod requesting a size of 25 will get 32."
msgstr ""
#: src/settings_translation_file.cpp
@@ -3891,9 +4159,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Path to the default font.\n"
-"If “freetype†setting is enabled: Must be a TrueType font.\n"
-"If “freetype†setting is disabled: Must be a bitmap or XML vectors font.\n"
+"Path to the default font. Must be a TrueType font.\n"
"The fallback font will be used if the font cannot be loaded."
msgstr ""
@@ -3914,7 +4180,11 @@ msgid "Monospace font size"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Font size of the monospace font in point (pt)."
+msgid "Font size of the monospace font where 1 unit = 1 pixel at 96 DPI"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Monospace font size divisible by"
msgstr ""
#: src/settings_translation_file.cpp
@@ -3923,9 +4193,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Path to the monospace font.\n"
-"If “freetype†setting is enabled: Must be a TrueType font.\n"
-"If “freetype†setting is disabled: Must be a bitmap or XML vectors font.\n"
+"Path to the monospace font. Must be a TrueType font.\n"
"This font is used for e.g. the console and profiler screen."
msgstr ""
@@ -3942,41 +4210,12 @@ msgid "Bold and italic monospace font path"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Fallback font size"
-msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid "Font size of the fallback font in point (pt)."
-msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid "Fallback font shadow"
-msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid ""
-"Shadow offset (in pixels) of the fallback font. If 0, then shadow will not "
-"be drawn."
-msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid "Fallback font shadow alpha"
-msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid ""
-"Opaqueness (alpha) of the shadow behind the fallback font, between 0 and 255."
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Fallback font path"
msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Path of the fallback font.\n"
-"If “freetype†setting is enabled: Must be a TrueType font.\n"
-"If “freetype†setting is disabled: Must be a bitmap or XML vectors font.\n"
+"Path of the fallback font. Must be a TrueType font.\n"
"This font will be used for certain languages or if the default font is "
"unavailable."
msgstr ""
@@ -4031,6 +4270,14 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Display Density Scaling Factor"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Adjust the detected display density, used for scaling UI elements."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Enable console window"
msgstr ""
@@ -4080,6 +4327,24 @@ msgid "Client"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Chat weblinks"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Clickable weblinks (middle-click or Ctrl+left-click) enabled in chat console "
+"output."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Weblink color"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Optional override for chat weblink color."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Network"
msgstr ""
@@ -4111,9 +4376,9 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"Prometheus listener address.\n"
-"If minetest is compiled with ENABLE_PROMETHEUS option enabled,\n"
+"If Minetest is compiled with ENABLE_PROMETHEUS option enabled,\n"
"enable metrics listener for Prometheus on that address.\n"
-"Metrics can be fetch on http://127.0.0.1:30000/metrics"
+"Metrics can be fetched on http://127.0.0.1:30000/metrics"
msgstr ""
#: src/settings_translation_file.cpp
@@ -4363,11 +4628,10 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"ZLib compression level to use when sending mapblocks to the client.\n"
-"-1 - Zlib's default compression level\n"
-"0 - no compresson, fastest\n"
-"9 - best compression, slowest\n"
-"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)"
+"Compression level to use when sending mapblocks to the client.\n"
+"-1 - use default compression level\n"
+"0 - least compression, fastest\n"
+"9 - best compression, slowest"
msgstr ""
#: src/settings_translation_file.cpp
@@ -4559,6 +4823,16 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Chat command time message threshold"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"If the execution of a chat command takes longer than this specified time in\n"
+"seconds, add the time information to the chat command message"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Shutdown message"
msgstr ""
@@ -4815,7 +5089,7 @@ 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"
+"This is a trade-off between SQLite transaction overhead and\n"
"memory consumption (4096=100MB, as a rule of thumb)."
msgstr ""
@@ -4851,11 +5125,10 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"ZLib compression level to use when saving mapblocks to disk.\n"
-"-1 - Zlib's default compression level\n"
-"0 - no compresson, fastest\n"
-"9 - best compression, slowest\n"
-"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)"
+"Compression level to use when saving mapblocks to disk.\n"
+"-1 - use default compression level\n"
+"0 - least compression, fastest\n"
+"9 - best compression, slowest"
msgstr ""
#: src/settings_translation_file.cpp
@@ -5098,11 +5371,11 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Chatcommands"
+msgid "Chat commands"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Instrument chatcommands on registration."
+msgid "Instrument chat commands on registration."
msgstr ""
#: src/settings_translation_file.cpp
@@ -5210,13 +5483,13 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "cURL timeout"
+msgid "cURL interactive timeout"
msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Default timeout for cURL, stated in milliseconds.\n"
-"Only has an effect if compiled with cURL."
+"Maximum time an interactive request (e.g. server list fetch) may take, "
+"stated in milliseconds."
msgstr ""
#: src/settings_translation_file.cpp
@@ -5237,15 +5510,9 @@ 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."
+msgid ""
+"Maximum time a file download (e.g. a mod download) may take, stated in "
+"milliseconds."
msgstr ""
#: src/settings_translation_file.cpp
@@ -5311,7 +5578,7 @@ msgstr ""
msgid ""
"Global map generation attributes.\n"
"In Mapgen v6 the 'decorations' flag controls all decorations except trees\n"
-"and junglegrass, in all other mapgens this flag controls all decorations."
+"and jungle grass, in all other mapgens this flag controls all decorations."
msgstr ""
#: src/settings_translation_file.cpp
diff --git a/po/mr/minetest.po b/po/mr/minetest.po
new file mode 100644
index 000000000..d1a4e213e
--- /dev/null
+++ b/po/mr/minetest.po
@@ -0,0 +1,6649 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the minetest package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: minetest\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2022-01-25 23:19+0100\n"
+"PO-Revision-Date: 2021-06-10 14:35+0000\n"
+"Last-Translator: Avyukt More <moreavyukt1@outlook.com>\n"
+"Language-Team: Marathi <https://hosted.weblate.org/projects/minetest/"
+"minetest/mr/>\n"
+"Language: mr\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 4.7-dev\n"
+
+#: builtin/client/chatcommands.lua
+msgid "Clear the out chat queue"
+msgstr ""
+
+#: builtin/client/chatcommands.lua
+msgid "Empty command."
+msgstr ""
+
+#: builtin/client/chatcommands.lua
+#, fuzzy
+msgid "Exit to main menu"
+msgstr "मà¥à¤–à¥à¤¯ पानावर परत जा"
+
+#: builtin/client/chatcommands.lua
+msgid "Invalid command: "
+msgstr ""
+
+#: builtin/client/chatcommands.lua
+msgid "Issued command: "
+msgstr ""
+
+#: builtin/client/chatcommands.lua
+msgid "List online players"
+msgstr ""
+
+#: builtin/client/chatcommands.lua
+msgid "Online players: "
+msgstr ""
+
+#: builtin/client/chatcommands.lua
+msgid "The out chat queue is now empty."
+msgstr ""
+
+#: builtin/client/chatcommands.lua
+msgid "This command is disabled by server."
+msgstr ""
+
+#: builtin/client/death_formspec.lua src/client/game.cpp
+msgid "Respawn"
+msgstr "पà¥à¤¨à¤°à¥à¤œà¤¨à¥à¤®"
+
+#: builtin/client/death_formspec.lua src/client/game.cpp
+msgid "You died"
+msgstr "तू मेलास"
+
+#: builtin/common/chatcommands.lua
+msgid "Available commands:"
+msgstr ""
+
+#: builtin/common/chatcommands.lua
+msgid "Available commands: "
+msgstr ""
+
+#: builtin/common/chatcommands.lua
+msgid "Command not available: "
+msgstr ""
+
+#: builtin/common/chatcommands.lua
+msgid "Get help for commands"
+msgstr ""
+
+#: builtin/common/chatcommands.lua
+msgid ""
+"Use '.help <cmd>' to get more information, or '.help all' to list everything."
+msgstr ""
+
+#: builtin/common/chatcommands.lua
+msgid "[all | <cmd>]"
+msgstr ""
+
+#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp
+msgid "OK"
+msgstr "ठीक आहे"
+
+#: builtin/fstk/ui.lua
+msgid "<none available>"
+msgstr ""
+
+#: builtin/fstk/ui.lua
+msgid "An error occurred in a Lua script:"
+msgstr "तà¥à¤°à¥à¤Ÿà¥€ आढळली"
+
+#: builtin/fstk/ui.lua
+msgid "An error occurred:"
+msgstr "à¤à¤• तà¥à¤°à¥à¤Ÿà¥€ आली:"
+
+#: builtin/fstk/ui.lua
+msgid "Main menu"
+msgstr "मà¥à¤–à¥à¤¯ पान"
+
+#: builtin/fstk/ui.lua
+msgid "Reconnect"
+msgstr "पà¥à¤¨à¥à¤¹à¤¾ सामील वà¥à¤¹à¤¾"
+
+#: builtin/fstk/ui.lua
+msgid "The server has requested a reconnect:"
+msgstr "पà¥à¤¨à¥à¤¹à¤¾ सामील होणà¥à¤¯à¤¾à¤¸à¤¾à¤ à¥€ विनंती करीत आहे:"
+
+#: builtin/mainmenu/common.lua
+msgid "Protocol version mismatch. "
+msgstr "सरà¥à¤µà¥à¤¹à¤°à¤šà¥€ आवृतà¥à¤¤à¥€ जà¥à¤³à¤¤ नाही "
+
+#: builtin/mainmenu/common.lua
+msgid "Server enforces protocol version $1. "
+msgstr "सरà¥à¤µà¥à¤¹à¤° फकà¥à¤¤ आवृतà¥à¤¤à¥€ $1 वर कारà¥à¤¯ करतो "
+
+#: builtin/mainmenu/common.lua
+msgid "Server supports protocol versions between $1 and $2. "
+msgstr "सरà¥à¤µà¥à¤¹à¤° $1 आणि $2 दरमà¥à¤¯à¤¾à¤¨ पà¥à¤°à¥‹à¤Ÿà¥‹à¤•ॉल आवृतà¥à¤¤à¥€à¤šà¥‡ समरà¥à¤¥à¤¨ करतो. "
+
+#: builtin/mainmenu/common.lua
+msgid "We only support protocol version $1."
+msgstr "आमà¥à¤¹à¥€ केवळ आवृतà¥à¤¤à¥€ $1 चे समरà¥à¤¥à¤¨ करतो."
+
+#: builtin/mainmenu/common.lua
+msgid "We support protocol versions between version $1 and $2."
+msgstr "आमà¥à¤¹à¥€ केवळ आवृतà¥à¤¤à¥€ $1 आणि आवृतà¥à¤¤à¥€ $2 चे समरà¥à¤¥à¤¨ करतो."
+
+#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/dlg_contentstore.lua
+#: builtin/mainmenu/dlg_create_world.lua
+#: builtin/mainmenu/dlg_delete_content.lua
+#: builtin/mainmenu/dlg_delete_world.lua
+#: builtin/mainmenu/dlg_rename_modpack.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua src/client/keycode.cpp
+#: src/gui/guiConfirmRegistration.cpp src/gui/guiKeyChangeMenu.cpp
+#: src/gui/guiPasswordChange.cpp
+msgid "Cancel"
+msgstr "रदà¥à¤¦ करा"
+
+#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/dlg_contentstore.lua
+#: builtin/mainmenu/tab_content.lua
+msgid "Dependencies:"
+msgstr "अवलंबितà¥à¤µ:"
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "Disable all"
+msgstr "सरà¥à¤µ काही थांबवा"
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "Disable modpack"
+msgstr "मॉडपॅक वापरणे थांबवा"
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "Enable all"
+msgstr "सरà¥à¤µ वापरा"
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "Enable modpack"
+msgstr "मॉडपॅक वापरा"
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid ""
+"Failed to enable mod \"$1\" as it contains disallowed characters. Only "
+"characters [a-z0-9_] are allowed."
+msgstr "मॉड \"$1\" वापरॠनाही शकत... कारण तà¥à¤¯à¤¾ नावात चà¥à¤•ीचे अकà¥à¤·à¤°à¥‡ आहेत."
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "Find More Mods"
+msgstr "आणखी मॉड शोधा"
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "Mod:"
+msgstr "मॉड:"
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "No (optional) dependencies"
+msgstr "अवलंबन नाही"
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "No game description provided."
+msgstr "वरà¥à¤£à¤¨ केलेले नाही."
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "No hard dependencies"
+msgstr "अवलंबन नाही"
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "No modpack description provided."
+msgstr "वरà¥à¤£à¤¨ केलेले नाही."
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "No optional dependencies"
+msgstr "कोणताही मॉड बदलणार नाही"
+
+#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_content.lua
+msgid "Optional dependencies:"
+msgstr "बदलणारे मॉड:"
+
+#: builtin/mainmenu/dlg_config_world.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua src/gui/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_contentstore.lua
+msgid "\"$1\" already exists. Would you like to overwrite it?"
+msgstr "$१ आधीच डाउनà¥à¤²à¥‹à¤†à¤¡à¥‡à¤¡ आहे. आपण ते अधिलिखित करू इचà¥à¤›à¤¿à¤¤à¤¾?"
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "$1 and $2 dependencies will be installed."
+msgstr ""
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "$1 by $2"
+msgstr "$1 $2 करून"
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid ""
+"$1 downloading,\n"
+"$2 queued"
+msgstr ""
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "$1 downloading..."
+msgstr "$1 डाउनलोड होत आहे..."
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "$1 required dependencies could not be found."
+msgstr ""
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "$1 will be installed, and $2 dependencies will be skipped."
+msgstr ""
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "All packages"
+msgstr "सरà¥à¤µ संकà¥à¤²à¥‡"
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "Already installed"
+msgstr "आधीच सà¥à¤¥à¤¾à¤ªà¤¿à¤¤"
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "Back to Main Menu"
+msgstr "मà¥à¤–à¥à¤¯ पानावर परत जा"
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "Base Game:"
+msgstr "मà¥à¤–à¥à¤¯ खेळ:"
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "ContentDB is not available when Minetest was compiled without cURL"
+msgstr "जेवà¥à¤¹à¤¾ मिनटेसà¥à¤Ÿ सीआरà¤à¤²à¤¶à¤¿à¤µà¤¾à¤¯ संकलित केले होते तेवà¥à¤¹à¤¾ सामगà¥à¤°à¥€ डीबी उपलबà¥à¤§ नाही"
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "Downloading..."
+msgstr "डाउनलोड करत आहे..."
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "Failed to download $1"
+msgstr "$१ डाउनलोड करू नाही शकत"
+
+#: builtin/mainmenu/dlg_contentstore.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Games"
+msgstr "खेळ"
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "Install"
+msgstr "डाउनलोड"
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "Install $1"
+msgstr "डाउनलोड $1"
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "Install missing dependencies"
+msgstr "गहाळ अवलंबितà¥à¤µ डाउनलोड करा"
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "Install: Unsupported file type or broken archive"
+msgstr ""
+
+#: builtin/mainmenu/dlg_contentstore.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Mods"
+msgstr "मॉड"
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "No packages could be retrieved"
+msgstr "काहीच सापडत नाही"
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "No results"
+msgstr "कोणतीही गोषà¥à¤Ÿ नाहीत"
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "No updates"
+msgstr "अपडेट नाहीत"
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "Not found"
+msgstr "सापडले नाही"
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "Overwrite"
+msgstr "अधिलिखित"
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "Please check that the base game is correct."
+msgstr "कृपया मà¥à¤–à¥à¤¯ खेळ योगà¥à¤¯ आहे याची तपासणी करा."
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "Queued"
+msgstr "रांगेत लागले आहेत"
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "Texture packs"
+msgstr "टेकà¥à¤¸à¤šà¤° पॅक"
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "Uninstall"
+msgstr "काढा"
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "Update"
+msgstr "अपडेट"
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "Update All [$1]"
+msgstr "सरà¥à¤µ अपडेट करा [$1]"
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "View more information in a web browser"
+msgstr "अंतरà¥à¤œà¤¾à¤² शोधक वर माहिती काढा"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "A world named \"$1\" already exists"
+msgstr "\"$1\" नावाचे जग आधीच असà¥à¤¤à¤¿à¤¤à¥à¤µà¤¾à¤¤ आहे"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Additional terrain"
+msgstr "अतिरिकà¥à¤¤ भूभाग"
+
+#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
+msgid "Altitude chill"
+msgstr "थंडी"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Altitude dry"
+msgstr "कोरडे हवामान"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Biome blending"
+msgstr "हवामान आणि आपतà¥à¤¤à¥€ यांचà¥à¤¯à¤¾à¤¤ फरक"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Biomes"
+msgstr "भिनà¥à¤¨ हवामान आणि आपतà¥à¤¤à¥€"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Caverns"
+msgstr "खाण"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Caves"
+msgstr "गà¥à¤¹à¤¾"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Create"
+msgstr "तयार करा"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Decorations"
+msgstr "सजावट"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Download a game, 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
+msgid "Dungeons"
+msgstr "अंधारकोठडी"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Flat terrain"
+msgstr "सपाट जमीन"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Floating landmasses in the sky"
+msgstr "हवेत उडणारे जमीन"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Floatlands (experimental)"
+msgstr "हवेत उडणारे जमीन"
+
+#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
+msgid "Game"
+msgstr "खेळ"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Generate non-fractal terrain: Oceans and underground"
+msgstr "समà¥à¤¦à¥à¤° आणि भूमिगत भूभाग"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Hills"
+msgstr "टेकडà¥à¤¯à¤¾"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Humid rivers"
+msgstr "दमट नदà¥à¤¯à¤¾"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Increases humidity around rivers"
+msgstr "नदà¥à¤¯à¤¾à¤‚चà¥à¤¯à¤¾ आसपास अधिक आरà¥à¤¦à¥à¤°à¤¤à¤¾"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Lakes"
+msgstr "तलाव"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Low humidity and high heat causes shallow or dry rivers"
+msgstr "कमी आरà¥à¤¦à¥à¤°à¤¤à¤¾ आणि जासà¥à¤¤ उषà¥à¤£à¤¤à¤¾ यामà¥à¤³à¥‡ उथळ किंवा कोरडà¥à¤¯à¤¾ नदà¥à¤¯à¤¾"
+
+#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
+msgid "Mapgen"
+msgstr "नकाशा निरà¥à¤®à¤¾à¤¤à¤¾"
+
+#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
+msgid "Mapgen flags"
+msgstr "नकाशा जनरेटर धà¥à¤µà¤œ"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Mapgen-specific flags"
+msgstr "नकाशा जनरेटर विशिषà¥à¤Ÿ धà¥à¤µà¤œà¤¾à¤‚कित करा"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Mountains"
+msgstr "परà¥à¤µà¤¤"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Mud flow"
+msgstr "चिखल पà¥à¤°à¤µà¤¾à¤¹"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Network of tunnels and caves"
+msgstr "बोगदे आणि गà¥à¤¹à¤¾à¤‚चà¥à¤¯à¥‡ जाळे"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "No game selected"
+msgstr "कोणताही खेळ निवडलेला नाही"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Reduces heat with altitude"
+msgstr "कमी उषà¥à¤£à¤¤à¤¾"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Reduces humidity with altitude"
+msgstr "कमी आरà¥à¤¦à¥à¤°à¤¤à¤¾"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Rivers"
+msgstr "नदà¥à¤¯à¤¾"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Sea level rivers"
+msgstr "समà¥à¤¦à¥à¤° पातळीवरील नदà¥à¤¯à¤¾"
+
+#: builtin/mainmenu/dlg_create_world.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Seed"
+msgstr "सीड"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Smooth transition between biomes"
+msgstr "भिनà¥à¤¨ हवामान आणि आपतà¥à¤¤à¥€ यांचà¥à¤¯à¤¾à¤¤ सपाट संकà¥à¤°à¤®à¤£"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid ""
+"Structures appearing on the terrain (no effect on trees and jungle grass "
+"created by v6)"
+msgstr "v6 ने तयार केलेलà¥à¤¯à¤¾ à¤à¤¾à¤¡à¥‡ आणि जंगल गवत यावर कोणताही परिणाम होणार नाही"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Structures appearing on the terrain, typically trees and plants"
+msgstr "भूपà¥à¤°à¤¦à¥‡à¤¶à¤¾à¤µà¤° दिसणारी रचना, विशेषत: à¤à¤¾à¤¡à¥‡"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Temperate, Desert"
+msgstr "समशीतोषà¥à¤£, वाळवंट"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Temperate, Desert, Jungle"
+msgstr "समशीतोषà¥à¤£, वाळवंट, जंगल"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Temperate, Desert, Jungle, Tundra, Taiga"
+msgstr "समशीतोषà¥à¤£ वाळवंट, जंगल, टà¥à¤‚डà¥à¤°à¤¾, तैगा"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Terrain surface erosion"
+msgstr "जमीन पृषà¥à¤ à¤­à¤¾à¤— धूप"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Trees and jungle grass"
+msgstr "à¤à¤¾à¤¡à¥‡ आणि गवत"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Vary river depth"
+msgstr "नदà¥à¤¯à¤¾à¤‚ची खोली बदलते"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Very large caverns deep in the underground"
+msgstr "खोल खाण"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Warning: The Development Test is meant for developers."
+msgstr "चेतावणी: Development Test विकासकांसाठी आहे."
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "World name"
+msgstr "जगाचे नाव"
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "You have no games installed."
+msgstr "आपलà¥à¤¯à¤¾à¤•डे कोणताही खेळ नाही."
+
+#: builtin/mainmenu/dlg_delete_content.lua
+msgid "Are you sure you want to delete \"$1\"?"
+msgstr "आपली खातà¥à¤°à¥€ आहे की आपण \"$1\" काढू इचà¥à¤›à¤¿à¤¤à¤¾?"
+
+#: builtin/mainmenu/dlg_delete_content.lua
+#: builtin/mainmenu/dlg_delete_world.lua builtin/mainmenu/tab_local.lua
+#: src/client/keycode.cpp
+msgid "Delete"
+msgstr "काढा"
+
+#: builtin/mainmenu/dlg_delete_content.lua
+msgid "pkgmgr: failed to delete \"$1\""
+msgstr "pkgmgr: \"$1\" नाही कडू शकत"
+
+#: builtin/mainmenu/dlg_delete_content.lua
+msgid "pkgmgr: invalid path \"$1\""
+msgstr "pkgmgr: अवैध मारà¥à¤— \"$1\""
+
+#: builtin/mainmenu/dlg_delete_world.lua
+msgid "Delete World \"$1\"?"
+msgstr "जग \"$1\" काढा?"
+
+#: builtin/mainmenu/dlg_rename_modpack.lua
+msgid "Accept"
+msgstr "सà¥à¤µà¥€à¤•ारा"
+
+#: builtin/mainmenu/dlg_rename_modpack.lua
+msgid "Rename Modpack:"
+msgstr "मॉडपॅक पà¥à¤¨à¤°à¥à¤¨à¤¾à¤®à¤¿à¤¤ करा:"
+
+#: builtin/mainmenu/dlg_rename_modpack.lua
+msgid ""
+"This modpack has an explicit name given in its modpack.conf which will "
+"override any renaming here."
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "(No description of setting given)"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "2D Noise"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "< Back to Settings page"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Browse"
+msgstr "बà¥à¤°à¤¾à¤‰à¤ करा"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_settings.lua
+msgid "Disabled"
+msgstr "थंबवा"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Edit"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Enabled"
+msgstr "वापरा"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Lacunarity"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Octaves"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua src/settings_translation_file.cpp
+msgid "Offset"
+msgstr "ऑफसेट"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Persistence"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Please enter a valid integer."
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Please enter a valid number."
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Restore Default"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua src/settings_translation_file.cpp
+msgid "Scale"
+msgstr "मोज"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_online.lua
+msgid "Search"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Select directory"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Select file"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Show technical names"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "The value must be at least $1."
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "The value must not be larger than $1."
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "X"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "X spread"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Y"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Y spread"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Z"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Z spread"
+msgstr ""
+
+#. ~ "absvalue" is a noise parameter flag.
+#. It is short for "absolute value".
+#. It can be enabled in noise settings in
+#. main menu -> "All Settings".
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "absvalue"
+msgstr ""
+
+#. ~ "defaults" is a noise parameter flag.
+#. It describes the default processing options
+#. for noise settings in main menu -> "All Settings".
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "defaults"
+msgstr ""
+
+#. ~ "eased" is a noise parameter flag.
+#. It is used to make the map smoother and
+#. can be enabled in noise settings in
+#. main menu -> "All Settings".
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "eased"
+msgstr ""
+
+#: builtin/mainmenu/pkgmgr.lua
+msgid "$1 (Enabled)"
+msgstr ""
+
+#: builtin/mainmenu/pkgmgr.lua
+msgid "$1 mods"
+msgstr ""
+
+#: builtin/mainmenu/pkgmgr.lua
+msgid "Failed to install $1 to $2"
+msgstr ""
+
+#: builtin/mainmenu/pkgmgr.lua
+msgid "Install Mod: Unable to find real mod name for: $1"
+msgstr ""
+
+#: builtin/mainmenu/pkgmgr.lua
+msgid "Install Mod: Unable to find suitable folder name for modpack $1"
+msgstr ""
+
+#: builtin/mainmenu/pkgmgr.lua
+msgid "Unable to find a valid mod or modpack"
+msgstr ""
+
+#: builtin/mainmenu/pkgmgr.lua
+msgid "Unable to install a $1 as a texture pack"
+msgstr ""
+
+#: builtin/mainmenu/pkgmgr.lua
+msgid "Unable to install a game as a $1"
+msgstr ""
+
+#: builtin/mainmenu/pkgmgr.lua
+msgid "Unable to install a mod as a $1"
+msgstr ""
+
+#: builtin/mainmenu/pkgmgr.lua
+msgid "Unable to install a modpack as a $1"
+msgstr ""
+
+#: builtin/mainmenu/serverlistmgr.lua src/client/game.cpp
+msgid "Loading..."
+msgstr ""
+
+#: builtin/mainmenu/serverlistmgr.lua
+msgid "Public server list is disabled"
+msgstr ""
+
+#: builtin/mainmenu/serverlistmgr.lua
+msgid "Try reenabling public serverlist and check your internet connection."
+msgstr ""
+
+#: builtin/mainmenu/tab_about.lua
+msgid "About"
+msgstr ""
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Active Contributors"
+msgstr ""
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Active renderer:"
+msgstr ""
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Core Developers"
+msgstr ""
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Open User Data Directory"
+msgstr ""
+
+#: builtin/mainmenu/tab_about.lua
+msgid ""
+"Opens the directory that contains user-provided worlds, games, mods,\n"
+"and texture packs in a file manager / explorer."
+msgstr ""
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Previous Contributors"
+msgstr ""
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Previous Core Developers"
+msgstr ""
+
+#: builtin/mainmenu/tab_content.lua
+msgid "Browse online content"
+msgstr ""
+
+#: builtin/mainmenu/tab_content.lua
+msgid "Content"
+msgstr ""
+
+#: builtin/mainmenu/tab_content.lua
+msgid "Disable Texture Pack"
+msgstr ""
+
+#: builtin/mainmenu/tab_content.lua
+msgid "Information:"
+msgstr ""
+
+#: builtin/mainmenu/tab_content.lua
+msgid "Installed Packages:"
+msgstr ""
+
+#: builtin/mainmenu/tab_content.lua
+msgid "No dependencies."
+msgstr ""
+
+#: builtin/mainmenu/tab_content.lua
+msgid "No package description available"
+msgstr ""
+
+#: builtin/mainmenu/tab_content.lua
+msgid "Rename"
+msgstr ""
+
+#: builtin/mainmenu/tab_content.lua
+msgid "Uninstall Package"
+msgstr ""
+
+#: builtin/mainmenu/tab_content.lua
+msgid "Use Texture Pack"
+msgstr ""
+
+#: builtin/mainmenu/tab_local.lua
+msgid "Announce Server"
+msgstr ""
+
+#: builtin/mainmenu/tab_local.lua
+msgid "Bind Address"
+msgstr ""
+
+#: builtin/mainmenu/tab_local.lua
+msgid "Creative Mode"
+msgstr ""
+
+#: builtin/mainmenu/tab_local.lua
+msgid "Enable Damage"
+msgstr ""
+
+#: builtin/mainmenu/tab_local.lua
+msgid "Host Game"
+msgstr ""
+
+#: builtin/mainmenu/tab_local.lua
+msgid "Host Server"
+msgstr ""
+
+#: builtin/mainmenu/tab_local.lua
+msgid "Install games from ContentDB"
+msgstr ""
+
+#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
+msgid "Name"
+msgstr ""
+
+#: builtin/mainmenu/tab_local.lua
+msgid "New"
+msgstr ""
+
+#: builtin/mainmenu/tab_local.lua
+msgid "No world created or selected!"
+msgstr ""
+
+#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
+msgid "Password"
+msgstr ""
+
+#: builtin/mainmenu/tab_local.lua
+msgid "Play Game"
+msgstr ""
+
+#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
+msgid "Port"
+msgstr ""
+
+#: builtin/mainmenu/tab_local.lua
+msgid "Select Mods"
+msgstr ""
+
+#: builtin/mainmenu/tab_local.lua
+msgid "Select World:"
+msgstr ""
+
+#: builtin/mainmenu/tab_local.lua
+msgid "Server Port"
+msgstr ""
+
+#: builtin/mainmenu/tab_local.lua
+msgid "Start Game"
+msgstr ""
+
+#: builtin/mainmenu/tab_online.lua
+msgid "Address"
+msgstr ""
+
+#: builtin/mainmenu/tab_online.lua src/client/keycode.cpp
+msgid "Clear"
+msgstr ""
+
+#: builtin/mainmenu/tab_online.lua
+msgid "Connect"
+msgstr ""
+
+#: builtin/mainmenu/tab_online.lua
+msgid "Creative mode"
+msgstr ""
+
+#. ~ PvP = Player versus Player
+#: builtin/mainmenu/tab_online.lua
+msgid "Damage / PvP"
+msgstr ""
+
+#: builtin/mainmenu/tab_online.lua
+msgid "Del. Favorite"
+msgstr ""
+
+#: builtin/mainmenu/tab_online.lua
+msgid "Favorites"
+msgstr ""
+
+#: builtin/mainmenu/tab_online.lua
+msgid "Incompatible Servers"
+msgstr ""
+
+#: builtin/mainmenu/tab_online.lua
+msgid "Join Game"
+msgstr ""
+
+#: builtin/mainmenu/tab_online.lua
+msgid "Ping"
+msgstr ""
+
+#: builtin/mainmenu/tab_online.lua
+#, fuzzy
+msgid "Public Servers"
+msgstr "दमट नदà¥à¤¯à¤¾"
+
+#: builtin/mainmenu/tab_online.lua
+msgid "Refresh"
+msgstr ""
+
+#: builtin/mainmenu/tab_online.lua
+msgid "Server Description"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "2x"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "3D Clouds"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "4x"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "8x"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "All Settings"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Antialiasing:"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Autosave Screen Size"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Bilinear Filter"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua src/client/game.cpp
+msgid "Change Keys"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Connected Glass"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
+msgid "Dynamic shadows"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Dynamic shadows: "
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Fancy Leaves"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "High"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Low"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Medium"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Mipmap"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Mipmap + Aniso. Filter"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "No Filter"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "No Mipmap"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Node Highlighting"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Node Outlining"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "None"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Opaque Leaves"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Opaque Water"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Particles"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Screen:"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Settings"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
+msgid "Shaders"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Shaders (experimental)"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Shaders (unavailable)"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Simple Leaves"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Smooth Lighting"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Texturing:"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
+msgid "Tone Mapping"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Touchthreshold: (px)"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Trilinear Filter"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Ultra High"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Very Low"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Waving Leaves"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Waving Liquids"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Waving Plants"
+msgstr ""
+
+#: src/client/client.cpp src/client/game.cpp
+msgid "Connection timed out."
+msgstr ""
+
+#: src/client/client.cpp
+msgid "Done!"
+msgstr ""
+
+#: src/client/client.cpp
+msgid "Initializing nodes"
+msgstr ""
+
+#: src/client/client.cpp
+msgid "Initializing nodes..."
+msgstr ""
+
+#: src/client/client.cpp
+msgid "Loading textures..."
+msgstr ""
+
+#: src/client/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 "Please choose a name!"
+msgstr ""
+
+#: src/client/clientlauncher.cpp
+msgid "Provided password file failed to open: "
+msgstr ""
+
+#: src/client/clientlauncher.cpp
+msgid "Provided world path doesn't exist: "
+msgstr ""
+
+#: src/client/game.cpp
+msgid ""
+"\n"
+"Check debug.txt for details."
+msgstr ""
+
+#: src/client/game.cpp
+msgid "- Address: "
+msgstr ""
+
+#: src/client/game.cpp
+msgid "- Mode: "
+msgstr ""
+
+#: src/client/game.cpp
+msgid "- Port: "
+msgstr ""
+
+#: src/client/game.cpp
+msgid "- Public: "
+msgstr ""
+
+#. ~ PvP = Player versus Player
+#: src/client/game.cpp
+msgid "- PvP: "
+msgstr ""
+
+#: src/client/game.cpp
+msgid "- Server Name: "
+msgstr ""
+
+#: src/client/game.cpp
+#, fuzzy
+msgid "A serialization error occurred:"
+msgstr "à¤à¤• तà¥à¤°à¥à¤Ÿà¥€ आली:"
+
+#: src/client/game.cpp
+#, c-format
+msgid "Access denied. Reason: %s"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Automatic forward disabled"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Automatic forward enabled"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Block bounds hidden"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Block bounds shown for all blocks"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Block bounds shown for current block"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Block bounds shown for nearby blocks"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Camera update disabled"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Camera update enabled"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Can't show block bounds (need 'basic_debug' privilege)"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Change Password"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Cinematic mode disabled"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Cinematic mode enabled"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Client disconnected"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Client side scripting is disabled"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Connecting to server..."
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Connection failed for unknown reason"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Continue"
+msgstr ""
+
+#: src/client/game.cpp
+#, c-format
+msgid ""
+"Controls:\n"
+"- %s: move forwards\n"
+"- %s: move backwards\n"
+"- %s: move left\n"
+"- %s: move right\n"
+"- %s: jump/climb up\n"
+"- %s: dig/punch\n"
+"- %s: place/use\n"
+"- %s: sneak/climb down\n"
+"- %s: drop item\n"
+"- %s: inventory\n"
+"- Mouse: turn/look\n"
+"- Mouse wheel: select item\n"
+"- %s: chat\n"
+msgstr ""
+
+#: src/client/game.cpp
+#, c-format
+msgid "Couldn't resolve address: %s"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Creating client..."
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Creating server..."
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Debug info and profiler graph hidden"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Debug info shown"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Debug info, profiler graph, and wireframe hidden"
+msgstr ""
+
+#: src/client/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/client/game.cpp
+msgid "Disabled unlimited viewing range"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Enabled unlimited viewing range"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Exit to Menu"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Exit to OS"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Fast mode disabled"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Fast mode enabled"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Fast mode enabled (note: no 'fast' privilege)"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Fly mode disabled"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Fly mode enabled"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Fly mode enabled (note: no 'fly' privilege)"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Fog disabled"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Fog enabled"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Game info:"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Game paused"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Hosting server"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Item definitions..."
+msgstr ""
+
+#: src/client/game.cpp
+msgid "KiB/s"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Media..."
+msgstr ""
+
+#: src/client/game.cpp
+msgid "MiB/s"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Minimap currently disabled by game or mod"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Multiplayer"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Noclip mode disabled"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Noclip mode enabled"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Noclip mode enabled (note: no 'noclip' privilege)"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Node definitions..."
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Off"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "On"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Pitch move mode disabled"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Pitch move mode enabled"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Profiler graph shown"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Remote server"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Resolving address..."
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Shutting down..."
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Singleplayer"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Sound Volume"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Sound muted"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Sound system is disabled"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Sound system is not supported on this build"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Sound unmuted"
+msgstr ""
+
+#: src/client/game.cpp
+#, c-format
+msgid "The server is probably running a different version of %s."
+msgstr ""
+
+#: src/client/game.cpp
+#, c-format
+msgid "Unable to connect to %s because IPv6 is disabled"
+msgstr ""
+
+#: src/client/game.cpp
+#, c-format
+msgid "Unable to listen on %s because IPv6 is disabled"
+msgstr ""
+
+#: src/client/game.cpp
+#, c-format
+msgid "Viewing range changed to %d"
+msgstr ""
+
+#: src/client/game.cpp
+#, c-format
+msgid "Viewing range is at maximum: %d"
+msgstr ""
+
+#: src/client/game.cpp
+#, c-format
+msgid "Viewing range is at minimum: %d"
+msgstr ""
+
+#: src/client/game.cpp
+#, c-format
+msgid "Volume changed to %d%%"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Wireframe shown"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Zoom currently disabled by game or mod"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "ok"
+msgstr ""
+
+#: src/client/gameui.cpp
+msgid "Chat hidden"
+msgstr ""
+
+#: src/client/gameui.cpp
+msgid "Chat shown"
+msgstr ""
+
+#: src/client/gameui.cpp
+msgid "HUD hidden"
+msgstr ""
+
+#: src/client/gameui.cpp
+msgid "HUD shown"
+msgstr ""
+
+#: src/client/gameui.cpp
+msgid "Profiler hidden"
+msgstr ""
+
+#: src/client/gameui.cpp
+#, c-format
+msgid "Profiler shown (page %d of %d)"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Apps"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Backspace"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Caps Lock"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Control"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Down"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "End"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Erase EOF"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Execute"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Help"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Home"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "IME Accept"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "IME Convert"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "IME Escape"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "IME Mode Change"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "IME Nonconvert"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Insert"
+msgstr ""
+
+#: src/client/keycode.cpp src/gui/guiKeyChangeMenu.cpp
+msgid "Left"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Left Button"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Left Control"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Left Menu"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Left Shift"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Left Windows"
+msgstr ""
+
+#. ~ Key name, common on Windows keyboards
+#: src/client/keycode.cpp
+msgid "Menu"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Middle Button"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Num Lock"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Numpad *"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Numpad +"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Numpad -"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Numpad ."
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Numpad /"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Numpad 0"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Numpad 1"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Numpad 2"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Numpad 3"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Numpad 4"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Numpad 5"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Numpad 6"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Numpad 7"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Numpad 8"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Numpad 9"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "OEM Clear"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Page down"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Page up"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Pause"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Play"
+msgstr ""
+
+#. ~ "Print screen" key
+#: src/client/keycode.cpp
+msgid "Print"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Return"
+msgstr ""
+
+#: src/client/keycode.cpp src/gui/guiKeyChangeMenu.cpp
+msgid "Right"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Right Button"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Right Control"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Right Menu"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Right Shift"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Right Windows"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Scroll Lock"
+msgstr ""
+
+#. ~ Key name
+#: src/client/keycode.cpp
+msgid "Select"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Shift"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Sleep"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Snapshot"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Space"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Tab"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Up"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "X Button 1"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "X Button 2"
+msgstr ""
+
+#: src/client/keycode.cpp src/gui/guiKeyChangeMenu.cpp
+msgid "Zoom"
+msgstr ""
+
+#: src/client/minimap.cpp
+msgid "Minimap hidden"
+msgstr ""
+
+#: src/client/minimap.cpp
+#, c-format
+msgid "Minimap in radar mode, Zoom x%d"
+msgstr ""
+
+#: src/client/minimap.cpp
+#, c-format
+msgid "Minimap in surface mode, Zoom x%d"
+msgstr ""
+
+#: src/client/minimap.cpp
+msgid "Minimap in texture mode"
+msgstr ""
+
+#: src/gui/guiChatConsole.cpp
+#, fuzzy
+msgid "Failed to open webpage"
+msgstr "$१ डाउनलोड करू नाही शकत"
+
+#: src/gui/guiChatConsole.cpp
+msgid "Opening webpage"
+msgstr ""
+
+#: src/gui/guiConfirmRegistration.cpp src/gui/guiPasswordChange.cpp
+msgid "Passwords do not match!"
+msgstr ""
+
+#: src/gui/guiConfirmRegistration.cpp
+msgid "Register and Join"
+msgstr ""
+
+#: src/gui/guiConfirmRegistration.cpp
+#, c-format
+msgid ""
+"You are about to join this server with the name \"%s\" for the first time.\n"
+"If you proceed, a new account using your credentials will be created on this "
+"server.\n"
+"Please retype your password and click 'Register and Join' to confirm account "
+"creation, or click 'Cancel' to abort."
+msgstr ""
+
+#: src/gui/guiFormSpecMenu.cpp
+msgid "Proceed"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "\"Aux1\" = climb down"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Autoforward"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp src/settings_translation_file.cpp
+msgid "Automatic jumping"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Aux1"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Backward"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Block bounds"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Change camera"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Chat"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Command"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Console"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Dec. range"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Dec. volume"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Double tap \"jump\" to toggle fly"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Drop"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Forward"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Inc. range"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Inc. volume"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Inventory"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Jump"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Key already in use"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Local command"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Mute"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Next item"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Prev. item"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Range select"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp src/settings_translation_file.cpp
+msgid "Screenshot"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Sneak"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Toggle HUD"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Toggle chat log"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Toggle fast"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Toggle fly"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Toggle fog"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Toggle minimap"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Toggle noclip"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Toggle pitchmove"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "press key"
+msgstr ""
+
+#: src/gui/guiPasswordChange.cpp
+msgid "Change"
+msgstr ""
+
+#: src/gui/guiPasswordChange.cpp
+msgid "Confirm Password"
+msgstr ""
+
+#: src/gui/guiPasswordChange.cpp
+msgid "New Password"
+msgstr ""
+
+#: src/gui/guiPasswordChange.cpp
+msgid "Old Password"
+msgstr ""
+
+#: src/gui/guiVolumeChange.cpp
+msgid "Exit"
+msgstr ""
+
+#: src/gui/guiVolumeChange.cpp
+msgid "Muted"
+msgstr ""
+
+#: src/gui/guiVolumeChange.cpp
+#, c-format
+msgid "Sound Volume: %d%%"
+msgstr ""
+
+#. ~ Imperative, as in "Enter/type in text".
+#. Don't forget the space.
+#: src/gui/modalMenu.cpp
+msgid "Enter "
+msgstr ""
+
+#. ~ DO NOT TRANSLATE THIS LITERALLY!
+#. This is a special string which needs to contain the translation's
+#. language code (e.g. "de" for German).
+#: src/network/clientpackethandler.cpp src/script/lua_api/l_client.cpp
+msgid "LANG_CODE"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"(Android) Fixes the position of virtual joystick.\n"
+"If disabled, virtual joystick will center to first-touch's position."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"(Android) Use virtual joystick to trigger \"Aux1\" button.\n"
+"If enabled, virtual joystick will also tap \"Aux1\" button when out of main "
+"circle."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"(X,Y,Z) offset of fractal from world center in units of 'scale'.\n"
+"Can be used to move a desired point to (0, 0) to create a\n"
+"suitable spawn point, or to allow 'zooming in' on a desired\n"
+"point by increasing 'scale'.\n"
+"The default is tuned for a suitable spawn point for Mandelbrot\n"
+"sets with default parameters, it may need altering in other\n"
+"situations.\n"
+"Range roughly -2 to 2. Multiply by 'scale' for offset in nodes."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"(X,Y,Z) scale of fractal in nodes.\n"
+"Actual fractal size will be 2 to 3 times larger.\n"
+"These numbers can be made very large, the fractal does\n"
+"not have to fit inside the world.\n"
+"Increase these to 'zoom' into the detail of the fractal.\n"
+"Default is for a vertically-squashed shape suitable for\n"
+"an island, set all 3 numbers equal for the raw shape."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "2D noise that controls the shape/size of ridged mountains."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "2D noise that controls the shape/size of rolling hills."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "2D noise that controls the shape/size of step mountains."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "2D noise that controls the size/occurrence of ridged mountain ranges."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "2D noise that controls the size/occurrence of rolling hills."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "2D noise that controls the size/occurrence of step mountain ranges."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "2D noise that locates the river valleys and channels."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "3D clouds"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "3D mode"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "3D mode parallax strength"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "3D noise defining giant caverns."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"3D noise defining mountain structure and height.\n"
+"Also defines structure of floatland mountain terrain."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"3D noise defining structure of floatlands.\n"
+"If altered from the default, the noise 'scale' (0.7 by default) may need\n"
+"to be adjusted, as floatland tapering functions best when this noise has\n"
+"a value range of approximately -2.0 to 2.0."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "3D noise defining structure of river canyon walls."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "3D noise defining terrain."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "3D noise for mountain overhangs, cliffs, etc. Usually small variations."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "3D noise that determines number of dungeons per mapchunk."
+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.\n"
+"- crossview: Cross-eyed 3d\n"
+"- pageflip: quadbuffer based 3d.\n"
+"Note that the interlaced mode requires shaders to be enabled."
+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 "ABM interval"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "ABM time budget"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Absolute limit of queued blocks to emerge"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Acceleration in air"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Acceleration of gravity, in nodes per second per second."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Active Block Modifiers"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Active block management interval"
+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 "Adds particles when digging a node."
+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 detected display density, used for scaling UI elements."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, c-format
+msgid ""
+"Adjusts the density of the floatland layer.\n"
+"Increase value to increase density. Can be positive or negative.\n"
+"Value = 0.0: 50% of volume is floatland.\n"
+"Value = 2.0 (can be higher depending on 'mgv7_np_floatland', always test\n"
+"to be sure) creates a solid floatland layer."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Advanced"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Alters the light curve by applying 'gamma correction' to it.\n"
+"Higher values make middle and lower light levels brighter.\n"
+"Value '1.0' leaves the light curve unaltered.\n"
+"This only has significant effect on daylight and artificial\n"
+"light, it has very little effect on natural night light."
+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 "Amount of messages a player may send per 10 seconds."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Amplifies the valleys."
+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."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Append item name"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Append item name to tooltip."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Apple trees noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Arm inertia"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Arm inertia, gives a more realistic movement of\n"
+"the arm when the camera moves."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Ask to reconnect after crash"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"At this distance the server will aggressively optimize which blocks are sent "
+"to\n"
+"clients.\n"
+"Small values potentially improve performance a lot, at the expense of "
+"visible\n"
+"rendering glitches (some blocks will not be rendered under water and in "
+"caves,\n"
+"as well as sometimes on land).\n"
+"Setting this to a value greater than max_block_send_distance disables this\n"
+"optimization.\n"
+"Stated in mapblocks (16 nodes)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Automatic forward key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Automatically jump up single-node obstacles."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Automatically report to the serverlist."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Autosave screen size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Autoscaling mode"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Aux1 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Aux1 key for climbing/descending"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Backward key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Base ground level"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Base terrain height."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Basic"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Basic privileges"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Beach noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Beach noise threshold"
+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 "Biome API temperature and humidity noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Biome noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Block send optimize distance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Bold and italic font path"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Bold and italic monospace font path"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Bold font path"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Bold monospace font path"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Build inside player"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Builtin"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Camera 'near clipping plane' distance in nodes, between 0 and 0.25\n"
+"Only works on GLES platforms. Most users will not need to change this.\n"
+"Increasing can reduce artifacting on weaker GPUs.\n"
+"0.1 = Default, 0.25 = Good value for weaker tablets."
+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 "Cave noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Cave noise #1"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Cave noise #2"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Cave width"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Cave1 noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Cave2 noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Cavern limit"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Cavern noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Cavern taper"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Cavern threshold"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Cavern upper limit"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Center of light curve boost range.\n"
+"Where 0.0 is minimum light level, 1.0 is maximum light level."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Chat command time message threshold"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Chat commands"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Chat font size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Chat key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Chat log level"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Chat message count limit"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Chat message format"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Chat message kick threshold"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Chat message max length"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Chat toggle key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Chat weblinks"
+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 ""
+"Clickable weblinks (middle-click or Ctrl+left-click) enabled in chat console "
+"output."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Client"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Client and Server"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Client modding"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Client side modding restrictions"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Client side node lookup range restriction"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Climbing speed"
+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 "Colored shadows"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Comma-separated list of flags to hide in the content repository.\n"
+"\"nonfree\" can be used to hide packages which do not qualify as 'free "
+"software',\n"
+"as defined by the Free Software Foundation.\n"
+"You can also specify content ratings.\n"
+"These flags are independent from Minetest versions,\n"
+"so see a full list at https://content.minetest.net/help/content_flags/"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Comma-separated list of mods that are allowed to access HTTP APIs, which\n"
+"allow them to upload and download data to/from the internet."
+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 ""
+"Compression level to use when saving mapblocks to disk.\n"
+"-1 - use default compression level\n"
+"0 - least compression, fastest\n"
+"9 - best compression, slowest"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Compression level to use when sending mapblocks to the client.\n"
+"-1 - use default compression level\n"
+"0 - least compression, fastest\n"
+"9 - best compression, slowest"
+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 height"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "ContentDB Flag Blacklist"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "ContentDB Max Concurrent Downloads"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "ContentDB URL"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Continuous forward"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Continuous forward movement, toggled by autoforward key.\n"
+"Press the autoforward key again or the backwards movement to disable."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Controls"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Controls length of day/night cycle.\n"
+"Examples:\n"
+"72 = 20min, 360 = 4min, 1 = 24hour, 0 = day/night/whatever stays unchanged."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Controls sinking speed in liquid."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Controls steepness/depth of lake depressions."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Controls steepness/height of hills."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Controls width of tunnels, a smaller value creates wider tunnels.\n"
+"Value >= 10.0 completely disables generation of tunnels and avoids the\n"
+"intensive noise calculations."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Crash message"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Creative"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Crosshair alpha"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Crosshair alpha (opaqueness, between 0 and 255).\n"
+"This also applies to the object crosshair."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Crosshair color"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Crosshair color (R,G,B).\n"
+"Also controls the object crosshair color"
+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 file size threshold"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Debug log level"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Dec. volume key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Decrease this to increase liquid resistance to movement."
+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 report format"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Default stack size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Define shadow filtering quality.\n"
+"This simulates the soft shadows effect by applying a PCF or Poisson disk\n"
+"but also uses more resources."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Defines areas where trees have apples."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Defines areas with sandy beaches."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Defines distribution of higher terrain and steepness of cliffs."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Defines distribution of higher terrain."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Defines full size of caverns, smaller values create larger caverns."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Defines large-scale river channel structure."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Defines location and terrain of optional hills and lakes."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Defines the base ground level."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Defines the depth of the river channel."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Defines the maximal player transfer distance in blocks (0 = unlimited)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Defines the width of the river channel."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Defines the width of the river valley."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Defines tree areas and tree density."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Delay between mesh updates on the client in ms. Increasing this will slow\n"
+"down the rate of mesh updates, thus reducing jitter on slower clients."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Delay in sending blocks after building"
+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 "Depth below which you'll find giant caverns."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Depth below which you'll find large caves."
+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 "Desert noise threshold"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Deserts occur when np_biome exceeds this value.\n"
+"When the 'snowbiomes' flag is enabled, this is ignored."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Desynchronize block animation"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Dig key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Digging particles"
+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 "Display Density Scaling Factor"
+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 information."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Dungeon maximum Y"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Dungeon minimum Y"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Dungeon noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable IPv6 support (for both client and server).\n"
+"Required for IPv6 connections to work at all."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable Lua modding support on client.\n"
+"This support is experimental and API can change."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable Poisson disk filtering.\n"
+"On true uses Poisson disk to make \"soft shadows\". Otherwise uses PCF "
+"filtering."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable colored shadows.\n"
+"On true translucent nodes cast colored shadows. This is expensive."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Enable console window"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Enable creative mode for all players"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Enable joysticks"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Enable mod channels support."
+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 register confirmation"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable register confirmation when connecting to server.\n"
+"If disabled, new account will be registered automatically."
+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 vertex buffer objects.\n"
+"This should greatly improve graphics performance."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable view bobbing and amount of 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 ""
+"Enable/disable running an IPv6 server.\n"
+"Ignored if bind_address is set.\n"
+"Needs enable_ipv6 to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enables Hable's 'Uncharted 2' filmic tone mapping.\n"
+"Simulates the tone curve of photographic film and how this approximates the\n"
+"appearance of high dynamic range images. Mid-range contrast is slightly\n"
+"enhanced, highlights and shadows are gradually compressed."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Enables animation of inventory items."
+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 the sound system.\n"
+"If disabled, this completely disables all sounds everywhere and the in-game\n"
+"sound controls will be non-functional.\n"
+"Changing this setting requires a restart."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enables tradeoffs that reduce CPU load or increase rendering performance\n"
+"at the expense of minor visual glitches that do not impact game playability."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Engine profiling data print interval"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Entity methods"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Exponent of the floatland tapering. Alters the tapering behaviour.\n"
+"Value = 1.0 creates a uniform, linear tapering.\n"
+"Values > 1.0 create a smooth tapering suitable for the default separated\n"
+"floatlands.\n"
+"Values < 1.0 (for example 0.25) create a more defined surface level with\n"
+"flatter lowlands, suitable for a solid floatland layer."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "FPS when unfocused or paused"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "FSAA"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Factor noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fall bobbing factor"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fallback font path"
+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 the \"Aux1\" key).\n"
+"This requires the \"fast\" privilege on the server."
+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\n"
+"Multiplayer Tab."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Filler depth"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Filler depth noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Filmic tone mapping"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Filtered textures can blend RGB values with fully-transparent neighbors,\n"
+"which PNG optimizers usually discard, often resulting in dark or\n"
+"light edges to transparent textures. Apply a filter to clean that up\n"
+"at texture load time. This is automatically enabled if mipmapping is enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Filtering"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "First of 4 2D noises that together define hill/mountain range height."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "First of two 3D noises that together define tunnels."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fixed map seed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fixed virtual joystick"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland density"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland maximum Y"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland minimum Y"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland taper exponent"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland tapering distance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland water level"
+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 start"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fog toggle key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Font bold by default"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Font italic by default"
+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 size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Font size divisible by"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Font size of the default font where 1 unit = 1 pixel at 96 DPI"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Font size of the monospace font where 1 unit = 1 pixel at 96 DPI"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Font size of the recent chat text and chat prompt in point (pt).\n"
+"Value 0 will use the default font size."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"For pixel-style fonts that do not scale well, this ensures that font sizes "
+"used\n"
+"with this font will always be divisible by this value, in pixels. For "
+"instance,\n"
+"a pixel font 16 pixels tall should have this set to 16, so it will only ever "
+"be\n"
+"sized 16, 32, 48, etc., so a mod requesting a size of 25 will get 32."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Format of player chat messages. The following strings are valid "
+"placeholders:\n"
+"@name, @message, @timestamp (optional)"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Format of screenshots."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Formspec Default Background Color"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Formspec Default Background Opacity"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Formspec Full-Screen Background Color"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Formspec Full-Screen Background Opacity"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Formspec default background color (R,G,B)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Formspec default background opacity (between 0 and 255)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Formspec full-screen background color (R,G,B)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Formspec full-screen background opacity (between 0 and 255)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Forward key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fourth of 4 2D noises that together define hill/mountain range height."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fractal type"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fraction of the visible distance at which fog starts to be rendered"
+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).\n"
+"\n"
+"Setting this larger than active_block_range will also cause the server\n"
+"to maintain active objects up to this distance in the direction the\n"
+"player is looking. (This can avoid mobs suddenly disappearing from view)"
+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 "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 "Global callbacks"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Global map generation attributes.\n"
+"In Mapgen v6 the 'decorations' flag controls all decorations except trees\n"
+"and jungle grass, in all other mapgens this flag controls all decorations."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Gradient of light curve at maximum light level.\n"
+"Controls the contrast of the highest light levels."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Gradient of light curve at minimum light level.\n"
+"Controls the contrast of the lowest light levels."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Graphics"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Gravity"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Ground level"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Ground noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "HTTP mods"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "HUD scale factor"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "HUD toggle key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Handling for deprecated Lua API calls:\n"
+"- none: Do not log deprecated calls\n"
+"- log: mimic and log backtrace of deprecated call (default).\n"
+"- error: abort on usage of deprecated call (suggested for mod developers)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Have the profiler instrument itself:\n"
+"* Instrument an empty function.\n"
+"This estimates the overhead, that instrumentation is adding (+1 function "
+"call).\n"
+"* Instrument the sampler being used to update the statistics."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Heat blend noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Heat noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Height component of the initial window size. Ignored in fullscreen mode."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Height noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Height select noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hill steepness"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hill threshold"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hilliness1 noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hilliness2 noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hilliness3 noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hilliness4 noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Homepage of server, to be displayed in the serverlist."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Horizontal acceleration in air when jumping or falling,\n"
+"in nodes per second per second."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Horizontal and vertical acceleration in fast mode,\n"
+"in nodes per second per second."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Horizontal and vertical acceleration on ground or when climbing,\n"
+"in nodes per second per second."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar next key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar previous key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 1 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 10 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 11 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 12 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 13 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 14 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 15 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 16 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 17 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 18 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 19 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 2 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 20 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 21 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 22 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 23 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 24 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 25 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 26 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 27 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 28 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 29 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 3 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 30 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 31 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 32 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 4 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 5 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 6 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 7 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 8 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 9 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "How deep to make rivers."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"How fast liquid waves will move. Higher = faster.\n"
+"If negative, liquid waves will move backwards.\n"
+"Requires waving liquids to be enabled."
+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 "How wide to make rivers."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Humidity blend noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Humidity noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Humidity variation for biomes."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "IPv6"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "IPv6 server"
+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, \"Aux1\" key is used to fly fast if both fly and fast mode are\n"
+"enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"If enabled the server will perform map block occlusion culling based on\n"
+"on the eye position of the player. This can reduce the number of blocks\n"
+"sent to the client 50-80%. The client will not longer receive most "
+"invisible\n"
+"so that the utility of noclip mode is reduced."
+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 \"noclip\" privilege on the server."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"If enabled, \"Aux1\" key instead of \"Sneak\" key is used for climbing down "
+"and\n"
+"descending."
+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, makes move directions relative to the player's pitch when flying "
+"or swimming."
+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 the CSM restriction for node range is enabled, get_node calls are "
+"limited\n"
+"to this distance from the player to the node."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"If the execution of a chat command takes longer than this specified time in\n"
+"seconds, add the time information to the chat command message"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"If the file size of debug.txt exceeds the number of megabytes specified in\n"
+"this setting when it is opened, the file is moved to debug.txt.1,\n"
+"deleting an older debug.txt.1 if it exists.\n"
+"debug.txt is only moved if this setting is positive."
+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 "In-game chat console height, between 0.1 (10%) and 1.0 (100%)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Inc. volume key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Initial vertical speed when jumping, in nodes per second."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Instrument builtin.\n"
+"This is usually only needed by core/builtin contributors"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Instrument chat commands on registration."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Instrument global callback functions on registration.\n"
+"(anything you pass to a minetest.register_*() function)"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Instrument the action function of Active Block Modifiers on registration."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Instrument the action function of Loading Block Modifiers on registration."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Instrument the methods of entities on registration."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Instrumentation"
+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 items animations"
+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 "Italic font path"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Italic monospace font path"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Item entity TTL"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Iterations"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Iterations of the recursive function.\n"
+"Increasing this increases the amount of fine detail, but also\n"
+"increases processing load.\n"
+"At iterations = 20 this mapgen has a similar load to mapgen V7."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Joystick ID"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Joystick button repetition interval"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Joystick dead zone"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Joystick frustum sensitivity"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Joystick type"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Julia set only.\n"
+"W component of hypercomplex constant.\n"
+"Alters the shape of the fractal.\n"
+"Has no effect on 3D fractals.\n"
+"Range roughly -2 to 2."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Julia set only.\n"
+"X component of hypercomplex constant.\n"
+"Alters the shape of the fractal.\n"
+"Range roughly -2 to 2."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Julia set only.\n"
+"Y component of hypercomplex constant.\n"
+"Alters the shape of the fractal.\n"
+"Range roughly -2 to 2."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Julia set only.\n"
+"Z component of hypercomplex constant.\n"
+"Alters the shape of the fractal.\n"
+"Range roughly -2 to 2."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Julia w"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Julia x"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Julia y"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Julia z"
+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.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for decreasing the volume.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for digging.\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.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for increasing the volume.\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"
+"Will also disable autoforward, when active.\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 muting the game.\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 to type local 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 placing.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 11th hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 12th hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 13th hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 14th hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 15th hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 16th hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 17th hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 18th hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 19th hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 20th hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 21st hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 22nd hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 23rd hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 24th hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 25th hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 26th hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 27th hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 28th hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 29th hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 30th hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 31st hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 32nd hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the eighth hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the fifth hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the first hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the fourth hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the next item in the hotbar.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the ninth hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the previous item in the hotbar.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the second hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the seventh hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the sixth hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the tenth hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the third hotbar slot.\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 autoforward.\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 pitch move mode.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling the camera 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 chat.\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 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 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 large chat console.\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 to use view zoom when possible.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Kick players who sent more than X messages per 10 seconds."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Lake steepness"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Lake threshold"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Language"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Large cave depth"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Large cave maximum number"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Large cave minimum number"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Large cave proportion flooded"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Large chat console key"
+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\n"
+"network."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Length of liquid waves.\n"
+"Requires waving liquids to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Length of time between Active Block Modifier (ABM) execution cycles"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Length of time between NodeTimer execution cycles"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Length of time between active block management cycles"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Level of logging to be written to debug.txt:\n"
+"- <nothing> (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 "Light curve boost"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Light curve boost center"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Light curve boost spread"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Light curve gamma"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Light curve high gradient"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Light curve low gradient"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Limit of map generation, in nodes, in all 6 directions from (0, 0, 0).\n"
+"Only mapchunks completely within the mapgen limit are generated.\n"
+"Value is stored per-world."
+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 sinking"
+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 "Load the game profiler"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Load the game profiler to collect game profiling data.\n"
+"Provides a /profiler command to access the compiled profile.\n"
+"Useful for mod developers and server operators."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Loading Block Modifiers"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Lower Y limit of dungeons."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Lower Y limit of floatlands."
+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 all liquids opaque"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Map Compression Level for Disk Storage"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Map Compression Level for Network Transfer"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Map directory"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Map generation attributes specific to Mapgen Carpathian."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Map generation attributes specific to Mapgen Flat.\n"
+"Occasional lakes and hills can be added to the flat world."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Map generation attributes specific to Mapgen Fractal.\n"
+"'terrain' enables the generation of non-fractal terrain:\n"
+"ocean, islands and underground."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Map generation attributes specific to Mapgen Valleys.\n"
+"'altitude_chill': Reduces heat with altitude.\n"
+"'humid_rivers': Increases humidity around rivers.\n"
+"'vary_river_depth': If enabled, low humidity and high heat causes rivers\n"
+"to become shallower and occasionally dry.\n"
+"'altitude_dry': Reduces humidity with altitude."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Map generation attributes specific to Mapgen v5."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Map generation attributes specific to Mapgen v6.\n"
+"The 'snowbiomes' flag enables the new 5 biome system.\n"
+"When the 'snowbiomes' flag is enabled jungles are automatically enabled and\n"
+"the 'jungles' flag is ignored."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Map generation attributes specific to Mapgen v7.\n"
+"'ridges': Rivers.\n"
+"'floatlands': Floating land masses in the atmosphere.\n"
+"'caverns': Giant caves deep underground."
+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 "Map shadows update frames"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapblock limit"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapblock mesh generation delay"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapblock mesh generator's MapBlock cache size in MB"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapblock unload timeout"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen Carpathian"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen Carpathian specific flags"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen Flat"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen Flat specific flags"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen Fractal"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen Fractal specific flags"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen V5"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen V5 specific flags"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen V6"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen V6 specific flags"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen V7"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen V7 specific flags"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen Valleys"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen Valleys specific flags"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen debug"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen name"
+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 the window is not focused, or when the game is paused."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum distance to render shadows."
+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 limit of random number of large caves per mapchunk."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum limit of random number of small caves per mapchunk."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum liquid resistance. Controls deceleration when entering liquid at\n"
+"high speed."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum number of blocks that are simultaneously sent per client.\n"
+"The maximum total count is calculated dynamically:\n"
+"max_total = ceil((#clients + max_users) * per_client / 4)"
+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"
+"This limit is enforced per player."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum number of blocks to be queued that are to be loaded from file.\n"
+"This limit is enforced per player."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum number of concurrent downloads. Downloads exceeding this limit will "
+"be queued.\n"
+"This should be lower than curl_parallel_limit."
+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 be connected simultaneously."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum number of recent chat messages to show"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum number of statically stored objects in a block."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum objects per 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 simultaneous block sends per client"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum size of the out chat queue"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum size of the out chat queue.\n"
+"0 to disable queueing and -1 to make the queue size unlimited."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum time a file download (e.g. a mod download) may take, stated in "
+"milliseconds."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum time an interactive request (e.g. server list fetch) may take, "
+"stated in milliseconds."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum users"
+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 "Method used to highlight selected object."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Minimal level of logging to be written to chat."
+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 limit of random number of large caves per mapchunk."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Minimum limit of random number of small caves per mapchunk."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Minimum texture size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mipmapping"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mod channels"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Modifies the size of the HUD elements."
+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 "Monospace font size divisible by"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mountain height noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mountain noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mountain variation noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mountain zero level"
+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 "Mud noise"
+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 "Mute key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mute sound"
+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.\n"
+"Current mapgens in a highly unstable state:\n"
+"- The optional floatlands of v7 (disabled by default)."
+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 "Near plane"
+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 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 "NodeTimer interval"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Noises"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Number of emerge threads"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Number of emerge threads to use.\n"
+"Value 0:\n"
+"- Automatic selection. The number of emerge threads will be\n"
+"- 'number of processors - 2', with a lower limit of 1.\n"
+"Any other value:\n"
+"- Specifies the number of emerge threads, with a lower limit of 1.\n"
+"WARNING: Increasing the number of emerge threads increases engine mapgen\n"
+"speed, but this may harm game performance by interfering with other\n"
+"processes, especially in singleplayer and/or when running Lua code in\n"
+"'on_generated'. For many users the optimum setting may be '1'."
+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 "Online Content Repository"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Opaque liquids"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Opaqueness (alpha) of the shadow behind the default font, between 0 and 255."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Open the pause menu when the window's focus is lost. Does not pause if a "
+"formspec is\n"
+"open."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Optional override for chat weblink color."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Path of the fallback font. Must be a TrueType font.\n"
+"This font will be used for certain languages or if the default font is "
+"unavailable."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Path to save screenshots at. Can be an absolute or relative path.\n"
+"The folder will be created if it doesn't already exist."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Path to shader directory. If no path is defined, default location will be "
+"used."
+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 ""
+"Path to the default font. Must be a TrueType font.\n"
+"The fallback font will be used if the font cannot be loaded."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Path to the monospace font. Must be a TrueType font.\n"
+"This font is used for e.g. the console and profiler screen."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Pause on lost window focus"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Per-player limit of queued blocks load from disk"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Per-player limit of queued blocks to generate"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Physics"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Pitch move key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Pitch move mode"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Place key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Place repetition interval"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Player is able to fly without being affected by gravity.\n"
+"This requires the \"fly\" privilege on the server."
+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 "Poisson filtering"
+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 ""
+"Prevent digging and placing from repeating when holding the mouse buttons.\n"
+"Enable this when you dig or place too often by accident."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Prevent mods from doing insecure things like running shell commands."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Print the engine's profiling data in regular intervals (in seconds).\n"
+"0 = disable. Useful for developers."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Privileges that players with basic_privs can grant"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Profiler"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Profiler toggle key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Profiling"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Prometheus listener address"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Prometheus listener address.\n"
+"If Minetest is compiled with ENABLE_PROMETHEUS option enabled,\n"
+"enable metrics listener for Prometheus on that address.\n"
+"Metrics can be fetched on http://127.0.0.1:30000/metrics"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Proportion of large caves that contain liquid."
+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 "Raises terrain to make valleys around the rivers."
+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 "Recent Chat Messages"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Regular font path"
+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 ""
+"Remove color codes from incoming chat messages\n"
+"Use this to stop players from being able to use color in their messages"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Replaces the default main menu with a custom one."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Report path"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Restricts the access of certain client-side functions on servers.\n"
+"Combine the byteflags below to restrict client-side features, or set to 0\n"
+"for no restrictions:\n"
+"LOAD_CLIENT_MODS: 1 (disable loading client-provided mods)\n"
+"CHAT_MESSAGES: 2 (disable send_chat_message call client-side)\n"
+"READ_ITEMDEFS: 4 (disable get_item_def call client-side)\n"
+"READ_NODEDEFS: 8 (disable get_node_def call client-side)\n"
+"LOOKUP_NODES_LIMIT: 16 (limits get_node call client-side to\n"
+"csm_restriction_noderange)\n"
+"READ_PLAYERINFO: 32 (disable get_player_names call client-side)"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Ridge mountain spread noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Ridge noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Ridge underwater noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Ridged mountain size noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Right key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "River channel depth"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "River channel width"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "River depth"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "River noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "River size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "River valley width"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Rollback recording"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Rolling hill size noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Rolling hills spread noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Round minimap"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Safe digging and placing"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Sandy beaches occur when np_beach exceeds this value."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Save the map received by the client on disk."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Save window size automatically when modified."
+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 folder"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Screenshot format"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Screenshot quality"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Screenshot quality. Only used for JPEG format.\n"
+"1 means worst quality; 100 means best quality.\n"
+"Use 0 for default quality."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Seabed noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Second of 4 2D noises that together define hill/mountain range height."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Second of two 3D noises that together define tunnels."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Security"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "See https://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 ""
+"Selects one of 18 fractal types.\n"
+"1 = 4D \"Roundy\" Mandelbrot set.\n"
+"2 = 4D \"Roundy\" Julia set.\n"
+"3 = 4D \"Squarry\" Mandelbrot set.\n"
+"4 = 4D \"Squarry\" Julia set.\n"
+"5 = 4D \"Mandy Cousin\" Mandelbrot set.\n"
+"6 = 4D \"Mandy Cousin\" Julia set.\n"
+"7 = 4D \"Variation\" Mandelbrot set.\n"
+"8 = 4D \"Variation\" Julia set.\n"
+"9 = 3D \"Mandelbrot/Mandelbar\" Mandelbrot set.\n"
+"10 = 3D \"Mandelbrot/Mandelbar\" Julia set.\n"
+"11 = 3D \"Christmas Tree\" Mandelbrot set.\n"
+"12 = 3D \"Christmas Tree\" Julia set.\n"
+"13 = 3D \"Mandelbulb\" Mandelbrot set.\n"
+"14 = 3D \"Mandelbulb\" Julia set.\n"
+"15 = 3D \"Cosine Mandelbulb\" Mandelbrot set.\n"
+"16 = 3D \"Cosine Mandelbulb\" Julia set.\n"
+"17 = 4D \"Mandelbulb\" Mandelbrot set.\n"
+"18 = 4D \"Mandelbulb\" Julia set."
+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 "Server side occlusion culling"
+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 the maximum character length of a chat message sent by clients."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set the shadow strength.\n"
+"Lower value means lighter shadows, higher value means darker shadows."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set the soft shadow radius size.\n"
+"Lower values mean sharper shadows, bigger values mean softer shadows.\n"
+"Minimum value: 1.0; maximum value: 10.0"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set the tilt of Sun/Moon orbit in degrees.\n"
+"Value of 0 means no tilt / vertical orbit.\n"
+"Minimum value: 0.0; maximum value: 60.0"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set to true to enable Shadow Mapping.\n"
+"Requires shaders to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set to true to enable waving leaves.\n"
+"Requires shaders to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set to true to enable waving liquids (like water).\n"
+"Requires shaders to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set to true to enable waving plants.\n"
+"Requires shaders to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Sets shadow texture quality to 32 bits.\n"
+"On false, 16 bits texture will be used.\n"
+"This can cause much more artifacts in the shadow."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Shader path"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Shaders allow advanced visual effects and may increase performance on some "
+"video\n"
+"cards.\n"
+"This only works with the OpenGL video backend."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Shadow filter quality"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Shadow map max distance in nodes to render shadows"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Shadow map texture in 32 bits"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Shadow map texture size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Shadow offset (in pixels) of the default font. If 0, then shadow will not be "
+"drawn."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Shadow strength"
+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 "Show entity selection boxes"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Show entity selection boxes\n"
+"A restart is required after changing this."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Show name tag backgrounds by default"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Shutdown message"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Size of mapchunks generated by mapgen, stated in mapblocks (16 nodes).\n"
+"WARNING!: There is no benefit, and there are several dangers, in\n"
+"increasing this value above 5.\n"
+"Reducing this value increases cave and dungeon density.\n"
+"Altering this value is for special usage, leaving it unchanged is\n"
+"recommended."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Size of the MapBlock cache of the mesh generator. Increasing this will\n"
+"increase the cache hit %, reducing the data being copied from the main\n"
+"thread, thus reducing jitter."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Sky Body Orbit Tilt"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Slice w"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Slope and fill work together to modify the heights."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Small cave maximum number"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Small cave minimum number"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Small-scale humidity variation for blending biomes on borders."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Small-scale temperature variation for blending biomes on borders."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Smooth lighting"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Smooths camera when looking around. Also called look or mouse smoothing.\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 "Sneaking speed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Sneaking speed, in nodes per second."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Soft shadow radius"
+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 ""
+"Specifies the default stack size of nodes, items and tools.\n"
+"Note that mods or games may explicitly set a stack for certain (or all) "
+"items."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Spread a complete update of shadow map over given amount of frames.\n"
+"Higher values might make shadows laggy, lower values\n"
+"will consume more resources.\n"
+"Minimum value: 1; maximum value: 16"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Spread of light curve boost range.\n"
+"Controls the width of the range to be boosted.\n"
+"Standard deviation of the light curve boost Gaussian."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Static spawnpoint"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Steepness noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Step mountain size noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Step mountain spread noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Strength of 3D mode parallax."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Strength of light curve boost.\n"
+"The 3 'boost' parameters define a range of the light\n"
+"curve that is boosted in brightness."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Strict protocol checking"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Strip color codes"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Surface level of optional water placed on a solid floatland layer.\n"
+"Water is disabled by default and will only be placed if this value is set\n"
+"to above 'mgv7_floatland_ymax' - 'mgv7_floatland_taper' (the start of the\n"
+"upper tapering).\n"
+"***WARNING, POTENTIAL DANGER TO WORLDS AND SERVER PERFORMANCE***:\n"
+"When enabling water placement the floatlands must be configured and tested\n"
+"to be a solid layer by setting 'mgv7_floatland_density' to 2.0 (or other\n"
+"required value depending on 'mgv7_np_floatland'), to avoid\n"
+"server-intensive extreme water flow and to avoid vast flooding of the\n"
+"world surface below."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Synchronous SQLite"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Temperature variation for biomes."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Terrain alternative noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Terrain base noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Terrain height"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Terrain higher noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Terrain noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Terrain noise threshold for hills.\n"
+"Controls proportion of world area covered by hills.\n"
+"Adjust towards 0.0 for a larger proportion."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Terrain noise threshold for lakes.\n"
+"Controls proportion of world area covered by lakes.\n"
+"Adjust towards 0.0 for a larger proportion."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Terrain persistence noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Texture path"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Texture size to render the shadow map on.\n"
+"This must be a power of two.\n"
+"Bigger numbers create better shadows but it is also more expensive."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Textures on a node may be aligned either to the node or to the world.\n"
+"The former mode suits better things like machines, furniture, etc., while\n"
+"the latter makes stairs and microblocks fit surroundings better.\n"
+"However, as this possibility is new, thus may not be used by older servers,\n"
+"this option allows enforcing it for certain node types. Note though that\n"
+"that is considered EXPERIMENTAL and may not work properly."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "The URL for the content repository"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "The dead zone of the joystick"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The default format in which profiles are being saved,\n"
+"when calling `/profiler save [format]` without format."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "The depth of dirt or other biome filler node."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The file path relative to your worldpath in which profiles will be saved to."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "The identifier of the joystick to use"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "The length in pixels it takes for touch screen interaction to start."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The maximum height of the surface of waving liquids.\n"
+"4.0 = Wave height is two nodes.\n"
+"0.0 = Wave doesn't move at all.\n"
+"Default is 1.0 (1/2 node).\n"
+"Requires waving liquids to be enabled."
+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 radius of the volume of blocks around every player that is subject to "
+"the\n"
+"active block stuff, stated in mapblocks (16 nodes).\n"
+"In active blocks objects are loaded and ABMs run.\n"
+"This is also the minimum range in which active objects (mobs) are "
+"maintained.\n"
+"This should be configured together with active_object_send_range_blocks."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The rendering back-end.\n"
+"A restart is required after changing this.\n"
+"Note: On Android, stick with OGLES1 if unsure! App may fail to start "
+"otherwise.\n"
+"On other platforms, OpenGL is recommended.\n"
+"Shaders are supported by OpenGL (desktop only) and OGLES2 (experimental)"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The sensitivity of the joystick axes for moving the\n"
+"in-game view frustum around."
+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 budget allowed for ABMs to execute on each step\n"
+"(as a fraction of the ABM Interval)"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The time in seconds it takes between repeated events\n"
+"when holding down a joystick button combination."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The time in seconds it takes between repeated node placements when holding\n"
+"the place button."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "The type of joystick"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The vertical distance over which heat drops by 20 if 'altitude_chill' is\n"
+"enabled. Also the vertical distance over which humidity drops by 10 if\n"
+"'altitude_dry' is enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Third of 4 2D noises that together define hill/mountain range height."
+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 of day when a new world is started, in millihours (0-23999)."
+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 "Touch screen threshold"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Tradeoffs for performance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Trees noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Trilinear filtering"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"True = 256\n"
+"False = 128\n"
+"Usable 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 "Undersampling"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Undersampling is similar to using a lower screen resolution, but it applies\n"
+"to the game world only, keeping the GUI intact.\n"
+"It should give a significant performance boost at the cost of less detailed "
+"image.\n"
+"Higher values result in a less detailed image."
+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 "Upper Y limit of dungeons."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Upper Y limit of floatlands."
+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 mipmapping to scale textures. May slightly increase performance,\n"
+"especially when using a high resolution texture pack.\n"
+"Gamma correct downscaling is not supported."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Use multi-sample antialiasing (MSAA) to smooth out block edges.\n"
+"This algorithm smooths out the 3D viewport while keeping the image sharp,\n"
+"but it doesn't affect the insides of textures\n"
+"(which is especially noticeable with transparent textures).\n"
+"Visible spaces appear between nodes when shaders are disabled.\n"
+"If set to 0, MSAA is disabled.\n"
+"A restart is required after changing this option."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Use trilinear filtering when scaling textures."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "VBO"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "VSync"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Valley depth"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Valley fill"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Valley profile"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Valley slope"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Variation of biome filler depth."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Variation of maximum mountain height (in nodes)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Variation of number of caves."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Variation of terrain vertical scale.\n"
+"When noise is < -0.55 terrain is near-flat."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Varies depth of biome surface nodes."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Varies roughness of terrain.\n"
+"Defines the 'persistence' value for terrain_base and terrain_alt noises."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Varies steepness of cliffs."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Vertical climbing speed, in nodes per second."
+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 factor"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "View distance in nodes."
+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 "View zoom key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Viewing range"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Virtual joystick triggers Aux1 button"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Volume"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Volume of all sounds.\n"
+"Requires the sound system to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"W coordinate of the generated 3D slice of a 4D fractal.\n"
+"Determines which 3D slice of the 4D shape is generated.\n"
+"Alters the shape of the fractal.\n"
+"Has no effect on 3D fractals.\n"
+"Range roughly -2 to 2."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Walking and flying speed, in nodes per second."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Walking speed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Walking, flying and climbing speed in fast mode, in nodes per second."
+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 liquids"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Waving liquids wave height"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Waving liquids wave speed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Waving liquids wavelength"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Waving plants"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Weblink color"
+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"
+"properly 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. This setting is ONLY applied if\n"
+"bilinear/trilinear/anisotropic filtering is enabled.\n"
+"This is also used as the base node texture size for world-aligned\n"
+"texture autoscaling."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Whether name tag backgrounds should be shown by default.\n"
+"Mods may still set a background."
+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 mute sounds. You can unmute sounds at any time, unless the\n"
+"sound system is disabled (enable_sound=false).\n"
+"In-game, you can toggle the mute state with the mute key or by using the\n"
+"pause menu."
+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 component of the initial window size. Ignored in fullscreen mode."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Width of the selection box lines around nodes."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Windows systems only: Start Minetest with the command line window in the "
+"background.\n"
+"Contains the same information as the file debug.txt (default name)."
+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 "World start time"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"World-aligned textures may be scaled to span several nodes. However,\n"
+"the server may not send the scale you want, especially if you use\n"
+"a specially-designed texture pack; with this option, the client tries\n"
+"to determine the scale automatically basing on the texture size.\n"
+"See also texture_min_size.\n"
+"Warning: This option is EXPERIMENTAL!"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "World-aligned textures mode"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Y of flat ground."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Y of mountain density gradient zero level. Used to shift mountains "
+"vertically."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Y of upper limit of large caves."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Y-distance over which caverns expand to full size."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Y-distance over which floatlands taper from full density to nothing.\n"
+"Tapering starts at this distance from the Y limit.\n"
+"For a solid floatland layer, this controls the height of hills/mountains.\n"
+"Must be less than or equal to half the distance between the Y limits."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Y-level of average terrain surface."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Y-level of cavern upper limit."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Y-level of higher terrain that creates cliffs."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Y-level of lower terrain and seabed."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Y-level of seabed."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "cURL file download timeout"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "cURL interactive timeout"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "cURL parallel limit"
+msgstr ""
+
+#, fuzzy
+#~ msgid "You died."
+#~ msgstr "तू मेलास"
diff --git a/po/ms/minetest.po b/po/ms/minetest.po
index d74807eb1..e1d067e79 100644
--- a/po/ms/minetest.po
+++ b/po/ms/minetest.po
@@ -2,8 +2,8 @@ msgid ""
msgstr ""
"Project-Id-Version: Malay (Minetest)\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-02-23 19:03+0100\n"
-"PO-Revision-Date: 2021-03-10 17:02+0000\n"
+"POT-Creation-Date: 2022-01-25 23:19+0100\n"
+"PO-Revision-Date: 2022-01-30 18:51+0000\n"
"Last-Translator: Yaya - Nurul Azeera Hidayah @ Muhammad Nur Hidayat "
"Yasuyoshi <translation@mnh48.moe>\n"
"Language-Team: Malay <https://hosted.weblate.org/projects/minetest/minetest/"
@@ -13,21 +13,88 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
-"X-Generator: Weblate 4.5.2-dev\n"
+"X-Generator: Weblate 4.11-dev\n"
+
+#: builtin/client/chatcommands.lua
+msgid "Clear the out chat queue"
+msgstr "Padam baris gilir sembang keluar"
+
+#: builtin/client/chatcommands.lua
+msgid "Empty command."
+msgstr "Perintah kosong."
+
+#: builtin/client/chatcommands.lua
+msgid "Exit to main menu"
+msgstr "Keluar ke menu utama"
+
+#: builtin/client/chatcommands.lua
+msgid "Invalid command: "
+msgstr "Perintah tidak sah: "
+
+#: builtin/client/chatcommands.lua
+msgid "Issued command: "
+msgstr "Perintah dikeluarkan: "
+
+#: builtin/client/chatcommands.lua
+msgid "List online players"
+msgstr "Senaraikan pemain dalam talian"
+
+#: builtin/client/chatcommands.lua
+msgid "Online players: "
+msgstr "Pemain dalam talian: "
+
+#: builtin/client/chatcommands.lua
+msgid "The out chat queue is now empty."
+msgstr "Baris gilir sembang keluar kini kosong."
+
+#: builtin/client/chatcommands.lua
+msgid "This command is disabled by server."
+msgstr "Perintah ini dilumpuhkan oleh pelayan."
#: builtin/client/death_formspec.lua src/client/game.cpp
msgid "Respawn"
-msgstr "Lahir semula"
+msgstr "Jelma semula"
#: builtin/client/death_formspec.lua src/client/game.cpp
msgid "You died"
msgstr "Anda telah meninggal"
+#: builtin/common/chatcommands.lua
+msgid "Available commands:"
+msgstr "Perintah tersedia:"
+
+#: builtin/common/chatcommands.lua
+msgid "Available commands: "
+msgstr "Perintah tersedia: "
+
+#: builtin/common/chatcommands.lua
+msgid "Command not available: "
+msgstr "Perintah tidak tersedia: "
+
+#: builtin/common/chatcommands.lua
+msgid "Get help for commands"
+msgstr "Dapatkan bantuan untuk perintah"
+
+#: builtin/common/chatcommands.lua
+msgid ""
+"Use '.help <cmd>' to get more information, or '.help all' to list everything."
+msgstr ""
+"Gunakan '.help <perintah>' untuk dapatkan maklumat lanjut, atau '.help all' "
+"untuk senaraikan kesemuanya."
+
+#: builtin/common/chatcommands.lua
+msgid "[all | <cmd>]"
+msgstr "[all | <perintah>]"
+
#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp
msgid "OK"
msgstr "OK"
#: builtin/fstk/ui.lua
+msgid "<none available>"
+msgstr "<tiada yang tersedia>"
+
+#: builtin/fstk/ui.lua
msgid "An error occurred in a Lua script:"
msgstr "Berlakunya ralat dalam skrip Lua:"
@@ -230,6 +297,10 @@ msgid "Install missing dependencies"
msgstr "Pasang kebergantungan yang hilang"
#: builtin/mainmenu/dlg_contentstore.lua
+msgid "Install: Unsupported file type or broken archive"
+msgstr "Pasang: Jenis fail tidak disokong atau arkib rosak"
+
+#: builtin/mainmenu/dlg_contentstore.lua
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Mods"
msgstr "Mods"
@@ -533,7 +604,7 @@ msgstr "< Kembali ke halaman Tetapan"
msgid "Browse"
msgstr "Layar"
-#: builtin/mainmenu/dlg_settings_advanced.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_settings.lua
msgid "Disabled"
msgstr "Dilumpuhkan"
@@ -558,7 +629,7 @@ msgid "Offset"
msgstr "Ofset"
#: builtin/mainmenu/dlg_settings_advanced.lua
-msgid "Persistance"
+msgid "Persistence"
msgstr "Penerusan"
#: builtin/mainmenu/dlg_settings_advanced.lua
@@ -577,7 +648,7 @@ msgstr "Pulihkan Tetapan Asal"
msgid "Scale"
msgstr "Skala"
-#: builtin/mainmenu/dlg_settings_advanced.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_online.lua
msgid "Search"
msgstr "Cari"
@@ -669,14 +740,6 @@ msgid "Install Mod: Unable to find suitable folder name for modpack $1"
msgstr "Pasang Mods: tidak jumpa nama folder yang sesuai untuk pek mods $1"
#: builtin/mainmenu/pkgmgr.lua
-msgid "Install: Unsupported file type \"$1\" or broken archive"
-msgstr "Pasang: Jenis fail \"$1\" tidak disokong atau arkib rosak"
-
-#: builtin/mainmenu/pkgmgr.lua
-msgid "Install: file: \"$1\""
-msgstr "Pasang: fail: \"$1\""
-
-#: builtin/mainmenu/pkgmgr.lua
msgid "Unable to find a valid mod or modpack"
msgstr "Tidak jumpa mods atau pek mods yang sah"
@@ -710,6 +773,42 @@ msgstr ""
"Cuba aktifkan semula senarai pelayan awam dan periksa sambungan internet "
"anda."
+#: builtin/mainmenu/tab_about.lua
+msgid "About"
+msgstr "Perihal"
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Active Contributors"
+msgstr "Penyumbang Aktif"
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Active renderer:"
+msgstr "Pengemas gabung aktif:"
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Core Developers"
+msgstr "Pembangun Teras"
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Open User Data Directory"
+msgstr "Buka Direktori Data Pengguna"
+
+#: builtin/mainmenu/tab_about.lua
+msgid ""
+"Opens the directory that contains user-provided worlds, games, mods,\n"
+"and texture packs in a file manager / explorer."
+msgstr ""
+"Membuka direktori yang mengandungi dunia, permainan, mods, dan pek\n"
+"tekstur yang disediakan oleh pengguna, dalam pengurus / pelayar fail."
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Previous Contributors"
+msgstr "Penyumbang Terdahulu"
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Previous Core Developers"
+msgstr "Pembangun Teras Terdahulu"
+
#: builtin/mainmenu/tab_content.lua
msgid "Browse online content"
msgstr "Layari kandungan dalam talian"
@@ -750,38 +849,6 @@ msgstr "Nyahpasang Pakej"
msgid "Use Texture Pack"
msgstr "Guna Pek Tekstur"
-#: builtin/mainmenu/tab_credits.lua
-msgid "Active Contributors"
-msgstr "Penyumbang Aktif"
-
-#: builtin/mainmenu/tab_credits.lua
-msgid "Core Developers"
-msgstr "Pembangun Teras"
-
-#: builtin/mainmenu/tab_credits.lua
-msgid "Credits"
-msgstr "Penghargaan"
-
-#: builtin/mainmenu/tab_credits.lua
-msgid "Open User Data Directory"
-msgstr "Buka Direktori Data Pengguna"
-
-#: builtin/mainmenu/tab_credits.lua
-msgid ""
-"Opens the directory that contains user-provided worlds, games, mods,\n"
-"and texture packs in a file manager / explorer."
-msgstr ""
-"Membuka direktori yang mengandungi dunia, permainan, mods, dan pek\n"
-"tekstur yang disediakan oleh pengguna, dalam pengurus / pelayar fail."
-
-#: builtin/mainmenu/tab_credits.lua
-msgid "Previous Contributors"
-msgstr "Penyumbang Terdahulu"
-
-#: builtin/mainmenu/tab_credits.lua
-msgid "Previous Core Developers"
-msgstr "Pembangun Teras Terdahulu"
-
#: builtin/mainmenu/tab_local.lua
msgid "Announce Server"
msgstr "Umumkan Pelayan"
@@ -810,7 +877,7 @@ msgstr "Hos Pelayan"
msgid "Install games from ContentDB"
msgstr "Pasangkan permainan daripada ContentDB"
-#: builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
msgid "Name"
msgstr "Nama"
@@ -822,15 +889,15 @@ msgstr "Buat Baru"
msgid "No world created or selected!"
msgstr "Tiada dunia dicipta atau dipilih!"
-#: builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
msgid "Password"
-msgstr "Kata Laluan"
+msgstr "Kata laluan"
#: builtin/mainmenu/tab_local.lua
msgid "Play Game"
msgstr "Mula Main"
-#: builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
msgid "Port"
msgstr "Port"
@@ -851,8 +918,12 @@ msgid "Start Game"
msgstr "Mulakan Permainan"
#: builtin/mainmenu/tab_online.lua
-msgid "Address / Port"
-msgstr "Alamat / Port"
+msgid "Address"
+msgstr "Alamat"
+
+#: builtin/mainmenu/tab_online.lua src/client/keycode.cpp
+msgid "Clear"
+msgstr "Padam"
#: builtin/mainmenu/tab_online.lua
msgid "Connect"
@@ -862,34 +933,42 @@ msgstr "Sambung"
msgid "Creative mode"
msgstr "Mod Kreatif"
+#. ~ PvP = Player versus Player
#: builtin/mainmenu/tab_online.lua
-msgid "Damage enabled"
-msgstr "Boleh Cedera"
+msgid "Damage / PvP"
+msgstr "Boleh cedera / PvP"
#: builtin/mainmenu/tab_online.lua
msgid "Del. Favorite"
msgstr "Padam Kegemaran"
#: builtin/mainmenu/tab_online.lua
-msgid "Favorite"
+msgid "Favorites"
msgstr "Kegemaran"
#: builtin/mainmenu/tab_online.lua
-msgid "Join Game"
-msgstr "Sertai Permainan"
+msgid "Incompatible Servers"
+msgstr "Pelayan Tidak Serasi"
#: builtin/mainmenu/tab_online.lua
-msgid "Name / Password"
-msgstr "Nama / Kata laluan"
+msgid "Join Game"
+msgstr "Sertai Permainan"
#: builtin/mainmenu/tab_online.lua
msgid "Ping"
msgstr "Ping"
-#. ~ PvP = Player versus Player
#: builtin/mainmenu/tab_online.lua
-msgid "PvP enabled"
-msgstr "Boleh Berlawan PvP"
+msgid "Public Servers"
+msgstr "Pelayan Awam"
+
+#: builtin/mainmenu/tab_online.lua
+msgid "Refresh"
+msgstr "Segarkan semula"
+
+#: builtin/mainmenu/tab_online.lua
+msgid "Server Description"
+msgstr "Keterangan Pelayan"
#: builtin/mainmenu/tab_settings.lua
msgid "2x"
@@ -931,11 +1010,31 @@ msgstr "Tukar Kekunci"
msgid "Connected Glass"
msgstr "Kaca Bersambungan"
+#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
+msgid "Dynamic shadows"
+msgstr "Bayang dinamik"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Dynamic shadows: "
+msgstr "Bayang dinamik: "
+
#: builtin/mainmenu/tab_settings.lua
msgid "Fancy Leaves"
msgstr "Daun Beragam"
#: builtin/mainmenu/tab_settings.lua
+msgid "High"
+msgstr "Tinggi"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Low"
+msgstr "Rendah"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Medium"
+msgstr "Sederhana"
+
+#: builtin/mainmenu/tab_settings.lua
msgid "Mipmap"
msgstr "Peta Mip"
@@ -1007,10 +1106,6 @@ msgstr "Pencahayaan Lembut"
msgid "Texturing:"
msgstr "Jalinan:"
-#: builtin/mainmenu/tab_settings.lua
-msgid "To enable shaders the OpenGL driver needs to be used."
-msgstr "Untuk membolehkan pembayang, pemacu OpenGL mesti digunakan."
-
#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
msgid "Tone Mapping"
msgstr "Pemetaan Tona"
@@ -1024,6 +1119,14 @@ msgid "Trilinear Filter"
msgstr "Penapisan Trilinear"
#: builtin/mainmenu/tab_settings.lua
+msgid "Ultra High"
+msgstr "Ultra Tinggi"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Very Low"
+msgstr "Sangat Rendah"
+
+#: builtin/mainmenu/tab_settings.lua
msgid "Waving Leaves"
msgstr "Daun Bergoyang"
@@ -1035,7 +1138,7 @@ msgstr "Cecair Bergelora"
msgid "Waving Plants"
msgstr "Tumbuhan Bergoyang"
-#: src/client/client.cpp
+#: src/client/client.cpp src/client/game.cpp
msgid "Connection timed out."
msgstr "Sambungan tamat tempoh."
@@ -1064,8 +1167,8 @@ msgid "Connection error (timed out?)"
msgstr "Ralat dalam penyambungan (tamat tempoh?)"
#: src/client/clientlauncher.cpp
-msgid "Could not find or load game \""
-msgstr "Tidak jumpa atau tidak boleh muatkan permainan \""
+msgid "Could not find or load game: "
+msgstr "Tidak jumpa atau tidak boleh muatkan permainan: "
#: src/client/clientlauncher.cpp
msgid "Invalid gamespec."
@@ -1096,18 +1199,6 @@ msgstr "Fail kata laluan yang disediakan gagal dibuka: "
msgid "Provided world path doesn't exist: "
msgstr "Laluan dunia diberi tidak wujud: "
-#. ~ DO NOT TRANSLATE THIS LITERALLY!
-#. This is a special string. Put either "no" or "yes"
-#. into the translation field (literally).
-#. Choose "yes" if the language requires use of the fallback
-#. font, "no" otherwise.
-#. The fallback font is (normally) required for languages with
-#. non-Latin script, like Chinese.
-#. When in doubt, test your translation.
-#: src/client/fontengine.cpp
-msgid "needs_fallback_font"
-msgstr "no"
-
#: src/client/game.cpp
msgid ""
"\n"
@@ -1121,14 +1212,6 @@ msgid "- Address: "
msgstr "- Alamat: "
#: src/client/game.cpp
-msgid "- Creative Mode: "
-msgstr "- Mod Kreatif: "
-
-#: src/client/game.cpp
-msgid "- Damage: "
-msgstr "- Boleh cedera: "
-
-#: src/client/game.cpp
msgid "- Mode: "
msgstr "- Mod: "
@@ -1150,6 +1233,15 @@ msgid "- Server Name: "
msgstr "- Nama Pelayan: "
#: src/client/game.cpp
+msgid "A serialization error occurred:"
+msgstr "Telah berlakunya ralat penyirian:"
+
+#: src/client/game.cpp
+#, c-format
+msgid "Access denied. Reason: %s"
+msgstr "Capaian dinafikan. Sebab: %s"
+
+#: src/client/game.cpp
msgid "Automatic forward disabled"
msgstr "Pergerakan automatik dilumpuhkan"
@@ -1158,6 +1250,22 @@ msgid "Automatic forward enabled"
msgstr "Pergerakan automatik dibolehkan"
#: src/client/game.cpp
+msgid "Block bounds hidden"
+msgstr "Batas blok disembunyikan"
+
+#: src/client/game.cpp
+msgid "Block bounds shown for all blocks"
+msgstr "Batas blok ditunjukkan untuk semua blok"
+
+#: src/client/game.cpp
+msgid "Block bounds shown for current block"
+msgstr "Batas blok ditunjukkan untuk blok semasa"
+
+#: src/client/game.cpp
+msgid "Block bounds shown for nearby blocks"
+msgstr "Batas blok ditunjukkan untuk blok berhampiran"
+
+#: src/client/game.cpp
msgid "Camera update disabled"
msgstr "Kemas kini kamera dilumpuhkan"
@@ -1166,6 +1274,10 @@ msgid "Camera update enabled"
msgstr "Kemas kini kamera dibolehkan"
#: src/client/game.cpp
+msgid "Can't show block bounds (need 'basic_debug' privilege)"
+msgstr "Tidak boleh tunjuk batas blok (perlukan keistimewaan 'basic_debug')"
+
+#: src/client/game.cpp
msgid "Change Password"
msgstr "Tukar Kata Laluan"
@@ -1178,6 +1290,10 @@ msgid "Cinematic mode enabled"
msgstr "Mod sinematik dibolehkan"
#: src/client/game.cpp
+msgid "Client disconnected"
+msgstr "Klien dinyahsambung"
+
+#: src/client/game.cpp
msgid "Client side scripting is disabled"
msgstr "Skrip pihak klien dilumpuhkan"
@@ -1186,6 +1302,10 @@ msgid "Connecting to server..."
msgstr "Sedang menyambung kepada pelayan..."
#: src/client/game.cpp
+msgid "Connection failed for unknown reason"
+msgstr "Sambungan gagal untuk sebab yang tidak diketahui"
+
+#: src/client/game.cpp
msgid "Continue"
msgstr "Teruskan"
@@ -1223,6 +1343,11 @@ msgstr ""
"- %s: sembang\n"
#: src/client/game.cpp
+#, c-format
+msgid "Couldn't resolve address: %s"
+msgstr "Tidak mampu menyelesaikan alamat: %s"
+
+#: src/client/game.cpp
msgid "Creating client..."
msgstr "Sedang mencipta klien..."
@@ -1353,6 +1478,10 @@ msgid "Minimap currently disabled by game or mod"
msgstr "Peta mini dilumpuhkan oleh permainan atau mods"
#: src/client/game.cpp
+msgid "Multiplayer"
+msgstr "Pemain Ramai"
+
+#: src/client/game.cpp
msgid "Noclip mode disabled"
msgstr "Mod tembus blok dilumpuhkan"
@@ -1426,6 +1555,21 @@ msgstr "Bunyi dinyahbisukan"
#: src/client/game.cpp
#, c-format
+msgid "The server is probably running a different version of %s."
+msgstr "Kemungkinan pelayan menjalankan versi %s yang berlainan."
+
+#: src/client/game.cpp
+#, c-format
+msgid "Unable to connect to %s because IPv6 is disabled"
+msgstr "Tidak mampu sambung ke %s kerana IPv6 dilumpuhkan"
+
+#: src/client/game.cpp
+#, c-format
+msgid "Unable to listen on %s because IPv6 is disabled"
+msgstr "Tidak mampu dengar di %s kerana IPv6 dilumpuhkan"
+
+#: src/client/game.cpp
+#, c-format
msgid "Viewing range changed to %d"
msgstr "Jarak pandang ditukar ke %d"
@@ -1494,10 +1638,6 @@ msgid "Caps Lock"
msgstr "Kunci Huruf Besar"
#: src/client/keycode.cpp
-msgid "Clear"
-msgstr "Padam"
-
-#: src/client/keycode.cpp
msgid "Control"
msgstr "Ctrl"
@@ -1762,6 +1902,14 @@ msgstr "Peta mini dalam mod permukaan, Zum x%d"
msgid "Minimap in texture mode"
msgstr "Peta mini dalam mod tekstur"
+#: src/gui/guiChatConsole.cpp
+msgid "Failed to open webpage"
+msgstr "Gagal buka laman sesawang"
+
+#: src/gui/guiChatConsole.cpp
+msgid "Opening webpage"
+msgstr "Membuka laman sesawang"
+
#: src/gui/guiConfirmRegistration.cpp src/gui/guiPasswordChange.cpp
msgid "Passwords do not match!"
msgstr "Kata laluan tidak padan!"
@@ -1790,8 +1938,8 @@ msgid "Proceed"
msgstr "Teruskan"
#: src/gui/guiKeyChangeMenu.cpp
-msgid "\"Special\" = climb down"
-msgstr "\"Istimewa\" = panjat turun"
+msgid "\"Aux1\" = climb down"
+msgstr "\"Aux1\" = panjat turun"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Autoforward"
@@ -1802,10 +1950,18 @@ msgid "Automatic jumping"
msgstr "Lompat automatik"
#: src/gui/guiKeyChangeMenu.cpp
+msgid "Aux1"
+msgstr "Aux1"
+
+#: src/gui/guiKeyChangeMenu.cpp
msgid "Backward"
msgstr "Ke Belakang"
#: src/gui/guiKeyChangeMenu.cpp
+msgid "Block bounds"
+msgstr "Batas blok"
+
+#: src/gui/guiKeyChangeMenu.cpp
msgid "Change camera"
msgstr "Tukar kamera"
@@ -1815,7 +1971,7 @@ msgstr "Sembang"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Command"
-msgstr "Arahan"
+msgstr "Perintah"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Console"
@@ -1864,12 +2020,12 @@ msgstr "Kekunci telah digunakan untuk fungsi lain"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)"
msgstr ""
-"Ikatan kekunci. (Jika menu ini berselerak, padam sesetengah benda dari fail "
+"Ikatan kekunci. (Jika menu ini berselerak, buang sesetengah benda dari fail "
"minetest.conf)"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Local command"
-msgstr "Arahan tempatan"
+msgstr "Perintah tempatan"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Mute"
@@ -1896,10 +2052,6 @@ msgid "Sneak"
msgstr "Selinap"
#: src/gui/guiKeyChangeMenu.cpp
-msgid "Special"
-msgstr "Istimewa"
-
-#: src/gui/guiKeyChangeMenu.cpp
msgid "Toggle HUD"
msgstr "Togol papar pandu (HUD)"
@@ -1960,8 +2112,9 @@ msgid "Muted"
msgstr "Dibisukan"
#: src/gui/guiVolumeChange.cpp
-msgid "Sound Volume: "
-msgstr "Kekuatan Bunyi: "
+#, c-format
+msgid "Sound Volume: %d%%"
+msgstr "Kekuatan Bunyi: %d%%"
#. ~ Imperative, as in "Enter/type in text".
#. Don't forget the space.
@@ -1987,12 +2140,12 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"(Android) Use virtual joystick to trigger \"aux\" button.\n"
-"If enabled, virtual joystick will also tap \"aux\" button when out of main "
+"(Android) Use virtual joystick to trigger \"Aux1\" button.\n"
+"If enabled, virtual joystick will also tap \"Aux1\" button when out of main "
"circle."
msgstr ""
-"(Android) Guna kayu bedik maya untuk picu butang \"aux\".\n"
-"Jika dibolehkan, kayu bedik maya juga akan menekan butang \"aux\" apabila "
+"(Android) Guna kayu bedik maya untuk picu butang \"Aux1\".\n"
+"Jika dibolehkan, kayu bedik maya juga akan menekan butang \"Aux1\" apabila "
"berada di luar bulatan utama."
#: src/settings_translation_file.cpp
@@ -2008,10 +2161,10 @@ msgid ""
msgstr ""
"(X,Y,Z) Ofset fraktal dari pusat dunia dalam unit 'skala'.\n"
"Boleh guna untuk pindahkan titik yang diingini ke (0, 0)\n"
-"untuk cipta titik kelahiran yang sesuai, atau untuk\n"
+"untuk cipta titik jelma yang sesuai, atau untuk\n"
"membolehkan 'zum masuk' pada titik yang diinginkan\n"
"dengan menaikkan 'skala'.\n"
-"Nilai lalai disesuaikan untuk titik kelahiran sesuai untuk set Mandelbrot\n"
+"Nilai lalai disesuaikan untuk titik jelma sesuai untuk set Mandelbrot\n"
"dengan parameter lalai, ia mungkin perlu diubah untuk situasi yang lain.\n"
"Julat kasarnya -2 sehingga 2. Darabkan dengan 'skala' untuk ofset dalam nod."
@@ -2129,13 +2282,14 @@ msgid ""
msgstr ""
"Sokongan 3D.\n"
"Yang disokong pada masa ini:\n"
-"- tiada: tiada output 3D.\n"
-"- anaglif: 3D warna biru/merah.\n"
-"- selang-seli: garis genap/ganjil berdasarkan sokongan skrin polarisasi.\n"
-"- atas-bawah: pisah skrin atas/bawah.\n"
-"- kiri-kanan: pisah skrin kiri/kanan.\n"
-"- silang lihat: 3D mata bersilang\n"
-"- selak halaman: 3D berasaskan penimbal kuad.\n"
+"- none (tiada): untuk tiada output 3D.\n"
+"- anaglyph (anaglif): 3D warna biru/merah.\n"
+"- interlaced (selang-seli): garis genap/ganjil berdasarkan sokongan skrin "
+"polarisasi.\n"
+"- topbottom (atas-bawah): pisah skrin atas/bawah.\n"
+"- sidebyside (kiri-kanan): pisah skrin kiri/kanan.\n"
+"- crossview (silang lihat): 3D mata bersilang\n"
+"- pageflip (selak halaman): 3D berasaskan penimbal kuad.\n"
"Ambil perhatian bahawa mod selang-seli memerlukan pembayang."
#: src/settings_translation_file.cpp
@@ -2213,6 +2367,12 @@ msgstr ""
"skrin 4K."
#: src/settings_translation_file.cpp
+msgid "Adjust the detected display density, used for scaling UI elements."
+msgstr ""
+"Laraskan ketumpatan paparan yang dikesan, digunakan untuk menyesuaikan "
+"elemen UI."
+
+#: src/settings_translation_file.cpp
#, c-format
msgid ""
"Adjusts the density of the floatland layer.\n"
@@ -2319,11 +2479,12 @@ msgstr ""
"Pada jarak ini, pelayan akan mengoptimumkan secara agresif blok yang mana\n"
"akan dihantar kepada klien.\n"
"Nilai lebih kecil berkemungkinan boleh meningkatkan prestasi dengan banyak,\n"
-"dengan mengorbankan glic penerjemahan tampak (sesetengah blok tidak akan\n"
-"diterjemah di bawah air dan dalam gua, kekadang turut berlaku atas "
+"dengan mengorbankan glic kemas gabung tampak (sesetengah blok tidak akan\n"
+"dikemas gabung di bawah air dan dalam gua, kekadang turut berlaku atas "
"daratan).\n"
-"Menetapkan nilai ini lebih bear daripada nilai max_block_send_distance akan\n"
-"melumpuhkan pengoptimunan ini.\n"
+"Menetapkan nilai ini lebih besar daripada nilai max_block_send_distance "
+"akan\n"
+"melumpuhkan pengoptimuman ini.\n"
"Nyatakan dalam unit blokpeta (16 nod)."
#: src/settings_translation_file.cpp
@@ -2347,6 +2508,14 @@ msgid "Autoscaling mode"
msgstr "Mod skala automatik"
#: src/settings_translation_file.cpp
+msgid "Aux1 key"
+msgstr "Kekunci Aux1"
+
+#: src/settings_translation_file.cpp
+msgid "Aux1 key for climbing/descending"
+msgstr "Kekunci Aux1 untuk memanjat/menurun"
+
+#: src/settings_translation_file.cpp
msgid "Backward key"
msgstr "Kekunci ke belakang"
@@ -2391,10 +2560,6 @@ msgid "Biome noise"
msgstr "Hingar biom"
#: src/settings_translation_file.cpp
-msgid "Bits per pixel (aka color depth) in fullscreen mode."
-msgstr "Bit per piksel (atau kedalaman warna) dalam mod skrin penuh."
-
-#: src/settings_translation_file.cpp
msgid "Block send optimize distance"
msgstr "Jarak optimum penghantaran blok"
@@ -2500,6 +2665,14 @@ msgstr ""
"Di mana 0.0 ialah aras cahaya minimum, 1.0 ialah maksimum."
#: src/settings_translation_file.cpp
+msgid "Chat command time message threshold"
+msgstr "Nilai ambang mesej masa perintah sembang"
+
+#: src/settings_translation_file.cpp
+msgid "Chat commands"
+msgstr "Perintah sembang"
+
+#: src/settings_translation_file.cpp
msgid "Chat font size"
msgstr "Saiz fon sembang"
@@ -2532,8 +2705,8 @@ msgid "Chat toggle key"
msgstr "Kekunci togol sembang"
#: src/settings_translation_file.cpp
-msgid "Chatcommands"
-msgstr "Perintah sembang"
+msgid "Chat weblinks"
+msgstr "Pautan sesawang sembang"
#: src/settings_translation_file.cpp
msgid "Chunk size"
@@ -2552,6 +2725,14 @@ msgid "Clean transparent textures"
msgstr "Bersihkan tekstur lut sinar"
#: src/settings_translation_file.cpp
+msgid ""
+"Clickable weblinks (middle-click or Ctrl+left-click) enabled in chat console "
+"output."
+msgstr ""
+"Pautan sesawang boleh klik (klik-tengah atau Ctrl+klik-kiri) dibolehkan "
+"dalam output konsol sembang."
+
+#: src/settings_translation_file.cpp
msgid "Client"
msgstr "Klien"
@@ -2596,6 +2777,10 @@ msgid "Colored fog"
msgstr "Kabut berwarna"
#: src/settings_translation_file.cpp
+msgid "Colored shadows"
+msgstr "Bayang berwarna"
+
+#: src/settings_translation_file.cpp
msgid ""
"Comma-separated list of flags to hide in the content repository.\n"
"\"nonfree\" can be used to hide packages which do not qualify as 'free "
@@ -2620,7 +2805,7 @@ msgid ""
"Comma-separated list of mods that are allowed to access HTTP APIs, which\n"
"allow them to upload and download data to/from the internet."
msgstr ""
-"Senarai mods yang dibenarkan mengakses API HTTP dipisahkan dengan koma,\n"
+"Senarai mods yang dibenarkan mencapai API HTTP dipisahkan dengan koma,\n"
"ini membolehkan mereka memuat naik kepada atau muat turun daripada internet."
#: src/settings_translation_file.cpp
@@ -2629,13 +2814,37 @@ msgid ""
"functions even when mod security is on (via request_insecure_environment())."
msgstr ""
"Senarai dipisahkan dengan koma untuk mods boleh dipercayai yang dibenarkan "
-"mengakses\n"
-"fungsi tidak selamat walaupun ketika keselamatan mods diaktifkan (melalui "
+"mencapai fungsi\n"
+"tidak selamat walaupun ketika keselamatan mods diaktifkan (melalui "
"request_insecure_environment())."
#: src/settings_translation_file.cpp
msgid "Command key"
-msgstr "Kekunci arahan"
+msgstr "Kekunci perintah"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Compression level to use when saving mapblocks to disk.\n"
+"-1 - use default compression level\n"
+"0 - least compression, fastest\n"
+"9 - best compression, slowest"
+msgstr ""
+"Tahap pemampatan untuk digunakan apabila menyimpan blokpeta ke cakera.\n"
+"-1 - guna tahap pemampatan lalai\n"
+"0 - pemampatan paling sedikit, paling laju\n"
+"9 - pemampatan paling banyak, paling lambat"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Compression level to use when sending mapblocks to the client.\n"
+"-1 - use default compression level\n"
+"0 - least compression, fastest\n"
+"9 - best compression, slowest"
+msgstr ""
+"Tahap pemampatan untuk digunakan apabila menghantar blokpeta kepada klien.\n"
+"-1 - guna tahap pemampatan lalai\n"
+"0 - pemampatan paling sedikit, paling laju\n"
+"9 - pemampatan paling banyak, paling lambat"
#: src/settings_translation_file.cpp
msgid "Connect glass"
@@ -2738,10 +2947,10 @@ msgstr "Nilai alfa rerambut silang"
#: src/settings_translation_file.cpp
msgid ""
"Crosshair alpha (opaqueness, between 0 and 255).\n"
-"Also controls the object crosshair color"
+"This also applies to the object crosshair."
msgstr ""
"Nilai alfa rerambut silang (kelegapan, antara 0 dan 255).\n"
-"Juga mengawal warna rerambut silang objek"
+"Nilai ini juga memberi kesan kepada rerambut silang objek."
#: src/settings_translation_file.cpp
msgid "Crosshair color"
@@ -2822,11 +3031,13 @@ msgstr "Saiz tindanan lalai"
#: src/settings_translation_file.cpp
msgid ""
-"Default timeout for cURL, stated in milliseconds.\n"
-"Only has an effect if compiled with cURL."
+"Define shadow filtering quality.\n"
+"This simulates the soft shadows effect by applying a PCF or Poisson disk\n"
+"but also uses more resources."
msgstr ""
-"Had masa lalai untuk cURL, dinyatakan dalam milisaat.\n"
-"Hanya berkesan jika dikompil dengan pilihan cURL."
+"Mentakrifkan kualiti penapisan bayang.\n"
+"Tetapan ini menyelakukan kesan bayang lembut dengan menggunakan\n"
+"PCF atau cakera Poisson tetapi turut menggunakan lebih banyak sumber."
#: src/settings_translation_file.cpp
msgid "Defines areas where trees have apples."
@@ -2954,6 +3165,10 @@ msgid "Disallow empty passwords"
msgstr "Menolak kata laluan kosong"
#: src/settings_translation_file.cpp
+msgid "Display Density Scaling Factor"
+msgstr "Faktor Skala Ketumpatan Paparan"
+
+#: src/settings_translation_file.cpp
msgid "Domain name of server, to be displayed in the serverlist."
msgstr "Nama domain pelayan, untuk dipaparkan dalam senarai pelayan."
@@ -3003,6 +3218,25 @@ msgstr ""
"Sokongan ini dalam ujikaji dan API boleh berubah."
#: src/settings_translation_file.cpp
+msgid ""
+"Enable Poisson disk filtering.\n"
+"On true uses Poisson disk to make \"soft shadows\". Otherwise uses PCF "
+"filtering."
+msgstr ""
+"Membolehkan penapisan cakera Poisson.\n"
+"Jika dibenarkan, gunakan cakera Poisson untuk membuat \"bayang lembut\". "
+"Jika tidak, gunakan penapisan PCF."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable colored shadows.\n"
+"On true translucent nodes cast colored shadows. This is expensive."
+msgstr ""
+"Membolehkan bayang berwarna. \n"
+"Jika dibenarkan, nod lut cahaya mengeluarkan bayang berwarna. Fungsi ini "
+"sangat berat."
+
+#: src/settings_translation_file.cpp
msgid "Enable console window"
msgstr "Membolehkan tetingkap konsol"
@@ -3048,7 +3282,7 @@ msgid ""
"Disable for speed or for different looks."
msgstr ""
"Membolehkan pencahayaan lembut dengan oklusi sekitar yang ringkas.\n"
-"Lumpuhkannya untuk kelajuan atau untuk kelihatan berbeza."
+"Lumpuhkannya untuk kelajuan atau untuk kelihatan berlainan."
#: src/settings_translation_file.cpp
msgid ""
@@ -3140,6 +3374,16 @@ msgstr ""
"Pengubahan tetapan ini memerlukan permulaan semula."
#: src/settings_translation_file.cpp
+msgid ""
+"Enables tradeoffs that reduce CPU load or increase rendering performance\n"
+"at the expense of minor visual glitches that do not impact game playability."
+msgstr ""
+"Membolehkan keseimbangan yang mengurangkan muatan CPU atau meningkatkan "
+"prestasi kemas gabung\n"
+"dengan mengorbankan glic visual yang kecil yang tidak memberi kesan kepada "
+"kebolehan bermain permainan."
+
+#: src/settings_translation_file.cpp
msgid "Engine profiling data print interval"
msgstr "Selang masa cetak data pemprofilan enjin"
@@ -3184,18 +3428,6 @@ msgid "Fallback font path"
msgstr "Laluan fon berbalik"
#: src/settings_translation_file.cpp
-msgid "Fallback font shadow"
-msgstr "Bayang fon berbalik"
-
-#: src/settings_translation_file.cpp
-msgid "Fallback font shadow alpha"
-msgstr "Nilai alfa bayang fon berbalik"
-
-#: src/settings_translation_file.cpp
-msgid "Fallback font size"
-msgstr "Saiz fon berbalik"
-
-#: src/settings_translation_file.cpp
msgid "Fast key"
msgstr "Kekunci pergerakan pantas"
@@ -3213,11 +3445,11 @@ msgstr "Pergerakan pantas"
#: src/settings_translation_file.cpp
msgid ""
-"Fast movement (via the \"special\" key).\n"
+"Fast movement (via the \"Aux1\" key).\n"
"This requires the \"fast\" privilege on the server."
msgstr ""
-"Bergerak pantas (dengan kekunci \"istimewa\").\n"
-"Ini memerlukan keistimewaan \"pergerakan pantas\" dalam pelayan tersebut."
+"Bergerak pantas (dengan kekunci \"Aux1\").\n"
+"Ini memerlukan keistimewaan \"pergerakan pantas\" di pelayan tersebut."
#: src/settings_translation_file.cpp
msgid "Field of view"
@@ -3251,9 +3483,9 @@ msgstr "Pemetaan tona sinematik"
#: 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."
+"which PNG optimizers usually discard, often resulting in dark or\n"
+"light edges to transparent textures. Apply a filter to clean that up\n"
+"at texture load time. This is automatically enabled if mipmapping is enabled."
msgstr ""
"Tekstur yang ditapis boleh sebatikan nilai RGB dengan jiran yang lut sinar "
"sepenuhnya,\n"
@@ -3261,7 +3493,8 @@ msgstr ""
"atau\n"
"terang pada tekstur lut sinar. Guna penapisan ini untuk membersihkan tekstur "
"tersebut\n"
-"ketika ia sedang dimuatkan."
+"ketika ia sedang dimuatkan. Ini dibolehkan secara automatik jika pemetaan "
+"mip dibolehkan."
#: src/settings_translation_file.cpp
msgid "Filtering"
@@ -3353,16 +3586,16 @@ msgid "Font size"
msgstr "Saiz fon"
#: src/settings_translation_file.cpp
-msgid "Font size of the default font in point (pt)."
-msgstr "Saiz fon bagi fon lalai dalan unit titik (pt)."
+msgid "Font size divisible by"
+msgstr "Saiz fon boleh dibahagikan dengan"
#: src/settings_translation_file.cpp
-msgid "Font size of the fallback font in point (pt)."
-msgstr "Saiz fon bagi fon berbalik dalam unit titik (pt)."
+msgid "Font size of the default font where 1 unit = 1 pixel at 96 DPI"
+msgstr "Saiz fon bagi fon lalai di mana 1 unit = 1 piksel pada 96 DPI"
#: src/settings_translation_file.cpp
-msgid "Font size of the monospace font in point (pt)."
-msgstr "Saiz fon bagi fon monospace dalam unit titik (pt)."
+msgid "Font size of the monospace font where 1 unit = 1 pixel at 96 DPI"
+msgstr "Saiz fon bagi fon monospace di mana 1 unit = 1 piksel pada 96 DPI"
#: src/settings_translation_file.cpp
msgid ""
@@ -3374,6 +3607,25 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"For pixel-style fonts that do not scale well, this ensures that font sizes "
+"used\n"
+"with this font will always be divisible by this value, in pixels. For "
+"instance,\n"
+"a pixel font 16 pixels tall should have this set to 16, so it will only ever "
+"be\n"
+"sized 16, 32, 48, etc., so a mod requesting a size of 25 will get 32."
+msgstr ""
+"Untuk fon gaya piksel yang tidak boleh disesuaikan dengan baik, tetapan ini "
+"memastikan saiz fon\n"
+"yang digunakan dengan fon ini akan sentiasa boleh dibahagikan dengan nilai "
+"ini, dalam piksel.\n"
+"Contohnya, sebuah fon piksel dengan tinggi 16 piksel patut tetapkan tetapan "
+"ini menjadi 16, supaya\n"
+"ia hanya guna saiz 16, 32, 48, dll., jadi jika mods meminta fon bersaiz 25 "
+"maka ia akan dapat saiz 32."
+
+#: src/settings_translation_file.cpp
+msgid ""
"Format of player chat messages. The following strings are valid "
"placeholders:\n"
"@name, @message, @timestamp (optional)"
@@ -3435,11 +3687,7 @@ msgstr "Jenis fraktal"
#: src/settings_translation_file.cpp
msgid "Fraction of the visible distance at which fog starts to be rendered"
-msgstr "Bahagian daripada jarak boleh lihat di mana kabut mula dijana"
-
-#: src/settings_translation_file.cpp
-msgid "FreeType fonts"
-msgstr "Fon FreeType"
+msgstr "Bahagian daripada jarak boleh lihat di mana kabut mula dikemas gabung"
#: src/settings_translation_file.cpp
msgid ""
@@ -3479,10 +3727,6 @@ msgid "Full screen"
msgstr "Skrin penuh"
#: src/settings_translation_file.cpp
-msgid "Full screen BPP"
-msgstr "BPP skrin penuh"
-
-#: src/settings_translation_file.cpp
msgid "Fullscreen mode."
msgstr "Mod skrin penuh."
@@ -3506,10 +3750,10 @@ msgstr "Panggil balik sejagat"
msgid ""
"Global map generation attributes.\n"
"In Mapgen v6 the 'decorations' flag controls all decorations except trees\n"
-"and junglegrass, in all other mapgens this flag controls all decorations."
+"and jungle grass, in all other mapgens this flag controls all decorations."
msgstr ""
"Atribut penjanaan peta sejagat.\n"
-"Dalam janapeta v6, bendera 'decorations' mengawal semua hiasan kecuali "
+"Dalam Janapeta v6, bendera 'decorations' mengawal semua hiasan kecuali "
"pokok\n"
"dan rumput hutan, dalam janapeta lain pula bendera ini mengawal semua hiasan."
@@ -3594,8 +3838,9 @@ msgid "Heat noise"
msgstr "Hingar haba"
#: src/settings_translation_file.cpp
-msgid "Height component of the initial window size."
-msgstr "Komponen tinggi saiz tetingkap awal."
+msgid ""
+"Height component of the initial window size. Ignored in fullscreen mode."
+msgstr "Komponen tinggi saiz tetingkap awal. Diabaikan dalam mod skrin penuh."
#: src/settings_translation_file.cpp
msgid "Height noise"
@@ -3606,10 +3851,6 @@ msgid "Height select noise"
msgstr "Hingar pilihan ketinggian"
#: src/settings_translation_file.cpp
-msgid "High-precision FPU"
-msgstr "Unit titik terapung (FPU) ketepatan tinggi"
-
-#: src/settings_translation_file.cpp
msgid "Hill steepness"
msgstr "Kecuraman bukit"
@@ -3807,7 +4048,7 @@ msgid ""
"If negative, liquid waves will move backwards.\n"
"Requires waving liquids to be enabled."
msgstr ""
-"Secepat mana gelora cecair akan bergerak. Nilai tinggi = lebih laju.\n"
+"Secepat mana gelora cecair akan bergerak. Nilai tinggi = lebih cepat.\n"
"Jika nilai negatif, gelora cecair akan bergerak ke belakang.\n"
"Memerlukan tetapan cecair bergelora dibolehkan."
@@ -3855,11 +4096,10 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"If disabled, \"special\" key is used to fly fast if both fly and fast mode "
-"are\n"
+"If disabled, \"Aux1\" key is used to fly fast if both fly and fast mode are\n"
"enabled."
msgstr ""
-"Jika dilumpuhkan, kekunci \"istimewa\" akan digunakan untuk terbang laju\n"
+"Jika dilumpuhkan, kekunci \"Aux1\" akan digunakan untuk terbang laju\n"
"sekiranya kedua-dua mod terbang dan mod pergerakan pantas dibolehkan."
#: src/settings_translation_file.cpp
@@ -3887,13 +4127,12 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"If enabled, \"special\" key instead of \"sneak\" key is used for climbing "
-"down and\n"
+"If enabled, \"Aux1\" key instead of \"Sneak\" key is used for climbing down "
+"and\n"
"descending."
msgstr ""
-"Jika dibolehkan, kekunci \"istimewa\" akan digunakan untuk panjat ke bawah "
-"dan\n"
-"turun dalam mod terbang, menggantikan kekunci \"selinap\"."
+"Jika dibolehkan, kekunci \"Aux1\" akan digunakan untuk panjat ke bawah dan\n"
+"turun dalam mod terbang, menggantikan kekunci \"Selinap\"."
#: src/settings_translation_file.cpp
msgid ""
@@ -3952,6 +4191,16 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"If the execution of a chat command takes longer than this specified time in\n"
+"seconds, add the time information to the chat command message"
+msgstr ""
+"Jika pelaksanaan sesuatu perintah sembang mengambil masa lebih lama daripada "
+"yang\n"
+"dinyatakan di sini dalam unit saat, tambah maklumat masa ke mesej perintah "
+"sembang"
+
+#: src/settings_translation_file.cpp
+msgid ""
"If the file size of debug.txt exceeds the number of megabytes specified in\n"
"this setting when it is opened, the file is moved to debug.txt.1,\n"
"deleting an older debug.txt.1 if it exists.\n"
@@ -3965,7 +4214,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "If this is set, players will always (re)spawn at the given position."
msgstr ""
-"Jika tetapan ini ditetapkan, pemain akan sentiasa dilahirkan (semula) dekat "
+"Jika tetapan ini ditetapkan, pemain akan sentiasa jelma (semula) dekat "
"kedudukan yang diberikan."
#: src/settings_translation_file.cpp
@@ -4009,7 +4258,7 @@ msgstr ""
"Ini selalunya hanya diperlukan oleh penyumbang teras/terbina dalam"
#: src/settings_translation_file.cpp
-msgid "Instrument chatcommands on registration."
+msgid "Instrument chat commands on registration."
msgstr "Memasang perintah sembang ketika pendaftaran."
#: src/settings_translation_file.cpp
@@ -4101,7 +4350,7 @@ msgid "Joystick button repetition interval"
msgstr "Selang masa pengulangan butang kayu bedik"
#: src/settings_translation_file.cpp
-msgid "Joystick deadzone"
+msgid "Joystick dead zone"
msgstr "Zon mati kayu bedik"
#: src/settings_translation_file.cpp
@@ -4324,7 +4573,7 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
-"Kekunci untuk membuka tetingkap sembang untuk menaip arahan.\n"
+"Kekunci untuk membuka tetingkap sembang untuk menaip perintah.\n"
"Lihat http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
@@ -4334,7 +4583,7 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
-"Kekunci untuk membuka tetingkap sembang untuk menaip arahan tempatan.\n"
+"Kekunci untuk membuka tetingkap sembang untuk menaip perintah tempatan.\n"
"Lihat http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
@@ -5098,7 +5347,7 @@ msgid ""
"Useful for mod developers and server operators."
msgstr ""
"Memuatkan pembukah permainan untuk mengutip data pemprofilan permainan.\n"
-"Menyediakan perintah /profiler untuk mengakses profil yang dikompil.\n"
+"Menyediakan perintah /profiler untuk mencapai profil yang dikompil.\n"
"Berguna untuk pembangun mods dan pengendali pelayan."
#: src/settings_translation_file.cpp
@@ -5125,11 +5374,6 @@ msgstr ""
"terbenam) dan arah pandang."
#: src/settings_translation_file.cpp
-msgid "Makes DirectX work with LuaJIT. Disable if it causes troubles."
-msgstr ""
-"Membuatkan DirectX bekerja dengan LuaJIT. Lumpuhkan tetapan jika bermasalah."
-
-#: src/settings_translation_file.cpp
msgid "Makes all liquids opaque"
msgstr "Buatkan semua cecair menjadi legap"
@@ -5220,6 +5464,10 @@ msgid "Map save interval"
msgstr "Selang masa penyimpanan peta"
#: src/settings_translation_file.cpp
+msgid "Map shadows update frames"
+msgstr "Bingkai kemas kini bayang peta"
+
+#: src/settings_translation_file.cpp
msgid "Mapblock limit"
msgstr "Had blok peta"
@@ -5330,6 +5578,10 @@ msgstr ""
"apabila permainan dijedakan."
#: src/settings_translation_file.cpp
+msgid "Maximum distance to render shadows."
+msgstr "Jarak maksimum untuk mengemas gabung bayang."
+
+#: src/settings_translation_file.cpp
msgid "Maximum forceloaded blocks"
msgstr "Jumlah maksimum blok yang dipaksa muat"
@@ -5402,7 +5654,7 @@ msgid ""
"Maximum number of mapblocks for client to be kept in memory.\n"
"Set to -1 for unlimited amount."
msgstr ""
-"Jumlah blok peta maksimum yang klien boleh simpan dalam memori.\n"
+"Jumlah blok peta maksimum yang klien boleh simpan dalam ingatan.\n"
"Tetapkan kepada -1 untuk jumlah tanpa had."
#: src/settings_translation_file.cpp
@@ -5458,9 +5710,20 @@ msgstr ""
"had."
#: src/settings_translation_file.cpp
-msgid "Maximum time in ms a file download (e.g. a mod download) may take."
+msgid ""
+"Maximum time a file download (e.g. a mod download) may take, stated in "
+"milliseconds."
msgstr ""
-"Masa maksimum dalam unit ms untuk muat turun fail (cth. muat turun mods)."
+"Masa maksimum yang dibenarkan untuk muat turun fail (cth. muat turun mods), "
+"dalam unit milisaat."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum time an interactive request (e.g. server list fetch) may take, "
+"stated in milliseconds."
+msgstr ""
+"Masa maksimum yang dibenarkan untuk permintaan saling tindak (cth. mengambil "
+"senarai pelayan), dalam unit milisaat."
#: src/settings_translation_file.cpp
msgid "Maximum users"
@@ -5523,8 +5786,8 @@ msgid "Mod channels"
msgstr "Saluran mods"
#: src/settings_translation_file.cpp
-msgid "Modifies the size of the hudbar elements."
-msgstr "Mengubah saiz elemen palang papar pandu (hudbar)."
+msgid "Modifies the size of the HUD elements."
+msgstr "Mengubah saiz elemen papar pandu (HUD)."
#: src/settings_translation_file.cpp
msgid "Monospace font path"
@@ -5535,6 +5798,10 @@ msgid "Monospace font size"
msgstr "Saiz fon monospace"
#: src/settings_translation_file.cpp
+msgid "Monospace font size divisible by"
+msgstr "Saiz fon monospace boleh dibahagikan dengan"
+
+#: src/settings_translation_file.cpp
msgid "Mountain height noise"
msgstr "Hingar ketinggian gunung"
@@ -5651,7 +5918,7 @@ msgstr "Hingar"
#: src/settings_translation_file.cpp
msgid "Number of emerge threads"
-msgstr "Jumlah jalur keluar"
+msgstr "Jumlah jalur timbul"
#: src/settings_translation_file.cpp
msgid ""
@@ -5684,13 +5951,13 @@ 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"
+"This is a trade-off between SQLite transaction overhead and\n"
"memory consumption (4096=100MB, as a rule of thumb)."
msgstr ""
"Jumlah blok-blok tambahan yang boleh dimuatkan oleh /clearobjects pada "
"sesuatu masa.\n"
-"Ini merupakan keseimbangan antara overhed urus niaga sqlite\n"
-"dan penggunaan memori (Kebiasaannya, 4096=100MB)."
+"Ini merupakan keseimbangan antara overhed urus niaga SQLite\n"
+"dan penggunaan ingatan (4096=100MB, mengikut kebiasaan)."
#: src/settings_translation_file.cpp
msgid "Online Content Repository"
@@ -5707,11 +5974,6 @@ msgstr "Kelegapan (alfa) bayang belakang fon lalai, nilai antara 0 dan 255."
#: src/settings_translation_file.cpp
msgid ""
-"Opaqueness (alpha) of the shadow behind the fallback font, between 0 and 255."
-msgstr "Kelegapan (alfa) bayang belakang fon berbalik, nilai antara 0 dan 255."
-
-#: src/settings_translation_file.cpp
-msgid ""
"Open the pause menu when the window's focus is lost. Does not pause if a "
"formspec is\n"
"open."
@@ -5720,17 +5982,16 @@ msgstr ""
"Tidak jeda jika formspec dibuka."
#: src/settings_translation_file.cpp
+msgid "Optional override for chat weblink color."
+msgstr "Pilihan mengatasi warna pautan sesawang di sembang."
+
+#: src/settings_translation_file.cpp
msgid ""
-"Path of the fallback font.\n"
-"If “freetype†setting is enabled: Must be a TrueType font.\n"
-"If “freetype†setting is disabled: Must be a bitmap or XML vectors font.\n"
+"Path of the fallback font. Must be a TrueType font.\n"
"This font will be used for certain languages or if the default font is "
"unavailable."
msgstr ""
-"Laluan fon berbalik.\n"
-"Jika tetapan “freetype†dibolehkan: Ia mestilah fon TrueType.\n"
-"Jika tetapan “freetype†dilumpuhkan: Ia mestilah fon peta bit atau vektor "
-"XML.\n"
+"Laluan fon berbalik. Mestilah sebuah fon jenis TrueType.\n"
"Fon ini akan digunakan bagi sesetengah bahasa atau jika fon lalai tidak "
"tersedia."
@@ -5756,29 +6017,19 @@ msgstr "Laluan ke direktori tekstur. Semua tekstur dicari dari sini dahulu."
#: src/settings_translation_file.cpp
msgid ""
-"Path to the default font.\n"
-"If “freetype†setting is enabled: Must be a TrueType font.\n"
-"If “freetype†setting is disabled: Must be a bitmap or XML vectors font.\n"
+"Path to the default font. Must be a TrueType font.\n"
"The fallback font will be used if the font cannot be loaded."
msgstr ""
-"Laluan fon lalai.\n"
-"Jika tetapan “freetype†dibolehkan: Ia mestilah fon TrueType.\n"
-"Jika tetapan “freetype†dilumpuhkan: Ia mestilah fon peta bit atau vektor "
-"XML.\n"
+"Laluan fon lalai. Mestilah sebuah fon jenis TrueType.\n"
"Fon berbalik akan digunakan sekiranya fon ini tidak dapat dimuatkan."
#: src/settings_translation_file.cpp
msgid ""
-"Path to the monospace font.\n"
-"If “freetype†setting is enabled: Must be a TrueType font.\n"
-"If “freetype†setting is disabled: Must be a bitmap or XML vectors font.\n"
+"Path to the monospace font. Must be a TrueType font.\n"
"This font is used for e.g. the console and profiler screen."
msgstr ""
-"Laluan fon monospace.\n"
-"Jika tetapan “freetype†dibolehkan: Ia mestilah fon TrueType.\n"
-"Jika tetapan “freetype†dilumpuhkan: Ia mestilah fon peta bit atau vektor "
-"XML.\n"
-"Fon ini digunakan untuk unsur spt. konsol dan skrin pembukah."
+"Laluan fon monospace. Mestilah sebuah fon jenis TrueType.\n"
+"Fon ini digunakan untuk perkara spt. konsol dan skrin pembukah."
#: src/settings_translation_file.cpp
msgid "Pause on lost window focus"
@@ -5833,6 +6084,10 @@ msgid "Player versus player"
msgstr "Pemain lawan pemain"
#: src/settings_translation_file.cpp
+msgid "Poisson filtering"
+msgstr "Penapisan poisson"
+
+#: src/settings_translation_file.cpp
msgid ""
"Port to connect to (UDP).\n"
"Note that the port field in the main menu overrides this setting."
@@ -5889,12 +6144,12 @@ msgstr "Alamat pendengar Prometheus"
#: src/settings_translation_file.cpp
msgid ""
"Prometheus listener address.\n"
-"If minetest is compiled with ENABLE_PROMETHEUS option enabled,\n"
+"If Minetest is compiled with ENABLE_PROMETHEUS option enabled,\n"
"enable metrics listener for Prometheus on that address.\n"
-"Metrics can be fetch on http://127.0.0.1:30000/metrics"
+"Metrics can be fetched on http://127.0.0.1:30000/metrics"
msgstr ""
"Alamat pendengar Prometheus.\n"
-"Jika minetest dikompil dengan tetapan ENABLE_PROMETHEUS dibolehkan,\n"
+"Jika Minetest dikompil dengan pilihan ENABLE_PROMETHEUS dibolehkan,\n"
"membolehkan pendengar metrik untuk Prometheus pada alamat berkenaan.\n"
"Metrik boleh diambil di http://127.0.0.1:30000/metrics"
@@ -5970,7 +6225,7 @@ msgid ""
"csm_restriction_noderange)\n"
"READ_PLAYERINFO: 32 (disable get_player_names call client-side)"
msgstr ""
-"Hadkan akses sesetengah fungsi pihak klien di pelayan.\n"
+"Hadkan capaian sesetengah fungsi pihak klien di pelayan.\n"
"Gabungkan bendera bait di bawah ini untuk mengehadkan ciri-ciri pihak klien, "
"atau\n"
"tetapkan kepada 0 untuk tiada had:\n"
@@ -6171,7 +6426,7 @@ msgstr ""
"6 = Set Julia \"Sepupu Mandy\" 4D.\n"
"7 = Set Mandelbrot \"Variasi\" 4D.\n"
"8 = Set Julia \"Variasi\" 4D.\n"
-"9 = Set Mandelbrot \"Mandelbrot/Mandelbar\" 3D.\n"
+"9 = Set Mandelbrot jenis \"Mandelbrot/Mandelbar\" 3D.\n"
"10 = Set Julia \"Mandelbrot/Mandelbar\" 3D.\n"
"11 = Set Mandelbrot \"Pokok Krismas\" 3D.\n"
"12 = Set Julia \"Pokok Krismas\" 3D.\n"
@@ -6232,6 +6487,44 @@ msgstr "Tetapkan panjang aksara maksimum mesej sembang dihantar oleh klien."
#: src/settings_translation_file.cpp
msgid ""
+"Set the shadow strength.\n"
+"Lower value means lighter shadows, higher value means darker shadows."
+msgstr ""
+"Menetapkan kekuatan bayang.\n"
+"Nilai lebih rendah untuk bayang lebih terang, nilai lebih tinggi untuk "
+"bayang lebih gelap."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set the soft shadow radius size.\n"
+"Lower values mean sharper shadows, bigger values mean softer shadows.\n"
+"Minimum value: 1.0; maximum value: 10.0"
+msgstr ""
+"Menetapkan saiz jejari bayang lembut.\n"
+"Nilai lebih rendah untuk bayang lebih tajam, nilai lebih tinggi untuk bayang "
+"lebih lembut.\n"
+"Nilai minimum: 1.0; nilai maksimum: 10.0"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set the tilt of Sun/Moon orbit in degrees.\n"
+"Value of 0 means no tilt / vertical orbit.\n"
+"Minimum value: 0.0; maximum value: 60.0"
+msgstr ""
+"Menetapkan kecondongan orbit Matahari/Bulan dalam unit darjah.\n"
+"Nilai 0 untuk tidak condong / tiada orbit menegak.\n"
+"Nilai minimum: 0.0; nilai maksimum: 60.0"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set to true to enable Shadow Mapping.\n"
+"Requires shaders to be enabled."
+msgstr ""
+"Tetapkan kepada \"true\" untuk membolehkan Pemetaan Bayang.\n"
+"Memerlukan pembayang untuk dibolehkan."
+
+#: src/settings_translation_file.cpp
+msgid ""
"Set to true to enable waving leaves.\n"
"Requires shaders to be enabled."
msgstr ""
@@ -6255,6 +6548,16 @@ msgstr ""
"Memerlukan pembayang untuk dibolehkan."
#: src/settings_translation_file.cpp
+msgid ""
+"Sets shadow texture quality to 32 bits.\n"
+"On false, 16 bits texture will be used.\n"
+"This can cause much more artifacts in the shadow."
+msgstr ""
+"Menetapkan kualiti tekstur bayang kepada 32 bit.\n"
+"Jika tetapkan kepada \"false\", tekstur 16 bit akan digunakan.\n"
+"Tetapan ini boleh menyebabkan lebih banyak artifak pada bayang."
+
+#: src/settings_translation_file.cpp
msgid "Shader path"
msgstr "Laluan pembayang"
@@ -6270,6 +6573,23 @@ msgstr ""
"Namun ia hanya berfungsi dengan pembahagian belakang video OpenGL."
#: src/settings_translation_file.cpp
+msgid "Shadow filter quality"
+msgstr "Kualiti penapisan bayang"
+
+#: src/settings_translation_file.cpp
+msgid "Shadow map max distance in nodes to render shadows"
+msgstr ""
+"Jarak maksimum peta bayang untuk mengemas gabung bayang, dalam unit nod"
+
+#: src/settings_translation_file.cpp
+msgid "Shadow map texture in 32 bits"
+msgstr "Tekstur peta bayang dalam 32 bit"
+
+#: src/settings_translation_file.cpp
+msgid "Shadow map texture size"
+msgstr "Saiz tekstur peta bayang"
+
+#: src/settings_translation_file.cpp
msgid ""
"Shadow offset (in pixels) of the default font. If 0, then shadow will not be "
"drawn."
@@ -6278,12 +6598,8 @@ msgstr ""
"dilukis."
#: src/settings_translation_file.cpp
-msgid ""
-"Shadow offset (in pixels) of the fallback font. If 0, then shadow will not "
-"be drawn."
-msgstr ""
-"Ofset bayang fon berbalik (dalam unit piksel). Jika 0, maka bayang tidak "
-"akan dilukis."
+msgid "Shadow strength"
+msgstr "Kekuatan bayang"
#: src/settings_translation_file.cpp
msgid "Shape of the minimap. Enabled = round, disabled = square."
@@ -6306,7 +6622,7 @@ msgstr ""
"Anda perlu mulakan semula selepas mengubah tetapan ini."
#: src/settings_translation_file.cpp
-msgid "Show nametag backgrounds by default"
+msgid "Show name tag backgrounds by default"
msgstr "Tunjuk latar belakang tag nama secara lalainya"
#: src/settings_translation_file.cpp
@@ -6340,6 +6656,10 @@ msgstr ""
"daripada jalur utama, lalu mengurangkan ketaran."
#: src/settings_translation_file.cpp
+msgid "Sky Body Orbit Tilt"
+msgstr "Kecondongan Orbit Badan Angkasa"
+
+#: src/settings_translation_file.cpp
msgid "Slice w"
msgstr "Hirisan w"
@@ -6400,16 +6720,12 @@ msgid "Sneaking speed, in nodes per second."
msgstr "Kelajuan menyelinap, dalam unit nod per saat."
#: src/settings_translation_file.cpp
-msgid "Sound"
-msgstr "Bunyi"
-
-#: src/settings_translation_file.cpp
-msgid "Special key"
-msgstr "Kekunci istimewa"
+msgid "Soft shadow radius"
+msgstr "Jejari bayang lembut"
#: src/settings_translation_file.cpp
-msgid "Special key for climbing/descending"
-msgstr "Kekunci untuk memanjat/menurun"
+msgid "Sound"
+msgstr "Bunyi"
#: src/settings_translation_file.cpp
msgid ""
@@ -6419,7 +6735,7 @@ msgid ""
"Files that are not present will be fetched the usual way."
msgstr ""
"Menetapkan URL dari mana klien mengambil media, menggantikan UDP.\n"
-"$filename mestilah boleh diakses daripada $remote_media$filename melalui\n"
+"$filename mestilah boleh dicapai daripada $remote_media$filename melalui\n"
"cURL (sudah tentu, remote_media mesti berakhir dengan tanda condong).\n"
"Fail yang tidak wujud akan diambil dengan cara biasa."
@@ -6435,6 +6751,18 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Spread a complete update of shadow map over given amount of frames.\n"
+"Higher values might make shadows laggy, lower values\n"
+"will consume more resources.\n"
+"Minimum value: 1; maximum value: 16"
+msgstr ""
+"Sebar kemas kini lengkap peta bayang merentasi jumlah bingkai yang diberi.\n"
+"Nilai lebih tinggi mungkin membuatkan bayang lembap bertindak balas,\n"
+"nilai lebih rendah akan memakan lebih banyak sumber.\n"
+"Nilai minimum: 1; nilai maksimum: 16"
+
+#: src/settings_translation_file.cpp
+msgid ""
"Spread of light curve boost range.\n"
"Controls the width of the range to be boosted.\n"
"Standard deviation of the light curve boost Gaussian."
@@ -6445,7 +6773,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Static spawnpoint"
-msgstr "Titik lahir statik"
+msgstr "Titik jelma statik"
#: src/settings_translation_file.cpp
msgid "Steepness noise"
@@ -6570,6 +6898,16 @@ msgstr "Laluan tekstur"
#: src/settings_translation_file.cpp
msgid ""
+"Texture size to render the shadow map on.\n"
+"This must be a power of two.\n"
+"Bigger numbers create better shadows but it is also more expensive."
+msgstr ""
+"Saiz tekstur yang akan digunakan untuk mengemas gabung peta bayang.\n"
+"Nilai ini mestilah hasil kuasa dua.\n"
+"Nombor lebih besar mencipta bayang lebih baik tetapi ia juga lebih berat."
+
+#: src/settings_translation_file.cpp
+msgid ""
"Textures on a node may be aligned either to the node or to the world.\n"
"The former mode suits better things like machines, furniture, etc., while\n"
"the latter makes stairs and microblocks fit surroundings better.\n"
@@ -6592,7 +6930,7 @@ msgid "The URL for the content repository"
msgstr "URL untuk repositori kandungan"
#: src/settings_translation_file.cpp
-msgid "The deadzone of the joystick"
+msgid "The dead zone of the joystick"
msgstr "Zon mati bagi kayu bedik yang digunakan"
#: src/settings_translation_file.cpp
@@ -6658,7 +6996,7 @@ msgid ""
"maintained.\n"
"This should be configured together with active_object_send_range_blocks."
msgstr ""
-"Radius jilid blok di sekitar setiap pemain yang tertakluk kepada benda blok\n"
+"Jejari jilid blok di sekitar setiap pemain yang tertakluk kepada benda blok\n"
"aktif, dinyatakan dalam blokpeta (16 nod).\n"
"Dalam blok aktif, objek dimuatkan dan ABM dijalankan.\n"
"Ini juga jarak minimum di mana objek aktif (mob) dikekalkan.\n"
@@ -6667,14 +7005,14 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"The rendering back-end for Irrlicht.\n"
+"The rendering back-end.\n"
"A restart is required after changing this.\n"
"Note: On Android, stick with OGLES1 if unsure! App may fail to start "
"otherwise.\n"
"On other platforms, OpenGL is recommended.\n"
"Shaders are supported by OpenGL (desktop only) and OGLES2 (experimental)"
msgstr ""
-"Terjemahan bahagian belakang untuk Irrlicht.\n"
+"Kemas gabung bahagian belakang.\n"
"Anda perlu memulakan semula selepas mengubah tetapan ini.\n"
"Nota: Di Android, kekalkan dengan OGLES1 jika tidak pasti! Apl mungkin gagal "
"dimulakan jika ditukar.\n"
@@ -6684,7 +7022,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"The sensitivity of the joystick axes for moving the\n"
-"ingame view frustum around."
+"in-game view frustum around."
msgstr ""
"Kepekaan paksi kayu bedik untuk menggerakkan\n"
"frustum penglihatan dalam permainan."
@@ -6761,7 +7099,8 @@ msgid ""
"Time in seconds for item entity (dropped items) to live.\n"
"Setting it to -1 disables the feature."
msgstr ""
-"Masa untuk entiti item (item yang dijatuhkan) terus hidup dalam unit saat.\n"
+"Masa untuk entiti item (iaitu item yang dijatuhkan) terus hidup dalam unit "
+"saat.\n"
"Tetapkan kepada -1 untuk melumpuhkan sifat tersebut."
#: src/settings_translation_file.cpp
@@ -6779,7 +7118,7 @@ msgstr "Kelajuan masa"
#: src/settings_translation_file.cpp
msgid "Timeout for client to remove unused map data from memory."
-msgstr "Had masa untuk klien membuang peta yang tidak digunakan dari memori."
+msgstr "Had masa untuk klien membuang peta yang tidak digunakan dari ingatan."
#: src/settings_translation_file.cpp
msgid ""
@@ -6806,6 +7145,10 @@ msgid "Touch screen threshold"
msgstr "Nilai ambang skrin sentuh"
#: src/settings_translation_file.cpp
+msgid "Tradeoffs for performance"
+msgstr "Keseimbangan untuk prestasi"
+
+#: src/settings_translation_file.cpp
msgid "Trees noise"
msgstr "Hingar pokok"
@@ -6884,12 +7227,12 @@ msgstr "Gunakan penapisan bilinear apabila menyesuaikan tekstur."
#: src/settings_translation_file.cpp
msgid ""
-"Use mip mapping to scale textures. May slightly increase performance,\n"
+"Use mipmapping to scale textures. May slightly increase performance,\n"
"especially when using a high resolution texture pack.\n"
"Gamma correct downscaling is not supported."
msgstr ""
"Gunakan pemetaan mip untuk menyesuaikan tekstur. Boleh meningkatkan\n"
-"sedikit prestasi, terutamanya apabila menggunakan pek tekstur berdefinisi\n"
+"sedikit prestasi, terutamanya apabila menggunakan pek tekstur resolusi\n"
"tinggi. Penyesuai-turun gama secara tepat tidak disokong."
#: src/settings_translation_file.cpp
@@ -6921,7 +7264,7 @@ msgstr "VBO"
#: src/settings_translation_file.cpp
msgid "VSync"
-msgstr "VSync"
+msgstr "Segerak Menegak"
#: src/settings_translation_file.cpp
msgid "Valley depth"
@@ -7013,8 +7356,8 @@ msgid "Viewing range"
msgstr "Jarak pandang"
#: src/settings_translation_file.cpp
-msgid "Virtual joystick triggers aux button"
-msgstr "Kayu bedik maya memicu butang aux"
+msgid "Virtual joystick triggers Aux1 button"
+msgstr "Kayu bedik maya memicu butang Aux1"
#: src/settings_translation_file.cpp
msgid "Volume"
@@ -7093,6 +7436,10 @@ msgid "Waving plants"
msgstr "Tumbuhan bergoyang"
#: src/settings_translation_file.cpp
+msgid "Weblink color"
+msgstr "Warna pautan sesawang"
+
+#: 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"
@@ -7102,7 +7449,7 @@ msgstr ""
"semua\n"
"imej GUI perlu ditapis dalam perisian, tetapi sesetengah imej dijana secara "
"terus\n"
-"ke perkakasan (contohnya, penerjemahan-ke-tekstur untuk nod dalam inventori)."
+"ke perkakasan (contohnya, kemas-gabung-ke-tekstur untuk nod dalam inventori)."
#: src/settings_translation_file.cpp
msgid ""
@@ -7126,44 +7473,33 @@ msgid ""
"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.\n"
+"memory. Powers of 2 are recommended. This setting is ONLY applied if\n"
+"bilinear/trilinear/anisotropic filtering is enabled.\n"
"This is also used as the base node texture size for world-aligned\n"
"texture autoscaling."
msgstr ""
"Apabila menggunakan tapisan bilinear/trilinear/anisotropik, tekstur "
"resolusi\n"
-"rendah boleh jadi kabur, jadi sesuai-naikkan mereka secara automatik dengan\n"
-"sisipan jiran terdekat untuk memelihara piksel keras. Tetapan ini "
-"menetapkan\n"
-"saiz tekstur minima untuk tekstur penyesuai-naikkan; nilai lebih tinggi "
-"tampak\n"
-"lebih tajam, tetapi memerlukan memori yang lebih banyak. Nilai kuasa 2\n"
-"digalakkan. Menetapkan nilai ini lebih tinggi dari 1 tidak akan "
-"menampakkan\n"
-"kesan yang nyata melainkan tapisan bilinear/trilinear/anisotropik "
+"rendah boleh jadi kabur, jadi sesuai-naikkannya secara automatik dengan "
+"sisipan\n"
+"jiran terdekat untuk memelihara piksel keras. Tetapan ini menetapkan saiz "
+"tekstur\n"
+"minimum untuk tekstur yang disesuai-naikkan; nilai lebih tinggi tampak "
+"lebih\n"
+"tajam, tetapi memerlukan ingatan yang lebih banyak. Nilai kuasa 2 "
+"digalakkan.\n"
+"Tetapan ini HANYA digunakan jika penapisan bilinear/trilinear/anisotropik "
"dibolehkan.\n"
-"Ini juga digunakan sebagai saiz tekstur nod asas untuk autopenyesuaian\n"
-"tekstur jajaran dunia."
+"Tetapan ini juga digunakan sebagai saiz tekstur nod asas untuk\n"
+"penyesuaian automatik bagi tekstur jajaran dunia."
#: src/settings_translation_file.cpp
msgid ""
-"Whether FreeType fonts are used, requires FreeType support to be compiled "
-"in.\n"
-"If disabled, bitmap and XML vectors fonts are used instead."
-msgstr ""
-"Menetapkan sama ada fon FreeType digunakan, memerlukan sokongan Freetype\n"
-"dikompil bersama. Jika dilumpuhkan, fon peta bit dan vektor XML akan "
-"digunakan."
-
-#: src/settings_translation_file.cpp
-msgid ""
-"Whether nametag backgrounds should be shown by default.\n"
+"Whether name tag backgrounds should be shown by default.\n"
"Mods may still set a background."
msgstr ""
"Sama ada latar belakang tag nama patut ditunjukkan secara lalainya.\n"
-"Mods masih boleh tetapkan latar belakang."
+"Mods masih boleh menetapkan latar belakang."
#: src/settings_translation_file.cpp
msgid "Whether node texture animations should be desynchronized per mapblock."
@@ -7218,8 +7554,8 @@ msgstr ""
"seperti menekan butang F5)."
#: src/settings_translation_file.cpp
-msgid "Width component of the initial window size."
-msgstr "Komponen lebar saiz tetingkap awal."
+msgid "Width component of the initial window size. Ignored in fullscreen mode."
+msgstr "Komponen lebar saiz tetingkap awal. Diabaikan dalam mod skrin penuh."
#: src/settings_translation_file.cpp
msgid "Width of the selection box lines around nodes."
@@ -7322,45 +7658,22 @@ msgid "Y-level of seabed."
msgstr "Aras Y untuk dasar laut."
#: src/settings_translation_file.cpp
-msgid ""
-"ZLib compression level to use when saving mapblocks to disk.\n"
-"-1 - Zlib's default compression level\n"
-"0 - no compresson, fastest\n"
-"9 - best compression, slowest\n"
-"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)"
-msgstr ""
-"Tahap pemampatan ZLib untuk digunakan apabila menyimpan blokpeta ke cakera.\n"
-"-1 - tahap pemampatan lalai Zlib\n"
-"0 - tiada pemampatan, paling laju\n"
-"9 - pemampatan terbaik, paling lambat\n"
-"(tahap 1-3 menggunakan kaedah \"fast\" Zlib, 4-9 menggunakan kaedah biasa)"
-
-#: src/settings_translation_file.cpp
-msgid ""
-"ZLib compression level to use when sending mapblocks to the client.\n"
-"-1 - Zlib's default compression level\n"
-"0 - no compresson, fastest\n"
-"9 - best compression, slowest\n"
-"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)"
-msgstr ""
-"Tahap pemampatan ZLib untuk digunakan apabila menghantar blokpeta kepada "
-"klien.\n"
-"-1 - tahap pemampatan lalai Zlib\n"
-"0 - tiada pemampatan, paling laju\n"
-"9 - pemampatan terbaik, paling lambat\n"
-"(tahap 1-3 menggunakan kaedah \"fast\" Zlib, 4-9 menggunakan kaedah biasa)"
-
-#: src/settings_translation_file.cpp
msgid "cURL file download timeout"
msgstr "Had masa muat turun fail cURL"
#: src/settings_translation_file.cpp
+msgid "cURL interactive timeout"
+msgstr "Had masa saling tindak cURL"
+
+#: src/settings_translation_file.cpp
msgid "cURL parallel limit"
msgstr "Had cURL selari"
-#: src/settings_translation_file.cpp
-msgid "cURL timeout"
-msgstr "Had masa cURL"
+#~ msgid "- Creative Mode: "
+#~ msgstr "- Mod Kreatif: "
+
+#~ msgid "- Damage: "
+#~ msgstr "- Boleh cedera: "
#~ msgid ""
#~ "0 = parallax occlusion with slope information (faster).\n"
@@ -7369,6 +7682,9 @@ msgstr "Had masa cURL"
#~ "0 = oklusi paralaks dengan maklumat cerun (lebih cepat).\n"
#~ "1 = pemetaan bentuk muka bumi (lebih lambat, lebih tepat)."
+#~ msgid "Address / Port"
+#~ msgstr "Alamat / Port"
+
#~ msgid ""
#~ "Adjust the gamma encoding for the light tables. Higher numbers are "
#~ "brighter.\n"
@@ -7389,6 +7705,9 @@ msgstr "Had masa cURL"
#~ msgid "Back"
#~ msgstr "Backspace"
+#~ msgid "Bits per pixel (aka color depth) in fullscreen mode."
+#~ msgstr "Bit per piksel (atau kedalaman warna) dalam mod skrin penuh."
+
#~ msgid "Bump Mapping"
#~ msgstr "Pemetaan Bertompok"
@@ -7430,13 +7749,26 @@ msgstr "Had masa cURL"
#~ msgstr ""
#~ "Mengawal lebar terowong, nilai lebih kecil mencipta terowong lebih lebar."
+#~ msgid "Credits"
+#~ msgstr "Penghargaan"
+
#~ msgid "Crosshair color (R,G,B)."
#~ msgstr "Warna bagi kursor rerambut silang (R,G,B)."
+#~ msgid "Damage enabled"
+#~ msgstr "Boleh Cedera"
+
#~ msgid "Darkness sharpness"
#~ msgstr "Ketajaman kegelapan"
#~ msgid ""
+#~ "Default timeout for cURL, stated in milliseconds.\n"
+#~ "Only has an effect if compiled with cURL."
+#~ msgstr ""
+#~ "Had masa lalai untuk cURL, dinyatakan dalam milisaat.\n"
+#~ "Hanya berkesan jika dikompil dengan pilihan cURL."
+
+#~ msgid ""
#~ "Defines areas of floatland smooth terrain.\n"
#~ "Smooth floatlands occur when noise > 0."
#~ msgstr ""
@@ -7503,6 +7835,15 @@ msgstr "Had masa cURL"
#~ msgid "FPS in pause menu"
#~ msgstr "FPS di menu jeda"
+#~ msgid "Fallback font shadow"
+#~ msgstr "Bayang fon berbalik"
+
+#~ msgid "Fallback font shadow alpha"
+#~ msgstr "Nilai alfa bayang fon berbalik"
+
+#~ msgid "Fallback font size"
+#~ msgstr "Saiz fon berbalik"
+
#~ msgid "Floatland base height noise"
#~ msgstr "Hingar ketinggian asas tanah terapung"
@@ -7512,6 +7853,15 @@ msgstr "Had masa cURL"
#~ msgid "Font shadow alpha (opaqueness, between 0 and 255)."
#~ msgstr "Nilai alfa bayang fon (kelegapan, antara 0 dan 255)."
+#~ msgid "Font size of the fallback font in point (pt)."
+#~ msgstr "Saiz fon bagi fon berbalik dalam unit titik (pt)."
+
+#~ msgid "FreeType fonts"
+#~ msgstr "Fon FreeType"
+
+#~ msgid "Full screen BPP"
+#~ msgstr "BPP skrin penuh"
+
#~ msgid "Gamma"
#~ msgstr "Gama"
@@ -7521,9 +7871,15 @@ msgstr "Had masa cURL"
#~ msgid "Generate normalmaps"
#~ msgstr "Jana peta normal"
+#~ msgid "High-precision FPU"
+#~ msgstr "Unit titik terapung (FPU) ketepatan tinggi"
+
#~ msgid "IPv6 support."
#~ msgstr "Sokongan IPv6."
+#~ msgid "Install: file: \"$1\""
+#~ msgstr "Pasang: fail: \"$1\""
+
#~ msgid "Lava depth"
#~ msgstr "Kedalaman lava"
@@ -7539,6 +7895,11 @@ msgstr "Had masa cURL"
#~ msgid "Main menu style"
#~ msgstr "Gaya menu utama"
+#~ msgid "Makes DirectX work with LuaJIT. Disable if it causes troubles."
+#~ msgstr ""
+#~ "Membuatkan DirectX bekerja dengan LuaJIT. Lumpuhkan tetapan jika "
+#~ "bermasalah."
+
#~ msgid "Minimap in radar mode, Zoom x2"
#~ msgstr "Peta mini dalam mod radar, Zum 2x"
@@ -7551,6 +7912,9 @@ msgstr "Had masa cURL"
#~ msgid "Minimap in surface mode, Zoom x4"
#~ msgstr "Peta mini dalam mod permukaan, Zum 4x"
+#~ msgid "Name / Password"
+#~ msgstr "Nama / Kata laluan"
+
#~ msgid "Name/Password"
#~ msgstr "Nama/Kata laluan"
@@ -7569,6 +7933,12 @@ msgstr "Had masa cURL"
#~ msgid "Ok"
#~ msgstr "Ok"
+#~ msgid ""
+#~ "Opaqueness (alpha) of the shadow behind the fallback font, between 0 and "
+#~ "255."
+#~ msgstr ""
+#~ "Kelegapan (alfa) bayang belakang fon berbalik, nilai antara 0 dan 255."
+
#~ msgid "Overall bias of parallax occlusion effect, usually scale/2."
#~ msgstr ""
#~ "Pengaruh kesan oklusi paralaks pada keseluruhannya, kebiasaannya skala/2."
@@ -7606,15 +7976,42 @@ msgstr "Had masa cURL"
#~ msgid "Projecting dungeons"
#~ msgstr "Kurungan bawah tanah melunjur"
+#~ msgid "PvP enabled"
+#~ msgstr "Boleh Berlawan PvP"
+
#~ msgid "Reset singleplayer world"
#~ msgstr "Set semula dunia pemain perseorangan"
#~ msgid "Select Package File:"
#~ msgstr "Pilih Fail Pakej:"
+#~ msgid ""
+#~ "Set the shadow update time.\n"
+#~ "Lower value means shadows and map updates faster, but it consume more "
+#~ "resources.\n"
+#~ "Minimun value 0.001 seconds max value 0.2 seconds"
+#~ msgstr ""
+#~ "Menetapkan masa kemas kini bayang.\n"
+#~ "Nilai lebih rendah untuk kemas kini peta dan bayang lebih laju, tetapi "
+#~ "menggunakan lebih banyak sumber.\n"
+#~ "Nilai minimum 0.001 saat dan nilai maksimum 0.2 saat"
+
#~ msgid "Shadow limit"
#~ msgstr "Had bayang"
+#~ msgid ""
+#~ "Shadow offset (in pixels) of the fallback font. If 0, then shadow will "
+#~ "not be drawn."
+#~ msgstr ""
+#~ "Ofset bayang fon berbalik (dalam unit piksel). Jika 0, maka bayang tidak "
+#~ "akan dilukis."
+
+#~ msgid "Special"
+#~ msgstr "Istimewa"
+
+#~ msgid "Special key"
+#~ msgstr "Kekunci istimewa"
+
#~ msgid "Start Singleplayer"
#~ msgstr "Mula Main Seorang"
@@ -7627,6 +8024,9 @@ msgstr "Had masa cURL"
#~ msgid "This font will be used for certain languages."
#~ msgstr "Fon ini akan digunakan untuk sesetengah bahasa."
+#~ msgid "To enable shaders the OpenGL driver needs to be used."
+#~ msgstr "Untuk membolehkan pembayang, pemacu OpenGL mesti digunakan."
+
#~ msgid "Toggle Cinematic"
#~ msgstr "Togol Sinematik"
@@ -7650,6 +8050,15 @@ msgstr "Had masa cURL"
#~ msgid "Waving water"
#~ msgstr "Air bergelora"
+#~ msgid ""
+#~ "Whether FreeType fonts are used, requires FreeType support to be compiled "
+#~ "in.\n"
+#~ "If disabled, bitmap and XML vectors fonts are used instead."
+#~ msgstr ""
+#~ "Menetapkan sama ada fon FreeType digunakan, memerlukan sokongan Freetype\n"
+#~ "dikompil bersama. Jika dilumpuhkan, fon peta bit dan vektor XML akan "
+#~ "digunakan."
+
#~ msgid "Whether dungeons occasionally project from the terrain."
#~ msgstr ""
#~ "Sama ada kurungan bawah tanah kadang-kala terlunjur daripada rupa bumi."
@@ -7665,3 +8074,9 @@ msgstr "Had masa cURL"
#~ msgid "Yes"
#~ msgstr "Ya"
+
+#~ msgid "You died."
+#~ msgstr "Anda telah meninggal."
+
+#~ msgid "needs_fallback_font"
+#~ msgstr "no"
diff --git a/po/ms_Arab/minetest.po b/po/ms_Arab/minetest.po
index 42d758b7d..4924cf7b4 100644
--- a/po/ms_Arab/minetest.po
+++ b/po/ms_Arab/minetest.po
@@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: minetest\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-02-23 19:03+0100\n"
-"PO-Revision-Date: 2020-10-20 18:26+0000\n"
+"POT-Creation-Date: 2022-01-25 23:19+0100\n"
+"PO-Revision-Date: 2022-01-10 23:53+0000\n"
"Last-Translator: Yaya - Nurul Azeera Hidayah @ Muhammad Nur Hidayat "
"Yasuyoshi <translation@mnh48.moe>\n"
"Language-Team: Malay (Jawi) <https://hosted.weblate.org/projects/minetest/"
@@ -18,7 +18,48 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
-"X-Generator: Weblate 4.3.1\n"
+"X-Generator: Weblate 4.10.1\n"
+
+#: builtin/client/chatcommands.lua
+#, fuzzy
+msgid "Clear the out chat queue"
+msgstr "ساٴيز مکسيموم باريس ݢيلير کلوار سيمبڠ"
+
+#: builtin/client/chatcommands.lua
+msgid "Empty command."
+msgstr ""
+
+#: builtin/client/chatcommands.lua
+#, fuzzy
+msgid "Exit to main menu"
+msgstr "کلوار کمينو"
+
+#: builtin/client/chatcommands.lua
+#, fuzzy
+msgid "Invalid command: "
+msgstr "ارهن تمڤتن"
+
+#: builtin/client/chatcommands.lua
+msgid "Issued command: "
+msgstr ""
+
+#: builtin/client/chatcommands.lua
+#, fuzzy
+msgid "List online players"
+msgstr "ڤماٴين ڤرسأورڠن"
+
+#: builtin/client/chatcommands.lua
+#, fuzzy
+msgid "Online players: "
+msgstr "ڤماٴين ڤرسأورڠن"
+
+#: builtin/client/chatcommands.lua
+msgid "The out chat queue is now empty."
+msgstr ""
+
+#: builtin/client/chatcommands.lua
+msgid "This command is disabled by server."
+msgstr ""
#: builtin/client/death_formspec.lua src/client/game.cpp
msgid "Respawn"
@@ -28,11 +69,42 @@ msgstr "لاهير سمولا"
msgid "You died"
msgstr "اندا تله منيڠݢل"
+#: builtin/common/chatcommands.lua
+#, fuzzy
+msgid "Available commands:"
+msgstr "ارهن تمڤتن"
+
+#: builtin/common/chatcommands.lua
+#, fuzzy
+msgid "Available commands: "
+msgstr "ارهن تمڤتن"
+
+#: builtin/common/chatcommands.lua
+msgid "Command not available: "
+msgstr ""
+
+#: builtin/common/chatcommands.lua
+msgid "Get help for commands"
+msgstr ""
+
+#: builtin/common/chatcommands.lua
+msgid ""
+"Use '.help <cmd>' to get more information, or '.help all' to list everything."
+msgstr ""
+
+#: builtin/common/chatcommands.lua
+msgid "[all | <cmd>]"
+msgstr ""
+
#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp
msgid "OK"
msgstr "OK"
#: builtin/fstk/ui.lua
+msgid "<none available>"
+msgstr ""
+
+#: builtin/fstk/ui.lua
msgid "An error occurred in a Lua script:"
msgstr "برلاکوڽ رالت دالم سکريڤ Lua:"
@@ -238,6 +310,11 @@ msgid "Install missing dependencies"
msgstr "کبرݢنتوڠن ڤيليهن:"
#: builtin/mainmenu/dlg_contentstore.lua
+#, fuzzy
+msgid "Install: Unsupported file type or broken archive"
+msgstr "ڤاسڠ: جنيس ÙØ§ÙŠÙ„ \"$1\" تيدق دسوکوڠ اتاو ارکيب روسق"
+
+#: builtin/mainmenu/dlg_contentstore.lua
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Mods"
msgstr "مودس"
@@ -543,7 +620,7 @@ msgstr "< کمبالي کهلامن تتڤن"
msgid "Browse"
msgstr "لاير"
-#: builtin/mainmenu/dlg_settings_advanced.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_settings.lua
msgid "Disabled"
msgstr "دلومڤوهکن"
@@ -568,7 +645,8 @@ msgid "Offset"
msgstr "Ø§ÙˆÙØ³ÙŠØª"
#: builtin/mainmenu/dlg_settings_advanced.lua
-msgid "Persistance"
+#, fuzzy
+msgid "Persistence"
msgstr "ڤنروسن"
#: builtin/mainmenu/dlg_settings_advanced.lua
@@ -587,7 +665,7 @@ msgstr "ڤوليهکن تتڤن اصل"
msgid "Scale"
msgstr "سکال"
-#: builtin/mainmenu/dlg_settings_advanced.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_online.lua
msgid "Search"
msgstr "چاري"
@@ -679,14 +757,6 @@ msgid "Install Mod: Unable to find suitable folder name for modpack $1"
msgstr "ڤاسڠ مودس: تيدق جومڤ نام Ùولدر ÙŠÚ  سسواي اونتوق Ú¤ÙŠÚ© مودس $1"
#: builtin/mainmenu/pkgmgr.lua
-msgid "Install: Unsupported file type \"$1\" or broken archive"
-msgstr "ڤاسڠ: جنيس ÙØ§ÙŠÙ„ \"$1\" تيدق دسوکوڠ اتاو ارکيب روسق"
-
-#: builtin/mainmenu/pkgmgr.lua
-msgid "Install: file: \"$1\""
-msgstr "ڤاسڠ: ÙØ§ÙŠÙ„: \"$1\""
-
-#: builtin/mainmenu/pkgmgr.lua
msgid "Unable to find a valid mod or modpack"
msgstr "تيدق جومڤ مودس اتاو ڤيک مودس يڠ صح"
@@ -719,6 +789,42 @@ msgstr "سکريڤ ڤيهق کليئن دلومڤوهکن"
msgid "Try reenabling public serverlist and check your internet connection."
msgstr "چوب اکتيÙÚ©Ù† سمولا سناراي ڤلاين عوام ÙØ§Ù† ڤريقسا سمبوڠن اينترنيت اندا."
+#: builtin/mainmenu/tab_about.lua
+msgid "About"
+msgstr ""
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Active Contributors"
+msgstr "ڤڽومبڠ اکتيÙ"
+
+#: builtin/mainmenu/tab_about.lua
+#, fuzzy
+msgid "Active renderer:"
+msgstr "جارق ڤڠهنترن اوبجيک اکتيÙ"
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Core Developers"
+msgstr "ڤمباڠون تراس"
+
+#: builtin/mainmenu/tab_about.lua
+#, fuzzy
+msgid "Open User Data Directory"
+msgstr "ڤيليه ديريکتوري"
+
+#: builtin/mainmenu/tab_about.lua
+msgid ""
+"Opens the directory that contains user-provided worlds, games, mods,\n"
+"and texture packs in a file manager / explorer."
+msgstr ""
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Previous Contributors"
+msgstr "ڤڽومبڠ تردهولو"
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Previous Core Developers"
+msgstr "ڤمباڠون تراس تردهولو"
+
#: builtin/mainmenu/tab_content.lua
msgid "Browse online content"
msgstr "لايري کندوڠن دالم تالين"
@@ -759,37 +865,6 @@ msgstr "ڽهڤاسڠ ڤاکيج"
msgid "Use Texture Pack"
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
-#, fuzzy
-msgid "Open User Data Directory"
-msgstr "ڤيليه ديريکتوري"
-
-#: builtin/mainmenu/tab_credits.lua
-msgid ""
-"Opens the directory that contains user-provided worlds, games, mods,\n"
-"and texture packs in a file manager / explorer."
-msgstr ""
-
-#: builtin/mainmenu/tab_credits.lua
-msgid "Previous Contributors"
-msgstr "ڤڽومبڠ تردهولو"
-
-#: builtin/mainmenu/tab_credits.lua
-msgid "Previous Core Developers"
-msgstr "ڤمباڠون تراس تردهولو"
-
#: builtin/mainmenu/tab_local.lua
msgid "Announce Server"
msgstr "اومومکن ڤلاين"
@@ -818,7 +893,7 @@ msgstr "هوس ڤلاين"
msgid "Install games from ContentDB"
msgstr "ڤاسڠکن ڤرماٴينن درڤد ContentDB"
-#: builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
msgid "Name"
msgstr ""
@@ -830,7 +905,7 @@ msgstr "بوات بارو"
msgid "No world created or selected!"
msgstr "تيادا دنيا دچيڤت اتاو دڤيليه!"
-#: builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
#, fuzzy
msgid "Password"
msgstr "کات لالوان لام"
@@ -839,7 +914,7 @@ msgstr "کات لالوان لام"
msgid "Play Game"
msgstr "مولا ماٴين"
-#: builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
msgid "Port"
msgstr "ڤورت"
@@ -861,8 +936,13 @@ msgid "Start Game"
msgstr "مولاکن ڤرماٴينن"
#: builtin/mainmenu/tab_online.lua
-msgid "Address / Port"
-msgstr "علامت \\ ڤورت"
+#, fuzzy
+msgid "Address"
+msgstr "- علامت: "
+
+#: builtin/mainmenu/tab_online.lua src/client/keycode.cpp
+msgid "Clear"
+msgstr "ڤادم"
#: builtin/mainmenu/tab_online.lua
msgid "Connect"
@@ -872,8 +952,10 @@ msgstr "سمبوڠ"
msgid "Creative mode"
msgstr "مود کرياتيÙ"
+#. ~ PvP = Player versus Player
#: builtin/mainmenu/tab_online.lua
-msgid "Damage enabled"
+#, fuzzy
+msgid "Damage / PvP"
msgstr "بوليه چدرا"
#: builtin/mainmenu/tab_online.lua
@@ -881,25 +963,35 @@ msgid "Del. Favorite"
msgstr "ڤادم کݢمرن"
#: builtin/mainmenu/tab_online.lua
-msgid "Favorite"
+#, fuzzy
+msgid "Favorites"
msgstr "کݢمرن"
#: builtin/mainmenu/tab_online.lua
-msgid "Join Game"
-msgstr "سرتاٴي ڤرماٴينن"
+msgid "Incompatible Servers"
+msgstr ""
#: builtin/mainmenu/tab_online.lua
-msgid "Name / Password"
-msgstr "نام \\ کات لالوان"
+msgid "Join Game"
+msgstr "سرتاٴي ڤرماٴينن"
#: builtin/mainmenu/tab_online.lua
msgid "Ping"
msgstr "Ú¤ÙŠÚ "
-#. ~ PvP = Player versus Player
#: builtin/mainmenu/tab_online.lua
-msgid "PvP enabled"
-msgstr "بوليه برلاوان PvP"
+#, fuzzy
+msgid "Public Servers"
+msgstr "اومومکن ڤلاين"
+
+#: builtin/mainmenu/tab_online.lua
+msgid "Refresh"
+msgstr ""
+
+#: builtin/mainmenu/tab_online.lua
+#, fuzzy
+msgid "Server Description"
+msgstr "ڤريهل ڤلاين ڤرماٴينن"
#: builtin/mainmenu/tab_settings.lua
msgid "2x"
@@ -941,11 +1033,32 @@ msgstr "توکر ککونچي"
msgid "Connected Glass"
msgstr "کاچ برسمبوڠن"
+#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
+#, fuzzy
+msgid "Dynamic shadows"
+msgstr "بايڠ Ùون"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Dynamic shadows: "
+msgstr ""
+
#: builtin/mainmenu/tab_settings.lua
msgid "Fancy Leaves"
msgstr "داون براݢم"
#: builtin/mainmenu/tab_settings.lua
+msgid "High"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Low"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Medium"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
msgid "Mipmap"
msgstr "ڤتا ميڤ"
@@ -1018,10 +1131,6 @@ msgstr "ڤنچهاياٴن لمبوت"
msgid "Texturing:"
msgstr "جالينن:"
-#: builtin/mainmenu/tab_settings.lua
-msgid "To enable shaders the OpenGL driver needs to be used."
-msgstr "اونتوق ممبوليهکن ڤمبايڠ⹠ڤماچو OpenGL مستي دݢوناکن."
-
#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
msgid "Tone Mapping"
msgstr "ڤمتاٴن تونا"
@@ -1035,6 +1144,14 @@ msgid "Trilinear Filter"
msgstr "ڤناڤيسن تريلينيار"
#: builtin/mainmenu/tab_settings.lua
+msgid "Ultra High"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Very Low"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
msgid "Waving Leaves"
msgstr "داٴون برݢويڠ"
@@ -1046,7 +1163,7 @@ msgstr "چچاٴير برݢلورا"
msgid "Waving Plants"
msgstr "تومبوهن برݢويڠ"
-#: src/client/client.cpp
+#: src/client/client.cpp src/client/game.cpp
msgid "Connection timed out."
msgstr "سمبوڠن تامت تيمڤوه."
@@ -1075,7 +1192,8 @@ msgid "Connection error (timed out?)"
msgstr "رالت دالم ڤڽمبوڠن (تامت تيمڤوه؟)"
#: src/client/clientlauncher.cpp
-msgid "Could not find or load game \""
+#, fuzzy
+msgid "Could not find or load game: "
msgstr "تيدق جومڤ اتاو تيدق بوليه مواتکن ڤرماٴينن \""
#: src/client/clientlauncher.cpp
@@ -1106,18 +1224,6 @@ msgstr "ÙØ§ÙŠÙ„ کات لالوان ÙŠÚ  دسدياکن ݢاݢل دبوک: "
msgid "Provided world path doesn't exist: "
msgstr "لالوان دنيا دبري تيدق وجود: "
-#. ~ DO NOT TRANSLATE THIS LITERALLY!
-#. This is a special string. Put either "no" or "yes"
-#. into the translation field (literally).
-#. Choose "yes" if the language requires use of the fallback
-#. font, "no" otherwise.
-#. The fallback font is (normally) required for languages with
-#. non-Latin script, like Chinese.
-#. When in doubt, test your translation.
-#: src/client/fontengine.cpp
-msgid "needs_fallback_font"
-msgstr "yes"
-
#: src/client/game.cpp
msgid ""
"\n"
@@ -1131,14 +1237,6 @@ msgid "- Address: "
msgstr "- علامت: "
#: src/client/game.cpp
-msgid "- Creative Mode: "
-msgstr "- مود کرياتيÙ: "
-
-#: src/client/game.cpp
-msgid "- Damage: "
-msgstr "- بوليه چدرا "
-
-#: src/client/game.cpp
msgid "- Mode: "
msgstr "- مود: "
@@ -1160,6 +1258,16 @@ msgid "- Server Name: "
msgstr "- نام ڤلاين: "
#: src/client/game.cpp
+#, fuzzy
+msgid "A serialization error occurred:"
+msgstr "تله برلاکوڽ رالت:"
+
+#: src/client/game.cpp
+#, c-format
+msgid "Access denied. Reason: %s"
+msgstr ""
+
+#: src/client/game.cpp
msgid "Automatic forward disabled"
msgstr "ڤرݢرقن اٴوتوماتيک دلومڤوهکن"
@@ -1168,6 +1276,22 @@ msgid "Automatic forward enabled"
msgstr "ڤرݢرقن اٴوتوماتيک دبوليهکن"
#: src/client/game.cpp
+msgid "Block bounds hidden"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Block bounds shown for all blocks"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Block bounds shown for current block"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Block bounds shown for nearby blocks"
+msgstr ""
+
+#: src/client/game.cpp
msgid "Camera update disabled"
msgstr "کمس کيني کاميرا دلومڤوهکن"
@@ -1176,6 +1300,10 @@ msgid "Camera update enabled"
msgstr "کمس کيني کاميرا دبوليهکن"
#: src/client/game.cpp
+msgid "Can't show block bounds (need 'basic_debug' privilege)"
+msgstr ""
+
+#: src/client/game.cpp
msgid "Change Password"
msgstr "توکر کات لالوان"
@@ -1188,6 +1316,11 @@ msgid "Cinematic mode enabled"
msgstr "مود سينماتيک دبوليهکن"
#: src/client/game.cpp
+#, fuzzy
+msgid "Client disconnected"
+msgstr "مودس کليئن"
+
+#: src/client/game.cpp
msgid "Client side scripting is disabled"
msgstr "سکريڤ ڤيهق کليئن دلومڤوهکن"
@@ -1196,6 +1329,10 @@ msgid "Connecting to server..."
msgstr "سدڠ مڽمبوڠ کڤد ڤلاين..."
#: src/client/game.cpp
+msgid "Connection failed for unknown reason"
+msgstr ""
+
+#: src/client/game.cpp
msgid "Continue"
msgstr "تروسکن"
@@ -1233,6 +1370,11 @@ msgstr ""
"- %s: سيمبڠ\n"
#: src/client/game.cpp
+#, c-format
+msgid "Couldn't resolve address: %s"
+msgstr ""
+
+#: src/client/game.cpp
msgid "Creating client..."
msgstr "سدڠ منچيڤت کليئن..."
@@ -1361,6 +1503,11 @@ msgid "Minimap currently disabled by game or mod"
msgstr "ڤتا ميني دلومڤوهکن اوليه ڤرماٴينن اتاو مودس"
#: src/client/game.cpp
+#, fuzzy
+msgid "Multiplayer"
+msgstr "ڤماٴين ڤرسأورڠن"
+
+#: src/client/game.cpp
msgid "Noclip mode disabled"
msgstr "مود تمبوس بلوک دلومڤوهکن"
@@ -1434,6 +1581,21 @@ msgstr "بوڽي دڽهبيسوکن"
#: src/client/game.cpp
#, c-format
+msgid "The server is probably running a different version of %s."
+msgstr ""
+
+#: src/client/game.cpp
+#, c-format
+msgid "Unable to connect to %s because IPv6 is disabled"
+msgstr ""
+
+#: src/client/game.cpp
+#, c-format
+msgid "Unable to listen on %s because IPv6 is disabled"
+msgstr ""
+
+#: src/client/game.cpp
+#, c-format
msgid "Viewing range changed to %d"
msgstr "جارق ڤندڠ دتوکر ک%d"
@@ -1502,10 +1664,6 @@ msgid "Caps Lock"
msgstr "کونچي حرو٠بسر"
#: src/client/keycode.cpp
-msgid "Clear"
-msgstr "ڤادم"
-
-#: src/client/keycode.cpp
msgid "Control"
msgstr "Ctrl"
@@ -1771,6 +1929,15 @@ msgstr "ڤتا ميني دالم مود ڤرموکاٴن⹠زوم 1x"
msgid "Minimap in texture mode"
msgstr "سايز تيکستور مينيموم"
+#: src/gui/guiChatConsole.cpp
+#, fuzzy
+msgid "Failed to open webpage"
+msgstr "ݢاݢل مموات تورون $1"
+
+#: src/gui/guiChatConsole.cpp
+msgid "Opening webpage"
+msgstr ""
+
#: src/gui/guiConfirmRegistration.cpp src/gui/guiPasswordChange.cpp
msgid "Passwords do not match!"
msgstr "کات لالوان تيدق ڤادن!"
@@ -1798,7 +1965,8 @@ msgid "Proceed"
msgstr "تروسکن"
#: src/gui/guiKeyChangeMenu.cpp
-msgid "\"Special\" = climb down"
+#, fuzzy
+msgid "\"Aux1\" = climb down"
msgstr "\"ايستيميوا\" = ڤنجت تورون"
#: src/gui/guiKeyChangeMenu.cpp
@@ -1810,10 +1978,18 @@ msgid "Automatic jumping"
msgstr "لومڤت أوتوماتيک"
#: src/gui/guiKeyChangeMenu.cpp
+msgid "Aux1"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
msgid "Backward"
msgstr "کبلاکڠ"
#: src/gui/guiKeyChangeMenu.cpp
+msgid "Block bounds"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
msgid "Change camera"
msgstr "توکر کاميرا"
@@ -1903,10 +2079,6 @@ msgid "Sneak"
msgstr "سلينڤ"
#: src/gui/guiKeyChangeMenu.cpp
-msgid "Special"
-msgstr "ايستيميوا"
-
-#: src/gui/guiKeyChangeMenu.cpp
msgid "Toggle HUD"
msgstr "توݢول ڤاڤر ڤندو (HUD)"
@@ -1967,7 +2139,8 @@ msgid "Muted"
msgstr "دبيسوکن"
#: src/gui/guiVolumeChange.cpp
-msgid "Sound Volume: "
+#, fuzzy, c-format
+msgid "Sound Volume: %d%%"
msgstr "ککواتن بوڽي: "
#. ~ Imperative, as in "Enter/type in text".
@@ -1993,9 +2166,10 @@ msgstr ""
"سنتوهن ڤرتام."
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
-"(Android) Use virtual joystick to trigger \"aux\" button.\n"
-"If enabled, virtual joystick will also tap \"aux\" button when out of main "
+"(Android) Use virtual joystick to trigger \"Aux1\" button.\n"
+"If enabled, virtual joystick will also tap \"Aux1\" button when out of main "
"circle."
msgstr ""
"(Android) ݢوناکن کايو بديق ماي اونتوق ڤيچو بوتڠ \"aux\".\n"
@@ -2206,6 +2380,10 @@ msgstr ""
"سکرين 4K."
#: src/settings_translation_file.cpp
+msgid "Adjust the detected display density, used for scaling UI elements."
+msgstr ""
+
+#: src/settings_translation_file.cpp
#, c-format
msgid ""
"Adjusts the density of the floatland layer.\n"
@@ -2325,6 +2503,16 @@ msgid "Autoscaling mode"
msgstr "مود سکال أوتوماتيک"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Aux1 key"
+msgstr "ککونچي لومڤت"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Aux1 key for climbing/descending"
+msgstr "ککونچي اونتوق ممنجت\\منورون"
+
+#: src/settings_translation_file.cpp
msgid "Backward key"
msgstr "ککونچي کبلاکڠ"
@@ -2369,10 +2557,6 @@ msgid "Biome noise"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Bits per pixel (aka color depth) in fullscreen mode."
-msgstr "بيت ڤر ڤيکسيل (اتاو کدالمن ورنا) دالم مود سکرين ڤنوه."
-
-#: src/settings_translation_file.cpp
msgid "Block send optimize distance"
msgstr ""
@@ -2477,6 +2661,16 @@ msgstr ""
"دمان 0.0 اياله ارس چهاي مينيموم⹠1.0 اياله مکسيموم."
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Chat command time message threshold"
+msgstr "نيلاي امبڠ تندڠ ميسيج سيمبڠ"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Chat commands"
+msgstr "ارهن"
+
+#: src/settings_translation_file.cpp
msgid "Chat font size"
msgstr "سايز Ùون سيمبڠ"
@@ -2509,8 +2703,9 @@ msgid "Chat toggle key"
msgstr "ککونچي توݢول سيمبڠ"
#: src/settings_translation_file.cpp
-msgid "Chatcommands"
-msgstr ""
+#, fuzzy
+msgid "Chat weblinks"
+msgstr "سيمبڠ دتونجوقکن"
#: src/settings_translation_file.cpp
msgid "Chunk size"
@@ -2529,6 +2724,12 @@ msgid "Clean transparent textures"
msgstr "برسيهکن تيکستور لوت سينر"
#: src/settings_translation_file.cpp
+msgid ""
+"Clickable weblinks (middle-click or Ctrl+left-click) enabled in chat console "
+"output."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Client"
msgstr "کليئن"
@@ -2573,6 +2774,11 @@ msgid "Colored fog"
msgstr "کابوت برورنا"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Colored shadows"
+msgstr "کابوت برورنا"
+
+#: src/settings_translation_file.cpp
msgid ""
"Comma-separated list of flags to hide in the content repository.\n"
"\"nonfree\" can be used to hide packages which do not qualify as 'free "
@@ -2600,6 +2806,22 @@ msgid "Command key"
msgstr "ککونچي ارهن"
#: src/settings_translation_file.cpp
+msgid ""
+"Compression level to use when saving mapblocks to disk.\n"
+"-1 - use default compression level\n"
+"0 - least compression, fastest\n"
+"9 - best compression, slowest"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Compression level to use when sending mapblocks to the client.\n"
+"-1 - use default compression level\n"
+"0 - least compression, fastest\n"
+"9 - best compression, slowest"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Connect glass"
msgstr "سمبوڠ کاچ"
@@ -2697,7 +2919,7 @@ msgstr "نيلاي Ø§Ù„ÙØ§ ررمبوت سيلڠ"
#, fuzzy
msgid ""
"Crosshair alpha (opaqueness, between 0 and 255).\n"
-"Also controls the object crosshair color"
+"This also applies to the object crosshair."
msgstr "نيلاي Ø§Ù„ÙØ§ ررمبوت سيلڠ (کلݢڤن⹠انتارا 0 دان 255)."
#: src/settings_translation_file.cpp
@@ -2776,8 +2998,9 @@ msgstr "ساٴيز تيندنن لالاي"
#: src/settings_translation_file.cpp
msgid ""
-"Default timeout for cURL, stated in milliseconds.\n"
-"Only has an effect if compiled with cURL."
+"Define shadow filtering quality.\n"
+"This simulates the soft shadows effect by applying a PCF or Poisson disk\n"
+"but also uses more resources."
msgstr ""
#: src/settings_translation_file.cpp
@@ -2903,6 +3126,10 @@ msgid "Disallow empty passwords"
msgstr "منولق کات لالوان کوسوڠ"
#: src/settings_translation_file.cpp
+msgid "Display Density Scaling Factor"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Domain name of server, to be displayed in the serverlist."
msgstr "نام دوماٴين ڤلاين ڤرماٴينن⹠اونتوق دڤاڤرکن دالم سناراي ڤلاين ڤرماٴينن."
@@ -2949,6 +3176,19 @@ msgstr ""
"سوکوڠن اين دالم اوجيکاجي دان API بوليه براوبه."
#: src/settings_translation_file.cpp
+msgid ""
+"Enable Poisson disk filtering.\n"
+"On true uses Poisson disk to make \"soft shadows\". Otherwise uses PCF "
+"filtering."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable colored shadows.\n"
+"On true translucent nodes cast colored shadows. This is expensive."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Enable console window"
msgstr "ممبوليهکن تتيڠکڤ کونسول"
@@ -3086,6 +3326,12 @@ msgstr ""
"ڤڠوبهن تتڤن اين ممرلوکن ڤرمولاٴن سمولا."
#: src/settings_translation_file.cpp
+msgid ""
+"Enables tradeoffs that reduce CPU load or increase rendering performance\n"
+"at the expense of minor visual glitches that do not impact game playability."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Engine profiling data print interval"
msgstr ""
@@ -3125,18 +3371,6 @@ msgid "Fallback font path"
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 "ککونچي ڤرݢرقن ڤنتس"
@@ -3153,8 +3387,9 @@ msgid "Fast movement"
msgstr "ڤرݢرقن ڤنتس"
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
-"Fast movement (via the \"special\" key).\n"
+"Fast movement (via the \"Aux1\" key).\n"
"This requires the \"fast\" privilege on the server."
msgstr ""
"برݢرق ڤنتس (دڠن ککونچي \"ايستيميوا\").\n"
@@ -3190,11 +3425,12 @@ msgid "Filmic tone mapping"
msgstr "ڤمتاٴن تونا سينماتيک"
#: src/settings_translation_file.cpp
+#, fuzzy
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."
+"which PNG optimizers usually discard, often resulting in dark or\n"
+"light edges to transparent textures. Apply a filter to clean that up\n"
+"at texture load time. This is automatically enabled if mipmapping is enabled."
msgstr ""
"تيکستور ÙŠÚ  دتاڤيس بوليه سباتيکن نيلاي RGB دڠن جيرن ÙŠÚ  لوت سينر سڤنوهڽâ¹\n"
"يڠ مان ڤڠاوڤتيموم PNG سريڠ ابايکن⹠کادڠکال مڽببکن سيسي ݢلڤ اتاو تراڠ ڤد\n"
@@ -3290,15 +3526,17 @@ msgid "Font size"
msgstr "سايز Ùون"
#: src/settings_translation_file.cpp
-msgid "Font size of the default font in point (pt)."
-msgstr "سايز Ùون باݢي Ùون لالاي دالم اونيت تيتيق (pt)."
+msgid "Font size divisible by"
+msgstr ""
#: src/settings_translation_file.cpp
-msgid "Font size of the fallback font in point (pt)."
-msgstr "سايز Ùون باݢي Ùون برباليق دالم اونيت تيتيق (pt)."
+#, fuzzy
+msgid "Font size of the default font where 1 unit = 1 pixel at 96 DPI"
+msgstr "سايز Ùون باݢي Ùون لالاي دالم اونيت تيتيق (pt)."
#: src/settings_translation_file.cpp
-msgid "Font size of the monospace font in point (pt)."
+#, fuzzy
+msgid "Font size of the monospace font where 1 unit = 1 pixel at 96 DPI"
msgstr "سايز Ùون باݢي Ùون monospace دالم اونيت تيتيق (pt)."
#: src/settings_translation_file.cpp
@@ -3311,6 +3549,17 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"For pixel-style fonts that do not scale well, this ensures that font sizes "
+"used\n"
+"with this font will always be divisible by this value, in pixels. For "
+"instance,\n"
+"a pixel font 16 pixels tall should have this set to 16, so it will only ever "
+"be\n"
+"sized 16, 32, 48, etc., so a mod requesting a size of 25 will get 32."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Format of player chat messages. The following strings are valid "
"placeholders:\n"
"@name, @message, @timestamp (optional)"
@@ -3372,10 +3621,6 @@ msgid "Fraction of the visible distance at which fog starts to be rendered"
msgstr "بهاݢين درڤد جارق بوليه ليهت دمان کابوت مولا دجان"
#: src/settings_translation_file.cpp
-msgid "FreeType fonts"
-msgstr "Ùون FreeType"
-
-#: src/settings_translation_file.cpp
msgid ""
"From how far blocks are generated for clients, stated in mapblocks (16 "
"nodes)."
@@ -3406,10 +3651,6 @@ msgid "Full screen"
msgstr "سکرين ڤنوه"
#: src/settings_translation_file.cpp
-msgid "Full screen BPP"
-msgstr "BPP سکرين ڤنوه"
-
-#: src/settings_translation_file.cpp
msgid "Fullscreen mode."
msgstr "مود سکرين ڤنوه."
@@ -3433,7 +3674,7 @@ msgstr ""
msgid ""
"Global map generation attributes.\n"
"In Mapgen v6 the 'decorations' flag controls all decorations except trees\n"
-"and junglegrass, in all other mapgens this flag controls all decorations."
+"and jungle grass, in all other mapgens this flag controls all decorations."
msgstr ""
#: src/settings_translation_file.cpp
@@ -3506,7 +3747,9 @@ msgid "Heat noise"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Height component of the initial window size."
+#, fuzzy
+msgid ""
+"Height component of the initial window size. Ignored in fullscreen mode."
msgstr "کومڤونن تيڠݢي سايز تتيڠکڤ اول."
#: src/settings_translation_file.cpp
@@ -3518,10 +3761,6 @@ msgid "Height select noise"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "High-precision FPU"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Hill steepness"
msgstr ""
@@ -3717,7 +3956,7 @@ msgid ""
"If negative, liquid waves will move backwards.\n"
"Requires waving liquids to be enabled."
msgstr ""
-"سچڤت مان ݢلورا چچاٴير اکن برݢرق. نيلاي تيڠݢي = لبيه لاجو.\n"
+"سچڤت مان ݢلورا چچاٴير اکن برݢرق. نيلاي تيڠݢي = لبيه چڤت.\n"
"جيک نيلاي نيݢاتيÙ⹠ݢلورا چچاٴير اکن برݢرق کبلاکڠ.\n"
"ممرلوکن تتڤن چچاٴير برݢلورا دبوليهکن."
@@ -3760,9 +3999,9 @@ msgstr ""
"حدکن اي دڠن تيدورکنڽ سوڤايا تيدق بازيرکن کواسا CPU دڠن سيا٢."
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
-"If disabled, \"special\" key is used to fly fast if both fly and fast mode "
-"are\n"
+"If disabled, \"Aux1\" key is used to fly fast if both fly and fast mode are\n"
"enabled."
msgstr ""
"جيک دلومڤوهکن⹠ککونچي \"ايستيميوا\" اکن دݢوناکن اونتوق تربڠ لاجو\n"
@@ -3787,9 +4026,10 @@ msgstr ""
"اين ممرلوکن کأيستيميواٴن \"تمبوس بلوک\" دالم ڤلاين ترسبوت."
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
-"If enabled, \"special\" key instead of \"sneak\" key is used for climbing "
-"down and\n"
+"If enabled, \"Aux1\" key instead of \"Sneak\" key is used for climbing down "
+"and\n"
"descending."
msgstr ""
"جيک دبوليهکن⹠ککونچي \"ايستيميوا\" اکن دݢوناکن اونتوق ڤنجت کباوه دان\n"
@@ -3843,6 +4083,12 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"If the execution of a chat command takes longer than this specified time in\n"
+"seconds, add the time information to the chat command message"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"If the file size of debug.txt exceeds the number of megabytes specified in\n"
"this setting when it is opened, the file is moved to debug.txt.1,\n"
"deleting an older debug.txt.1 if it exists.\n"
@@ -3892,7 +4138,7 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Instrument chatcommands on registration."
+msgid "Instrument chat commands on registration."
msgstr ""
#: src/settings_translation_file.cpp
@@ -3978,7 +4224,7 @@ msgstr "سلڠ ماس ڤڠاولڠن بوتڠ کايو بديق"
#: src/settings_translation_file.cpp
#, fuzzy
-msgid "Joystick deadzone"
+msgid "Joystick dead zone"
msgstr "جنيس کايو بديق"
#: src/settings_translation_file.cpp
@@ -4961,10 +5207,6 @@ msgstr ""
"بواتکن ورنا کابوت دان لاڠيت برݢنتوڠ کڤد وقتو (ÙØ¬Ø±\\ماتاهاري) دان اره ڤندڠ."
#: src/settings_translation_file.cpp
-msgid "Makes DirectX work with LuaJIT. Disable if it causes troubles."
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Makes all liquids opaque"
msgstr "بواتکن سموا چچاٴير منجادي لݢڤ"
@@ -5036,6 +5278,10 @@ msgid "Map save interval"
msgstr "سلڠ ماس ڤڽيمڤنن ڤتا"
#: src/settings_translation_file.cpp
+msgid "Map shadows update frames"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Mapblock limit"
msgstr "حد بلوک ڤتا"
@@ -5146,6 +5392,10 @@ msgid "Maximum FPS when the window is not focused, or when the game is paused."
msgstr "بيڠکاي ڤر ساٴت (FPS) مکسيما اڤابيلا ڤرماٴينن دجيداکن."
#: src/settings_translation_file.cpp
+msgid "Maximum distance to render shadows."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Maximum forceloaded blocks"
msgstr "جومله مکسيموم بلوک يڠ دڤقسا موات"
@@ -5264,7 +5514,15 @@ msgstr ""
"حد."
#: src/settings_translation_file.cpp
-msgid "Maximum time in ms a file download (e.g. a mod download) may take."
+msgid ""
+"Maximum time a file download (e.g. a mod download) may take, stated in "
+"milliseconds."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum time an interactive request (e.g. server list fetch) may take, "
+"stated in milliseconds."
msgstr ""
#: src/settings_translation_file.cpp
@@ -5328,7 +5586,8 @@ msgid "Mod channels"
msgstr "سالوران مودس"
#: src/settings_translation_file.cpp
-msgid "Modifies the size of the hudbar elements."
+#, fuzzy
+msgid "Modifies the size of the HUD elements."
msgstr "مڠاوبه سايز ايليمن ڤالڠ ڤاڤر ڤندو (hudbar)."
#: src/settings_translation_file.cpp
@@ -5340,6 +5599,11 @@ msgid "Monospace font size"
msgstr "سايز Ùون monospace"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Monospace font size divisible by"
+msgstr "سايز Ùون monospace"
+
+#: src/settings_translation_file.cpp
msgid "Mountain height noise"
msgstr ""
@@ -5466,7 +5730,7 @@ 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"
+"This is a trade-off between SQLite transaction overhead and\n"
"memory consumption (4096=100MB, as a rule of thumb)."
msgstr ""
@@ -5485,11 +5749,6 @@ msgstr "Ú©Ù„Ý¢Ú¤Ù† (Ø§Ù„ÙØ§) بايڠ بلاکڠ Ùون لالاي⹠نيلاÙ
#: src/settings_translation_file.cpp
msgid ""
-"Opaqueness (alpha) of the shadow behind the fallback font, between 0 and 255."
-msgstr "Ú©Ù„Ý¢Ú¤Ù† (Ø§Ù„ÙØ§) بايڠ بلاکڠ Ùون برباليق⹠نيلاي انتارا 0 دان 225."
-
-#: src/settings_translation_file.cpp
-msgid ""
"Open the pause menu when the window's focus is lost. Does not pause if a "
"formspec is\n"
"open."
@@ -5498,10 +5757,13 @@ msgstr ""
"تيدق جيدا جيک Ùورمسڤيک دبوک."
#: src/settings_translation_file.cpp
+msgid "Optional override for chat weblink color."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
-"Path of the fallback font.\n"
-"If “freetype†setting is enabled: Must be a TrueType font.\n"
-"If “freetype†setting is disabled: Must be a bitmap or XML vectors font.\n"
+"Path of the fallback font. Must be a TrueType font.\n"
"This font will be used for certain languages or if the default font is "
"unavailable."
msgstr ""
@@ -5531,10 +5793,9 @@ msgid "Path to texture directory. All textures are first searched from here."
msgstr "لالوان کديريکتوري تيکستور. سموا تيکستور دچاري دري سيني داهولو."
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
-"Path to the default font.\n"
-"If “freetype†setting is enabled: Must be a TrueType font.\n"
-"If “freetype†setting is disabled: Must be a bitmap or XML vectors font.\n"
+"Path to the default font. Must be a TrueType font.\n"
"The fallback font will be used if the font cannot be loaded."
msgstr ""
"لالوان Ùون لالاي.\n"
@@ -5543,10 +5804,9 @@ msgstr ""
"Ùون برباليق اکن دݢوناکن سکيراڽ Ùون اين تيدق داڤت دمواتکن."
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
-"Path to the monospace font.\n"
-"If “freetype†setting is enabled: Must be a TrueType font.\n"
-"If “freetype†setting is disabled: Must be a bitmap or XML vectors font.\n"
+"Path to the monospace font. Must be a TrueType font.\n"
"This font is used for e.g. the console and profiler screen."
msgstr ""
"لالوان Ùون monospace.\n"
@@ -5609,6 +5869,11 @@ msgid "Player versus player"
msgstr "ڤماٴين لاون ڤماٴين"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Poisson filtering"
+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."
@@ -5657,11 +5922,12 @@ msgid "Prometheus listener address"
msgstr "علامت ڤندڠر Prometheus"
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
"Prometheus listener address.\n"
-"If minetest is compiled with ENABLE_PROMETHEUS option enabled,\n"
+"If Minetest is compiled with ENABLE_PROMETHEUS option enabled,\n"
"enable metrics listener for Prometheus on that address.\n"
-"Metrics can be fetch on http://127.0.0.1:30000/metrics"
+"Metrics can be fetched on http://127.0.0.1:30000/metrics"
msgstr ""
"علامت ڤندڠر Prometheus.\n"
"جک minetest دکومڤيل دڠن تتڤن ENABLE_PROMETHEUS دبوليهکن,\n"
@@ -5966,6 +6232,35 @@ msgstr "تتڤکن ڤنجڠ اکسارا مکسيموم ميسيج سيمبڠ د
#: src/settings_translation_file.cpp
msgid ""
+"Set the shadow strength.\n"
+"Lower value means lighter shadows, higher value means darker shadows."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set the soft shadow radius size.\n"
+"Lower values mean sharper shadows, bigger values mean softer shadows.\n"
+"Minimum value: 1.0; maximum value: 10.0"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set the tilt of Sun/Moon orbit in degrees.\n"
+"Value of 0 means no tilt / vertical orbit.\n"
+"Minimum value: 0.0; maximum value: 60.0"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid ""
+"Set to true to enable Shadow Mapping.\n"
+"Requires shaders to be enabled."
+msgstr ""
+"تتڤکن کڤد \"true\" اونتوق ممبوليهکن داٴون برݢويڠ.\n"
+"ممرلوکن ڤمبايڠ اونتوق دبوليهکن."
+
+#: src/settings_translation_file.cpp
+msgid ""
"Set to true to enable waving leaves.\n"
"Requires shaders to be enabled."
msgstr ""
@@ -5989,6 +6284,13 @@ msgstr ""
"ممرلوکن ڤمبايڠ اونتوق دبوليهکن."
#: src/settings_translation_file.cpp
+msgid ""
+"Sets shadow texture quality to 32 bits.\n"
+"On false, 16 bits texture will be used.\n"
+"This can cause much more artifacts in the shadow."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Shader path"
msgstr "لالوان ڤمبايڠ"
@@ -6004,6 +6306,24 @@ msgstr ""
"نامون اي هاڽ برÙوڠسي دڠن ڤمبهاݢين بلاکڠ Ûيديو OpenGL."
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Shadow filter quality"
+msgstr "کواليتي تڠکڤ لاير"
+
+#: src/settings_translation_file.cpp
+msgid "Shadow map max distance in nodes to render shadows"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Shadow map texture in 32 bits"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Shadow map texture size"
+msgstr "سايز تيکستور مينيموم"
+
+#: src/settings_translation_file.cpp
msgid ""
"Shadow offset (in pixels) of the default font. If 0, then shadow will not be "
"drawn."
@@ -6011,11 +6331,8 @@ msgstr ""
"Ø§ÙˆÙØ³ÙŠØª بايڠ Ùون لالاي (دالم اونيت ڤيکسل). جيک 0⹠ماک بايڠ تيدق اکن دلوکيس."
#: src/settings_translation_file.cpp
-msgid ""
-"Shadow offset (in pixels) of the fallback font. If 0, then shadow will not "
-"be drawn."
+msgid "Shadow strength"
msgstr ""
-"Ø§ÙˆÙØ³ÙŠØª بايڠ Ùون برباليق (دالم اونيت ڤيکسل). جيک 0⹠ماک بايڠ تيدق اکن دلوکيس."
#: src/settings_translation_file.cpp
msgid "Shape of the minimap. Enabled = round, disabled = square."
@@ -6037,7 +6354,7 @@ msgstr ""
#: src/settings_translation_file.cpp
#, fuzzy
-msgid "Show nametag backgrounds by default"
+msgid "Show name tag backgrounds by default"
msgstr "Ùون تبل سچارا لالايڽ"
#: src/settings_translation_file.cpp
@@ -6065,6 +6382,10 @@ msgstr ""
"درڤد جالور اوتام⹠لالو مڠورڠکن کترن."
#: src/settings_translation_file.cpp
+msgid "Sky Body Orbit Tilt"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Slice w"
msgstr ""
@@ -6123,16 +6444,13 @@ msgid "Sneaking speed, in nodes per second."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Sound"
-msgstr "بوڽي"
-
-#: src/settings_translation_file.cpp
-msgid "Special key"
-msgstr "ککونچي ايستيميوا"
+#, fuzzy
+msgid "Soft shadow radius"
+msgstr "نيلاي Ø§Ù„ÙØ§ بايڠ Ùون"
#: src/settings_translation_file.cpp
-msgid "Special key for climbing/descending"
-msgstr "ککونچي اونتوق ممنجت\\منورون"
+msgid "Sound"
+msgstr "بوڽي"
#: src/settings_translation_file.cpp
msgid ""
@@ -6158,6 +6476,14 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Spread a complete update of shadow map over given amount of frames.\n"
+"Higher values might make shadows laggy, lower values\n"
+"will consume more resources.\n"
+"Minimum value: 1; maximum value: 16"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Spread of light curve boost range.\n"
"Controls the width of the range to be boosted.\n"
"Standard deviation of the light curve boost Gaussian."
@@ -6270,6 +6596,13 @@ msgstr "لالوان تيکستور"
#: src/settings_translation_file.cpp
msgid ""
+"Texture size to render the shadow map on.\n"
+"This must be a power of two.\n"
+"Bigger numbers create better shadows but it is also more expensive."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Textures on a node may be aligned either to the node or to the world.\n"
"The former mode suits better things like machines, furniture, etc., while\n"
"the latter makes stairs and microblocks fit surroundings better.\n"
@@ -6290,7 +6623,7 @@ msgstr ""
#: src/settings_translation_file.cpp
#, fuzzy
-msgid "The deadzone of the joystick"
+msgid "The dead zone of the joystick"
msgstr "ڤڠنل ڤستي کايو بديق يڠ دݢوناکن"
#: src/settings_translation_file.cpp
@@ -6363,7 +6696,7 @@ msgstr ""
#: src/settings_translation_file.cpp
#, fuzzy
msgid ""
-"The rendering back-end for Irrlicht.\n"
+"The rendering back-end.\n"
"A restart is required after changing this.\n"
"Note: On Android, stick with OGLES1 if unsure! App may fail to start "
"otherwise.\n"
@@ -6377,9 +6710,10 @@ msgstr ""
"دان اي اياله ساتو-ساتوڽ ڤماچو يڠ ممڤوڽاٴي سوکوڠن ڤمبايڠ کتيک اين."
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
"The sensitivity of the joystick axes for moving the\n"
-"ingame view frustum around."
+"in-game view frustum around."
msgstr ""
"کڤيکاٴن ڤکسي کايو بديق اونتوق مڠݢرقکن\n"
"ÙØ±ÙˆØ³ØªÙˆÙ… ڤڠليهتن دالم ڤرماٴينن."
@@ -6490,6 +6824,10 @@ msgid "Touch screen threshold"
msgstr "نيلاي امبڠ سکرين سنتوه"
#: src/settings_translation_file.cpp
+msgid "Tradeoffs for performance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Trees noise"
msgstr ""
@@ -6565,8 +6903,9 @@ msgid "Use bilinear filtering when scaling textures."
msgstr "ݢوناکن ڤناڤيسن بيلينيار اڤابيلا مڽسوايکن تيکستور."
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
-"Use mip mapping to scale textures. May slightly increase performance,\n"
+"Use mipmapping to scale textures. May slightly increase performance,\n"
"especially when using a high resolution texture pack.\n"
"Gamma correct downscaling is not supported."
msgstr ""
@@ -6682,7 +7021,8 @@ msgid "Viewing range"
msgstr "جارق ڤندڠ"
#: src/settings_translation_file.cpp
-msgid "Virtual joystick triggers aux button"
+#, fuzzy
+msgid "Virtual joystick triggers Aux1 button"
msgstr "کايو بديق ماي مميچو بوتڠ aux"
#: src/settings_translation_file.cpp
@@ -6755,6 +7095,11 @@ msgid "Waving plants"
msgstr "تومبوهن برݢويڠ"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Weblink color"
+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"
@@ -6778,14 +7123,14 @@ msgstr ""
"Ù…Ú½ÙˆÚ©ÙˆÚ  دڠن سمڤورنا Ùوڠسي موات تورون سمولا تيکستور درڤد ڤرکاکسن."
#: src/settings_translation_file.cpp
+#, fuzzy
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.\n"
+"memory. Powers of 2 are recommended. This setting is ONLY applied if\n"
+"bilinear/trilinear/anisotropic filtering is enabled.\n"
"This is also used as the base node texture size for world-aligned\n"
"texture autoscaling."
msgstr ""
@@ -6801,16 +7146,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Whether FreeType fonts are used, requires FreeType support to be compiled "
-"in.\n"
-"If disabled, bitmap and XML vectors fonts are used instead."
-msgstr ""
-"منتڤکن سام اد Ùون FreeType دݢوناکن⹠ممرلوکن سوکوڠن Freetype\n"
-"دکومڤيل برسام. جيک دلومڤوهکن⹠Ùون ڤتا بيت دان Ûيکتور XML اکن دݢوناکن."
-
-#: src/settings_translation_file.cpp
-msgid ""
-"Whether nametag backgrounds should be shown by default.\n"
+"Whether name tag backgrounds should be shown by default.\n"
"Mods may still set a background."
msgstr ""
@@ -6863,7 +7199,8 @@ msgstr ""
"تتڤکن سام اد هندق منونجوقکن معلومت ڽهڤڤيجت (کسنڽ سام سڤرتي منکن بوتڠ F5)."
#: src/settings_translation_file.cpp
-msgid "Width component of the initial window size."
+#, fuzzy
+msgid "Width component of the initial window size. Ignored in fullscreen mode."
msgstr "کومڤونن ليبر سايز تتيڠکڤ اول."
#: src/settings_translation_file.cpp
@@ -6958,34 +7295,22 @@ msgid "Y-level of seabed."
msgstr ""
#: src/settings_translation_file.cpp
-msgid ""
-"ZLib compression level to use when saving mapblocks to disk.\n"
-"-1 - Zlib's default compression level\n"
-"0 - no compresson, fastest\n"
-"9 - best compression, slowest\n"
-"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)"
-msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid ""
-"ZLib compression level to use when sending mapblocks to the client.\n"
-"-1 - Zlib's default compression level\n"
-"0 - no compresson, fastest\n"
-"9 - best compression, slowest\n"
-"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)"
+msgid "cURL file download timeout"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "cURL file download timeout"
+msgid "cURL interactive timeout"
msgstr ""
#: src/settings_translation_file.cpp
msgid "cURL parallel limit"
msgstr ""
-#: src/settings_translation_file.cpp
-msgid "cURL timeout"
-msgstr ""
+#~ msgid "- Creative Mode: "
+#~ msgstr "- مود کرياتيÙ: "
+
+#~ msgid "- Damage: "
+#~ msgstr "- بوليه چدرا "
#~ msgid ""
#~ "0 = parallax occlusion with slope information (faster).\n"
@@ -6994,9 +7319,15 @@ msgstr ""
#~ "0 = اوکلوسي ڤارالکس دڠن معلومت چرون (لبيه چڤت).\n"
#~ "1 = ڤمتاٴن بنتوق موک بومي (لبيه لمبت⹠لبيه تڤت)."
+#~ msgid "Address / Port"
+#~ msgstr "علامت \\ ڤورت"
+
#~ msgid "Are you sure to reset your singleplayer world?"
#~ msgstr "اداکه اندا ماهو سيت سمولا دنيا ڤماٴين ڤرساورڠن؟"
+#~ msgid "Bits per pixel (aka color depth) in fullscreen mode."
+#~ msgstr "بيت ڤر ڤيکسيل (اتاو کدالمن ورنا) دالم مود سکرين ڤنوه."
+
#~ msgid "Bump Mapping"
#~ msgstr "ڤمتاٴن برتومڤوق"
@@ -7009,9 +7340,15 @@ msgstr ""
#~ msgid "Configure"
#~ msgstr "کونÙيݢوراسي"
+#~ msgid "Credits"
+#~ msgstr "ڤڠهرݢاٴن"
+
#~ msgid "Crosshair color (R,G,B)."
#~ msgstr "ورنا باݢي کورسور ررمبوت سيلڠ (R,G,B)."
+#~ msgid "Damage enabled"
+#~ msgstr "بوليه چدرا"
+
#~ msgid ""
#~ "Defines sampling step of texture.\n"
#~ "A higher value results in smoother normal maps."
@@ -7053,12 +7390,33 @@ msgstr ""
#~ msgid "FPS in pause menu"
#~ msgstr "FPS دمينو جيدا"
+#~ msgid "Fallback font shadow"
+#~ msgstr "بايڠ Ùون برباليق"
+
+#~ msgid "Fallback font shadow alpha"
+#~ msgstr "نيلاي Ø§Ù„ÙØ§ بايڠ Ùون برباليق"
+
+#~ msgid "Fallback font size"
+#~ msgstr "سايز Ùون برباليق"
+
+#~ msgid "Font size of the fallback font in point (pt)."
+#~ msgstr "سايز Ùون باݢي Ùون برباليق دالم اونيت تيتيق (pt)."
+
+#~ msgid "FreeType fonts"
+#~ msgstr "Ùون FreeType"
+
+#~ msgid "Full screen BPP"
+#~ msgstr "BPP سکرين ڤنوه"
+
#~ msgid "Generate Normal Maps"
#~ msgstr "جان ڤتا نورمل"
#~ msgid "Generate normalmaps"
#~ msgstr "جان ڤتا نورمل"
+#~ msgid "Install: file: \"$1\""
+#~ msgstr "ڤاسڠ: ÙØ§ÙŠÙ„: \"$1\""
+
#~ msgid "Main"
#~ msgstr "اوتام"
@@ -7074,6 +7432,9 @@ msgstr ""
#~ msgid "Minimap in surface mode, Zoom x4"
#~ msgstr "ڤتا ميني دالم مود ڤرموکاٴن⹠زوم 4x"
+#~ msgid "Name / Password"
+#~ msgstr "نام \\ کات لالوان"
+
#~ msgid "Name/Password"
#~ msgstr "نام\\کات لالوان"
@@ -7089,6 +7450,11 @@ msgstr ""
#~ msgid "Number of parallax occlusion iterations."
#~ msgstr "جومله للرن اوکلوسي ڤارالکس."
+#~ msgid ""
+#~ "Opaqueness (alpha) of the shadow behind the fallback font, between 0 and "
+#~ "255."
+#~ msgstr "Ú©Ù„Ý¢Ú¤Ù† (Ø§Ù„ÙØ§) بايڠ بلاکڠ Ùون برباليق⹠نيلاي انتارا 0 دان 225."
+
#~ msgid "Overall bias of parallax occlusion effect, usually scale/2."
#~ msgstr "ڤڠاروه کسن اوکلوسي ڤارالکس ڤد کسلوروهنڽ⹠کبياساٴنڽ سکال\\2."
@@ -7113,17 +7479,51 @@ msgstr ""
#~ msgid "Parallax occlusion scale"
#~ msgstr "سکال اوکلوسي ڤارالکس"
+#~ msgid "PvP enabled"
+#~ msgstr "بوليه برلاوان PvP"
+
#~ msgid "Reset singleplayer world"
#~ msgstr "سيت سمولا دنيا ڤماٴين ڤرساورڠن"
+#~ msgid ""
+#~ "Shadow offset (in pixels) of the fallback font. If 0, then shadow will "
+#~ "not be drawn."
+#~ msgstr ""
+#~ "Ø§ÙˆÙØ³ÙŠØª بايڠ Ùون برباليق (دالم اونيت ڤيکسل). جيک 0⹠ماک بايڠ تيدق اکن "
+#~ "دلوکيس."
+
+#~ msgid "Special"
+#~ msgstr "ايستيميوا"
+
+#~ msgid "Special key"
+#~ msgstr "ککونچي ايستيميوا"
+
#~ msgid "Start Singleplayer"
#~ msgstr "مولا ماٴين ساورڠ"
#~ msgid "Strength of generated normalmaps."
#~ msgstr "ککواتن ڤتا نورمل يڠ دجان."
+#~ msgid "To enable shaders the OpenGL driver needs to be used."
+#~ msgstr "اونتوق ممبوليهکن ڤمبايڠ⹠ڤماچو OpenGL مستي دݢوناکن."
+
#~ msgid "View"
#~ msgstr "ليهت"
+#~ msgid ""
+#~ "Whether FreeType fonts are used, requires FreeType support to be compiled "
+#~ "in.\n"
+#~ "If disabled, bitmap and XML vectors fonts are used instead."
+#~ msgstr ""
+#~ "منتڤکن سام اد Ùون FreeType دݢوناکن⹠ممرلوکن سوکوڠن Freetype\n"
+#~ "دکومڤيل برسام. جيک دلومڤوهکن⹠Ùون ڤتا بيت دان Ûيکتور XML اکن دݢوناکن."
+
#~ msgid "Yes"
#~ msgstr "ياٴ"
+
+#, fuzzy
+#~ msgid "You died."
+#~ msgstr "اندا تله منيڠݢل"
+
+#~ msgid "needs_fallback_font"
+#~ msgstr "yes"
diff --git a/po/nb/minetest.po b/po/nb/minetest.po
index 3762509a4..d550602e6 100644
--- a/po/nb/minetest.po
+++ b/po/nb/minetest.po
@@ -2,9 +2,9 @@ msgid ""
msgstr ""
"Project-Id-Version: Norwegian Bokmål (Minetest)\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-02-23 19:03+0100\n"
-"PO-Revision-Date: 2021-01-10 01:32+0000\n"
-"Last-Translator: Allan Nordhøy <epost@anotheragency.no>\n"
+"POT-Creation-Date: 2022-01-25 23:19+0100\n"
+"PO-Revision-Date: 2022-01-10 23:53+0000\n"
+"Last-Translator: Imre Kristoffer Eilertsen <imreeil42@gmail.com>\n"
"Language-Team: Norwegian Bokmål <https://hosted.weblate.org/projects/"
"minetest/minetest/nb_NO/>\n"
"Language: nb\n"
@@ -12,7 +12,47 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 4.4.1-dev\n"
+"X-Generator: Weblate 4.10.1\n"
+
+#: builtin/client/chatcommands.lua
+msgid "Clear the out chat queue"
+msgstr ""
+
+#: builtin/client/chatcommands.lua
+msgid "Empty command."
+msgstr "Tom kommando."
+
+#: builtin/client/chatcommands.lua
+#, fuzzy
+msgid "Exit to main menu"
+msgstr "Avslutt til meny"
+
+#: builtin/client/chatcommands.lua
+#, fuzzy
+msgid "Invalid command: "
+msgstr "Lokal kommando"
+
+#: builtin/client/chatcommands.lua
+msgid "Issued command: "
+msgstr "Avgitt kommando: "
+
+#: builtin/client/chatcommands.lua
+#, fuzzy
+msgid "List online players"
+msgstr "Enkeltspiller"
+
+#: builtin/client/chatcommands.lua
+#, fuzzy
+msgid "Online players: "
+msgstr "Enkeltspiller"
+
+#: builtin/client/chatcommands.lua
+msgid "The out chat queue is now empty."
+msgstr ""
+
+#: builtin/client/chatcommands.lua
+msgid "This command is disabled by server."
+msgstr "Denne kommandoen er utkoblet av tjeneren."
#: builtin/client/death_formspec.lua src/client/game.cpp
msgid "Respawn"
@@ -22,11 +62,43 @@ msgstr "Gjenoppstå"
msgid "You died"
msgstr "Du døde"
+#: builtin/common/chatcommands.lua
+#, fuzzy
+msgid "Available commands:"
+msgstr "Lokal kommando"
+
+#: builtin/common/chatcommands.lua
+#, fuzzy
+msgid "Available commands: "
+msgstr "Lokal kommando"
+
+#: builtin/common/chatcommands.lua
+msgid "Command not available: "
+msgstr "Ikke tilgjengelig kommando: "
+
+#: builtin/common/chatcommands.lua
+msgid "Get help for commands"
+msgstr ""
+
+#: builtin/common/chatcommands.lua
+msgid ""
+"Use '.help <cmd>' to get more information, or '.help all' to list everything."
+msgstr ""
+
+#: builtin/common/chatcommands.lua
+msgid "[all | <cmd>]"
+msgstr ""
+
#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp
msgid "OK"
msgstr "OK"
#: builtin/fstk/ui.lua
+#, fuzzy
+msgid "<none available>"
+msgstr "Ikke tilgjengelig kommando: "
+
+#: builtin/fstk/ui.lua
msgid "An error occurred in a Lua script:"
msgstr "Det oppstod en feil i et Lua-skript:"
@@ -161,7 +233,7 @@ msgstr ""
#: builtin/mainmenu/dlg_contentstore.lua
msgid "$1 by $2"
-msgstr ""
+msgstr "$1 av $2"
#: builtin/mainmenu/dlg_contentstore.lua
msgid ""
@@ -232,6 +304,11 @@ msgid "Install missing dependencies"
msgstr "Valgfrie avhengigheter:"
#: builtin/mainmenu/dlg_contentstore.lua
+#, fuzzy
+msgid "Install: Unsupported file type or broken archive"
+msgstr "Installasjon: Ikke-støttet filtype \"$1\" eller ødelagt arkiv"
+
+#: builtin/mainmenu/dlg_contentstore.lua
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Mods"
msgstr "Modder"
@@ -245,17 +322,16 @@ msgid "No results"
msgstr "Resultatløst"
#: builtin/mainmenu/dlg_contentstore.lua
-#, fuzzy
msgid "No updates"
-msgstr "Oppdater"
+msgstr "Ingen oppdateringer"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Not found"
-msgstr ""
+msgstr "Ikke funnet"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Overwrite"
-msgstr ""
+msgstr "Overskriv"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Please check that the base game is correct."
@@ -263,7 +339,7 @@ msgstr ""
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Queued"
-msgstr ""
+msgstr "Satt i kø"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Texture packs"
@@ -535,7 +611,7 @@ msgstr "< Tilbake til innstillinger"
msgid "Browse"
msgstr "See gjennom"
-#: builtin/mainmenu/dlg_settings_advanced.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_settings.lua
msgid "Disabled"
msgstr "Deaktivert"
@@ -560,7 +636,8 @@ msgid "Offset"
msgstr "Forskyvning"
#: builtin/mainmenu/dlg_settings_advanced.lua
-msgid "Persistance"
+#, fuzzy
+msgid "Persistence"
msgstr "Bestandighet"
#: builtin/mainmenu/dlg_settings_advanced.lua
@@ -579,7 +656,7 @@ msgstr "Gjenopprette standard"
msgid "Scale"
msgstr "Skala"
-#: builtin/mainmenu/dlg_settings_advanced.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_online.lua
msgid "Search"
msgstr "Søk"
@@ -671,14 +748,6 @@ msgid "Install Mod: Unable to find suitable folder name for modpack $1"
msgstr "Installer mod: Klarte ikke finne egnet mappenavn for mod-pakke $1"
#: builtin/mainmenu/pkgmgr.lua
-msgid "Install: Unsupported file type \"$1\" or broken archive"
-msgstr "Installasjon: Ikke-støttet filtype \"$1\" eller ødelagt arkiv"
-
-#: builtin/mainmenu/pkgmgr.lua
-msgid "Install: file: \"$1\""
-msgstr "Installasjon: fil \"$1\""
-
-#: builtin/mainmenu/pkgmgr.lua
msgid "Unable to find a valid mod or modpack"
msgstr "Klarte ikke finne en gyldig mod eller modpakke"
@@ -713,6 +782,42 @@ msgstr ""
"Prøv å aktivere offentlig tjenerliste på nytt og sjekk Internettforbindelsen "
"din."
+#: builtin/mainmenu/tab_about.lua
+msgid "About"
+msgstr "Om"
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Active Contributors"
+msgstr "Aktive bidragsytere"
+
+#: builtin/mainmenu/tab_about.lua
+#, fuzzy
+msgid "Active renderer:"
+msgstr "Område for sending av aktive objekt"
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Core Developers"
+msgstr "Kjerneutviklere"
+
+#: builtin/mainmenu/tab_about.lua
+#, fuzzy
+msgid "Open User Data Directory"
+msgstr "Velg mappe"
+
+#: builtin/mainmenu/tab_about.lua
+msgid ""
+"Opens the directory that contains user-provided worlds, games, mods,\n"
+"and texture packs in a file manager / explorer."
+msgstr ""
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Previous Contributors"
+msgstr "Tidligere bidragsytere"
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Previous Core Developers"
+msgstr "Tidligere kjerneutviklere"
+
#: builtin/mainmenu/tab_content.lua
msgid "Browse online content"
msgstr "Utforsk nettbasert innhold"
@@ -753,37 +858,6 @@ msgstr "Avinstaller pakke"
msgid "Use Texture Pack"
msgstr "Bruk teksturpakke"
-#: builtin/mainmenu/tab_credits.lua
-msgid "Active Contributors"
-msgstr "Aktive bidragsytere"
-
-#: builtin/mainmenu/tab_credits.lua
-msgid "Core Developers"
-msgstr "Kjerneutviklere"
-
-#: builtin/mainmenu/tab_credits.lua
-msgid "Credits"
-msgstr "Bidragsytere"
-
-#: builtin/mainmenu/tab_credits.lua
-#, fuzzy
-msgid "Open User Data Directory"
-msgstr "Velg mappe"
-
-#: builtin/mainmenu/tab_credits.lua
-msgid ""
-"Opens the directory that contains user-provided worlds, games, mods,\n"
-"and texture packs in a file manager / explorer."
-msgstr ""
-
-#: builtin/mainmenu/tab_credits.lua
-msgid "Previous Contributors"
-msgstr "Tidligere bidragsytere"
-
-#: builtin/mainmenu/tab_credits.lua
-msgid "Previous Core Developers"
-msgstr "Tidligere kjerneutviklere"
-
#: builtin/mainmenu/tab_local.lua
msgid "Announce Server"
msgstr "Annonseringstjener"
@@ -812,9 +886,9 @@ msgstr "Vertstjener"
msgid "Install games from ContentDB"
msgstr "Installer spill fra ContentDB"
-#: builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
msgid "Name"
-msgstr ""
+msgstr "Navn"
#: builtin/mainmenu/tab_local.lua
msgid "New"
@@ -824,16 +898,15 @@ msgstr "Ny"
msgid "No world created or selected!"
msgstr "Ingen verden opprettet eller valgt!"
-#: builtin/mainmenu/tab_local.lua
-#, fuzzy
+#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
msgid "Password"
-msgstr "Nytt passord"
+msgstr "Passord"
#: builtin/mainmenu/tab_local.lua
msgid "Play Game"
msgstr "Spill"
-#: builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
msgid "Port"
msgstr "Port"
@@ -855,8 +928,12 @@ msgid "Start Game"
msgstr "Start spill"
#: builtin/mainmenu/tab_online.lua
-msgid "Address / Port"
-msgstr "Adresse / port"
+msgid "Address"
+msgstr "Adresse"
+
+#: builtin/mainmenu/tab_online.lua src/client/keycode.cpp
+msgid "Clear"
+msgstr "Tøm"
#: builtin/mainmenu/tab_online.lua
msgid "Connect"
@@ -866,34 +943,45 @@ msgstr "Koble til"
msgid "Creative mode"
msgstr "Kreativ modus"
+#. ~ PvP = Player versus Player
#: builtin/mainmenu/tab_online.lua
-msgid "Damage enabled"
-msgstr "Skade aktivert"
+#, fuzzy
+msgid "Damage / PvP"
+msgstr "Skade"
#: builtin/mainmenu/tab_online.lua
msgid "Del. Favorite"
msgstr "Slett favoritt"
#: builtin/mainmenu/tab_online.lua
-msgid "Favorite"
-msgstr "Favoritt"
+msgid "Favorites"
+msgstr "Favoritter"
#: builtin/mainmenu/tab_online.lua
-msgid "Join Game"
-msgstr "Ta del i spill"
+msgid "Incompatible Servers"
+msgstr ""
#: builtin/mainmenu/tab_online.lua
-msgid "Name / Password"
-msgstr "Navn / passord"
+msgid "Join Game"
+msgstr "Ta del i spill"
#: builtin/mainmenu/tab_online.lua
msgid "Ping"
msgstr "Latens"
-#. ~ PvP = Player versus Player
#: builtin/mainmenu/tab_online.lua
-msgid "PvP enabled"
-msgstr "Alle mot alle er på"
+#, fuzzy
+msgid "Public Servers"
+msgstr "Annonseringstjener"
+
+#: builtin/mainmenu/tab_online.lua
+msgid "Refresh"
+msgstr "Oppdater"
+
+#: builtin/mainmenu/tab_online.lua
+#, fuzzy
+msgid "Server Description"
+msgstr "Serverbeskrivelse"
#: builtin/mainmenu/tab_settings.lua
msgid "2x"
@@ -935,11 +1023,32 @@ msgstr "Endre taster"
msgid "Connected Glass"
msgstr "Forbundet glass"
+#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
+#, fuzzy
+msgid "Dynamic shadows"
+msgstr "Skriftskygge"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Dynamic shadows: "
+msgstr ""
+
#: builtin/mainmenu/tab_settings.lua
msgid "Fancy Leaves"
msgstr "Forseggjorte blader"
#: builtin/mainmenu/tab_settings.lua
+msgid "High"
+msgstr "Høy"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Low"
+msgstr "Lav"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Medium"
+msgstr "Medium"
+
+#: builtin/mainmenu/tab_settings.lua
msgid "Mipmap"
msgstr "Mipmap"
@@ -998,7 +1107,7 @@ msgstr "Flytlandene (eksperimentelt)"
#: builtin/mainmenu/tab_settings.lua
msgid "Shaders (unavailable)"
-msgstr "Skyggelegging (ikke tilgjenglig)"
+msgstr "Skyggelegging (ikke tilgjengelig)"
#: builtin/mainmenu/tab_settings.lua
msgid "Simple Leaves"
@@ -1006,16 +1115,12 @@ msgstr "Enkle løv"
#: builtin/mainmenu/tab_settings.lua
msgid "Smooth Lighting"
-msgstr "Gjevn belysning"
+msgstr "Jevn belysning"
#: builtin/mainmenu/tab_settings.lua
msgid "Texturing:"
msgstr "Teksturering:"
-#: builtin/mainmenu/tab_settings.lua
-msgid "To enable shaders the OpenGL driver needs to be used."
-msgstr "For å skru på skyggeleging, må man bruke OpenGL-driveren."
-
#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
msgid "Tone Mapping"
msgstr "Nyanseoversettelse (tone mapping)"
@@ -1029,6 +1134,14 @@ msgid "Trilinear Filter"
msgstr "Trilineært filter"
#: builtin/mainmenu/tab_settings.lua
+msgid "Ultra High"
+msgstr "Ultrahøy"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Very Low"
+msgstr "Veldig lav"
+
+#: builtin/mainmenu/tab_settings.lua
msgid "Waving Leaves"
msgstr "Bølgende blader"
@@ -1040,7 +1153,7 @@ msgstr "Skvulpende væsker"
msgid "Waving Plants"
msgstr "Bølgende planter"
-#: src/client/client.cpp
+#: src/client/client.cpp src/client/game.cpp
msgid "Connection timed out."
msgstr "Forbindelsen løp ut på tid."
@@ -1069,7 +1182,8 @@ msgid "Connection error (timed out?)"
msgstr "Tilkoblingsfeil (tidsavbrudd?)"
#: src/client/clientlauncher.cpp
-msgid "Could not find or load game \""
+#, fuzzy
+msgid "Could not find or load game: "
msgstr "Klarte ikke finne eller laste inn spill «"
#: src/client/clientlauncher.cpp
@@ -1100,18 +1214,6 @@ msgstr "Passordfilen kunne ikke åpnes: "
msgid "Provided world path doesn't exist: "
msgstr "Angitt sti til verdenen finnes ikke: "
-#. ~ DO NOT TRANSLATE THIS LITERALLY!
-#. This is a special string. Put either "no" or "yes"
-#. into the translation field (literally).
-#. Choose "yes" if the language requires use of the fallback
-#. font, "no" otherwise.
-#. The fallback font is (normally) required for languages with
-#. non-Latin script, like Chinese.
-#. When in doubt, test your translation.
-#: src/client/fontengine.cpp
-msgid "needs_fallback_font"
-msgstr "no"
-
#: src/client/game.cpp
msgid ""
"\n"
@@ -1125,14 +1227,6 @@ msgid "- Address: "
msgstr "- Adresse: "
#: src/client/game.cpp
-msgid "- Creative Mode: "
-msgstr "- Kreativ modus: "
-
-#: src/client/game.cpp
-msgid "- Damage: "
-msgstr "- Skade: "
-
-#: src/client/game.cpp
msgid "- Mode: "
msgstr "- Modus: "
@@ -1154,6 +1248,16 @@ msgid "- Server Name: "
msgstr "- Tjenernavn: "
#: src/client/game.cpp
+#, fuzzy
+msgid "A serialization error occurred:"
+msgstr "Det oppstod en feil:"
+
+#: src/client/game.cpp
+#, c-format
+msgid "Access denied. Reason: %s"
+msgstr ""
+
+#: src/client/game.cpp
msgid "Automatic forward disabled"
msgstr "Automatisk forover slått av"
@@ -1162,6 +1266,22 @@ msgid "Automatic forward enabled"
msgstr "Automatisk forover slått på"
#: src/client/game.cpp
+msgid "Block bounds hidden"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Block bounds shown for all blocks"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Block bounds shown for current block"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Block bounds shown for nearby blocks"
+msgstr ""
+
+#: src/client/game.cpp
msgid "Camera update disabled"
msgstr "Kameraoppdatering slått av"
@@ -1170,6 +1290,10 @@ msgid "Camera update enabled"
msgstr "Kameraoppdatering slått på"
#: src/client/game.cpp
+msgid "Can't show block bounds (need 'basic_debug' privilege)"
+msgstr ""
+
+#: src/client/game.cpp
msgid "Change Password"
msgstr "Endre passord"
@@ -1182,6 +1306,11 @@ msgid "Cinematic mode enabled"
msgstr "Filmatisk modus påskrudd"
#: src/client/game.cpp
+#, fuzzy
+msgid "Client disconnected"
+msgstr "Brukermodding"
+
+#: src/client/game.cpp
msgid "Client side scripting is disabled"
msgstr "Skripting er slått av på klientside"
@@ -1190,11 +1319,15 @@ msgid "Connecting to server..."
msgstr "Kobler til tjener…"
#: src/client/game.cpp
+msgid "Connection failed for unknown reason"
+msgstr ""
+
+#: src/client/game.cpp
msgid "Continue"
msgstr "Fortsett"
#: src/client/game.cpp
-#, fuzzy, c-format
+#, c-format
msgid ""
"Controls:\n"
"- %s: move forwards\n"
@@ -1211,20 +1344,25 @@ msgid ""
"- Mouse wheel: select item\n"
"- %s: chat\n"
msgstr ""
-"Controls:\n"
+"Kontroller:\n"
"- %s: flytt forover\n"
"- %s: flytt bakover\n"
"- %s: flytt mot venstre\n"
"- %s: flytt mot høyre\n"
-"- %s: hopp/klatre\n"
-"- %s: snik/bøy deg ned\n"
-"- %s: slipp tingen\n"
+"- %s: hopp/klatre oppover\n"
+"- %s: grav/slå\n"
+"- %s: plasser/bruk\n"
+"- %s: snik/klatre nedover\n"
+"- %s: slipp ting\n"
"- %s: inventar\n"
"- Mus: snu/se\n"
-"- Mus venstre: grav/slå\n"
-"- Mus høyre: plasser/bruk\n"
-"- Mus hjul: velg ting\n"
-"- %s: nettprat\n"
+"- Musehjul: velg ting\n"
+"- %s: sludring\n"
+
+#: src/client/game.cpp
+#, c-format
+msgid "Couldn't resolve address: %s"
+msgstr ""
#: src/client/game.cpp
msgid "Creating client..."
@@ -1236,7 +1374,7 @@ msgstr "Oppretter tjener…"
#: src/client/game.cpp
msgid "Debug info and profiler graph hidden"
-msgstr "Skjuler feilsøkingsinfo og profilgraf"
+msgstr "Skjuler feilsøkingsinfo og profileringsgraf"
#: src/client/game.cpp
msgid "Debug info shown"
@@ -1244,7 +1382,7 @@ msgstr "Viser feilsøkingsinfo"
#: src/client/game.cpp
msgid "Debug info, profiler graph, and wireframe hidden"
-msgstr ""
+msgstr "Skjuler feilsøkingsinfo, profileringsgraf og 3D-gitter"
#: src/client/game.cpp
msgid ""
@@ -1355,6 +1493,10 @@ msgid "Minimap currently disabled by game or mod"
msgstr ""
#: src/client/game.cpp
+msgid "Multiplayer"
+msgstr "Flerspiller"
+
+#: src/client/game.cpp
msgid "Noclip mode disabled"
msgstr ""
@@ -1429,6 +1571,21 @@ msgstr "Lyd på"
#: src/client/game.cpp
#, c-format
+msgid "The server is probably running a different version of %s."
+msgstr ""
+
+#: src/client/game.cpp
+#, c-format
+msgid "Unable to connect to %s because IPv6 is disabled"
+msgstr ""
+
+#: src/client/game.cpp
+#, c-format
+msgid "Unable to listen on %s because IPv6 is disabled"
+msgstr ""
+
+#: src/client/game.cpp
+#, c-format
msgid "Viewing range changed to %d"
msgstr "Synsrekkevidde endret til %d%%"
@@ -1497,10 +1654,6 @@ msgid "Caps Lock"
msgstr "Caps Lock"
#: src/client/keycode.cpp
-msgid "Clear"
-msgstr "Tøm"
-
-#: src/client/keycode.cpp
msgid "Control"
msgstr "Kontroll"
@@ -1765,6 +1918,15 @@ msgstr ""
msgid "Minimap in texture mode"
msgstr ""
+#: src/gui/guiChatConsole.cpp
+#, fuzzy
+msgid "Failed to open webpage"
+msgstr "Klarte ikke laste ned $1"
+
+#: src/gui/guiChatConsole.cpp
+msgid "Opening webpage"
+msgstr ""
+
#: src/gui/guiConfirmRegistration.cpp src/gui/guiPasswordChange.cpp
msgid "Passwords do not match!"
msgstr "Passordene samsvarer ikke!"
@@ -1793,7 +1955,8 @@ msgid "Proceed"
msgstr "Fortsett"
#: src/gui/guiKeyChangeMenu.cpp
-msgid "\"Special\" = climb down"
+#, fuzzy
+msgid "\"Aux1\" = climb down"
msgstr "«Spesial» = klatre ned"
#: src/gui/guiKeyChangeMenu.cpp
@@ -1805,10 +1968,18 @@ msgid "Automatic jumping"
msgstr "Automatisk hopping"
#: src/gui/guiKeyChangeMenu.cpp
+msgid "Aux1"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
msgid "Backward"
msgstr "Tilbake"
#: src/gui/guiKeyChangeMenu.cpp
+msgid "Block bounds"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
msgid "Change camera"
msgstr "Endre visning"
@@ -1899,10 +2070,6 @@ msgid "Sneak"
msgstr "Snike"
#: src/gui/guiKeyChangeMenu.cpp
-msgid "Special"
-msgstr "Spesial"
-
-#: src/gui/guiKeyChangeMenu.cpp
msgid "Toggle HUD"
msgstr "HUD (hurtigtilgang) av/på"
@@ -1963,7 +2130,8 @@ msgid "Muted"
msgstr "Av"
#: src/gui/guiVolumeChange.cpp
-msgid "Sound Volume: "
+#, fuzzy, c-format
+msgid "Sound Volume: %d%%"
msgstr "Lydstyrke: "
#. ~ Imperative, as in "Enter/type in text".
@@ -1989,9 +2157,10 @@ msgstr ""
"første berøring."
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
-"(Android) Use virtual joystick to trigger \"aux\" button.\n"
-"If enabled, virtual joystick will also tap \"aux\" button when out of main "
+"(Android) Use virtual joystick to trigger \"Aux1\" button.\n"
+"If enabled, virtual joystick will also tap \"Aux1\" button when out of main "
"circle."
msgstr ""
"(Android) Bruk virtuell styrepinne til å utløse \"aux\"-knapp.\n"
@@ -2217,6 +2386,10 @@ msgstr ""
"skjermer."
#: src/settings_translation_file.cpp
+msgid "Adjust the detected display density, used for scaling UI elements."
+msgstr ""
+
+#: src/settings_translation_file.cpp
#, c-format
msgid ""
"Adjusts the density of the floatland layer.\n"
@@ -2344,6 +2517,16 @@ msgid "Autoscaling mode"
msgstr "Autoskaleringsmodus"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Aux1 key"
+msgstr "Hoppetast"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Aux1 key for climbing/descending"
+msgstr "Spesialtast for klatring/nedklatring"
+
+#: src/settings_translation_file.cpp
msgid "Backward key"
msgstr "Rettetast"
@@ -2388,10 +2571,6 @@ msgid "Biome noise"
msgstr "Biotoplyd"
#: src/settings_translation_file.cpp
-msgid "Bits per pixel (aka color depth) in fullscreen mode."
-msgstr "Biter per piksel (dvs. fargedybde) i fullskjermsmodus."
-
-#: src/settings_translation_file.cpp
msgid "Block send optimize distance"
msgstr "Avstand for optimalizering av mapblocksending"
@@ -2498,6 +2677,16 @@ msgstr ""
#: src/settings_translation_file.cpp
#, fuzzy
+msgid "Chat command time message threshold"
+msgstr "Terskel for utvisning fra chat"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Chat commands"
+msgstr "Sludrekommandoer"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
msgid "Chat font size"
msgstr "Skriftstørrelse"
@@ -2531,8 +2720,9 @@ msgid "Chat toggle key"
msgstr "Tast for veksling av sludring"
#: src/settings_translation_file.cpp
-msgid "Chatcommands"
-msgstr "Sludrekommandoer"
+#, fuzzy
+msgid "Chat weblinks"
+msgstr "Viser chat"
#: src/settings_translation_file.cpp
msgid "Chunk size"
@@ -2551,6 +2741,12 @@ msgid "Clean transparent textures"
msgstr "Rene, gjennomsiktige teksturer"
#: src/settings_translation_file.cpp
+msgid ""
+"Clickable weblinks (middle-click or Ctrl+left-click) enabled in chat console "
+"output."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Client"
msgstr "Klient"
@@ -2595,6 +2791,11 @@ msgid "Colored fog"
msgstr "Farget tåke"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Colored shadows"
+msgstr "Farget tåke"
+
+#: src/settings_translation_file.cpp
msgid ""
"Comma-separated list of flags to hide in the content repository.\n"
"\"nonfree\" can be used to hide packages which do not qualify as 'free "
@@ -2633,6 +2834,22 @@ msgid "Command key"
msgstr "Tast for chat og kommandoer"
#: src/settings_translation_file.cpp
+msgid ""
+"Compression level to use when saving mapblocks to disk.\n"
+"-1 - use default compression level\n"
+"0 - least compression, fastest\n"
+"9 - best compression, slowest"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Compression level to use when sending mapblocks to the client.\n"
+"-1 - use default compression level\n"
+"0 - least compression, fastest\n"
+"9 - best compression, slowest"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Connect glass"
msgstr "Forbind glass"
@@ -2731,8 +2948,10 @@ msgstr "Trådkors-alpha"
#, fuzzy
msgid ""
"Crosshair alpha (opaqueness, between 0 and 255).\n"
-"Also controls the object crosshair color"
-msgstr "Trådkors-alpha (ugjennomsiktighet, mellom 0 og 255)."
+"This also applies to the object crosshair."
+msgstr ""
+"Trådkors-alpha (ugjennomsiktighet, mellom 0 og 255).\n"
+"Kontrollerer også objektets trådkorsfarge"
#: src/settings_translation_file.cpp
msgid "Crosshair color"
@@ -2809,8 +3028,9 @@ msgstr "Forvalgt spill"
#: src/settings_translation_file.cpp
msgid ""
-"Default timeout for cURL, stated in milliseconds.\n"
-"Only has an effect if compiled with cURL."
+"Define shadow filtering quality.\n"
+"This simulates the soft shadows effect by applying a PCF or Poisson disk\n"
+"but also uses more resources."
msgstr ""
#: src/settings_translation_file.cpp
@@ -2930,6 +3150,10 @@ msgid "Disallow empty passwords"
msgstr "Ikke tillatt tomme passord"
#: src/settings_translation_file.cpp
+msgid "Display Density Scaling Factor"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Domain name of server, to be displayed in the serverlist."
msgstr "Domenenavn for tjener, som vist i tjenerlisten."
@@ -2975,13 +3199,25 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Enable Poisson disk filtering.\n"
+"On true uses Poisson disk to make \"soft shadows\". Otherwise uses PCF "
+"filtering."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable colored shadows.\n"
+"On true translucent nodes cast colored shadows. This is expensive."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Enable console window"
msgstr "Skru på konsollvindu"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Enable creative mode for all players"
-msgstr "Skru på kreativt modusfor nye opprettede kart."
+msgstr "Aktiver kreativt modus for alle spillere"
#: src/settings_translation_file.cpp
msgid "Enable joysticks"
@@ -3086,6 +3322,12 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Enables tradeoffs that reduce CPU load or increase rendering performance\n"
+"at the expense of minor visual glitches that do not impact game playability."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Engine profiling data print interval"
msgstr ""
@@ -3104,13 +3346,12 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "FPS when unfocused or paused"
-msgstr "Maks FPS når spillet står i pause."
+msgstr "Maks FPS når spillet ikke har fokus eller er pauset"
#: src/settings_translation_file.cpp
msgid "FSAA"
-msgstr ""
+msgstr "FSAA"
#: src/settings_translation_file.cpp
msgid "Factor noise"
@@ -3125,18 +3366,6 @@ msgid "Fallback font path"
msgstr "Filsti for reserveskrifttype"
#: src/settings_translation_file.cpp
-msgid "Fallback font shadow"
-msgstr "Tilbakefallsskriftsskygge"
-
-#: src/settings_translation_file.cpp
-msgid "Fallback font shadow alpha"
-msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid "Fallback font size"
-msgstr "Tilbakefallsskriftstørrelse"
-
-#: src/settings_translation_file.cpp
msgid "Fast key"
msgstr "Hurtigtast"
@@ -3154,7 +3383,7 @@ msgstr "Rask bevegelse"
#: src/settings_translation_file.cpp
msgid ""
-"Fast movement (via the \"special\" key).\n"
+"Fast movement (via the \"Aux1\" key).\n"
"This requires the \"fast\" privilege on the server."
msgstr ""
@@ -3190,9 +3419,9 @@ 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."
+"which PNG optimizers usually discard, often resulting in dark or\n"
+"light edges to transparent textures. Apply a filter to clean that up\n"
+"at texture load time. This is automatically enabled if mipmapping is enabled."
msgstr ""
#: src/settings_translation_file.cpp
@@ -3289,15 +3518,15 @@ msgid "Font size"
msgstr "Skriftstørrelse"
#: src/settings_translation_file.cpp
-msgid "Font size of the default font in point (pt)."
+msgid "Font size divisible by"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Font size of the fallback font in point (pt)."
+msgid "Font size of the default font where 1 unit = 1 pixel at 96 DPI"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Font size of the monospace font in point (pt)."
+msgid "Font size of the monospace font where 1 unit = 1 pixel at 96 DPI"
msgstr ""
#: src/settings_translation_file.cpp
@@ -3308,6 +3537,17 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"For pixel-style fonts that do not scale well, this ensures that font sizes "
+"used\n"
+"with this font will always be divisible by this value, in pixels. For "
+"instance,\n"
+"a pixel font 16 pixels tall should have this set to 16, so it will only ever "
+"be\n"
+"sized 16, 32, 48, etc., so a mod requesting a size of 25 will get 32."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Format of player chat messages. The following strings are valid "
"placeholders:\n"
"@name, @message, @timestamp (optional)"
@@ -3366,10 +3606,6 @@ msgid "Fraction of the visible distance at which fog starts to be rendered"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "FreeType fonts"
-msgstr "FreeType-skrifttyper"
-
-#: src/settings_translation_file.cpp
msgid ""
"From how far blocks are generated for clients, stated in mapblocks (16 "
"nodes)."
@@ -3394,10 +3630,6 @@ msgid "Full screen"
msgstr "Fullskjerm"
#: src/settings_translation_file.cpp
-msgid "Full screen BPP"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Fullscreen mode."
msgstr "Fullskjermsmodus."
@@ -3421,7 +3653,7 @@ msgstr ""
msgid ""
"Global map generation attributes.\n"
"In Mapgen v6 the 'decorations' flag controls all decorations except trees\n"
-"and junglegrass, in all other mapgens this flag controls all decorations."
+"and jungle grass, in all other mapgens this flag controls all decorations."
msgstr ""
#: src/settings_translation_file.cpp
@@ -3490,7 +3722,8 @@ msgid "Heat noise"
msgstr "Varmestøy"
#: src/settings_translation_file.cpp
-msgid "Height component of the initial window size."
+msgid ""
+"Height component of the initial window size. Ignored in fullscreen mode."
msgstr ""
#: src/settings_translation_file.cpp
@@ -3502,10 +3735,6 @@ msgid "Height select noise"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "High-precision FPU"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Hill steepness"
msgstr "Bratthet for ås"
@@ -3736,8 +3965,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"If disabled, \"special\" key is used to fly fast if both fly and fast mode "
-"are\n"
+"If disabled, \"Aux1\" key is used to fly fast if both fly and fast mode are\n"
"enabled."
msgstr ""
@@ -3759,8 +3987,8 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"If enabled, \"special\" key instead of \"sneak\" key is used for climbing "
-"down and\n"
+"If enabled, \"Aux1\" key instead of \"Sneak\" key is used for climbing down "
+"and\n"
"descending."
msgstr ""
@@ -3806,6 +4034,12 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"If the execution of a chat command takes longer than this specified time in\n"
+"seconds, add the time information to the chat command message"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"If the file size of debug.txt exceeds the number of megabytes specified in\n"
"this setting when it is opened, the file is moved to debug.txt.1,\n"
"deleting an older debug.txt.1 if it exists.\n"
@@ -3851,7 +4085,7 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Instrument chatcommands on registration."
+msgid "Instrument chat commands on registration."
msgstr ""
#: src/settings_translation_file.cpp
@@ -3917,7 +4151,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Iterations"
-msgstr ""
+msgstr "Ringer"
#: src/settings_translation_file.cpp
msgid ""
@@ -3937,7 +4171,7 @@ msgstr ""
#: src/settings_translation_file.cpp
#, fuzzy
-msgid "Joystick deadzone"
+msgid "Joystick dead zone"
msgstr "Spillstikketype"
#: src/settings_translation_file.cpp
@@ -3945,9 +4179,8 @@ msgid "Joystick frustum sensitivity"
msgstr ""
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Joystick type"
-msgstr "Spillstikketype"
+msgstr "Kontrollertype"
#: src/settings_translation_file.cpp
msgid ""
@@ -4685,7 +4918,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Language"
-msgstr ""
+msgstr "Språk"
#: src/settings_translation_file.cpp
msgid "Large cave depth"
@@ -4870,10 +5103,6 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Makes DirectX work with LuaJIT. Disable if it causes troubles."
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Makes all liquids opaque"
msgstr ""
@@ -4945,6 +5174,10 @@ msgid "Map save interval"
msgstr "Lagringsintervall for kart"
#: src/settings_translation_file.cpp
+msgid "Map shadows update frames"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Mapblock limit"
msgstr ""
@@ -5060,6 +5293,10 @@ msgid "Maximum FPS when the window is not focused, or when the game is paused."
msgstr "Maks FPS når spillet står i pause."
#: src/settings_translation_file.cpp
+msgid "Maximum distance to render shadows."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Maximum forceloaded blocks"
msgstr ""
@@ -5167,7 +5404,15 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Maximum time in ms a file download (e.g. a mod download) may take."
+msgid ""
+"Maximum time a file download (e.g. a mod download) may take, stated in "
+"milliseconds."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum time an interactive request (e.g. server list fetch) may take, "
+"stated in milliseconds."
msgstr ""
#: src/settings_translation_file.cpp
@@ -5231,7 +5476,7 @@ msgid "Mod channels"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Modifies the size of the hudbar elements."
+msgid "Modifies the size of the HUD elements."
msgstr ""
#: src/settings_translation_file.cpp
@@ -5243,6 +5488,11 @@ msgid "Monospace font size"
msgstr "Størrelse for monospace skrifttype"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Monospace font size divisible by"
+msgstr "Størrelse for monospace skrifttype"
+
+#: src/settings_translation_file.cpp
msgid "Mountain height noise"
msgstr ""
@@ -5310,7 +5560,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Network"
-msgstr ""
+msgstr "Nettverk"
#: src/settings_translation_file.cpp
msgid ""
@@ -5363,7 +5613,7 @@ 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"
+"This is a trade-off between SQLite transaction overhead and\n"
"memory consumption (4096=100MB, as a rule of thumb)."
msgstr ""
@@ -5382,21 +5632,18 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Opaqueness (alpha) of the shadow behind the fallback font, between 0 and 255."
-msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid ""
"Open the pause menu when the window's focus is lost. Does not pause if a "
"formspec is\n"
"open."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Optional override for chat weblink color."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid ""
-"Path of the fallback font.\n"
-"If “freetype†setting is enabled: Must be a TrueType font.\n"
-"If “freetype†setting is disabled: Must be a bitmap or XML vectors font.\n"
+"Path of the fallback font. Must be a TrueType font.\n"
"This font will be used for certain languages or if the default font is "
"unavailable."
msgstr ""
@@ -5419,17 +5666,13 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Path to the default font.\n"
-"If “freetype†setting is enabled: Must be a TrueType font.\n"
-"If “freetype†setting is disabled: Must be a bitmap or XML vectors font.\n"
+"Path to the default font. Must be a TrueType font.\n"
"The fallback font will be used if the font cannot be loaded."
msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Path to the monospace font.\n"
-"If “freetype†setting is enabled: Must be a TrueType font.\n"
-"If “freetype†setting is disabled: Must be a bitmap or XML vectors font.\n"
+"Path to the monospace font. Must be a TrueType font.\n"
"This font is used for e.g. the console and profiler screen."
msgstr ""
@@ -5486,6 +5729,11 @@ msgid "Player versus player"
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Poisson filtering"
+msgstr "Bilineær filtrering"
+
+#: src/settings_translation_file.cpp
msgid ""
"Port to connect to (UDP).\n"
"Note that the port field in the main menu overrides this setting."
@@ -5521,7 +5769,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Profiling"
-msgstr ""
+msgstr "Profilering"
#: src/settings_translation_file.cpp
msgid "Prometheus listener address"
@@ -5530,9 +5778,9 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"Prometheus listener address.\n"
-"If minetest is compiled with ENABLE_PROMETHEUS option enabled,\n"
+"If Minetest is compiled with ENABLE_PROMETHEUS option enabled,\n"
"enable metrics listener for Prometheus on that address.\n"
-"Metrics can be fetch on http://127.0.0.1:30000/metrics"
+"Metrics can be fetched on http://127.0.0.1:30000/metrics"
msgstr ""
#: src/settings_translation_file.cpp
@@ -5706,11 +5954,11 @@ msgstr "Mappe for skjermdumper"
#: src/settings_translation_file.cpp
msgid "Screenshot format"
-msgstr ""
+msgstr "Skjermklippformat"
#: src/settings_translation_file.cpp
msgid "Screenshot quality"
-msgstr ""
+msgstr "Skjermklippkvalitet"
#: src/settings_translation_file.cpp
msgid ""
@@ -5773,6 +6021,25 @@ msgid ""
"17 = 4D \"Mandelbulb\" Mandelbrot set.\n"
"18 = 4D \"Mandelbulb\" Julia set."
msgstr ""
+"Velger en av 18 fraktaltyper.\n"
+"1 = 4D «Rund» Mandelbrot-mengde.\n"
+"2 = 4D «Rund» Julia-mengde.\n"
+"3 = 4D «Firkantet» Mandelbrot-mengde.\n"
+"4 = 4D «Firkantet» Julia-mengde.\n"
+"5 = 4D «Mandy Cousin» Mandelbrot-mengde.\n"
+"6 = 4D «Mandy Cousin» Julia-mengde.\n"
+"7 = 4D «Variasjon» Mandelbrot-mengde.\n"
+"8 = 4D «Variasjon» Julia-mengde.\n"
+"9 = 3D «Mandelbrot/Mandelbar» Mandelbrot-mengde.\n"
+"10 = 3D «Mandelbrot/Mandelbar» Julia-mengde.\n"
+"11 = 3D «Juletre» Mandelbrot-mengde.\n"
+"12 = 3D «Juletre» Julia-mengde.\n"
+"13 = 3D «Mandelbulb» Mandelbrot-mengde.\n"
+"14 = 3D «Mandelbulb» Julia-mengde.\n"
+"15 = 3D «Cosine Mandelbulb» Mandelbrot-mengde.\n"
+"16 = 3D «Cosine Mandelbulb» Julia-mengde.\n"
+"17 = 4D «Mandelbulb» Mandelbrot-mengde.\n"
+"18 = 4D «Mandelbulb» Julia-mengde."
#: src/settings_translation_file.cpp
msgid "Server / Singleplayer"
@@ -5826,6 +6093,35 @@ msgstr "Angi maksimalt antall tegn i chatmelding sendt av klienter."
#: src/settings_translation_file.cpp
msgid ""
+"Set the shadow strength.\n"
+"Lower value means lighter shadows, higher value means darker shadows."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set the soft shadow radius size.\n"
+"Lower values mean sharper shadows, bigger values mean softer shadows.\n"
+"Minimum value: 1.0; maximum value: 10.0"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set the tilt of Sun/Moon orbit in degrees.\n"
+"Value of 0 means no tilt / vertical orbit.\n"
+"Minimum value: 0.0; maximum value: 60.0"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid ""
+"Set to true to enable Shadow Mapping.\n"
+"Requires shaders to be enabled."
+msgstr ""
+"Angi som sann for å slå på bladrasling.\n"
+"Krever at skyggelegging er påslått."
+
+#: src/settings_translation_file.cpp
+msgid ""
"Set to true to enable waving leaves.\n"
"Requires shaders to be enabled."
msgstr ""
@@ -5849,6 +6145,13 @@ msgstr ""
"Krever at skyggelegging er aktivert."
#: src/settings_translation_file.cpp
+msgid ""
+"Sets shadow texture quality to 32 bits.\n"
+"On false, 16 bits texture will be used.\n"
+"This can cause much more artifacts in the shadow."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Shader path"
msgstr ""
@@ -5861,15 +6164,29 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Shadow filter quality"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Shadow map max distance in nodes to render shadows"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Shadow map texture in 32 bits"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Shadow map texture size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid ""
"Shadow offset (in pixels) of the default font. If 0, then shadow will not be "
"drawn."
msgstr ""
#: src/settings_translation_file.cpp
-msgid ""
-"Shadow offset (in pixels) of the fallback font. If 0, then shadow will not "
-"be drawn."
+msgid "Shadow strength"
msgstr ""
#: src/settings_translation_file.cpp
@@ -5895,7 +6212,7 @@ msgstr ""
#: src/settings_translation_file.cpp
#, fuzzy
-msgid "Show nametag backgrounds by default"
+msgid "Show name tag backgrounds by default"
msgstr "Fet skrifttype som forvalg"
#: src/settings_translation_file.cpp
@@ -5920,6 +6237,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Sky Body Orbit Tilt"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Slice w"
msgstr ""
@@ -5975,16 +6296,13 @@ msgid "Sneaking speed, in nodes per second."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Sound"
-msgstr "Lyd"
-
-#: src/settings_translation_file.cpp
-msgid "Special key"
-msgstr "Spesialtast"
+#, fuzzy
+msgid "Soft shadow radius"
+msgstr "Skriftskygge"
#: src/settings_translation_file.cpp
-msgid "Special key for climbing/descending"
-msgstr "Spesialtast for klatring/nedklatring"
+msgid "Sound"
+msgstr "Lyd"
#: src/settings_translation_file.cpp
msgid ""
@@ -6006,6 +6324,14 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Spread a complete update of shadow map over given amount of frames.\n"
+"Higher values might make shadows laggy, lower values\n"
+"will consume more resources.\n"
+"Minimum value: 1; maximum value: 16"
+msgstr ""
+
+#: src/settings_translation_file.cpp
#, fuzzy
msgid ""
"Spread of light curve boost range.\n"
@@ -6118,6 +6444,13 @@ msgstr "Filsti for teksturer"
#: src/settings_translation_file.cpp
msgid ""
+"Texture size to render the shadow map on.\n"
+"This must be a power of two.\n"
+"Bigger numbers create better shadows but it is also more expensive."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Textures on a node may be aligned either to the node or to the world.\n"
"The former mode suits better things like machines, furniture, etc., while\n"
"the latter makes stairs and microblocks fit surroundings better.\n"
@@ -6131,7 +6464,7 @@ msgid "The URL for the content repository"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "The deadzone of the joystick"
+msgid "The dead zone of the joystick"
msgstr ""
#: src/settings_translation_file.cpp
@@ -6194,7 +6527,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"The rendering back-end for Irrlicht.\n"
+"The rendering back-end.\n"
"A restart is required after changing this.\n"
"Note: On Android, stick with OGLES1 if unsure! App may fail to start "
"otherwise.\n"
@@ -6205,7 +6538,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"The sensitivity of the joystick axes for moving the\n"
-"ingame view frustum around."
+"in-game view frustum around."
msgstr ""
#: src/settings_translation_file.cpp
@@ -6300,6 +6633,10 @@ msgid "Touch screen threshold"
msgstr "Strandlydsterskel"
#: src/settings_translation_file.cpp
+msgid "Tradeoffs for performance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Trees noise"
msgstr ""
@@ -6373,7 +6710,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Use mip mapping to scale textures. May slightly increase performance,\n"
+"Use mipmapping to scale textures. May slightly increase performance,\n"
"especially when using a high resolution texture pack.\n"
"Gamma correct downscaling is not supported."
msgstr ""
@@ -6399,7 +6736,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "VSync"
-msgstr ""
+msgstr "VSync"
#: src/settings_translation_file.cpp
msgid "Valley depth"
@@ -6486,7 +6823,7 @@ msgid "Viewing range"
msgstr "Synsrekkevidde"
#: src/settings_translation_file.cpp
-msgid "Virtual joystick triggers aux button"
+msgid "Virtual joystick triggers Aux1 button"
msgstr ""
#: src/settings_translation_file.cpp
@@ -6563,6 +6900,11 @@ msgid "Waving plants"
msgstr "Plantesvaiing"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Weblink color"
+msgstr "Farge på utvalgsfelt"
+
+#: 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"
@@ -6583,23 +6925,15 @@ msgid ""
"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.\n"
+"memory. Powers of 2 are recommended. This setting is ONLY applied if\n"
+"bilinear/trilinear/anisotropic filtering is enabled.\n"
"This is also used as the base node texture size for world-aligned\n"
"texture autoscaling."
msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Whether FreeType fonts are used, requires FreeType support to be compiled "
-"in.\n"
-"If disabled, bitmap and XML vectors fonts are used instead."
-msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid ""
-"Whether nametag backgrounds should be shown by default.\n"
+"Whether name tag backgrounds should be shown by default.\n"
"Mods may still set a background."
msgstr ""
@@ -6641,7 +6975,7 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Width component of the initial window size."
+msgid "Width component of the initial window size. Ignored in fullscreen mode."
msgstr ""
#: src/settings_translation_file.cpp
@@ -6730,34 +7064,26 @@ msgid "Y-level of seabed."
msgstr "Y-nivå for havbunn."
#: src/settings_translation_file.cpp
-msgid ""
-"ZLib compression level to use when saving mapblocks to disk.\n"
-"-1 - Zlib's default compression level\n"
-"0 - no compresson, fastest\n"
-"9 - best compression, slowest\n"
-"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)"
-msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid ""
-"ZLib compression level to use when sending mapblocks to the client.\n"
-"-1 - Zlib's default compression level\n"
-"0 - no compresson, fastest\n"
-"9 - best compression, slowest\n"
-"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "cURL file download timeout"
msgstr "Tidsutløp for filnedlasting med cURL"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "cURL interactive timeout"
+msgstr "cURL-tidsgrense"
+
+#: src/settings_translation_file.cpp
msgid "cURL parallel limit"
msgstr "Maksimal parallellisering i cURL"
-#: src/settings_translation_file.cpp
-msgid "cURL timeout"
-msgstr "cURL-tidsgrense"
+#~ msgid "- Creative Mode: "
+#~ msgstr "- Kreativ modus: "
+
+#~ msgid "- Damage: "
+#~ msgstr "- Skade: "
+
+#~ msgid "Address / Port"
+#~ msgstr "Adresse / port"
#~ msgid "Are you sure to reset your singleplayer world?"
#~ msgstr ""
@@ -6766,6 +7092,9 @@ msgstr "cURL-tidsgrense"
#~ msgid "Back"
#~ msgstr "Tilbake"
+#~ msgid "Bits per pixel (aka color depth) in fullscreen mode."
+#~ msgstr "Biter per piksel (dvs. fargedybde) i fullskjermsmodus."
+
#~ msgid "Bump Mapping"
#~ msgstr "Teksturtilføyning"
@@ -6793,9 +7122,15 @@ msgstr "cURL-tidsgrense"
#~ msgid "Configure"
#~ msgstr "Sett opp"
+#~ msgid "Credits"
+#~ msgstr "Bidragsytere"
+
#~ msgid "Crosshair color (R,G,B)."
#~ msgstr "Trådkorsfarge (R, G, B)."
+#~ msgid "Damage enabled"
+#~ msgstr "Skade aktivert"
+
#~ msgid "Downloading and installing $1, please wait..."
#~ msgstr "Laster ned og installerer $1, vent…"
@@ -6805,12 +7140,24 @@ msgstr "cURL-tidsgrense"
#~ msgid "Enables filmic tone mapping"
#~ msgstr "Aktiver filmatisk toneoversettelse"
+#~ msgid "Fallback font shadow"
+#~ msgstr "Tilbakefallsskriftsskygge"
+
+#~ msgid "Fallback font size"
+#~ msgstr "Tilbakefallsskriftstørrelse"
+
+#~ msgid "FreeType fonts"
+#~ msgstr "FreeType-skrifttyper"
+
#~ msgid "Generate Normal Maps"
#~ msgstr "Generer normale kart"
#~ msgid "IPv6 support."
#~ msgstr "IPv6-støtte."
+#~ msgid "Install: file: \"$1\""
+#~ msgstr "Installasjon: fil \"$1\""
+
#~ msgid "Main"
#~ msgstr "Hovedmeny"
@@ -6818,6 +7165,9 @@ msgstr "cURL-tidsgrense"
#~ msgid "Main menu style"
#~ msgstr "Hovedmeny"
+#~ msgid "Name / Password"
+#~ msgstr "Navn / passord"
+
#~ msgid "Name/Password"
#~ msgstr "Navn/passord"
@@ -6833,15 +7183,27 @@ msgstr "cURL-tidsgrense"
#~ msgid "Path to save screenshots at."
#~ msgstr "Filsti til lagring av skjermdumper."
+#~ msgid "PvP enabled"
+#~ msgstr "Alle mot alle er på"
+
#~ msgid "Reset singleplayer world"
#~ msgstr "Tilbakestill enkeltspillerverden"
#~ msgid "Select Package File:"
#~ msgstr "Velg pakkefil:"
+#~ msgid "Special"
+#~ msgstr "Spesial"
+
+#~ msgid "Special key"
+#~ msgstr "Spesialtast"
+
#~ msgid "Start Singleplayer"
#~ msgstr "Start enkeltspiller"
+#~ msgid "To enable shaders the OpenGL driver needs to be used."
+#~ msgstr "OpenGL-driveren må brukes for å aktivere skyggelegging."
+
#~ msgid "View"
#~ msgstr "Vis"
@@ -6853,3 +7215,9 @@ msgstr "cURL-tidsgrense"
#~ msgid "Yes"
#~ msgstr "Ja"
+
+#~ msgid "You died."
+#~ msgstr "Du døde."
+
+#~ msgid "needs_fallback_font"
+#~ msgstr "no"
diff --git a/po/nl/minetest.po b/po/nl/minetest.po
index f1982536a..44c6277ed 100644
--- a/po/nl/minetest.po
+++ b/po/nl/minetest.po
@@ -2,9 +2,9 @@ msgid ""
msgstr ""
"Project-Id-Version: Dutch (Minetest)\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-02-23 19:03+0100\n"
-"PO-Revision-Date: 2021-02-01 05:52+0000\n"
-"Last-Translator: eol <joshua.de.clercq@gmail.com>\n"
+"POT-Creation-Date: 2022-01-25 23:19+0100\n"
+"PO-Revision-Date: 2021-12-29 20:51+0000\n"
+"Last-Translator: Gert-dev <qnyasgjhapqyuhoibr@kiabws.com>\n"
"Language-Team: Dutch <https://hosted.weblate.org/projects/minetest/minetest/"
"nl/>\n"
"Language: nl\n"
@@ -12,7 +12,43 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 4.5-dev\n"
+"X-Generator: Weblate 4.10.1\n"
+
+#: builtin/client/chatcommands.lua
+msgid "Clear the out chat queue"
+msgstr "Wachtrij voor uitgezonden berichten legen"
+
+#: builtin/client/chatcommands.lua
+msgid "Empty command."
+msgstr "Instructie voor legen."
+
+#: builtin/client/chatcommands.lua
+msgid "Exit to main menu"
+msgstr "Terug naar hoofd menu"
+
+#: builtin/client/chatcommands.lua
+msgid "Invalid command: "
+msgstr "Ongeldige instructie "
+
+#: builtin/client/chatcommands.lua
+msgid "Issued command: "
+msgstr "Opgegeven instructie: "
+
+#: builtin/client/chatcommands.lua
+msgid "List online players"
+msgstr "Online spelers weergeven"
+
+#: builtin/client/chatcommands.lua
+msgid "Online players: "
+msgstr "Online spelers: "
+
+#: builtin/client/chatcommands.lua
+msgid "The out chat queue is now empty."
+msgstr "De wachtrij voor uitgezonden berichten is nu leeg."
+
+#: builtin/client/chatcommands.lua
+msgid "This command is disabled by server."
+msgstr "Deze instructie is uitgeschakeld door de server."
#: builtin/client/death_formspec.lua src/client/game.cpp
msgid "Respawn"
@@ -22,11 +58,42 @@ msgstr "Herboren worden"
msgid "You died"
msgstr "Je bent gestorven"
+#: builtin/common/chatcommands.lua
+msgid "Available commands:"
+msgstr "Beschikbare instructies:"
+
+#: builtin/common/chatcommands.lua
+msgid "Available commands: "
+msgstr "Beschikbare instructies: "
+
+#: builtin/common/chatcommands.lua
+msgid "Command not available: "
+msgstr "Instructie niet beschikbaar: "
+
+#: builtin/common/chatcommands.lua
+msgid "Get help for commands"
+msgstr "Krijg hulp voor instructies"
+
+#: builtin/common/chatcommands.lua
+msgid ""
+"Use '.help <cmd>' to get more information, or '.help all' to list everything."
+msgstr ""
+"Gebruik '.help <cmd>' om meer informatie te verkrijgen, of '.help all' om "
+"alles weer te geven."
+
+#: builtin/common/chatcommands.lua
+msgid "[all | <cmd>]"
+msgstr "[all | <commando>]"
+
#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp
msgid "OK"
msgstr "Oke"
#: builtin/fstk/ui.lua
+msgid "<none available>"
+msgstr "<geen beschikbaar>"
+
+#: builtin/fstk/ui.lua
msgid "An error occurred in a Lua script:"
msgstr "Er is een fout opgetreden in een Lua script:"
@@ -231,6 +298,10 @@ msgid "Install missing dependencies"
msgstr "Installeer ontbrekende afhankelijkheden"
#: builtin/mainmenu/dlg_contentstore.lua
+msgid "Install: Unsupported file type or broken archive"
+msgstr "Installeren: Niet ondersteund bestandstype of defect archief"
+
+#: builtin/mainmenu/dlg_contentstore.lua
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Mods"
msgstr "Mods"
@@ -537,7 +608,7 @@ msgstr "< Terug naar instellingen"
msgid "Browse"
msgstr "Bladeren"
-#: builtin/mainmenu/dlg_settings_advanced.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_settings.lua
msgid "Disabled"
msgstr "Uitgeschakeld"
@@ -562,7 +633,7 @@ msgid "Offset"
msgstr "afstand"
#: builtin/mainmenu/dlg_settings_advanced.lua
-msgid "Persistance"
+msgid "Persistence"
msgstr "Persistentie"
#: builtin/mainmenu/dlg_settings_advanced.lua
@@ -581,7 +652,7 @@ msgstr "Herstel de Standaardwaarde"
msgid "Scale"
msgstr "Schaal"
-#: builtin/mainmenu/dlg_settings_advanced.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_online.lua
msgid "Search"
msgstr "Zoeken"
@@ -674,14 +745,6 @@ msgstr ""
"Mod installeren: kan geen geschikte map naam vinden voor mod verzameling $1"
#: builtin/mainmenu/pkgmgr.lua
-msgid "Install: Unsupported file type \"$1\" or broken archive"
-msgstr "Installeren: niet ondersteund bestandstype \"$1\" of defect archief"
-
-#: builtin/mainmenu/pkgmgr.lua
-msgid "Install: file: \"$1\""
-msgstr "Installeer: bestand: \"$1\""
-
-#: builtin/mainmenu/pkgmgr.lua
msgid "Unable to find a valid mod or modpack"
msgstr "Niet mogelijk om geschikte map-naam vinden voor modverzameling $1"
@@ -706,9 +769,8 @@ msgid "Loading..."
msgstr "Laden..."
#: builtin/mainmenu/serverlistmgr.lua
-#, fuzzy
msgid "Public server list is disabled"
-msgstr "Client-side scripting is uitgeschakeld"
+msgstr "Publieke serverlijst is uitgeschakeld"
#: builtin/mainmenu/serverlistmgr.lua
msgid "Try reenabling public serverlist and check your internet connection."
@@ -716,6 +778,42 @@ msgstr ""
"Probeer de publieke serverlijst opnieuw in te schakelen en controleer de "
"internet verbinding."
+#: builtin/mainmenu/tab_about.lua
+msgid "About"
+msgstr "Over"
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Active Contributors"
+msgstr "Andere actieve ontwikkelaars"
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Active renderer:"
+msgstr "Actieve renderer:"
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Core Developers"
+msgstr "Hoofdontwikkelaars"
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Open User Data Directory"
+msgstr "Open de gebruikersdatamap"
+
+#: builtin/mainmenu/tab_about.lua
+msgid ""
+"Opens the directory that contains user-provided worlds, games, mods,\n"
+"and texture packs in a file manager / explorer."
+msgstr ""
+"Open de map die de door de gebruiker aangeleverde werelden, spellen, mods\n"
+"en textuur pakketten bevat in een bestandsbeheer toepassing / verkenner."
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Previous Contributors"
+msgstr "Vroegere ontwikkelaars"
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Previous Core Developers"
+msgstr "Vroegere hoofdontwikkelaars"
+
#: builtin/mainmenu/tab_content.lua
msgid "Browse online content"
msgstr "Content op internet bekijken"
@@ -756,38 +854,6 @@ msgstr "Pakket verwijderen"
msgid "Use Texture Pack"
msgstr "Gebruik textuurverzamelingen"
-#: builtin/mainmenu/tab_credits.lua
-msgid "Active Contributors"
-msgstr "Andere actieve ontwikkelaars"
-
-#: 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 "Open User Data Directory"
-msgstr "Open de gebruikersdatamap"
-
-#: builtin/mainmenu/tab_credits.lua
-msgid ""
-"Opens the directory that contains user-provided worlds, games, mods,\n"
-"and texture packs in a file manager / explorer."
-msgstr ""
-"Open de map die de door de gebruiker aangeleverde werelden, spellen, mods\n"
-"en textuur pakketten bevat in een bestandsbeheer toepassing / verkenner."
-
-#: builtin/mainmenu/tab_credits.lua
-msgid "Previous Contributors"
-msgstr "Vroegere ontwikkelaars"
-
-#: builtin/mainmenu/tab_credits.lua
-msgid "Previous Core Developers"
-msgstr "Vroegere hoofdontwikkelaars"
-
#: builtin/mainmenu/tab_local.lua
msgid "Announce Server"
msgstr "Server aanmelden bij de server-lijst"
@@ -816,7 +882,7 @@ msgstr "Server Hosten"
msgid "Install games from ContentDB"
msgstr "Installeer spellen van ContentDB"
-#: builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
msgid "Name"
msgstr "Naam"
@@ -828,7 +894,7 @@ msgstr "Nieuw"
msgid "No world created or selected!"
msgstr "Geen wereldnaam opgegeven of geen wereld aangemaakt!"
-#: builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
msgid "Password"
msgstr "Wachtwoord"
@@ -836,7 +902,7 @@ msgstr "Wachtwoord"
msgid "Play Game"
msgstr "Spel Starten"
-#: builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
msgid "Port"
msgstr "Poort"
@@ -857,8 +923,12 @@ msgid "Start Game"
msgstr "Start spel"
#: builtin/mainmenu/tab_online.lua
-msgid "Address / Port"
-msgstr "Server adres / Poort"
+msgid "Address"
+msgstr "Adres"
+
+#: builtin/mainmenu/tab_online.lua src/client/keycode.cpp
+msgid "Clear"
+msgstr "Wissen"
#: builtin/mainmenu/tab_online.lua
msgid "Connect"
@@ -868,34 +938,42 @@ msgstr "Verbinden"
msgid "Creative mode"
msgstr "Creatieve modus"
+#. ~ PvP = Player versus Player
#: builtin/mainmenu/tab_online.lua
-msgid "Damage enabled"
-msgstr "Verwondingen ingeschakeld"
+msgid "Damage / PvP"
+msgstr "Schade / PvP"
#: builtin/mainmenu/tab_online.lua
msgid "Del. Favorite"
msgstr "Verwijder Favoriete"
#: builtin/mainmenu/tab_online.lua
-msgid "Favorite"
+msgid "Favorites"
msgstr "Favorieten"
#: builtin/mainmenu/tab_online.lua
-msgid "Join Game"
-msgstr "Join spel"
+msgid "Incompatible Servers"
+msgstr "Incompatibele Servers"
#: builtin/mainmenu/tab_online.lua
-msgid "Name / Password"
-msgstr "Naam / Wachtwoord"
+msgid "Join Game"
+msgstr "Join spel"
#: builtin/mainmenu/tab_online.lua
msgid "Ping"
msgstr "Ping"
-#. ~ PvP = Player versus Player
#: builtin/mainmenu/tab_online.lua
-msgid "PvP enabled"
-msgstr "Spelergevechten ingeschakeld"
+msgid "Public Servers"
+msgstr "Publieke Servers"
+
+#: builtin/mainmenu/tab_online.lua
+msgid "Refresh"
+msgstr "Verversen"
+
+#: builtin/mainmenu/tab_online.lua
+msgid "Server Description"
+msgstr "Omschrijving van de Server"
#: builtin/mainmenu/tab_settings.lua
msgid "2x"
@@ -927,7 +1005,7 @@ msgstr "Schermafmetingen automatisch bewaren"
#: builtin/mainmenu/tab_settings.lua
msgid "Bilinear Filter"
-msgstr "Bilineaire Filtering"
+msgstr "Bilineair filteren"
#: builtin/mainmenu/tab_settings.lua src/client/game.cpp
msgid "Change Keys"
@@ -937,11 +1015,31 @@ msgstr "Toetsen aanpassen"
msgid "Connected Glass"
msgstr "Verbonden Glas"
+#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
+msgid "Dynamic shadows"
+msgstr "Dynamische schaduwen"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Dynamic shadows: "
+msgstr "Dynamische schaduwen: "
+
#: builtin/mainmenu/tab_settings.lua
msgid "Fancy Leaves"
msgstr "Mooie bladeren"
#: builtin/mainmenu/tab_settings.lua
+msgid "High"
+msgstr "Hoog"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Low"
+msgstr "Laag"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Medium"
+msgstr "Gemiddeld"
+
+#: builtin/mainmenu/tab_settings.lua
msgid "Mipmap"
msgstr "Mipmap"
@@ -1013,10 +1111,6 @@ msgstr "Vloeiende verlichting"
msgid "Texturing:"
msgstr "Textuur:"
-#: builtin/mainmenu/tab_settings.lua
-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 src/settings_translation_file.cpp
msgid "Tone Mapping"
msgstr "Tone-mapping"
@@ -1027,7 +1121,15 @@ msgstr "Toetsgrenswaarde: (px)"
#: builtin/mainmenu/tab_settings.lua
msgid "Trilinear Filter"
-msgstr "Tri-Lineare Filtering"
+msgstr "Trilineair filteren"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Ultra High"
+msgstr "Zeer Hoog"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Very Low"
+msgstr "Zeer Laag"
#: builtin/mainmenu/tab_settings.lua
msgid "Waving Leaves"
@@ -1041,7 +1143,7 @@ msgstr "Golvende Vloeistoffen"
msgid "Waving Plants"
msgstr "Bewegende planten"
-#: src/client/client.cpp
+#: src/client/client.cpp src/client/game.cpp
msgid "Connection timed out."
msgstr "Time-out bij opzetten verbinding."
@@ -1070,8 +1172,8 @@ msgid "Connection error (timed out?)"
msgstr "Fout bij verbinden (time out?)"
#: src/client/clientlauncher.cpp
-msgid "Could not find or load game \""
-msgstr "Kan het spel niet laden of niet vinden \""
+msgid "Could not find or load game: "
+msgstr "Kan het spel niet vinden of laden: "
#: src/client/clientlauncher.cpp
msgid "Invalid gamespec."
@@ -1101,18 +1203,6 @@ msgstr "Opgegeven wachtwoordbestand kan niet worden geopend: "
msgid "Provided world path doesn't exist: "
msgstr "Het gespecificeerde wereld-pad bestaat niet: "
-#. ~ DO NOT TRANSLATE THIS LITERALLY!
-#. This is a special string. Put either "no" or "yes"
-#. into the translation field (literally).
-#. Choose "yes" if the language requires use of the fallback
-#. font, "no" otherwise.
-#. The fallback font is (normally) required for languages with
-#. non-Latin script, like Chinese.
-#. When in doubt, test your translation.
-#: src/client/fontengine.cpp
-msgid "needs_fallback_font"
-msgstr "no"
-
#: src/client/game.cpp
msgid ""
"\n"
@@ -1126,14 +1216,6 @@ msgid "- Address: "
msgstr "- Adres: "
#: src/client/game.cpp
-msgid "- Creative Mode: "
-msgstr "- Creatieve Modus: "
-
-#: src/client/game.cpp
-msgid "- Damage: "
-msgstr "- Verwondingen: "
-
-#: src/client/game.cpp
msgid "- Mode: "
msgstr "- Mode(creatief/overleving): "
@@ -1155,6 +1237,15 @@ msgid "- Server Name: "
msgstr "- Server Naam: "
#: src/client/game.cpp
+msgid "A serialization error occurred:"
+msgstr "Er is een serialisatie-fout opgetreden:"
+
+#: src/client/game.cpp
+#, c-format
+msgid "Access denied. Reason: %s"
+msgstr "Toegang geweigerd. Reden: %s"
+
+#: src/client/game.cpp
msgid "Automatic forward disabled"
msgstr "Automatisch vooruit uitgeschakeld"
@@ -1163,6 +1254,22 @@ msgid "Automatic forward enabled"
msgstr "Automatisch vooruit ingeschakeld"
#: src/client/game.cpp
+msgid "Block bounds hidden"
+msgstr "Blokgrenzen verborgen"
+
+#: src/client/game.cpp
+msgid "Block bounds shown for all blocks"
+msgstr "Blokgrenzen getoond voor alle blokken"
+
+#: src/client/game.cpp
+msgid "Block bounds shown for current block"
+msgstr "Blokgrenzen getoond voor huidige blok"
+
+#: src/client/game.cpp
+msgid "Block bounds shown for nearby blocks"
+msgstr "Blokgrenzen getoond voor nabije blokken"
+
+#: src/client/game.cpp
msgid "Camera update disabled"
msgstr "Camera-update uitgeschakeld"
@@ -1171,6 +1278,10 @@ msgid "Camera update enabled"
msgstr "Camera-update ingeschakeld"
#: src/client/game.cpp
+msgid "Can't show block bounds (need 'basic_debug' privilege)"
+msgstr "Kan blokgrenzen niet tonen (privilege 'basic_debug' is nodig)"
+
+#: src/client/game.cpp
msgid "Change Password"
msgstr "Verander wachtwoord"
@@ -1183,6 +1294,10 @@ msgid "Cinematic mode enabled"
msgstr "Filmische modus ingeschakeld"
#: src/client/game.cpp
+msgid "Client disconnected"
+msgstr "Gebruiker heeft verbinding verbroken"
+
+#: src/client/game.cpp
msgid "Client side scripting is disabled"
msgstr "Client-side scripting is uitgeschakeld"
@@ -1191,6 +1306,10 @@ msgid "Connecting to server..."
msgstr "Verbinding met de server wordt gemaakt..."
#: src/client/game.cpp
+msgid "Connection failed for unknown reason"
+msgstr "Verbinding mislukt om onbekende reden"
+
+#: src/client/game.cpp
msgid "Continue"
msgstr "Verder spelen"
@@ -1228,6 +1347,11 @@ msgstr ""
"-%s: chat\n"
#: src/client/game.cpp
+#, c-format
+msgid "Couldn't resolve address: %s"
+msgstr "Adres kon niet opgezocht worden: %s"
+
+#: src/client/game.cpp
msgid "Creating client..."
msgstr "Gebruiker aanmaken..."
@@ -1356,6 +1480,10 @@ msgid "Minimap currently disabled by game or mod"
msgstr "Mini-kaart momenteel uitgeschakeld door spel of mod"
#: src/client/game.cpp
+msgid "Multiplayer"
+msgstr "Multiplayer"
+
+#: src/client/game.cpp
msgid "Noclip mode disabled"
msgstr "Noclip-modus uitgeschakeld"
@@ -1429,6 +1557,21 @@ msgstr "Geluid niet gedempt"
#: src/client/game.cpp
#, c-format
+msgid "The server is probably running a different version of %s."
+msgstr "De server gebruikt waarschijnlijk een andere versie van %s."
+
+#: src/client/game.cpp
+#, c-format
+msgid "Unable to connect to %s because IPv6 is disabled"
+msgstr "Kon niet verbinden met %s omdat IPv6 uitgeschakeld werd"
+
+#: src/client/game.cpp
+#, c-format
+msgid "Unable to listen on %s because IPv6 is disabled"
+msgstr "Kon niet luisteren naar %s omdat IPv6 uitgeschakeld werd"
+
+#: src/client/game.cpp
+#, c-format
msgid "Viewing range changed to %d"
msgstr "Kijkbereik gewijzigd naar %d"
@@ -1497,10 +1640,6 @@ msgid "Caps Lock"
msgstr "Hoofdletter vergrendeling"
#: src/client/keycode.cpp
-msgid "Clear"
-msgstr "Wissen"
-
-#: src/client/keycode.cpp
msgid "Control"
msgstr "Control"
@@ -1765,6 +1904,14 @@ msgstr "Minimap in oppervlaktemodus, Zoom x%d"
msgid "Minimap in texture mode"
msgstr "Minimap textuur modus"
+#: src/gui/guiChatConsole.cpp
+msgid "Failed to open webpage"
+msgstr "Openen van webpagina mislukt"
+
+#: src/gui/guiChatConsole.cpp
+msgid "Opening webpage"
+msgstr "Website openen"
+
#: src/gui/guiConfirmRegistration.cpp src/gui/guiPasswordChange.cpp
msgid "Passwords do not match!"
msgstr "De wachtwoorden zijn niet gelijk!"
@@ -1795,8 +1942,8 @@ msgid "Proceed"
msgstr "Doorgaan"
#: src/gui/guiKeyChangeMenu.cpp
-msgid "\"Special\" = climb down"
-msgstr "\"Speciaal\" = naar beneden klimmen"
+msgid "\"Aux1\" = climb down"
+msgstr "\"Aux1\" = naar beneden klimmen"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Autoforward"
@@ -1807,10 +1954,18 @@ msgid "Automatic jumping"
msgstr "Automatisch springen"
#: src/gui/guiKeyChangeMenu.cpp
+msgid "Aux1"
+msgstr "Aux1"
+
+#: src/gui/guiKeyChangeMenu.cpp
msgid "Backward"
msgstr "Achteruit"
#: src/gui/guiKeyChangeMenu.cpp
+msgid "Block bounds"
+msgstr "Blok grenzen"
+
+#: src/gui/guiKeyChangeMenu.cpp
msgid "Change camera"
msgstr "Camera veranderen"
@@ -1901,10 +2056,6 @@ msgid "Sneak"
msgstr "Sluipen"
#: src/gui/guiKeyChangeMenu.cpp
-msgid "Special"
-msgstr "Speciaal"
-
-#: src/gui/guiKeyChangeMenu.cpp
msgid "Toggle HUD"
msgstr "Schakel HUD in/uit"
@@ -1965,8 +2116,9 @@ msgid "Muted"
msgstr "Gedempt"
#: src/gui/guiVolumeChange.cpp
-msgid "Sound Volume: "
-msgstr "Geluidsvolume: "
+#, c-format
+msgid "Sound Volume: %d%%"
+msgstr "Geluidsvolume: %d%%"
#. ~ Imperative, as in "Enter/type in text".
#. Don't forget the space.
@@ -1992,12 +2144,12 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"(Android) Use virtual joystick to trigger \"aux\" button.\n"
-"If enabled, virtual joystick will also tap \"aux\" button when out of main "
+"(Android) Use virtual joystick to trigger \"Aux1\" button.\n"
+"If enabled, virtual joystick will also tap \"Aux1\" button when out of main "
"circle."
msgstr ""
-"(Android) Gebruik virtuele joystick om de \"aux\" -knop te activeren. \n"
-"Indien ingeschakeld, zal de virtuele joystick ook op de \"aux\" -knop tikken "
+"(Android) Gebruik virtuele joystick om de \"aux\"-knop te activeren.\n"
+"Indien ingeschakeld, zal de virtuele joystick ook op de \"aux\"-knop tikken "
"wanneer deze buiten de hoofdcirkel is."
#: src/settings_translation_file.cpp
@@ -2227,6 +2379,12 @@ msgstr ""
"voor 4k-schermen."
#: src/settings_translation_file.cpp
+msgid "Adjust the detected display density, used for scaling UI elements."
+msgstr ""
+"Pas de gedetecteerde weergavedichtheid aan, gebruikt om elementen uit de "
+"gebruikersinterface te schalen."
+
+#: src/settings_translation_file.cpp
#, c-format
msgid ""
"Adjusts the density of the floatland layer.\n"
@@ -2279,7 +2437,7 @@ msgstr "Versterkt de valleien."
#: src/settings_translation_file.cpp
msgid "Anisotropic filtering"
-msgstr "Anisotropische filtering"
+msgstr "Anisotropisch filteren"
#: src/settings_translation_file.cpp
msgid "Announce server"
@@ -2365,6 +2523,14 @@ msgid "Autoscaling mode"
msgstr "Automatische schaalmodus"
#: src/settings_translation_file.cpp
+msgid "Aux1 key"
+msgstr "Aux1-toets"
+
+#: src/settings_translation_file.cpp
+msgid "Aux1 key for climbing/descending"
+msgstr "Aux1-toets voor klimmen/afdalen"
+
+#: src/settings_translation_file.cpp
msgid "Backward key"
msgstr "Achteruit"
@@ -2394,7 +2560,7 @@ msgstr "Strand geluid grenswaarde"
#: src/settings_translation_file.cpp
msgid "Bilinear filtering"
-msgstr "Bi-Lineaire filtering"
+msgstr "Bilineair filteren"
#: src/settings_translation_file.cpp
msgid "Bind address"
@@ -2409,10 +2575,6 @@ msgid "Biome noise"
msgstr "Biome-ruis"
#: src/settings_translation_file.cpp
-msgid "Bits per pixel (aka color depth) in fullscreen mode."
-msgstr "Aantal bits per pixel (oftewel: kleurdiepte) in full-screen modus."
-
-#: src/settings_translation_file.cpp
msgid "Block send optimize distance"
msgstr "Blok verzend optimalisatie afstand"
@@ -2518,6 +2680,14 @@ msgstr ""
"Waar 0,0 het minimale lichtniveau is, is 1,0 het maximale lichtniveau."
#: src/settings_translation_file.cpp
+msgid "Chat command time message threshold"
+msgstr "Tijdsdrempel voor berichten chatcommando's"
+
+#: src/settings_translation_file.cpp
+msgid "Chat commands"
+msgstr "Chatcommando's"
+
+#: src/settings_translation_file.cpp
msgid "Chat font size"
msgstr "Chat lettergrootte"
@@ -2550,8 +2720,8 @@ msgid "Chat toggle key"
msgstr "Toets voor tonen/verbergen chat"
#: src/settings_translation_file.cpp
-msgid "Chatcommands"
-msgstr "Chat-commando's"
+msgid "Chat weblinks"
+msgstr "Weblinks chat"
#: src/settings_translation_file.cpp
msgid "Chunk size"
@@ -2570,6 +2740,14 @@ msgid "Clean transparent textures"
msgstr "Schone transparante texturen"
#: src/settings_translation_file.cpp
+msgid ""
+"Clickable weblinks (middle-click or Ctrl+left-click) enabled in chat console "
+"output."
+msgstr ""
+"Aanklikbare weblinks (middelklik of ctrl+linkermuisklik) ingeschakedl in "
+"console-uitvoer chat."
+
+#: src/settings_translation_file.cpp
msgid "Client"
msgstr "Cliënt"
@@ -2614,6 +2792,10 @@ msgid "Colored fog"
msgstr "Gekleurde mist"
#: src/settings_translation_file.cpp
+msgid "Colored shadows"
+msgstr "Gekleurde schaduwen"
+
+#: src/settings_translation_file.cpp
msgid ""
"Comma-separated list of flags to hide in the content repository.\n"
"\"nonfree\" can be used to hide packages which do not qualify as 'free "
@@ -2656,6 +2838,30 @@ msgid "Command key"
msgstr "Commando-toets"
#: src/settings_translation_file.cpp
+msgid ""
+"Compression level to use when saving mapblocks to disk.\n"
+"-1 - use default compression level\n"
+"0 - least compression, fastest\n"
+"9 - best compression, slowest"
+msgstr ""
+"Compressieniveau bij bewaren mapblokken op harde schijf.\n"
+"-1 - standaardcompressieniveau\n"
+"0 - minste compressie, snelst\n"
+"9 - meeste compressie, traagst"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Compression level to use when sending mapblocks to the client.\n"
+"-1 - use default compression level\n"
+"0 - least compression, fastest\n"
+"9 - best compression, slowest"
+msgstr ""
+"Compressieniveau bij versturen mapblokken naar cliënt.\n"
+"-1 - standaardcompressieniveau\n"
+"0 - minste compressie, snelst\n"
+"9 - meeste compressie, traagst"
+
+#: src/settings_translation_file.cpp
msgid "Connect glass"
msgstr "Verbind glas"
@@ -2759,10 +2965,10 @@ msgstr "Draadkruis-alphawaarde"
#: src/settings_translation_file.cpp
msgid ""
"Crosshair alpha (opaqueness, between 0 and 255).\n"
-"Also controls the object crosshair color"
+"This also applies to the object crosshair."
msgstr ""
-"Draadkruis-alphawaarde (ondoorzichtigheid; tussen 0 en 255).\n"
-"Controleert ook het object draadkruis kleur"
+"Alfawaarde crosshair (ondoorzichtigheid, tussen 0 en 255).\n"
+"Ook van toepassing op de crosshair voor objecten."
#: src/settings_translation_file.cpp
msgid "Crosshair color"
@@ -2842,11 +3048,13 @@ msgstr "Standaard voorwerpenstapel grootte"
#: src/settings_translation_file.cpp
msgid ""
-"Default timeout for cURL, stated in milliseconds.\n"
-"Only has an effect if compiled with cURL."
+"Define shadow filtering quality.\n"
+"This simulates the soft shadows effect by applying a PCF or Poisson disk\n"
+"but also uses more resources."
msgstr ""
-"Standaard time-out voor cURL, in milliseconden.\n"
-"Wordt alleen gebruikt indien gecompileerd met cURL ingebouwd."
+"Definieer kwaliteit schaduwfiltering\n"
+"Dit simuleert zachte schaduwen d.m.v. een PCF of Poisson-schijf\n"
+"maar is ook gebruiksintensiever."
#: src/settings_translation_file.cpp
msgid "Defines areas where trees have apples."
@@ -2973,6 +3181,10 @@ msgid "Disallow empty passwords"
msgstr "Lege wachtwoorden niet toestaan"
#: src/settings_translation_file.cpp
+msgid "Display Density Scaling Factor"
+msgstr "Weergavedichtheid-schaalfactor"
+
+#: src/settings_translation_file.cpp
msgid "Domain name of server, to be displayed in the serverlist."
msgstr "Domeinnaam van de server; wordt getoond in de serverlijst."
@@ -3002,7 +3214,7 @@ msgstr "Dungeon minimaal Y"
#: src/settings_translation_file.cpp
msgid "Dungeon noise"
-msgstr "Kerker ruis"
+msgstr "Lawaai in kerkers"
#: src/settings_translation_file.cpp
msgid ""
@@ -3021,13 +3233,31 @@ msgstr ""
"Deze ondersteuning is experimenteel en de API kan wijzigen."
#: src/settings_translation_file.cpp
+msgid ""
+"Enable Poisson disk filtering.\n"
+"On true uses Poisson disk to make \"soft shadows\". Otherwise uses PCF "
+"filtering."
+msgstr ""
+"Filteren d.m.v. Poisson-schijf inschakelen.\n"
+"Indien ingeschakeld, wordt een Poisson-schijf gebruikt om zachte schaduwen "
+"te genereren. In het andere geval wordt PCF-filteren toegepast."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable colored shadows.\n"
+"On true translucent nodes cast colored shadows. This is expensive."
+msgstr ""
+"Gekleurde schaduwen inschakelen.\n"
+"Indien ingeschakeld werpen doorzichtige nodes gekleurde schaduwen af. Dit is "
+"arbeidsintensief."
+
+#: src/settings_translation_file.cpp
msgid "Enable console window"
msgstr "Schakel het console venster in"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Enable creative mode for all players"
-msgstr "Schakel creatieve modus in voor nieuwe kaarten."
+msgstr "Schakel creatieve modus in voor alle spelers"
#: src/settings_translation_file.cpp
msgid "Enable joysticks"
@@ -3162,6 +3392,12 @@ msgstr ""
"Het wijzigen van deze instelling vereist een herstart."
#: src/settings_translation_file.cpp
+msgid ""
+"Enables tradeoffs that reduce CPU load or increase rendering performance\n"
+"at the expense of minor visual glitches that do not impact game playability."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Engine profiling data print interval"
msgstr "Profilergegevens print interval"
@@ -3207,18 +3443,6 @@ msgid "Fallback font path"
msgstr "Terugvallettertype"
#: src/settings_translation_file.cpp
-msgid "Fallback font shadow"
-msgstr "Terugval-font schaduw"
-
-#: src/settings_translation_file.cpp
-msgid "Fallback font shadow alpha"
-msgstr "Terugval-font schaduw alphawaarde"
-
-#: src/settings_translation_file.cpp
-msgid "Fallback font size"
-msgstr "Terugval-fontgrootte"
-
-#: src/settings_translation_file.cpp
msgid "Fast key"
msgstr "Snel toets"
@@ -3236,11 +3460,11 @@ msgstr "Snelle modus"
#: src/settings_translation_file.cpp
msgid ""
-"Fast movement (via the \"special\" key).\n"
+"Fast movement (via the \"Aux1\" key).\n"
"This requires the \"fast\" privilege on the server."
msgstr ""
-"Snelle beweging (via de \"speciaal\" toets). \n"
-"Dit vereist het \"snel bewegen\" recht op de server."
+"Snelle beweging (via de \"Aux1\"-toets).\n"
+"Dit vereist het recht \"snel bewegen\" op de server."
#: src/settings_translation_file.cpp
msgid "Field of view"
@@ -3275,15 +3499,16 @@ msgstr "Filmisch tone-mapping"
#: 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."
+"which PNG optimizers usually discard, often resulting in dark or\n"
+"light edges to transparent textures. Apply a filter to clean that up\n"
+"at texture load time. This is automatically enabled if mipmapping is enabled."
msgstr ""
-"Gefilterde texturen kunnen RGB-waarden vermengen met transparante buren,\n"
-"die door PNG-optimalisators vaak verwijderd worden. Dit kan donkere of "
-"lichte\n"
-"randen bij transparante texturen tot gevolg hebben.\n"
-"Gebruik dit filter om dat tijdens het laden van texturen te herstellen."
+"Gefilterde texturen kunnen RGB-waarden mengen met die van volledig\n"
+"transparante buren, die door PNG-optimalisatoren vaak verwijderd worden,\n"
+"wat vaak voor donkere of lichtere randen bij transparante texturen zorgt.\n"
+"Gebruik een filter om dat tijdens het laden van texturen te herstellen. Dit "
+"wordt\n"
+"automatisch ingeschakeld als mipmapping aan staat."
#: src/settings_translation_file.cpp
msgid "Filtering"
@@ -3376,15 +3601,17 @@ msgid "Font size"
msgstr "Lettergrootte"
#: src/settings_translation_file.cpp
-msgid "Font size of the default font in point (pt)."
-msgstr "Lettergrootte van het standaardlettertype in punt (pt)."
+msgid "Font size divisible by"
+msgstr ""
#: src/settings_translation_file.cpp
-msgid "Font size of the fallback font in point (pt)."
-msgstr "Lettergrootte van het fallback-lettertype in punt (pt)."
+#, fuzzy
+msgid "Font size of the default font where 1 unit = 1 pixel at 96 DPI"
+msgstr "Lettergrootte van het standaardlettertype in punt (pt)."
#: src/settings_translation_file.cpp
-msgid "Font size of the monospace font in point (pt)."
+#, fuzzy
+msgid "Font size of the monospace font where 1 unit = 1 pixel at 96 DPI"
msgstr "Lettergrootte van het monospace-lettertype in punt (pt)."
#: src/settings_translation_file.cpp
@@ -3397,6 +3624,17 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"For pixel-style fonts that do not scale well, this ensures that font sizes "
+"used\n"
+"with this font will always be divisible by this value, in pixels. For "
+"instance,\n"
+"a pixel font 16 pixels tall should have this set to 16, so it will only ever "
+"be\n"
+"sized 16, 32, 48, etc., so a mod requesting a size of 25 will get 32."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Format of player chat messages. The following strings are valid "
"placeholders:\n"
"@name, @message, @timestamp (optional)"
@@ -3461,10 +3699,6 @@ msgid "Fraction of the visible distance at which fog starts to be rendered"
msgstr "Fractie van de zichtbare afstand vanaf waar de nevel wordt getoond"
#: src/settings_translation_file.cpp
-msgid "FreeType fonts"
-msgstr "Freetype lettertypes"
-
-#: src/settings_translation_file.cpp
msgid ""
"From how far blocks are generated for clients, stated in mapblocks (16 "
"nodes)."
@@ -3500,10 +3734,6 @@ msgid "Full screen"
msgstr "Volledig scherm"
#: src/settings_translation_file.cpp
-msgid "Full screen BPP"
-msgstr "BPP bij volledig scherm"
-
-#: src/settings_translation_file.cpp
msgid "Fullscreen mode."
msgstr "Volledig scherm modus."
@@ -3527,16 +3757,13 @@ msgstr "Algemene callbacks"
msgid ""
"Global map generation attributes.\n"
"In Mapgen v6 the 'decorations' flag controls all decorations except trees\n"
-"and junglegrass, in all other mapgens this flag controls all decorations."
+"and jungle grass, in all other mapgens this flag controls all decorations."
msgstr ""
-"Algemene wereldgenerator instellingen.\n"
-"De vlag 'decorations' bepaalt de aanwezigheid van alle decoraties, behalve\n"
-"bij generator v6,\n"
-"waar de aanwezigheid van bomen en oerwoud-gras er niet\n"
-"door beïnvloed wordt.\n"
-"Vlaggen die niet in de lijst van vlaggen staan, behouden hun standaard-"
-"waarde.\n"
-"Zet \"no\" voor een vlag om hem expliciet uit te zetten."
+"Algemene wereldgeneratorinstellingen.\n"
+"In Mapgen v6 beïnvloedt de vlag \"decorations\" alle decoraties behalve "
+"bomen.\n"
+"en junglegras. In alle andere generatoren beïnvloedt deze vlag alle "
+"decoraties."
#: src/settings_translation_file.cpp
msgid ""
@@ -3619,8 +3846,11 @@ msgid "Heat noise"
msgstr "Hitte geluid"
#: src/settings_translation_file.cpp
-msgid "Height component of the initial window size."
-msgstr "Aanvangshoogte van het venster."
+msgid ""
+"Height component of the initial window size. Ignored in fullscreen mode."
+msgstr ""
+"Hoogtecomponent van de initiële grootte van het venster. Wordt genegeerd in "
+"fullscreen-modus."
#: src/settings_translation_file.cpp
msgid "Height noise"
@@ -3631,10 +3861,6 @@ msgid "Height select noise"
msgstr "Hoogte-selectie geluid"
#: src/settings_translation_file.cpp
-msgid "High-precision FPU"
-msgstr "Hoge-nauwkeurigheid FPU"
-
-#: src/settings_translation_file.cpp
msgid "Hill steepness"
msgstr "Steilheid van de heuvels"
@@ -3879,13 +4105,11 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"If disabled, \"special\" key is used to fly fast if both fly and fast mode "
-"are\n"
+"If disabled, \"Aux1\" key is used to fly fast if both fly and fast mode are\n"
"enabled."
msgstr ""
-"Indien uitgeschakeld, dan wordt met de \"speciaal\" toets snel gevlogen "
-"wanneer\n"
-"de \"vliegen\" en de \"snel\" modus aanstaan."
+"Indien uitgeschakeld wordt de \"Aux1\"-toets gebruikt om snel te vliegen\n"
+"als modi \"vliegen\" en \"snel\" beide aan staan."
#: src/settings_translation_file.cpp
msgid ""
@@ -3914,12 +4138,13 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"If enabled, \"special\" key instead of \"sneak\" key is used for climbing "
-"down and\n"
+"If enabled, \"Aux1\" key instead of \"Sneak\" key is used for climbing down "
+"and\n"
"descending."
msgstr ""
-"Indien aangeschakeld, dan wordt de \"speciaal\" toets gebruikt voor\n"
-"omlaagklimmen en dalen i.p.v. de \"sluipen\" toets."
+"Indien ingeschakeld wordt de \"Aux1\"-toets gebruikt i.p.v. de \"Sneak\"-"
+"toets om\n"
+"omlaag te klimmen en af te dalen."
#: src/settings_translation_file.cpp
msgid ""
@@ -3978,6 +4203,14 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"If the execution of a chat command takes longer than this specified time in\n"
+"seconds, add the time information to the chat command message"
+msgstr ""
+"Als het uitvoeren van een chatcommando langer duurt dan de opgegeven tijd\n"
+"in seconden, voeg dan tijdsinformatie toe aan het bijhorende bericht"
+
+#: src/settings_translation_file.cpp
+msgid ""
"If the file size of debug.txt exceeds the number of megabytes specified in\n"
"this setting when it is opened, the file is moved to debug.txt.1,\n"
"deleting an older debug.txt.1 if it exists.\n"
@@ -4035,8 +4268,8 @@ msgstr ""
"het core/builtin-gedeelte van de server"
#: src/settings_translation_file.cpp
-msgid "Instrument chatcommands on registration."
-msgstr "Profileer chat-commando's bij het registreren."
+msgid "Instrument chat commands on registration."
+msgstr "Profileer chatcommando's bij het registreren."
#: src/settings_translation_file.cpp
msgid ""
@@ -4129,8 +4362,8 @@ msgid "Joystick button repetition interval"
msgstr "Joystick-knop herhalingsinterval"
#: src/settings_translation_file.cpp
-msgid "Joystick deadzone"
-msgstr "Joystick dode zone"
+msgid "Joystick dead zone"
+msgstr "Dode zone Joystick"
#: src/settings_translation_file.cpp
msgid "Joystick frustum sensitivity"
@@ -5156,11 +5389,6 @@ msgstr ""
"en kijkrichting."
#: src/settings_translation_file.cpp
-msgid "Makes DirectX work with LuaJIT. Disable if it causes troubles."
-msgstr ""
-"Maakt dat DirectX werkt met LuaJIT. Schakel dit uit als het problemen geeft."
-
-#: src/settings_translation_file.cpp
msgid "Makes all liquids opaque"
msgstr "Maak alle vloeistoffen ondoorzichtig"
@@ -5252,6 +5480,10 @@ msgid "Map save interval"
msgstr "Interval voor opslaan wereld"
#: src/settings_translation_file.cpp
+msgid "Map shadows update frames"
+msgstr "Aantal frames voor bijwerken schaduwmap"
+
+#: src/settings_translation_file.cpp
msgid "Mapblock limit"
msgstr "Max aantal wereldblokken"
@@ -5364,6 +5596,10 @@ msgstr ""
"gepauzeerd is."
#: src/settings_translation_file.cpp
+msgid "Maximum distance to render shadows."
+msgstr "Maximumafstand bij renderen schaduwen."
+
+#: src/settings_translation_file.cpp
msgid "Maximum forceloaded blocks"
msgstr "Maximaal aantal geforceerd geladen blokken"
@@ -5496,12 +5732,22 @@ msgstr ""
"'0' om de wachtrij uit te schakelen en '-1' om de wachtrij oneindig te maken."
#: src/settings_translation_file.cpp
-msgid "Maximum time in ms a file download (e.g. a mod download) may take."
+msgid ""
+"Maximum time a file download (e.g. a mod download) may take, stated in "
+"milliseconds."
msgstr ""
-"Maximale duur voor een download van een bestand (bijv. een mod). In "
+"Maximale duur voor het downloaden van een bestand (bv. een mod), in "
"milliseconden."
#: src/settings_translation_file.cpp
+msgid ""
+"Maximum time an interactive request (e.g. server list fetch) may take, "
+"stated in milliseconds."
+msgstr ""
+"Maximale duur voor het afhandelen van een interactieve aanvraag (bv. ophalen "
+"serverlijst), in milliseconden."
+
+#: src/settings_translation_file.cpp
msgid "Maximum users"
msgstr "Maximaal aantal gebruikers"
@@ -5565,8 +5811,8 @@ msgid "Mod channels"
msgstr "Mod-kanalen"
#: src/settings_translation_file.cpp
-msgid "Modifies the size of the hudbar elements."
-msgstr "Veranderd de grootte van de HUDbar elementen."
+msgid "Modifies the size of the HUD elements."
+msgstr "Verandert de grootte van de HUD-elementen."
#: src/settings_translation_file.cpp
msgid "Monospace font path"
@@ -5577,6 +5823,11 @@ msgid "Monospace font size"
msgstr "Vaste-breedte font grootte"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Monospace font size divisible by"
+msgstr "Vaste-breedte font grootte"
+
+#: src/settings_translation_file.cpp
msgid "Mountain height noise"
msgstr "Berg-hoogte ruis"
@@ -5732,15 +5983,12 @@ 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"
+"This is a trade-off between SQLite transaction overhead and\n"
"memory consumption (4096=100MB, as a rule of thumb)."
msgstr ""
-"Aantal extra blokken (van 16x16x16 nodes) dat door het commando '/"
-"clearobjects'\n"
-"tegelijk geladen mag worden.\n"
-"Dit aantal is een compromis tussen snelheid enerzijds (vanwege de overhead "
-"van een sqlite\n"
-"transactie), en geheugengebruik anderzijds (4096 = ca. 100MB)."
+"Aantal extra blokken dat '/clearobjects' tegelijk mag laden.\n"
+"Dit is een compromis tussen overhead van SQLite-transacties en\n"
+"geheugengebruik (als vuistregel is 4096 gelijk aan 100 MB)."
#: src/settings_translation_file.cpp
msgid "Online Content Repository"
@@ -5759,13 +6007,6 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Opaqueness (alpha) of the shadow behind the fallback font, between 0 and 255."
-msgstr ""
-"Ondoorzichtigheid (alpha) van de schaduw achter het fallback-lettertype, "
-"tussen 0 en 255."
-
-#: src/settings_translation_file.cpp
-msgid ""
"Open the pause menu when the window's focus is lost. Does not pause if a "
"formspec is\n"
"open."
@@ -5774,10 +6015,13 @@ msgstr ""
"een formspec geopend is."
#: src/settings_translation_file.cpp
+msgid "Optional override for chat weblink color."
+msgstr "Optionele overschrijving van de kleur van weblinks in chat."
+
+#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
-"Path of the fallback font.\n"
-"If “freetype†setting is enabled: Must be a TrueType font.\n"
-"If “freetype†setting is disabled: Must be a bitmap or XML vectors font.\n"
+"Path of the fallback font. Must be a TrueType font.\n"
"This font will be used for certain languages or if the default font is "
"unavailable."
msgstr ""
@@ -5812,10 +6056,9 @@ msgstr ""
"Pad van de texturen-map. Naar texturen wordt gezocht beginnend bij deze map."
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
-"Path to the default font.\n"
-"If “freetype†setting is enabled: Must be a TrueType font.\n"
-"If “freetype†setting is disabled: Must be a bitmap or XML vectors font.\n"
+"Path to the default font. Must be a TrueType font.\n"
"The fallback font will be used if the font cannot be loaded."
msgstr ""
"Pad naar het standaardlettertype. \n"
@@ -5827,10 +6070,9 @@ msgstr ""
"geladen."
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
-"Path to the monospace font.\n"
-"If “freetype†setting is enabled: Must be a TrueType font.\n"
-"If “freetype†setting is disabled: Must be a bitmap or XML vectors font.\n"
+"Path to the monospace font. Must be a TrueType font.\n"
"This font is used for e.g. the console and profiler screen."
msgstr ""
"Pad naar het monospace-lettertype. \n"
@@ -5894,6 +6136,10 @@ msgid "Player versus player"
msgstr "Speler tegen speler"
#: src/settings_translation_file.cpp
+msgid "Poisson filtering"
+msgstr "Poisson-filteren"
+
+#: src/settings_translation_file.cpp
msgid ""
"Port to connect to (UDP).\n"
"Note that the port field in the main menu overrides this setting."
@@ -5946,14 +6192,14 @@ msgstr "Adres om te luisteren naar Prometheus"
#: src/settings_translation_file.cpp
msgid ""
"Prometheus listener address.\n"
-"If minetest is compiled with ENABLE_PROMETHEUS option enabled,\n"
+"If Minetest is compiled with ENABLE_PROMETHEUS option enabled,\n"
"enable metrics listener for Prometheus on that address.\n"
-"Metrics can be fetch on http://127.0.0.1:30000/metrics"
+"Metrics can be fetched on http://127.0.0.1:30000/metrics"
msgstr ""
"Adres om te luisteren naar Prometheus.\n"
-"Als Minetest is gecompileerd met de optie ENABLE_PROMETHEUS,\n"
-"zal dit adres gebruikt worden om naar Prometheus te luisteren.\n"
-"Meetwaarden zullen kunnen bekeken worden op http://127.0.0.1:30000/metrics"
+"Indien Minetest gecompileerd werd met de optie ENABLE_PROMETHEUS,\n"
+"dan zal dit adres gebruikt worden om naar Prometheus te luisteren.\n"
+"Meetwaarden kunnen opgehaald worden op http://127.0.0.1:30000/metrics"
#: src/settings_translation_file.cpp
msgid "Proportion of large caves that contain liquid."
@@ -6288,6 +6534,43 @@ msgstr "Maximaal aantal tekens voor chatberichten van gebruikers instellen."
#: src/settings_translation_file.cpp
msgid ""
+"Set the shadow strength.\n"
+"Lower value means lighter shadows, higher value means darker shadows."
+msgstr ""
+"Schaduwsterkte instellen.\n"
+"Een lagere waarde betekent lichtere schaduwen, een hogere waarde donkerdere "
+"schaduwen."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set the soft shadow radius size.\n"
+"Lower values mean sharper shadows, bigger values mean softer shadows.\n"
+"Minimum value: 1.0; maximum value: 10.0"
+msgstr ""
+"Radiusgrootte zachte schaduwen instellen.\n"
+"Lagere waarden betekenen scherpere schaduwen, hogere waarden zachtere.\n"
+"Minimumwaarde: 1.0; maximumwaarde: 10.0"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set the tilt of Sun/Moon orbit in degrees.\n"
+"Value of 0 means no tilt / vertical orbit.\n"
+"Minimum value: 0.0; maximum value: 60.0"
+msgstr ""
+"Tilt van baan zon/maan in graden instellen:\n"
+"Een waarde van 0 betekent geen tilt / verticale baan.\n"
+"Minimumwaarde: 0.0; maximumwaarde: 60.0"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set to true to enable Shadow Mapping.\n"
+"Requires shaders to be enabled."
+msgstr ""
+"Schakel in om schaduwmapping in te schakelen.\n"
+"Dit vereist dat 'shaders' ook aan staan."
+
+#: src/settings_translation_file.cpp
+msgid ""
"Set to true to enable waving leaves.\n"
"Requires shaders to be enabled."
msgstr ""
@@ -6311,6 +6594,16 @@ msgstr ""
"Dit vereist dat 'shaders' ook aanstaan."
#: src/settings_translation_file.cpp
+msgid ""
+"Sets shadow texture quality to 32 bits.\n"
+"On false, 16 bits texture will be used.\n"
+"This can cause much more artifacts in the shadow."
+msgstr ""
+"Schaduwtextuurkwaliteit op 32-bits zetten.\n"
+"Indien uitgeschakeld worden 16-bits texturen gebruikt,\n"
+"wat voor meer ruis in schaduwen kan zorgen."
+
+#: src/settings_translation_file.cpp
msgid "Shader path"
msgstr "Shader pad"
@@ -6326,6 +6619,22 @@ msgstr ""
"Alleen mogelijk met OpenGL."
#: src/settings_translation_file.cpp
+msgid "Shadow filter quality"
+msgstr "Kwaliteit schaduwfilter"
+
+#: src/settings_translation_file.cpp
+msgid "Shadow map max distance in nodes to render shadows"
+msgstr "Maximumafstand in nodes om schaduwen schaduwmap op te renderen"
+
+#: src/settings_translation_file.cpp
+msgid "Shadow map texture in 32 bits"
+msgstr "32-bits-schaduwmaptexturen"
+
+#: src/settings_translation_file.cpp
+msgid "Shadow map texture size"
+msgstr "Textuurgrootte schaduwmap"
+
+#: src/settings_translation_file.cpp
msgid ""
"Shadow offset (in pixels) of the default font. If 0, then shadow will not be "
"drawn."
@@ -6334,12 +6643,8 @@ msgstr ""
"getekend."
#: src/settings_translation_file.cpp
-msgid ""
-"Shadow offset (in pixels) of the fallback font. If 0, then shadow will not "
-"be drawn."
-msgstr ""
-"Fontschaduw afstand van het standaard lettertype (in beeldpunten). Indien 0, "
-"dan wordt geen schaduw getekend."
+msgid "Shadow strength"
+msgstr "Schaduwsterkte"
#: src/settings_translation_file.cpp
msgid "Shape of the minimap. Enabled = round, disabled = square."
@@ -6362,9 +6667,8 @@ msgstr ""
"Een herstart is noodzakelijk om de wijziging te activeren."
#: src/settings_translation_file.cpp
-#, fuzzy
-msgid "Show nametag backgrounds by default"
-msgstr "Standaard vetgedrukt"
+msgid "Show name tag backgrounds by default"
+msgstr "Standaard achtergronden naam-tags tonen"
#: src/settings_translation_file.cpp
msgid "Shutdown message"
@@ -6399,6 +6703,10 @@ msgstr ""
"wordt gekopieerd waardoor flikkeren verminderd."
#: src/settings_translation_file.cpp
+msgid "Sky Body Orbit Tilt"
+msgstr "Tilt baan hemellichaam"
+
+#: src/settings_translation_file.cpp
msgid "Slice w"
msgstr "Doorsnede w"
@@ -6457,16 +6765,12 @@ msgid "Sneaking speed, in nodes per second."
msgstr "Sluipsnelheid, in blokken per seconde."
#: src/settings_translation_file.cpp
-msgid "Sound"
-msgstr "Geluid"
-
-#: src/settings_translation_file.cpp
-msgid "Special key"
-msgstr "Speciaal ( Aux ) toets"
+msgid "Soft shadow radius"
+msgstr "Radius zachte schaduwen"
#: src/settings_translation_file.cpp
-msgid "Special key for climbing/descending"
-msgstr "Gebruik de 'speciaal'-toets voor klimmen en dalen"
+msgid "Sound"
+msgstr "Geluid"
#: src/settings_translation_file.cpp
msgid ""
@@ -6493,6 +6797,19 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Spread a complete update of shadow map over given amount of frames.\n"
+"Higher values might make shadows laggy, lower values\n"
+"will consume more resources.\n"
+"Minimum value: 1; maximum value: 16"
+msgstr ""
+"Verspeid een volledige update van de schaduwmap over het opgegeven aantal "
+"frames.\n"
+"Hogere waarden kunnen schaduwen \"laggy\" maken, lagere\n"
+"waarden kosten meer moeite.\n"
+"Minimumwaarde: 1; maximumwaarde: 16"
+
+#: src/settings_translation_file.cpp
+msgid ""
"Spread of light curve boost range.\n"
"Controls the width of the range to be boosted.\n"
"Standard deviation of the light curve boost Gaussian."
@@ -6627,6 +6944,16 @@ msgstr "Textuur pad"
#: src/settings_translation_file.cpp
msgid ""
+"Texture size to render the shadow map on.\n"
+"This must be a power of two.\n"
+"Bigger numbers create better shadows but it is also more expensive."
+msgstr ""
+"Grootte textuur om de schaduwmap op te renderen.\n"
+"Dit moet een macht van twee zijn.\n"
+"Grotere numbers zorgen voor betere schaduwen maar kosten ook meer moeite."
+
+#: src/settings_translation_file.cpp
+msgid ""
"Textures on a node may be aligned either to the node or to the world.\n"
"The former mode suits better things like machines, furniture, etc., while\n"
"the latter makes stairs and microblocks fit surroundings better.\n"
@@ -6650,8 +6977,8 @@ msgid "The URL for the content repository"
msgstr "De URL voor de inhoudsrepository"
#: src/settings_translation_file.cpp
-msgid "The deadzone of the joystick"
-msgstr "De dode zone van de stuurknuppel die u gebruikt"
+msgid "The dead zone of the joystick"
+msgstr "De dode zone van de joystick"
#: src/settings_translation_file.cpp
msgid ""
@@ -6728,28 +7055,28 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"The rendering back-end for Irrlicht.\n"
+"The rendering back-end.\n"
"A restart is required after changing this.\n"
"Note: On Android, stick with OGLES1 if unsure! App may fail to start "
"otherwise.\n"
"On other platforms, OpenGL is recommended.\n"
"Shaders are supported by OpenGL (desktop only) and OGLES2 (experimental)"
msgstr ""
-"De rendering back-end voor Irrlicht. \n"
-"Na het wijzigen hiervan is een herstart vereist. \n"
-"Opmerking: op Android, blijf bij OGLES1 als je het niet zeker weet! Anders "
-"start de app mogelijk niet. \n"
+"Back-end om mee te renderen.\n"
+"Een herstart is vereist om dit definitief te wijzigen.\n"
+"Opmerking: Op Android, blijf bij OGLES1 als je het niet zeker weet! Anders "
+"start de app mogelijk niet.\n"
"Op andere platformen wordt OpenGL aanbevolen.\n"
-"OpenGL (alleen op desktop pc) en OGLES2 (experimenteel), zijn de enige "
-"drivers met shader-ondersteuning momenteel"
+"Zowel OpenGL (alleen op desktop) als OGLES2 (experimenteel) ondersteunen "
+"shaders"
#: src/settings_translation_file.cpp
msgid ""
"The sensitivity of the joystick axes for moving the\n"
-"ingame view frustum around."
+"in-game view frustum around."
msgstr ""
-"De gevoeligheid van de assen van de joystick voor het bewegen van de "
-"frustrum in het spel."
+"De gevoeligheid van de assen van de joystick bij\n"
+"het bewegen van de camera-frustum in het spel."
#: src/settings_translation_file.cpp
msgid ""
@@ -6873,12 +7200,16 @@ msgid "Touch screen threshold"
msgstr "Gevoeligheid van het aanraakscherm"
#: src/settings_translation_file.cpp
+msgid "Tradeoffs for performance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Trees noise"
msgstr "Bomen ruis"
#: src/settings_translation_file.cpp
msgid "Trilinear filtering"
-msgstr "Tri-Lineare Filtering"
+msgstr "Trilineair filteren"
#: src/settings_translation_file.cpp
msgid ""
@@ -6943,21 +7274,20 @@ msgstr "Toon wolken in de achtergrond van het hoofdmenu."
#: src/settings_translation_file.cpp
msgid "Use anisotropic filtering when viewing at textures from an angle."
-msgstr "Gebruik anisotropische filtering voor texturen getoond onder een hoek."
+msgstr "Gebruik anisotropisch filteren voor texturen getoond onder een hoek."
#: src/settings_translation_file.cpp
msgid "Use bilinear filtering when scaling textures."
-msgstr "Gebruik bi-lineaire filtering bij het schalen van texturen."
+msgstr "Gebruik bilineair filteren bij het schalen van texturen."
#: src/settings_translation_file.cpp
msgid ""
-"Use mip mapping to scale textures. May slightly increase performance,\n"
+"Use mipmapping to scale textures. May slightly increase performance,\n"
"especially when using a high resolution texture pack.\n"
"Gamma correct downscaling is not supported."
msgstr ""
-"Gebruik mip-mapping om texturen te schalen. Kan de prestaties enigszins "
-"verbeteren, \n"
-"vooral bij gebruik van een textuurpakket met hoge resolutie. \n"
+"Mipmapping gebruiken om texturen te schalen. Kan performantie lichtjes\n"
+"verbeteren, vooral in combinatie met textuurpakketten van hoge resolutie.\n"
"Gamma-correcte verkleining wordt niet ondersteund."
#: src/settings_translation_file.cpp
@@ -6981,7 +7311,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Use trilinear filtering when scaling textures."
-msgstr "Gebruik tri-lineaire filtering om texturen te schalen."
+msgstr "Gebruik trilineair filteren om texturen te schalen."
#: src/settings_translation_file.cpp
msgid "VBO"
@@ -7080,8 +7410,8 @@ msgid "Viewing range"
msgstr "Zichtafstand"
#: src/settings_translation_file.cpp
-msgid "Virtual joystick triggers aux button"
-msgstr "Virtuele joystick activeert aux-knop"
+msgid "Virtual joystick triggers Aux1 button"
+msgstr "Virtuele joystick activeert Aux1-toets"
#: src/settings_translation_file.cpp
msgid "Volume"
@@ -7158,6 +7488,10 @@ msgid "Waving plants"
msgstr "Bewegende planten"
#: src/settings_translation_file.cpp
+msgid "Weblink color"
+msgstr "Kleur weblinks"
+
+#: 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"
@@ -7187,43 +7521,28 @@ msgid ""
"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.\n"
+"memory. Powers of 2 are recommended. This setting is ONLY applied if\n"
+"bilinear/trilinear/anisotropic filtering is enabled.\n"
"This is also used as the base node texture size for world-aligned\n"
"texture autoscaling."
msgstr ""
-"Als bi-lineaire, tri-lineaire of anisotropische filters gebruikt worden, "
-"dan\n"
-"kunnen lage-resolutie texturen vaag worden. Verhoog hun resolutie dmv\n"
-"naaste-buur-interpolatie zodat de scherpte behouden blijft. Deze optie\n"
-"bepaalt de minimale textuurgroote na het verhogen van de resolutie. Hogere\n"
-"waarden geven een scherper beeld, maar kosten meer geheugen. Het is "
-"aanbevolen\n"
-"machten van 2 te gebruiken. Een waarde groter dan 1 heeft wellicht geen "
-"zichtbaar\n"
-"effect indien bi-lineaire, tri-lineaire of anisotropische filtering niet aan "
-"staan.\n"
-"Dit wordt ook gebruikt als basis node textuurgrootte voor wereld-"
-"gealigneerde\n"
-"automatische textuurschaling."
+"Bij gebruik bilineair/trilineair/anisotropisch filteren kunnen texturen van\n"
+"lage resolutie vaag worden; verhoog daardoor hun resolutie d.m.v.\n"
+"\"naaste-buur-interpolatie\" om ze scherper te houden. Deze optie bepaalt\n"
+"de minimale textuurgrootte na het omhoog schalen; hogere waarden geven\n"
+"scherper beeld, maar kosten meer geheugen. Het is aanbevolen machten van\n"
+"2 te gebruiken. Deze optie heeft enkel effect als bilineair, trilineair of\n"
+"anisotropisch filteren aan staan.\n"
+"Deze optie geldt ook als textuurgrootte van basisnodes voor\n"
+"automatisch en met de wereld gealigneerd omhoog schalen van texturen."
#: src/settings_translation_file.cpp
msgid ""
-"Whether FreeType fonts are used, requires FreeType support to be compiled "
-"in.\n"
-"If disabled, bitmap and XML vectors fonts are used instead."
-msgstr ""
-"Gebruik freetype lettertypes, dit vereist dat freetype lettertype "
-"ondersteuning ingecompileerd is.\n"
-"Indien uitgeschakeld, zullen bitmap en XML verctor lettertypes gebruikt "
-"worden."
-
-#: src/settings_translation_file.cpp
-msgid ""
-"Whether nametag backgrounds should be shown by default.\n"
+"Whether name tag backgrounds should be shown by default.\n"
"Mods may still set a background."
msgstr ""
+"Of achtergronden van naam-tags standaard getoond moeten worden.\n"
+"Mods kunnen alsnog een achtergrond instellen."
#: src/settings_translation_file.cpp
msgid "Whether node texture animations should be desynchronized per mapblock."
@@ -7276,8 +7595,10 @@ msgstr ""
"toets)."
#: src/settings_translation_file.cpp
-msgid "Width component of the initial window size."
-msgstr "Aanvangsbreedte van het venster."
+msgid "Width component of the initial window size. Ignored in fullscreen mode."
+msgstr ""
+"Breedtecomponent van de initiële grootte van het venster. Wordt genegeerd in "
+"fullscreen-modus."
#: src/settings_translation_file.cpp
msgid "Width of the selection box lines around nodes."
@@ -7386,46 +7707,22 @@ msgid "Y-level of seabed."
msgstr "Y-niveau van zee bodem."
#: src/settings_translation_file.cpp
-msgid ""
-"ZLib compression level to use when saving mapblocks to disk.\n"
-"-1 - Zlib's default compression level\n"
-"0 - no compresson, fastest\n"
-"9 - best compression, slowest\n"
-"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)"
-msgstr ""
-"Zlib compressie niveau om mapblokken op de harde schijf te bewaren.\n"
-"-1: Zlib's standaard compressie niveau\n"
-"0: geen compressie, snelst\n"
-"9: maximale compressie, traagst\n"
-"(niveau's 1 tot 3 gebruiken Zlib's snelle methode, 4 tot 9 gebruiken de "
-"normale methode)"
-
-#: src/settings_translation_file.cpp
-msgid ""
-"ZLib compression level to use when sending mapblocks to the client.\n"
-"-1 - Zlib's default compression level\n"
-"0 - no compresson, fastest\n"
-"9 - best compression, slowest\n"
-"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)"
-msgstr ""
-"Zlib compressie niveau om mapblokken te versturen naar de client.\n"
-"-1: Zlib's standaard compressie niveau\n"
-"0: geen compressie, snelst\n"
-"9: maximale compressie, traagst\n"
-"(niveau's 1 tot 3 gebruiken Zlib's snelle methode, 4 tot 9 gebruiken de "
-"normale methode)"
-
-#: src/settings_translation_file.cpp
msgid "cURL file download timeout"
msgstr "timeout voor cURL download"
#: src/settings_translation_file.cpp
+msgid "cURL interactive timeout"
+msgstr "cURL interactieve time-out"
+
+#: src/settings_translation_file.cpp
msgid "cURL parallel limit"
msgstr "Maximaal parallellisme in cURL"
-#: src/settings_translation_file.cpp
-msgid "cURL timeout"
-msgstr "cURL time-out"
+#~ msgid "- Creative Mode: "
+#~ msgstr "- Creatieve Modus: "
+
+#~ msgid "- Damage: "
+#~ msgstr "- Verwondingen: "
#~ msgid ""
#~ "0 = parallax occlusion with slope information (faster).\n"
@@ -7434,6 +7731,9 @@ msgstr "cURL time-out"
#~ "0 = parallax occlusie met helling-informatie (sneller).\n"
#~ "1 = 'reliëf mapping' (lanzamer, nauwkeuriger)."
+#~ msgid "Address / Port"
+#~ msgstr "Server adres / Poort"
+
#, fuzzy
#~ msgid ""
#~ "Adjust the gamma encoding for the light tables. Higher numbers are "
@@ -7450,6 +7750,9 @@ msgstr "cURL time-out"
#~ msgid "Back"
#~ msgstr "Terug"
+#~ msgid "Bits per pixel (aka color depth) in fullscreen mode."
+#~ msgstr "Aantal bits per pixel (oftewel: kleurdiepte) in full-screen modus."
+
#~ msgid "Bump Mapping"
#~ msgstr "Bumpmapping"
@@ -7489,14 +7792,27 @@ msgstr "cURL time-out"
#~ msgstr ""
#~ "Bepaalt breedte van tunnels, een kleinere waarde maakt bredere tunnels."
+#~ msgid "Credits"
+#~ msgstr "Credits"
+
#~ msgid "Crosshair color (R,G,B)."
#~ msgstr "Draadkruis-kleur (R,G,B)."
+#~ msgid "Damage enabled"
+#~ msgstr "Verwondingen ingeschakeld"
+
#, fuzzy
#~ msgid "Darkness sharpness"
#~ msgstr "Steilheid Van de meren"
#~ msgid ""
+#~ "Default timeout for cURL, stated in milliseconds.\n"
+#~ "Only has an effect if compiled with cURL."
+#~ msgstr ""
+#~ "Standaard time-out voor cURL, in milliseconden.\n"
+#~ "Wordt alleen gebruikt indien gecompileerd met cURL ingebouwd."
+
+#~ msgid ""
#~ "Defines areas of floatland smooth terrain.\n"
#~ "Smooth floatlands occur when noise > 0."
#~ msgstr ""
@@ -7554,6 +7870,15 @@ msgstr "cURL time-out"
#~ msgid "FPS in pause menu"
#~ msgstr "FPS in het pauze-menu"
+#~ msgid "Fallback font shadow"
+#~ msgstr "Terugval-font schaduw"
+
+#~ msgid "Fallback font shadow alpha"
+#~ msgstr "Terugval-font schaduw alphawaarde"
+
+#~ msgid "Fallback font size"
+#~ msgstr "Terugval-fontgrootte"
+
#~ msgid "Floatland base height noise"
#~ msgstr "Drijvend land basis hoogte ruis"
@@ -7563,6 +7888,15 @@ msgstr "cURL time-out"
#~ msgid "Font shadow alpha (opaqueness, between 0 and 255)."
#~ msgstr "Fontschaduw alphawaarde (ondoorzichtigheid, tussen 0 en 255)."
+#~ msgid "Font size of the fallback font in point (pt)."
+#~ msgstr "Lettergrootte van het fallback-lettertype in punt (pt)."
+
+#~ msgid "FreeType fonts"
+#~ msgstr "Freetype lettertypes"
+
+#~ msgid "Full screen BPP"
+#~ msgstr "BPP bij volledig scherm"
+
#, fuzzy
#~ msgid "Gamma"
#~ msgstr "Gamma"
@@ -7573,9 +7907,15 @@ msgstr "cURL time-out"
#~ msgid "Generate normalmaps"
#~ msgstr "Genereer normaalmappen"
+#~ msgid "High-precision FPU"
+#~ msgstr "Hoge-nauwkeurigheid FPU"
+
#~ msgid "IPv6 support."
#~ msgstr "IPv6 ondersteuning."
+#~ msgid "Install: file: \"$1\""
+#~ msgstr "Installeer: bestand: \"$1\""
+
#, fuzzy
#~ msgid "Lava depth"
#~ msgstr "Diepte van grote grotten"
@@ -7589,6 +7929,11 @@ msgstr "cURL time-out"
#~ msgid "Main menu style"
#~ msgstr "Hoofdmenu stijl"
+#~ msgid "Makes DirectX work with LuaJIT. Disable if it causes troubles."
+#~ msgstr ""
+#~ "Maakt dat DirectX werkt met LuaJIT. Schakel dit uit als het problemen "
+#~ "geeft."
+
#~ msgid "Minimap in radar mode, Zoom x2"
#~ msgstr "Mini-kaart in radar modus, Zoom x2"
@@ -7601,6 +7946,9 @@ msgstr "cURL time-out"
#~ msgid "Minimap in surface mode, Zoom x4"
#~ msgstr "Minimap in oppervlaktemodus, Zoom x4"
+#~ msgid "Name / Password"
+#~ msgstr "Naam / Wachtwoord"
+
#~ msgid "Name/Password"
#~ msgstr "Naam / Wachtwoord"
@@ -7619,6 +7967,13 @@ msgstr "cURL time-out"
#~ msgid "Ok"
#~ msgstr "Oké"
+#~ msgid ""
+#~ "Opaqueness (alpha) of the shadow behind the fallback font, between 0 and "
+#~ "255."
+#~ msgstr ""
+#~ "Ondoorzichtigheid (alpha) van de schaduw achter het fallback-lettertype, "
+#~ "tussen 0 en 255."
+
#~ msgid "Overall bias of parallax occlusion effect, usually scale/2."
#~ msgstr ""
#~ "Algemene afwijking van het parallax occlusie effect. Normaal: schaal/2."
@@ -7653,6 +8008,9 @@ msgstr "cURL time-out"
#~ msgid "Path to save screenshots at."
#~ msgstr "Pad waar screenshots bewaard worden."
+#~ msgid "PvP enabled"
+#~ msgstr "Spelergevechten ingeschakeld"
+
#~ msgid "Reset singleplayer world"
#~ msgstr "Reset Singleplayer wereld"
@@ -7663,6 +8021,19 @@ msgstr "cURL time-out"
#~ msgid "Shadow limit"
#~ msgstr "Schaduw limiet"
+#~ msgid ""
+#~ "Shadow offset (in pixels) of the fallback font. If 0, then shadow will "
+#~ "not be drawn."
+#~ msgstr ""
+#~ "Fontschaduw afstand van het standaard lettertype (in beeldpunten). Indien "
+#~ "0, dan wordt geen schaduw getekend."
+
+#~ msgid "Special"
+#~ msgstr "Speciaal"
+
+#~ msgid "Special key"
+#~ msgstr "Speciaal ( Aux ) toets"
+
#~ msgid "Start Singleplayer"
#~ msgstr "Start Singleplayer"
@@ -7672,6 +8043,9 @@ msgstr "cURL time-out"
#~ msgid "This font will be used for certain languages."
#~ msgstr "Dit font wordt gebruikt voor bepaalde talen."
+#~ msgid "To enable shaders the OpenGL driver needs to be used."
+#~ msgstr "Om schaduwen mogelijk te maken moet OpenGL worden gebruikt."
+
#~ msgid "Toggle Cinematic"
#~ msgstr "Cinematic modus aan/uit"
@@ -7695,6 +8069,16 @@ msgstr "cURL time-out"
#~ msgid "Waving water"
#~ msgstr "Golvend water"
+#~ msgid ""
+#~ "Whether FreeType fonts are used, requires FreeType support to be compiled "
+#~ "in.\n"
+#~ "If disabled, bitmap and XML vectors fonts are used instead."
+#~ msgstr ""
+#~ "Gebruik freetype lettertypes, dit vereist dat freetype lettertype "
+#~ "ondersteuning ingecompileerd is.\n"
+#~ "Indien uitgeschakeld, zullen bitmap en XML verctor lettertypes gebruikt "
+#~ "worden."
+
#, fuzzy
#~ msgid "Y of upper limit of lava in large caves."
#~ msgstr "Minimale diepte van grote semi-willekeurige grotten."
@@ -7707,3 +8091,9 @@ msgstr "cURL time-out"
#~ msgid "Yes"
#~ msgstr "Ja"
+
+#~ msgid "You died."
+#~ msgstr "Je bent gestorven."
+
+#~ msgid "needs_fallback_font"
+#~ msgstr "no"
diff --git a/po/nn/minetest.po b/po/nn/minetest.po
index 4ad47fbf8..2cf2ef0cb 100644
--- a/po/nn/minetest.po
+++ b/po/nn/minetest.po
@@ -2,7 +2,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Norwegian Nynorsk (Minetest)\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-02-23 19:03+0100\n"
+"POT-Creation-Date: 2022-01-25 23:19+0100\n"
"PO-Revision-Date: 2021-02-20 05:50+0000\n"
"Last-Translator: Tor Egil Hoftun Kvæstad <toregilhk@hotmail.com>\n"
"Language-Team: Norwegian Nynorsk <https://hosted.weblate.org/projects/"
@@ -14,6 +14,46 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 4.5\n"
+#: builtin/client/chatcommands.lua
+msgid "Clear the out chat queue"
+msgstr ""
+
+#: builtin/client/chatcommands.lua
+msgid "Empty command."
+msgstr ""
+
+#: builtin/client/chatcommands.lua
+#, fuzzy
+msgid "Exit to main menu"
+msgstr "GÃ¥ ut til meny"
+
+#: builtin/client/chatcommands.lua
+#, fuzzy
+msgid "Invalid command: "
+msgstr "Lokal befaling"
+
+#: builtin/client/chatcommands.lua
+msgid "Issued command: "
+msgstr ""
+
+#: builtin/client/chatcommands.lua
+#, fuzzy
+msgid "List online players"
+msgstr "Enkeltspelar oppleving"
+
+#: builtin/client/chatcommands.lua
+#, fuzzy
+msgid "Online players: "
+msgstr "Enkeltspelar oppleving"
+
+#: builtin/client/chatcommands.lua
+msgid "The out chat queue is now empty."
+msgstr ""
+
+#: builtin/client/chatcommands.lua
+msgid "This command is disabled by server."
+msgstr ""
+
#: builtin/client/death_formspec.lua src/client/game.cpp
msgid "Respawn"
msgstr "Du har kome at"
@@ -22,11 +62,42 @@ msgstr "Du har kome at"
msgid "You died"
msgstr "Du døydde"
+#: builtin/common/chatcommands.lua
+#, fuzzy
+msgid "Available commands:"
+msgstr "Lokal befaling"
+
+#: builtin/common/chatcommands.lua
+#, fuzzy
+msgid "Available commands: "
+msgstr "Lokal befaling"
+
+#: builtin/common/chatcommands.lua
+msgid "Command not available: "
+msgstr ""
+
+#: builtin/common/chatcommands.lua
+msgid "Get help for commands"
+msgstr ""
+
+#: builtin/common/chatcommands.lua
+msgid ""
+"Use '.help <cmd>' to get more information, or '.help all' to list everything."
+msgstr ""
+
+#: builtin/common/chatcommands.lua
+msgid "[all | <cmd>]"
+msgstr ""
+
#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp
msgid "OK"
msgstr "OK"
#: builtin/fstk/ui.lua
+msgid "<none available>"
+msgstr ""
+
+#: builtin/fstk/ui.lua
msgid "An error occurred in a Lua script:"
msgstr "Ein feil oppstod i eit LUA-skript:"
@@ -228,6 +299,12 @@ msgid "Install missing dependencies"
msgstr "Installer manglande avhengigheiter"
#: builtin/mainmenu/dlg_contentstore.lua
+#, fuzzy
+msgid "Install: Unsupported file type or broken archive"
+msgstr ""
+"Installer: Ikkje-støtta dokument type \"$1\" eller så funker ikkje arkivet"
+
+#: builtin/mainmenu/dlg_contentstore.lua
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Mods"
msgstr "Modifikasjonar"
@@ -531,7 +608,7 @@ msgstr "< Tilbake til innstillingssida"
msgid "Browse"
msgstr "Bla gjennom"
-#: builtin/mainmenu/dlg_settings_advanced.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_settings.lua
msgid "Disabled"
msgstr "Deaktivert"
@@ -556,7 +633,8 @@ msgid "Offset"
msgstr "Forskyvning"
#: builtin/mainmenu/dlg_settings_advanced.lua
-msgid "Persistance"
+#, fuzzy
+msgid "Persistence"
msgstr "Persistens"
#: builtin/mainmenu/dlg_settings_advanced.lua
@@ -575,7 +653,7 @@ msgstr "Reetabler det normale"
msgid "Scale"
msgstr "Skala"
-#: builtin/mainmenu/dlg_settings_advanced.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_online.lua
msgid "Search"
msgstr "Søk"
@@ -671,16 +749,6 @@ msgstr ""
"modifikasjonspakke $1"
#: builtin/mainmenu/pkgmgr.lua
-#, fuzzy
-msgid "Install: Unsupported file type \"$1\" or broken archive"
-msgstr ""
-"Installer: Ikkje-støtta dokument type \"$1\" eller så funker ikkje arkivet"
-
-#: builtin/mainmenu/pkgmgr.lua
-msgid "Install: file: \"$1\""
-msgstr "Installer: fil: «$1»"
-
-#: builtin/mainmenu/pkgmgr.lua
msgid "Unable to find a valid mod or modpack"
msgstr "Klarte ikkje å finne ein gyldig modifikasjon eller modifikasjonspakke"
@@ -716,6 +784,41 @@ msgstr ""
"Forsøkje å kople attende den offentlege tenarmaskin-lista og sjekk sambands "
"koplingen."
+#: builtin/mainmenu/tab_about.lua
+msgid "About"
+msgstr ""
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Active Contributors"
+msgstr "Aktive bidragsytarar"
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Active renderer:"
+msgstr ""
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Core Developers"
+msgstr "Kjerne-utviklarar"
+
+#: builtin/mainmenu/tab_about.lua
+#, fuzzy
+msgid "Open User Data Directory"
+msgstr "Velje ein mappe"
+
+#: builtin/mainmenu/tab_about.lua
+msgid ""
+"Opens the directory that contains user-provided worlds, games, mods,\n"
+"and texture packs in a file manager / explorer."
+msgstr ""
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Previous Contributors"
+msgstr "Tidlegare bidragsytarar"
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Previous Core Developers"
+msgstr "Tidlegare kjerne-utviklarar"
+
#: builtin/mainmenu/tab_content.lua
msgid "Browse online content"
msgstr "Bla i nett-innhald"
@@ -756,37 +859,6 @@ msgstr "Avinstallér pakka"
msgid "Use Texture Pack"
msgstr "Bruk teksturpakke"
-#: builtin/mainmenu/tab_credits.lua
-msgid "Active Contributors"
-msgstr "Aktive bidragsytarar"
-
-#: builtin/mainmenu/tab_credits.lua
-msgid "Core Developers"
-msgstr "Kjerne-utviklarar"
-
-#: builtin/mainmenu/tab_credits.lua
-msgid "Credits"
-msgstr "Medvirkende"
-
-#: builtin/mainmenu/tab_credits.lua
-#, fuzzy
-msgid "Open User Data Directory"
-msgstr "Velje ein mappe"
-
-#: builtin/mainmenu/tab_credits.lua
-msgid ""
-"Opens the directory that contains user-provided worlds, games, mods,\n"
-"and texture packs in a file manager / explorer."
-msgstr ""
-
-#: builtin/mainmenu/tab_credits.lua
-msgid "Previous Contributors"
-msgstr "Tidlegare bidragsytarar"
-
-#: builtin/mainmenu/tab_credits.lua
-msgid "Previous Core Developers"
-msgstr "Tidlegare kjerne-utviklarar"
-
#: builtin/mainmenu/tab_local.lua
msgid "Announce Server"
msgstr "Annonsér tenarmaskin"
@@ -817,7 +889,7 @@ msgstr "Bli tenarmaskin's vert"
msgid "Install games from ContentDB"
msgstr "Installer spel frå ContentDB"
-#: builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
msgid "Name"
msgstr "Namn"
@@ -829,7 +901,7 @@ msgstr "Ny"
msgid "No world created or selected!"
msgstr "Inga verd skapt eller valt!"
-#: builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
msgid "Password"
msgstr "Passord"
@@ -837,7 +909,7 @@ msgstr "Passord"
msgid "Play Game"
msgstr "Ha i gang spel"
-#: builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
msgid "Port"
msgstr "Port"
@@ -858,8 +930,13 @@ msgid "Start Game"
msgstr "Start spel"
#: builtin/mainmenu/tab_online.lua
-msgid "Address / Port"
-msgstr "Adresse / port"
+#, fuzzy
+msgid "Address"
+msgstr "- Adresse: "
+
+#: builtin/mainmenu/tab_online.lua src/client/keycode.cpp
+msgid "Clear"
+msgstr "Rydd til side"
#: builtin/mainmenu/tab_online.lua
msgid "Connect"
@@ -869,34 +946,46 @@ msgstr "Kople i hop"
msgid "Creative mode"
msgstr "Kreativ stode"
+#. ~ PvP = Player versus Player
#: builtin/mainmenu/tab_online.lua
-msgid "Damage enabled"
-msgstr "Skade aktivert"
+#, fuzzy
+msgid "Damage / PvP"
+msgstr "- Skade: "
#: builtin/mainmenu/tab_online.lua
msgid "Del. Favorite"
msgstr "Slett Favoritt"
#: builtin/mainmenu/tab_online.lua
-msgid "Favorite"
+#, fuzzy
+msgid "Favorites"
msgstr "Favoritt"
#: builtin/mainmenu/tab_online.lua
-msgid "Join Game"
-msgstr "Bli med i spel"
+msgid "Incompatible Servers"
+msgstr ""
#: builtin/mainmenu/tab_online.lua
-msgid "Name / Password"
-msgstr "Namn/Passord"
+msgid "Join Game"
+msgstr "Bli med i spel"
#: builtin/mainmenu/tab_online.lua
msgid "Ping"
msgstr "Ping"
-#. ~ PvP = Player versus Player
#: builtin/mainmenu/tab_online.lua
-msgid "PvP enabled"
-msgstr "Spelar mot spelar aktivert"
+#, fuzzy
+msgid "Public Servers"
+msgstr "Annonsér tenarmaskin"
+
+#: builtin/mainmenu/tab_online.lua
+msgid "Refresh"
+msgstr ""
+
+#: builtin/mainmenu/tab_online.lua
+#, fuzzy
+msgid "Server Description"
+msgstr "Tenarport"
#: builtin/mainmenu/tab_settings.lua
msgid "2x"
@@ -939,11 +1028,31 @@ msgstr "Endre nykeler"
msgid "Connected Glass"
msgstr "Kopla i hop glass"
+#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
+msgid "Dynamic shadows"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Dynamic shadows: "
+msgstr ""
+
#: builtin/mainmenu/tab_settings.lua
msgid "Fancy Leaves"
msgstr "Fancy blader"
#: builtin/mainmenu/tab_settings.lua
+msgid "High"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Low"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Medium"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
msgid "Mipmap"
msgstr "Mipkart"
@@ -1020,11 +1129,6 @@ msgstr "Jevn belysning"
msgid "Texturing:"
msgstr "Teksturering:"
-#: builtin/mainmenu/tab_settings.lua
-#, fuzzy
-msgid "To enable shaders the OpenGL driver needs to be used."
-msgstr "For å aktivere skumrings-effekt så må OpenGL driveren være i bruk."
-
#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
#, fuzzy
msgid "Tone Mapping"
@@ -1039,6 +1143,14 @@ msgid "Trilinear Filter"
msgstr "Tri-lineær filtréring"
#: builtin/mainmenu/tab_settings.lua
+msgid "Ultra High"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Very Low"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
#, fuzzy
msgid "Waving Leaves"
msgstr "Raslende lauv"
@@ -1053,7 +1165,7 @@ msgstr "Raslende lauv"
msgid "Waving Plants"
msgstr "Raslende planter"
-#: src/client/client.cpp
+#: src/client/client.cpp src/client/game.cpp
msgid "Connection timed out."
msgstr "Nett-kopling er brutt."
@@ -1083,7 +1195,8 @@ msgid "Connection error (timed out?)"
msgstr "Tilkoplingsfeil (Tidsavbrot?)"
#: src/client/clientlauncher.cpp
-msgid "Could not find or load game \""
+#, fuzzy
+msgid "Could not find or load game: "
msgstr "Kunne ikkje finne eller laste spelet \""
#: src/client/clientlauncher.cpp
@@ -1117,18 +1230,6 @@ msgstr "Passord dokumentet du ga går ikkje an å åpne: "
msgid "Provided world path doesn't exist: "
msgstr "Verds-ruta du ga finnes ikkje: "
-#. ~ DO NOT TRANSLATE THIS LITERALLY!
-#. This is a special string. Put either "no" or "yes"
-#. into the translation field (literally).
-#. Choose "yes" if the language requires use of the fallback
-#. font, "no" otherwise.
-#. The fallback font is (normally) required for languages with
-#. non-Latin script, like Chinese.
-#. When in doubt, test your translation.
-#: src/client/fontengine.cpp
-msgid "needs_fallback_font"
-msgstr "no"
-
#: src/client/game.cpp
msgid ""
"\n"
@@ -1142,15 +1243,6 @@ msgid "- Address: "
msgstr "- Adresse: "
#: src/client/game.cpp
-#, fuzzy
-msgid "- Creative Mode: "
-msgstr "- Gude løyving: "
-
-#: src/client/game.cpp
-msgid "- Damage: "
-msgstr "- Skade: "
-
-#: src/client/game.cpp
msgid "- Mode: "
msgstr "- modus: "
@@ -1172,6 +1264,16 @@ msgid "- Server Name: "
msgstr "- Tenarnamn: "
#: src/client/game.cpp
+#, fuzzy
+msgid "A serialization error occurred:"
+msgstr "Det har skjedd ein feil:"
+
+#: src/client/game.cpp
+#, c-format
+msgid "Access denied. Reason: %s"
+msgstr ""
+
+#: src/client/game.cpp
msgid "Automatic forward disabled"
msgstr "Automatiske framsteg er avtatt"
@@ -1180,6 +1282,22 @@ msgid "Automatic forward enabled"
msgstr "Automatiske framsteg er i gang"
#: src/client/game.cpp
+msgid "Block bounds hidden"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Block bounds shown for all blocks"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Block bounds shown for current block"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Block bounds shown for nearby blocks"
+msgstr ""
+
+#: src/client/game.cpp
msgid "Camera update disabled"
msgstr "Kamera oppdatering er deaktivert"
@@ -1188,6 +1306,10 @@ msgid "Camera update enabled"
msgstr "Kamera oppdatering er aktivert"
#: src/client/game.cpp
+msgid "Can't show block bounds (need 'basic_debug' privilege)"
+msgstr ""
+
+#: src/client/game.cpp
msgid "Change Password"
msgstr "Byt kodeord"
@@ -1200,6 +1322,10 @@ msgid "Cinematic mode enabled"
msgstr "Filmatisk modus er i gang"
#: src/client/game.cpp
+msgid "Client disconnected"
+msgstr ""
+
+#: src/client/game.cpp
msgid "Client side scripting is disabled"
msgstr "Klient side-skildring er av"
@@ -1208,6 +1334,10 @@ msgid "Connecting to server..."
msgstr "Kopler til tenarmaskin..."
#: src/client/game.cpp
+msgid "Connection failed for unknown reason"
+msgstr ""
+
+#: src/client/game.cpp
msgid "Continue"
msgstr "Fortset"
@@ -1245,6 +1375,11 @@ msgstr ""
"- %s: nettprat\n"
#: src/client/game.cpp
+#, c-format
+msgid "Couldn't resolve address: %s"
+msgstr ""
+
+#: src/client/game.cpp
msgid "Creating client..."
msgstr "Skapar klient..."
@@ -1373,6 +1508,11 @@ msgid "Minimap currently disabled by game or mod"
msgstr "Minikart er for tiden deaktivert tå spelet eller ein modifikasjon"
#: src/client/game.cpp
+#, fuzzy
+msgid "Multiplayer"
+msgstr "Enkeltspelar oppleving"
+
+#: src/client/game.cpp
msgid "Noclip mode disabled"
msgstr "Ikkjeklipp modus er avtatt"
@@ -1447,6 +1587,21 @@ msgstr "Lyd e ikkje dempa lengre"
#: src/client/game.cpp
#, c-format
+msgid "The server is probably running a different version of %s."
+msgstr ""
+
+#: src/client/game.cpp
+#, c-format
+msgid "Unable to connect to %s because IPv6 is disabled"
+msgstr ""
+
+#: src/client/game.cpp
+#, c-format
+msgid "Unable to listen on %s because IPv6 is disabled"
+msgstr ""
+
+#: src/client/game.cpp
+#, c-format
msgid "Viewing range changed to %d"
msgstr "Utsiktsrekkjevidd er forandra til %d"
@@ -1515,10 +1670,6 @@ msgid "Caps Lock"
msgstr "Kapital-tegn på/av knapp"
#: src/client/keycode.cpp
-msgid "Clear"
-msgstr "Rydd til side"
-
-#: src/client/keycode.cpp
msgid "Control"
msgstr "Styring"
@@ -1784,6 +1935,15 @@ msgstr "Minikart i overflatemodus, Zoom x%d"
msgid "Minimap in texture mode"
msgstr "Minikart i overflate modus, Zoom x1"
+#: src/gui/guiChatConsole.cpp
+#, fuzzy
+msgid "Failed to open webpage"
+msgstr "Klarte ikkje å laste ned $1"
+
+#: src/gui/guiChatConsole.cpp
+msgid "Opening webpage"
+msgstr ""
+
#: src/gui/guiConfirmRegistration.cpp src/gui/guiPasswordChange.cpp
msgid "Passwords do not match!"
msgstr "Passorda passar ikkje!"
@@ -1812,7 +1972,8 @@ msgid "Proceed"
msgstr "Fortset"
#: src/gui/guiKeyChangeMenu.cpp
-msgid "\"Special\" = climb down"
+#, fuzzy
+msgid "\"Aux1\" = climb down"
msgstr "\"Spesiell\" = klatre ned"
#: src/gui/guiKeyChangeMenu.cpp
@@ -1824,10 +1985,18 @@ msgid "Automatic jumping"
msgstr "Automatiske hopp"
#: src/gui/guiKeyChangeMenu.cpp
+msgid "Aux1"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
msgid "Backward"
msgstr "Bakover"
#: src/gui/guiKeyChangeMenu.cpp
+msgid "Block bounds"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
msgid "Change camera"
msgstr "Byt kamera"
@@ -1918,10 +2087,6 @@ msgid "Sneak"
msgstr "Sniking"
#: src/gui/guiKeyChangeMenu.cpp
-msgid "Special"
-msgstr "Spesial"
-
-#: src/gui/guiKeyChangeMenu.cpp
msgid "Toggle HUD"
msgstr "Slå av/på HUD"
@@ -1983,7 +2148,8 @@ msgid "Muted"
msgstr "MÃ¥lbindt"
#: src/gui/guiVolumeChange.cpp
-msgid "Sound Volume: "
+#, fuzzy, c-format
+msgid "Sound Volume: %d%%"
msgstr "Lydstyrke: "
#. ~ Imperative, as in "Enter/type in text".
@@ -2007,8 +2173,8 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"(Android) Use virtual joystick to trigger \"aux\" button.\n"
-"If enabled, virtual joystick will also tap \"aux\" button when out of main "
+"(Android) Use virtual joystick to trigger \"Aux1\" button.\n"
+"If enabled, virtual joystick will also tap \"Aux1\" button when out of main "
"circle."
msgstr ""
@@ -2194,6 +2360,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Adjust the detected display density, used for scaling UI elements."
+msgstr ""
+
+#: src/settings_translation_file.cpp
#, c-format
msgid ""
"Adjusts the density of the floatland layer.\n"
@@ -2306,6 +2476,14 @@ msgid "Autoscaling mode"
msgstr "Autoskaleringsmodus"
#: src/settings_translation_file.cpp
+msgid "Aux1 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Aux1 key for climbing/descending"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Backward key"
msgstr ""
@@ -2350,10 +2528,6 @@ msgid "Biome noise"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Bits per pixel (aka color depth) in fullscreen mode."
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Block send optimize distance"
msgstr ""
@@ -2452,6 +2626,15 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Chat command time message threshold"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Chat commands"
+msgstr "Befaling"
+
+#: src/settings_translation_file.cpp
msgid "Chat font size"
msgstr "Tekststørrelse for nettprat"
@@ -2484,8 +2667,9 @@ msgid "Chat toggle key"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Chatcommands"
-msgstr ""
+#, fuzzy
+msgid "Chat weblinks"
+msgstr "Skravlerøret er vist"
#: src/settings_translation_file.cpp
msgid "Chunk size"
@@ -2504,6 +2688,12 @@ msgid "Clean transparent textures"
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Clickable weblinks (middle-click or Ctrl+left-click) enabled in chat console "
+"output."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Client"
msgstr "Klient"
@@ -2548,6 +2738,11 @@ msgid "Colored fog"
msgstr "Farga tåke"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Colored shadows"
+msgstr "Farga tåke"
+
+#: src/settings_translation_file.cpp
msgid ""
"Comma-separated list of flags to hide in the content repository.\n"
"\"nonfree\" can be used to hide packages which do not qualify as 'free "
@@ -2575,6 +2770,22 @@ msgid "Command key"
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Compression level to use when saving mapblocks to disk.\n"
+"-1 - use default compression level\n"
+"0 - least compression, fastest\n"
+"9 - best compression, slowest"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Compression level to use when sending mapblocks to the client.\n"
+"-1 - use default compression level\n"
+"0 - least compression, fastest\n"
+"9 - best compression, slowest"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Connect glass"
msgstr ""
@@ -2665,7 +2876,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"Crosshair alpha (opaqueness, between 0 and 255).\n"
-"Also controls the object crosshair color"
+"This also applies to the object crosshair."
msgstr ""
#: src/settings_translation_file.cpp
@@ -2744,8 +2955,9 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Default timeout for cURL, stated in milliseconds.\n"
-"Only has an effect if compiled with cURL."
+"Define shadow filtering quality.\n"
+"This simulates the soft shadows effect by applying a PCF or Poisson disk\n"
+"but also uses more resources."
msgstr ""
#: src/settings_translation_file.cpp
@@ -2863,6 +3075,10 @@ msgid "Disallow empty passwords"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Display Density Scaling Factor"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Domain name of server, to be displayed in the serverlist."
msgstr ""
@@ -2907,6 +3123,19 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Enable Poisson disk filtering.\n"
+"On true uses Poisson disk to make \"soft shadows\". Otherwise uses PCF "
+"filtering."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable colored shadows.\n"
+"On true translucent nodes cast colored shadows. This is expensive."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Enable console window"
msgstr ""
@@ -3015,6 +3244,12 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Enables tradeoffs that reduce CPU load or increase rendering performance\n"
+"at the expense of minor visual glitches that do not impact game playability."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Engine profiling data print interval"
msgstr ""
@@ -3053,18 +3288,6 @@ msgid "Fallback font path"
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 ""
@@ -3082,7 +3305,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Fast movement (via the \"special\" key).\n"
+"Fast movement (via the \"Aux1\" key).\n"
"This requires the \"fast\" privilege on the server."
msgstr ""
@@ -3116,9 +3339,9 @@ 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."
+"which PNG optimizers usually discard, often resulting in dark or\n"
+"light edges to transparent textures. Apply a filter to clean that up\n"
+"at texture load time. This is automatically enabled if mipmapping is enabled."
msgstr ""
#: src/settings_translation_file.cpp
@@ -3210,15 +3433,15 @@ msgid "Font size"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Font size of the default font in point (pt)."
+msgid "Font size divisible by"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Font size of the fallback font in point (pt)."
+msgid "Font size of the default font where 1 unit = 1 pixel at 96 DPI"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Font size of the monospace font in point (pt)."
+msgid "Font size of the monospace font where 1 unit = 1 pixel at 96 DPI"
msgstr ""
#: src/settings_translation_file.cpp
@@ -3229,6 +3452,17 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"For pixel-style fonts that do not scale well, this ensures that font sizes "
+"used\n"
+"with this font will always be divisible by this value, in pixels. For "
+"instance,\n"
+"a pixel font 16 pixels tall should have this set to 16, so it will only ever "
+"be\n"
+"sized 16, 32, 48, etc., so a mod requesting a size of 25 will get 32."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Format of player chat messages. The following strings are valid "
"placeholders:\n"
"@name, @message, @timestamp (optional)"
@@ -3287,10 +3521,6 @@ msgid "Fraction of the visible distance at which fog starts to be rendered"
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)."
@@ -3315,10 +3545,6 @@ msgid "Full screen"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Full screen BPP"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Fullscreen mode."
msgstr ""
@@ -3342,7 +3568,7 @@ msgstr ""
msgid ""
"Global map generation attributes.\n"
"In Mapgen v6 the 'decorations' flag controls all decorations except trees\n"
-"and junglegrass, in all other mapgens this flag controls all decorations."
+"and jungle grass, in all other mapgens this flag controls all decorations."
msgstr ""
#: src/settings_translation_file.cpp
@@ -3411,7 +3637,8 @@ msgid "Heat noise"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Height component of the initial window size."
+msgid ""
+"Height component of the initial window size. Ignored in fullscreen mode."
msgstr ""
#: src/settings_translation_file.cpp
@@ -3423,10 +3650,6 @@ msgid "Height select noise"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "High-precision FPU"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Hill steepness"
msgstr ""
@@ -3657,8 +3880,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"If disabled, \"special\" key is used to fly fast if both fly and fast mode "
-"are\n"
+"If disabled, \"Aux1\" key is used to fly fast if both fly and fast mode are\n"
"enabled."
msgstr ""
@@ -3680,8 +3902,8 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"If enabled, \"special\" key instead of \"sneak\" key is used for climbing "
-"down and\n"
+"If enabled, \"Aux1\" key instead of \"Sneak\" key is used for climbing down "
+"and\n"
"descending."
msgstr ""
@@ -3727,6 +3949,12 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"If the execution of a chat command takes longer than this specified time in\n"
+"seconds, add the time information to the chat command message"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"If the file size of debug.txt exceeds the number of megabytes specified in\n"
"this setting when it is opened, the file is moved to debug.txt.1,\n"
"deleting an older debug.txt.1 if it exists.\n"
@@ -3772,7 +4000,7 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Instrument chatcommands on registration."
+msgid "Instrument chat commands on registration."
msgstr ""
#: src/settings_translation_file.cpp
@@ -3856,7 +4084,7 @@ msgid "Joystick button repetition interval"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Joystick deadzone"
+msgid "Joystick dead zone"
msgstr ""
#: src/settings_translation_file.cpp
@@ -4614,10 +4842,6 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Makes DirectX work with LuaJIT. Disable if it causes troubles."
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Makes all liquids opaque"
msgstr ""
@@ -4689,6 +4913,10 @@ msgid "Map save interval"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Map shadows update frames"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Mapblock limit"
msgstr ""
@@ -4797,6 +5025,10 @@ msgid "Maximum FPS when the window is not focused, or when the game is paused."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Maximum distance to render shadows."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Maximum forceloaded blocks"
msgstr ""
@@ -4902,7 +5134,15 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Maximum time in ms a file download (e.g. a mod download) may take."
+msgid ""
+"Maximum time a file download (e.g. a mod download) may take, stated in "
+"milliseconds."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum time an interactive request (e.g. server list fetch) may take, "
+"stated in milliseconds."
msgstr ""
#: src/settings_translation_file.cpp
@@ -4966,7 +5206,7 @@ msgid "Mod channels"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Modifies the size of the hudbar elements."
+msgid "Modifies the size of the HUD elements."
msgstr ""
#: src/settings_translation_file.cpp
@@ -4978,6 +5218,10 @@ msgid "Monospace font size"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Monospace font size divisible by"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Mountain height noise"
msgstr ""
@@ -5098,7 +5342,7 @@ 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"
+"This is a trade-off between SQLite transaction overhead and\n"
"memory consumption (4096=100MB, as a rule of thumb)."
msgstr ""
@@ -5117,21 +5361,18 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Opaqueness (alpha) of the shadow behind the fallback font, between 0 and 255."
-msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid ""
"Open the pause menu when the window's focus is lost. Does not pause if a "
"formspec is\n"
"open."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Optional override for chat weblink color."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid ""
-"Path of the fallback font.\n"
-"If “freetype†setting is enabled: Must be a TrueType font.\n"
-"If “freetype†setting is disabled: Must be a bitmap or XML vectors font.\n"
+"Path of the fallback font. Must be a TrueType font.\n"
"This font will be used for certain languages or if the default font is "
"unavailable."
msgstr ""
@@ -5154,17 +5395,13 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Path to the default font.\n"
-"If “freetype†setting is enabled: Must be a TrueType font.\n"
-"If “freetype†setting is disabled: Must be a bitmap or XML vectors font.\n"
+"Path to the default font. Must be a TrueType font.\n"
"The fallback font will be used if the font cannot be loaded."
msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Path to the monospace font.\n"
-"If “freetype†setting is enabled: Must be a TrueType font.\n"
-"If “freetype†setting is disabled: Must be a bitmap or XML vectors font.\n"
+"Path to the monospace font. Must be a TrueType font.\n"
"This font is used for e.g. the console and profiler screen."
msgstr ""
@@ -5219,6 +5456,10 @@ msgid "Player versus player"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Poisson filtering"
+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."
@@ -5263,9 +5504,9 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"Prometheus listener address.\n"
-"If minetest is compiled with ENABLE_PROMETHEUS option enabled,\n"
+"If Minetest is compiled with ENABLE_PROMETHEUS option enabled,\n"
"enable metrics listener for Prometheus on that address.\n"
-"Metrics can be fetch on http://127.0.0.1:30000/metrics"
+"Metrics can be fetched on http://127.0.0.1:30000/metrics"
msgstr ""
#: src/settings_translation_file.cpp
@@ -5554,6 +5795,32 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Set the shadow strength.\n"
+"Lower value means lighter shadows, higher value means darker shadows."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set the soft shadow radius size.\n"
+"Lower values mean sharper shadows, bigger values mean softer shadows.\n"
+"Minimum value: 1.0; maximum value: 10.0"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set the tilt of Sun/Moon orbit in degrees.\n"
+"Value of 0 means no tilt / vertical orbit.\n"
+"Minimum value: 0.0; maximum value: 60.0"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set to true to enable Shadow Mapping.\n"
+"Requires shaders to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Set to true to enable waving leaves.\n"
"Requires shaders to be enabled."
msgstr ""
@@ -5571,6 +5838,13 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Sets shadow texture quality to 32 bits.\n"
+"On false, 16 bits texture will be used.\n"
+"This can cause much more artifacts in the shadow."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Shader path"
msgstr ""
@@ -5583,15 +5857,29 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Shadow filter quality"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Shadow map max distance in nodes to render shadows"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Shadow map texture in 32 bits"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Shadow map texture size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid ""
"Shadow offset (in pixels) of the default font. If 0, then shadow will not be "
"drawn."
msgstr ""
#: src/settings_translation_file.cpp
-msgid ""
-"Shadow offset (in pixels) of the fallback font. If 0, then shadow will not "
-"be drawn."
+msgid "Shadow strength"
msgstr ""
#: src/settings_translation_file.cpp
@@ -5613,7 +5901,7 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Show nametag backgrounds by default"
+msgid "Show name tag backgrounds by default"
msgstr ""
#: src/settings_translation_file.cpp
@@ -5638,6 +5926,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Sky Body Orbit Tilt"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Slice w"
msgstr ""
@@ -5692,15 +5984,12 @@ msgid "Sneaking speed, in nodes per second."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Sound"
-msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid "Special key"
-msgstr ""
+#, fuzzy
+msgid "Soft shadow radius"
+msgstr "Skyradius"
#: src/settings_translation_file.cpp
-msgid "Special key for climbing/descending"
+msgid "Sound"
msgstr ""
#: src/settings_translation_file.cpp
@@ -5720,6 +6009,14 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Spread a complete update of shadow map over given amount of frames.\n"
+"Higher values might make shadows laggy, lower values\n"
+"will consume more resources.\n"
+"Minimum value: 1; maximum value: 16"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Spread of light curve boost range.\n"
"Controls the width of the range to be boosted.\n"
"Standard deviation of the light curve boost Gaussian."
@@ -5826,6 +6123,13 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Texture size to render the shadow map on.\n"
+"This must be a power of two.\n"
+"Bigger numbers create better shadows but it is also more expensive."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Textures on a node may be aligned either to the node or to the world.\n"
"The former mode suits better things like machines, furniture, etc., while\n"
"the latter makes stairs and microblocks fit surroundings better.\n"
@@ -5839,7 +6143,7 @@ msgid "The URL for the content repository"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "The deadzone of the joystick"
+msgid "The dead zone of the joystick"
msgstr ""
#: src/settings_translation_file.cpp
@@ -5897,7 +6201,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"The rendering back-end for Irrlicht.\n"
+"The rendering back-end.\n"
"A restart is required after changing this.\n"
"Note: On Android, stick with OGLES1 if unsure! App may fail to start "
"otherwise.\n"
@@ -5908,7 +6212,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"The sensitivity of the joystick axes for moving the\n"
-"ingame view frustum around."
+"in-game view frustum around."
msgstr ""
#: src/settings_translation_file.cpp
@@ -6002,6 +6306,10 @@ msgid "Touch screen threshold"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Tradeoffs for performance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Trees noise"
msgstr ""
@@ -6071,7 +6379,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Use mip mapping to scale textures. May slightly increase performance,\n"
+"Use mipmapping to scale textures. May slightly increase performance,\n"
"especially when using a high resolution texture pack.\n"
"Gamma correct downscaling is not supported."
msgstr ""
@@ -6184,7 +6492,7 @@ msgid "Viewing range"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Virtual joystick triggers aux button"
+msgid "Virtual joystick triggers Aux1 button"
msgstr ""
#: src/settings_translation_file.cpp
@@ -6259,6 +6567,10 @@ msgid "Waving plants"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Weblink color"
+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"
@@ -6279,23 +6591,15 @@ msgid ""
"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.\n"
+"memory. Powers of 2 are recommended. This setting is ONLY applied if\n"
+"bilinear/trilinear/anisotropic filtering is enabled.\n"
"This is also used as the base node texture size for world-aligned\n"
"texture autoscaling."
msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Whether FreeType fonts are used, requires FreeType support to be compiled "
-"in.\n"
-"If disabled, bitmap and XML vectors fonts are used instead."
-msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid ""
-"Whether nametag backgrounds should be shown by default.\n"
+"Whether name tag backgrounds should be shown by default.\n"
"Mods may still set a background."
msgstr ""
@@ -6337,7 +6641,7 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Width component of the initial window size."
+msgid "Width component of the initial window size. Ignored in fullscreen mode."
msgstr ""
#: src/settings_translation_file.cpp
@@ -6422,34 +6726,26 @@ msgid "Y-level of seabed."
msgstr ""
#: src/settings_translation_file.cpp
-msgid ""
-"ZLib compression level to use when saving mapblocks to disk.\n"
-"-1 - Zlib's default compression level\n"
-"0 - no compresson, fastest\n"
-"9 - best compression, slowest\n"
-"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)"
-msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid ""
-"ZLib compression level to use when sending mapblocks to the client.\n"
-"-1 - Zlib's default compression level\n"
-"0 - no compresson, fastest\n"
-"9 - best compression, slowest\n"
-"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)"
+msgid "cURL file download timeout"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "cURL file download timeout"
+msgid "cURL interactive timeout"
msgstr ""
#: src/settings_translation_file.cpp
msgid "cURL parallel limit"
msgstr ""
-#: src/settings_translation_file.cpp
-msgid "cURL timeout"
-msgstr ""
+#, fuzzy
+#~ msgid "- Creative Mode: "
+#~ msgstr "- Gude løyving: "
+
+#~ msgid "- Damage: "
+#~ msgstr "- Skade: "
+
+#~ msgid "Address / Port"
+#~ msgstr "Adresse / port"
#~ msgid "Are you sure to reset your singleplayer world?"
#~ msgstr "Er du sikker på at du vill tilbakestille enkel-spelar verd?"
@@ -6466,12 +6762,21 @@ msgstr ""
#~ msgid "Configure"
#~ msgstr "Konfigurér"
+#~ msgid "Credits"
+#~ msgstr "Medvirkende"
+
+#~ msgid "Damage enabled"
+#~ msgstr "Skade aktivert"
+
#~ msgid "Downloading and installing $1, please wait..."
#~ msgstr "Henter og installerer $1, ver vennleg og vent..."
#~ msgid "Generate Normal Maps"
#~ msgstr "Generér normale kart"
+#~ msgid "Install: file: \"$1\""
+#~ msgstr "Installer: fil: «$1»"
+
#~ msgid "Main"
#~ msgstr "Hovud"
@@ -6487,6 +6792,9 @@ msgstr ""
#~ msgid "Minimap in surface mode, Zoom x4"
#~ msgstr "Minikart i overflate modus, Zoom x4"
+#~ msgid "Name / Password"
+#~ msgstr "Namn/Passord"
+
#~ msgid "Name/Password"
#~ msgstr "Namn/passord"
@@ -6499,17 +6807,34 @@ msgstr ""
#~ msgid "Parallax Occlusion"
#~ msgstr "Parralax okklusjon"
+#~ msgid "PvP enabled"
+#~ msgstr "Spelar mot spelar aktivert"
+
#~ msgid "Reset singleplayer world"
#~ msgstr "Tilbakegå enkelspelar verd"
#~ msgid "Select Package File:"
#~ msgstr "Velje eit pakke dokument:"
+#~ msgid "Special"
+#~ msgstr "Spesial"
+
#~ msgid "Start Singleplayer"
#~ msgstr "Start enkeltspelar oppleving"
+#, fuzzy
+#~ msgid "To enable shaders the OpenGL driver needs to be used."
+#~ msgstr "For å aktivere skumrings-effekt så må OpenGL driveren være i bruk."
+
#~ msgid "Toggle Cinematic"
#~ msgstr "Slå på/av kameramodus"
#~ msgid "Yes"
#~ msgstr "Ja"
+
+#, fuzzy
+#~ msgid "You died."
+#~ msgstr "Du døydde"
+
+#~ msgid "needs_fallback_font"
+#~ msgstr "no"
diff --git a/po/pl/minetest.po b/po/pl/minetest.po
index 8469a1bc2..ecce3cb36 100644
--- a/po/pl/minetest.po
+++ b/po/pl/minetest.po
@@ -2,9 +2,9 @@ msgid ""
msgstr ""
"Project-Id-Version: Polish (Minetest)\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-02-23 19:03+0100\n"
-"PO-Revision-Date: 2021-03-28 20:29+0000\n"
-"Last-Translator: ResuUman <aparat2@wp.pl>\n"
+"POT-Creation-Date: 2022-01-25 23:19+0100\n"
+"PO-Revision-Date: 2022-01-12 18:52+0000\n"
+"Last-Translator: Sebastian Jasiński <w3c.jas@gmail.com>\n"
"Language-Team: Polish <https://hosted.weblate.org/projects/minetest/minetest/"
"pl/>\n"
"Language: pl\n"
@@ -13,7 +13,43 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 "
"|| n%100>=20) ? 1 : 2;\n"
-"X-Generator: Weblate 4.6-dev\n"
+"X-Generator: Weblate 4.10.1\n"
+
+#: builtin/client/chatcommands.lua
+msgid "Clear the out chat queue"
+msgstr "Wyczyść kolejkę wiadomości czatu"
+
+#: builtin/client/chatcommands.lua
+msgid "Empty command."
+msgstr "Pusta komenda."
+
+#: builtin/client/chatcommands.lua
+msgid "Exit to main menu"
+msgstr "Wyjście do menu"
+
+#: builtin/client/chatcommands.lua
+msgid "Invalid command: "
+msgstr "Błędna komenda: "
+
+#: builtin/client/chatcommands.lua
+msgid "Issued command: "
+msgstr "Wydana komenda: "
+
+#: builtin/client/chatcommands.lua
+msgid "List online players"
+msgstr "Lista graczy online"
+
+#: builtin/client/chatcommands.lua
+msgid "Online players: "
+msgstr "Gracze online: "
+
+#: builtin/client/chatcommands.lua
+msgid "The out chat queue is now empty."
+msgstr "Kolejka czatu jest teraz pusta."
+
+#: builtin/client/chatcommands.lua
+msgid "This command is disabled by server."
+msgstr "Ta komenda jest dezaktywowana przez serwer."
#: builtin/client/death_formspec.lua src/client/game.cpp
msgid "Respawn"
@@ -23,11 +59,44 @@ msgstr "Wróć do gry"
msgid "You died"
msgstr "Umarłeś"
+#: builtin/common/chatcommands.lua
+msgid "Available commands:"
+msgstr "Dostępne komendy:"
+
+#: builtin/common/chatcommands.lua
+msgid "Available commands: "
+msgstr "Dostępne komendy: "
+
+#: builtin/common/chatcommands.lua
+msgid "Command not available: "
+msgstr "Polecenie nie jest dostępne: "
+
+#: builtin/common/chatcommands.lua
+msgid "Get help for commands"
+msgstr "Uzyskaj pomoc dotyczącą poleceń"
+
+#: builtin/common/chatcommands.lua
+msgid ""
+"Use '.help <cmd>' to get more information, or '.help all' to list everything."
+msgstr ""
+"Użyj '.help <cmd>', aby uzyskać więcej informacji lub '.help all', aby "
+"wyświetlić wszystko."
+
+#: builtin/common/chatcommands.lua
+#, fuzzy
+msgid "[all | <cmd>]"
+msgstr "[all | <cmd>]"
+
#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp
msgid "OK"
msgstr "OK"
#: builtin/fstk/ui.lua
+#, fuzzy
+msgid "<none available>"
+msgstr "Komenda nie jest dostępna: "
+
+#: builtin/fstk/ui.lua
msgid "An error occurred in a Lua script:"
msgstr "Wystąpił błąd w skrypcie Lua:"
@@ -177,14 +246,12 @@ msgstr ""
"$2 w kolejce"
#: builtin/mainmenu/dlg_contentstore.lua
-#, fuzzy
msgid "$1 downloading..."
-msgstr "Åadowanie..."
+msgstr "Pobieranie $1..."
#: builtin/mainmenu/dlg_contentstore.lua
-#, fuzzy
msgid "$1 required dependencies could not be found."
-msgstr "$1 wymaga zależności, których nie można znaleźć."
+msgstr "$1 wymaga zależności, które nie zostały znalezione."
#: builtin/mainmenu/dlg_contentstore.lua
msgid "$1 will be installed, and $2 dependencies will be skipped."
@@ -195,9 +262,8 @@ msgid "All packages"
msgstr "Wszystkie zasoby"
#: builtin/mainmenu/dlg_contentstore.lua
-#, fuzzy
msgid "Already installed"
-msgstr "Klawisz już zdefiniowany"
+msgstr "Już zainstalowany"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Back to Main Menu"
@@ -212,9 +278,8 @@ msgid "ContentDB is not available when Minetest was compiled without cURL"
msgstr "ContentDB nie jest dostępne gdy Minetest był zbudowany bez cURL"
#: builtin/mainmenu/dlg_contentstore.lua
-#, fuzzy
msgid "Downloading..."
-msgstr "Åadowanie..."
+msgstr "Pobieranie..."
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Failed to download $1"
@@ -230,15 +295,19 @@ msgid "Install"
msgstr "Instaluj"
#: builtin/mainmenu/dlg_contentstore.lua
-#, fuzzy
msgid "Install $1"
-msgstr "Instaluj"
+msgstr "Zainstaluj $1"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Install missing dependencies"
msgstr "Zainstaluj brakujące zależności"
#: builtin/mainmenu/dlg_contentstore.lua
+#, fuzzy
+msgid "Install: Unsupported file type or broken archive"
+msgstr "Instalacja moda: nieznany typ pliku \"$1\" lub uszkodzone archiwum"
+
+#: builtin/mainmenu/dlg_contentstore.lua
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Mods"
msgstr "Mody"
@@ -252,14 +321,12 @@ msgid "No results"
msgstr "Brak Wyników"
#: builtin/mainmenu/dlg_contentstore.lua
-#, fuzzy
msgid "No updates"
-msgstr "Aktualizacja"
+msgstr "Brak aktualizacji"
#: builtin/mainmenu/dlg_contentstore.lua
-#, fuzzy
msgid "Not found"
-msgstr "Wycisz dźwięk"
+msgstr "Nie znaleziono"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Overwrite"
@@ -302,7 +369,6 @@ msgid "Additional terrain"
msgstr "Dodatkowy teren"
#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
-#, fuzzy
msgid "Altitude chill"
msgstr "Wysokość mrozu"
@@ -311,24 +377,20 @@ msgid "Altitude dry"
msgstr "Wysokość suchości"
#: builtin/mainmenu/dlg_create_world.lua
-#, fuzzy
msgid "Biome blending"
-msgstr "Szum biomu"
+msgstr "Mieszanie biomów"
#: builtin/mainmenu/dlg_create_world.lua
-#, fuzzy
msgid "Biomes"
-msgstr "Szum biomu"
+msgstr "Biomy"
#: builtin/mainmenu/dlg_create_world.lua
-#, fuzzy
msgid "Caverns"
-msgstr "Szum jaskini #1"
+msgstr "jaskinie"
#: builtin/mainmenu/dlg_create_world.lua
-#, fuzzy
msgid "Caves"
-msgstr "Oktawy"
+msgstr "Jaskinie"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Create"
@@ -355,9 +417,8 @@ msgid "Flat terrain"
msgstr "Płaski teren"
#: builtin/mainmenu/dlg_create_world.lua
-#, fuzzy
msgid "Floating landmasses in the sky"
-msgstr "Gęstość gór na latających wyspach"
+msgstr "Masywy lÄ…dowe unoszÄ…ce siÄ™ na niebie"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Floatlands (experimental)"
@@ -376,9 +437,8 @@ msgid "Hills"
msgstr "Wzgórza"
#: builtin/mainmenu/dlg_create_world.lua
-#, fuzzy
msgid "Humid rivers"
-msgstr "Sterownik graficzny"
+msgstr "Wilgotne rzeki"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Increases humidity around rivers"
@@ -403,17 +463,17 @@ msgid "Mapgen flags"
msgstr "Flagi generatora mapy"
#: builtin/mainmenu/dlg_create_world.lua
-#, fuzzy
msgid "Mapgen-specific flags"
-msgstr "Generator mapy flat flagi"
+msgstr "Flagi specyficzne dla Mapgena"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Mountains"
msgstr "Góry"
#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
msgid "Mud flow"
-msgstr ""
+msgstr "Strumień błota"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Network of tunnels and caves"
@@ -432,13 +492,12 @@ msgid "Reduces humidity with altitude"
msgstr "Spadek wilgotności wraz ze wzrostem wysokości"
#: builtin/mainmenu/dlg_create_world.lua
-#, fuzzy
msgid "Rivers"
-msgstr "Rozmiar rzeki"
+msgstr "Rzeki"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Sea level rivers"
-msgstr ""
+msgstr "Rzeki na poziomie morza"
#: builtin/mainmenu/dlg_create_world.lua
#: builtin/mainmenu/dlg_settings_advanced.lua
@@ -458,44 +517,49 @@ msgstr ""
"dżungli stworzone przez v6)"
#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
msgid "Structures appearing on the terrain, typically trees and plants"
-msgstr ""
+msgstr "Struktury pojawiające się na terenie, zazwyczaj drzewa i rośliny"
#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
msgid "Temperate, Desert"
-msgstr ""
+msgstr "Biocenozy klimatu umiarkowanego, pustynie"
#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
msgid "Temperate, Desert, Jungle"
-msgstr ""
+msgstr "Biocenozy klimatu umiarkowanego, pustynie i dżungle"
#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
msgid "Temperate, Desert, Jungle, Tundra, Taiga"
-msgstr ""
+msgstr "Biocenozy klimatu umiarkowanego, pustynie, dżungla, tajga i tundra"
#: builtin/mainmenu/dlg_create_world.lua
#, fuzzy
msgid "Terrain surface erosion"
-msgstr "Szum podłoża"
+msgstr "Erozja powierzchni terenu"
#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
msgid "Trees and jungle grass"
-msgstr ""
+msgstr "Drzewa i trawa w dżungli"
#: builtin/mainmenu/dlg_create_world.lua
#, fuzzy
msgid "Vary river depth"
-msgstr "Głębokość rzeki"
+msgstr "Zmienna głębokość rzeki"
#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
msgid "Very large caverns deep in the underground"
-msgstr ""
+msgstr "Ogromne jaskinie na dużych głębokościach"
#: builtin/mainmenu/dlg_create_world.lua
#, fuzzy
msgid "Warning: The Development Test is meant for developers."
-msgstr ""
-"Uwaga: Minimal development test jest przeznaczony tylko dla developerów."
+msgstr "Ostrzeżenie: test rozwojowy jest przeznaczony dla programistów."
#: builtin/mainmenu/dlg_create_world.lua
msgid "World name"
@@ -559,7 +623,7 @@ msgstr "< Wróć do ekranu ustawień"
msgid "Browse"
msgstr "PrzeglÄ…daj"
-#: builtin/mainmenu/dlg_settings_advanced.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_settings.lua
msgid "Disabled"
msgstr "Wyłączone"
@@ -584,7 +648,8 @@ msgid "Offset"
msgstr "Margines"
#: builtin/mainmenu/dlg_settings_advanced.lua
-msgid "Persistance"
+#, fuzzy
+msgid "Persistence"
msgstr "Trwałość"
#: builtin/mainmenu/dlg_settings_advanced.lua
@@ -603,7 +668,7 @@ msgstr "Przywróć domyślne"
msgid "Scale"
msgstr "Skaluj"
-#: builtin/mainmenu/dlg_settings_advanced.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_online.lua
msgid "Search"
msgstr "Szukaj"
@@ -696,14 +761,6 @@ msgstr ""
"Instalacja moda: nie można znaleźć odpowiedniego folderu dla paczki modów $1"
#: builtin/mainmenu/pkgmgr.lua
-msgid "Install: Unsupported file type \"$1\" or broken archive"
-msgstr "Instalacja moda: nieznany typ pliku \"$1\" lub uszkodzone archiwum"
-
-#: builtin/mainmenu/pkgmgr.lua
-msgid "Install: file: \"$1\""
-msgstr "Zainstaluj mod: plik: \"$1\""
-
-#: builtin/mainmenu/pkgmgr.lua
msgid "Unable to find a valid mod or modpack"
msgstr "Nie można znaleźć prawidłowego moda lub paczki modów"
@@ -730,7 +787,7 @@ msgstr "Åadowanie..."
#: builtin/mainmenu/serverlistmgr.lua
#, fuzzy
msgid "Public server list is disabled"
-msgstr "Skryptowanie po stronie klienta jest wyłączone"
+msgstr "Lista serwerów publicznych jest wyłączona"
#: builtin/mainmenu/serverlistmgr.lua
msgid "Try reenabling public serverlist and check your internet connection."
@@ -738,6 +795,47 @@ msgstr ""
"Spróbuj ponownie włączyć publiczną listę serwerów i sprawdź swoje połączenie "
"z sieciÄ… Internet."
+#: builtin/mainmenu/tab_about.lua
+#, fuzzy
+msgid "About"
+msgstr "O grze"
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Active Contributors"
+msgstr "Aktywni współautorzy"
+
+#: builtin/mainmenu/tab_about.lua
+#, fuzzy
+msgid "Active renderer:"
+msgstr "Aktywny moduł renderowania:"
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Core Developers"
+msgstr "Twórcy"
+
+#: builtin/mainmenu/tab_about.lua
+#, fuzzy
+msgid "Open User Data Directory"
+msgstr "Otwórz katalog danych użytkownika"
+
+#: builtin/mainmenu/tab_about.lua
+#, fuzzy
+msgid ""
+"Opens the directory that contains user-provided worlds, games, mods,\n"
+"and texture packs in a file manager / explorer."
+msgstr ""
+"Otwiera katalog, który zawiera światy, gry, mody i tekstury dostarczone "
+"przez użytkownika\n"
+"oraz pakiety tekstur w menedżerze plików / eksploratorze."
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Previous Contributors"
+msgstr "Byli współautorzy"
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Previous Core Developers"
+msgstr "Poprzedni Główni Deweloperzy"
+
#: builtin/mainmenu/tab_content.lua
msgid "Browse online content"
msgstr "Przeglądaj zawartość online"
@@ -778,37 +876,6 @@ msgstr "Usuń modyfikację"
msgid "Use Texture Pack"
msgstr "Użyj paczki tekstur"
-#: builtin/mainmenu/tab_credits.lua
-msgid "Active Contributors"
-msgstr "Aktywni współautorzy"
-
-#: 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
-#, fuzzy
-msgid "Open User Data Directory"
-msgstr "Wybierz katalog"
-
-#: builtin/mainmenu/tab_credits.lua
-msgid ""
-"Opens the directory that contains user-provided worlds, games, mods,\n"
-"and texture packs in a file manager / explorer."
-msgstr ""
-
-#: builtin/mainmenu/tab_credits.lua
-msgid "Previous Contributors"
-msgstr "Byli współautorzy"
-
-#: builtin/mainmenu/tab_credits.lua
-msgid "Previous Core Developers"
-msgstr "Poprzedni Główni Deweloperzy"
-
#: builtin/mainmenu/tab_local.lua
msgid "Announce Server"
msgstr "Rozgłoś serwer"
@@ -834,12 +901,14 @@ msgid "Host Server"
msgstr "Udostępnij serwer"
#: builtin/mainmenu/tab_local.lua
+#, fuzzy
msgid "Install games from ContentDB"
-msgstr ""
+msgstr "Instaluj gry z ContentDB"
-#: builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
+#, fuzzy
msgid "Name"
-msgstr ""
+msgstr "Nazwa"
#: builtin/mainmenu/tab_local.lua
msgid "New"
@@ -849,16 +918,16 @@ msgstr "Nowy"
msgid "No world created or selected!"
msgstr "Nie wybrano bądź nie utworzono świata!"
-#: builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
#, fuzzy
msgid "Password"
-msgstr "Nowe hasło"
+msgstr "Hasło"
#: builtin/mainmenu/tab_local.lua
msgid "Play Game"
msgstr "Graj"
-#: builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
msgid "Port"
msgstr "Port"
@@ -879,8 +948,12 @@ msgid "Start Game"
msgstr "Rozpocznij grÄ™"
#: builtin/mainmenu/tab_online.lua
-msgid "Address / Port"
-msgstr "Adres / Port"
+msgid "Address"
+msgstr "Adres"
+
+#: builtin/mainmenu/tab_online.lua src/client/keycode.cpp
+msgid "Clear"
+msgstr "Delete"
#: builtin/mainmenu/tab_online.lua
msgid "Connect"
@@ -890,34 +963,47 @@ msgstr "Połącz"
msgid "Creative mode"
msgstr "Tryb kreatywny"
+#. ~ PvP = Player versus Player
#: builtin/mainmenu/tab_online.lua
-msgid "Damage enabled"
-msgstr "Obrażenia włączone"
+#, fuzzy
+msgid "Damage / PvP"
+msgstr "Włącz obrażenia/ PvP"
#: builtin/mainmenu/tab_online.lua
msgid "Del. Favorite"
msgstr "Usuń ulubiony"
#: builtin/mainmenu/tab_online.lua
-msgid "Favorite"
+#, fuzzy
+msgid "Favorites"
msgstr "Ulubione"
#: builtin/mainmenu/tab_online.lua
-msgid "Join Game"
-msgstr "Dołącz do gry"
+#, fuzzy
+msgid "Incompatible Servers"
+msgstr "Niekompatybilne serwery"
#: builtin/mainmenu/tab_online.lua
-msgid "Name / Password"
-msgstr "Nazwa gracza / Hasło"
+msgid "Join Game"
+msgstr "Dołącz do gry"
#: builtin/mainmenu/tab_online.lua
msgid "Ping"
msgstr "Ping"
-#. ~ PvP = Player versus Player
#: builtin/mainmenu/tab_online.lua
-msgid "PvP enabled"
-msgstr "PvP włączone"
+#, fuzzy
+msgid "Public Servers"
+msgstr "Publiczne serwery"
+
+#: builtin/mainmenu/tab_online.lua
+#, fuzzy
+msgid "Refresh"
+msgstr "Odśwież"
+
+#: builtin/mainmenu/tab_online.lua
+msgid "Server Description"
+msgstr "Opis serwera"
#: builtin/mainmenu/tab_settings.lua
msgid "2x"
@@ -959,11 +1045,36 @@ msgstr "Zmień klawisze"
msgid "Connected Glass"
msgstr "Szkło połączone"
+#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
+#, fuzzy
+msgid "Dynamic shadows"
+msgstr "Cienie dynamiczne"
+
+#: builtin/mainmenu/tab_settings.lua
+#, fuzzy
+msgid "Dynamic shadows: "
+msgstr "Cienie dynamiczne: "
+
#: builtin/mainmenu/tab_settings.lua
msgid "Fancy Leaves"
msgstr "Ozdobne liście"
#: builtin/mainmenu/tab_settings.lua
+#, fuzzy
+msgid "High"
+msgstr "Wysokie"
+
+#: builtin/mainmenu/tab_settings.lua
+#, fuzzy
+msgid "Low"
+msgstr "Niskie"
+
+#: builtin/mainmenu/tab_settings.lua
+#, fuzzy
+msgid "Medium"
+msgstr "Åšrednie"
+
+#: builtin/mainmenu/tab_settings.lua
msgid "Mipmap"
msgstr "Mipmapy"
@@ -1018,7 +1129,7 @@ msgstr "Shadery"
#: builtin/mainmenu/tab_settings.lua
#, fuzzy
msgid "Shaders (experimental)"
-msgstr "LatajÄ…ce wyspy (eksperymentalne)"
+msgstr "Shadery (eksperymentalne)"
#: builtin/mainmenu/tab_settings.lua
msgid "Shaders (unavailable)"
@@ -1036,10 +1147,6 @@ msgstr "Płynne oświetlenie"
msgid "Texturing:"
msgstr "Teksturowanie:"
-#: builtin/mainmenu/tab_settings.lua
-msgid "To enable shaders the OpenGL driver needs to be used."
-msgstr "Sterownik OpenGL jest wymagany aby włączyć shadery."
-
#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
msgid "Tone Mapping"
msgstr "Tone Mapping"
@@ -1053,6 +1160,16 @@ msgid "Trilinear Filter"
msgstr "Filtrowanie trójliniowe"
#: builtin/mainmenu/tab_settings.lua
+#, fuzzy
+msgid "Ultra High"
+msgstr "Bardzo wysokie"
+
+#: builtin/mainmenu/tab_settings.lua
+#, fuzzy
+msgid "Very Low"
+msgstr "Bardzo niskie"
+
+#: builtin/mainmenu/tab_settings.lua
msgid "Waving Leaves"
msgstr "Falujące liście"
@@ -1064,7 +1181,7 @@ msgstr "Fale (Ciecze)"
msgid "Waving Plants"
msgstr "Falujące rośliny"
-#: src/client/client.cpp
+#: src/client/client.cpp src/client/game.cpp
msgid "Connection timed out."
msgstr "Upłynął czas połączenia."
@@ -1093,7 +1210,8 @@ msgid "Connection error (timed out?)"
msgstr "Błąd połączenia (brak odpowiedzi?)"
#: src/client/clientlauncher.cpp
-msgid "Could not find or load game \""
+#, fuzzy
+msgid "Could not find or load game: "
msgstr "Nie można znaleźć lub wczytać trybu gry \""
#: src/client/clientlauncher.cpp
@@ -1124,18 +1242,6 @@ msgstr "Nie udało się otworzyć dostarczonego pliku z hasłem "
msgid "Provided world path doesn't exist: "
msgstr "Podana ścieżka świata nie istnieje: "
-#. ~ DO NOT TRANSLATE THIS LITERALLY!
-#. This is a special string. Put either "no" or "yes"
-#. into the translation field (literally).
-#. Choose "yes" if the language requires use of the fallback
-#. font, "no" otherwise.
-#. The fallback font is (normally) required for languages with
-#. non-Latin script, like Chinese.
-#. When in doubt, test your translation.
-#: src/client/fontengine.cpp
-msgid "needs_fallback_font"
-msgstr "no"
-
#: src/client/game.cpp
msgid ""
"\n"
@@ -1149,14 +1255,6 @@ msgid "- Address: "
msgstr "Adres "
#: src/client/game.cpp
-msgid "- Creative Mode: "
-msgstr "Tryb kreatywny "
-
-#: src/client/game.cpp
-msgid "- Damage: "
-msgstr "- Obrażenia: "
-
-#: src/client/game.cpp
msgid "- Mode: "
msgstr "- Tryb: "
@@ -1178,6 +1276,16 @@ msgid "- Server Name: "
msgstr "- Nazwa serwera: "
#: src/client/game.cpp
+#, fuzzy
+msgid "A serialization error occurred:"
+msgstr "Wystąpił błąd:"
+
+#: src/client/game.cpp
+#, c-format
+msgid "Access denied. Reason: %s"
+msgstr "Odmowa dostępu. Powód: %s"
+
+#: src/client/game.cpp
msgid "Automatic forward disabled"
msgstr "Automatyczne chodzenie do przodu wyłączone"
@@ -1186,6 +1294,26 @@ msgid "Automatic forward enabled"
msgstr "Automatyczne chodzenie do przodu włączone"
#: src/client/game.cpp
+#, fuzzy
+msgid "Block bounds hidden"
+msgstr "Granice bloków"
+
+#: src/client/game.cpp
+#, fuzzy
+msgid "Block bounds shown for all blocks"
+msgstr "Granice bloku pokazane dla wszystkich bloków"
+
+#: src/client/game.cpp
+#, fuzzy
+msgid "Block bounds shown for current block"
+msgstr "Granice bloku wyświetlane dla bieżącego bloku"
+
+#: src/client/game.cpp
+#, fuzzy
+msgid "Block bounds shown for nearby blocks"
+msgstr "Granice bloków pokazane dla pobliskich bloków"
+
+#: src/client/game.cpp
msgid "Camera update disabled"
msgstr "Aktualizowanie kamery wyłączone"
@@ -1194,6 +1322,11 @@ msgid "Camera update enabled"
msgstr "Aktualizowanie kamery włączone"
#: src/client/game.cpp
+#, fuzzy
+msgid "Can't show block bounds (need 'basic_debug' privilege)"
+msgstr "Can't show block bounds (need 'basic_debug' privilege)"
+
+#: src/client/game.cpp
msgid "Change Password"
msgstr "Zmień hasło"
@@ -1206,6 +1339,11 @@ msgid "Cinematic mode enabled"
msgstr "Tryb kinowy włączony"
#: src/client/game.cpp
+#, fuzzy
+msgid "Client disconnected"
+msgstr "Modyfikacja klienta"
+
+#: src/client/game.cpp
msgid "Client side scripting is disabled"
msgstr "Skryptowanie po stronie klienta jest wyłączone"
@@ -1214,6 +1352,11 @@ msgid "Connecting to server..."
msgstr "ÅÄ…czenie z serwerem..."
#: src/client/game.cpp
+#, fuzzy
+msgid "Connection failed for unknown reason"
+msgstr "Połączenie nie powiodło się z nieznanego powodu"
+
+#: src/client/game.cpp
msgid "Continue"
msgstr "Kontynuuj"
@@ -1245,12 +1388,15 @@ msgstr ""
"- %s: upuść przedmiot↵\n"
"- %s: otwórz ekwipunek↵\n"
"- Mysz: obróć się/patrz↵\n"
-"- Lewy przycisk myszy: kop/uderz↵\n"
-"- Prawy przycisk myszy: postaw/użyj↵\n"
"- Rolka myszy: wybierz przedmiot↵\n"
"- %s: czatuj↵\n"
#: src/client/game.cpp
+#, fuzzy, c-format
+msgid "Couldn't resolve address: %s"
+msgstr "Nie można rozwiązać adresu: %s."
+
+#: src/client/game.cpp
msgid "Creating client..."
msgstr "Tworzenie klienta..."
@@ -1379,6 +1525,11 @@ msgid "Minimap currently disabled by game or mod"
msgstr "Minimapa aktualnie wyłączona przez grę lub mod"
#: src/client/game.cpp
+#, fuzzy
+msgid "Multiplayer"
+msgstr "Gra wieloosobowa"
+
+#: src/client/game.cpp
msgid "Noclip mode disabled"
msgstr "Tryb noclip wyłączony"
@@ -1439,18 +1590,35 @@ msgid "Sound muted"
msgstr "Głośność wyciszona"
#: src/client/game.cpp
+#, fuzzy
msgid "Sound system is disabled"
-msgstr ""
+msgstr "System dźwiękowy jest wyłączony"
#: src/client/game.cpp
+#, fuzzy
msgid "Sound system is not supported on this build"
-msgstr ""
+msgstr "System dźwiękowy nie jest obsługiwany w tej kompilacji"
#: src/client/game.cpp
msgid "Sound unmuted"
msgstr "Głośność włączona ponownie"
#: src/client/game.cpp
+#, fuzzy, c-format
+msgid "The server is probably running a different version of %s."
+msgstr "Serwer prawdopodobnie pracuje na innej wersji %s."
+
+#: src/client/game.cpp
+#, fuzzy, c-format
+msgid "Unable to connect to %s because IPv6 is disabled"
+msgstr "Nie można połączyć się z %s, ponieważ IPv6 jest wyłączony"
+
+#: src/client/game.cpp
+#, fuzzy, c-format
+msgid "Unable to listen on %s because IPv6 is disabled"
+msgstr "Nie można nasłuchiwać na %s, ponieważ IPv6 jest wyłączony"
+
+#: src/client/game.cpp
#, c-format
msgid "Viewing range changed to %d"
msgstr "Zmieniono zasięg widoczności na %d%%"
@@ -1520,10 +1688,6 @@ msgid "Caps Lock"
msgstr "Klawisz Caps Lock"
#: src/client/keycode.cpp
-msgid "Clear"
-msgstr "Delete"
-
-#: src/client/keycode.cpp
msgid "Control"
msgstr "Control"
@@ -1787,7 +1951,17 @@ msgstr "Minimapa w trybie powierzchniowym, powiększenie x%d"
#: src/client/minimap.cpp
#, fuzzy
msgid "Minimap in texture mode"
-msgstr "Minimalna wielkość tekstury dla filtrów"
+msgstr "Minimapa w trybie teksturowym"
+
+#: src/gui/guiChatConsole.cpp
+#, fuzzy
+msgid "Failed to open webpage"
+msgstr "Pobieranie $1 do $2 nie powiodło się :("
+
+#: src/gui/guiChatConsole.cpp
+#, fuzzy
+msgid "Opening webpage"
+msgstr "Strona poczÄ…tkowa"
#: src/gui/guiConfirmRegistration.cpp src/gui/guiPasswordChange.cpp
msgid "Passwords do not match!"
@@ -1817,8 +1991,9 @@ msgid "Proceed"
msgstr "Kontynuuj"
#: src/gui/guiKeyChangeMenu.cpp
-msgid "\"Special\" = climb down"
-msgstr "\"Specjalny\" = wspinaj siÄ™"
+#, fuzzy
+msgid "\"Aux1\" = climb down"
+msgstr "\"Specjalny\" = schodź"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Autoforward"
@@ -1829,10 +2004,20 @@ msgid "Automatic jumping"
msgstr "Automatyczne skoki"
#: src/gui/guiKeyChangeMenu.cpp
+#, fuzzy
+msgid "Aux1"
+msgstr "Aux1"
+
+#: src/gui/guiKeyChangeMenu.cpp
msgid "Backward"
msgstr "Tył"
#: src/gui/guiKeyChangeMenu.cpp
+#, fuzzy
+msgid "Block bounds"
+msgstr "Granice bloków"
+
+#: src/gui/guiKeyChangeMenu.cpp
msgid "Change camera"
msgstr "Zmień kamerę"
@@ -1923,10 +2108,6 @@ msgid "Sneak"
msgstr "Skradanie"
#: src/gui/guiKeyChangeMenu.cpp
-msgid "Special"
-msgstr "Specialne"
-
-#: src/gui/guiKeyChangeMenu.cpp
msgid "Toggle HUD"
msgstr "Przełącz HUD"
@@ -1957,7 +2138,7 @@ msgstr "Przełącz tryb noclip"
#: src/gui/guiKeyChangeMenu.cpp
#, fuzzy
msgid "Toggle pitchmove"
-msgstr "Przełącz historię czatu"
+msgstr "Przełączanie przemieszczania"
#: src/gui/guiKeyChangeMenu.cpp
msgid "press key"
@@ -1988,7 +2169,8 @@ msgid "Muted"
msgstr "Wyciszony"
#: src/gui/guiVolumeChange.cpp
-msgid "Sound Volume: "
+#, fuzzy, c-format
+msgid "Sound Volume: %d%%"
msgstr "Głośność: "
#. ~ Imperative, as in "Enter/type in text".
@@ -2014,13 +2196,14 @@ msgstr ""
"dotknięcia."
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
-"(Android) Use virtual joystick to trigger \"aux\" button.\n"
-"If enabled, virtual joystick will also tap \"aux\" button when out of main "
+"(Android) Use virtual joystick to trigger \"Aux1\" button.\n"
+"If enabled, virtual joystick will also tap \"Aux1\" button when out of main "
"circle."
msgstr ""
-"(Android) Użyj wirtualnego joysticka, aby zaaktywować przycisk \"aux\".\n"
-"Gdy włączone, wirtualny joystick również naciśnie przycisk \"aux\", gdy "
+"(Android) Użyj wirtualnego joysticka, aby aktywować przycisk \"aux\".\n"
+"Gdy włączone to wirtualny joystick również naciśnie przycisk \"aux\", gdy "
"znajduje się poza głównym okręgiem."
#: src/settings_translation_file.cpp
@@ -2088,7 +2271,7 @@ msgstr "Szum 2D, który wpływa na rozmiar/ występowanie stepów górskich."
#: src/settings_translation_file.cpp
#, fuzzy
msgid "2D noise that locates the river valleys and channels."
-msgstr "Szum 2D, który wpływa na kształt/rozmiar zaokrąglonych wzgórz."
+msgstr "Szum 2D, który wpływa na doliny i kanały rzeczne."
#: src/settings_translation_file.cpp
msgid "3D clouds"
@@ -2101,7 +2284,7 @@ msgstr "Modele 3D"
#: src/settings_translation_file.cpp
#, fuzzy
msgid "3D mode parallax strength"
-msgstr "Siła map normlanych"
+msgstr "Siła paralaksy w trybie 3D"
#: src/settings_translation_file.cpp
msgid "3D noise defining giant caverns."
@@ -2116,12 +2299,18 @@ msgstr ""
"Określa również strukturę wznoszącego się terenu górzystego."
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
"3D noise defining structure of floatlands.\n"
"If altered from the default, the noise 'scale' (0.7 by default) may need\n"
"to be adjusted, as floatland tapering functions best when this noise has\n"
"a value range of approximately -2.0 to 2.0."
msgstr ""
+"Szum 3D określający strukturę terenów pływających.\n"
+"Jeśli wartość domyślna zostanie zmieniona, konieczne będzie dostosowanie "
+"\"skali\" szumu (domyślnie 0,7), \n"
+"ponieważ zwężanie terenów pływających działa najlepiej, \n"
+"gdy wartość szumu jest z zakresu od około -2,0 do 2,0."
#: src/settings_translation_file.cpp
msgid "3D noise defining structure of river canyon walls."
@@ -2186,16 +2375,17 @@ msgstr ""
#: src/settings_translation_file.cpp
#, fuzzy
msgid "ABM interval"
-msgstr "Interwał zapisu mapy"
+msgstr "Interwał ABM"
#: src/settings_translation_file.cpp
+#, fuzzy
msgid "ABM time budget"
-msgstr ""
+msgstr "Budżet czasowy ABM"
#: src/settings_translation_file.cpp
#, fuzzy
msgid "Absolute limit of queued blocks to emerge"
-msgstr "Bezwzględny limit kolejki"
+msgstr "Bezwzględny limit kolejki pojawiających się bloków"
#: src/settings_translation_file.cpp
msgid "Acceleration in air"
@@ -2244,7 +2434,13 @@ msgstr ""
"ekranów 4k."
#: src/settings_translation_file.cpp
-#, c-format
+#, fuzzy
+msgid "Adjust the detected display density, used for scaling UI elements."
+msgstr ""
+"Dostosuj wykrytą gęstość wyświetlania, używaną do skalowania elementów UI."
+
+#: src/settings_translation_file.cpp
+#, fuzzy, c-format
msgid ""
"Adjusts the density of the floatland layer.\n"
"Increase value to increase density. Can be positive or negative.\n"
@@ -2252,6 +2448,12 @@ msgid ""
"Value = 2.0 (can be higher depending on 'mgv7_np_floatland', always test\n"
"to be sure) creates a solid floatland layer."
msgstr ""
+"Dostosowuje gęstość warstwy pływających wysp.\n"
+"Aby zwiększyć gęstość, ustaw wyższą wartość. Może być dodatnia lub ujemna.\n"
+"Wartość = 0,0: 50% objętości to pływająca wyspa.\n"
+"Wartość = 2,0 (może być wyższa w zależności od 'mgv7_np_floatland', aby mieć "
+"pewność,\n"
+"zawsze sprawdzaj) tworzy stałą warstwę pływającej wyspy."
#: src/settings_translation_file.cpp
msgid "Advanced"
@@ -2353,7 +2555,6 @@ msgstr ""
"Zapisane w blokach mapy (16 bloków)."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Automatic forward key"
msgstr "Klawisz automatycznego poruszania siÄ™ do przodu"
@@ -2374,6 +2575,16 @@ msgid "Autoscaling mode"
msgstr "Tryb automatycznego skalowania"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Aux1 key"
+msgstr "Klawisz Aux1"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Aux1 key for climbing/descending"
+msgstr "Klawisz Aux1 używany do wspinania/schodzenia"
+
+#: src/settings_translation_file.cpp
msgid "Backward key"
msgstr "Wstecz"
@@ -2418,22 +2629,18 @@ msgid "Biome noise"
msgstr "Szum biomu"
#: src/settings_translation_file.cpp
-msgid "Bits per pixel (aka color depth) in fullscreen mode."
-msgstr "Bity na piksel (głębia koloru) w trybie pełnoekranowym."
-
-#: src/settings_translation_file.cpp
msgid "Block send optimize distance"
msgstr "Dystans optymalizacji wysyłanych bloków"
#: src/settings_translation_file.cpp
#, fuzzy
msgid "Bold and italic font path"
-msgstr "Ścieżka czcionki typu Monospace"
+msgstr "Ścieżka pogrubionej czcionki oraz kursywy"
#: src/settings_translation_file.cpp
#, fuzzy
msgid "Bold and italic monospace font path"
-msgstr "Ścieżka czcionki typu Monospace"
+msgstr "Ścieżka pogrubionej czcionki oraz kursywy typu Monospace"
#: src/settings_translation_file.cpp
msgid "Bold font path"
@@ -2521,16 +2728,28 @@ msgstr "Próg groty"
#: src/settings_translation_file.cpp
#, fuzzy
msgid "Cavern upper limit"
-msgstr "Szerokość jaskini"
+msgstr "Górna granica jaskiń"
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
"Center of light curve boost range.\n"
"Where 0.0 is minimum light level, 1.0 is maximum light level."
msgstr ""
+"Środek zakresu wzmocnienia krzywej światła.\n"
+"0,0 to minimalny poziom światła, 1,0 to maksymalny poziom światła."
#: src/settings_translation_file.cpp
#, fuzzy
+msgid "Chat command time message threshold"
+msgstr "Limit czasu komendy czatu"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Chat commands"
+msgstr "Komenda"
+
+#: src/settings_translation_file.cpp
msgid "Chat font size"
msgstr "Rozmiar czcionki"
@@ -2541,17 +2760,17 @@ msgstr "Klawisz czatu"
#: src/settings_translation_file.cpp
#, fuzzy
msgid "Chat log level"
-msgstr "Poziom logowania debugowania"
+msgstr "Poziom dziennika czatu"
#: src/settings_translation_file.cpp
#, fuzzy
msgid "Chat message count limit"
-msgstr "Komunikat o stanie połączenia"
+msgstr "Limit liczby wiadomości na czacie"
#: src/settings_translation_file.cpp
#, fuzzy
msgid "Chat message format"
-msgstr "Maksymalna długość wiadomości na czacie"
+msgstr "Format wiadomości czatu"
#: src/settings_translation_file.cpp
msgid "Chat message kick threshold"
@@ -2566,8 +2785,9 @@ msgid "Chat toggle key"
msgstr "Klawisz przełączania czatu"
#: src/settings_translation_file.cpp
-msgid "Chatcommands"
-msgstr "Komenda"
+#, fuzzy
+msgid "Chat weblinks"
+msgstr "Chat widoczny"
#: src/settings_translation_file.cpp
msgid "Chunk size"
@@ -2586,6 +2806,15 @@ msgid "Clean transparent textures"
msgstr "Czyste przeźroczyste tekstury"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid ""
+"Clickable weblinks (middle-click or Ctrl+left-click) enabled in chat console "
+"output."
+msgstr ""
+"Klikalne łącza internetowe (środkowe kliknięcie lub Ctrl+ kliknięcie lewym "
+"przyciskiem myszy) włączone w wyjściach konsoli czatu."
+
+#: src/settings_translation_file.cpp
msgid "Client"
msgstr "Klient"
@@ -2600,7 +2829,7 @@ msgstr "Modyfikacja klienta"
#: src/settings_translation_file.cpp
#, fuzzy
msgid "Client side modding restrictions"
-msgstr "Modyfikacja klienta"
+msgstr "Ograniczenia modowania po stronie klienta"
#: src/settings_translation_file.cpp
#, fuzzy
@@ -2632,6 +2861,12 @@ msgid "Colored fog"
msgstr "Kolorowa mgła"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Colored shadows"
+msgstr "Kolorowe cienie"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
"Comma-separated list of flags to hide in the content repository.\n"
"\"nonfree\" can be used to hide packages which do not qualify as 'free "
@@ -2641,6 +2876,13 @@ msgid ""
"These flags are independent from Minetest versions,\n"
"so see a full list at https://content.minetest.net/help/content_flags/"
msgstr ""
+"Oddzielona przecinkami lista flag do ukrycia w repozytorium zawartości.\n"
+"\"nonfree\" mogą być używane do ukrywania pakietów, które nie kwalifikują "
+"siÄ™ jako \"wolne oprogramowanie\",\n"
+"zgodnie z definicjÄ… Fundacji Wolnego Oprogramowania.\n"
+"Można również określić klasyfikacje zawartości.\n"
+"Flagi te są niezależne od wersji Minetesta zobacz, więc pełną listę na "
+"stronie https://content.minetest.net/help/content_flags/"
#: src/settings_translation_file.cpp
msgid ""
@@ -2663,6 +2905,32 @@ msgid "Command key"
msgstr "Klawisz komend"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid ""
+"Compression level to use when saving mapblocks to disk.\n"
+"-1 - use default compression level\n"
+"0 - least compression, fastest\n"
+"9 - best compression, slowest"
+msgstr ""
+"Poziom kompresji jaki ma być stosowany przy zapisie bloków map na dysk.\n"
+"-1 - użyj domyślnego poziomu kompresji\n"
+"0 - najmniejsza kompresja, najszybsza\n"
+"9 - najlepsza kompresja, najwolniejsza"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid ""
+"Compression level to use when sending mapblocks to the client.\n"
+"-1 - use default compression level\n"
+"0 - least compression, fastest\n"
+"9 - best compression, slowest"
+msgstr ""
+"Poziom kompresji jaki ma być użyty podczas wysyłania mapbloków do klienta.\n"
+"-1 - użyj domyślnego poziomu kompresji\n"
+"0 - najmniejsza kompresja, najszybsza\n"
+"9 - najlepsza kompresja, najwolniejsza"
+
+#: src/settings_translation_file.cpp
msgid "Connect glass"
msgstr "Połączone szkło"
@@ -2691,13 +2959,14 @@ msgid "ContentDB Flag Blacklist"
msgstr "Flaga czarnej listy ContentDB"
#: src/settings_translation_file.cpp
+#, fuzzy
msgid "ContentDB Max Concurrent Downloads"
-msgstr ""
+msgstr "Maksymalna liczba jednoczesnych pobrań ContentDB"
#: src/settings_translation_file.cpp
#, fuzzy
msgid "ContentDB URL"
-msgstr "Zawartość"
+msgstr "Adres URL ContentDB"
#: src/settings_translation_file.cpp
msgid "Continuous forward"
@@ -2724,9 +2993,9 @@ msgid ""
"Examples:\n"
"72 = 20min, 360 = 4min, 1 = 24hour, 0 = day/night/whatever stays unchanged."
msgstr ""
-"Kontrola długości cyklu dnia i nocy.\n"
-"Przykłady: 72 = 20min, 360 = 4min, 1 = 24hour, 0 = dzień/noc/cokolwiek "
-"zostaje niezmienione."
+"Reguluje długość cyklu dzień/noc.\n"
+"Przykłady:\n"
+"72 = 20min, 360 = 4min, 1 = 24h, 0 = dzień/noc/wszystko pozostaje bez zmian."
#: src/settings_translation_file.cpp
msgid "Controls sinking speed in liquid."
@@ -2741,11 +3010,15 @@ msgid "Controls steepness/height of hills."
msgstr "Kontroluje stromość/wysokość gór."
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
"Controls width of tunnels, a smaller value creates wider tunnels.\n"
"Value >= 10.0 completely disables generation of tunnels and avoids the\n"
"intensive noise calculations."
msgstr ""
+"Wpływa na szerokość tuneli, mniejsza wartość tworzy szersze tunele.\n"
+"Wartość >= 10,0 całkowicie wyłącza tworzenie tuneli i pozwala na uniknięcie\n"
+"intensywnych obliczeń hałasu."
#: src/settings_translation_file.cpp
msgid "Crash message"
@@ -2763,7 +3036,7 @@ msgstr "Kanał alfa celownika"
#, fuzzy
msgid ""
"Crosshair alpha (opaqueness, between 0 and 255).\n"
-"Also controls the object crosshair color"
+"This also applies to the object crosshair."
msgstr ""
"Kanał alfa celownika (pomiędzy 0 a 255).\n"
"Wpływa również na kolor celownika obiektów"
@@ -2773,10 +3046,13 @@ msgid "Crosshair color"
msgstr "Kolor celownika"
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
"Crosshair color (R,G,B).\n"
"Also controls the object crosshair color"
msgstr ""
+"Kolor celownika (R, G,B).\n"
+"Wpływa również na kolor celownika"
#: src/settings_translation_file.cpp
msgid "DPI"
@@ -2793,7 +3069,7 @@ msgstr "Klawisz przełączania informacji debugowania"
#: src/settings_translation_file.cpp
#, fuzzy
msgid "Debug log file size threshold"
-msgstr "Próg szumu pustyni"
+msgstr "Próg rozmiaru pliku dziennika debugowania"
#: src/settings_translation_file.cpp
msgid "Debug log level"
@@ -2804,7 +3080,6 @@ msgid "Dec. volume key"
msgstr "Klawisz zmniejszania głośności"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Decrease this to increase liquid resistance to movement."
msgstr "Zmniejsz wartość, aby zwiększyć opór ruchu w cieczy."
@@ -2843,15 +3118,18 @@ msgstr "Domyślny format raportu"
#: src/settings_translation_file.cpp
#, fuzzy
msgid "Default stack size"
-msgstr "Domyślna gra"
+msgstr "Domyślny rozmiar stosu"
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
-"Default timeout for cURL, stated in milliseconds.\n"
-"Only has an effect if compiled with cURL."
+"Define shadow filtering quality.\n"
+"This simulates the soft shadows effect by applying a PCF or Poisson disk\n"
+"but also uses more resources."
msgstr ""
-"Domyślny limit czasu dla cURL, w milisekundach.\n"
-"Ma znaczenie tylko gdy skompilowane z cURL."
+"Określa jakość filtrowania cieni\n"
+"Symuluje to efekt miękkich cieni, stosując dysk PCF lub poisson\n"
+"ale także zużywa więcej zasobów."
#: src/settings_translation_file.cpp
msgid "Defines areas where trees have apples."
@@ -2864,12 +3142,12 @@ msgstr "Określa obszary z piaszczystymi plażami."
#: src/settings_translation_file.cpp
#, fuzzy
msgid "Defines distribution of higher terrain and steepness of cliffs."
-msgstr "Określa obszary wyższych terenów oraz wpływa na stromość klifów."
+msgstr "Określa rozmieszczenie wyższego terenu i stromość klifów."
#: src/settings_translation_file.cpp
#, fuzzy
msgid "Defines distribution of higher terrain."
-msgstr "Określa obszary 'terrain_higher' (szczyt wzgórza)."
+msgstr "Określa rozmieszczenie wyższych terenów."
#: src/settings_translation_file.cpp
msgid "Defines full size of caverns, smaller values create larger caverns."
@@ -2884,13 +3162,14 @@ msgid "Defines location and terrain of optional hills and lakes."
msgstr "Określa położenie oraz teren z dodatkowymi górami i jeziorami."
#: src/settings_translation_file.cpp
+#, fuzzy
msgid "Defines the base ground level."
-msgstr ""
+msgstr "Określa podstawowy poziom podłoża."
#: src/settings_translation_file.cpp
#, fuzzy
msgid "Defines the depth of the river channel."
-msgstr "Określa głębokość rzek."
+msgstr "Określa głębokość kanałów rzecznych."
#: src/settings_translation_file.cpp
msgid "Defines the maximal player transfer distance in blocks (0 = unlimited)."
@@ -2901,10 +3180,9 @@ msgstr ""
#: src/settings_translation_file.cpp
#, fuzzy
msgid "Defines the width of the river channel."
-msgstr "Określa strukturę kanałów rzecznych."
+msgstr "Określa szerokość kanałów rzecznych."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Defines the width of the river valley."
msgstr "Określa szerokość doliny rzecznej."
@@ -2960,7 +3238,7 @@ msgid ""
"When the 'snowbiomes' flag is enabled, this is ignored."
msgstr ""
"Pustynie pojawią się gdy np_biome przekroczy tą wartość.\n"
-"Kiedy nowy system biomu jest odblokowany, ta wartość jest ignorowana."
+"Kiedy flaga 'snowbiomes' jest włączona, ta wartość jest ignorowana."
#: src/settings_translation_file.cpp
msgid "Desynchronize block animation"
@@ -2969,7 +3247,7 @@ msgstr "Odsynchronizuj animację bloków"
#: src/settings_translation_file.cpp
#, fuzzy
msgid "Dig key"
-msgstr "W prawo"
+msgstr "Klawisz kopania"
#: src/settings_translation_file.cpp
msgid "Digging particles"
@@ -2984,6 +3262,11 @@ msgid "Disallow empty passwords"
msgstr "Nie zezwalaj na puste hasła"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Display Density Scaling Factor"
+msgstr "Wyświetl współczynnik skalowania gęstości"
+
+#: src/settings_translation_file.cpp
msgid "Domain name of server, to be displayed in the serverlist."
msgstr "Serwer DNS, wyświetlany na liście serwerów."
@@ -3012,8 +3295,9 @@ msgid "Dungeon minimum Y"
msgstr "Minimalna wartość Y lochu"
#: src/settings_translation_file.cpp
+#, fuzzy
msgid "Dungeon noise"
-msgstr ""
+msgstr "Hałas lochu"
#: src/settings_translation_file.cpp
msgid ""
@@ -3032,6 +3316,27 @@ msgstr ""
"To wsparcie jest eksperymentalne i API może ulec zmianie."
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid ""
+"Enable Poisson disk filtering.\n"
+"On true uses Poisson disk to make \"soft shadows\". Otherwise uses PCF "
+"filtering."
+msgstr ""
+"Włącz filtrowanie dysku poisson.\n"
+"Jeśli włączone, to używa dysku poisson do \"miękkich cieni\". W przeciwnym "
+"razie używa filtrowania PCF."
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid ""
+"Enable colored shadows.\n"
+"On true translucent nodes cast colored shadows. This is expensive."
+msgstr ""
+"Włącza kolorowe cienie. \n"
+"Na rzeczywistych półprzezroczystych węzłach rzuca kolorowe cienie. To "
+"kosztowne."
+
+#: src/settings_translation_file.cpp
msgid "Enable console window"
msgstr "Odblokuj okno konsoli"
@@ -3066,10 +3371,13 @@ msgid "Enable register confirmation"
msgstr "Włącz potwierdzanie rejestracji"
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
"Enable register confirmation when connecting to server.\n"
"If disabled, new account will be registered automatically."
msgstr ""
+"Włącz potwierdzanie rejestracji podczas łączenia się z serwerem.\n"
+"Jeśli wyłączone, to nowe konto zostanie zarejestrowane automatycznie."
#: src/settings_translation_file.cpp
msgid ""
@@ -3129,17 +3437,25 @@ msgid ""
"Ignored if bind_address is set.\n"
"Needs enable_ipv6 to be enabled."
msgstr ""
-"Przełącza pracę serwera w trybie IPv6. Serwer IPv6 może być ograniczony\n"
-"tylko dla klientów IPv6, w zależności od konfiguracji systemu.\n"
-"Ignorowane jeżeli bind_address jest ustawiony."
+"Włącza/wyłącza uruchamianie serwera IPv6.\n"
+"Ignorowane jeśli ustawiony jest bind_address.\n"
+"Wymaga włączenia enable_ipv6."
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
"Enables Hable's 'Uncharted 2' filmic tone mapping.\n"
"Simulates the tone curve of photographic film and how this approximates the\n"
"appearance of high dynamic range images. Mid-range contrast is slightly\n"
"enhanced, highlights and shadows are gradually compressed."
msgstr ""
+"Umożliwia Hable's 'Uncharted 2' filmowe mapowanie tonów.\n"
+"Symuluje krzywą tonalną kliszy fotograficznej i sposób, w jaki przybliża "
+"ona\n"
+"wygląd obrazów o wysokim zakresie dynamiki. Kontrast w średnim zakresie jest "
+"lekko wzmocniony\n"
+"Wzmocnienie kontrastu w średnich zakresach, stopniowa kompresja świateł i "
+"cieni."
#: src/settings_translation_file.cpp
msgid "Enables animation of inventory items."
@@ -3154,12 +3470,24 @@ msgid "Enables minimap."
msgstr "Włącz minimapę."
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
"Enables the sound system.\n"
"If disabled, this completely disables all sounds everywhere and the in-game\n"
"sound controls will be non-functional.\n"
"Changing this setting requires a restart."
msgstr ""
+"Włącza dźwięk.\n"
+"Jeśli wyłączone, całkowicie wyłącza wszystkie dźwięki wszędzie oraz "
+"sterowanie dźwiękiem \n"
+"w grze nie będzie działać.\n"
+"Zmiana tego ustawienia wymaga ponownego uruchomienia."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enables tradeoffs that reduce CPU load or increase rendering performance\n"
+"at the expense of minor visual glitches that do not impact game playability."
+msgstr ""
#: src/settings_translation_file.cpp
msgid "Engine profiling data print interval"
@@ -3170,6 +3498,7 @@ msgid "Entity methods"
msgstr "Metody bytów"
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
"Exponent of the floatland tapering. Alters the tapering behaviour.\n"
"Value = 1.0 creates a uniform, linear tapering.\n"
@@ -3178,6 +3507,13 @@ msgid ""
"Values < 1.0 (for example 0.25) create a more defined surface level with\n"
"flatter lowlands, suitable for a solid floatland layer."
msgstr ""
+"Wykładnik zwężenia pływającej wyspy. Zmienia zachowanie zwężenia.\n"
+"Wartość = 1.0 tworzy jednolite, liniowe zwężenie.\n"
+"Wartości > 1.0 tworzą gładkie zwężenie odpowiednie dla domyślnie "
+"odseparowanych\n"
+"floatlands.\n"
+"Wartości < 1.0 (np. 0.25) tworzą bardziej zdefiniowany poziom powierzchni z\n"
+"płaskimi nizinami, odpowiednimi dla jednolitej warstwy pływających wysp."
#: src/settings_translation_file.cpp
#, fuzzy
@@ -3199,19 +3535,7 @@ msgstr "Współczynnik spadku drgań"
#: src/settings_translation_file.cpp
#, fuzzy
msgid "Fallback font path"
-msgstr "Zastępcza czcionka"
-
-#: src/settings_translation_file.cpp
-msgid "Fallback font shadow"
-msgstr "Zastępczy cień czcionki"
-
-#: src/settings_translation_file.cpp
-msgid "Fallback font shadow alpha"
-msgstr "Zastępcza przeźroczystość cienia czcionki"
-
-#: src/settings_translation_file.cpp
-msgid "Fallback font size"
-msgstr "Zastępczy rozmiar czcionki"
+msgstr "Ścieżka czcionki zastępczej"
#: src/settings_translation_file.cpp
msgid "Fast key"
@@ -3231,7 +3555,7 @@ msgstr "Szybkie poruszanie"
#: src/settings_translation_file.cpp
msgid ""
-"Fast movement (via the \"special\" key).\n"
+"Fast movement (via the \"Aux1\" key).\n"
"This requires the \"fast\" privilege on the server."
msgstr ""
"Szybki ruch (za pomocÄ… przycisku „specjalnegoâ€).\n"
@@ -3246,14 +3570,13 @@ msgid "Field of view in degrees."
msgstr "Pole widzenia w stopniach."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"File in client/serverlist/ that contains your favorite servers displayed in "
"the\n"
"Multiplayer Tab."
msgstr ""
-"Plik w kliencie (lista serwerów), który zawiera ulubione serwery wyświetlane "
-"\n"
+"Plik w kliencie (lista serwerów), który zawiera ulubione serwery "
+"wyświetlane \n"
"w zakładce Trybu wieloosobowego."
#: src/settings_translation_file.cpp
@@ -3272,16 +3595,16 @@ msgstr "Mapowanie Filmic tone"
#, fuzzy
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."
+"which PNG optimizers usually discard, often resulting in dark or\n"
+"light edges to transparent textures. Apply a filter to clean that up\n"
+"at texture load time. This is automatically enabled if mipmapping is enabled."
msgstr ""
"Filtrowanie tekstur może wymieszać wartości RGB piksela z w pełni "
"przeźroczystymi sąsiadami,\n"
"które optymalizatory PNG najczęściej odrzucają, co czasem powoduje "
"ciemniejsze lub jaśniejsze\n"
-"krawędzie w przeźroczystych teksturach. Zastosuj ten filtr aby wyczyścić to "
-"\n"
+"krawędzie w przeźroczystych teksturach. Zastosuj ten filtr aby wyczyścić "
+"to \n"
"w czasie ładowania tekstur."
#: src/settings_translation_file.cpp
@@ -3308,36 +3631,37 @@ msgstr "Ustaw wirtualny joystick"
#: src/settings_translation_file.cpp
#, fuzzy
msgid "Floatland density"
-msgstr "Gęstość gór na latających wyspach"
+msgstr "Gęstość latających wysp"
#: src/settings_translation_file.cpp
#, fuzzy
msgid "Floatland maximum Y"
-msgstr "Maksymalna wartość Y lochu"
+msgstr "Maksymalna wartość Y latających wysp"
#: src/settings_translation_file.cpp
#, fuzzy
msgid "Floatland minimum Y"
-msgstr "Minimalna wartość Y lochu"
+msgstr "Minimalna wartość Y latających wysp"
#: src/settings_translation_file.cpp
#, fuzzy
msgid "Floatland noise"
-msgstr "Podstawowy szum wznoszÄ…cego siÄ™ terenu"
+msgstr "Szum latajÄ…cych wysp"
#: src/settings_translation_file.cpp
#, fuzzy
msgid "Floatland taper exponent"
-msgstr "Gęstość gór na latających wyspach"
+msgstr "Wykładnik zbieżności latających wysp"
#: src/settings_translation_file.cpp
#, fuzzy
msgid "Floatland tapering distance"
-msgstr "Podstawowy szum wznoszÄ…cego siÄ™ terenu"
+msgstr "Odległość zwężania latających wysp"
#: src/settings_translation_file.cpp
+#, fuzzy
msgid "Floatland water level"
-msgstr ""
+msgstr "Poziom wody pływającej wyspy"
#: src/settings_translation_file.cpp
msgid "Fly key"
@@ -3352,7 +3676,6 @@ msgid "Fog"
msgstr "Mgła"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Fog start"
msgstr "Początek mgły"
@@ -3361,12 +3684,14 @@ msgid "Fog toggle key"
msgstr "Klawisz przełączania mgły"
#: src/settings_translation_file.cpp
+#, fuzzy
msgid "Font bold by default"
-msgstr ""
+msgstr "Domyślnie pogrubiona czcionka"
#: src/settings_translation_file.cpp
+#, fuzzy
msgid "Font italic by default"
-msgstr ""
+msgstr "Domyślnie kursywa czcionki"
#: src/settings_translation_file.cpp
msgid "Font shadow"
@@ -3381,22 +3706,38 @@ msgid "Font size"
msgstr "Rozmiar czcionki"
#: src/settings_translation_file.cpp
-msgid "Font size of the default font in point (pt)."
+msgid "Font size divisible by"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Font size of the fallback font in point (pt)."
-msgstr ""
+#, fuzzy
+msgid "Font size of the default font where 1 unit = 1 pixel at 96 DPI"
+msgstr "Rozmiar domyślnej czcionki w punktach (pt)."
#: src/settings_translation_file.cpp
-msgid "Font size of the monospace font in point (pt)."
-msgstr ""
+#, fuzzy
+msgid "Font size of the monospace font where 1 unit = 1 pixel at 96 DPI"
+msgstr "Rozmiar czcionki monospace w punktach (pt)."
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
"Font size of the recent chat text and chat prompt in point (pt).\n"
"Value 0 will use the default font size."
msgstr ""
+"Rozmiar czcionki tekstu ostatniej rozmowy i monitu rozmowy w punktach (pt).\n"
+"Wartość 0 spowoduje użycie domyślnego rozmiaru czcionki."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"For pixel-style fonts that do not scale well, this ensures that font sizes "
+"used\n"
+"with this font will always be divisible by this value, in pixels. For "
+"instance,\n"
+"a pixel font 16 pixels tall should have this set to 16, so it will only ever "
+"be\n"
+"sized 16, 32, 48, etc., so a mod requesting a size of 25 will get 32."
+msgstr ""
#: src/settings_translation_file.cpp
#, fuzzy
@@ -3468,11 +3809,6 @@ msgid "Fraction of the visible distance at which fog starts to be rendered"
msgstr "Część widocznej odległości w której mgła zaczyna się renderować"
#: src/settings_translation_file.cpp
-#, fuzzy
-msgid "FreeType fonts"
-msgstr "Czcionki Freetype"
-
-#: src/settings_translation_file.cpp
msgid ""
"From how far blocks are generated for clients, stated in mapblocks (16 "
"nodes)."
@@ -3488,6 +3824,7 @@ msgstr ""
"(16 węzłów)."
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
"From how far clients know about objects, stated in mapblocks (16 nodes).\n"
"\n"
@@ -3495,16 +3832,20 @@ msgid ""
"to maintain active objects up to this distance in the direction the\n"
"player is looking. (This can avoid mobs suddenly disappearing from view)"
msgstr ""
+"Maksymalna odległość z której klienci wiedzą o obiektach, podawanych w "
+"blokach map (16 węzłów).\n"
+"\n"
+"Ustawienie wartości większej niż active_block_range spowoduje również, że "
+"serwer\n"
+"będzie utrzymywał aktywne obiekty do tej odległości w kierunku w którym "
+"patrzy gracz. (Dzięki temu można uniknąć nagłego zniknięcia mobów z pola "
+"widzenia)"
#: src/settings_translation_file.cpp
msgid "Full screen"
msgstr "Pełny ekran"
#: src/settings_translation_file.cpp
-msgid "Full screen BPP"
-msgstr "Głębia koloru w trybie pełnoekranowym"
-
-#: src/settings_translation_file.cpp
msgid "Fullscreen mode."
msgstr "Tryb pełnoekranowy."
@@ -3525,10 +3866,11 @@ msgid "Global callbacks"
msgstr "Globalne wywołania zwrotne"
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
"Global map generation attributes.\n"
"In Mapgen v6 the 'decorations' flag controls all decorations except trees\n"
-"and junglegrass, in all other mapgens this flag controls all decorations."
+"and jungle grass, in all other mapgens this flag controls all decorations."
msgstr ""
"Globalne właściwości generowania map.\n"
"W generatorze map v6 flaga \"decorations\" kontroluje wszystkie dekoracje z "
@@ -3569,12 +3911,12 @@ msgstr "Poziom ziemi"
#: src/settings_translation_file.cpp
#, fuzzy
msgid "Ground noise"
-msgstr "Szum błota"
+msgstr "Szum ziemi"
#: src/settings_translation_file.cpp
#, fuzzy
msgid "HTTP mods"
-msgstr "Mody"
+msgstr "Adres HTTP modów"
#: src/settings_translation_file.cpp
msgid "HUD scale factor"
@@ -3592,11 +3934,11 @@ msgid ""
"- log: mimic and log backtrace of deprecated call (default).\n"
"- error: abort on usage of deprecated call (suggested for mod developers)."
msgstr ""
-"Obsługa przestarzałych wywołań lua api:\n"
-"- legacy: (próbuje) naśladuje stare zachowanie (domyślne dla wydań).\n"
-"- log: naśladuje i loguje przestarzałe wywołania (domyślne dla wersji "
-"debug).\n"
-"- error: przerywa kiedy zostanie użyte przestarzałe api (sugerowane dla "
+"Obsługa przestarzałych wywołań API Lua:\n"
+"- brak: nie rejestruje przestarzałych wywołań\n"
+"- log: naśladuje i rejestruje backtrace zdeprecjonowanego wywołania "
+"(domyślnie).\n"
+"- błąd: przerwij przy użyciu przestarzałego wywołania (sugerowane dla "
"twórców modów)."
#: src/settings_translation_file.cpp
@@ -3621,8 +3963,11 @@ msgid "Heat noise"
msgstr "Szum gorÄ…ca"
#: src/settings_translation_file.cpp
-msgid "Height component of the initial window size."
-msgstr "Wysokość początkowego rozmiaru okna."
+#, fuzzy
+msgid ""
+"Height component of the initial window size. Ignored in fullscreen mode."
+msgstr ""
+"Wysokość początkowego rozmiaru okna. Ignorowana w trybie pełnoekranowym."
#: src/settings_translation_file.cpp
msgid "Height noise"
@@ -3633,10 +3978,6 @@ msgid "Height select noise"
msgstr "Rożnorodność wysokości"
#: src/settings_translation_file.cpp
-msgid "High-precision FPU"
-msgstr "FPU Wysokiej precyzji"
-
-#: src/settings_translation_file.cpp
msgid "Hill steepness"
msgstr "Stromość zbocza"
@@ -3647,22 +3988,22 @@ msgstr "Granica zbocza"
#: src/settings_translation_file.cpp
#, fuzzy
msgid "Hilliness1 noise"
-msgstr "Dźwięk stromości"
+msgstr "Hałas górzystości1"
#: src/settings_translation_file.cpp
#, fuzzy
msgid "Hilliness2 noise"
-msgstr "Dźwięk stromości"
+msgstr "Hałas górzystości2"
#: src/settings_translation_file.cpp
#, fuzzy
msgid "Hilliness3 noise"
-msgstr "Dźwięk stromości"
+msgstr "Hałas górzystości3"
#: src/settings_translation_file.cpp
#, fuzzy
msgid "Hilliness4 noise"
-msgstr "Dźwięk stromości"
+msgstr "Hałas górzystości4"
#: src/settings_translation_file.cpp
msgid "Homepage of server, to be displayed in the serverlist."
@@ -3706,72 +4047,72 @@ msgstr "Poprzedni klawisz paska działań"
#: src/settings_translation_file.cpp
#, fuzzy
msgid "Hotbar slot 1 key"
-msgstr "Następny klawisz paska działań"
+msgstr "Przycisk 1 miejsca paska działań"
#: src/settings_translation_file.cpp
#, fuzzy
msgid "Hotbar slot 10 key"
-msgstr "Następny klawisz paska działań"
+msgstr "Przycisk 10 miejsca paska działań"
#: src/settings_translation_file.cpp
#, fuzzy
msgid "Hotbar slot 11 key"
-msgstr "Następny klawisz paska działań"
+msgstr "Przycisk 11 miejsca paska działań"
#: src/settings_translation_file.cpp
#, fuzzy
msgid "Hotbar slot 12 key"
-msgstr "Następny klawisz paska działań"
+msgstr "Przycisk 12 miejsca paska działań"
#: src/settings_translation_file.cpp
#, fuzzy
msgid "Hotbar slot 13 key"
-msgstr "Następny klawisz paska działań"
+msgstr "Przycisk 13 miejsca paska działań"
#: src/settings_translation_file.cpp
#, fuzzy
msgid "Hotbar slot 14 key"
-msgstr "Następny klawisz paska działań"
+msgstr "Przycisk 14 miejsca paska działań"
#: src/settings_translation_file.cpp
#, fuzzy
msgid "Hotbar slot 15 key"
-msgstr "Następny klawisz paska działań"
+msgstr "Przycisk 15 miejsca paska działań"
#: src/settings_translation_file.cpp
#, fuzzy
msgid "Hotbar slot 16 key"
-msgstr "Następny klawisz paska działań"
+msgstr "Przycisk 16 miejsca paska działań"
#: src/settings_translation_file.cpp
#, fuzzy
msgid "Hotbar slot 17 key"
-msgstr "Następny klawisz paska działań"
+msgstr "Przycisk 17 miejsca paska działań"
#: src/settings_translation_file.cpp
#, fuzzy
msgid "Hotbar slot 18 key"
-msgstr "Następny klawisz paska działań"
+msgstr "Przycisk 18 miejsca paska działań"
#: src/settings_translation_file.cpp
#, fuzzy
msgid "Hotbar slot 19 key"
-msgstr "Następny klawisz paska działań"
+msgstr "Przycisk 19 miejsca paska działań"
#: src/settings_translation_file.cpp
#, fuzzy
msgid "Hotbar slot 2 key"
-msgstr "Następny klawisz paska działań"
+msgstr "Przycisk 2 miejsca paska działań"
#: src/settings_translation_file.cpp
#, fuzzy
msgid "Hotbar slot 20 key"
-msgstr "Następny klawisz paska działań"
+msgstr "Przycisk 20 miejsca paska działań"
#: src/settings_translation_file.cpp
#, fuzzy
msgid "Hotbar slot 21 key"
-msgstr "Następny klawisz paska działań"
+msgstr "Przycisk 21 miejsca paska działań"
#: src/settings_translation_file.cpp
#, fuzzy
@@ -3869,11 +4210,15 @@ msgid "How deep to make rivers."
msgstr "Jak głębokie tworzyć rzeki."
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
"How fast liquid waves will move. Higher = faster.\n"
"If negative, liquid waves will move backwards.\n"
"Requires waving liquids to be enabled."
msgstr ""
+"Jak szybko fale cieczy będą się poruszać. Wyższa = szybciej.\n"
+"Wartość ujemna, fale cieczy będą poruszać się do tyłu.\n"
+"Wymaga włączenia falowania cieczy."
#: src/settings_translation_file.cpp
msgid ""
@@ -3919,8 +4264,7 @@ msgstr ""
#: src/settings_translation_file.cpp
#, fuzzy
msgid ""
-"If disabled, \"special\" key is used to fly fast if both fly and fast mode "
-"are\n"
+"If disabled, \"Aux1\" key is used to fly fast if both fly and fast mode are\n"
"enabled."
msgstr ""
"Jeśli wyłączone to klawisz \"używania\" jest wykorzystany aby latać szybko "
@@ -3955,8 +4299,8 @@ msgstr ""
#: src/settings_translation_file.cpp
#, fuzzy
msgid ""
-"If enabled, \"special\" key instead of \"sneak\" key is used for climbing "
-"down and\n"
+"If enabled, \"Aux1\" key instead of \"Sneak\" key is used for climbing down "
+"and\n"
"descending."
msgstr ""
"Jeżeli włączone, klawisz \"użycia\" zamiast klawisza \"skradania\" będzie "
@@ -4007,19 +4351,40 @@ msgstr ""
"Pomocne gdy pracujesz na małych powierzchniach."
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
"If the CSM restriction for node range is enabled, get_node calls are "
"limited\n"
"to this distance from the player to the node."
msgstr ""
+"Jeśli ograniczenie CSM dla zasięgu węzła jest włączone, wywołania get_node "
+"sÄ… ograniczone\n"
+"do tej odległości od gracza do węzła."
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid ""
+"If the execution of a chat command takes longer than this specified time in\n"
+"seconds, add the time information to the chat command message"
+msgstr ""
+"Jeśli wykonanie polecenia czatu trwa dłużej niż określony czas w sekundach, "
+"dodaj informacjÄ™ o czasie do komunikatu polecenia czatu w\n"
+"sekundach"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
"If the file size of debug.txt exceeds the number of megabytes specified in\n"
"this setting when it is opened, the file is moved to debug.txt.1,\n"
"deleting an older debug.txt.1 if it exists.\n"
"debug.txt is only moved if this setting is positive."
msgstr ""
+"Jeśli rozmiar pliku debug.txt przekroczy liczbę megabajtów określoną w tym "
+"ustawieniu, plik zostanie przeniesiony do pliku debug.txt.1.\n"
+"w tym ustawieniu, plik jest przenoszony do debug.txt.1,\n"
+"usuwając starszy debug.txt.1, jeśli taki istnieje.\n"
+"debug.txt jest przenoszony tylko wtedy, gdy wartość tego ustawienia jest "
+"dodatnia."
#: src/settings_translation_file.cpp
msgid "If this is set, players will always (re)spawn at the given position."
@@ -4065,7 +4430,8 @@ msgstr ""
"Najczęściej potrzebny tylko dla osób pracujących nad jądrem"
#: src/settings_translation_file.cpp
-msgid "Instrument chatcommands on registration."
+#, fuzzy
+msgid "Instrument chat commands on registration."
msgstr "Instrument poleceń czatu przy rejestracji."
#: src/settings_translation_file.cpp
@@ -4141,12 +4507,17 @@ msgid "Iterations"
msgstr "Iteracje"
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
"Iterations of the recursive function.\n"
"Increasing this increases the amount of fine detail, but also\n"
"increases processing load.\n"
"At iterations = 20 this mapgen has a similar load to mapgen V7."
msgstr ""
+"Iteracje funkcji rekursywnej.\n"
+"Zwiększenie tej wartości zwiększa ilość drobnych szczegółów, ale również\n"
+"zwiększa obciążenie przetwarzania.\n"
+"Przy iteracjach = 20 ten mapgen ma podobne obciążenie jak mapgen V7."
#: src/settings_translation_file.cpp
msgid "Joystick ID"
@@ -4158,7 +4529,7 @@ msgstr "Interwał powtarzania przycisku joysticka"
#: src/settings_translation_file.cpp
#, fuzzy
-msgid "Joystick deadzone"
+msgid "Joystick dead zone"
msgstr "Typ Joysticka"
#: src/settings_translation_file.cpp
@@ -5027,16 +5398,19 @@ msgid "Large cave depth"
msgstr "Głębia dużej jaskini"
#: src/settings_translation_file.cpp
+#, fuzzy
msgid "Large cave maximum number"
-msgstr ""
+msgstr "Maksymalna liczba dużych jaskiń"
#: src/settings_translation_file.cpp
+#, fuzzy
msgid "Large cave minimum number"
-msgstr ""
+msgstr "Minimalna liczba dużych jaskiń"
#: src/settings_translation_file.cpp
+#, fuzzy
msgid "Large cave proportion flooded"
-msgstr ""
+msgstr "Duża część jaskini zalana"
#: src/settings_translation_file.cpp
msgid "Large chat console key"
@@ -5236,20 +5610,18 @@ msgstr ""
"kierunku patrzenia."
#: src/settings_translation_file.cpp
-msgid "Makes DirectX work with LuaJIT. Disable if it causes troubles."
-msgstr "Sprawia, że DirectX działa z LuaJIT. Wyłącz jeśli występują kłopoty."
-
-#: src/settings_translation_file.cpp
msgid "Makes all liquids opaque"
msgstr "Zmienia ciecze w nieprzeźroczyste"
#: src/settings_translation_file.cpp
+#, fuzzy
msgid "Map Compression Level for Disk Storage"
-msgstr ""
+msgstr "Poziom kompresji mapy dla pamięci masowej dysku"
#: src/settings_translation_file.cpp
+#, fuzzy
msgid "Map Compression Level for Network Transfer"
-msgstr ""
+msgstr "Poziom kompresji map dla transferu sieciowego"
#: src/settings_translation_file.cpp
msgid "Map directory"
@@ -5280,6 +5652,7 @@ msgstr ""
"oceanu, wysp oraz podziemi."
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
"Map generation attributes specific to Mapgen Valleys.\n"
"'altitude_chill': Reduces heat with altitude.\n"
@@ -5288,6 +5661,13 @@ msgid ""
"to become shallower and occasionally dry.\n"
"'altitude_dry': Reduces humidity with altitude."
msgstr ""
+"Atrybuty generowania mapy specyficzne dla dolin Mapgen.\n"
+"'altitude_chill': Zmniejsza ciepło wraz z wysokością nad poziomem morza.\n"
+"'humid_rivers': Zwiększa wilgotność wokół rzek.\n"
+"'vary_river_depth': Jeżeli włączone, niska wilgotność i wysoka temperatura "
+"powoduje, że rzeki\n"
+"stają się płytsze i czasami wysychają.\n"
+"'altitude_dry': Zmniejsza wilgotność wraz z wysokością."
#: src/settings_translation_file.cpp
#, fuzzy
@@ -5330,6 +5710,11 @@ msgid "Map save interval"
msgstr "Interwał zapisu mapy"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Map shadows update frames"
+msgstr "Interwał czasowy aktualizacji cieczy"
+
+#: src/settings_translation_file.cpp
msgid "Mapblock limit"
msgstr "Limit bloków mapy"
@@ -5453,6 +5838,11 @@ msgid "Maximum FPS when the window is not focused, or when the game is paused."
msgstr "Maksymalny FPS gdy gra spauzowana."
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Maximum distance to render shadows."
+msgstr "Maksymalna odległość do renderowania cieni."
+
+#: src/settings_translation_file.cpp
msgid "Maximum forceloaded blocks"
msgstr "Maksymalna ilość bloków załadowanych w sposób wymuszony"
@@ -5462,12 +5852,14 @@ msgid "Maximum hotbar width"
msgstr "Maksymalna długość hotbar"
#: src/settings_translation_file.cpp
+#, fuzzy
msgid "Maximum limit of random number of large caves per mapchunk."
-msgstr ""
+msgstr "Maksymalny limit losowej liczby dużych jaskiń na mapchunk."
#: src/settings_translation_file.cpp
+#, fuzzy
msgid "Maximum limit of random number of small caves per mapchunk."
-msgstr ""
+msgstr "Maksymalny limit losowej liczby małych jaskiń na mapchunk."
#: src/settings_translation_file.cpp
#, fuzzy
@@ -5479,11 +5871,15 @@ msgstr ""
"z dużą prędkością."
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
"Maximum number of blocks that are simultaneously sent per client.\n"
"The maximum total count is calculated dynamically:\n"
"max_total = ceil((#clients + max_users) * per_client / 4)"
msgstr ""
+"Maksymalna ilość bloków, które są jednocześnie wysyłane na jednego klienta.\n"
+"Maksymalna łączna liczba jest obliczana dynamicznie:\n"
+"max_total = ceil((#clients + max_users) * per_client / 4)"
#: src/settings_translation_file.cpp
msgid "Maximum number of blocks that can be queued for loading."
@@ -5509,11 +5905,15 @@ msgstr ""
"Pozostaw puste a odpowiednia liczba zostanie dobrana automatycznie."
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
"Maximum number of concurrent downloads. Downloads exceeding this limit will "
"be queued.\n"
"This should be lower than curl_parallel_limit."
msgstr ""
+"Maksymalna liczba jednocześnie pobieranych plików. Pobieranie przekraczające "
+"ten limit zostanie umieszczone w kolejce.\n"
+"Powinien być niższy niż curl_parallel_limit."
#: src/settings_translation_file.cpp
msgid "Maximum number of forceloaded mapblocks."
@@ -5581,10 +5981,22 @@ msgstr ""
"Wartość 0, wyłącza kolejkę, -1 to nieograniczony rozmiar kolejki."
#: src/settings_translation_file.cpp
-msgid "Maximum time in ms a file download (e.g. a mod download) may take."
+#, fuzzy
+msgid ""
+"Maximum time a file download (e.g. a mod download) may take, stated in "
+"milliseconds."
msgstr "Maksymalny czas na pobranie pliku (np.: moda) w ms."
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid ""
+"Maximum time an interactive request (e.g. server list fetch) may take, "
+"stated in milliseconds."
+msgstr ""
+"Maksymalny czas, jaki może zająć interaktywne żądanie (np. pobranie listy z "
+"serwera), podany w milisekundach."
+
+#: src/settings_translation_file.cpp
msgid "Maximum users"
msgstr "Maksymalna ilość użytkowników"
@@ -5609,8 +6021,9 @@ msgid "Method used to highlight selected object."
msgstr "Metoda użyta do podświetlenia wybranego obiektu."
#: src/settings_translation_file.cpp
+#, fuzzy
msgid "Minimal level of logging to be written to chat."
-msgstr ""
+msgstr "Minimalny poziom logowania, który ma być zapisywany na czacie."
#: src/settings_translation_file.cpp
msgid "Minimap"
@@ -5630,8 +6043,9 @@ msgid "Minimum limit of random number of large caves per mapchunk."
msgstr "Szum 3D, który wpływa na liczbę lochów na jeden mapchunk."
#: src/settings_translation_file.cpp
+#, fuzzy
msgid "Minimum limit of random number of small caves per mapchunk."
-msgstr ""
+msgstr "Minimalny limit losowej liczby małych jaskiń na mapchunk."
#: src/settings_translation_file.cpp
#, fuzzy
@@ -5647,7 +6061,8 @@ msgid "Mod channels"
msgstr "Kanały modów"
#: src/settings_translation_file.cpp
-msgid "Modifies the size of the hudbar elements."
+#, fuzzy
+msgid "Modifies the size of the HUD elements."
msgstr "Modyfikuje rozmiar elementów paska HUD."
#: src/settings_translation_file.cpp
@@ -5659,6 +6074,11 @@ msgid "Monospace font size"
msgstr "Rozmiar czcionki Monospace"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Monospace font size divisible by"
+msgstr "Rozmiar czcionki Monospace"
+
+#: src/settings_translation_file.cpp
msgid "Mountain height noise"
msgstr "Szum wysokości góry"
@@ -5705,12 +6125,17 @@ msgid "Mute sound"
msgstr "Wycisz dźwięk"
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
"Name of map generator to be used when creating a new world.\n"
"Creating a world in the main menu will override this.\n"
"Current mapgens in a highly unstable state:\n"
"- The optional floatlands of v7 (disabled by default)."
msgstr ""
+"Nazwa generatora map, który ma być użyty podczas tworzenia nowego świata.\n"
+"Tworzenie świata w menu głównym nadpisze tę wartość.\n"
+"Obecne mapgeny sÄ… w bardzo niestabilnym stanie:\n"
+"- Opcjonalne floatlands z v7 (domyślnie wyłączone)."
#: src/settings_translation_file.cpp
msgid ""
@@ -5774,6 +6199,7 @@ msgid "Number of emerge threads"
msgstr "Liczba powstających wątków"
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
"Number of emerge threads to use.\n"
"Value 0:\n"
@@ -5786,11 +6212,24 @@ msgid ""
"processes, especially in singleplayer and/or when running Lua code in\n"
"'on_generated'. For many users the optimum setting may be '1'."
msgstr ""
+"Ilość wątków emerge do wykorzystania.\n"
+"Wartość 0:\n"
+"- Wybór automatyczny. Liczba wątków emerge będzie wynosić\n"
+"- 'liczba procesorów - 2', z dolną granicą 1.\n"
+"Dowolna inna wartość:\n"
+"- Określa liczbę wątków emerge, z dolnym limitem równym 1.\n"
+"OSTRZEŻENIE: Zwiększenie liczby wątków emerge zwiększa szybkość mapgena "
+"silnika,\n"
+"ale może to wpłynąć na wydajność gry przez zakłócanie innych\n"
+"procesami, szczególnie w grze dla pojedynczego gracza i/lub podczas "
+"uruchamiania kodu Lua w\n"
+"'on_generated'. Dla wielu użytkowników optymalnym ustawieniem może być '1'."
#: src/settings_translation_file.cpp
+#, fuzzy
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"
+"This is a trade-off between SQLite transaction overhead and\n"
"memory consumption (4096=100MB, as a rule of thumb)."
msgstr ""
"Ilość dodatkowych bloków, które mogą zostać wczytane naraz przez /"
@@ -5808,14 +6247,12 @@ msgid "Opaque liquids"
msgstr "Nieprzeźroczyste ciecze"
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
"Opaqueness (alpha) of the shadow behind the default font, between 0 and 255."
msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid ""
-"Opaqueness (alpha) of the shadow behind the fallback font, between 0 and 255."
-msgstr ""
+"Nieprzezroczystość (alfa) cienia za domyślną czcionką, w zakresie od 0 do "
+"255."
#: src/settings_translation_file.cpp
msgid ""
@@ -5827,19 +6264,33 @@ msgstr ""
"formspec jest otwarty."
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Optional override for chat weblink color."
+msgstr "Opcjonalna zmiana koloru łącza internetowego czatu."
+
+#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
-"Path of the fallback font.\n"
-"If “freetype†setting is enabled: Must be a TrueType font.\n"
-"If “freetype†setting is disabled: Must be a bitmap or XML vectors font.\n"
+"Path of the fallback font. Must be a TrueType font.\n"
"This font will be used for certain languages or if the default font is "
"unavailable."
msgstr ""
+"Ścieżka do czcionki awaryjnej.\n"
+"Jeśli ustawienie \"freetype\" jest włączone: Musi być czcionką TrueType.\n"
+"Jeśli ustawienie \"freetype\" jest wyłączone: Musi być czcionką bitmapową "
+"lub wektorowÄ… XML.\n"
+"Ta czcionka będzie używana dla niektórych języków lub jeśli domyślna "
+"czcionka jest niedostępna."
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
"Path to save screenshots at. Can be an absolute or relative path.\n"
"The folder will be created if it doesn't already exist."
msgstr ""
+"Ścieżka w której zapisywane są zrzuty ekranu. Może być bezwzględna lub "
+"względna.\n"
+"Folder zostanie utworzony, jeśli jeszcze nie istnieje."
#: src/settings_translation_file.cpp
msgid ""
@@ -5856,28 +6307,37 @@ msgstr ""
"wyszukiwane z tej lokalizacji."
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
-"Path to the default font.\n"
-"If “freetype†setting is enabled: Must be a TrueType font.\n"
-"If “freetype†setting is disabled: Must be a bitmap or XML vectors font.\n"
+"Path to the default font. Must be a TrueType font.\n"
"The fallback font will be used if the font cannot be loaded."
msgstr ""
+"Ścieżka do domyślnej czcionki.\n"
+"Jeśli włączone jest ustawienie \"freetype\": Musi być czcionką TrueType.\n"
+"Jeśli ustawienie \"freetype\" jest wyłączone: Musi być czcionką bitmapową "
+"lub wektorowÄ… XML.\n"
+"Czcionka awaryjna zostanie użyta, jeśli nie może zostać załadowana."
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
-"Path to the monospace font.\n"
-"If “freetype†setting is enabled: Must be a TrueType font.\n"
-"If “freetype†setting is disabled: Must be a bitmap or XML vectors font.\n"
+"Path to the monospace font. Must be a TrueType font.\n"
"This font is used for e.g. the console and profiler screen."
msgstr ""
+"Ścieżka do czcionki monospace.\n"
+"Jeśli włączone jest ustawienie \"freetype\": Musi być czcionką TrueType.\n"
+"Jeśli ustawienie \"freetype\" jest wyłączone: Musi być czcionką bitmapową "
+"lub wektorowÄ… XML.\n"
+"Ta czcionka jest używana np. w konsoli i na ekranie profilera."
#: src/settings_translation_file.cpp
msgid "Pause on lost window focus"
msgstr "Pauza, gdy okno jest nieaktywne"
#: src/settings_translation_file.cpp
+#, fuzzy
msgid "Per-player limit of queued blocks load from disk"
-msgstr ""
+msgstr "Limit załadowanych bloków z dysku na jednego gracza"
#: src/settings_translation_file.cpp
#, fuzzy
@@ -5930,6 +6390,11 @@ msgid "Player versus player"
msgstr "PvP"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Poisson filtering"
+msgstr "Filtrowanie dwuliniowe"
+
+#: src/settings_translation_file.cpp
msgid ""
"Port to connect to (UDP).\n"
"Note that the port field in the main menu overrides this setting."
@@ -5980,20 +6445,27 @@ msgid "Profiling"
msgstr "Profilowanie modyfikacji"
#: src/settings_translation_file.cpp
+#, fuzzy
msgid "Prometheus listener address"
-msgstr ""
+msgstr "Adres słuchacza Prometheusa"
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
"Prometheus listener address.\n"
-"If minetest is compiled with ENABLE_PROMETHEUS option enabled,\n"
+"If Minetest is compiled with ENABLE_PROMETHEUS option enabled,\n"
"enable metrics listener for Prometheus on that address.\n"
-"Metrics can be fetch on http://127.0.0.1:30000/metrics"
+"Metrics can be fetched on http://127.0.0.1:30000/metrics"
msgstr ""
+"Adres listenera Prometheus.\n"
+"Jeśli Minetest jest skompilowany z włączoną opcją ENABLE_PROMETHEUS,\n"
+"włącz słuchanie metryk dla Prometheusa na tym adresie.\n"
+"Metryki mogą być pobierane na stronie http://127.0.0.1:30000/metrics"
#: src/settings_translation_file.cpp
+#, fuzzy
msgid "Proportion of large caves that contain liquid."
-msgstr ""
+msgstr "Proporcja dużych jaskiń, które zawierają ciecz."
#: src/settings_translation_file.cpp
msgid ""
@@ -6327,6 +6799,48 @@ msgstr ""
#: src/settings_translation_file.cpp
#, fuzzy
msgid ""
+"Set the shadow strength.\n"
+"Lower value means lighter shadows, higher value means darker shadows."
+msgstr ""
+"Ustaw siłę cienia.\n"
+"Niższa wartość oznacza jaśniejsze cienie, wyższa wartość oznacza ciemniejsze "
+"cienie."
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid ""
+"Set the soft shadow radius size.\n"
+"Lower values mean sharper shadows, bigger values mean softer shadows.\n"
+"Minimum value: 1.0; maximum value: 10.0"
+msgstr ""
+"Ustaw rozmiar zasięgu gładkiego cienia.\n"
+"Niższe wartości oznaczają ostrzejsze cienie, wyższe wartości oznaczają "
+"gładsze cienie.\n"
+"Minimalna wartość: 1.0; maksymalna wartość: 10.0"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid ""
+"Set the tilt of Sun/Moon orbit in degrees.\n"
+"Value of 0 means no tilt / vertical orbit.\n"
+"Minimum value: 0.0; maximum value: 60.0"
+msgstr ""
+"Ustaw nachylenie orbity Słońca/Księżyca w stopniach.\n"
+"Wartość 0 oznacza brak nachylenia / orbitę pionową.\n"
+"Wartość minimalna: 0.0; wartość maksymalna: 60.0"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid ""
+"Set to true to enable Shadow Mapping.\n"
+"Requires shaders to be enabled."
+msgstr ""
+"Ustawienie wartości pozytywnej włącza drganie liści.\n"
+"Do włączenia wymagane są shadery."
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid ""
"Set to true to enable waving leaves.\n"
"Requires shaders to be enabled."
msgstr ""
@@ -6352,6 +6866,17 @@ msgstr ""
"Wymaga shaderów."
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid ""
+"Sets shadow texture quality to 32 bits.\n"
+"On false, 16 bits texture will be used.\n"
+"This can cause much more artifacts in the shadow."
+msgstr ""
+"Ustawia jakość tekstury cienia na 32 bity.\n"
+"Jeśli wartość jest fałszywa, używana będzie tekstura 16-bitowa.\n"
+"Może to powodować znacznie więcej artefaktów w cieniu."
+
+#: src/settings_translation_file.cpp
msgid "Shader path"
msgstr "Shadery"
@@ -6368,6 +6893,26 @@ msgstr ""
#: src/settings_translation_file.cpp
#, fuzzy
+msgid "Shadow filter quality"
+msgstr "Jakość zrzutu ekranu"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Shadow map max distance in nodes to render shadows"
+msgstr "Maksymalna odległość mapy cieni w węzłach do renderowania cieni"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Shadow map texture in 32 bits"
+msgstr "Tekstura mapy cieni w 32 bitach"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Shadow map texture size"
+msgstr "Minimalna wielkość tekstury dla filtrów"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
"Shadow offset (in pixels) of the default font. If 0, then shadow will not be "
"drawn."
@@ -6375,10 +6920,8 @@ msgstr "Offset cienia czcionki, jeżeli 0 to cień nie będzie rysowany."
#: src/settings_translation_file.cpp
#, fuzzy
-msgid ""
-"Shadow offset (in pixels) of the fallback font. If 0, then shadow will not "
-"be drawn."
-msgstr "Offset cienia czcionki, jeżeli 0 to cień nie będzie rysowany."
+msgid "Shadow strength"
+msgstr "Siła cienia"
#: src/settings_translation_file.cpp
msgid "Shape of the minimap. Enabled = round, disabled = square."
@@ -6402,8 +6945,9 @@ msgstr ""
"Wymagany restart po zmianie ustawienia."
#: src/settings_translation_file.cpp
-msgid "Show nametag backgrounds by default"
-msgstr ""
+#, fuzzy
+msgid "Show name tag backgrounds by default"
+msgstr "Domyślnie wyświetlaj tła znaczników imiennych"
#: src/settings_translation_file.cpp
msgid "Shutdown message"
@@ -6429,6 +6973,10 @@ msgstr ""
"pamięci, ograniczając dane kopiowane z głównego wątku oraz ilość drgań."
#: src/settings_translation_file.cpp
+msgid "Sky Body Orbit Tilt"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Slice w"
msgstr "Kawałek w"
@@ -6490,18 +7038,13 @@ msgid "Sneaking speed, in nodes per second."
msgstr "Prędkość skradania, w blokach na sekundę."
#: src/settings_translation_file.cpp
-msgid "Sound"
-msgstr "Dźwięk"
-
-#: src/settings_translation_file.cpp
#, fuzzy
-msgid "Special key"
-msgstr "Skradanie"
+msgid "Soft shadow radius"
+msgstr "Przeźroczystość cienia czcionki"
#: src/settings_translation_file.cpp
-#, fuzzy
-msgid "Special key for climbing/descending"
-msgstr "Klawisz używany do wspinania"
+msgid "Sound"
+msgstr "Dźwięk"
#: src/settings_translation_file.cpp
msgid ""
@@ -6523,6 +7066,14 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Spread a complete update of shadow map over given amount of frames.\n"
+"Higher values might make shadows laggy, lower values\n"
+"will consume more resources.\n"
+"Minimum value: 1; maximum value: 16"
+msgstr ""
+
+#: src/settings_translation_file.cpp
#, fuzzy
msgid ""
"Spread of light curve boost range.\n"
@@ -6644,6 +7195,13 @@ msgstr "Paczki tekstur"
#: src/settings_translation_file.cpp
msgid ""
+"Texture size to render the shadow map on.\n"
+"This must be a power of two.\n"
+"Bigger numbers create better shadows but it is also more expensive."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Textures on a node may be aligned either to the node or to the world.\n"
"The former mode suits better things like machines, furniture, etc., while\n"
"the latter makes stairs and microblocks fit surroundings better.\n"
@@ -6659,7 +7217,7 @@ msgstr "Adres URL repozytorium zawartości"
#: src/settings_translation_file.cpp
#, fuzzy
-msgid "The deadzone of the joystick"
+msgid "The dead zone of the joystick"
msgstr "Identyfikator użycia joysticka"
#: src/settings_translation_file.cpp
@@ -6724,7 +7282,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"The rendering back-end for Irrlicht.\n"
+"The rendering back-end.\n"
"A restart is required after changing this.\n"
"Note: On Android, stick with OGLES1 if unsure! App may fail to start "
"otherwise.\n"
@@ -6733,9 +7291,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
"The sensitivity of the joystick axes for moving the\n"
-"ingame view frustum around."
+"in-game view frustum around."
msgstr "Czułość osi joysticka, wpływa na drgania widoku."
#: src/settings_translation_file.cpp
@@ -6850,6 +7409,10 @@ msgid "Touch screen threshold"
msgstr "Próg ekranu dotykowego"
#: src/settings_translation_file.cpp
+msgid "Tradeoffs for performance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Trees noise"
msgstr "Szum drzew"
@@ -6928,8 +7491,9 @@ msgid "Use bilinear filtering when scaling textures."
msgstr "Włącz filtrowanie bilinearne podczas skalowania tekstur."
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
-"Use mip mapping to scale textures. May slightly increase performance,\n"
+"Use mipmapping to scale textures. May slightly increase performance,\n"
"especially when using a high resolution texture pack.\n"
"Gamma correct downscaling is not supported."
msgstr ""
@@ -7052,7 +7616,7 @@ msgstr "Pole widzenia"
#: src/settings_translation_file.cpp
#, fuzzy
-msgid "Virtual joystick triggers aux button"
+msgid "Virtual joystick triggers Aux1 button"
msgstr "Joystick wirtualny aktywuje przycisk aux"
#: src/settings_translation_file.cpp
@@ -7139,6 +7703,11 @@ msgid "Waving plants"
msgstr "Falujące rośliny"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Weblink color"
+msgstr "Kolor zaznaczenia"
+
+#: 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"
@@ -7168,9 +7737,8 @@ msgid ""
"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.\n"
+"memory. Powers of 2 are recommended. This setting is ONLY applied if\n"
+"bilinear/trilinear/anisotropic filtering is enabled.\n"
"This is also used as the base node texture size for world-aligned\n"
"texture autoscaling."
msgstr ""
@@ -7188,18 +7756,8 @@ msgstr ""
"przypisanych dla świata przy autoskalowaniu tekstur."
#: src/settings_translation_file.cpp
-#, fuzzy
-msgid ""
-"Whether FreeType fonts are used, requires FreeType support to be compiled "
-"in.\n"
-"If disabled, bitmap and XML vectors fonts are used instead."
-msgstr ""
-"Kiedy tylko czcionki wolnego typu są używane wymagana jest ich kompilacja "
-"wspierajÄ…ca takie czcionki."
-
-#: src/settings_translation_file.cpp
msgid ""
-"Whether nametag backgrounds should be shown by default.\n"
+"Whether name tag backgrounds should be shown by default.\n"
"Mods may still set a background."
msgstr ""
@@ -7246,7 +7804,8 @@ msgstr ""
"Wyświetlanie efektów debugowania klienta(klawisz F5 ma tą samą funkcję)."
#: src/settings_translation_file.cpp
-msgid "Width component of the initial window size."
+#, fuzzy
+msgid "Width component of the initial window size. Ignored in fullscreen mode."
msgstr "Rozdzielczość pionowa rozmiaru okna gry."
#: src/settings_translation_file.cpp
@@ -7340,34 +7899,23 @@ msgid "Y-level of seabed."
msgstr "Wysokość dna jezior."
#: src/settings_translation_file.cpp
-msgid ""
-"ZLib compression level to use when saving mapblocks to disk.\n"
-"-1 - Zlib's default compression level\n"
-"0 - no compresson, fastest\n"
-"9 - best compression, slowest\n"
-"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)"
-msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid ""
-"ZLib compression level to use when sending mapblocks to the client.\n"
-"-1 - Zlib's default compression level\n"
-"0 - no compresson, fastest\n"
-"9 - best compression, slowest\n"
-"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "cURL file download timeout"
msgstr "cURL przekroczono limit pobierania pliku"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "cURL interactive timeout"
+msgstr "Limit czasu cURL"
+
+#: src/settings_translation_file.cpp
msgid "cURL parallel limit"
msgstr "Limit równoległy cURL"
-#: src/settings_translation_file.cpp
-msgid "cURL timeout"
-msgstr "Limit czasu cURL"
+#~ msgid "- Creative Mode: "
+#~ msgstr "Tryb kreatywny "
+
+#~ msgid "- Damage: "
+#~ msgstr "- Obrażenia: "
#~ msgid ""
#~ "0 = parallax occlusion with slope information (faster).\n"
@@ -7376,6 +7924,9 @@ msgstr "Limit czasu cURL"
#~ "0 = parallax occlusion z informacjÄ… nachylenia (szybsze).\n"
#~ "1 = relief mapping (wolniejsze, bardziej dokładne)."
+#~ msgid "Address / Port"
+#~ msgstr "Adres / Port"
+
#~ msgid ""
#~ "Adjust the gamma encoding for the light tables. Higher numbers are "
#~ "brighter.\n"
@@ -7396,6 +7947,9 @@ msgstr "Limit czasu cURL"
#~ msgid "Back"
#~ msgstr "Backspace"
+#~ msgid "Bits per pixel (aka color depth) in fullscreen mode."
+#~ msgstr "Bity na piksel (głębia koloru) w trybie pełnoekranowym."
+
#~ msgid "Bump Mapping"
#~ msgstr "Mapowanie wypukłości"
@@ -7436,13 +7990,26 @@ msgstr "Limit czasu cURL"
#~ msgstr ""
#~ "Kontroluje szerokość tuneli, mniejsze wartości tworzą szersze tunele."
+#~ msgid "Credits"
+#~ msgstr "Autorzy"
+
#~ msgid "Crosshair color (R,G,B)."
#~ msgstr "Kolor celownika (R,G,B)."
+#~ msgid "Damage enabled"
+#~ msgstr "Obrażenia włączone"
+
#~ msgid "Darkness sharpness"
#~ msgstr "Ostrość ciemności"
#~ msgid ""
+#~ "Default timeout for cURL, stated in milliseconds.\n"
+#~ "Only has an effect if compiled with cURL."
+#~ msgstr ""
+#~ "Domyślny limit czasu dla cURL, w milisekundach.\n"
+#~ "Ma znaczenie tylko gdy skompilowane z cURL."
+
+#~ msgid ""
#~ "Defines areas of floatland smooth terrain.\n"
#~ "Smooth floatlands occur when noise > 0."
#~ msgstr ""
@@ -7500,6 +8067,15 @@ msgstr "Limit czasu cURL"
#~ msgid "FPS in pause menu"
#~ msgstr "FPS podczas pauzy w menu"
+#~ msgid "Fallback font shadow"
+#~ msgstr "Zastępczy cień czcionki"
+
+#~ msgid "Fallback font shadow alpha"
+#~ msgstr "Zastępcza przeźroczystość cienia czcionki"
+
+#~ msgid "Fallback font size"
+#~ msgstr "Zastępczy rozmiar czcionki"
+
#~ msgid "Floatland base height noise"
#~ msgstr "Podstawowy szum wysokości wznoszącego się terenu"
@@ -7509,6 +8085,12 @@ msgstr "Limit czasu cURL"
#~ msgid "Font shadow alpha (opaqueness, between 0 and 255)."
#~ msgstr "Kanał alfa cienia czcionki (nieprzeźroczystość, od 0 do 255)."
+#~ msgid "FreeType fonts"
+#~ msgstr "Czcionki Freetype"
+
+#~ msgid "Full screen BPP"
+#~ msgstr "Głębia koloru w trybie pełnoekranowym"
+
#~ msgid "Gamma"
#~ msgstr "Gamma"
@@ -7518,9 +8100,15 @@ msgstr "Limit czasu cURL"
#~ msgid "Generate normalmaps"
#~ msgstr "Generuj mapy normalnych"
+#~ msgid "High-precision FPU"
+#~ msgstr "FPU Wysokiej precyzji"
+
#~ msgid "IPv6 support."
#~ msgstr "Wsparcie IPv6."
+#~ msgid "Install: file: \"$1\""
+#~ msgstr "Zainstaluj mod: plik: \"$1\""
+
#, fuzzy
#~ msgid "Lava depth"
#~ msgstr "Głębia dużej jaskini"
@@ -7538,6 +8126,10 @@ msgstr "Limit czasu cURL"
#~ msgid "Main menu style"
#~ msgstr "Skrypt głównego menu"
+#~ msgid "Makes DirectX work with LuaJIT. Disable if it causes troubles."
+#~ msgstr ""
+#~ "Sprawia, że DirectX działa z LuaJIT. Wyłącz jeśli występują kłopoty."
+
#~ msgid "Minimap in radar mode, Zoom x2"
#~ msgstr "Minimapa w trybie radaru, Zoom x2"
@@ -7550,6 +8142,9 @@ msgstr "Limit czasu cURL"
#~ msgid "Minimap in surface mode, Zoom x4"
#~ msgstr "Minimapa w trybie powierzchniowym, powiększenie x4"
+#~ msgid "Name / Password"
+#~ msgstr "Nazwa gracza / Hasło"
+
#~ msgid "Name/Password"
#~ msgstr "Nazwa gracza/Hasło"
@@ -7606,6 +8201,9 @@ msgstr "Limit czasu cURL"
#~ msgid "Projecting dungeons"
#~ msgstr "Projekcja lochów"
+#~ msgid "PvP enabled"
+#~ msgstr "PvP włączone"
+
#~ msgid "Reset singleplayer world"
#~ msgstr "Resetuj świat pojedynczego gracza"
@@ -7615,6 +8213,19 @@ msgstr "Limit czasu cURL"
#~ msgid "Shadow limit"
#~ msgstr "Limit cieni"
+#, fuzzy
+#~ msgid ""
+#~ "Shadow offset (in pixels) of the fallback font. If 0, then shadow will "
+#~ "not be drawn."
+#~ msgstr "Offset cienia czcionki, jeżeli 0 to cień nie będzie rysowany."
+
+#~ msgid "Special"
+#~ msgstr "Specialne"
+
+#, fuzzy
+#~ msgid "Special key"
+#~ msgstr "Skradanie"
+
#~ msgid "Start Singleplayer"
#~ msgstr "Tryb jednoosobowy"
@@ -7627,6 +8238,9 @@ msgstr "Limit czasu cURL"
#~ msgid "This font will be used for certain languages."
#~ msgstr "Ta czcionka zostanie użyta w niektórych językach."
+#~ msgid "To enable shaders the OpenGL driver needs to be used."
+#~ msgstr "Sterownik OpenGL jest wymagany aby włączyć shadery."
+
#~ msgid "Toggle Cinematic"
#~ msgstr "Przełącz na tryb Cinematic"
@@ -7647,6 +8261,15 @@ msgstr "Limit czasu cURL"
#~ msgid "Waving water"
#~ msgstr "FalujÄ…ca woda"
+#, fuzzy
+#~ msgid ""
+#~ "Whether FreeType fonts are used, requires FreeType support to be compiled "
+#~ "in.\n"
+#~ "If disabled, bitmap and XML vectors fonts are used instead."
+#~ msgstr ""
+#~ "Kiedy tylko czcionki wolnego typu są używane wymagana jest ich kompilacja "
+#~ "wspierajÄ…ca takie czcionki."
+
#~ msgid "Whether dungeons occasionally project from the terrain."
#~ msgstr "Określa czy lochy mają być czasem przez generowane teren."
@@ -7662,3 +8285,9 @@ msgstr "Limit czasu cURL"
#~ msgid "Yes"
#~ msgstr "Tak"
+
+#~ msgid "You died."
+#~ msgstr "Umarłeś."
+
+#~ msgid "needs_fallback_font"
+#~ msgstr "no"
diff --git a/po/pt/minetest.po b/po/pt/minetest.po
index 983e3a86e..d403ad5d4 100644
--- a/po/pt/minetest.po
+++ b/po/pt/minetest.po
@@ -2,8 +2,8 @@ msgid ""
msgstr ""
"Project-Id-Version: Portuguese (Minetest)\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-02-23 19:03+0100\n"
-"PO-Revision-Date: 2021-04-08 18:26+0000\n"
+"POT-Creation-Date: 2022-01-25 23:19+0100\n"
+"PO-Revision-Date: 2022-01-04 06:53+0000\n"
"Last-Translator: ssantos <ssantos@web.de>\n"
"Language-Team: Portuguese <https://hosted.weblate.org/projects/minetest/"
"minetest/pt/>\n"
@@ -12,7 +12,43 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n > 1;\n"
-"X-Generator: Weblate 4.6-dev\n"
+"X-Generator: Weblate 4.10.1\n"
+
+#: builtin/client/chatcommands.lua
+msgid "Clear the out chat queue"
+msgstr "Limpe a fila de espera do chat"
+
+#: builtin/client/chatcommands.lua
+msgid "Empty command."
+msgstr "Comando vazio."
+
+#: builtin/client/chatcommands.lua
+msgid "Exit to main menu"
+msgstr "Sair para o menu principal"
+
+#: builtin/client/chatcommands.lua
+msgid "Invalid command: "
+msgstr "Comando inválido: "
+
+#: builtin/client/chatcommands.lua
+msgid "Issued command: "
+msgstr "Comando emitido: "
+
+#: builtin/client/chatcommands.lua
+msgid "List online players"
+msgstr "Liste os jogadores online"
+
+#: builtin/client/chatcommands.lua
+msgid "Online players: "
+msgstr "Jogadores online: "
+
+#: builtin/client/chatcommands.lua
+msgid "The out chat queue is now empty."
+msgstr "A fila de espera do chat agora está vazia."
+
+#: builtin/client/chatcommands.lua
+msgid "This command is disabled by server."
+msgstr "Este comando está desativado pelo servidor."
#: builtin/client/death_formspec.lua src/client/game.cpp
msgid "Respawn"
@@ -22,11 +58,42 @@ msgstr "Renascer"
msgid "You died"
msgstr "Você morreu"
+#: builtin/common/chatcommands.lua
+msgid "Available commands:"
+msgstr "Comandos disponíveis:"
+
+#: builtin/common/chatcommands.lua
+msgid "Available commands: "
+msgstr "Comandos disponíveis: "
+
+#: builtin/common/chatcommands.lua
+msgid "Command not available: "
+msgstr "Comando não disponível: "
+
+#: builtin/common/chatcommands.lua
+msgid "Get help for commands"
+msgstr "Obtenha ajuda para comandos"
+
+#: builtin/common/chatcommands.lua
+msgid ""
+"Use '.help <cmd>' to get more information, or '.help all' to list everything."
+msgstr ""
+"Use '.help <cmd>' para conseguir mais informação, ou '.help all' para listar "
+"tudo."
+
+#: builtin/common/chatcommands.lua
+msgid "[all | <cmd>]"
+msgstr "[all| <cmd>]"
+
#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp
msgid "OK"
msgstr "OK"
#: builtin/fstk/ui.lua
+msgid "<none available>"
+msgstr "<Comando não disponível>"
+
+#: builtin/fstk/ui.lua
msgid "An error occurred in a Lua script:"
msgstr "Um erro ocorreu num script Lua:"
@@ -230,6 +297,10 @@ msgid "Install missing dependencies"
msgstr "Instalar dependências ausentes"
#: builtin/mainmenu/dlg_contentstore.lua
+msgid "Install: Unsupported file type or broken archive"
+msgstr "Instalação: Tipo de arquivo não suportado ou corrompido"
+
+#: builtin/mainmenu/dlg_contentstore.lua
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Mods"
msgstr "Mods"
@@ -533,7 +604,7 @@ msgstr "< Voltar para as definições"
msgid "Browse"
msgstr "Navegar"
-#: builtin/mainmenu/dlg_settings_advanced.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_settings.lua
msgid "Disabled"
msgstr "Desativado"
@@ -558,7 +629,7 @@ msgid "Offset"
msgstr "Deslocamento"
#: builtin/mainmenu/dlg_settings_advanced.lua
-msgid "Persistance"
+msgid "Persistence"
msgstr "Persistência"
#: builtin/mainmenu/dlg_settings_advanced.lua
@@ -577,7 +648,7 @@ msgstr "Restaurar valores por defeito"
msgid "Scale"
msgstr "Escala"
-#: builtin/mainmenu/dlg_settings_advanced.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_online.lua
msgid "Search"
msgstr "Procurar"
@@ -672,14 +743,6 @@ msgstr ""
"o modpack $1"
#: builtin/mainmenu/pkgmgr.lua
-msgid "Install: Unsupported file type \"$1\" or broken archive"
-msgstr "Instalar: Tipo de ficheiro \"$1\" não suportado ou corrompido"
-
-#: builtin/mainmenu/pkgmgr.lua
-msgid "Install: file: \"$1\""
-msgstr "Instalar: ficheiro: \"$1\""
-
-#: builtin/mainmenu/pkgmgr.lua
msgid "Unable to find a valid mod or modpack"
msgstr "Incapaz de encontrar um módulo ou modpack válido"
@@ -713,6 +776,42 @@ msgstr ""
"Tente recarregar a lista de servidores públicos e verifique a sua ligação à "
"internet."
+#: builtin/mainmenu/tab_about.lua
+msgid "About"
+msgstr "Sobre"
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Active Contributors"
+msgstr "Contribuidores Ativos"
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Active renderer:"
+msgstr "Renderizador ativo:"
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Core Developers"
+msgstr "Desenvolvedores Principais"
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Open User Data Directory"
+msgstr "Abrir o diretório de dados do utilizador"
+
+#: builtin/mainmenu/tab_about.lua
+msgid ""
+"Opens the directory that contains user-provided worlds, games, mods,\n"
+"and texture packs in a file manager / explorer."
+msgstr ""
+"Abre o diretório que contém mundos, jogos, mods fornecidos pelo utilizador,\n"
+"e pacotes de textura num gestor de ficheiros / explorador."
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Previous Contributors"
+msgstr "Antigos Contribuidores"
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Previous Core Developers"
+msgstr "Desenvolvedores principais anteriores"
+
#: builtin/mainmenu/tab_content.lua
msgid "Browse online content"
msgstr "Procurar conteúdo online"
@@ -753,38 +852,6 @@ msgstr "Desinstalar o pacote"
msgid "Use Texture Pack"
msgstr "Usar pacote de texturas"
-#: builtin/mainmenu/tab_credits.lua
-msgid "Active Contributors"
-msgstr "Contribuidores Ativos"
-
-#: builtin/mainmenu/tab_credits.lua
-msgid "Core Developers"
-msgstr "Desenvolvedores Principais"
-
-#: builtin/mainmenu/tab_credits.lua
-msgid "Credits"
-msgstr "Méritos"
-
-#: builtin/mainmenu/tab_credits.lua
-msgid "Open User Data Directory"
-msgstr "Abrir o diretório de dados do utilizador"
-
-#: builtin/mainmenu/tab_credits.lua
-msgid ""
-"Opens the directory that contains user-provided worlds, games, mods,\n"
-"and texture packs in a file manager / explorer."
-msgstr ""
-"Abre o diretório que contém mundos, jogos, mods fornecidos pelo utilizador,\n"
-"e pacotes de textura num gestor de ficheiros / explorador."
-
-#: builtin/mainmenu/tab_credits.lua
-msgid "Previous Contributors"
-msgstr "Antigos Contribuidores"
-
-#: builtin/mainmenu/tab_credits.lua
-msgid "Previous Core Developers"
-msgstr "Desenvolvedores principais anteriores"
-
#: builtin/mainmenu/tab_local.lua
msgid "Announce Server"
msgstr "Anunciar servidor"
@@ -813,7 +880,7 @@ msgstr "Servidor"
msgid "Install games from ContentDB"
msgstr "Instalar jogos do ContentDB"
-#: builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
msgid "Name"
msgstr "Nome"
@@ -825,7 +892,7 @@ msgstr "Novo"
msgid "No world created or selected!"
msgstr "Nenhum mundo criado ou seleccionado!"
-#: builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
msgid "Password"
msgstr "Palavra-passe"
@@ -833,7 +900,7 @@ msgstr "Palavra-passe"
msgid "Play Game"
msgstr "Jogar Jogo"
-#: builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
msgid "Port"
msgstr "Porta"
@@ -854,8 +921,12 @@ msgid "Start Game"
msgstr "Iniciar o jogo"
#: builtin/mainmenu/tab_online.lua
-msgid "Address / Port"
-msgstr "Endereço / Porta"
+msgid "Address"
+msgstr "Endereço"
+
+#: builtin/mainmenu/tab_online.lua src/client/keycode.cpp
+msgid "Clear"
+msgstr "Limpar"
#: builtin/mainmenu/tab_online.lua
msgid "Connect"
@@ -865,34 +936,42 @@ msgstr "Ligar"
msgid "Creative mode"
msgstr "Modo Criativo"
+#. ~ PvP = Player versus Player
#: builtin/mainmenu/tab_online.lua
-msgid "Damage enabled"
-msgstr "Dano ativado"
+msgid "Damage / PvP"
+msgstr "Dano / PvP"
#: builtin/mainmenu/tab_online.lua
msgid "Del. Favorite"
msgstr "Rem. Favorito"
#: builtin/mainmenu/tab_online.lua
-msgid "Favorite"
-msgstr "Favorito"
+msgid "Favorites"
+msgstr "Favoritos"
#: builtin/mainmenu/tab_online.lua
-msgid "Join Game"
-msgstr "Juntar-se ao jogo"
+msgid "Incompatible Servers"
+msgstr "Servidores incompatíveis"
#: builtin/mainmenu/tab_online.lua
-msgid "Name / Password"
-msgstr "Nome / Palavra-passe"
+msgid "Join Game"
+msgstr "Juntar-se ao jogo"
#: builtin/mainmenu/tab_online.lua
msgid "Ping"
msgstr "Ping"
-#. ~ PvP = Player versus Player
#: builtin/mainmenu/tab_online.lua
-msgid "PvP enabled"
-msgstr "PvP ativado"
+msgid "Public Servers"
+msgstr "Servidores Públicos"
+
+#: builtin/mainmenu/tab_online.lua
+msgid "Refresh"
+msgstr "Atualizar"
+
+#: builtin/mainmenu/tab_online.lua
+msgid "Server Description"
+msgstr "Descrição do servidor"
#: builtin/mainmenu/tab_settings.lua
msgid "2x"
@@ -934,11 +1013,31 @@ msgstr "Mudar teclas"
msgid "Connected Glass"
msgstr "Vidro conectado"
+#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
+msgid "Dynamic shadows"
+msgstr "Sombras dinâmicas"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Dynamic shadows: "
+msgstr "Sombras dinâmicas: "
+
#: builtin/mainmenu/tab_settings.lua
msgid "Fancy Leaves"
msgstr "Folhas detalhadas"
#: builtin/mainmenu/tab_settings.lua
+msgid "High"
+msgstr "Alto"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Low"
+msgstr "Baixo"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Medium"
+msgstr "Médio"
+
+#: builtin/mainmenu/tab_settings.lua
msgid "Mipmap"
msgstr "Mipmap"
@@ -1010,10 +1109,6 @@ msgstr "Iluminação Suave"
msgid "Texturing:"
msgstr "Texturização:"
-#: builtin/mainmenu/tab_settings.lua
-msgid "To enable shaders the OpenGL driver needs to be used."
-msgstr "Para ativar as sombras é necessário usar o controlador OpenGL."
-
#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
msgid "Tone Mapping"
msgstr "Mapeamento de tons"
@@ -1027,6 +1122,14 @@ msgid "Trilinear Filter"
msgstr "Filtro trilinear"
#: builtin/mainmenu/tab_settings.lua
+msgid "Ultra High"
+msgstr "Muito Alto"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Very Low"
+msgstr "Muito Baixo"
+
+#: builtin/mainmenu/tab_settings.lua
msgid "Waving Leaves"
msgstr "Folhas ondulantes"
@@ -1038,7 +1141,7 @@ msgstr "Líquidos ondulantes"
msgid "Waving Plants"
msgstr "Plantas ondulantes"
-#: src/client/client.cpp
+#: src/client/client.cpp src/client/game.cpp
msgid "Connection timed out."
msgstr "Erro de ligação (tempo excedido)."
@@ -1067,8 +1170,8 @@ msgid "Connection error (timed out?)"
msgstr "Erro de ligação (excedeu tempo?)"
#: src/client/clientlauncher.cpp
-msgid "Could not find or load game \""
-msgstr "Não foi possível encontrar ou carregar jogo \""
+msgid "Could not find or load game: "
+msgstr "Não foi possível localizar ou carregar jogo "
#: src/client/clientlauncher.cpp
msgid "Invalid gamespec."
@@ -1098,18 +1201,6 @@ msgstr "Ficheiro de palavra-passe fornecido falhou em abrir : "
msgid "Provided world path doesn't exist: "
msgstr "O caminho fornecido do mundo não existe: "
-#. ~ DO NOT TRANSLATE THIS LITERALLY!
-#. This is a special string. Put either "no" or "yes"
-#. into the translation field (literally).
-#. Choose "yes" if the language requires use of the fallback
-#. font, "no" otherwise.
-#. The fallback font is (normally) required for languages with
-#. non-Latin script, like Chinese.
-#. When in doubt, test your translation.
-#: src/client/fontengine.cpp
-msgid "needs_fallback_font"
-msgstr "no"
-
#: src/client/game.cpp
msgid ""
"\n"
@@ -1123,14 +1214,6 @@ msgid "- Address: "
msgstr "- Endereço: "
#: src/client/game.cpp
-msgid "- Creative Mode: "
-msgstr "Modo Criativo: "
-
-#: src/client/game.cpp
-msgid "- Damage: "
-msgstr "-Dano: "
-
-#: src/client/game.cpp
msgid "- Mode: "
msgstr "- Modo: "
@@ -1152,6 +1235,15 @@ msgid "- Server Name: "
msgstr "Nome do servidor: "
#: src/client/game.cpp
+msgid "A serialization error occurred:"
+msgstr "Ocorreu um erro:"
+
+#: src/client/game.cpp
+#, c-format
+msgid "Access denied. Reason: %s"
+msgstr "Acesso negado. Razão:%s"
+
+#: src/client/game.cpp
msgid "Automatic forward disabled"
msgstr "Avanço automático desativado"
@@ -1160,6 +1252,22 @@ msgid "Automatic forward enabled"
msgstr "Avanço automático para frente ativado"
#: src/client/game.cpp
+msgid "Block bounds hidden"
+msgstr "Limites de bloco ocultos"
+
+#: src/client/game.cpp
+msgid "Block bounds shown for all blocks"
+msgstr "Limites de bloco mostrados para todos os blocos"
+
+#: src/client/game.cpp
+msgid "Block bounds shown for current block"
+msgstr "Limites de bloco mostrados para o bloco atual"
+
+#: src/client/game.cpp
+msgid "Block bounds shown for nearby blocks"
+msgstr "Limites de bloco mostrados para blocos próximos"
+
+#: src/client/game.cpp
msgid "Camera update disabled"
msgstr "Atualização da camera desativada"
@@ -1168,6 +1276,10 @@ msgid "Camera update enabled"
msgstr "Atualização da camera habilitada"
#: src/client/game.cpp
+msgid "Can't show block bounds (need 'basic_debug' privilege)"
+msgstr ""
+
+#: src/client/game.cpp
msgid "Change Password"
msgstr "Mudar palavra-passe"
@@ -1180,6 +1292,10 @@ msgid "Cinematic mode enabled"
msgstr "Modo cinemático ativado"
#: src/client/game.cpp
+msgid "Client disconnected"
+msgstr "Cliente desconectado"
+
+#: src/client/game.cpp
msgid "Client side scripting is disabled"
msgstr "O scripting de cliente está desativado"
@@ -1188,6 +1304,10 @@ msgid "Connecting to server..."
msgstr "A conectar ao servidor..."
#: src/client/game.cpp
+msgid "Connection failed for unknown reason"
+msgstr "A conexão falhou por motivo desconhecido"
+
+#: src/client/game.cpp
msgid "Continue"
msgstr "Continuar"
@@ -1225,6 +1345,11 @@ msgstr ""
"- %s: bate-papo\n"
#: src/client/game.cpp
+#, c-format
+msgid "Couldn't resolve address: %s"
+msgstr "Não foi possível resolver o endereço:%s"
+
+#: src/client/game.cpp
msgid "Creating client..."
msgstr "A criar cliente..."
@@ -1353,6 +1478,10 @@ msgid "Minimap currently disabled by game or mod"
msgstr "Minipapa atualmente desativado por jogo ou mod"
#: src/client/game.cpp
+msgid "Multiplayer"
+msgstr "Multi-jogador"
+
+#: src/client/game.cpp
msgid "Noclip mode disabled"
msgstr "Modo de atravessar paredes desativado"
@@ -1426,6 +1555,21 @@ msgstr "Som desmutado"
#: src/client/game.cpp
#, c-format
+msgid "The server is probably running a different version of %s."
+msgstr "O servidor provavelmente está executando uma versão diferente de%s."
+
+#: src/client/game.cpp
+#, c-format
+msgid "Unable to connect to %s because IPv6 is disabled"
+msgstr "Não foi possível conectar a%s porque o IPv6 está desativado"
+
+#: src/client/game.cpp
+#, c-format
+msgid "Unable to listen on %s because IPv6 is disabled"
+msgstr "Incapaz de escutar em%s porque IPv6 está desativado"
+
+#: src/client/game.cpp
+#, c-format
msgid "Viewing range changed to %d"
msgstr "Distancia de visualização alterado pra %d"
@@ -1494,10 +1638,6 @@ msgid "Caps Lock"
msgstr "Caps Lock"
#: src/client/keycode.cpp
-msgid "Clear"
-msgstr "Limpar"
-
-#: src/client/keycode.cpp
msgid "Control"
msgstr "Control"
@@ -1762,6 +1902,14 @@ msgstr "Minimapa em modo de superfície, ampliação %dx"
msgid "Minimap in texture mode"
msgstr "Minimapa em modo de textura"
+#: src/gui/guiChatConsole.cpp
+msgid "Failed to open webpage"
+msgstr "Falha ao abrir página da web"
+
+#: src/gui/guiChatConsole.cpp
+msgid "Opening webpage"
+msgstr "Abrindo página da web"
+
#: src/gui/guiConfirmRegistration.cpp src/gui/guiPasswordChange.cpp
msgid "Passwords do not match!"
msgstr "As palavra-passes não correspondem!"
@@ -1791,7 +1939,7 @@ msgid "Proceed"
msgstr "Continuar"
#: src/gui/guiKeyChangeMenu.cpp
-msgid "\"Special\" = climb down"
+msgid "\"Aux1\" = climb down"
msgstr "\"Especial\" = descer"
#: src/gui/guiKeyChangeMenu.cpp
@@ -1803,10 +1951,18 @@ msgid "Automatic jumping"
msgstr "Pulo automático"
#: src/gui/guiKeyChangeMenu.cpp
+msgid "Aux1"
+msgstr "Especial"
+
+#: src/gui/guiKeyChangeMenu.cpp
msgid "Backward"
msgstr "Recuar"
#: src/gui/guiKeyChangeMenu.cpp
+msgid "Block bounds"
+msgstr "Limites de bloco"
+
+#: src/gui/guiKeyChangeMenu.cpp
msgid "Change camera"
msgstr "Mudar camera"
@@ -1895,10 +2051,6 @@ msgid "Sneak"
msgstr "Agachar"
#: src/gui/guiKeyChangeMenu.cpp
-msgid "Special"
-msgstr "Especial"
-
-#: src/gui/guiKeyChangeMenu.cpp
msgid "Toggle HUD"
msgstr "Ativar interface"
@@ -1959,8 +2111,9 @@ msgid "Muted"
msgstr "Mutado"
#: src/gui/guiVolumeChange.cpp
-msgid "Sound Volume: "
-msgstr "Volume do som: "
+#, c-format
+msgid "Sound Volume: %d%%"
+msgstr "Volume do som: %d%%"
#. ~ Imperative, as in "Enter/type in text".
#. Don't forget the space.
@@ -1986,13 +2139,13 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"(Android) Use virtual joystick to trigger \"aux\" button.\n"
-"If enabled, virtual joystick will also tap \"aux\" button when out of main "
+"(Android) Use virtual joystick to trigger \"Aux1\" button.\n"
+"If enabled, virtual joystick will also tap \"Aux1\" button when out of main "
"circle."
msgstr ""
-"(Android) Use joystick virtual para ativar botão \"aux\".\n"
-"Se ativado, o joystick virtual vai também clicar no botão \"aux\" quando "
-"estiver fora do círculo principal."
+"(Android) Use joystick virtual para ativar botão \"especial\".\n"
+"Se ativado, o joystick virtual vai também clicar no botão \"especial\" "
+"quando estiver fora do circulo principal."
#: src/settings_translation_file.cpp
msgid ""
@@ -2219,6 +2372,12 @@ msgstr ""
"para ecrãs 4K."
#: src/settings_translation_file.cpp
+msgid "Adjust the detected display density, used for scaling UI elements."
+msgstr ""
+"Ajuste a densidade de exibição detectada, usada para dimensionar os "
+"elementos da IU."
+
+#: src/settings_translation_file.cpp
#, c-format
msgid ""
"Adjusts the density of the floatland layer.\n"
@@ -2354,6 +2513,14 @@ msgid "Autoscaling mode"
msgstr "Modo de alto escalamento"
#: src/settings_translation_file.cpp
+msgid "Aux1 key"
+msgstr "Tecla especial"
+
+#: src/settings_translation_file.cpp
+msgid "Aux1 key for climbing/descending"
+msgstr "Tecla Aux1 pra escalar/descer"
+
+#: src/settings_translation_file.cpp
msgid "Backward key"
msgstr "Tecla para andar para trás"
@@ -2398,10 +2565,6 @@ msgid "Biome noise"
msgstr "Ruído da Biome"
#: src/settings_translation_file.cpp
-msgid "Bits per pixel (aka color depth) in fullscreen mode."
-msgstr "Bits por pixel (profundidade de cor) no modo de ecrã inteiro."
-
-#: src/settings_translation_file.cpp
msgid "Block send optimize distance"
msgstr "Distância otimizada de envio de bloco"
@@ -2447,11 +2610,11 @@ msgstr "Suavização da camera"
#: src/settings_translation_file.cpp
msgid "Camera smoothing in cinematic mode"
-msgstr "Suavização da câmera no modo cinematográfico"
+msgstr "Suavização da câmara no modo cinematográfico"
#: src/settings_translation_file.cpp
msgid "Camera update toggle key"
-msgstr "Tecla para ativar/desativar atualização da câmera"
+msgstr "Tecla para ativar/desativar atualização da câmara"
#: src/settings_translation_file.cpp
msgid "Cave noise"
@@ -2506,6 +2669,14 @@ msgstr ""
"0,0 é o nível mínimo de luz, 1,0 é o nível máximo de luz."
#: src/settings_translation_file.cpp
+msgid "Chat command time message threshold"
+msgstr "Limite de mensagem de tempo de comando de bate-papo"
+
+#: src/settings_translation_file.cpp
+msgid "Chat commands"
+msgstr "Comandos de Chat"
+
+#: src/settings_translation_file.cpp
msgid "Chat font size"
msgstr "Tamanho da fonte do chat"
@@ -2538,8 +2709,8 @@ msgid "Chat toggle key"
msgstr "Tecla mostra/esconde conversação"
#: src/settings_translation_file.cpp
-msgid "Chatcommands"
-msgstr "Comandos do Chat"
+msgid "Chat weblinks"
+msgstr "Ligações de bate-papo"
#: src/settings_translation_file.cpp
msgid "Chunk size"
@@ -2558,6 +2729,14 @@ msgid "Clean transparent textures"
msgstr "Limpar texturas transparentes"
#: src/settings_translation_file.cpp
+msgid ""
+"Clickable weblinks (middle-click or Ctrl+left-click) enabled in chat console "
+"output."
+msgstr ""
+"Ligações da web clicáveis (clique do meio ou Ctrl + botão esquerdo) ativados "
+"na saída do console de bate-papo."
+
+#: src/settings_translation_file.cpp
msgid "Client"
msgstr "Cliente"
@@ -2602,6 +2781,10 @@ msgid "Colored fog"
msgstr "Névoa colorida"
#: src/settings_translation_file.cpp
+msgid "Colored shadows"
+msgstr "Sombra colorida"
+
+#: src/settings_translation_file.cpp
msgid ""
"Comma-separated list of flags to hide in the content repository.\n"
"\"nonfree\" can be used to hide packages which do not qualify as 'free "
@@ -2643,6 +2826,35 @@ msgid "Command key"
msgstr "Tecla de comando"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid ""
+"Compression level to use when saving mapblocks to disk.\n"
+"-1 - use default compression level\n"
+"0 - least compression, fastest\n"
+"9 - best compression, slowest"
+msgstr ""
+"Nível de compressão ZLib a ser usada ao gravar mapblocks no disco.\n"
+"-1 - Nível de compressão padrão do Zlib\n"
+"0 - Nenhuma compressão; o mais rápido\n"
+"9 - Melhor compressão; o mais devagar\n"
+"(níveis 1-3 usam método \"rápido\" do Zlib, enquanto que 4-9 usam método "
+"normal)"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Compression level to use when sending mapblocks to the client.\n"
+"-1 - use default compression level\n"
+"0 - least compression, fastest\n"
+"9 - best compression, slowest"
+msgstr ""
+"Nível de compressão ZLib a ser usada ao mandar mapblocks para o cliente.\n"
+"-1 - Nível de compressão padrão do Zlib\n"
+"0 - Nenhuma compressão; o mais rápido\n"
+"9 - Melhor compressão; o mais devagar\n"
+"(níveis 1-3 usam método \"rápido\" do Zlib, enquanto que 4-9 usam método "
+"normal)"
+
+#: src/settings_translation_file.cpp
msgid "Connect glass"
msgstr "Vidro conectado"
@@ -2740,11 +2952,12 @@ msgid "Crosshair alpha"
msgstr "Opacidade do cursor"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Crosshair alpha (opaqueness, between 0 and 255).\n"
-"Also controls the object crosshair color"
-msgstr "Opacidade do cursor (entre 0 e 255)."
+"This also applies to the object crosshair."
+msgstr ""
+"Alpha do cursor (quanto ele é opaco, níveis entre 0 e 255).\n"
+"Também controla a cor da cruz do objeto."
#: src/settings_translation_file.cpp
msgid "Crosshair color"
@@ -2755,6 +2968,8 @@ msgid ""
"Crosshair color (R,G,B).\n"
"Also controls the object crosshair color"
msgstr ""
+"Cor da cruz (R, G, B).\n"
+"Também controla a cor da cruz do objeto"
#: src/settings_translation_file.cpp
msgid "DPI"
@@ -2822,11 +3037,13 @@ msgstr "Tamanho de pilha predefinido"
#: src/settings_translation_file.cpp
msgid ""
-"Default timeout for cURL, stated in milliseconds.\n"
-"Only has an effect if compiled with cURL."
+"Define shadow filtering quality.\n"
+"This simulates the soft shadows effect by applying a PCF or Poisson disk\n"
+"but also uses more resources."
msgstr ""
-"Tempo limite por defeito para cURL, em milissegundos.\n"
-"Só tem efeito se compilado com cURL."
+"Define a qualidade de filtragem de sombreamento\n"
+"Isso simula um efeito de sombras suaves aplicando um PCF ou um Poisson disk\n"
+"mas também usa mais recursos."
#: src/settings_translation_file.cpp
msgid "Defines areas where trees have apples."
@@ -2892,8 +3109,8 @@ msgid ""
msgstr ""
"Tempo entre atualizações das malhas 3D no cliente em milissegundos. Aumentar "
"isso\n"
-"vai retardar a taxa de atualização das malhas, sendo assim, reduzindo "
-"travamentos em clientes lentos."
+"vai retardar a taxa de atualização das malhas, por isso reduz travamentos em "
+"clientes lentos."
#: src/settings_translation_file.cpp
msgid "Delay in sending blocks after building"
@@ -2956,6 +3173,10 @@ msgid "Disallow empty passwords"
msgstr "Não permitir palavra-passes vazias"
#: src/settings_translation_file.cpp
+msgid "Display Density Scaling Factor"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Domain name of server, to be displayed in the serverlist."
msgstr "Nome de domínio do servidor, para ser mostrado na lista de servidores."
@@ -3004,6 +3225,25 @@ msgstr ""
"Esse suporte é experimental e a API pode mudar."
#: src/settings_translation_file.cpp
+msgid ""
+"Enable Poisson disk filtering.\n"
+"On true uses Poisson disk to make \"soft shadows\". Otherwise uses PCF "
+"filtering."
+msgstr ""
+"Ativa filtragem de Poisson disk.\n"
+"Quando em true usa o Poisson disk para fazer \"sombras suaves\". Caso "
+"contrário, usa filtragem PCF."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable colored shadows.\n"
+"On true translucent nodes cast colored shadows. This is expensive."
+msgstr ""
+"Ativa sombras coloridas.\n"
+"Quando em true, nodes translúcidos podem projetar sombras coloridas. Requer "
+"o uso de muitos recursos."
+
+#: src/settings_translation_file.cpp
msgid "Enable console window"
msgstr "Ativar janela de console"
@@ -3141,6 +3381,12 @@ msgstr ""
"A alteração desta configuração requer um reinício."
#: src/settings_translation_file.cpp
+msgid ""
+"Enables tradeoffs that reduce CPU load or increase rendering performance\n"
+"at the expense of minor visual glitches that do not impact game playability."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Engine profiling data print interval"
msgstr "Intervalo de exibição dos dados das analizes do motor"
@@ -3189,18 +3435,6 @@ msgid "Fallback font path"
msgstr "Caminho da fonte reserva"
#: src/settings_translation_file.cpp
-msgid "Fallback font shadow"
-msgstr "Sombra da fonte alternativa"
-
-#: src/settings_translation_file.cpp
-msgid "Fallback font shadow alpha"
-msgstr "Canal de opacidade sombra da fonte alternativa"
-
-#: src/settings_translation_file.cpp
-msgid "Fallback font size"
-msgstr "Tamanho da fonte alternativa"
-
-#: src/settings_translation_file.cpp
msgid "Fast key"
msgstr "Tecla de correr"
@@ -3218,10 +3452,10 @@ msgstr "Modo rápido"
#: src/settings_translation_file.cpp
msgid ""
-"Fast movement (via the \"special\" key).\n"
+"Fast movement (via the \"Aux1\" key).\n"
"This requires the \"fast\" privilege on the server."
msgstr ""
-"Movimento rápido (através da tecla \"especial\").\n"
+"Movimento rápido (através da tecla \"Aux1\").\n"
"Isso requer o privilegio \"fast\" no servidor."
#: src/settings_translation_file.cpp
@@ -3256,14 +3490,15 @@ msgstr "Mapeamento de tom fílmico"
#: 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."
+"which PNG optimizers usually discard, often resulting in dark or\n"
+"light edges to transparent textures. Apply a filter to clean that up\n"
+"at texture load time. This is automatically enabled if mipmapping is enabled."
msgstr ""
"Texturas filtradas podem misturar valores RGB com os vizinhos totalmente \n"
"transparentes, o qual otimizadores PNG geralmente descartam, por vezes \n"
-"resultando em uma linha escura em texturas transparentes.\n"
-"Aplicar esse filtro para limpar isso no tempo de carregamento da textura."
+"resultando numa linha escura em texturas transparentes.\n"
+"Aplique esse filtro para limpar isso no momento de carregamento da textura.\n"
+"Esse filtro será ativo automaticamente ao ativar \"mipmapping\"."
#: src/settings_translation_file.cpp
msgid "Filtering"
@@ -3307,9 +3542,8 @@ msgid "Floatland taper exponent"
msgstr "Expoente de conicidade de terrenos flutuantes"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Floatland tapering distance"
-msgstr "Ruído base de terra flutuante"
+msgstr "Distância de afilamento da ilha flutuante"
#: src/settings_translation_file.cpp
msgid "Floatland water level"
@@ -3356,22 +3590,38 @@ msgid "Font size"
msgstr "Tamanho da fonte"
#: src/settings_translation_file.cpp
-msgid "Font size of the default font in point (pt)."
-msgstr "Tamanho da fonte predefinida em pontos (pt)."
+msgid "Font size divisible by"
+msgstr ""
#: src/settings_translation_file.cpp
-msgid "Font size of the fallback font in point (pt)."
-msgstr ""
+#, fuzzy
+msgid "Font size of the default font where 1 unit = 1 pixel at 96 DPI"
+msgstr "Tamanho da fonte predefinida em pontos (pt)."
#: src/settings_translation_file.cpp
-msgid "Font size of the monospace font in point (pt)."
-msgstr ""
+#, fuzzy
+msgid "Font size of the monospace font where 1 unit = 1 pixel at 96 DPI"
+msgstr "Tamanho da fonte de largura fixa em pontos (pt)."
#: src/settings_translation_file.cpp
msgid ""
"Font size of the recent chat text and chat prompt in point (pt).\n"
"Value 0 will use the default font size."
msgstr ""
+"Tamanho da fonte do texto de bate-papo recente e do prompt do bate-papo em "
+"pontos (pt).\n"
+"O valor 0 irá utilizar o tamanho padrão de fonte."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"For pixel-style fonts that do not scale well, this ensures that font sizes "
+"used\n"
+"with this font will always be divisible by this value, in pixels. For "
+"instance,\n"
+"a pixel font 16 pixels tall should have this set to 16, so it will only ever "
+"be\n"
+"sized 16, 32, 48, etc., so a mod requesting a size of 25 will get 32."
+msgstr ""
#: src/settings_translation_file.cpp
msgid ""
@@ -3437,10 +3687,6 @@ msgid "Fraction of the visible distance at which fog starts to be rendered"
msgstr "Fração da distância visível em que a névoa começa a aparecer"
#: src/settings_translation_file.cpp
-msgid "FreeType fonts"
-msgstr "Fontes Freetype"
-
-#: src/settings_translation_file.cpp
msgid ""
"From how far blocks are generated for clients, stated in mapblocks (16 "
"nodes)."
@@ -3473,10 +3719,6 @@ msgid "Full screen"
msgstr "Ecrã inteiro"
#: src/settings_translation_file.cpp
-msgid "Full screen BPP"
-msgstr "BPP em ecrã inteiro"
-
-#: src/settings_translation_file.cpp
msgid "Fullscreen mode."
msgstr "Modo de ecrã inteiro."
@@ -3500,27 +3742,29 @@ msgstr "Chamadas de retorno Globais"
msgid ""
"Global map generation attributes.\n"
"In Mapgen v6 the 'decorations' flag controls all decorations except trees\n"
-"and junglegrass, in all other mapgens this flag controls all decorations."
+"and jungle grass, in all other mapgens this flag controls all decorations."
msgstr ""
"Atributos de geração de mapa globais.\n"
-"No gerador de mapa v6 a flag 'decorations' controla todas as decorações "
+"No gerador de mapa v6 a flag 'decorations' controla todas as decorações, "
"exceto árvores\n"
"e gramas da selva, em todos os outros geradores de mapa essa flag controla "
"todas as decorações."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Gradient of light curve at maximum light level.\n"
"Controls the contrast of the highest light levels."
-msgstr "Curva gradiente de iluminaçao no nível de luz maximo."
+msgstr ""
+"Gradiente da curva de luz no nível de luz máximo.\n"
+"Controla o contraste dos níveis de luz mais altos."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Gradient of light curve at minimum light level.\n"
"Controls the contrast of the lowest light levels."
-msgstr "Curva gradiente de iluminação no nível de luz mínimo."
+msgstr ""
+"Gradiente da curva de luz no nível de luz mínimo.\n"
+"Controla o contraste dos níveis de luz mais baixos."
#: src/settings_translation_file.cpp
msgid "Graphics"
@@ -3551,18 +3795,17 @@ msgid "HUD toggle key"
msgstr "Tecla de comutação HUD"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Handling for deprecated Lua API calls:\n"
"- none: Do not log deprecated calls\n"
"- log: mimic and log backtrace of deprecated call (default).\n"
"- error: abort on usage of deprecated call (suggested for mod developers)."
msgstr ""
-"Tratamento de chamadas ao API Lua obsoletas:\n"
-"- legacy: (tenta) imitar o comportamento antigo (por defeito em versão de "
-"lançamento).\n"
-"- log: imita e regista no log (por defeito em versão de depuração).\n"
-"- error: aborta (sugerido para desenvolvedores de extras)."
+"Lidando com funções obsoletas da API Lua:\n"
+"-...none: não regista funções obsoletas.\n"
+"-...log: imita e regista as funções obsoletas chamadas (padrão).\n"
+"-...error: aborta quando chama uma função obsoleta (sugerido para "
+"programadores de mods)."
#: src/settings_translation_file.cpp
msgid ""
@@ -3587,8 +3830,11 @@ msgid "Heat noise"
msgstr "Ruído para cavernas #1"
#: src/settings_translation_file.cpp
-msgid "Height component of the initial window size."
-msgstr "Altura da janela inicial."
+msgid ""
+"Height component of the initial window size. Ignored in fullscreen mode."
+msgstr ""
+"Componente de altura do tamanho da janela inicial. Ignorado em modo de ecrã "
+"cheio."
#: src/settings_translation_file.cpp
msgid "Height noise"
@@ -3599,10 +3845,6 @@ msgid "Height select noise"
msgstr "Parâmetros de ruido de seleção de altura do gerador de mundo v6"
#: src/settings_translation_file.cpp
-msgid "High-precision FPU"
-msgstr "FPU de alta precisão"
-
-#: src/settings_translation_file.cpp
msgid "Hill steepness"
msgstr "Inclinação dos lagos no gerador de mapa plano"
@@ -3800,6 +4042,9 @@ msgid ""
"If negative, liquid waves will move backwards.\n"
"Requires waving liquids to be enabled."
msgstr ""
+"A velocidade com que as ondas líquidas se movem. Maior = mais rápido.\n"
+"Se negativo, as ondas líquidas se moverão para trás.\n"
+"Requer que a ondulação de líquidos esteja ativada."
#: src/settings_translation_file.cpp
msgid ""
@@ -3844,12 +4089,12 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"If disabled, \"special\" key is used to fly fast if both fly and fast mode "
-"are\n"
+"If disabled, \"Aux1\" key is used to fly fast if both fly and fast mode are\n"
"enabled."
msgstr ""
-"Se estiver desativado, a tecla \"especial será usada para voar rápido se "
-"modo voo e rápido estiverem ativados."
+"Se estiver desativado, a tecla \"especial\" será usada para voar rápido se "
+"modo voo e rápido estiverem\n"
+"ativados."
#: src/settings_translation_file.cpp
msgid ""
@@ -3879,11 +4124,11 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"If enabled, \"special\" key instead of \"sneak\" key is used for climbing "
-"down and\n"
+"If enabled, \"Aux1\" key instead of \"Sneak\" key is used for climbing down "
+"and\n"
"descending."
msgstr ""
-"Se ativado, a tecla \"especial\" em vez de \"esgueirar\" servirá para usada "
+"Se ativado, a tecla \"especial\" em vez de \"esgueirar\" servirá para\n"
"descer."
#: src/settings_translation_file.cpp
@@ -3941,6 +4186,15 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"If the execution of a chat command takes longer than this specified time in\n"
+"seconds, add the time information to the chat command message"
+msgstr ""
+"Se a execução de um comando de chat demorar mais do que o tempo especificado "
+"em\n"
+"segundos, adicione a informação do tempo na mensagem-comando"
+
+#: src/settings_translation_file.cpp
+msgid ""
"If the file size of debug.txt exceeds the number of megabytes specified in\n"
"this setting when it is opened, the file is moved to debug.txt.1,\n"
"deleting an older debug.txt.1 if it exists.\n"
@@ -3999,7 +4253,8 @@ msgstr ""
"Isto é usualmente apenas nessesário por contribuidores core/builtin"
#: src/settings_translation_file.cpp
-msgid "Instrument chatcommands on registration."
+#, fuzzy
+msgid "Instrument chat commands on registration."
msgstr "Monitoração de comandos de chat quando registrados."
#: src/settings_translation_file.cpp
@@ -4057,14 +4312,12 @@ msgid "Invert vertical mouse movement."
msgstr "Inverte o movimento vertical do rato."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Italic font path"
-msgstr "Caminho de fonte monoespaçada"
+msgstr "Caminho da fonte em itálico"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Italic monospace font path"
-msgstr "Caminho de fonte monoespaçada"
+msgstr "Caminho da fonte em itálico monoespaçada"
#: src/settings_translation_file.cpp
msgid "Item entity TTL"
@@ -4096,9 +4349,8 @@ msgid "Joystick button repetition interval"
msgstr "Intervalo de repetição do botão do Joystick"
#: src/settings_translation_file.cpp
-#, fuzzy
-msgid "Joystick deadzone"
-msgstr "Tipo do Joystick"
+msgid "Joystick dead zone"
+msgstr "\"Zona morta\" do joystick"
#: src/settings_translation_file.cpp
msgid "Joystick frustum sensitivity"
@@ -4201,13 +4453,12 @@ msgstr ""
"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Key for digging.\n"
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
-"Tecla para pular. \n"
+"Tecla para escavar. \n"
"Consulte http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
@@ -4354,13 +4605,12 @@ msgstr ""
"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Key for placing.\n"
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
-"Tecla para pular. \n"
+"Tecla para pôr objetos. \n"
"Consulte http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
@@ -4724,7 +4974,7 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
-"Tecla para comutação entre câmera de primeira e terceira pessoa.\n"
+"Tecla para comutação entre câmara de primeira e terceira pessoa.\n"
"Consulte http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
@@ -4921,15 +5171,15 @@ msgstr "Profundidade de cavernas grandes"
#: src/settings_translation_file.cpp
msgid "Large cave maximum number"
-msgstr ""
+msgstr "Quantidade máxima de cavernas grandes"
#: src/settings_translation_file.cpp
msgid "Large cave minimum number"
-msgstr ""
+msgstr "Quantidade mínima de cavernas grandes"
#: src/settings_translation_file.cpp
msgid "Large cave proportion flooded"
-msgstr ""
+msgstr "Proporção inundada de cavernas grandes"
#: src/settings_translation_file.cpp
msgid "Large chat console key"
@@ -4965,13 +5215,12 @@ msgstr ""
"geralmente atualizados em rede."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Length of liquid waves.\n"
"Requires waving liquids to be enabled."
msgstr ""
-"Com o valor TRUE, folhas ondulantes são ativadas.\n"
-"Necessita de shaders para estar ativo."
+"Comprimento das ondas líquidas.\n"
+"Requer que a ondulação de líquidos esteja ativada."
#: src/settings_translation_file.cpp
msgid "Length of time between Active Block Modifier (ABM) execution cycles"
@@ -5006,34 +5255,28 @@ msgstr ""
"- verbose"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Light curve boost"
-msgstr "Aumento leve da curva de luz"
+msgstr "Aumento da curva de luz"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Light curve boost center"
-msgstr "Centro do aumento leve da curva de luz"
+msgstr "Centro do aumento da curva de luz"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Light curve boost spread"
-msgstr "Extensão do aumento leve da curva de luz"
+msgstr "Extensão do aumento da curva de luz"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Light curve gamma"
-msgstr "Aumento leve da curva de luz"
+msgstr "Gamma da curva de luz"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Light curve high gradient"
-msgstr "Aumento leve da curva de luz"
+msgstr "Gradiente alto da curva de luz"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Light curve low gradient"
-msgstr "Centro do aumento leve da curva de luz"
+msgstr "Gradiente baixo da curva de luz"
#: src/settings_translation_file.cpp
msgid ""
@@ -5053,10 +5296,10 @@ msgid ""
"- Downloads performed by main menu (e.g. mod manager).\n"
"Only has an effect if compiled with cURL."
msgstr ""
-"Limites número de solicitações HTTP paralelas. afeta:\n"
+"Limite quantidade de solicitações HTTP paralelas. afeta:\n"
"- Media buscar se servidor usa configuração de remote_media.\n"
-"- Download de lista de servidores e anúncio do servidor.\n"
-"- Transferências realizadas pelo menu principal (por exemplo gerência de "
+"- Descarrega de lista de servidores e anúncio do servidor.\n"
+"- Transferências realizadas pelo menu principal (por exemplo, gerência de "
"mods).\n"
"Só tem efeito se compilado com cURL."
@@ -5111,9 +5354,8 @@ msgid "Lower Y limit of dungeons."
msgstr "Menor limite Y de dungeons."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Lower Y limit of floatlands."
-msgstr "Menor limite Y de dungeons."
+msgstr "Menor limite Y de ilhas flutuantes."
#: src/settings_translation_file.cpp
msgid "Main menu script"
@@ -5127,20 +5369,16 @@ msgstr ""
"a direção."
#: src/settings_translation_file.cpp
-msgid "Makes DirectX work with LuaJIT. Disable if it causes troubles."
-msgstr "Faz o DirectX trabalhar com LuaJIT. Desative se causa problemas."
-
-#: src/settings_translation_file.cpp
msgid "Makes all liquids opaque"
msgstr "Torna todos os líquidos opacos"
#: src/settings_translation_file.cpp
msgid "Map Compression Level for Disk Storage"
-msgstr ""
+msgstr "Nível de Compressão de Mapa no Armazenamento em Disco"
#: src/settings_translation_file.cpp
msgid "Map Compression Level for Network Transfer"
-msgstr ""
+msgstr "Nível de Compressão do Mapa na Transferência em Rede"
#: src/settings_translation_file.cpp
msgid "Map directory"
@@ -5151,24 +5389,22 @@ msgid "Map generation attributes specific to Mapgen Carpathian."
msgstr "Atributos de geração de mapa específicos ao gerador Carpathian."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Map generation attributes specific to Mapgen Flat.\n"
"Occasional lakes and hills can be added to the flat world."
msgstr ""
-"Atributos de geração de mapas específicos para o gerador de mundo plano.\n"
+"Atributos de geração de mapas específicos para o Gerador de mundo Plano.\n"
"Lagos e colinas ocasionalmente podem ser adicionados ao mundo plano."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Map generation attributes specific to Mapgen Fractal.\n"
"'terrain' enables the generation of non-fractal terrain:\n"
"ocean, islands and underground."
msgstr ""
-"Atributos de geração de mapas específicos do Mapgen plano.\n"
-"O \"terreno\" permite a geração de terrenos não fractários:\n"
-"oceano, ilhas e subsolo."
+"Atributos de geração de mapas específicos para o Gerador de mundo Fractal.\n"
+"'terreno' permite a geração de terreno não fractal:\n"
+"oceano, ilhas e subterrâneos."
#: src/settings_translation_file.cpp
msgid ""
@@ -5204,15 +5440,16 @@ msgstr ""
"a marcação 'selvas' é ignorada."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Map generation attributes specific to Mapgen v7.\n"
"'ridges': Rivers.\n"
"'floatlands': Floating land masses in the atmosphere.\n"
"'caverns': Giant caves deep underground."
msgstr ""
-"Atributos de geração de mapa específicos ao gerador V7.\n"
-"'ridges' habilitam os rios."
+"Atributos de geração de mapas específicos para Gerador de mapas v7.\n"
+"'ridges': rios.\n"
+"'floatlands': massas de terra flutuantes na atmosfera.\n"
+"'caverns': cavernas gigantes no subsolo."
#: src/settings_translation_file.cpp
msgid "Map generation limit"
@@ -5223,6 +5460,11 @@ msgid "Map save interval"
msgstr "Intervalo de salvamento de mapa"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Map shadows update frames"
+msgstr "Período de atualização dos Líquidos"
+
+#: src/settings_translation_file.cpp
msgid "Mapblock limit"
msgstr "Limite de mapblock"
@@ -5329,9 +5571,13 @@ msgid "Maximum FPS"
msgstr "FPS máximo"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Maximum FPS when the window is not focused, or when the game is paused."
-msgstr "Máximo FPS quando o jogo é pausado."
+msgstr ""
+"FPS máximo quando a janela não está com foco, ou quando o jogo é pausado."
+
+#: src/settings_translation_file.cpp
+msgid "Maximum distance to render shadows."
+msgstr ""
#: src/settings_translation_file.cpp
msgid "Maximum forceloaded blocks"
@@ -5344,20 +5590,20 @@ msgstr "Largura máxima da hotbar"
#: src/settings_translation_file.cpp
msgid "Maximum limit of random number of large caves per mapchunk."
msgstr ""
+"Limite máximo da quantidade aleatória de cavernas grandes por mapchunk."
#: src/settings_translation_file.cpp
msgid "Maximum limit of random number of small caves per mapchunk."
msgstr ""
+"Limite máximo da quantidade aleatória de cavernas pequenas por mapchunk."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Maximum liquid resistance. Controls deceleration when entering liquid at\n"
"high speed."
msgstr ""
-"Resistência máxima do líquido. Controla a desaceleração ao entrar no líquido "
-"a\n"
-"alta velocidade."
+"Resistência líquida máxima. Controla desaceleração ao entrar num líquido\n"
+"em alta velocidade."
#: src/settings_translation_file.cpp
msgid ""
@@ -5375,25 +5621,22 @@ msgstr ""
"Número máximo de blocos que podem ser enfileirados para o carregamento."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Maximum number of blocks to be queued that are to be generated.\n"
"This limit is enforced per player."
msgstr ""
-"Número máximo de blocos para serem enfileirados que estão a ser gerados.\n"
-"Definido em branco para uma quantidade apropriada ser escolhida "
-"automaticamente."
+"Quantidade máxima de blocos a serem enfileirados, dos que estão para ser "
+"gerados.\n"
+"Esse limite é forçado para cada jogador."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Maximum number of blocks to be queued that are to be loaded from file.\n"
"This limit is enforced per player."
msgstr ""
-"Número máximo de blocos para ser enfileirado que serão carregados do "
-"ficheiro.\n"
-"Definido em branco para uma quantidade apropriada ser escolhida "
-"automaticamente."
+"Quantdade máxima de blocos a serem enfileirados, dos que estão para ser "
+"carregados do ficheiro.\n"
+"Esse limite é forçado para cada jogador."
#: src/settings_translation_file.cpp
msgid ""
@@ -5401,6 +5644,9 @@ msgid ""
"be queued.\n"
"This should be lower than curl_parallel_limit."
msgstr ""
+"Quantidade máxima de descarregas paralelas. Descarregas a exceder esse "
+"limite esperarão numa fila.\n"
+"Deve ser menor que curl_parallel_limit."
#: src/settings_translation_file.cpp
msgid "Maximum number of forceloaded mapblocks."
@@ -5466,10 +5712,20 @@ msgstr ""
"0 para desativar a fila e -1 para a tornar ilimitada."
#: src/settings_translation_file.cpp
-msgid "Maximum time in ms a file download (e.g. a mod download) may take."
+msgid ""
+"Maximum time a file download (e.g. a mod download) may take, stated in "
+"milliseconds."
+msgstr ""
+"Tempo máximo em ms para descarregar ficheiros (por exemplo, um mod) pode "
+"tomar."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum time an interactive request (e.g. server list fetch) may take, "
+"stated in milliseconds."
msgstr ""
-"Tempo máximo em ms para descarregamento de ficheiro (por exemplo, um "
-"ficheiro ZIP de um modificador) pode tomar."
+"Tempo máximo que um pedido interativo (ex: busca de lista de servidores) "
+"pode levar, em milissegundos."
#: src/settings_translation_file.cpp
msgid "Maximum users"
@@ -5497,7 +5753,7 @@ msgstr "Método usado para destacar o objeto selecionado."
#: src/settings_translation_file.cpp
msgid "Minimal level of logging to be written to chat."
-msgstr ""
+msgstr "Nível mínimo de registo a ser impresso no chat."
#: src/settings_translation_file.cpp
msgid "Minimap"
@@ -5512,13 +5768,14 @@ msgid "Minimap scan height"
msgstr "Altura de varredura do mini-mapa"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Minimum limit of random number of large caves per mapchunk."
-msgstr "Ruído 3D que determina o número de masmorras por mapchunk."
+msgstr ""
+"Limite mínimo da quantidade aleatória de grandes cavernas por mapchunk."
#: src/settings_translation_file.cpp
msgid "Minimum limit of random number of small caves per mapchunk."
msgstr ""
+"Limite mínimo da quantidade aleatória de cavernas pequenas por mapchunk."
#: src/settings_translation_file.cpp
msgid "Minimum texture size"
@@ -5533,7 +5790,7 @@ msgid "Mod channels"
msgstr "Canais de mod"
#: src/settings_translation_file.cpp
-msgid "Modifies the size of the hudbar elements."
+msgid "Modifies the size of the HUD elements."
msgstr "Modifica o tamanho dos elementos do hudbar."
#: src/settings_translation_file.cpp
@@ -5545,6 +5802,11 @@ msgid "Monospace font size"
msgstr "Tamanho da fonte monoespaçada"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Monospace font size divisible by"
+msgstr "Tamanho da fonte monoespaçada"
+
+#: src/settings_translation_file.cpp
msgid "Mountain height noise"
msgstr "Parâmetros ruido da altura de montagem do gerador de mundo v7"
@@ -5562,11 +5824,11 @@ msgstr "Nível zero da montanha"
#: src/settings_translation_file.cpp
msgid "Mouse sensitivity"
-msgstr "Sensibilidade do mouse"
+msgstr "Sensibilidade do rato"
#: src/settings_translation_file.cpp
msgid "Mouse sensitivity multiplier."
-msgstr "Multiplicador de sensibilidade do mouse."
+msgstr "Multiplicador de sensibilidade do rato."
#: src/settings_translation_file.cpp
msgid "Mud noise"
@@ -5619,9 +5881,8 @@ msgstr ""
"servidores."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Near plane"
-msgstr "Plano de corte próximo"
+msgstr "Plano próximo"
#: src/settings_translation_file.cpp
msgid "Network"
@@ -5664,7 +5925,6 @@ msgid "Number of emerge threads"
msgstr "Número de seguimentos de emersão"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Number of emerge threads to use.\n"
"Value 0:\n"
@@ -5677,33 +5937,31 @@ msgid ""
"processes, especially in singleplayer and/or when running Lua code in\n"
"'on_generated'. For many users the optimum setting may be '1'."
msgstr ""
-"Quantidade de threads emergentes a utilizar.\n"
-"AVISO: Atualmente existem vários bugs que podem causar falhas quando\n"
-"'num_emerge_threads' é maior que 1. Até que este aviso seja removido, é\n"
-"bem recomendado que este valor seja definido ao valor padrão '1'.\n"
+"Quantidade de threads de emersão a serem usadas.\n"
"Valor 0:\n"
-"- Seleção automática. A quantidade de threads emergentes será\n"
-"- 'quantidade de processadores - 2', com um limite inferior de 1.\n"
+"- Seleção automática. A quantidade de threads de emersão será\n"
+"- 'quantidade de processadores - 2', com um limite inferior de 1.\n"
"Qualquer outro valor:\n"
-"- Especifica a quantidade de threads emergentes, com um limite inferior "
-"de 1.\n"
-"AVISO: O aumento do quantidade de threads emergentes aumenta a velocidade "
-"do\n"
-"motor mapgen, mas isso pode prejudicar o desempenho do jogo, interferindo "
-"com outros\n"
-"processos, especialmente no singleplayer e/ou ao executar código Lua em\n"
-"'on_generated'. Para muitos utilizadores, o ajuste ideal pode ser '1'."
+"- Especifica a quantidade de threads de emersão, com um limite inferior de "
+"1.\n"
+"AVISO: Aumentar a quantidade de threads de emersão aumenta a velocidade do "
+"motor de\n"
+"geração de mapas, mas isso pode prejudicar o desempenho do jogo, a "
+"interferir com outros\n"
+"processos, especialmente em singleplayer e / ou ao executar código Lua em "
+"eventos\n"
+"'on_generated'. Para muitos utilizadores, a configuração ideal pode ser '1'."
#: 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"
+"This is a trade-off between SQLite transaction overhead and\n"
"memory consumption (4096=100MB, as a rule of thumb)."
msgstr ""
-"Número de blocos extras que pode ser carregados por /clearobjects ao mesmo "
-"tempo.\n"
-"Esta é uma troca entre sobrecarga de transação do sqlite e consumo de "
-"memória (4096 = 100 MB, como uma regra de ouro)."
+"Quantidde de blocos adicionais que podem ser carregados por /clearobjects ao "
+"mesmo tempo.\n"
+"Esta é uma troca entre sobrecarga de transação do sqlite e\n"
+"consumo de memória (4096 = 100 MB, como uma regra de ouro)."
#: src/settings_translation_file.cpp
msgid "Online Content Repository"
@@ -5716,12 +5974,7 @@ msgstr "Líquidos Opacos"
#: src/settings_translation_file.cpp
msgid ""
"Opaqueness (alpha) of the shadow behind the default font, between 0 and 255."
-msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid ""
-"Opaqueness (alpha) of the shadow behind the fallback font, between 0 and 255."
-msgstr ""
+msgstr "Opacidade (alpha) das sombras atrás da fonte padrão, entre 0 e 255."
#: src/settings_translation_file.cpp
msgid ""
@@ -5733,19 +5986,30 @@ msgstr ""
"formspec está aberto."
#: src/settings_translation_file.cpp
+msgid "Optional override for chat weblink color."
+msgstr "Substituição opcional da cor de ligações do bate-papo."
+
+#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
-"Path of the fallback font.\n"
-"If “freetype†setting is enabled: Must be a TrueType font.\n"
-"If “freetype†setting is disabled: Must be a bitmap or XML vectors font.\n"
+"Path of the fallback font. Must be a TrueType font.\n"
"This font will be used for certain languages or if the default font is "
"unavailable."
msgstr ""
+"Caminho da fonte alternativa.\n"
+"Se a configuração \"freetype\" estiver ativa: Deve ser uma fonte TrueType.\n"
+"Se a configuração \"freetype\" não estiver ativa: Deve ser uma fonte bitmap "
+"ou de vetores XML.\n"
+"Essa fonte será usada por certas línguas ou se a padrão não estiver "
+"disponível."
#: src/settings_translation_file.cpp
msgid ""
"Path to save screenshots at. Can be an absolute or relative path.\n"
"The folder will be created if it doesn't already exist."
msgstr ""
+"Caminho para gravar capturas de ecrã. Pode ser absoluto ou relativo.\n"
+"A pasta será criada se já não existe."
#: src/settings_translation_file.cpp
msgid ""
@@ -5762,20 +6026,28 @@ msgstr ""
"primeiro daqui."
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
-"Path to the default font.\n"
-"If “freetype†setting is enabled: Must be a TrueType font.\n"
-"If “freetype†setting is disabled: Must be a bitmap or XML vectors font.\n"
+"Path to the default font. Must be a TrueType font.\n"
"The fallback font will be used if the font cannot be loaded."
msgstr ""
+"Caminho para a fonte padrão.\n"
+"Se a configuração \"freetype\" estiver ativa: Deve ser uma fonte TrueType.\n"
+"Se a configuração \"freetype\" não estiver ativa: Deve ser uma fonte bitmap "
+"ou de vetores XML.\n"
+"A fonte alternativa será usada se não for possível carregar essa."
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
-"Path to the monospace font.\n"
-"If “freetype†setting is enabled: Must be a TrueType font.\n"
-"If “freetype†setting is disabled: Must be a bitmap or XML vectors font.\n"
+"Path to the monospace font. Must be a TrueType font.\n"
"This font is used for e.g. the console and profiler screen."
msgstr ""
+"Caminho para a fonte monoespaçada.\n"
+"Se a configuração \"freetype\" estiver ativa: Deve ser uma fonte TrueType.\n"
+"Se a configuração \"freetype\" não estiver ativa: Deve ser uma fonte bitmap "
+"ou de vetores XML.\n"
+"Essa fonte será usada, por exemplo, no console e no ecrã de depuração."
#: src/settings_translation_file.cpp
msgid "Pause on lost window focus"
@@ -5784,11 +6056,11 @@ msgstr "Pausa quando o foco da janela é perdido"
#: src/settings_translation_file.cpp
msgid "Per-player limit of queued blocks load from disk"
msgstr ""
+"Limite de blocos na fila de espera de carregamento do disco por jogador"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Per-player limit of queued blocks to generate"
-msgstr "Limite de filas emerge para gerar"
+msgstr "Limite por jogador de blocos enfileirados para gerar"
#: src/settings_translation_file.cpp
msgid "Physics"
@@ -5803,14 +6075,12 @@ msgid "Pitch move mode"
msgstr "Modo movimento pitch"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Place key"
-msgstr "Tecla de voar"
+msgstr "Tecla de pôr"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Place repetition interval"
-msgstr "Intervalo de repetição do clique direito"
+msgstr "Intervalo de repetição da ação pôr"
#: src/settings_translation_file.cpp
msgid ""
@@ -5833,6 +6103,10 @@ msgid "Player versus player"
msgstr "Jogador contra jogador"
#: src/settings_translation_file.cpp
+msgid "Poisson filtering"
+msgstr "Filtragem de Poisson"
+
+#: src/settings_translation_file.cpp
msgid ""
"Port to connect to (UDP).\n"
"Note that the port field in the main menu overrides this setting."
@@ -5880,19 +6154,23 @@ msgstr "Analizando"
#: src/settings_translation_file.cpp
msgid "Prometheus listener address"
-msgstr ""
+msgstr "Endereço do Prometheus"
#: src/settings_translation_file.cpp
msgid ""
"Prometheus listener address.\n"
-"If minetest is compiled with ENABLE_PROMETHEUS option enabled,\n"
+"If Minetest is compiled with ENABLE_PROMETHEUS option enabled,\n"
"enable metrics listener for Prometheus on that address.\n"
-"Metrics can be fetch on http://127.0.0.1:30000/metrics"
+"Metrics can be fetched on http://127.0.0.1:30000/metrics"
msgstr ""
+"Endereço do Prometheus\n"
+"Se o minetest for compilado com a opção ENABLE_PROMETHEUS ativa,\n"
+"ativa a obtenção de métricas do Prometheus neste endereço.\n"
+"As métricas podem ser obtidas em http://127.0.0.1:30000/metrics"
#: src/settings_translation_file.cpp
msgid "Proportion of large caves that contain liquid."
-msgstr ""
+msgstr "Proporção de cavernas grandes que contém líquido."
#: src/settings_translation_file.cpp
msgid ""
@@ -5920,9 +6198,8 @@ msgid "Recent Chat Messages"
msgstr "Mensagens de chat recentes"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Regular font path"
-msgstr "Diretório para logs"
+msgstr "Caminho da fonte regular"
#: src/settings_translation_file.cpp
msgid "Remote media"
@@ -6223,31 +6500,76 @@ msgstr ""
"clientes."
#: src/settings_translation_file.cpp
-#, fuzzy
+msgid ""
+"Set the shadow strength.\n"
+"Lower value means lighter shadows, higher value means darker shadows."
+msgstr ""
+"Defina a força da sombra.\n"
+"Valores mais baixo significam sombras mais brandas, valores mais altos "
+"significam sombras mais fortes."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set the soft shadow radius size.\n"
+"Lower values mean sharper shadows, bigger values mean softer shadows.\n"
+"Minimum value: 1.0; maximum value: 10.0"
+msgstr ""
+"Defina o tamanho do raio de sombras suaves.\n"
+"Valores mais baixos significam sombras mais nítidas e valores altos sombras "
+"suaves.\n"
+"Valor mínimo 1.0 e valor máximo 10.0"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set the tilt of Sun/Moon orbit in degrees.\n"
+"Value of 0 means no tilt / vertical orbit.\n"
+"Minimum value: 0.0; maximum value: 60.0"
+msgstr ""
+"Defina a inclinação da órbita do Sol/Lua em graus\n"
+"Valor 0 significa sem inclinação/ órbita vertical.\n"
+"Valor mínimo de 0.0 e máximo de 60.0"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set to true to enable Shadow Mapping.\n"
+"Requires shaders to be enabled."
+msgstr ""
+"Defina para true para ativar o Mapeamento de Sombras.\n"
+"Requer sombreadores para ser ativado."
+
+#: src/settings_translation_file.cpp
msgid ""
"Set to true to enable waving leaves.\n"
"Requires shaders to be enabled."
msgstr ""
-"Com o valor TRUE, folhas ondulantes são ativadas.\n"
-"Necessita de shaders para estar ativo."
+"Definido como true ativa o balanço das folhas.\n"
+"Requer que os sombreadores estejam ativados."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Set to true to enable waving liquids (like water).\n"
"Requires shaders to be enabled."
msgstr ""
-"Definido como true permite ondulação da água.\n"
-"Requer sombreadores seres ativados."
+"Definido como true permite ondulação de líquidos (como a água).\n"
+"Requer que os sombreadores estejam ativados."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Set to true to enable waving plants.\n"
"Requires shaders to be enabled."
msgstr ""
"Definido como true permite balanço de plantas.\n"
-"Requer sombreadores serem ativados."
+"Requer que os sombreadores estejam ativados."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Sets shadow texture quality to 32 bits.\n"
+"On false, 16 bits texture will be used.\n"
+"This can cause much more artifacts in the shadow."
+msgstr ""
+"Define a qualidade da textura das sombras para 32 bits.\n"
+"Quando false, a textura de 16 bits será usada\n"
+"Isso pode fazer com que muito mais coisas aparecam nas sombras."
#: src/settings_translation_file.cpp
msgid "Shader path"
@@ -6265,18 +6587,32 @@ msgstr ""
"Só funcionam com o modo de vídeo OpenGL."
#: src/settings_translation_file.cpp
-#, fuzzy
+msgid "Shadow filter quality"
+msgstr "Qualidade do filtro de sombras"
+
+#: src/settings_translation_file.cpp
+msgid "Shadow map max distance in nodes to render shadows"
+msgstr "Distância do mapa de sombras em nodes para renderizar sombras"
+
+#: src/settings_translation_file.cpp
+msgid "Shadow map texture in 32 bits"
+msgstr "Textura do mapa de sombras em 32 bits"
+
+#: src/settings_translation_file.cpp
+msgid "Shadow map texture size"
+msgstr "Tamanho da textura do mapa de sombras"
+
+#: src/settings_translation_file.cpp
msgid ""
"Shadow offset (in pixels) of the default font. If 0, then shadow will not be "
"drawn."
-msgstr "Fonte de compensador de sombra, se 0 então sombra não será desenhada."
+msgstr ""
+"Distância (em pixels) da sombra da fonte padrão. Se 0, então a sombra não "
+"será desenhada."
#: src/settings_translation_file.cpp
-#, fuzzy
-msgid ""
-"Shadow offset (in pixels) of the fallback font. If 0, then shadow will not "
-"be drawn."
-msgstr "Fonte de compensador de sombra, se 0 então sombra não será desenhada."
+msgid "Shadow strength"
+msgstr "Força da sombra"
#: src/settings_translation_file.cpp
msgid "Shape of the minimap. Enabled = round, disabled = square."
@@ -6291,18 +6627,16 @@ msgid "Show entity selection boxes"
msgstr "Mostrar as caixas de seleção entidades"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Show entity selection boxes\n"
"A restart is required after changing this."
msgstr ""
-"Defina o idioma. Deixe vazio para usar a linguagem do sistema.\n"
-"Apos mudar isso uma reinicialização é necessária."
+"Mostrar caixas de seleção de entidades\n"
+"É necessário reiniciar após alterar isso."
#: src/settings_translation_file.cpp
-#, fuzzy
-msgid "Show nametag backgrounds by default"
-msgstr "Fonte em negrito por predefinição"
+msgid "Show name tag backgrounds by default"
+msgstr "Mostrar plano de fundo da nametag por padrão"
#: src/settings_translation_file.cpp
msgid "Shutdown message"
@@ -6330,8 +6664,12 @@ msgid ""
"thread, thus reducing jitter."
msgstr ""
"Tamanho da memória cache do MapBlock do gerador de malha. Aumentar isso "
-"aumentará o percentual de hit do cache, reduzindo os dados sendo copiados do "
-"encadeamento principal, reduzindo assim o jitter."
+"aumentará o percentual de hit do cache, a reduzir os dados que são copiados "
+"do encadeamento principal, e assim reduz o jitter."
+
+#: src/settings_translation_file.cpp
+msgid "Sky Body Orbit Tilt"
+msgstr "Inclinação Da Órbita Do Céu"
#: src/settings_translation_file.cpp
msgid "Slice w"
@@ -6343,11 +6681,11 @@ msgstr "Inclinação e preenchimento trabalham juntos para modificar as alturas.
#: src/settings_translation_file.cpp
msgid "Small cave maximum number"
-msgstr ""
+msgstr "Quantidade máxima de cavernas pequenas"
#: src/settings_translation_file.cpp
msgid "Small cave minimum number"
-msgstr ""
+msgstr "Quantidade mínima de cavernas pequenas"
#: src/settings_translation_file.cpp
msgid "Small-scale humidity variation for blending biomes on borders."
@@ -6368,17 +6706,17 @@ msgid ""
"Smooths camera when looking around. Also called look or mouse smoothing.\n"
"Useful for recording videos."
msgstr ""
-"Suaviza o movimento da câmera quando olhando ao redor. Também chamado de "
-"olhar ou suavização do mouse.\n"
+"Suaviza o movimento da câmara quando olhando ao redor. Também chamado de "
+"olhar ou suavização do rato.\n"
"Útil para gravar vídeos."
#: src/settings_translation_file.cpp
msgid "Smooths rotation of camera in cinematic mode. 0 to disable."
-msgstr "Suaviza a rotação da câmera no modo cinemático. 0 para desativar."
+msgstr "Suaviza a rotação da câmara no modo cinemático. 0 para desativar."
#: src/settings_translation_file.cpp
msgid "Smooths rotation of camera. 0 to disable."
-msgstr "Suaviza a rotação da câmera. 0 para desativar."
+msgstr "Suaviza a rotação da câmara. 0 para desativar."
#: src/settings_translation_file.cpp
msgid "Sneak key"
@@ -6393,16 +6731,12 @@ msgid "Sneaking speed, in nodes per second."
msgstr "Velocidade furtiva, em nós por segundo."
#: src/settings_translation_file.cpp
-msgid "Sound"
-msgstr "Som"
-
-#: src/settings_translation_file.cpp
-msgid "Special key"
-msgstr "Tecla especial"
+msgid "Soft shadow radius"
+msgstr "Raio das sombras suaves"
#: src/settings_translation_file.cpp
-msgid "Special key for climbing/descending"
-msgstr "Tecla especial pra escalar/descer"
+msgid "Sound"
+msgstr "Som"
#: src/settings_translation_file.cpp
msgid ""
@@ -6423,16 +6757,27 @@ msgid ""
"Note that mods or games may explicitly set a stack for certain (or all) "
"items."
msgstr ""
+"Especifica o tamanho padrão da pilha de nós, items e ferramentas.\n"
+"Note que mods e games talvez definam explicitamente um tamanho para certos "
+"(ou todos) os itens."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Spread a complete update of shadow map over given amount of frames.\n"
+"Higher values might make shadows laggy, lower values\n"
+"will consume more resources.\n"
+"Minimum value: 1; maximum value: 16"
+msgstr ""
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Spread of light curve boost range.\n"
"Controls the width of the range to be boosted.\n"
"Standard deviation of the light curve boost Gaussian."
msgstr ""
-"Extensão do aumento médio da curva da luz.\n"
-"Desvio padrão do aumento médio gaussiano."
+"Ampliação da faixa de aumento da curva de luz.\n"
+"Controla a largura do intervalo a ser aumentado.\n"
+"O desvio padrão da gaussiana do aumento da curva de luz."
#: src/settings_translation_file.cpp
msgid "Static spawnpoint"
@@ -6451,9 +6796,8 @@ msgid "Step mountain spread noise"
msgstr "Extensão do ruído da montanha de passo"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Strength of 3D mode parallax."
-msgstr "Intensidade de paralaxe."
+msgstr "Força da paralaxe do modo 3D."
#: src/settings_translation_file.cpp
msgid ""
@@ -6461,6 +6805,9 @@ msgid ""
"The 3 'boost' parameters define a range of the light\n"
"curve that is boosted in brightness."
msgstr ""
+"Aumento da força da curva de luz.\n"
+"Os 3 parâmetros de 'aumento' definem uma faixa\n"
+"da curva de luz que é aumentada em brilho."
#: src/settings_translation_file.cpp
msgid "Strict protocol checking"
@@ -6483,6 +6830,20 @@ msgid ""
"server-intensive extreme water flow and to avoid vast flooding of the\n"
"world surface below."
msgstr ""
+"Nível de superfície de água opcional posta numa camada sólida de flutuação.\n"
+"A água está desativada por padrão e só será posta se este valor for "
+"definido\n"
+"acima de 'mgv7_floatland_ymax' - 'mgv7_floatland_taper' (o início do\n"
+"afilamento superior).\n"
+"*** AVISO, POTENCIAL PERIGO PARA OS MUNDOS E DESEMPENHO DO SERVIDOR ***:\n"
+"Ao ativar a colocação de água, as áreas flutuantes devem ser configuradas e "
+"testadas\n"
+"para ser uma camada sólida, a definir 'mgv7_floatland_density' para 2.0 (ou "
+"outro\n"
+"valor necessário a depender de 'mgv7_np_floatland'), para evitar\n"
+"fluxo de água extremo intensivo do servidor e para evitar grandes inundações "
+"do\n"
+"superfície do mundo abaixo."
#: src/settings_translation_file.cpp
msgid "Synchronous SQLite"
@@ -6542,6 +6903,16 @@ msgstr "Caminho para a pasta de texturas"
#: src/settings_translation_file.cpp
msgid ""
+"Texture size to render the shadow map on.\n"
+"This must be a power of two.\n"
+"Bigger numbers create better shadows but it is also more expensive."
+msgstr ""
+"Tamanho da textura em que o mapa de sombras será renderizado em.\n"
+"Deve ser um múltiplo de dois.\n"
+"Números maiores criam sombras melhores mas também esvazia a conta do banco."
+
+#: src/settings_translation_file.cpp
+msgid ""
"Textures on a node may be aligned either to the node or to the world.\n"
"The former mode suits better things like machines, furniture, etc., while\n"
"the latter makes stairs and microblocks fit surroundings better.\n"
@@ -6562,16 +6933,15 @@ msgid "The URL for the content repository"
msgstr "A url para o repositório de conteúdo"
#: src/settings_translation_file.cpp
-#, fuzzy
-msgid "The deadzone of the joystick"
-msgstr "O identificador do joystick para usar"
+msgid "The dead zone of the joystick"
+msgstr "A zona morta do joystick"
#: src/settings_translation_file.cpp
msgid ""
"The default format in which profiles are being saved,\n"
"when calling `/profiler save [format]` without format."
msgstr ""
-"O formato padrão no qual as analises estão sendo salvas,\n"
+"O formato padrão no qual as análises estão a ser gravadas,\n"
"Quando chamado `/profiler save [formato]` sem formato."
#: src/settings_translation_file.cpp
@@ -6602,6 +6972,11 @@ msgid ""
"Default is 1.0 (1/2 node).\n"
"Requires waving liquids to be enabled."
msgstr ""
+"A altura máxima da superfície de líquidos com ondas.\n"
+"4.0 = Altura da onda é dois nós.\n"
+"0.0 = Onda nem se move.\n"
+"O padrão é 1.0 (meio nó).\n"
+"Requer ondas em líquidos ativada."
#: src/settings_translation_file.cpp
msgid "The network interface that the server listens on."
@@ -6617,7 +6992,6 @@ msgstr ""
"servidor e dos modificadores."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"The radius of the volume of blocks around every player that is subject to "
"the\n"
@@ -6627,34 +7001,34 @@ msgid ""
"maintained.\n"
"This should be configured together with active_object_send_range_blocks."
msgstr ""
-"O raio do volume de blocos em volta de cada jogador que é sujeito a coisas "
-"de bloco ativo, em mapblocks (16 nós).\n"
-"Em blocos ativos, objetos são carregados e ABMs executam.\n"
-"Isto é também o alcançe mínimo em que objetos ativos(mobs) são mantidos.\n"
-"Isto deve ser configurado junto com o alcance_objeto_ativo."
+"O raio do volume dos blocos em torno de cada jogador que está sujeito ao\n"
+"material de bloco ativo, declarado em mapblocks (16 nós).\n"
+"Nos blocos ativos, os objetos são carregados e os ABMs executados.\n"
+"Este também é o intervalo mínimo no qual os objetos ativos (mobs) são "
+"mantidos.\n"
+"Isso deve ser configurado junto com active_object_send_range_blocks."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
-"The rendering back-end for Irrlicht.\n"
+"The rendering back-end.\n"
"A restart is required after changing this.\n"
"Note: On Android, stick with OGLES1 if unsure! App may fail to start "
"otherwise.\n"
"On other platforms, OpenGL is recommended.\n"
"Shaders are supported by OpenGL (desktop only) and OGLES2 (experimental)"
msgstr ""
-"Renderizador de fundo para o Irrlicht.\n"
-"Uma reinicialização é necessária após alterar isso.\n"
-"Note: no Android, use o OGLES1 caso em dúvida! A app pode falhar ao abrir em "
-"outro caso.\n"
-"Em outras plataformas, OpenGL é recomdado, e é o único driver com suporte "
-"a \n"
-"sombreamento atualmente."
+"O back-end de renderização.\n"
+"É necessário reiniciar após alterar isso.\n"
+"Nota: No Android, use OGLES1 se não tiver certeza! A app pode falhar ao "
+"iniciar de outra forma.\n"
+"Em outras plataformas, OpenGL é recomendado.\n"
+"Shaders são suportados por OpenGL (somente desktop) e OGLES2 (experimental)"
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
"The sensitivity of the joystick axes for moving the\n"
-"ingame view frustum around."
+"in-game view frustum around."
msgstr ""
"A sensibilidade dos eixos do joystick para movimentar o \n"
"frustum de exibição no jogo."
@@ -6699,13 +7073,12 @@ msgstr ""
"quando pressionando uma combinação de botão no joystick."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"The time in seconds it takes between repeated node placements when holding\n"
"the place button."
msgstr ""
-"O tempo em segundos entre repetidos cliques direitos ao segurar o botão "
-"direito do mouse."
+"O tempo em segundos que leva entre as colocações de nó repetidas ao segurar\n"
+"o botão de pôr."
#: src/settings_translation_file.cpp
msgid "The type of joystick"
@@ -6765,7 +7138,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Toggle camera mode key"
-msgstr "Tecla de alternância do modo de câmera"
+msgstr "Tecla de alternância do modo de câmara"
#: src/settings_translation_file.cpp
msgid "Tooltip delay"
@@ -6776,6 +7149,10 @@ msgid "Touch screen threshold"
msgstr "Limiar o ecrã de toque"
#: src/settings_translation_file.cpp
+msgid "Tradeoffs for performance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Trees noise"
msgstr "Ruido de árvores"
@@ -6784,7 +7161,6 @@ msgid "Trilinear filtering"
msgstr "Filtro tri-linear"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"True = 256\n"
"False = 128\n"
@@ -6792,7 +7168,7 @@ msgid ""
msgstr ""
"True = 256\n"
"False = 128\n"
-"Útil para fazer o mini-mapa mais fluido em computadores mais lentos."
+"Útil para suavizar o minimapa em máquinas mais lentas."
#: src/settings_translation_file.cpp
msgid "Trusted mods"
@@ -6834,9 +7210,8 @@ msgid "Upper Y limit of dungeons."
msgstr "Limite topo Y de dungeons."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Upper Y limit of floatlands."
-msgstr "Limite topo Y de dungeons."
+msgstr "Limite máximo Y para as ilhas flutuantes."
#: src/settings_translation_file.cpp
msgid "Use 3D cloud look instead of flat."
@@ -6855,8 +7230,9 @@ msgid "Use bilinear filtering when scaling textures."
msgstr "Usar filtragem bilinear ao dimensionamento de texturas."
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
-"Use mip mapping to scale textures. May slightly increase performance,\n"
+"Use mipmapping to scale textures. May slightly increase performance,\n"
"especially when using a high resolution texture pack.\n"
"Gamma correct downscaling is not supported."
msgstr ""
@@ -6875,6 +7251,16 @@ msgid ""
"If set to 0, MSAA is disabled.\n"
"A restart is required after changing this option."
msgstr ""
+"Use o anti-serrilhamento de várias amostras (MSAA) para suavizar as bordas "
+"do bloco.\n"
+"Este algoritmo suaviza a janela de visualização 3D enquanto mantém a imagem "
+"nítida,\n"
+"mas não afeta o interior das texturas\n"
+"(que é especialmente perceptível com texturas transparentes).\n"
+"Espaços visíveis aparecem entre os nós quando os sombreadores são "
+"desativados.\n"
+"Se definido como 0, MSAA é desativado.\n"
+"É necessário reiniciar após alterar esta opção."
#: src/settings_translation_file.cpp
msgid "Use trilinear filtering when scaling textures."
@@ -6978,21 +7364,20 @@ msgid "Viewing range"
msgstr "Intervalo de visualização"
#: src/settings_translation_file.cpp
-msgid "Virtual joystick triggers aux button"
-msgstr "Joystick virtual ativa botão auxiliar"
+msgid "Virtual joystick triggers Aux1 button"
+msgstr "Joystick virtual ativa botão especial"
#: src/settings_translation_file.cpp
msgid "Volume"
msgstr "Volume do som"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Volume of all sounds.\n"
"Requires the sound system to be enabled."
msgstr ""
-"Ativa mapeamento de oclusão de paralaxe.\n"
-"Requer sombreadores ativados."
+"Volume de todos os sons.\n"
+"Requer que o sistema de som esteja ativado."
#: src/settings_translation_file.cpp
msgid ""
@@ -7037,30 +7422,31 @@ msgid "Waving leaves"
msgstr "Folhas ondulantes"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Waving liquids"
msgstr "Líquidos ondulantes"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Waving liquids wave height"
-msgstr "Altura da onda de água ondulante"
+msgstr "Altura da onda nos líquidos ondulantes"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Waving liquids wave speed"
-msgstr "Velocidade da onda de água ondulante"
+msgstr "Velocidade de balanço da água"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Waving liquids wavelength"
-msgstr "Comprimento de onda da água de ondulação"
+msgstr "Comprimento de balanço da água"
#: src/settings_translation_file.cpp
msgid "Waving plants"
msgstr "Balançar das Plantas"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Weblink color"
+msgstr "Cor da caixa de seleção"
+
+#: 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"
@@ -7083,14 +7469,14 @@ msgstr ""
"vídeo que não suportem propriedades baixas de texturas voltam do hardware."
#: src/settings_translation_file.cpp
+#, fuzzy
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.\n"
+"memory. Powers of 2 are recommended. This setting is ONLY applied if\n"
+"bilinear/trilinear/anisotropic filtering is enabled.\n"
"This is also used as the base node texture size for world-aligned\n"
"texture autoscaling."
msgstr ""
@@ -7108,18 +7494,8 @@ msgstr ""
"texturas."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
-"Whether FreeType fonts are used, requires FreeType support to be compiled "
-"in.\n"
-"If disabled, bitmap and XML vectors fonts are used instead."
-msgstr ""
-"Se forem utilizadas fontes freetype, requer suporte a freetype para ser "
-"compilado."
-
-#: src/settings_translation_file.cpp
-msgid ""
-"Whether nametag backgrounds should be shown by default.\n"
+"Whether name tag backgrounds should be shown by default.\n"
"Mods may still set a background."
msgstr ""
@@ -7163,6 +7539,10 @@ msgid ""
"In-game, you can toggle the mute state with the mute key or by using the\n"
"pause menu."
msgstr ""
+"Quando mutar os sons. Pode mutar os sons a qualquer hora, a não ser\n"
+"que o sistema de som esteja desativado (enable_sound=false).\n"
+"No jogo, pode ativar o estado de mutado com o botão de mutar\n"
+"ou a usar o menu de pausa."
#: src/settings_translation_file.cpp
msgid ""
@@ -7172,8 +7552,9 @@ msgstr ""
"premir F5)."
#: src/settings_translation_file.cpp
-msgid "Width component of the initial window size."
-msgstr "Largura da janela inicial."
+msgid "Width component of the initial window size. Ignored in fullscreen mode."
+msgstr ""
+"Componente de tamanho da janela inicial. Ignorado em modo de ecrã cheio."
#: src/settings_translation_file.cpp
msgid "Width of the selection box lines around nodes."
@@ -7249,6 +7630,12 @@ msgid ""
"For a solid floatland layer, this controls the height of hills/mountains.\n"
"Must be less than or equal to half the distance between the Y limits."
msgstr ""
+"Distância de Y sobre a qual as ilhas flutuantes diminuem de densidade total "
+"para nenhuma densidade.\n"
+"O afunilamento começa nesta distância do limite Y.\n"
+"Para uma ilha flutuante sólida, isso controla a altura das colinas / "
+"montanhas.\n"
+"Deve ser menor ou igual a metade da distância entre os limites Y."
#: src/settings_translation_file.cpp
msgid "Y-level of average terrain surface."
@@ -7271,34 +7658,23 @@ msgid "Y-level of seabed."
msgstr "Nível Y do fundo do mar."
#: src/settings_translation_file.cpp
-msgid ""
-"ZLib compression level to use when saving mapblocks to disk.\n"
-"-1 - Zlib's default compression level\n"
-"0 - no compresson, fastest\n"
-"9 - best compression, slowest\n"
-"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)"
-msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid ""
-"ZLib compression level to use when sending mapblocks to the client.\n"
-"-1 - Zlib's default compression level\n"
-"0 - no compresson, fastest\n"
-"9 - best compression, slowest\n"
-"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "cURL file download timeout"
msgstr "Tempo limite de descarregamento de ficheiro via cURL"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "cURL interactive timeout"
+msgstr "Tempo limite de cURL"
+
+#: src/settings_translation_file.cpp
msgid "cURL parallel limit"
msgstr "limite paralelo de cURL"
-#: src/settings_translation_file.cpp
-msgid "cURL timeout"
-msgstr "Tempo limite de cURL"
+#~ msgid "- Creative Mode: "
+#~ msgstr "Modo Criativo: "
+
+#~ msgid "- Damage: "
+#~ msgstr "-Dano: "
#~ msgid ""
#~ "0 = parallax occlusion with slope information (faster).\n"
@@ -7307,6 +7683,9 @@ msgstr "Tempo limite de cURL"
#~ "0 = oclusão paralaxe com dados de inclinação (mais rápido).\n"
#~ "1 = mapeamento de relevo (mais lento, mais preciso)."
+#~ msgid "Address / Port"
+#~ msgstr "Endereço / Porta"
+
#~ msgid ""
#~ "Adjust the gamma encoding for the light tables. Higher numbers are "
#~ "brighter.\n"
@@ -7327,6 +7706,9 @@ msgstr "Tempo limite de cURL"
#~ msgid "Back"
#~ msgstr "Voltar"
+#~ msgid "Bits per pixel (aka color depth) in fullscreen mode."
+#~ msgstr "Bits por pixel (profundidade de cor) no modo de ecrã inteiro."
+
#~ msgid "Bump Mapping"
#~ msgstr "Bump mapping"
@@ -7367,13 +7749,26 @@ msgstr "Tempo limite de cURL"
#~ msgid "Controls width of tunnels, a smaller value creates wider tunnels."
#~ msgstr "Controla a largura dos túneis, um valor menor cria túneis maiores."
+#~ msgid "Credits"
+#~ msgstr "Méritos"
+
#~ msgid "Crosshair color (R,G,B)."
#~ msgstr "Cor do cursor (R,G,B)."
+#~ msgid "Damage enabled"
+#~ msgstr "Dano ativado"
+
#~ msgid "Darkness sharpness"
#~ msgstr "Nitidez da escuridão"
#~ msgid ""
+#~ "Default timeout for cURL, stated in milliseconds.\n"
+#~ "Only has an effect if compiled with cURL."
+#~ msgstr ""
+#~ "Tempo limite por defeito para cURL, em milissegundos.\n"
+#~ "Só tem efeito se compilado com cURL."
+
+#~ msgid ""
#~ "Defines areas of floatland smooth terrain.\n"
#~ "Smooth floatlands occur when noise > 0."
#~ msgstr ""
@@ -7440,6 +7835,15 @@ msgstr "Tempo limite de cURL"
#~ msgid "FPS in pause menu"
#~ msgstr "FPS em menu de pausa"
+#~ msgid "Fallback font shadow"
+#~ msgstr "Sombra da fonte alternativa"
+
+#~ msgid "Fallback font shadow alpha"
+#~ msgstr "Canal de opacidade sombra da fonte alternativa"
+
+#~ msgid "Fallback font size"
+#~ msgstr "Tamanho da fonte alternativa"
+
#~ msgid "Floatland base height noise"
#~ msgstr "Altura base de ruído de terra flutuante"
@@ -7449,6 +7853,15 @@ msgstr "Tempo limite de cURL"
#~ msgid "Font shadow alpha (opaqueness, between 0 and 255)."
#~ msgstr "Opacidade da sombra da fonte (entre 0 e 255)."
+#~ msgid "Font size of the fallback font in point (pt)."
+#~ msgstr "Tamanho da fonte reserva em pontos (pt)."
+
+#~ msgid "FreeType fonts"
+#~ msgstr "Fontes Freetype"
+
+#~ msgid "Full screen BPP"
+#~ msgstr "BPP em ecrã inteiro"
+
#~ msgid "Gamma"
#~ msgstr "Gama"
@@ -7458,9 +7871,15 @@ msgstr "Tempo limite de cURL"
#~ msgid "Generate normalmaps"
#~ msgstr "Gerar mapa de normais"
+#~ msgid "High-precision FPU"
+#~ msgstr "FPU de alta precisão"
+
#~ msgid "IPv6 support."
#~ msgstr "Suporte IPv6."
+#~ msgid "Install: file: \"$1\""
+#~ msgstr "Instalar: ficheiro: \"$1\""
+
#~ msgid "Lava depth"
#~ msgstr "Profundidade da lava"
@@ -7476,6 +7895,9 @@ msgstr "Tempo limite de cURL"
#~ msgid "Main menu style"
#~ msgstr "Estilo do menu principal"
+#~ msgid "Makes DirectX work with LuaJIT. Disable if it causes troubles."
+#~ msgstr "Faz o DirectX trabalhar com LuaJIT. Desative se causa problemas."
+
#~ msgid "Minimap in radar mode, Zoom x2"
#~ msgstr "Minimapa em modo radar, zoom 2x"
@@ -7488,6 +7910,9 @@ msgstr "Tempo limite de cURL"
#~ msgid "Minimap in surface mode, Zoom x4"
#~ msgstr "Minimapa em modo de superfície, zoom 4x"
+#~ msgid "Name / Password"
+#~ msgstr "Nome / Palavra-passe"
+
#~ msgid "Name/Password"
#~ msgstr "Nome/palavra-passe"
@@ -7506,6 +7931,12 @@ msgstr "Tempo limite de cURL"
#~ msgid "Ok"
#~ msgstr "Ok"
+#~ msgid ""
+#~ "Opaqueness (alpha) of the shadow behind the fallback font, between 0 and "
+#~ "255."
+#~ msgstr ""
+#~ "Opacidade (alpha) da sombra atrás da fonte alternativa, entre 0 e 255."
+
#~ msgid "Overall bias of parallax occlusion effect, usually scale/2."
#~ msgstr ""
#~ "Enviesamento do efeito de oclusão de paralaxe, normalmente escala/2."
@@ -7543,6 +7974,9 @@ msgstr "Tempo limite de cURL"
#~ msgid "Projecting dungeons"
#~ msgstr "Projetando dungeons"
+#~ msgid "PvP enabled"
+#~ msgstr "PvP ativado"
+
#~ msgid "Reset singleplayer world"
#~ msgstr "Reiniciar mundo singleplayer"
@@ -7552,6 +7986,19 @@ msgstr "Tempo limite de cURL"
#~ msgid "Shadow limit"
#~ msgstr "Limite de mapblock"
+#~ msgid ""
+#~ "Shadow offset (in pixels) of the fallback font. If 0, then shadow will "
+#~ "not be drawn."
+#~ msgstr ""
+#~ "Distância (em pixels) da sombra da fonte de backup. Se 0, então nenhuma "
+#~ "sombra será desenhada."
+
+#~ msgid "Special"
+#~ msgstr "Especial"
+
+#~ msgid "Special key"
+#~ msgstr "Tecla especial"
+
#~ msgid "Start Singleplayer"
#~ msgstr "Iniciar Um Jogador"
@@ -7564,6 +8011,9 @@ msgstr "Tempo limite de cURL"
#~ msgid "This font will be used for certain languages."
#~ msgstr "Esta fonte será usada para determinados idiomas."
+#~ msgid "To enable shaders the OpenGL driver needs to be used."
+#~ msgstr "Para ativar as sombras é necessário usar o controlador OpenGL."
+
#~ msgid "Toggle Cinematic"
#~ msgstr "Ativar/Desativar câmera cinemática"
@@ -7587,6 +8037,15 @@ msgstr "Tempo limite de cURL"
#~ msgid "Waving water"
#~ msgstr "Balançar das Ondas"
+#~ msgid ""
+#~ "Whether FreeType fonts are used, requires FreeType support to be compiled "
+#~ "in.\n"
+#~ "If disabled, bitmap and XML vectors fonts are used instead."
+#~ msgstr ""
+#~ "Se as fontes FreeType são usadas, requer que suporte FreeType tenha sido "
+#~ "compilado.\n"
+#~ "Se desativado, fontes de bitmap e de vetores XML são usadas em vez disso."
+
#~ msgid "Whether dungeons occasionally project from the terrain."
#~ msgstr "Se dungeons ocasionalmente se projetam do terreno."
@@ -7602,3 +8061,10 @@ msgstr "Tempo limite de cURL"
#~ msgid "Yes"
#~ msgstr "Sim"
+
+#, fuzzy
+#~ msgid "You died."
+#~ msgstr "Você morreu"
+
+#~ msgid "needs_fallback_font"
+#~ msgstr "no"
diff --git a/po/pt_BR/minetest.po b/po/pt_BR/minetest.po
index 295a59bc5..58a980523 100644
--- a/po/pt_BR/minetest.po
+++ b/po/pt_BR/minetest.po
@@ -2,9 +2,9 @@ msgid ""
msgstr ""
"Project-Id-Version: Portuguese (Brazil) (Minetest)\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-02-23 19:03+0100\n"
-"PO-Revision-Date: 2021-02-23 15:50+0000\n"
-"Last-Translator: Victor Barcelos Lacerda <victornuti.1@gmail.com>\n"
+"POT-Creation-Date: 2022-01-25 23:19+0100\n"
+"PO-Revision-Date: 2021-12-11 04:51+0000\n"
+"Last-Translator: Gabriel Cardoso <g.cardoso@mailfence.com>\n"
"Language-Team: Portuguese (Brazil) <https://hosted.weblate.org/projects/"
"minetest/minetest/pt_BR/>\n"
"Language: pt_BR\n"
@@ -12,7 +12,43 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n > 1;\n"
-"X-Generator: Weblate 4.5\n"
+"X-Generator: Weblate 4.10-dev\n"
+
+#: builtin/client/chatcommands.lua
+msgid "Clear the out chat queue"
+msgstr "Limpe a fila de espera do chat"
+
+#: builtin/client/chatcommands.lua
+msgid "Empty command."
+msgstr "Comando vazio."
+
+#: builtin/client/chatcommands.lua
+msgid "Exit to main menu"
+msgstr "Sair para o menu principal"
+
+#: builtin/client/chatcommands.lua
+msgid "Invalid command: "
+msgstr "Comando inválido: "
+
+#: builtin/client/chatcommands.lua
+msgid "Issued command: "
+msgstr "Comando emitido: "
+
+#: builtin/client/chatcommands.lua
+msgid "List online players"
+msgstr "Liste os jogadores online"
+
+#: builtin/client/chatcommands.lua
+msgid "Online players: "
+msgstr "Jogadores online: "
+
+#: builtin/client/chatcommands.lua
+msgid "The out chat queue is now empty."
+msgstr "A fila de espera do chat agora está vazia."
+
+#: builtin/client/chatcommands.lua
+msgid "This command is disabled by server."
+msgstr "Este comando está desabilitado pelo servidor."
#: builtin/client/death_formspec.lua src/client/game.cpp
msgid "Respawn"
@@ -22,9 +58,40 @@ msgstr "Reviver"
msgid "You died"
msgstr "Você morreu"
+#: builtin/common/chatcommands.lua
+msgid "Available commands:"
+msgstr "Comandos disponíveis:"
+
+#: builtin/common/chatcommands.lua
+msgid "Available commands: "
+msgstr "Comandos disponíveis: "
+
+#: builtin/common/chatcommands.lua
+msgid "Command not available: "
+msgstr "Comando não disponível: "
+
+#: builtin/common/chatcommands.lua
+msgid "Get help for commands"
+msgstr "Obtenha ajuda para comandos"
+
+#: builtin/common/chatcommands.lua
+msgid ""
+"Use '.help <cmd>' to get more information, or '.help all' to list everything."
+msgstr ""
+"Use '.help <cmd>' para conseguir mais informação, ou '.help all' para listar "
+"tudo."
+
+#: builtin/common/chatcommands.lua
+msgid "[all | <cmd>]"
+msgstr "[all| <cmd>]"
+
#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp
msgid "OK"
-msgstr "OK"
+msgstr "Ok"
+
+#: builtin/fstk/ui.lua
+msgid "<none available>"
+msgstr "<Comando não disponível>"
#: builtin/fstk/ui.lua
msgid "An error occurred in a Lua script:"
@@ -60,7 +127,7 @@ msgstr "O servidor suporta versões de protocolo entre $1 e $2. "
#: builtin/mainmenu/common.lua
msgid "We only support protocol version $1."
-msgstr "Suportamos apenas o protocolo de versão $1."
+msgstr "Nós só suportamos a versão do protocolo $1."
#: builtin/mainmenu/common.lua
msgid "We support protocol versions between version $1 and $2."
@@ -230,6 +297,10 @@ msgid "Install missing dependencies"
msgstr "Instalar dependências ausentes"
#: builtin/mainmenu/dlg_contentstore.lua
+msgid "Install: Unsupported file type or broken archive"
+msgstr "Instalação: Tipo de arquivo não suportado ou corrompido"
+
+#: builtin/mainmenu/dlg_contentstore.lua
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Mods"
msgstr "Modulos (Mods)"
@@ -533,7 +604,7 @@ msgstr "< Voltar para as configurações"
msgid "Browse"
msgstr "Procurar"
-#: builtin/mainmenu/dlg_settings_advanced.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_settings.lua
msgid "Disabled"
msgstr "Desabilitado"
@@ -558,7 +629,7 @@ msgid "Offset"
msgstr "Deslocamento"
#: builtin/mainmenu/dlg_settings_advanced.lua
-msgid "Persistance"
+msgid "Persistence"
msgstr "Persistência"
#: builtin/mainmenu/dlg_settings_advanced.lua
@@ -577,7 +648,7 @@ msgstr "Restaurar Padrão"
msgid "Scale"
msgstr "Escala"
-#: builtin/mainmenu/dlg_settings_advanced.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_online.lua
msgid "Search"
msgstr "Buscar"
@@ -671,14 +742,6 @@ msgstr ""
"o modpack $1"
#: builtin/mainmenu/pkgmgr.lua
-msgid "Install: Unsupported file type \"$1\" or broken archive"
-msgstr "Instalação: Tipo de arquivo \"$1\" não suportado ou corrompido"
-
-#: builtin/mainmenu/pkgmgr.lua
-msgid "Install: file: \"$1\""
-msgstr "Instalação: arquivo: \"$1\""
-
-#: builtin/mainmenu/pkgmgr.lua
msgid "Unable to find a valid mod or modpack"
msgstr "Incapaz de encontrar um mod ou modpack válido"
@@ -703,9 +766,8 @@ msgid "Loading..."
msgstr "Carregando..."
#: builtin/mainmenu/serverlistmgr.lua
-#, fuzzy
msgid "Public server list is disabled"
-msgstr "Scripting de cliente está desabilitado"
+msgstr "A lista de servidores públicos está desabilitada"
#: builtin/mainmenu/serverlistmgr.lua
msgid "Try reenabling public serverlist and check your internet connection."
@@ -713,6 +775,42 @@ msgstr ""
"Tente reativar a lista de servidores públicos e verifique sua conexão com a "
"internet."
+#: builtin/mainmenu/tab_about.lua
+msgid "About"
+msgstr "Sobre"
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Active Contributors"
+msgstr "Colaboradores Ativos"
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Active renderer:"
+msgstr "Renderizador ativo:"
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Core Developers"
+msgstr "Desenvolvedores Principais"
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Open User Data Directory"
+msgstr "Abrir diretório de dados do usuário"
+
+#: builtin/mainmenu/tab_about.lua
+msgid ""
+"Opens the directory that contains user-provided worlds, games, mods,\n"
+"and texture packs in a file manager / explorer."
+msgstr ""
+"Abre o diretório que contém mundos, jogos, mods fornecidos pelo usuário,\n"
+"e pacotes de textura em um gerenciador / navegador de arquivos."
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Previous Contributors"
+msgstr "Colaboradores Anteriores"
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Previous Core Developers"
+msgstr "Desenvolvedores Principais Anteriores"
+
#: builtin/mainmenu/tab_content.lua
msgid "Browse online content"
msgstr "Procurar conteúdo online"
@@ -753,38 +851,6 @@ msgstr "Desinstalar Pacote"
msgid "Use Texture Pack"
msgstr "Usar Pacote de Texturas"
-#: builtin/mainmenu/tab_credits.lua
-msgid "Active Contributors"
-msgstr "Colaboradores Ativos"
-
-#: 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 "Open User Data Directory"
-msgstr "Abrir diretório de dados do usuário"
-
-#: builtin/mainmenu/tab_credits.lua
-msgid ""
-"Opens the directory that contains user-provided worlds, games, mods,\n"
-"and texture packs in a file manager / explorer."
-msgstr ""
-"Abre o diretório que contém mundos, jogos, mods fornecidos pelo usuário,\n"
-"e pacotes de textura em um gerenciador / navegador de arquivos."
-
-#: builtin/mainmenu/tab_credits.lua
-msgid "Previous Contributors"
-msgstr "Colaboradores Anteriores"
-
-#: builtin/mainmenu/tab_credits.lua
-msgid "Previous Core Developers"
-msgstr "Desenvolvedores Principais Anteriores"
-
#: builtin/mainmenu/tab_local.lua
msgid "Announce Server"
msgstr "Anunciar Servidor"
@@ -813,7 +879,7 @@ msgstr "Hospedar Servidor"
msgid "Install games from ContentDB"
msgstr "Instalar jogos do ContentDB"
-#: builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
msgid "Name"
msgstr "Nome"
@@ -825,7 +891,7 @@ msgstr "Novo"
msgid "No world created or selected!"
msgstr "Nenhum mundo criado ou selecionado!"
-#: builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
msgid "Password"
msgstr "Senha"
@@ -833,7 +899,7 @@ msgstr "Senha"
msgid "Play Game"
msgstr "Jogar"
-#: builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
msgid "Port"
msgstr "Porta"
@@ -854,8 +920,12 @@ msgid "Start Game"
msgstr "Iniciar Jogo"
#: builtin/mainmenu/tab_online.lua
-msgid "Address / Port"
-msgstr "Endereço / Porta"
+msgid "Address"
+msgstr "Endereço"
+
+#: builtin/mainmenu/tab_online.lua src/client/keycode.cpp
+msgid "Clear"
+msgstr "Limpar"
#: builtin/mainmenu/tab_online.lua
msgid "Connect"
@@ -865,34 +935,42 @@ msgstr "Conectar"
msgid "Creative mode"
msgstr "Modo criativo"
+#. ~ PvP = Player versus Player
#: builtin/mainmenu/tab_online.lua
-msgid "Damage enabled"
-msgstr "Dano habilitado"
+msgid "Damage / PvP"
+msgstr "Dano / PvP"
#: builtin/mainmenu/tab_online.lua
msgid "Del. Favorite"
msgstr "Rem. Favorito"
#: builtin/mainmenu/tab_online.lua
-msgid "Favorite"
-msgstr "Favorito"
+msgid "Favorites"
+msgstr "Favoritos"
#: builtin/mainmenu/tab_online.lua
-msgid "Join Game"
-msgstr "Entrar em um Jogo"
+msgid "Incompatible Servers"
+msgstr "Servidores incompatíveis"
#: builtin/mainmenu/tab_online.lua
-msgid "Name / Password"
-msgstr "Nome / Senha"
+msgid "Join Game"
+msgstr "Entrar em um Jogo"
#: builtin/mainmenu/tab_online.lua
msgid "Ping"
msgstr "Ping"
-#. ~ PvP = Player versus Player
#: builtin/mainmenu/tab_online.lua
-msgid "PvP enabled"
-msgstr "PvP habilitado"
+msgid "Public Servers"
+msgstr "Servidores Públicos"
+
+#: builtin/mainmenu/tab_online.lua
+msgid "Refresh"
+msgstr "Atualizar"
+
+#: builtin/mainmenu/tab_online.lua
+msgid "Server Description"
+msgstr "Descrição do servidor"
#: builtin/mainmenu/tab_settings.lua
msgid "2x"
@@ -934,11 +1012,31 @@ msgstr "Mudar teclas"
msgid "Connected Glass"
msgstr "Vidro conectado"
+#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
+msgid "Dynamic shadows"
+msgstr "Sombras dinâmicas"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Dynamic shadows: "
+msgstr "Sombras dinâmicas: "
+
#: builtin/mainmenu/tab_settings.lua
msgid "Fancy Leaves"
msgstr "Folhas com transparência"
#: builtin/mainmenu/tab_settings.lua
+msgid "High"
+msgstr "Alto"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Low"
+msgstr "Baixo"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Medium"
+msgstr "Médio"
+
+#: builtin/mainmenu/tab_settings.lua
msgid "Mipmap"
msgstr "Mipmap (filtro)"
@@ -1010,10 +1108,6 @@ msgstr "Iluminação suave"
msgid "Texturing:"
msgstr "Texturização:"
-#: builtin/mainmenu/tab_settings.lua
-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 src/settings_translation_file.cpp
msgid "Tone Mapping"
msgstr "Tone mapping"
@@ -1027,6 +1121,14 @@ msgid "Trilinear Filter"
msgstr "Filtragem tri-linear"
#: builtin/mainmenu/tab_settings.lua
+msgid "Ultra High"
+msgstr "Muito Alto"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Very Low"
+msgstr "Muito Baixo"
+
+#: builtin/mainmenu/tab_settings.lua
msgid "Waving Leaves"
msgstr "Folhas Balançam"
@@ -1038,7 +1140,7 @@ msgstr "Líquidos com ondas"
msgid "Waving Plants"
msgstr "Plantas balançam"
-#: src/client/client.cpp
+#: src/client/client.cpp src/client/game.cpp
msgid "Connection timed out."
msgstr "Erro de conexão (tempo excedido)."
@@ -1067,8 +1169,8 @@ 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 \""
+msgid "Could not find or load game: "
+msgstr "Não foi possível localizar ou carregar jogo "
#: src/client/clientlauncher.cpp
msgid "Invalid gamespec."
@@ -1099,18 +1201,6 @@ msgstr "Arquivo de senha fornecido falhou em abrir : "
msgid "Provided world path doesn't exist: "
msgstr "Caminho informado para o mundo não existe: "
-#. ~ DO NOT TRANSLATE THIS LITERALLY!
-#. This is a special string. Put either "no" or "yes"
-#. into the translation field (literally).
-#. Choose "yes" if the language requires use of the fallback
-#. font, "no" otherwise.
-#. The fallback font is (normally) required for languages with
-#. non-Latin script, like Chinese.
-#. When in doubt, test your translation.
-#: src/client/fontengine.cpp
-msgid "needs_fallback_font"
-msgstr "no"
-
#: src/client/game.cpp
msgid ""
"\n"
@@ -1124,14 +1214,6 @@ msgid "- Address: "
msgstr "- Endereço: "
#: src/client/game.cpp
-msgid "- Creative Mode: "
-msgstr "- Modo Criativo: "
-
-#: src/client/game.cpp
-msgid "- Damage: "
-msgstr "-Dano: "
-
-#: src/client/game.cpp
msgid "- Mode: "
msgstr "- Modo: "
@@ -1153,6 +1235,15 @@ msgid "- Server Name: "
msgstr "Nome do servidor: "
#: src/client/game.cpp
+msgid "A serialization error occurred:"
+msgstr "Ocorreu um erro:"
+
+#: src/client/game.cpp
+#, c-format
+msgid "Access denied. Reason: %s"
+msgstr "Acesso negado. Razão:%s"
+
+#: src/client/game.cpp
msgid "Automatic forward disabled"
msgstr "Avanço automático para frente desabilitado"
@@ -1161,6 +1252,22 @@ msgid "Automatic forward enabled"
msgstr "Avanço automático para frente habilitado"
#: src/client/game.cpp
+msgid "Block bounds hidden"
+msgstr "Limites de bloco ocultos"
+
+#: src/client/game.cpp
+msgid "Block bounds shown for all blocks"
+msgstr "Limites de bloco mostrados para todos os blocos"
+
+#: src/client/game.cpp
+msgid "Block bounds shown for current block"
+msgstr "Limites de bloco mostrados para o bloco atual"
+
+#: src/client/game.cpp
+msgid "Block bounds shown for nearby blocks"
+msgstr "Limites de bloco mostrados para blocos próximos"
+
+#: src/client/game.cpp
msgid "Camera update disabled"
msgstr "Atualização da camera desabilitada"
@@ -1169,6 +1276,10 @@ msgid "Camera update enabled"
msgstr "Atualização da camera habilitada"
#: src/client/game.cpp
+msgid "Can't show block bounds (need 'basic_debug' privilege)"
+msgstr ""
+
+#: src/client/game.cpp
msgid "Change Password"
msgstr "Alterar a senha"
@@ -1181,6 +1292,10 @@ msgid "Cinematic mode enabled"
msgstr "Modo cinemático habilitado"
#: src/client/game.cpp
+msgid "Client disconnected"
+msgstr "Cliente desconectado"
+
+#: src/client/game.cpp
msgid "Client side scripting is disabled"
msgstr "Scripting de cliente está desabilitado"
@@ -1189,6 +1304,10 @@ msgid "Connecting to server..."
msgstr "Conectando ao servidor..."
#: src/client/game.cpp
+msgid "Connection failed for unknown reason"
+msgstr "A conexão falhou por motivo desconhecido"
+
+#: src/client/game.cpp
msgid "Continue"
msgstr "Continuar"
@@ -1226,6 +1345,11 @@ msgstr ""
"- %s: bate-papo\n"
#: src/client/game.cpp
+#, c-format
+msgid "Couldn't resolve address: %s"
+msgstr "Não foi possível resolver o endereço:%s"
+
+#: src/client/game.cpp
msgid "Creating client..."
msgstr "Criando o cliente..."
@@ -1354,6 +1478,10 @@ msgid "Minimap currently disabled by game or mod"
msgstr "Minipapa atualmente desabilitado por jogo ou mod"
#: src/client/game.cpp
+msgid "Multiplayer"
+msgstr "Multi-jogador"
+
+#: src/client/game.cpp
msgid "Noclip mode disabled"
msgstr "Modo atravessar paredes desabilitado"
@@ -1427,6 +1555,21 @@ msgstr "Som desmutado"
#: src/client/game.cpp
#, c-format
+msgid "The server is probably running a different version of %s."
+msgstr "O servidor provavelmente está executando uma versão diferente de%s."
+
+#: src/client/game.cpp
+#, c-format
+msgid "Unable to connect to %s because IPv6 is disabled"
+msgstr "Não foi possível conectar a%s porque o IPv6 está desativado"
+
+#: src/client/game.cpp
+#, c-format
+msgid "Unable to listen on %s because IPv6 is disabled"
+msgstr "Incapaz de escutar em%s porque IPv6 está desabilitado"
+
+#: src/client/game.cpp
+#, c-format
msgid "Viewing range changed to %d"
msgstr "Distancia de visualização alterado pra %d"
@@ -1495,10 +1638,6 @@ msgid "Caps Lock"
msgstr "Caps Lock"
#: src/client/keycode.cpp
-msgid "Clear"
-msgstr "Limpar"
-
-#: src/client/keycode.cpp
msgid "Control"
msgstr "Ctrl"
@@ -1763,6 +1902,14 @@ msgstr "Minimapa em modo de superfície, Zoom %dx"
msgid "Minimap in texture mode"
msgstr "Minimapa em modo de textura"
+#: src/gui/guiChatConsole.cpp
+msgid "Failed to open webpage"
+msgstr "Falha ao abrir página da web"
+
+#: src/gui/guiChatConsole.cpp
+msgid "Opening webpage"
+msgstr "Abrindo página da web"
+
#: src/gui/guiConfirmRegistration.cpp src/gui/guiPasswordChange.cpp
msgid "Passwords do not match!"
msgstr "As senhas não correspondem!"
@@ -1792,7 +1939,7 @@ msgid "Proceed"
msgstr "Continuar"
#: src/gui/guiKeyChangeMenu.cpp
-msgid "\"Special\" = climb down"
+msgid "\"Aux1\" = climb down"
msgstr "\"Especial\" = descer"
#: src/gui/guiKeyChangeMenu.cpp
@@ -1804,10 +1951,18 @@ msgid "Automatic jumping"
msgstr "Pulo automático"
#: src/gui/guiKeyChangeMenu.cpp
+msgid "Aux1"
+msgstr "Especial"
+
+#: src/gui/guiKeyChangeMenu.cpp
msgid "Backward"
msgstr "Voltar"
#: src/gui/guiKeyChangeMenu.cpp
+msgid "Block bounds"
+msgstr "Limites de bloco"
+
+#: src/gui/guiKeyChangeMenu.cpp
msgid "Change camera"
msgstr "Mudar camera"
@@ -1898,10 +2053,6 @@ msgid "Sneak"
msgstr "Esgueirar"
#: src/gui/guiKeyChangeMenu.cpp
-msgid "Special"
-msgstr "Especial"
-
-#: src/gui/guiKeyChangeMenu.cpp
msgid "Toggle HUD"
msgstr "Ativar interface"
@@ -1962,8 +2113,9 @@ msgid "Muted"
msgstr "Mutado"
#: src/gui/guiVolumeChange.cpp
-msgid "Sound Volume: "
-msgstr "Volume do som: "
+#, c-format
+msgid "Sound Volume: %d%%"
+msgstr "Volume do som: %d%%"
#. ~ Imperative, as in "Enter/type in text".
#. Don't forget the space.
@@ -1989,13 +2141,13 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"(Android) Use virtual joystick to trigger \"aux\" button.\n"
-"If enabled, virtual joystick will also tap \"aux\" button when out of main "
+"(Android) Use virtual joystick to trigger \"Aux1\" button.\n"
+"If enabled, virtual joystick will also tap \"Aux1\" button when out of main "
"circle."
msgstr ""
-"(Android) Use joystick virtual para ativar botão \"aux\".\n"
-"Se habilitado, o joystick virtual vai também clicar no botão \"aux\" quando "
-"estiver fora do circulo principal."
+"(Android) Use joystick virtual para ativar botão \"especial\".\n"
+"Se habilitado, o joystick virtual vai também clicar no botão \"especial\" "
+"quando estiver fora do circulo principal."
#: src/settings_translation_file.cpp
msgid ""
@@ -2227,6 +2379,12 @@ msgstr ""
"quem não usa X11/Android) Ex para telas 4K."
#: src/settings_translation_file.cpp
+msgid "Adjust the detected display density, used for scaling UI elements."
+msgstr ""
+"Ajuste a densidade de exibição detectada, usada para dimensionar os "
+"elementos da IU."
+
+#: src/settings_translation_file.cpp
#, c-format
msgid ""
"Adjusts the density of the floatland layer.\n"
@@ -2364,6 +2522,14 @@ msgid "Autoscaling mode"
msgstr "Modo de alto escalamento"
#: src/settings_translation_file.cpp
+msgid "Aux1 key"
+msgstr "Tecla especial"
+
+#: src/settings_translation_file.cpp
+msgid "Aux1 key for climbing/descending"
+msgstr "Tecla Aux1 pra escalar/descer"
+
+#: src/settings_translation_file.cpp
msgid "Backward key"
msgstr "Tecla para andar para trás"
@@ -2408,12 +2574,6 @@ msgid "Biome noise"
msgstr "Ruído do bioma"
#: src/settings_translation_file.cpp
-msgid "Bits per pixel (aka color depth) in fullscreen mode."
-msgstr ""
-"Bits por pixel (Também conhecido como profundidade de cor) no modo de tela "
-"cheia."
-
-#: src/settings_translation_file.cpp
msgid "Block send optimize distance"
msgstr "Distância otimizada de envio de bloco"
@@ -2519,6 +2679,14 @@ msgstr ""
"Onde 0.0 é o nível mínimo de luz, 1.0 é o nível máximo de luz."
#: src/settings_translation_file.cpp
+msgid "Chat command time message threshold"
+msgstr "Limite de mensagem de tempo de comando de bate-papo"
+
+#: src/settings_translation_file.cpp
+msgid "Chat commands"
+msgstr "Comandos de Chat"
+
+#: src/settings_translation_file.cpp
msgid "Chat font size"
msgstr "Tamanho da fonte do chat"
@@ -2551,8 +2719,8 @@ msgid "Chat toggle key"
msgstr "Tecla comutadora de chat"
#: src/settings_translation_file.cpp
-msgid "Chatcommands"
-msgstr "Comandos de Chat"
+msgid "Chat weblinks"
+msgstr "Links de bate-papo"
#: src/settings_translation_file.cpp
msgid "Chunk size"
@@ -2571,6 +2739,14 @@ msgid "Clean transparent textures"
msgstr "Limpe as texturas transparentes"
#: src/settings_translation_file.cpp
+msgid ""
+"Clickable weblinks (middle-click or Ctrl+left-click) enabled in chat console "
+"output."
+msgstr ""
+"Links da web clicáveis (clique do meio ou Ctrl + botão esquerdo) ativados na "
+"saída do console de bate-papo."
+
+#: src/settings_translation_file.cpp
msgid "Client"
msgstr "Cliente"
@@ -2615,6 +2791,10 @@ msgid "Colored fog"
msgstr "Névoa colorida"
#: src/settings_translation_file.cpp
+msgid "Colored shadows"
+msgstr "Sombra colorida"
+
+#: src/settings_translation_file.cpp
msgid ""
"Comma-separated list of flags to hide in the content repository.\n"
"\"nonfree\" can be used to hide packages which do not qualify as 'free "
@@ -2627,10 +2807,11 @@ msgstr ""
"Lista de flags separadas por vírgula para esconder no repositório de "
"conteúdos.\n"
"\"não livre\" pode ser usada para esconder pacotes que não se qualificam "
-"como software livre, como definido pela fundação do software livre.\n"
+"como software livre,\n"
+"como definido pela fundação do software livre.\n"
"Você também pode especificar classificação de conteúdo.\n"
-"Essas flags são independentes das versões do minetest, veja a lista completa "
-"em https://content.minetest.net/help/content_flags/"
+"Essas flags são independentes das versões do minetest,\n"
+"veja a lista completa em https://content.minetest.net/help/content_flags/"
#: src/settings_translation_file.cpp
msgid ""
@@ -2655,6 +2836,34 @@ msgid "Command key"
msgstr "Tecla de Comando"
#: src/settings_translation_file.cpp
+msgid ""
+"Compression level to use when saving mapblocks to disk.\n"
+"-1 - use default compression level\n"
+"0 - least compression, fastest\n"
+"9 - best compression, slowest"
+msgstr ""
+"Nível de compressão ZLib a ser usada ao salvar mapblocks no disco.\n"
+"-1 - Nível de compressão padrão do Zlib\n"
+"0 - Nenhuma compressão; o mais rápido\n"
+"9 - Melhor compressão; o mais devagar\n"
+"(níveis 1-3 usam método \"rápido\" do Zlib, enquanto que 4-9 usam método "
+"normal)"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Compression level to use when sending mapblocks to the client.\n"
+"-1 - use default compression level\n"
+"0 - least compression, fastest\n"
+"9 - best compression, slowest"
+msgstr ""
+"Nível de compressão ZLib a ser usada ao mandar mapblocks para o cliente.\n"
+"-1 - Nível de compressão padrão do Zlib\n"
+"0 - Nenhuma compressão; o mais rápido\n"
+"9 - Melhor compressão; o mais devagar\n"
+"(níveis 1-3 usam método \"rápido\" do Zlib, enquanto que 4-9 usam método "
+"normal)"
+
+#: src/settings_translation_file.cpp
msgid "Connect glass"
msgstr "Vidro conectado"
@@ -2754,10 +2963,10 @@ msgstr "Alpha do cursor"
#: src/settings_translation_file.cpp
msgid ""
"Crosshair alpha (opaqueness, between 0 and 255).\n"
-"Also controls the object crosshair color"
+"This also applies to the object crosshair."
msgstr ""
-"Alpha do cursor (o quanto ele é opaco, níveis entre 0 e 255).\n"
-"Também controla a cor da cruz do objeto"
+"Alpha do cursor (quanto ele é opaco, níveis entre 0 e 255).\n"
+"Também controla a cor da cruz do objeto."
#: src/settings_translation_file.cpp
msgid "Crosshair color"
@@ -2837,11 +3046,13 @@ msgstr "Tamanho padrão de stack"
#: src/settings_translation_file.cpp
msgid ""
-"Default timeout for cURL, stated in milliseconds.\n"
-"Only has an effect if compiled with cURL."
+"Define shadow filtering quality.\n"
+"This simulates the soft shadows effect by applying a PCF or Poisson disk\n"
+"but also uses more resources."
msgstr ""
-"Tempo limite padrão para cURL, indicado em milissegundos.\n"
-"Só tem efeito se compilado com cURL."
+"Define a qualidade de filtragem de sombreamento\n"
+"Isso simula um efeito de sombras suaves aplicando um PCF ou um Poisson disk\n"
+"mas também usa mais recursos."
#: src/settings_translation_file.cpp
msgid "Defines areas where trees have apples."
@@ -2905,9 +3116,9 @@ msgid ""
"Delay between mesh updates on the client in ms. Increasing this will slow\n"
"down the rate of mesh updates, thus reducing jitter on slower clients."
msgstr ""
-"Tempo entre atualizações das malhas 3D no cliente em milissegundos. Aumentar "
-"isso vai retardar a taxa de atualização das malhas, sendo assim, reduzindo "
-"travamentos em clientes lentos."
+"Tempo entre atualizações das malhas 3D no cliente em milissegundos.\n"
+"Aumentar isso vai retardar a taxa de atualização das malhas, sendo assim, "
+"reduzindo travamentos em clientes lentos."
#: src/settings_translation_file.cpp
msgid "Delay in sending blocks after building"
@@ -2970,6 +3181,10 @@ msgid "Disallow empty passwords"
msgstr "Não permitir logar sem senha"
#: src/settings_translation_file.cpp
+msgid "Display Density Scaling Factor"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Domain name of server, to be displayed in the serverlist."
msgstr "Domínio do servidor, para ser mostrado na lista de servidores."
@@ -3018,13 +3233,31 @@ msgstr ""
"Esse suporte é experimental e a API pode mudar."
#: src/settings_translation_file.cpp
+msgid ""
+"Enable Poisson disk filtering.\n"
+"On true uses Poisson disk to make \"soft shadows\". Otherwise uses PCF "
+"filtering."
+msgstr ""
+"Ativa filtragem de Poisson disk.\n"
+"Quando em true usa o Poisson disk para fazer \"sombras suaves\". Caso "
+"contrário, usa filtragem PCF."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable colored shadows.\n"
+"On true translucent nodes cast colored shadows. This is expensive."
+msgstr ""
+"Ativa sombras coloridas.\n"
+"Quando em true, nodes translúcidos podem projetar sombras coloridas. Requer "
+"o uso de muitos recursos."
+
+#: src/settings_translation_file.cpp
msgid "Enable console window"
msgstr "Habilitar janela de console"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Enable creative mode for all players"
-msgstr "Habilitar modo criativo para mundos novos."
+msgstr "Habilitar modo criativo para todos os jogadores."
#: src/settings_translation_file.cpp
msgid "Enable joysticks"
@@ -3077,8 +3310,8 @@ msgstr ""
"Habilitar recurso de não permitir que jogadores usando versões antigas do "
"cliente possam se conectar.\n"
"Essas versões são compatíveis no sentido de não travar quando conectam a "
-"servidores com versões mais atuais, porém eles podem não suportar todos os "
-"recursos que você está esperando."
+"servidores com versões mais atuais,\n"
+"porém eles podem não suportar todos os recursos que você está esperando."
#: src/settings_translation_file.cpp
msgid ""
@@ -3157,6 +3390,12 @@ msgstr ""
"Mudar esta configuração requer uma reinicialização."
#: src/settings_translation_file.cpp
+msgid ""
+"Enables tradeoffs that reduce CPU load or increase rendering performance\n"
+"at the expense of minor visual glitches that do not impact game playability."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Engine profiling data print interval"
msgstr "Intervalo de exibição dos dados das analizes do motor"
@@ -3203,18 +3442,6 @@ msgid "Fallback font path"
msgstr "Fonte reserva"
#: src/settings_translation_file.cpp
-msgid "Fallback font shadow"
-msgstr "Sombra da fonte alternativa"
-
-#: src/settings_translation_file.cpp
-msgid "Fallback font shadow alpha"
-msgstr "Alpha da sombra da fonte alternativa"
-
-#: src/settings_translation_file.cpp
-msgid "Fallback font size"
-msgstr "Tamanho da fonte alternativa"
-
-#: src/settings_translation_file.cpp
msgid "Fast key"
msgstr "Tecla de correr"
@@ -3232,10 +3459,10 @@ msgstr "Modo rápido"
#: src/settings_translation_file.cpp
msgid ""
-"Fast movement (via the \"special\" key).\n"
+"Fast movement (via the \"Aux1\" key).\n"
"This requires the \"fast\" privilege on the server."
msgstr ""
-"Movimento rápido (através da tecla \"especial\").\n"
+"Movimento rápido (através da tecla \"Aux1\").\n"
"Isso requer o privilegio \"fast\" no servidor."
#: src/settings_translation_file.cpp
@@ -3253,7 +3480,8 @@ msgid ""
"Multiplayer Tab."
msgstr ""
"Arquivo na pasta client/serverlist/ que contém seus servidores favoritos, "
-"que são mostrados na aba Multijogador."
+"que são mostrados na\n"
+"aba Multijogador."
#: src/settings_translation_file.cpp
msgid "Filler depth"
@@ -3270,14 +3498,15 @@ msgstr "Filmic Tone Mapping"
#: 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."
+"which PNG optimizers usually discard, often resulting in dark or\n"
+"light edges to transparent textures. Apply a filter to clean that up\n"
+"at texture load time. This is automatically enabled if mipmapping is enabled."
msgstr ""
"Texturas filtradas podem misturar valores RGB com os vizinhos totalmente \n"
"transparentes, o qual otimizadores PNG geralmente descartam, por vezes \n"
"resultando em uma linha escura em texturas transparentes.\n"
-"Aplicar esse filtro para limpar isso no tempo de carregamento da textura."
+"Aplique esse filtro para limpar isso no momento de carregamento da textura.\n"
+"Esse filtro será ativo automaticamente ao ativar \"mipmapping\"."
#: src/settings_translation_file.cpp
msgid "Filtering"
@@ -3369,15 +3598,17 @@ msgid "Font size"
msgstr "Tamanho da fonte"
#: src/settings_translation_file.cpp
-msgid "Font size of the default font in point (pt)."
-msgstr "Tamanho da fonte padrão em pontos (pt)."
+msgid "Font size divisible by"
+msgstr ""
#: src/settings_translation_file.cpp
-msgid "Font size of the fallback font in point (pt)."
-msgstr "Tamanho da fonte reserva em pontos (pt)."
+#, fuzzy
+msgid "Font size of the default font where 1 unit = 1 pixel at 96 DPI"
+msgstr "Tamanho da fonte padrão em pontos (pt)."
#: src/settings_translation_file.cpp
-msgid "Font size of the monospace font in point (pt)."
+#, fuzzy
+msgid "Font size of the monospace font where 1 unit = 1 pixel at 96 DPI"
msgstr "Tamanho da fonte de largura fixa em pontos (pt)."
#: src/settings_translation_file.cpp
@@ -3391,6 +3622,17 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"For pixel-style fonts that do not scale well, this ensures that font sizes "
+"used\n"
+"with this font will always be divisible by this value, in pixels. For "
+"instance,\n"
+"a pixel font 16 pixels tall should have this set to 16, so it will only ever "
+"be\n"
+"sized 16, 32, 48, etc., so a mod requesting a size of 25 will get 32."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Format of player chat messages. The following strings are valid "
"placeholders:\n"
"@name, @message, @timestamp (optional)"
@@ -3453,10 +3695,6 @@ msgid "Fraction of the visible distance at which fog starts to be rendered"
msgstr "Fração da distância visível em que a névoa começa a aparecer"
#: src/settings_translation_file.cpp
-msgid "FreeType fonts"
-msgstr "Fontes Freetype"
-
-#: src/settings_translation_file.cpp
msgid ""
"From how far blocks are generated for clients, stated in mapblocks (16 "
"nodes)."
@@ -3481,7 +3719,8 @@ msgid ""
msgstr ""
"De quão longe clientes sabem sobre objetos declarados em mapblocks (16 "
"nós).\n"
-" Configurando isto maior do que o alcançe de bloco ativo vai fazer com que o "
+"\n"
+"Configurando isto maior do que o alcançe de bloco ativo vai fazer com que o "
"sevidor mantenha objetos ativos na distancia que o jogador está olhando."
"(Isso pode evitar que mobs desapareçam da visão de repente)"
@@ -3490,10 +3729,6 @@ msgid "Full screen"
msgstr "Tela cheia"
#: src/settings_translation_file.cpp
-msgid "Full screen BPP"
-msgstr "Tela cheia BPP"
-
-#: src/settings_translation_file.cpp
msgid "Fullscreen mode."
msgstr "Modo tela cheia."
@@ -3517,10 +3752,10 @@ msgstr "Chamadas de retorno Globais"
msgid ""
"Global map generation attributes.\n"
"In Mapgen v6 the 'decorations' flag controls all decorations except trees\n"
-"and junglegrass, in all other mapgens this flag controls all decorations."
+"and jungle grass, in all other mapgens this flag controls all decorations."
msgstr ""
"Atributos de geração de mapa globais.\n"
-"No gerador de mapa v6 a flag 'decorations' controla todas as decorações "
+"No gerador de mapa v6 a flag 'decorations' controla todas as decorações, "
"exceto árvores\n"
"e gramas da selva, em todos os outros geradores de mapa essa flag controla "
"todas as decorações."
@@ -3605,8 +3840,11 @@ msgid "Heat noise"
msgstr "Ruído nas cavernas #1"
#: src/settings_translation_file.cpp
-msgid "Height component of the initial window size."
-msgstr "Altura da janela inicial."
+msgid ""
+"Height component of the initial window size. Ignored in fullscreen mode."
+msgstr ""
+"Componente de altura do tamanho da janela inicial. Ignorado em modo de tela "
+"cheia."
#: src/settings_translation_file.cpp
msgid "Height noise"
@@ -3617,10 +3855,6 @@ msgid "Height select noise"
msgstr "Parâmetros de ruido de seleção de altura"
#: src/settings_translation_file.cpp
-msgid "High-precision FPU"
-msgstr "FPU de alta precisão"
-
-#: src/settings_translation_file.cpp
msgid "Hill steepness"
msgstr "Inclinação dos morros"
@@ -3864,12 +4098,12 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"If disabled, \"special\" key is used to fly fast if both fly and fast mode "
-"are\n"
+"If disabled, \"Aux1\" key is used to fly fast if both fly and fast mode are\n"
"enabled."
msgstr ""
-"Se estiver desabilitado, a tecla \"especial será usada para voar rápido se "
-"modo voo e rápido estiverem habilitados."
+"Se estiver desabilitado, a tecla \"especial\" será usada para voar rápido se "
+"modo voo e rápido estiverem\n"
+"habilitados."
#: src/settings_translation_file.cpp
msgid ""
@@ -3880,9 +4114,10 @@ msgid ""
"so that the utility of noclip mode is reduced."
msgstr ""
"Se habilitado, o servidor executará a seleção de oclusão de bloco de mapa "
-"com base na posição do olho do jogador. Isso pode reduzir o número de blocos "
-"enviados ao cliente de 50 a 80%. O cliente não será mais mais invisível, de "
-"modo que a utilidade do modo \"noclip\" (modo intangível) será reduzida."
+"com base\n"
+"na posição do olho do jogador. Isso pode reduzir o número de blocos\n"
+"enviados ao cliente de 50 a 80%. O cliente não receberá mais invisível\n"
+"para que a utilidade do modo noclip é reduzida."
#: src/settings_translation_file.cpp
msgid ""
@@ -3896,12 +4131,12 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"If enabled, \"special\" key instead of \"sneak\" key is used for climbing "
-"down and\n"
+"If enabled, \"Aux1\" key instead of \"Sneak\" key is used for climbing down "
+"and\n"
"descending."
msgstr ""
-"Se habilitado, a tecla \"especial\" em vez de \"esgueirar\" servirá para "
-"usada descer."
+"Se habilitado, a tecla \"especial\" em vez de \"esgueirar\" servirá para\n"
+"descer."
#: src/settings_translation_file.cpp
msgid ""
@@ -3952,7 +4187,17 @@ msgid ""
"to this distance from the player to the node."
msgstr ""
"Se a restrição de CSM para alcançe de nós está habilitado, chamadas get_node "
-"são limitadas a está distancia do player até o nó."
+"são limitadas\n"
+"a esta distancia do player até o node."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"If the execution of a chat command takes longer than this specified time in\n"
+"seconds, add the time information to the chat command message"
+msgstr ""
+"Se a execução de um comando de chat demorar mais do que o tempo especificado "
+"em\n"
+"segundos, adicione a informação do tempo na mensagem-comando"
#: src/settings_translation_file.cpp
msgid ""
@@ -4015,7 +4260,8 @@ msgstr ""
"Isto é necessário apenas por contribuidores core/builtin"
#: src/settings_translation_file.cpp
-msgid "Instrument chatcommands on registration."
+#, fuzzy
+msgid "Instrument chat commands on registration."
msgstr "Monitoração de comandos de chat quando registrados."
#: src/settings_translation_file.cpp
@@ -4096,8 +4342,8 @@ msgid ""
"At iterations = 20 this mapgen has a similar load to mapgen V7."
msgstr ""
"Iterações da função recursiva.\n"
-"Aumentando isso aumenta a quantidade de detalhes, mas também aumenta o tempo "
-"de processamento.\n"
+"Aumentando isso aumenta a quantidade de detalhes, mas também\n"
+"aumenta o tempo de processamento.\n"
"Com iterações = 20, esse gerador de mapa tem um tempo de carregamento "
"similar ao gerador V7."
@@ -4110,7 +4356,7 @@ msgid "Joystick button repetition interval"
msgstr "Intervalo de repetição do botão do Joystick"
#: src/settings_translation_file.cpp
-msgid "Joystick deadzone"
+msgid "Joystick dead zone"
msgstr "\"Zona morta\" do joystick"
#: src/settings_translation_file.cpp
@@ -4130,7 +4376,8 @@ msgid ""
"Range roughly -2 to 2."
msgstr ""
"Apenas para a configuração de Julia.\n"
-"Componente W da constante hipercomplexa determinando o formato do fractal.\n"
+"Componente W da constante hipercomplexa.\n"
+"Altera o formato do fractal.\n"
"Não tem nenhum efeito em fractais 3D.\n"
"varia aproximadamente entre -2 e 2."
@@ -4155,6 +4402,7 @@ msgid ""
msgstr ""
"Apenas para configuração de Julia.\n"
"Componente Y da constante hipercomplexa.\n"
+"Altera o formato do fractal.\n"
"Varia aproximadamente entre -2 e 2."
#: src/settings_translation_file.cpp
@@ -4974,7 +5222,8 @@ msgid ""
"network."
msgstr ""
"Comprimento do tick do servidor e o intervalo no qual os objetos são "
-"geralmente atualizados em rede."
+"geralmente atualizados em\n"
+"rede."
#: src/settings_translation_file.cpp
msgid ""
@@ -5046,9 +5295,9 @@ msgid ""
"Only mapchunks completely within the mapgen limit are generated.\n"
"Value is stored per-world."
msgstr ""
-"Limite de geração de mapas, em nós, em todas as 6 direções de (0, 0, 0). "
-"Apenas áreas completas de mapa dentro do limite do mapgen são gerados. O "
-"valor é armazenado por mundo."
+"Limite de geração de mapas, em nós, em todas as 6 direções de (0, 0, 0).\n"
+"Apenas áreas completas de mapa dentro do limite do mapgen são gerados.\n"
+"O valor é armazenado por mundo."
#: src/settings_translation_file.cpp
msgid ""
@@ -5131,10 +5380,6 @@ msgstr ""
"a direção."
#: src/settings_translation_file.cpp
-msgid "Makes DirectX work with LuaJIT. Disable if it causes troubles."
-msgstr "Faz o DirectX trabalhar com LuaJIT. Desative se causa problemas."
-
-#: src/settings_translation_file.cpp
msgid "Makes all liquids opaque"
msgstr "Torna todos os líquidos opacos"
@@ -5185,7 +5430,8 @@ msgstr ""
"'altitude_chill':Reduz o calor com a altitude.\n"
"'humid_rivers':Aumenta a umidade em volta dos rios.\n"
"'profundidade_variada_rios': Se habilitado, baixa umidade e alto calor faz "
-"com que rios se tornem mais rasos e eventualmente sumam.\n"
+"com que rios\n"
+"se tornem mais rasos e eventualmente sumam.\n"
"'altitude_dry': Reduz a umidade com a altitude."
#: src/settings_translation_file.cpp
@@ -5226,6 +5472,11 @@ msgid "Map save interval"
msgstr "Intervalo de salvamento de mapa"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Map shadows update frames"
+msgstr "Tempo de atualização do mapa"
+
+#: src/settings_translation_file.cpp
msgid "Mapblock limit"
msgstr "Limite de mapblock"
@@ -5337,6 +5588,10 @@ msgstr ""
"FPS máximo quando a janela não está com foco, ou quando o jogo é pausado."
#: src/settings_translation_file.cpp
+msgid "Maximum distance to render shadows."
+msgstr "Distância máxima para renderizar sombras"
+
+#: src/settings_translation_file.cpp
msgid "Maximum forceloaded blocks"
msgstr "Máximo de blocos carregados forçadamente"
@@ -5422,9 +5677,9 @@ msgid ""
"client number."
msgstr ""
"Número máximo de pacotes enviados por etapa de envio, se você tem uma "
-"conexão lenta \n"
-"tente reduzir isso, mas não reduza a um número abaixo do dobro do número de "
-"cliente alvo."
+"conexão lenta\n"
+"tente reduzir isso, mas não reduza a um número abaixo do dobro do\n"
+"número de cliente alvo."
#: src/settings_translation_file.cpp
msgid "Maximum number of players that can be connected simultaneously."
@@ -5467,10 +5722,19 @@ msgstr ""
"0 para desabilitar a fila e -1 para a tornar ilimitada."
#: src/settings_translation_file.cpp
-msgid "Maximum time in ms a file download (e.g. a mod download) may take."
+msgid ""
+"Maximum time a file download (e.g. a mod download) may take, stated in "
+"milliseconds."
+msgstr ""
+"Tempo máximo em ms para download de arquivo (por exemplo, um mod) pode tomar."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum time an interactive request (e.g. server list fetch) may take, "
+"stated in milliseconds."
msgstr ""
-"Tempo máximo em ms para download de arquivo (por exemplo, um arquivo ZIP de "
-"um modificador) pode tomar."
+"Tempo máximo que um pedido interativo (ex: busca de lista de servidores) "
+"pode levar, em milissegundos."
#: src/settings_translation_file.cpp
msgid "Maximum users"
@@ -5533,7 +5797,7 @@ msgid "Mod channels"
msgstr "Canais de mod"
#: src/settings_translation_file.cpp
-msgid "Modifies the size of the hudbar elements."
+msgid "Modifies the size of the HUD elements."
msgstr "Modifica o tamanho dos elementos do hudbar."
#: src/settings_translation_file.cpp
@@ -5545,6 +5809,11 @@ msgid "Monospace font size"
msgstr "Tamanho da fonte monoespaçada"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Monospace font size divisible by"
+msgstr "Tamanho da fonte monoespaçada"
+
+#: src/settings_translation_file.cpp
msgid "Mountain height noise"
msgstr "Parâmetros ruido da altura de montagem do gerador de mundo v7"
@@ -5693,13 +5962,13 @@ 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"
+"This is a trade-off between SQLite transaction overhead and\n"
"memory consumption (4096=100MB, as a rule of thumb)."
msgstr ""
"Número de blocos extras que pode ser carregados por /clearobjects ao mesmo "
"tempo.\n"
-"Esta é uma troca entre sobrecarga de transação do sqlite e consumo de "
-"memória (4096 = 100 MB, como uma regra de ouro)."
+"Esta é uma troca entre sobrecarga de transação do sqlite e\n"
+"consumo de memória (4096 = 100 MB, como uma regra de ouro)."
#: src/settings_translation_file.cpp
msgid "Online Content Repository"
@@ -5716,23 +5985,22 @@ msgstr "Opacidade (alpha) das sombras atrás da fonte padrão, entre 0 e 255."
#: src/settings_translation_file.cpp
msgid ""
-"Opaqueness (alpha) of the shadow behind the fallback font, between 0 and 255."
-msgstr "Opacidade (alpha) da sombra atrás da fonte alternativa, entre 0 e 255."
-
-#: src/settings_translation_file.cpp
-msgid ""
"Open the pause menu when the window's focus is lost. Does not pause if a "
"formspec is\n"
"open."
msgstr ""
"Abre o menu de pausa quando o foco da janela é perdido.Não pausa se um "
-"formspec está aberto."
+"formspec está\n"
+"aberto."
#: src/settings_translation_file.cpp
+msgid "Optional override for chat weblink color."
+msgstr "Substituição opcional da cor do link do bate-papo."
+
+#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
-"Path of the fallback font.\n"
-"If “freetype†setting is enabled: Must be a TrueType font.\n"
-"If “freetype†setting is disabled: Must be a bitmap or XML vectors font.\n"
+"Path of the fallback font. Must be a TrueType font.\n"
"This font will be used for certain languages or if the default font is "
"unavailable."
msgstr ""
@@ -5766,10 +6034,9 @@ msgstr ""
"primeiro daqui."
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
-"Path to the default font.\n"
-"If “freetype†setting is enabled: Must be a TrueType font.\n"
-"If “freetype†setting is disabled: Must be a bitmap or XML vectors font.\n"
+"Path to the default font. Must be a TrueType font.\n"
"The fallback font will be used if the font cannot be loaded."
msgstr ""
"Caminho para a fonte padrão.\n"
@@ -5779,10 +6046,9 @@ msgstr ""
"A fonte alternativa será usada se não for possível carregar essa."
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
-"Path to the monospace font.\n"
-"If “freetype†setting is enabled: Must be a TrueType font.\n"
-"If “freetype†setting is disabled: Must be a bitmap or XML vectors font.\n"
+"Path to the monospace font. Must be a TrueType font.\n"
"This font is used for e.g. the console and profiler screen."
msgstr ""
"Caminho para a fonte monoespaçada.\n"
@@ -5845,6 +6111,10 @@ msgid "Player versus player"
msgstr "Jogador contra jogador"
#: src/settings_translation_file.cpp
+msgid "Poisson filtering"
+msgstr "Filtragem de Poisson"
+
+#: src/settings_translation_file.cpp
msgid ""
"Port to connect to (UDP).\n"
"Note that the port field in the main menu overrides this setting."
@@ -5871,8 +6141,8 @@ msgid ""
"Print the engine's profiling data in regular intervals (in seconds).\n"
"0 = disable. Useful for developers."
msgstr ""
-"Intervalo de impressão de dados do analisador (em segundos). 0 = "
-"desabilitado. Útil para desenvolvedores."
+"Intervalo de impressão de dados do analisador (em segundos).\n"
+"0 = desabilitado. Útil para desenvolvedores."
#: src/settings_translation_file.cpp
msgid "Privileges that players with basic_privs can grant"
@@ -5897,9 +6167,9 @@ msgstr "Endereço do Prometheus"
#: src/settings_translation_file.cpp
msgid ""
"Prometheus listener address.\n"
-"If minetest is compiled with ENABLE_PROMETHEUS option enabled,\n"
+"If Minetest is compiled with ENABLE_PROMETHEUS option enabled,\n"
"enable metrics listener for Prometheus on that address.\n"
-"Metrics can be fetch on http://127.0.0.1:30000/metrics"
+"Metrics can be fetched on http://127.0.0.1:30000/metrics"
msgstr ""
"Endereço do Prometheus\n"
"Se o minetest for compilado com a opção ENABLE_PROMETHEUS ativa,\n"
@@ -5979,7 +6249,8 @@ msgid ""
msgstr ""
"Restringe o acesso de certas funções a nível de cliente em servidores.\n"
"Combine os byflags abaixo par restringir recursos de nível de cliente, ou "
-"coloque 0 para nenhuma restrição:\n"
+"coloque 0\n"
+"para nenhuma restrição:\n"
"LOAD_CLIENT_MODS: 1 (desabilita o carregamento de mods de cliente)\n"
"CHAT_MESSAGES: 2 (desabilita a chamada send_chat_message no lado do "
"cliente)\n"
@@ -6241,6 +6512,44 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Set the shadow strength.\n"
+"Lower value means lighter shadows, higher value means darker shadows."
+msgstr ""
+"Defina a força da sombra.\n"
+"Valores mais baixo significam sombras mais brandas, valores mais altos "
+"significam sombras mais fortes."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set the soft shadow radius size.\n"
+"Lower values mean sharper shadows, bigger values mean softer shadows.\n"
+"Minimum value: 1.0; maximum value: 10.0"
+msgstr ""
+"Defina o tamanho do raio de sombras suaves.\n"
+"Valores mais baixos significam sombras mais nítidas e valores altos sombras "
+"suaves.\n"
+"Valor mínimo 1.0 e valor máximo 10.0"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set the tilt of Sun/Moon orbit in degrees.\n"
+"Value of 0 means no tilt / vertical orbit.\n"
+"Minimum value: 0.0; maximum value: 60.0"
+msgstr ""
+"Defina a inclinação da órbita do Sol/Lua em graus\n"
+"Valor 0 significa sem inclinação/ órbita vertical.\n"
+"Valor mínimo de 0.0 e máximo de 60.0"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set to true to enable Shadow Mapping.\n"
+"Requires shaders to be enabled."
+msgstr ""
+"Defina para true para ativar o Mapeamento de Sombras.\n"
+"Requer sombreadores para ser ativado."
+
+#: src/settings_translation_file.cpp
+msgid ""
"Set to true to enable waving leaves.\n"
"Requires shaders to be enabled."
msgstr ""
@@ -6264,6 +6573,16 @@ msgstr ""
"Requer que os sombreadores estejam ativados."
#: src/settings_translation_file.cpp
+msgid ""
+"Sets shadow texture quality to 32 bits.\n"
+"On false, 16 bits texture will be used.\n"
+"This can cause much more artifacts in the shadow."
+msgstr ""
+"Define a qualidade da textura das sombras para 32 bits.\n"
+"Quando false, a textura de 16 bits será usada\n"
+"Isso pode fazer com que muito mais coisas aparecam nas sombras."
+
+#: src/settings_translation_file.cpp
msgid "Shader path"
msgstr "Sombreadores"
@@ -6275,10 +6594,27 @@ msgid ""
"This only works with the OpenGL video backend."
msgstr ""
"Sombreadores permitem efeitos visuais avançados e podem aumentar a "
-"performance em algumas placas de vídeo.\n"
+"performance em algumas\n"
+"placas de vídeo.\n"
"Só funcionam com o modo de vídeo OpenGL."
#: src/settings_translation_file.cpp
+msgid "Shadow filter quality"
+msgstr "Qualidade do filtro de sombras"
+
+#: src/settings_translation_file.cpp
+msgid "Shadow map max distance in nodes to render shadows"
+msgstr "Distância do mapa de sombras em nodes para renderizar sombras"
+
+#: src/settings_translation_file.cpp
+msgid "Shadow map texture in 32 bits"
+msgstr "Textura do mapa de sombras em 32 bits"
+
+#: src/settings_translation_file.cpp
+msgid "Shadow map texture size"
+msgstr "Tamanho da textura do mapa de sombras"
+
+#: src/settings_translation_file.cpp
msgid ""
"Shadow offset (in pixels) of the default font. If 0, then shadow will not be "
"drawn."
@@ -6287,12 +6623,8 @@ msgstr ""
"será desenhada."
#: src/settings_translation_file.cpp
-msgid ""
-"Shadow offset (in pixels) of the fallback font. If 0, then shadow will not "
-"be drawn."
-msgstr ""
-"Distância (em pixels) da sombra da fonte de backup. Se 0, então nenhuma "
-"sombra será desenhada."
+msgid "Shadow strength"
+msgstr "Força da sombra"
#: src/settings_translation_file.cpp
msgid "Shape of the minimap. Enabled = round, disabled = square."
@@ -6315,9 +6647,8 @@ msgstr ""
"É necessário reiniciar após alterar isso."
#: src/settings_translation_file.cpp
-#, fuzzy
-msgid "Show nametag backgrounds by default"
-msgstr "Fonte em negrito por padrão"
+msgid "Show name tag backgrounds by default"
+msgstr "Mostrar plano de fundo da nametag por padrão"
#: src/settings_translation_file.cpp
msgid "Shutdown message"
@@ -6349,6 +6680,10 @@ msgstr ""
"encadeamento principal, reduzindo assim o jitter."
#: src/settings_translation_file.cpp
+msgid "Sky Body Orbit Tilt"
+msgstr "Inclinação Da Órbita Do Céu"
+
+#: src/settings_translation_file.cpp
msgid "Slice w"
msgstr "Fatia w"
@@ -6408,16 +6743,12 @@ msgid "Sneaking speed, in nodes per second."
msgstr "Velocidade ao esgueirar-se, em nós (blocos) por segundo."
#: src/settings_translation_file.cpp
-msgid "Sound"
-msgstr "Som"
+msgid "Soft shadow radius"
+msgstr "Raio das sombras suaves"
#: src/settings_translation_file.cpp
-msgid "Special key"
-msgstr "Tecla especial"
-
-#: src/settings_translation_file.cpp
-msgid "Special key for climbing/descending"
-msgstr "Tecla especial pra escalar/descer"
+msgid "Sound"
+msgstr "Som"
#: src/settings_translation_file.cpp
msgid ""
@@ -6444,6 +6775,14 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Spread a complete update of shadow map over given amount of frames.\n"
+"Higher values might make shadows laggy, lower values\n"
+"will consume more resources.\n"
+"Minimum value: 1; maximum value: 16"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Spread of light curve boost range.\n"
"Controls the width of the range to be boosted.\n"
"Standard deviation of the light curve boost Gaussian."
@@ -6577,6 +6916,16 @@ msgstr "Diretorio da textura"
#: src/settings_translation_file.cpp
msgid ""
+"Texture size to render the shadow map on.\n"
+"This must be a power of two.\n"
+"Bigger numbers create better shadows but it is also more expensive."
+msgstr ""
+"Tamanho da textura em que o mapa de sombras será renderizado em.\n"
+"Deve ser um múltiplo de dois.\n"
+"Números maiores criam sombras melhores mas também esvazia a conta do banco."
+
+#: src/settings_translation_file.cpp
+msgid ""
"Textures on a node may be aligned either to the node or to the world.\n"
"The former mode suits better things like machines, furniture, etc., while\n"
"the latter makes stairs and microblocks fit surroundings better.\n"
@@ -6597,7 +6946,7 @@ msgid "The URL for the content repository"
msgstr "A url para o repositório de conteúdo"
#: src/settings_translation_file.cpp
-msgid "The deadzone of the joystick"
+msgid "The dead zone of the joystick"
msgstr "A zona morta do joystick"
#: src/settings_translation_file.cpp
@@ -6674,14 +7023,14 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"The rendering back-end for Irrlicht.\n"
+"The rendering back-end.\n"
"A restart is required after changing this.\n"
"Note: On Android, stick with OGLES1 if unsure! App may fail to start "
"otherwise.\n"
"On other platforms, OpenGL is recommended.\n"
"Shaders are supported by OpenGL (desktop only) and OGLES2 (experimental)"
msgstr ""
-"O back-end de renderização para Irrlicht.\n"
+"O back-end de renderização.\n"
"É necessário reiniciar após alterar isso.\n"
"Nota: No Android, use OGLES1 se não tiver certeza! O aplicativo pode falhar "
"ao iniciar de outra forma.\n"
@@ -6689,9 +7038,10 @@ msgstr ""
"Shaders são suportados por OpenGL (somente desktop) e OGLES2 (experimental)"
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
"The sensitivity of the joystick axes for moving the\n"
-"ingame view frustum around."
+"in-game view frustum around."
msgstr ""
"A sensibilidade dos eixos do joystick para movimentar o frustum de exibição "
"no jogo."
@@ -6815,6 +7165,10 @@ msgid "Touch screen threshold"
msgstr "Limiar a tela de toque"
#: src/settings_translation_file.cpp
+msgid "Tradeoffs for performance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Trees noise"
msgstr "Ruido de árvores"
@@ -6892,8 +7246,9 @@ msgid "Use bilinear filtering when scaling textures."
msgstr "Usar filtragem bilinear ao dimensionamento de texturas."
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
-"Use mip mapping to scale textures. May slightly increase performance,\n"
+"Use mipmapping to scale textures. May slightly increase performance,\n"
"especially when using a high resolution texture pack.\n"
"Gamma correct downscaling is not supported."
msgstr ""
@@ -7027,8 +7382,8 @@ msgid "Viewing range"
msgstr "Intervalo de visualização"
#: src/settings_translation_file.cpp
-msgid "Virtual joystick triggers aux button"
-msgstr "Joystick virtual ativa botão auxiliar"
+msgid "Virtual joystick triggers Aux1 button"
+msgstr "Joystick virtual ativa botão especial"
#: src/settings_translation_file.cpp
msgid "Volume"
@@ -7105,6 +7460,11 @@ msgid "Waving plants"
msgstr "Balanço das plantas"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Weblink color"
+msgstr "Cor da caixa de seleção"
+
+#: 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"
@@ -7127,14 +7487,14 @@ msgstr ""
"vídeo que não suportem propriedades baixas de texturas voltam do hardware."
#: src/settings_translation_file.cpp
+#, fuzzy
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.\n"
+"memory. Powers of 2 are recommended. This setting is ONLY applied if\n"
+"bilinear/trilinear/anisotropic filtering is enabled.\n"
"This is also used as the base node texture size for world-aligned\n"
"texture autoscaling."
msgstr ""
@@ -7152,20 +7512,13 @@ msgstr ""
"texturas."
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
-"Whether FreeType fonts are used, requires FreeType support to be compiled "
-"in.\n"
-"If disabled, bitmap and XML vectors fonts are used instead."
-msgstr ""
-"Se as fontes FreeType são usadas, requer que suporte FreeType tenha sido "
-"compilado.\n"
-"Se desativado, fontes de bitmap e de vetores XML são usadas em seu lugar."
-
-#: src/settings_translation_file.cpp
-msgid ""
-"Whether nametag backgrounds should be shown by default.\n"
+"Whether name tag backgrounds should be shown by default.\n"
"Mods may still set a background."
msgstr ""
+"Se os planos de fundo das nametags devem ser mostradas por padrão.\n"
+"Mods ainda poderão definir um plano de fundo."
#: src/settings_translation_file.cpp
msgid "Whether node texture animations should be desynchronized per mapblock."
@@ -7219,8 +7572,9 @@ msgstr ""
"como teclar F5)."
#: src/settings_translation_file.cpp
-msgid "Width component of the initial window size."
-msgstr "Largura da janela inicial."
+msgid "Width component of the initial window size. Ignored in fullscreen mode."
+msgstr ""
+"Componente de tamanho da janela inicial. Ignorado em modo de tela cheia."
#: src/settings_translation_file.cpp
msgid "Width of the selection box lines around nodes."
@@ -7324,46 +7678,23 @@ msgid "Y-level of seabed."
msgstr "Nível Y do fundo do mar."
#: src/settings_translation_file.cpp
-msgid ""
-"ZLib compression level to use when saving mapblocks to disk.\n"
-"-1 - Zlib's default compression level\n"
-"0 - no compresson, fastest\n"
-"9 - best compression, slowest\n"
-"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)"
-msgstr ""
-"Nível de compressão ZLib a ser usada ao salvar mapblocks no disco.\n"
-"-1 - Nível de compressão padrão do Zlib\n"
-"0 - Nenhuma compressão; o mais rápido\n"
-"9 - Melhor compressão; o mais devagar\n"
-"(níveis 1-3 usam método \"rápido\" do Zlib, enquanto que 4-9 usam método "
-"normal)"
-
-#: src/settings_translation_file.cpp
-msgid ""
-"ZLib compression level to use when sending mapblocks to the client.\n"
-"-1 - Zlib's default compression level\n"
-"0 - no compresson, fastest\n"
-"9 - best compression, slowest\n"
-"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)"
-msgstr ""
-"Nível de compressão ZLib a ser usada ao mandar mapblocks para o cliente.\n"
-"-1 - Nível de compressão padrão do Zlib\n"
-"0 - Nenhuma compressão; o mais rápido\n"
-"9 - Melhor compressão; o mais devagar\n"
-"(níveis 1-3 usam método \"rápido\" do Zlib, enquanto que 4-9 usam método "
-"normal)"
-
-#: src/settings_translation_file.cpp
msgid "cURL file download timeout"
msgstr "Tempo limite de download de arquivo via cURL"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "cURL interactive timeout"
+msgstr "Tempo limite de cURL"
+
+#: src/settings_translation_file.cpp
msgid "cURL parallel limit"
msgstr "limite paralelo de cURL"
-#: src/settings_translation_file.cpp
-msgid "cURL timeout"
-msgstr "Tempo limite de cURL"
+#~ msgid "- Creative Mode: "
+#~ msgstr "- Modo Criativo: "
+
+#~ msgid "- Damage: "
+#~ msgstr "-Dano: "
#~ msgid ""
#~ "0 = parallax occlusion with slope information (faster).\n"
@@ -7372,6 +7703,9 @@ msgstr "Tempo limite de cURL"
#~ "0 = oclusão paralaxe com dados de inclinação (mais rápido).\n"
#~ "1 = mapeamento de relevo (mais lento, mais preciso)."
+#~ msgid "Address / Port"
+#~ msgstr "Endereço / Porta"
+
#~ msgid ""
#~ "Adjust the gamma encoding for the light tables. Higher numbers are "
#~ "brighter.\n"
@@ -7392,6 +7726,11 @@ msgstr "Tempo limite de cURL"
#~ msgid "Back"
#~ msgstr "Backspace"
+#~ msgid "Bits per pixel (aka color depth) in fullscreen mode."
+#~ msgstr ""
+#~ "Bits por pixel (Também conhecido como profundidade de cor) no modo de "
+#~ "tela cheia."
+
#~ msgid "Bump Mapping"
#~ msgstr "Bump mapping"
@@ -7432,13 +7771,26 @@ msgstr "Tempo limite de cURL"
#~ msgstr ""
#~ "Controla a largura dos túneis, um valor menor cria túneis mais largos."
+#~ msgid "Credits"
+#~ msgstr "Créditos"
+
#~ msgid "Crosshair color (R,G,B)."
#~ msgstr "Cor do cursor (R,G,B)."
+#~ msgid "Damage enabled"
+#~ msgstr "Dano habilitado"
+
#~ msgid "Darkness sharpness"
#~ msgstr "Nitidez da escuridão"
#~ msgid ""
+#~ "Default timeout for cURL, stated in milliseconds.\n"
+#~ "Only has an effect if compiled with cURL."
+#~ msgstr ""
+#~ "Tempo limite padrão para cURL, indicado em milissegundos.\n"
+#~ "Só tem efeito se compilado com cURL."
+
+#~ msgid ""
#~ "Defines areas of floatland smooth terrain.\n"
#~ "Smooth floatlands occur when noise > 0."
#~ msgstr ""
@@ -7496,6 +7848,15 @@ msgstr "Tempo limite de cURL"
#~ msgid "FPS in pause menu"
#~ msgstr "FPS no menu de pausa"
+#~ msgid "Fallback font shadow"
+#~ msgstr "Sombra da fonte alternativa"
+
+#~ msgid "Fallback font shadow alpha"
+#~ msgstr "Alpha da sombra da fonte alternativa"
+
+#~ msgid "Fallback font size"
+#~ msgstr "Tamanho da fonte alternativa"
+
#~ msgid "Floatland base height noise"
#~ msgstr "Altura base de ruído de Ilha Flutuante"
@@ -7505,6 +7866,15 @@ msgstr "Tempo limite de cURL"
#~ msgid "Font shadow alpha (opaqueness, between 0 and 255)."
#~ msgstr "Fonte alpha de sombra (opacidade, entre 0 e 255)."
+#~ msgid "Font size of the fallback font in point (pt)."
+#~ msgstr "Tamanho da fonte reserva em pontos (pt)."
+
+#~ msgid "FreeType fonts"
+#~ msgstr "Fontes Freetype"
+
+#~ msgid "Full screen BPP"
+#~ msgstr "Tela cheia BPP"
+
#~ msgid "Gamma"
#~ msgstr "Gama"
@@ -7514,9 +7884,15 @@ msgstr "Tempo limite de cURL"
#~ msgid "Generate normalmaps"
#~ msgstr "Gerar mapa de normais"
+#~ msgid "High-precision FPU"
+#~ msgstr "FPU de alta precisão"
+
#~ msgid "IPv6 support."
#~ msgstr "Suporte a IPv6."
+#~ msgid "Install: file: \"$1\""
+#~ msgstr "Instalação: arquivo: \"$1\""
+
#~ msgid "Lava depth"
#~ msgstr "Profundidade da lava"
@@ -7532,6 +7908,9 @@ msgstr "Tempo limite de cURL"
#~ msgid "Main menu style"
#~ msgstr "Estilo do menu principal"
+#~ msgid "Makes DirectX work with LuaJIT. Disable if it causes troubles."
+#~ msgstr "Faz o DirectX trabalhar com LuaJIT. Desative se causa problemas."
+
#~ msgid "Minimap in radar mode, Zoom x2"
#~ msgstr "Minimapa em modo radar, zoom 2x"
@@ -7544,6 +7923,9 @@ msgstr "Tempo limite de cURL"
#~ msgid "Minimap in surface mode, Zoom x4"
#~ msgstr "Minimapa em modo de superfície, zoom 4x"
+#~ msgid "Name / Password"
+#~ msgstr "Nome / Senha"
+
#~ msgid "Name/Password"
#~ msgstr "Nome / Senha"
@@ -7562,6 +7944,12 @@ msgstr "Tempo limite de cURL"
#~ msgid "Ok"
#~ msgstr "Ok"
+#~ msgid ""
+#~ "Opaqueness (alpha) of the shadow behind the fallback font, between 0 and "
+#~ "255."
+#~ msgstr ""
+#~ "Opacidade (alpha) da sombra atrás da fonte alternativa, entre 0 e 255."
+
#~ msgid "Overall bias of parallax occlusion effect, usually scale/2."
#~ msgstr ""
#~ "Viés geral do efeito de oclusão de paralaxe, geralmente de escala/2."
@@ -7599,15 +7987,42 @@ msgstr "Tempo limite de cURL"
#~ msgid "Projecting dungeons"
#~ msgstr "Projetando dungeons"
+#~ msgid "PvP enabled"
+#~ msgstr "PvP habilitado"
+
#~ msgid "Reset singleplayer world"
#~ msgstr "Resetar mundo um-jogador"
#~ msgid "Select Package File:"
#~ msgstr "Selecionar o arquivo do pacote:"
+#~ msgid ""
+#~ "Set the shadow update time.\n"
+#~ "Lower value means shadows and map updates faster, but it consume more "
+#~ "resources.\n"
+#~ "Minimun value 0.001 seconds max value 0.2 seconds"
+#~ msgstr ""
+#~ "Defina o tempo de atualização das sombras.\n"
+#~ "Valores mais baixos significam que sombras e mapa atualizam mais rápido, "
+#~ "mas consume mais recursos.\n"
+#~ "Valor mínimo 0.001 segundos e valor máximo 0.2 segundos"
+
#~ msgid "Shadow limit"
#~ msgstr "Limite de mapblock"
+#~ msgid ""
+#~ "Shadow offset (in pixels) of the fallback font. If 0, then shadow will "
+#~ "not be drawn."
+#~ msgstr ""
+#~ "Distância (em pixels) da sombra da fonte de backup. Se 0, então nenhuma "
+#~ "sombra será desenhada."
+
+#~ msgid "Special"
+#~ msgstr "Especial"
+
+#~ msgid "Special key"
+#~ msgstr "Tecla especial"
+
#~ msgid "Start Singleplayer"
#~ msgstr "Iniciar Um jogador"
@@ -7620,6 +8035,9 @@ msgstr "Tempo limite de cURL"
#~ msgid "This font will be used for certain languages."
#~ msgstr "Esta fonte será usada para determinados idiomas."
+#~ msgid "To enable shaders the OpenGL driver needs to be used."
+#~ msgstr "Para habilitar os sombreadores é necessário usar o driver OpenGL."
+
#~ msgid "Toggle Cinematic"
#~ msgstr "Alternar modo de câmera cinemática"
@@ -7643,6 +8061,15 @@ msgstr "Tempo limite de cURL"
#~ msgid "Waving water"
#~ msgstr "Balanço da água"
+#~ msgid ""
+#~ "Whether FreeType fonts are used, requires FreeType support to be compiled "
+#~ "in.\n"
+#~ "If disabled, bitmap and XML vectors fonts are used instead."
+#~ msgstr ""
+#~ "Se as fontes FreeType são usadas, requer que suporte FreeType tenha sido "
+#~ "compilado.\n"
+#~ "Se desativado, fontes de bitmap e de vetores XML são usadas em seu lugar."
+
#~ msgid "Whether dungeons occasionally project from the terrain."
#~ msgstr "Se dungeons ocasionalmente se projetam do terreno."
@@ -7658,3 +8085,9 @@ msgstr "Tempo limite de cURL"
#~ msgid "Yes"
#~ msgstr "Sim"
+
+#~ msgid "You died."
+#~ msgstr "Você morreu."
+
+#~ msgid "needs_fallback_font"
+#~ msgstr "no"
diff --git a/po/ro/minetest.po b/po/ro/minetest.po
index 48ad46e2c..484fe4d4b 100644
--- a/po/ro/minetest.po
+++ b/po/ro/minetest.po
@@ -2,8 +2,8 @@ msgid ""
msgstr ""
"Project-Id-Version: Romanian (Minetest)\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-02-23 19:03+0100\n"
-"PO-Revision-Date: 2020-11-24 11:29+0000\n"
+"POT-Creation-Date: 2022-01-25 23:19+0100\n"
+"PO-Revision-Date: 2021-07-25 23:36+0000\n"
"Last-Translator: Nicolae Crefelean <kneekoo@yahoo.com>\n"
"Language-Team: Romanian <https://hosted.weblate.org/projects/minetest/"
"minetest/ro/>\n"
@@ -13,7 +13,43 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=n==1 ? 0 : (n==0 || (n%100 > 0 && n%100 < "
"20)) ? 1 : 2;\n"
-"X-Generator: Weblate 4.4-dev\n"
+"X-Generator: Weblate 4.7.2-dev\n"
+
+#: builtin/client/chatcommands.lua
+msgid "Clear the out chat queue"
+msgstr "Golește coada mesajelor de chat"
+
+#: builtin/client/chatcommands.lua
+msgid "Empty command."
+msgstr "Comenzi de chat."
+
+#: builtin/client/chatcommands.lua
+msgid "Exit to main menu"
+msgstr "Ieși în meniul principal"
+
+#: builtin/client/chatcommands.lua
+msgid "Invalid command: "
+msgstr "Comandă greșită: "
+
+#: builtin/client/chatcommands.lua
+msgid "Issued command: "
+msgstr "Comanda dată: "
+
+#: builtin/client/chatcommands.lua
+msgid "List online players"
+msgstr "Arată jucătorii conectați"
+
+#: builtin/client/chatcommands.lua
+msgid "Online players: "
+msgstr "Jucători conectați: "
+
+#: builtin/client/chatcommands.lua
+msgid "The out chat queue is now empty."
+msgstr "Coada mesajelor de chat a fost golită."
+
+#: builtin/client/chatcommands.lua
+msgid "This command is disabled by server."
+msgstr "Această comandă este dezactivată de server."
#: builtin/client/death_formspec.lua src/client/game.cpp
msgid "Respawn"
@@ -23,11 +59,43 @@ msgstr "Reînviere"
msgid "You died"
msgstr "Ai murit"
+#: builtin/common/chatcommands.lua
+msgid "Available commands:"
+msgstr "Comenzi disponibile:"
+
+#: builtin/common/chatcommands.lua
+msgid "Available commands: "
+msgstr "Comenzi disponibile: "
+
+#: builtin/common/chatcommands.lua
+msgid "Command not available: "
+msgstr "Comandă indisponibilă: "
+
+#: builtin/common/chatcommands.lua
+msgid "Get help for commands"
+msgstr "Obține ajutor pentru comenzi"
+
+#: builtin/common/chatcommands.lua
+msgid ""
+"Use '.help <cmd>' to get more information, or '.help all' to list everything."
+msgstr ""
+"Folosește „.help <cmd>†pentru detalii sau „.help all†pentru informații "
+"complete."
+
+#: builtin/common/chatcommands.lua
+msgid "[all | <cmd>]"
+msgstr "[all | <cmd>]"
+
#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp
msgid "OK"
msgstr "OK"
#: builtin/fstk/ui.lua
+#, fuzzy
+msgid "<none available>"
+msgstr "Comandă indisponibilă: "
+
+#: builtin/fstk/ui.lua
msgid "An error occurred in a Lua script:"
msgstr "A apărut o eroare într-un script Lua:"
@@ -154,52 +222,51 @@ msgstr "activat"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "\"$1\" already exists. Would you like to overwrite it?"
-msgstr ""
+msgstr "„$1†există deja. Doriți s-o suprascrieți?"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "$1 and $2 dependencies will be installed."
-msgstr ""
+msgstr "Dependențele $1 și $2 vor fi instalate."
#: builtin/mainmenu/dlg_contentstore.lua
msgid "$1 by $2"
-msgstr ""
+msgstr "$1, de $2"
#: builtin/mainmenu/dlg_contentstore.lua
msgid ""
"$1 downloading,\n"
"$2 queued"
msgstr ""
+"$1 în descărcare,\n"
+"$2 în așteptare"
#: builtin/mainmenu/dlg_contentstore.lua
-#, fuzzy
msgid "$1 downloading..."
-msgstr "Descărcare..."
+msgstr "$1 se descarcă..."
#: builtin/mainmenu/dlg_contentstore.lua
msgid "$1 required dependencies could not be found."
-msgstr ""
+msgstr "$1 are dependințe care nu sunt disponibile."
#: builtin/mainmenu/dlg_contentstore.lua
msgid "$1 will be installed, and $2 dependencies will be skipped."
-msgstr ""
+msgstr "$1 va fi instalat, iar $2 dependințe vor fi ignorate."
#: builtin/mainmenu/dlg_contentstore.lua
msgid "All packages"
msgstr "Toate pachetele"
#: builtin/mainmenu/dlg_contentstore.lua
-#, fuzzy
msgid "Already installed"
-msgstr "Tastă deja folosită"
+msgstr "Deja instalată"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Back to Main Menu"
-msgstr "ÃŽnapoi la meniul principal"
+msgstr "Meniul principal"
#: builtin/mainmenu/dlg_contentstore.lua
-#, fuzzy
msgid "Base Game:"
-msgstr "Găzduiește joc"
+msgstr "Jocul de bază:"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "ContentDB is not available when Minetest was compiled without cURL"
@@ -223,14 +290,17 @@ msgid "Install"
msgstr "Instalează"
#: builtin/mainmenu/dlg_contentstore.lua
-#, fuzzy
msgid "Install $1"
-msgstr "Instalează"
+msgstr "Instalează $1"
#: builtin/mainmenu/dlg_contentstore.lua
-#, fuzzy
msgid "Install missing dependencies"
-msgstr "Dependențe opționale:"
+msgstr "Instalează dependințele opționale"
+
+#: builtin/mainmenu/dlg_contentstore.lua
+#, fuzzy
+msgid "Install: Unsupported file type or broken archive"
+msgstr "Instalare: tipul de fișier neacceptat „$ 1†sau arhiva ruptă"
#: builtin/mainmenu/dlg_contentstore.lua
#: builtin/mainmenu/dlg_settings_advanced.lua
@@ -246,25 +316,24 @@ msgid "No results"
msgstr "Fără rezultate"
#: builtin/mainmenu/dlg_contentstore.lua
-#, fuzzy
msgid "No updates"
-msgstr "Actualizare"
+msgstr "Nu există actualizări"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Not found"
-msgstr ""
+msgstr "Indisponibile"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Overwrite"
-msgstr ""
+msgstr "Suprascrie"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Please check that the base game is correct."
-msgstr ""
+msgstr "Verificați dacă jocul de bază este corect."
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Queued"
-msgstr ""
+msgstr "În așteptare"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Texture packs"
@@ -280,11 +349,11 @@ msgstr "Actualizare"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Update All [$1]"
-msgstr ""
+msgstr "Actualizează tot [$1]"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "View more information in a web browser"
-msgstr ""
+msgstr "Vezi detalii într-un navigator web"
#: builtin/mainmenu/dlg_create_world.lua
msgid "A world named \"$1\" already exists"
@@ -538,7 +607,7 @@ msgstr "< Înapoi la pagina de setări"
msgid "Browse"
msgstr "Navighează"
-#: builtin/mainmenu/dlg_settings_advanced.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_settings.lua
msgid "Disabled"
msgstr "Dezactivat"
@@ -563,7 +632,8 @@ msgid "Offset"
msgstr "Decalaj"
#: builtin/mainmenu/dlg_settings_advanced.lua
-msgid "Persistance"
+#, fuzzy
+msgid "Persistence"
msgstr "Persistență"
#: builtin/mainmenu/dlg_settings_advanced.lua
@@ -582,7 +652,7 @@ msgstr "Restabilește valori implicite"
msgid "Scale"
msgstr "Scală"
-#: builtin/mainmenu/dlg_settings_advanced.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_online.lua
msgid "Search"
msgstr "Caută"
@@ -676,14 +746,6 @@ msgstr ""
"moduri $1"
#: builtin/mainmenu/pkgmgr.lua
-msgid "Install: Unsupported file type \"$1\" or broken archive"
-msgstr "Instalare: tipul de fișier neacceptat „$ 1†sau arhiva ruptă"
-
-#: builtin/mainmenu/pkgmgr.lua
-msgid "Install: file: \"$1\""
-msgstr "Instalare: fișier: \"$1\""
-
-#: builtin/mainmenu/pkgmgr.lua
msgid "Unable to find a valid mod or modpack"
msgstr "Nu se poate găsi un mod sau un pachet de moduri valid"
@@ -708,9 +770,8 @@ msgid "Loading..."
msgstr "Se încarcă..."
#: builtin/mainmenu/serverlistmgr.lua
-#, fuzzy
msgid "Public server list is disabled"
-msgstr "Scripturile din partea clientului sunt dezactivate"
+msgstr "Lista de servere publice este dezactivată"
#: builtin/mainmenu/serverlistmgr.lua
msgid "Try reenabling public serverlist and check your internet connection."
@@ -718,6 +779,42 @@ msgstr ""
"Încercați să activați lista de servere publică și să vă verificați "
"conexiunea la internet."
+#: builtin/mainmenu/tab_about.lua
+msgid "About"
+msgstr "Despre"
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Active Contributors"
+msgstr "Contribuitori activi"
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Active renderer:"
+msgstr "Tipul curent de randare:"
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Core Developers"
+msgstr "Dezvoltatori de bază"
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Open User Data Directory"
+msgstr "Deschide directorul cu datele utilizatorului"
+
+#: builtin/mainmenu/tab_about.lua
+msgid ""
+"Opens the directory that contains user-provided worlds, games, mods,\n"
+"and texture packs in a file manager / explorer."
+msgstr ""
+"Deschide într-un manager de fișiere directorul care conține lumile,\n"
+"jocurile, modificările și texturile furnizate de utilizator."
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Previous Contributors"
+msgstr "Foști contribuitori"
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Previous Core Developers"
+msgstr "Dezvoltatori de bază precedenți"
+
#: builtin/mainmenu/tab_content.lua
msgid "Browse online content"
msgstr "Căutați conținut online"
@@ -758,37 +855,6 @@ msgstr "Dezinstalați pachetul"
msgid "Use Texture Pack"
msgstr "Folosiți pachetul de textură"
-#: builtin/mainmenu/tab_credits.lua
-msgid "Active Contributors"
-msgstr "Contribuitori activi"
-
-#: builtin/mainmenu/tab_credits.lua
-msgid "Core Developers"
-msgstr "Dezvoltatori de bază"
-
-#: builtin/mainmenu/tab_credits.lua
-msgid "Credits"
-msgstr "Credite"
-
-#: builtin/mainmenu/tab_credits.lua
-#, fuzzy
-msgid "Open User Data Directory"
-msgstr "Selectează directorul"
-
-#: builtin/mainmenu/tab_credits.lua
-msgid ""
-"Opens the directory that contains user-provided worlds, games, mods,\n"
-"and texture packs in a file manager / explorer."
-msgstr ""
-
-#: builtin/mainmenu/tab_credits.lua
-msgid "Previous Contributors"
-msgstr "Foști contribuitori"
-
-#: builtin/mainmenu/tab_credits.lua
-msgid "Previous Core Developers"
-msgstr "Dezvoltatori de bază precedenți"
-
#: builtin/mainmenu/tab_local.lua
msgid "Announce Server"
msgstr "Anunțare server"
@@ -817,9 +883,9 @@ msgstr "Găzduiește Server"
msgid "Install games from ContentDB"
msgstr "Instalarea jocurilor din ContentDB"
-#: builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
msgid "Name"
-msgstr ""
+msgstr "Nume"
#: builtin/mainmenu/tab_local.lua
msgid "New"
@@ -829,23 +895,21 @@ msgstr "Nou"
msgid "No world created or selected!"
msgstr "Nicio lume creată sau selectată!"
-#: builtin/mainmenu/tab_local.lua
-#, fuzzy
+#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
msgid "Password"
-msgstr "Noua parolă"
+msgstr "Parola"
#: builtin/mainmenu/tab_local.lua
msgid "Play Game"
msgstr "Joacă jocul"
-#: builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
msgid "Port"
msgstr "Port"
#: builtin/mainmenu/tab_local.lua
-#, fuzzy
msgid "Select Mods"
-msgstr "Selectează lumea:"
+msgstr "Alege modificările"
#: builtin/mainmenu/tab_local.lua
msgid "Select World:"
@@ -860,8 +924,12 @@ msgid "Start Game"
msgstr "ÃŽncepe Jocul"
#: builtin/mainmenu/tab_online.lua
-msgid "Address / Port"
-msgstr "Adresă / Port"
+msgid "Address"
+msgstr "Adresă"
+
+#: builtin/mainmenu/tab_online.lua src/client/keycode.cpp
+msgid "Clear"
+msgstr "Șterge"
#: builtin/mainmenu/tab_online.lua
msgid "Connect"
@@ -871,34 +939,42 @@ msgstr "Conectează"
msgid "Creative mode"
msgstr "Modul Creativ"
+#. ~ PvP = Player versus Player
#: builtin/mainmenu/tab_online.lua
-msgid "Damage enabled"
-msgstr "Daune activate"
+msgid "Damage / PvP"
+msgstr "Daune / PvP"
#: builtin/mainmenu/tab_online.lua
msgid "Del. Favorite"
msgstr "Åžterge Favorit"
#: builtin/mainmenu/tab_online.lua
-msgid "Favorite"
-msgstr "Favorit"
+msgid "Favorites"
+msgstr "Favorite"
#: builtin/mainmenu/tab_online.lua
-msgid "Join Game"
-msgstr "Alatură-te jocului"
+msgid "Incompatible Servers"
+msgstr "Servere incompatibile"
#: builtin/mainmenu/tab_online.lua
-msgid "Name / Password"
-msgstr "Nume / Parolă"
+msgid "Join Game"
+msgstr "Alatură-te jocului"
#: builtin/mainmenu/tab_online.lua
msgid "Ping"
msgstr "Ping"
-#. ~ PvP = Player versus Player
#: builtin/mainmenu/tab_online.lua
-msgid "PvP enabled"
-msgstr "PvP activat"
+msgid "Public Servers"
+msgstr "Servere publice"
+
+#: builtin/mainmenu/tab_online.lua
+msgid "Refresh"
+msgstr "Actualizează"
+
+#: builtin/mainmenu/tab_online.lua
+msgid "Server Description"
+msgstr "Descrierea serverului"
#: builtin/mainmenu/tab_settings.lua
msgid "2x"
@@ -940,9 +1016,29 @@ msgstr "Modifică tastele"
msgid "Connected Glass"
msgstr "Sticlă conectată"
+#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
+msgid "Dynamic shadows"
+msgstr "Umbre dinamice"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Dynamic shadows: "
+msgstr "Umbre dinamice: "
+
#: builtin/mainmenu/tab_settings.lua
msgid "Fancy Leaves"
-msgstr "Frunze luxsoase"
+msgstr "Frunze detaliate"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "High"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Low"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Medium"
+msgstr ""
#: builtin/mainmenu/tab_settings.lua
msgid "Mipmap"
@@ -997,9 +1093,8 @@ msgid "Shaders"
msgstr "Umbră"
#: builtin/mainmenu/tab_settings.lua
-#, fuzzy
msgid "Shaders (experimental)"
-msgstr "Terenuri plutitoare (experimental)"
+msgstr "Shadere (experimental)"
#: builtin/mainmenu/tab_settings.lua
msgid "Shaders (unavailable)"
@@ -1017,10 +1112,6 @@ msgstr "Lumină fină"
msgid "Texturing:"
msgstr "Texturare:"
-#: builtin/mainmenu/tab_settings.lua
-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 src/settings_translation_file.cpp
msgid "Tone Mapping"
msgstr "Mapare ton"
@@ -1034,6 +1125,14 @@ msgid "Trilinear Filter"
msgstr "Filtrare Triliniară"
#: builtin/mainmenu/tab_settings.lua
+msgid "Ultra High"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Very Low"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
msgid "Waving Leaves"
msgstr "Frunze legănătoare"
@@ -1045,7 +1144,7 @@ msgstr "Fluturarea lichidelor"
msgid "Waving Plants"
msgstr "Plante legănătoare"
-#: src/client/client.cpp
+#: src/client/client.cpp src/client/game.cpp
msgid "Connection timed out."
msgstr "Conexiunea a expirat."
@@ -1074,7 +1173,8 @@ msgid "Connection error (timed out?)"
msgstr "Eroare de conexiune (timeout?)"
#: src/client/clientlauncher.cpp
-msgid "Could not find or load game \""
+#, fuzzy
+msgid "Could not find or load game: "
msgstr "Nu se poate găsi sau încărca jocul \""
#: src/client/clientlauncher.cpp
@@ -1105,18 +1205,6 @@ msgstr "Fișierul cu parolă nu a putut fi deschis: "
msgid "Provided world path doesn't exist: "
msgstr "Calea aprovizionată a lumii nu există: "
-#. ~ DO NOT TRANSLATE THIS LITERALLY!
-#. This is a special string. Put either "no" or "yes"
-#. into the translation field (literally).
-#. Choose "yes" if the language requires use of the fallback
-#. font, "no" otherwise.
-#. The fallback font is (normally) required for languages with
-#. non-Latin script, like Chinese.
-#. When in doubt, test your translation.
-#: src/client/fontengine.cpp
-msgid "needs_fallback_font"
-msgstr "no"
-
#: src/client/game.cpp
msgid ""
"\n"
@@ -1130,14 +1218,6 @@ msgid "- Address: "
msgstr "- Adresa: "
#: src/client/game.cpp
-msgid "- Creative Mode: "
-msgstr "- Modul creativ: "
-
-#: src/client/game.cpp
-msgid "- Damage: "
-msgstr "- Daune: "
-
-#: src/client/game.cpp
msgid "- Mode: "
msgstr "- Modul: "
@@ -1159,6 +1239,16 @@ msgid "- Server Name: "
msgstr "- Numele serverului: "
#: src/client/game.cpp
+#, fuzzy
+msgid "A serialization error occurred:"
+msgstr "A apărut o eroare:"
+
+#: src/client/game.cpp
+#, c-format
+msgid "Access denied. Reason: %s"
+msgstr ""
+
+#: src/client/game.cpp
msgid "Automatic forward disabled"
msgstr "Redirecționare automată dezactivată"
@@ -1167,6 +1257,22 @@ msgid "Automatic forward enabled"
msgstr "Redirecționare automată activată"
#: src/client/game.cpp
+msgid "Block bounds hidden"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Block bounds shown for all blocks"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Block bounds shown for current block"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Block bounds shown for nearby blocks"
+msgstr ""
+
+#: src/client/game.cpp
msgid "Camera update disabled"
msgstr "Actualizarea camerei este dezactivată"
@@ -1175,6 +1281,10 @@ msgid "Camera update enabled"
msgstr "Actualizarea camerei este activată"
#: src/client/game.cpp
+msgid "Can't show block bounds (need 'basic_debug' privilege)"
+msgstr ""
+
+#: src/client/game.cpp
msgid "Change Password"
msgstr "Schimbă Parola"
@@ -1187,6 +1297,11 @@ msgid "Cinematic mode enabled"
msgstr "Modul cinematografic activat"
#: src/client/game.cpp
+#, fuzzy
+msgid "Client disconnected"
+msgstr "Modare la client"
+
+#: src/client/game.cpp
msgid "Client side scripting is disabled"
msgstr "Scripturile din partea clientului sunt dezactivate"
@@ -1195,11 +1310,15 @@ msgid "Connecting to server..."
msgstr "Se conectează la server..."
#: src/client/game.cpp
+msgid "Connection failed for unknown reason"
+msgstr ""
+
+#: src/client/game.cpp
msgid "Continue"
msgstr "Continuă"
#: src/client/game.cpp
-#, fuzzy, c-format
+#, c-format
msgid ""
"Controls:\n"
"- %s: move forwards\n"
@@ -1217,19 +1336,24 @@ msgid ""
"- %s: chat\n"
msgstr ""
"Controale:\n"
-"-%s: deplasați înainte\n"
-"-%s: deplasați înapoi\n"
-"-%s: deplasați spre stânga\n"
-"-%s: deplasați spre dreapta\n"
-"-%s: salt / urcare\n"
-"-%s: strecurați / coborâți\n"
-"-%s: aruncați element\n"
-"-%s: inventar\n"
-"- Mouse: rotiți / priviți\n"
-"- Mouse stânga: săpați / pocniți\n"
-"- Mouse dreapta: plasați / utilizare\n"
-"- Roată mousului: selectează elementul\n"
-"-%s: chat\n"
+"- %s: deplasare înainte\n"
+"- %s: deplasare înapoi\n"
+"- %s: deplasare stânga\n"
+"- %s: deplasare dreapta\n"
+"- %s: salt/urcare\n"
+"- %s: săpare/lovire\n"
+"- %s: plasare/utilizare\n"
+"- %s: furișare/coborâre\n"
+"- %s: aruncare obiect\n"
+"- %s: inventar\n"
+"- Maus: rotire/privire\n"
+"- Roata mausului: selectare obiect\n"
+"- %s: chat\n"
+
+#: src/client/game.cpp
+#, c-format
+msgid "Couldn't resolve address: %s"
+msgstr ""
#: src/client/game.cpp
msgid "Creating client..."
@@ -1360,6 +1484,11 @@ msgid "Minimap currently disabled by game or mod"
msgstr "Hartă mip dezactivată de joc sau mod"
#: src/client/game.cpp
+#, fuzzy
+msgid "Multiplayer"
+msgstr "Jucător singur"
+
+#: src/client/game.cpp
msgid "Noclip mode disabled"
msgstr "Modul Noclip este dezactivat"
@@ -1433,6 +1562,21 @@ msgstr "Sunet activat"
#: src/client/game.cpp
#, c-format
+msgid "The server is probably running a different version of %s."
+msgstr ""
+
+#: src/client/game.cpp
+#, c-format
+msgid "Unable to connect to %s because IPv6 is disabled"
+msgstr ""
+
+#: src/client/game.cpp
+#, c-format
+msgid "Unable to listen on %s because IPv6 is disabled"
+msgstr ""
+
+#: src/client/game.cpp
+#, c-format
msgid "Viewing range changed to %d"
msgstr "Intervalul de vizualizare s-a modificat la %d"
@@ -1501,10 +1645,6 @@ msgid "Caps Lock"
msgstr "Majuscule"
#: src/client/keycode.cpp
-msgid "Clear"
-msgstr "Șterge"
-
-#: src/client/keycode.cpp
msgid "Control"
msgstr "Control"
@@ -1756,19 +1896,27 @@ msgid "Minimap hidden"
msgstr "Hartă mip ascunsă"
#: src/client/minimap.cpp
-#, fuzzy, c-format
+#, c-format
msgid "Minimap in radar mode, Zoom x%d"
-msgstr "Hartă mip în modul radar, Zoom x1"
+msgstr "Mini hartă în modul radar, Zoom %dx"
#: src/client/minimap.cpp
-#, fuzzy, c-format
+#, c-format
msgid "Minimap in surface mode, Zoom x%d"
-msgstr "Hartă mip în modul de suprafață, Zoom x1"
+msgstr "Mini hartă în modul de suprafață, Zoom %dx"
#: src/client/minimap.cpp
-#, fuzzy
msgid "Minimap in texture mode"
-msgstr "Hartă mip în modul de suprafață, Zoom x1"
+msgstr "Mini hartă în modul de textură"
+
+#: src/gui/guiChatConsole.cpp
+#, fuzzy
+msgid "Failed to open webpage"
+msgstr "Nu s-a putut descărca $1"
+
+#: src/gui/guiChatConsole.cpp
+msgid "Opening webpage"
+msgstr ""
#: src/gui/guiConfirmRegistration.cpp src/gui/guiPasswordChange.cpp
msgid "Passwords do not match!"
@@ -1799,7 +1947,8 @@ msgid "Proceed"
msgstr "Continuă"
#: src/gui/guiKeyChangeMenu.cpp
-msgid "\"Special\" = climb down"
+#, fuzzy
+msgid "\"Aux1\" = climb down"
msgstr "\"Special\" = coborâți"
#: src/gui/guiKeyChangeMenu.cpp
@@ -1811,10 +1960,18 @@ msgid "Automatic jumping"
msgstr "Salt automat"
#: src/gui/guiKeyChangeMenu.cpp
+msgid "Aux1"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
msgid "Backward"
msgstr "ÃŽnapoi"
#: src/gui/guiKeyChangeMenu.cpp
+msgid "Block bounds"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
msgid "Change camera"
msgstr "Schimba camera"
@@ -1904,10 +2061,6 @@ msgid "Sneak"
msgstr "Furișează"
#: src/gui/guiKeyChangeMenu.cpp
-msgid "Special"
-msgstr "Special"
-
-#: src/gui/guiKeyChangeMenu.cpp
msgid "Toggle HUD"
msgstr "Comutați HUD"
@@ -1968,7 +2121,8 @@ msgid "Muted"
msgstr "Amuțit"
#: src/gui/guiVolumeChange.cpp
-msgid "Sound Volume: "
+#, fuzzy, c-format
+msgid "Sound Volume: %d%%"
msgstr "Volum sunet: "
#. ~ Imperative, as in "Enter/type in text".
@@ -1994,9 +2148,10 @@ msgstr ""
"prima atingere."
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
-"(Android) Use virtual joystick to trigger \"aux\" button.\n"
-"If enabled, virtual joystick will also tap \"aux\" button when out of main "
+"(Android) Use virtual joystick to trigger \"Aux1\" button.\n"
+"If enabled, virtual joystick will also tap \"Aux1\" button when out of main "
"circle."
msgstr ""
"(Android) Utilizați joystick-ul virtual pentru a declanșa butonul \"aux\".\n"
@@ -2229,6 +2384,10 @@ msgstr ""
"pentru ecrane 4k."
#: src/settings_translation_file.cpp
+msgid "Adjust the detected display density, used for scaling UI elements."
+msgstr ""
+
+#: src/settings_translation_file.cpp
#, c-format
msgid ""
"Adjusts the density of the floatland layer.\n"
@@ -2237,13 +2396,13 @@ msgid ""
"Value = 2.0 (can be higher depending on 'mgv7_np_floatland', always test\n"
"to be sure) creates a solid floatland layer."
msgstr ""
-"Ajustează densitatea stratului floatland.\n"
+"Ajustează densitatea stratului de insule plutitoare.\n"
"Mărește valoarea pentru creșterea densității. Poate fi pozitivă sau "
"negativă.\n"
-"Valoarea = 0.0: 50% din volum este floatland.\n"
+"Valoarea = 0.0: 50% din volum este insulă plutitoare.\n"
"Valoarea = 2.0 (poate fi mai mare în funcție de 'mgv7_np_floatland'; "
"testați\n"
-"pentru siguranță) va crea un strat solid floatland."
+"pentru siguranță) va crea un strat solid de insulă plutitoare."
#: src/settings_translation_file.cpp
msgid "Advanced"
@@ -2367,6 +2526,15 @@ msgid "Autoscaling mode"
msgstr "Mod scalare automată"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Aux1 key"
+msgstr "Tasta de salt"
+
+#: src/settings_translation_file.cpp
+msgid "Aux1 key for climbing/descending"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Backward key"
msgstr "Tastă înapoi"
@@ -2411,10 +2579,6 @@ msgid "Biome noise"
msgstr "Biome zgomot"
#: src/settings_translation_file.cpp
-msgid "Bits per pixel (aka color depth) in fullscreen mode."
-msgstr "Biți per pixel (aka adâncime de culoare) în modul ecran complet."
-
-#: src/settings_translation_file.cpp
msgid "Block send optimize distance"
msgstr "Distanță de optimizare trimitere bloc"
@@ -2520,6 +2684,16 @@ msgstr ""
"Aici 0.0 este nivelul minim de lumină, iar 1.0 este nivelul maxim."
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Chat command time message threshold"
+msgstr "Pragul de lansare a mesajului de chat"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Chat commands"
+msgstr "Comenzi de chat"
+
+#: src/settings_translation_file.cpp
msgid "Chat font size"
msgstr "Dimensiunea fontului din chat"
@@ -2552,8 +2726,9 @@ msgid "Chat toggle key"
msgstr "Cheia de comutare a chatului"
#: src/settings_translation_file.cpp
-msgid "Chatcommands"
-msgstr "Comenzi de chat"
+#, fuzzy
+msgid "Chat weblinks"
+msgstr "Chat afișat"
#: src/settings_translation_file.cpp
msgid "Chunk size"
@@ -2572,6 +2747,12 @@ msgid "Clean transparent textures"
msgstr "Texturi transparente curate"
#: src/settings_translation_file.cpp
+msgid ""
+"Clickable weblinks (middle-click or Ctrl+left-click) enabled in chat console "
+"output."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Client"
msgstr "Client"
@@ -2616,6 +2797,11 @@ msgid "Colored fog"
msgstr "Ceaţă colorată"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Colored shadows"
+msgstr "Ceaţă colorată"
+
+#: src/settings_translation_file.cpp
msgid ""
"Comma-separated list of flags to hide in the content repository.\n"
"\"nonfree\" can be used to hide packages which do not qualify as 'free "
@@ -2653,6 +2839,22 @@ msgid "Command key"
msgstr "Tasta de comandă"
#: src/settings_translation_file.cpp
+msgid ""
+"Compression level to use when saving mapblocks to disk.\n"
+"-1 - use default compression level\n"
+"0 - least compression, fastest\n"
+"9 - best compression, slowest"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Compression level to use when sending mapblocks to the client.\n"
+"-1 - use default compression level\n"
+"0 - least compression, fastest\n"
+"9 - best compression, slowest"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Connect glass"
msgstr "Sticla conectată"
@@ -2662,7 +2864,7 @@ msgstr "Se conectează la server media extern"
#: src/settings_translation_file.cpp
msgid "Connects glass if supported by node."
-msgstr ""
+msgstr "Unește sticla dacă nodul permite asta."
#: src/settings_translation_file.cpp
msgid "Console alpha"
@@ -2682,7 +2884,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "ContentDB Max Concurrent Downloads"
-msgstr ""
+msgstr "Maximul de descărcări simultane din ContentDB"
#: src/settings_translation_file.cpp
msgid "ContentDB URL"
@@ -2743,7 +2945,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"Crosshair alpha (opaqueness, between 0 and 255).\n"
-"Also controls the object crosshair color"
+"This also applies to the object crosshair."
msgstr ""
#: src/settings_translation_file.cpp
@@ -2815,14 +3017,14 @@ msgid "Default report format"
msgstr ""
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Default stack size"
-msgstr "Jocul implicit"
+msgstr "Dimensiunea implicită a stivei"
#: src/settings_translation_file.cpp
msgid ""
-"Default timeout for cURL, stated in milliseconds.\n"
-"Only has an effect if compiled with cURL."
+"Define shadow filtering quality.\n"
+"This simulates the soft shadows effect by applying a PCF or Poisson disk\n"
+"but also uses more resources."
msgstr ""
#: src/settings_translation_file.cpp
@@ -2924,9 +3126,8 @@ msgid "Desynchronize block animation"
msgstr ""
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Dig key"
-msgstr "Tasta dreapta"
+msgstr "Tasta pentru săpat"
#: src/settings_translation_file.cpp
msgid "Digging particles"
@@ -2941,6 +3142,10 @@ msgid "Disallow empty passwords"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Display Density Scaling Factor"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Domain name of server, to be displayed in the serverlist."
msgstr ""
@@ -2985,6 +3190,19 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Enable Poisson disk filtering.\n"
+"On true uses Poisson disk to make \"soft shadows\". Otherwise uses PCF "
+"filtering."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable colored shadows.\n"
+"On true translucent nodes cast colored shadows. This is expensive."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Enable console window"
msgstr ""
@@ -3093,6 +3311,12 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Enables tradeoffs that reduce CPU load or increase rendering performance\n"
+"at the expense of minor visual glitches that do not impact game playability."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Engine profiling data print interval"
msgstr ""
@@ -3131,18 +3355,6 @@ msgid "Fallback font path"
msgstr "Cale font de rezervă"
#: 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 ""
@@ -3160,7 +3372,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Fast movement (via the \"special\" key).\n"
+"Fast movement (via the \"Aux1\" key).\n"
"This requires the \"fast\" privilege on the server."
msgstr ""
@@ -3194,9 +3406,9 @@ 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."
+"which PNG optimizers usually discard, often resulting in dark or\n"
+"light edges to transparent textures. Apply a filter to clean that up\n"
+"at texture load time. This is automatically enabled if mipmapping is enabled."
msgstr ""
#: src/settings_translation_file.cpp
@@ -3232,9 +3444,8 @@ msgid "Floatland minimum Y"
msgstr ""
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Floatland noise"
-msgstr "Zgomotul solului"
+msgstr "Sunetul insulelor plutitoare"
#: src/settings_translation_file.cpp
msgid "Floatland taper exponent"
@@ -3289,15 +3500,15 @@ msgid "Font size"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Font size of the default font in point (pt)."
+msgid "Font size divisible by"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Font size of the fallback font in point (pt)."
+msgid "Font size of the default font where 1 unit = 1 pixel at 96 DPI"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Font size of the monospace font in point (pt)."
+msgid "Font size of the monospace font where 1 unit = 1 pixel at 96 DPI"
msgstr ""
#: src/settings_translation_file.cpp
@@ -3308,6 +3519,17 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"For pixel-style fonts that do not scale well, this ensures that font sizes "
+"used\n"
+"with this font will always be divisible by this value, in pixels. For "
+"instance,\n"
+"a pixel font 16 pixels tall should have this set to 16, so it will only ever "
+"be\n"
+"sized 16, 32, 48, etc., so a mod requesting a size of 25 will get 32."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Format of player chat messages. The following strings are valid "
"placeholders:\n"
"@name, @message, @timestamp (optional)"
@@ -3366,10 +3588,6 @@ msgid "Fraction of the visible distance at which fog starts to be rendered"
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)."
@@ -3394,10 +3612,6 @@ msgid "Full screen"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Full screen BPP"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Fullscreen mode."
msgstr ""
@@ -3421,7 +3635,7 @@ msgstr ""
msgid ""
"Global map generation attributes.\n"
"In Mapgen v6 the 'decorations' flag controls all decorations except trees\n"
-"and junglegrass, in all other mapgens this flag controls all decorations."
+"and jungle grass, in all other mapgens this flag controls all decorations."
msgstr ""
#: src/settings_translation_file.cpp
@@ -3490,7 +3704,8 @@ msgid "Heat noise"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Height component of the initial window size."
+msgid ""
+"Height component of the initial window size. Ignored in fullscreen mode."
msgstr ""
#: src/settings_translation_file.cpp
@@ -3502,10 +3717,6 @@ msgid "Height select noise"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "High-precision FPU"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Hill steepness"
msgstr "Abruptul dealului"
@@ -3736,8 +3947,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"If disabled, \"special\" key is used to fly fast if both fly and fast mode "
-"are\n"
+"If disabled, \"Aux1\" key is used to fly fast if both fly and fast mode are\n"
"enabled."
msgstr ""
@@ -3759,8 +3969,8 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"If enabled, \"special\" key instead of \"sneak\" key is used for climbing "
-"down and\n"
+"If enabled, \"Aux1\" key instead of \"Sneak\" key is used for climbing down "
+"and\n"
"descending."
msgstr ""
@@ -3806,6 +4016,12 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"If the execution of a chat command takes longer than this specified time in\n"
+"seconds, add the time information to the chat command message"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"If the file size of debug.txt exceeds the number of megabytes specified in\n"
"this setting when it is opened, the file is moved to debug.txt.1,\n"
"deleting an older debug.txt.1 if it exists.\n"
@@ -3851,7 +4067,7 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Instrument chatcommands on registration."
+msgid "Instrument chat commands on registration."
msgstr ""
#: src/settings_translation_file.cpp
@@ -3935,7 +4151,7 @@ msgid "Joystick button repetition interval"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Joystick deadzone"
+msgid "Joystick dead zone"
msgstr ""
#: src/settings_translation_file.cpp
@@ -4693,10 +4909,6 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Makes DirectX work with LuaJIT. Disable if it causes troubles."
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Makes all liquids opaque"
msgstr ""
@@ -4768,6 +4980,10 @@ msgid "Map save interval"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Map shadows update frames"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Mapblock limit"
msgstr ""
@@ -4876,6 +5092,10 @@ msgid "Maximum FPS when the window is not focused, or when the game is paused."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Maximum distance to render shadows."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Maximum forceloaded blocks"
msgstr ""
@@ -4981,7 +5201,15 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Maximum time in ms a file download (e.g. a mod download) may take."
+msgid ""
+"Maximum time a file download (e.g. a mod download) may take, stated in "
+"milliseconds."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum time an interactive request (e.g. server list fetch) may take, "
+"stated in milliseconds."
msgstr ""
#: src/settings_translation_file.cpp
@@ -5045,7 +5273,7 @@ msgid "Mod channels"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Modifies the size of the hudbar elements."
+msgid "Modifies the size of the HUD elements."
msgstr ""
#: src/settings_translation_file.cpp
@@ -5057,6 +5285,10 @@ msgid "Monospace font size"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Monospace font size divisible by"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Mountain height noise"
msgstr ""
@@ -5177,7 +5409,7 @@ 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"
+"This is a trade-off between SQLite transaction overhead and\n"
"memory consumption (4096=100MB, as a rule of thumb)."
msgstr ""
@@ -5196,21 +5428,18 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Opaqueness (alpha) of the shadow behind the fallback font, between 0 and 255."
-msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid ""
"Open the pause menu when the window's focus is lost. Does not pause if a "
"formspec is\n"
"open."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Optional override for chat weblink color."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid ""
-"Path of the fallback font.\n"
-"If “freetype†setting is enabled: Must be a TrueType font.\n"
-"If “freetype†setting is disabled: Must be a bitmap or XML vectors font.\n"
+"Path of the fallback font. Must be a TrueType font.\n"
"This font will be used for certain languages or if the default font is "
"unavailable."
msgstr ""
@@ -5233,17 +5462,13 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Path to the default font.\n"
-"If “freetype†setting is enabled: Must be a TrueType font.\n"
-"If “freetype†setting is disabled: Must be a bitmap or XML vectors font.\n"
+"Path to the default font. Must be a TrueType font.\n"
"The fallback font will be used if the font cannot be loaded."
msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Path to the monospace font.\n"
-"If “freetype†setting is enabled: Must be a TrueType font.\n"
-"If “freetype†setting is disabled: Must be a bitmap or XML vectors font.\n"
+"Path to the monospace font. Must be a TrueType font.\n"
"This font is used for e.g. the console and profiler screen."
msgstr ""
@@ -5272,9 +5497,8 @@ msgid "Pitch move mode"
msgstr ""
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Place key"
-msgstr "Tasta de mutare a pitch"
+msgstr "Tasta de plasare"
#: src/settings_translation_file.cpp
msgid "Place repetition interval"
@@ -5299,6 +5523,11 @@ msgid "Player versus player"
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Poisson filtering"
+msgstr "Filtrare Biliniară"
+
+#: src/settings_translation_file.cpp
msgid ""
"Port to connect to (UDP).\n"
"Note that the port field in the main menu overrides this setting."
@@ -5343,9 +5572,9 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"Prometheus listener address.\n"
-"If minetest is compiled with ENABLE_PROMETHEUS option enabled,\n"
+"If Minetest is compiled with ENABLE_PROMETHEUS option enabled,\n"
"enable metrics listener for Prometheus on that address.\n"
-"Metrics can be fetch on http://127.0.0.1:30000/metrics"
+"Metrics can be fetched on http://127.0.0.1:30000/metrics"
msgstr ""
#: src/settings_translation_file.cpp
@@ -5634,6 +5863,32 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Set the shadow strength.\n"
+"Lower value means lighter shadows, higher value means darker shadows."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set the soft shadow radius size.\n"
+"Lower values mean sharper shadows, bigger values mean softer shadows.\n"
+"Minimum value: 1.0; maximum value: 10.0"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set the tilt of Sun/Moon orbit in degrees.\n"
+"Value of 0 means no tilt / vertical orbit.\n"
+"Minimum value: 0.0; maximum value: 60.0"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set to true to enable Shadow Mapping.\n"
+"Requires shaders to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Set to true to enable waving leaves.\n"
"Requires shaders to be enabled."
msgstr ""
@@ -5651,6 +5906,13 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Sets shadow texture quality to 32 bits.\n"
+"On false, 16 bits texture will be used.\n"
+"This can cause much more artifacts in the shadow."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Shader path"
msgstr "Calea shaderului"
@@ -5663,15 +5925,30 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Shadow filter quality"
+msgstr "Calitatea capturii de ecran"
+
+#: src/settings_translation_file.cpp
+msgid "Shadow map max distance in nodes to render shadows"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Shadow map texture in 32 bits"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Shadow map texture size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid ""
"Shadow offset (in pixels) of the default font. If 0, then shadow will not be "
"drawn."
msgstr ""
#: src/settings_translation_file.cpp
-msgid ""
-"Shadow offset (in pixels) of the fallback font. If 0, then shadow will not "
-"be drawn."
+msgid "Shadow strength"
msgstr ""
#: src/settings_translation_file.cpp
@@ -5693,7 +5970,7 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Show nametag backgrounds by default"
+msgid "Show name tag backgrounds by default"
msgstr ""
#: src/settings_translation_file.cpp
@@ -5718,6 +5995,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Sky Body Orbit Tilt"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Slice w"
msgstr ""
@@ -5772,15 +6053,12 @@ msgid "Sneaking speed, in nodes per second."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Sound"
-msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid "Special key"
-msgstr "Cheie specială"
+#, fuzzy
+msgid "Soft shadow radius"
+msgstr "Rază nori"
#: src/settings_translation_file.cpp
-msgid "Special key for climbing/descending"
+msgid "Sound"
msgstr ""
#: src/settings_translation_file.cpp
@@ -5800,6 +6078,14 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Spread a complete update of shadow map over given amount of frames.\n"
+"Higher values might make shadows laggy, lower values\n"
+"will consume more resources.\n"
+"Minimum value: 1; maximum value: 16"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Spread of light curve boost range.\n"
"Controls the width of the range to be boosted.\n"
"Standard deviation of the light curve boost Gaussian."
@@ -5906,6 +6192,13 @@ msgstr "Calea texturii"
#: src/settings_translation_file.cpp
msgid ""
+"Texture size to render the shadow map on.\n"
+"This must be a power of two.\n"
+"Bigger numbers create better shadows but it is also more expensive."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Textures on a node may be aligned either to the node or to the world.\n"
"The former mode suits better things like machines, furniture, etc., while\n"
"the latter makes stairs and microblocks fit surroundings better.\n"
@@ -5919,7 +6212,7 @@ msgid "The URL for the content repository"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "The deadzone of the joystick"
+msgid "The dead zone of the joystick"
msgstr ""
#: src/settings_translation_file.cpp
@@ -5977,7 +6270,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"The rendering back-end for Irrlicht.\n"
+"The rendering back-end.\n"
"A restart is required after changing this.\n"
"Note: On Android, stick with OGLES1 if unsure! App may fail to start "
"otherwise.\n"
@@ -5988,7 +6281,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"The sensitivity of the joystick axes for moving the\n"
-"ingame view frustum around."
+"in-game view frustum around."
msgstr ""
#: src/settings_translation_file.cpp
@@ -6082,6 +6375,10 @@ msgid "Touch screen threshold"
msgstr "Prag ecran tactil"
#: src/settings_translation_file.cpp
+msgid "Tradeoffs for performance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Trees noise"
msgstr ""
@@ -6151,7 +6448,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Use mip mapping to scale textures. May slightly increase performance,\n"
+"Use mipmapping to scale textures. May slightly increase performance,\n"
"especially when using a high resolution texture pack.\n"
"Gamma correct downscaling is not supported."
msgstr ""
@@ -6264,7 +6561,7 @@ msgid "Viewing range"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Virtual joystick triggers aux button"
+msgid "Virtual joystick triggers Aux1 button"
msgstr ""
#: src/settings_translation_file.cpp
@@ -6335,6 +6632,10 @@ msgid "Waving plants"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Weblink color"
+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"
@@ -6355,23 +6656,15 @@ msgid ""
"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.\n"
+"memory. Powers of 2 are recommended. This setting is ONLY applied if\n"
+"bilinear/trilinear/anisotropic filtering is enabled.\n"
"This is also used as the base node texture size for world-aligned\n"
"texture autoscaling."
msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Whether FreeType fonts are used, requires FreeType support to be compiled "
-"in.\n"
-"If disabled, bitmap and XML vectors fonts are used instead."
-msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid ""
-"Whether nametag backgrounds should be shown by default.\n"
+"Whether name tag backgrounds should be shown by default.\n"
"Mods may still set a background."
msgstr ""
@@ -6413,7 +6706,7 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Width component of the initial window size."
+msgid "Width component of the initial window size. Ignored in fullscreen mode."
msgstr ""
#: src/settings_translation_file.cpp
@@ -6498,34 +6791,22 @@ msgid "Y-level of seabed."
msgstr ""
#: src/settings_translation_file.cpp
-msgid ""
-"ZLib compression level to use when saving mapblocks to disk.\n"
-"-1 - Zlib's default compression level\n"
-"0 - no compresson, fastest\n"
-"9 - best compression, slowest\n"
-"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)"
-msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid ""
-"ZLib compression level to use when sending mapblocks to the client.\n"
-"-1 - Zlib's default compression level\n"
-"0 - no compresson, fastest\n"
-"9 - best compression, slowest\n"
-"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)"
+msgid "cURL file download timeout"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "cURL file download timeout"
+msgid "cURL interactive timeout"
msgstr ""
#: src/settings_translation_file.cpp
msgid "cURL parallel limit"
msgstr ""
-#: src/settings_translation_file.cpp
-msgid "cURL timeout"
-msgstr ""
+#~ msgid "- Creative Mode: "
+#~ msgstr "- Modul creativ: "
+
+#~ msgid "- Damage: "
+#~ msgstr "- Daune: "
#~ msgid ""
#~ "0 = parallax occlusion with slope information (faster).\n"
@@ -6534,12 +6815,18 @@ msgstr ""
#~ "0 = ocluzia de paralax cu informații despre panta (mai rapid).\n"
#~ "1 = mapare în relief (mai lentă, mai exactă)."
+#~ msgid "Address / Port"
+#~ msgstr "Adresă / Port"
+
#~ msgid "Are you sure to reset your singleplayer world?"
#~ msgstr "Eşti sigur că vrei să resetezi lumea proprie ?"
#~ msgid "Back"
#~ msgstr "ÃŽnapoi"
+#~ msgid "Bits per pixel (aka color depth) in fullscreen mode."
+#~ msgstr "Biți per pixel (aka adâncime de culoare) în modul ecran complet."
+
#~ msgid "Bump Mapping"
#~ msgstr "Cartografiere cu denivelări"
@@ -6567,6 +6854,12 @@ msgstr ""
#~ msgid "Configure"
#~ msgstr "Configurează"
+#~ msgid "Credits"
+#~ msgstr "Credite"
+
+#~ msgid "Damage enabled"
+#~ msgstr "Daune activate"
+
#, fuzzy
#~ msgid "Darkness sharpness"
#~ msgstr "Mapgen"
@@ -6585,6 +6878,9 @@ msgstr ""
#~ msgid "Generate Normal Maps"
#~ msgstr "Generați Hărți Normale"
+#~ msgid "Install: file: \"$1\""
+#~ msgstr "Instalare: fișier: \"$1\""
+
#~ msgid "Main"
#~ msgstr "Principal"
@@ -6603,6 +6899,9 @@ msgstr ""
#~ msgid "Minimap in surface mode, Zoom x4"
#~ msgstr "Hartă mip în modul de suprafață, Zoom x4"
+#~ msgid "Name / Password"
+#~ msgstr "Nume / Parolă"
+
#~ msgid "Name/Password"
#~ msgstr "Nume/Parolă"
@@ -6615,6 +6914,9 @@ msgstr ""
#~ msgid "Parallax Occlusion"
#~ msgstr "Ocluzie Parallax"
+#~ msgid "PvP enabled"
+#~ msgstr "PvP activat"
+
#~ msgid "Reset singleplayer world"
#~ msgstr "Resetează lume proprie"
@@ -6622,9 +6924,18 @@ msgstr ""
#~ msgid "Select Package File:"
#~ msgstr "Selectează Fișierul Modului:"
+#~ msgid "Special"
+#~ msgstr "Special"
+
+#~ msgid "Special key"
+#~ msgstr "Cheie specială"
+
#~ msgid "Start Singleplayer"
#~ msgstr "Începeți Jucător singur"
+#~ msgid "To enable shaders the OpenGL driver needs to be used."
+#~ msgstr "Pentru a permite shadere OpenGL trebuie să fie folosite."
+
#, fuzzy
#~ msgid "Toggle Cinematic"
#~ msgstr "Intră pe rapid"
@@ -6634,3 +6945,9 @@ msgstr ""
#~ msgid "Yes"
#~ msgstr "Da"
+
+#~ msgid "You died."
+#~ msgstr "Ai murit."
+
+#~ msgid "needs_fallback_font"
+#~ msgstr "no"
diff --git a/po/ru/minetest.po b/po/ru/minetest.po
index bb5c90b4c..916b15064 100644
--- a/po/ru/minetest.po
+++ b/po/ru/minetest.po
@@ -2,9 +2,9 @@ msgid ""
msgstr ""
"Project-Id-Version: Russian (Minetest)\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-02-23 19:03+0100\n"
-"PO-Revision-Date: 2021-04-08 18:26+0000\n"
-"Last-Translator: Edward <solarcore@yandex.ru>\n"
+"POT-Creation-Date: 2022-01-25 23:19+0100\n"
+"PO-Revision-Date: 2022-01-29 21:28+0000\n"
+"Last-Translator: Nikita Epifanov <nikgreens@protonmail.com>\n"
"Language-Team: Russian <https://hosted.weblate.org/projects/minetest/"
"minetest/ru/>\n"
"Language: ru\n"
@@ -13,7 +13,43 @@ msgstr ""
"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 4.6-dev\n"
+"X-Generator: Weblate 4.11-dev\n"
+
+#: builtin/client/chatcommands.lua
+msgid "Clear the out chat queue"
+msgstr "ОчиÑтить очередь чата"
+
+#: builtin/client/chatcommands.lua
+msgid "Empty command."
+msgstr "ПуÑÑ‚Ð°Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð°."
+
+#: builtin/client/chatcommands.lua
+msgid "Exit to main menu"
+msgstr "Выход в главное меню"
+
+#: builtin/client/chatcommands.lua
+msgid "Invalid command: "
+msgstr "ÐÐµÐ²ÐµÑ€Ð½Ð°Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð°: "
+
+#: builtin/client/chatcommands.lua
+msgid "Issued command: "
+msgstr "Ð’Ñ‹Ð´Ð°Ð½Ð½Ð°Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð°: "
+
+#: builtin/client/chatcommands.lua
+msgid "List online players"
+msgstr "СпиÑок онлайн игроков"
+
+#: builtin/client/chatcommands.lua
+msgid "Online players: "
+msgstr "Онлайн игроки: "
+
+#: builtin/client/chatcommands.lua
+msgid "The out chat queue is now empty."
+msgstr "Очередь в чате теперь пуÑта."
+
+#: builtin/client/chatcommands.lua
+msgid "This command is disabled by server."
+msgstr "Эта команда отключена Ñервером."
#: builtin/client/death_formspec.lua src/client/game.cpp
msgid "Respawn"
@@ -23,11 +59,42 @@ msgstr "ВозродитьÑÑ"
msgid "You died"
msgstr "Вы умерли"
+#: builtin/common/chatcommands.lua
+msgid "Available commands:"
+msgstr "ДоÑтупные команды:"
+
+#: builtin/common/chatcommands.lua
+msgid "Available commands: "
+msgstr "ДоÑтупные команды: "
+
+#: builtin/common/chatcommands.lua
+msgid "Command not available: "
+msgstr "Команда недоÑтупна: "
+
+#: builtin/common/chatcommands.lua
+msgid "Get help for commands"
+msgstr "Получить Ñправку по командам"
+
+#: builtin/common/chatcommands.lua
+msgid ""
+"Use '.help <cmd>' to get more information, or '.help all' to list everything."
+msgstr ""
+"ИÑпользуйте '.help <cmd>' Ð´Ð»Ñ Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð¾Ð¹ информации, или '."
+"help all' Ð´Ð»Ñ Ð¿ÐµÑ€ÐµÑ‡Ð¸ÑÐ»ÐµÐ½Ð¸Ñ Ð²Ñего ÑпиÑка."
+
+#: builtin/common/chatcommands.lua
+msgid "[all | <cmd>]"
+msgstr "[all | <команда>]"
+
#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp
msgid "OK"
msgstr "ОК"
#: builtin/fstk/ui.lua
+msgid "<none available>"
+msgstr "<недоÑтупно>"
+
+#: builtin/fstk/ui.lua
msgid "An error occurred in a Lua script:"
msgstr "Произошла ошибка в Ñкрипте Lua:"
@@ -230,6 +297,12 @@ msgid "Install missing dependencies"
msgstr "УÑтановить недоÑтающие завиÑимоÑти"
#: builtin/mainmenu/dlg_contentstore.lua
+#, fuzzy
+msgid "Install: Unsupported file type or broken archive"
+msgstr ""
+"УÑтановка мода: неподдерживаемый тип файла или повреждённый архив \"$1\""
+
+#: builtin/mainmenu/dlg_contentstore.lua
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Mods"
msgstr "Моды"
@@ -515,8 +588,8 @@ msgid ""
"This modpack has an explicit name given in its modpack.conf which will "
"override any renaming here."
msgstr ""
-"Этот пакет модов имеет имÑ, Ñвно указанное в modpack.conf, которое не "
-"изменитÑÑ Ð¾Ñ‚ Ð¿ÐµÑ€ÐµÐ¸Ð¼ÐµÐ½Ð¾Ð²Ð°Ð½Ð¸Ñ Ð·Ð´ÐµÑÑŒ."
+"Этот пакет модов имеет имÑ, Ñвно указанное в modpack.conf, которое изменитÑÑ "
+"от Ð¿ÐµÑ€ÐµÐ¸Ð¼ÐµÐ½Ð¾Ð²Ð°Ð½Ð¸Ñ Ð·Ð´ÐµÑÑŒ."
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "(No description of setting given)"
@@ -534,13 +607,13 @@ msgstr "< Ðазад к Ñтранице наÑтроек"
msgid "Browse"
msgstr "Обзор"
-#: builtin/mainmenu/dlg_settings_advanced.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_settings.lua
msgid "Disabled"
msgstr "Отключено"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Edit"
-msgstr "Изменить"
+msgstr "Редактировать"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Enabled"
@@ -559,7 +632,8 @@ msgid "Offset"
msgstr "Смещение"
#: builtin/mainmenu/dlg_settings_advanced.lua
-msgid "Persistance"
+#, fuzzy
+msgid "Persistence"
msgstr "ПерÑиÑтенциÑ"
#: builtin/mainmenu/dlg_settings_advanced.lua
@@ -572,15 +646,15 @@ msgstr "ПожалуйÑта, введите допуÑтимое чиÑло."
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Restore Default"
-msgstr "ВоÑÑтановить Ñтандартные наÑтройки"
+msgstr "СброÑить значениÑ"
#: builtin/mainmenu/dlg_settings_advanced.lua src/settings_translation_file.cpp
msgid "Scale"
msgstr "МаÑштаб"
-#: builtin/mainmenu/dlg_settings_advanced.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_online.lua
msgid "Search"
-msgstr "ИÑкать"
+msgstr "ПоиÑк"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Select directory"
@@ -671,15 +745,6 @@ msgstr ""
"УÑтановка мода: не удаётÑÑ Ð½Ð°Ð¹Ñ‚Ð¸ подходÑщей каталог Ð´Ð»Ñ Ð¿Ð°ÐºÐµÑ‚Ð° модов «$1»"
#: builtin/mainmenu/pkgmgr.lua
-msgid "Install: Unsupported file type \"$1\" or broken archive"
-msgstr ""
-"УÑтановка мода: неподдерживаемый тип файла или повреждённый архив \"$1\""
-
-#: builtin/mainmenu/pkgmgr.lua
-msgid "Install: file: \"$1\""
-msgstr "УÑтановка мода: файл \"$1\""
-
-#: builtin/mainmenu/pkgmgr.lua
msgid "Unable to find a valid mod or modpack"
msgstr ""
"УÑтановка мода: не удаётÑÑ Ð½Ð°Ð¹Ñ‚Ð¸ подходÑщий каталог Ð´Ð»Ñ Ð¼Ð¾Ð´Ð° или пакета модов"
@@ -713,6 +778,42 @@ msgid "Try reenabling public serverlist and check your internet connection."
msgstr ""
"Попробуйте обновить ÑпиÑок публичных Ñерверов и проверьте ÑвÑзь Ñ Ð˜Ð½Ñ‚ÐµÑ€Ð½ÐµÑ‚Ð¾Ð¼."
+#: builtin/mainmenu/tab_about.lua
+msgid "About"
+msgstr "Об Ñтом"
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Active Contributors"
+msgstr "Ðктивные учаÑтники"
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Active renderer:"
+msgstr "Ðктивный визуализатор:"
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Core Developers"
+msgstr "ОÑновные разработчики"
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Open User Data Directory"
+msgstr "Открыть каталог данных пользователÑ"
+
+#: builtin/mainmenu/tab_about.lua
+msgid ""
+"Opens the directory that contains user-provided worlds, games, mods,\n"
+"and texture packs in a file manager / explorer."
+msgstr ""
+"Открывает каталог, Ñодержащий пользовательÑкие миры, игры, моды,\n"
+"и пакеты текÑтур в файловом менеджере / проводнике."
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Previous Contributors"
+msgstr "Прошлые учаÑтники"
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Previous Core Developers"
+msgstr "Прошлые оÑновные разработчики"
+
#: builtin/mainmenu/tab_content.lua
msgid "Browse online content"
msgstr "ПоиÑк дополнений в Ñети"
@@ -753,45 +854,13 @@ msgstr "Удалить дополнение"
msgid "Use Texture Pack"
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 "Open User Data Directory"
-msgstr "Открыть каталог данных пользователÑ"
-
-#: builtin/mainmenu/tab_credits.lua
-msgid ""
-"Opens the directory that contains user-provided worlds, games, mods,\n"
-"and texture packs in a file manager / explorer."
-msgstr ""
-"Открывает каталог, Ñодержащий пользовательÑкие миры, игры, моды,\n"
-"и пакеты текÑтур в файловом менеджере / проводнике."
-
-#: builtin/mainmenu/tab_credits.lua
-msgid "Previous Contributors"
-msgstr "Прошлые учаÑтники"
-
-#: builtin/mainmenu/tab_credits.lua
-msgid "Previous Core Developers"
-msgstr "Прошлые разработчики"
-
#: builtin/mainmenu/tab_local.lua
msgid "Announce Server"
msgstr "Публичный Ñервер"
#: builtin/mainmenu/tab_local.lua
msgid "Bind Address"
-msgstr "ÐÐ´Ñ€ÐµÑ Ð¿Ñ€Ð¸Ð²Ñзки"
+msgstr "ПривÑзать ÐдреÑ"
#: builtin/mainmenu/tab_local.lua
msgid "Creative Mode"
@@ -813,7 +882,7 @@ msgstr "ЗапуÑтить Ñервер"
msgid "Install games from ContentDB"
msgstr "УÑтановить игры из ContentDB"
-#: builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
msgid "Name"
msgstr "ИмÑ"
@@ -825,7 +894,7 @@ msgstr "Ðовый"
msgid "No world created or selected!"
msgstr "Мир не Ñоздан или не выбран!"
-#: builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
msgid "Password"
msgstr "Пароль"
@@ -833,7 +902,7 @@ msgstr "Пароль"
msgid "Play Game"
msgstr "Играть"
-#: builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
msgid "Port"
msgstr "Порт"
@@ -854,8 +923,12 @@ msgid "Start Game"
msgstr "Ðачать игру"
#: builtin/mainmenu/tab_online.lua
-msgid "Address / Port"
-msgstr "ÐÐ´Ñ€ÐµÑ / Порт"
+msgid "Address"
+msgstr "ÐдреÑ"
+
+#: builtin/mainmenu/tab_online.lua src/client/keycode.cpp
+msgid "Clear"
+msgstr "ОчиÑтить"
#: builtin/mainmenu/tab_online.lua
msgid "Connect"
@@ -865,34 +938,42 @@ msgstr "ПодключитьÑÑ"
msgid "Creative mode"
msgstr "Режим творчеÑтва"
+#. ~ PvP = Player versus Player
#: builtin/mainmenu/tab_online.lua
-msgid "Damage enabled"
-msgstr "Урон включён"
+msgid "Damage / PvP"
+msgstr "Урон / PvP"
#: builtin/mainmenu/tab_online.lua
msgid "Del. Favorite"
msgstr "Убрать из избранного"
#: builtin/mainmenu/tab_online.lua
-msgid "Favorite"
-msgstr "В избранные"
+msgid "Favorites"
+msgstr "Избранное"
#: builtin/mainmenu/tab_online.lua
-msgid "Join Game"
-msgstr "ПодключитьÑÑ Ðº игре"
+msgid "Incompatible Servers"
+msgstr "ÐеÑовмеÑтимые Ñерверы"
#: builtin/mainmenu/tab_online.lua
-msgid "Name / Password"
-msgstr "Ð˜Ð¼Ñ / Пароль"
+msgid "Join Game"
+msgstr "ПодключитьÑÑ Ðº игре"
#: builtin/mainmenu/tab_online.lua
msgid "Ping"
msgstr "Пинг"
-#. ~ PvP = Player versus Player
#: builtin/mainmenu/tab_online.lua
-msgid "PvP enabled"
-msgstr "PvP разрешён"
+msgid "Public Servers"
+msgstr "Публичные Ñерверы"
+
+#: builtin/mainmenu/tab_online.lua
+msgid "Refresh"
+msgstr "Обновить"
+
+#: builtin/mainmenu/tab_online.lua
+msgid "Server Description"
+msgstr "ОпиÑание Ñервера"
#: builtin/mainmenu/tab_settings.lua
msgid "2x"
@@ -934,11 +1015,31 @@ msgstr "Смена управлениÑ"
msgid "Connected Glass"
msgstr "Стёкла без швов"
+#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
+msgid "Dynamic shadows"
+msgstr "ДинамичеÑкие тени"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Dynamic shadows: "
+msgstr "ДинамичеÑкие тени: "
+
#: builtin/mainmenu/tab_settings.lua
msgid "Fancy Leaves"
msgstr "КраÑÐ¸Ð²Ð°Ñ Ð»Ð¸Ñтва"
#: builtin/mainmenu/tab_settings.lua
+msgid "High"
+msgstr "Ð’Ñ‹Ñокое"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Low"
+msgstr "Ðизкое"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Medium"
+msgstr "Среднее"
+
+#: builtin/mainmenu/tab_settings.lua
msgid "Mipmap"
msgstr "Мипмаппинг"
@@ -963,8 +1064,9 @@ msgid "Node Outlining"
msgstr "Обводка нод"
#: builtin/mainmenu/tab_settings.lua
+#, fuzzy
msgid "None"
-msgstr "Ðет"
+msgstr "Ðичего"
#: builtin/mainmenu/tab_settings.lua
msgid "Opaque Leaves"
@@ -1010,10 +1112,6 @@ msgstr "МÑгкое оÑвещение"
msgid "Texturing:"
msgstr "ТекÑтурирование:"
-#: builtin/mainmenu/tab_settings.lua
-msgid "To enable shaders the OpenGL driver needs to be used."
-msgstr "Ð”Ð»Ñ Ð²ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ ÑˆÐµÐ¹Ð´ÐµÑ€Ð¾Ð² необходим драйвер OpenGL."
-
#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
msgid "Tone Mapping"
msgstr "Тональное отображение"
@@ -1027,6 +1125,14 @@ msgid "Trilinear Filter"
msgstr "Ð¢Ñ€Ð¸Ð»Ð¸Ð½ÐµÐ¹Ð½Ð°Ñ Ñ„Ð¸Ð»ÑŒÑ‚Ñ€Ð°Ñ†Ð¸Ñ"
#: builtin/mainmenu/tab_settings.lua
+msgid "Ultra High"
+msgstr "УльтравыÑокое"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Very Low"
+msgstr "Очень низкое"
+
+#: builtin/mainmenu/tab_settings.lua
msgid "Waving Leaves"
msgstr "Покачивание лиÑтвы"
@@ -1038,7 +1144,7 @@ msgstr "ВолниÑтые жидкоÑти"
msgid "Waving Plants"
msgstr "Покачивание раÑтений"
-#: src/client/client.cpp
+#: src/client/client.cpp src/client/game.cpp
msgid "Connection timed out."
msgstr "Тайм-аут ÑоединениÑ."
@@ -1067,8 +1173,8 @@ msgid "Connection error (timed out?)"
msgstr "Ошибка ÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ (тайм-аут?)"
#: src/client/clientlauncher.cpp
-msgid "Could not find or load game \""
-msgstr "Ðевозможно найти или загрузить игру \""
+msgid "Could not find or load game: "
+msgstr "Ðе удалоÑÑŒ найти или загрузить игру: "
#: src/client/clientlauncher.cpp
msgid "Invalid gamespec."
@@ -1098,18 +1204,6 @@ msgstr "Ðе удалоÑÑŒ открыть указанный файл Ñ Ð¿Ð°Ñ€
msgid "Provided world path doesn't exist: "
msgstr "По Ñтому пути мира нет: "
-#. ~ DO NOT TRANSLATE THIS LITERALLY!
-#. This is a special string. Put either "no" or "yes"
-#. into the translation field (literally).
-#. Choose "yes" if the language requires use of the fallback
-#. font, "no" otherwise.
-#. The fallback font is (normally) required for languages with
-#. non-Latin script, like Chinese.
-#. When in doubt, test your translation.
-#: src/client/fontengine.cpp
-msgid "needs_fallback_font"
-msgstr "no"
-
#: src/client/game.cpp
msgid ""
"\n"
@@ -1123,14 +1217,6 @@ msgid "- Address: "
msgstr "- ÐдреÑ: "
#: src/client/game.cpp
-msgid "- Creative Mode: "
-msgstr "- Режим творчеÑтва: "
-
-#: src/client/game.cpp
-msgid "- Damage: "
-msgstr "- Урон: "
-
-#: src/client/game.cpp
msgid "- Mode: "
msgstr "- Режим: "
@@ -1152,6 +1238,15 @@ msgid "- Server Name: "
msgstr "- Ð˜Ð¼Ñ Ñервера: "
#: src/client/game.cpp
+msgid "A serialization error occurred:"
+msgstr "Произошла ошибка Ñериализации:"
+
+#: src/client/game.cpp
+#, c-format
+msgid "Access denied. Reason: %s"
+msgstr "ДоÑтуп запрещен. Причина: %s"
+
+#: src/client/game.cpp
msgid "Automatic forward disabled"
msgstr "Ðвтобег отключён"
@@ -1160,6 +1255,22 @@ msgid "Automatic forward enabled"
msgstr "Ðвтобег включён"
#: src/client/game.cpp
+msgid "Block bounds hidden"
+msgstr "Границы блока Ñкрыты"
+
+#: src/client/game.cpp
+msgid "Block bounds shown for all blocks"
+msgstr "Границы показаны Ð´Ð»Ñ Ð²Ñех блоков"
+
+#: src/client/game.cpp
+msgid "Block bounds shown for current block"
+msgstr "Границы показаны Ð´Ð»Ñ Ñ‚ÐµÐºÑƒÑ‰ÐµÐ³Ð¾ блока"
+
+#: src/client/game.cpp
+msgid "Block bounds shown for nearby blocks"
+msgstr "Границы показаны Ð´Ð»Ñ Ð±Ð»Ð¾ÐºÐ¾Ð² Ñ€Ñдом"
+
+#: src/client/game.cpp
msgid "Camera update disabled"
msgstr "Обновление камеры выключено"
@@ -1168,6 +1279,10 @@ msgid "Camera update enabled"
msgstr "Обновление камеры включено"
#: src/client/game.cpp
+msgid "Can't show block bounds (need 'basic_debug' privilege)"
+msgstr "ÐÐµÐ»ÑŒÐ·Ñ Ð¿Ð¾ÐºÐ°Ð·Ð°Ñ‚ÑŒ границы блока (нужна Ð¿Ñ€Ð¸Ð²Ð¸Ð»ÐµÐ³Ð¸Ñ 'basic_debug')"
+
+#: src/client/game.cpp
msgid "Change Password"
msgstr "Изменить пароль"
@@ -1180,6 +1295,10 @@ msgid "Cinematic mode enabled"
msgstr "Режим кино включён"
#: src/client/game.cpp
+msgid "Client disconnected"
+msgstr "Клиент отключилÑÑ"
+
+#: src/client/game.cpp
msgid "Client side scripting is disabled"
msgstr "КлиентÑкие моды отключены"
@@ -1188,6 +1307,10 @@ msgid "Connecting to server..."
msgstr "Подключение к Ñерверу..."
#: src/client/game.cpp
+msgid "Connection failed for unknown reason"
+msgstr "Сбой ÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ Ð¿Ð¾ неизвеÑтной причине"
+
+#: src/client/game.cpp
msgid "Continue"
msgstr "Продолжить"
@@ -1225,6 +1348,11 @@ msgstr ""
"- %s: чат\n"
#: src/client/game.cpp
+#, c-format
+msgid "Couldn't resolve address: %s"
+msgstr "Ðе удалоÑÑŒ разрешить адреÑ: %s"
+
+#: src/client/game.cpp
msgid "Creating client..."
msgstr "Создание клиента..."
@@ -1354,6 +1482,10 @@ msgid "Minimap currently disabled by game or mod"
msgstr "Миникарта ÑÐµÐ¹Ñ‡Ð°Ñ Ð¾Ñ‚ÐºÐ»ÑŽÑ‡ÐµÐ½Ð° игрой или модом"
#: src/client/game.cpp
+msgid "Multiplayer"
+msgstr "Мультиплеер"
+
+#: src/client/game.cpp
msgid "Noclip mode disabled"
msgstr "Режим Ð¿Ñ€Ð¾Ñ…Ð¾Ð¶Ð´ÐµÐ½Ð¸Ñ Ñквозь Ñтены отключён"
@@ -1427,6 +1559,21 @@ msgstr "Звук включён"
#: src/client/game.cpp
#, c-format
+msgid "The server is probably running a different version of %s."
+msgstr "ВероÑтно, на Ñервере иÑпользуетÑÑ Ð´Ñ€ÑƒÐ³Ð°Ñ Ð²ÐµÑ€ÑÐ¸Ñ %s."
+
+#: src/client/game.cpp
+#, c-format
+msgid "Unable to connect to %s because IPv6 is disabled"
+msgstr "Ðе удаётÑÑ Ð¿Ð¾Ð´ÐºÐ»ÑŽÑ‡Ð¸Ñ‚ÑŒÑÑ Ðº %s, так как IPv6 отключён"
+
+#: src/client/game.cpp
+#, c-format
+msgid "Unable to listen on %s because IPv6 is disabled"
+msgstr "Ðе удаётÑÑ Ð¿Ñ€Ð¾Ñлушать %s, так как IPv6 отключён"
+
+#: src/client/game.cpp
+#, c-format
msgid "Viewing range changed to %d"
msgstr "УÑтановлена видимоÑть %dм"
@@ -1495,10 +1642,6 @@ msgid "Caps Lock"
msgstr "Caps Lock"
#: src/client/keycode.cpp
-msgid "Clear"
-msgstr "ОчиÑтить"
-
-#: src/client/keycode.cpp
msgid "Control"
msgstr "Ctrl"
@@ -1520,7 +1663,7 @@ msgstr "Выполнить"
#: src/client/keycode.cpp
msgid "Help"
-msgstr "Справка"
+msgstr "Помощь"
#: src/client/keycode.cpp
msgid "Home"
@@ -1601,7 +1744,7 @@ msgstr "Доп. клав. -"
#: src/client/keycode.cpp
msgid "Numpad ."
-msgstr "Цифр. клав. '.'"
+msgstr "Цифр. кл. ."
#: src/client/keycode.cpp
msgid "Numpad /"
@@ -1715,7 +1858,7 @@ msgstr "Shift"
#: src/client/keycode.cpp
msgid "Sleep"
-msgstr "Sleep"
+msgstr "Спать"
#: src/client/keycode.cpp
msgid "Snapshot"
@@ -1763,6 +1906,14 @@ msgstr "Миникарта в поверхноÑтном режиме, увелÐ
msgid "Minimap in texture mode"
msgstr "Минимальный размер текÑтуры"
+#: src/gui/guiChatConsole.cpp
+msgid "Failed to open webpage"
+msgstr "Ðе удалоÑÑŒ открыть веб-Ñтраницу"
+
+#: src/gui/guiChatConsole.cpp
+msgid "Opening webpage"
+msgstr "Открытие Ñтраницы"
+
#: src/gui/guiConfirmRegistration.cpp src/gui/guiPasswordChange.cpp
msgid "Passwords do not match!"
msgstr "Пароли не Ñовпадают!"
@@ -1792,8 +1943,8 @@ msgid "Proceed"
msgstr "Продолжить"
#: src/gui/guiKeyChangeMenu.cpp
-msgid "\"Special\" = climb down"
-msgstr "ИÑпользовать = ÑпуÑк"
+msgid "\"Aux1\" = climb down"
+msgstr "\"Aux1\" = ÑпуÑк"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Autoforward"
@@ -1804,12 +1955,20 @@ msgid "Automatic jumping"
msgstr "Ðвтопрыжок"
#: src/gui/guiKeyChangeMenu.cpp
+msgid "Aux1"
+msgstr "Aux1"
+
+#: src/gui/guiKeyChangeMenu.cpp
msgid "Backward"
msgstr "Ðазад"
#: src/gui/guiKeyChangeMenu.cpp
+msgid "Block bounds"
+msgstr "Границы блока"
+
+#: src/gui/guiKeyChangeMenu.cpp
msgid "Change camera"
-msgstr "Изменить камеру"
+msgstr "Сменить ракурÑ"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Chat"
@@ -1898,16 +2057,12 @@ msgid "Sneak"
msgstr "КраÑтьÑÑ"
#: src/gui/guiKeyChangeMenu.cpp
-msgid "Special"
-msgstr "ОÑобенный"
-
-#: src/gui/guiKeyChangeMenu.cpp
msgid "Toggle HUD"
msgstr "Вкл/выкл игровой интерфейÑ"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Toggle chat log"
-msgstr "Вкл/выкл иÑторию чата"
+msgstr "Включить лог чата"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Toggle fast"
@@ -1935,7 +2090,7 @@ msgstr "По наклону взглÑда"
#: src/gui/guiKeyChangeMenu.cpp
msgid "press key"
-msgstr "нажмите ..."
+msgstr "нажмите клавишу"
#: src/gui/guiPasswordChange.cpp
msgid "Change"
@@ -1962,8 +2117,9 @@ msgid "Muted"
msgstr "Заглушить"
#: src/gui/guiVolumeChange.cpp
-msgid "Sound Volume: "
-msgstr "ГромкоÑть звука: "
+#, c-format
+msgid "Sound Volume: %d%%"
+msgstr "ГромкоÑть звука: %d%%"
#. ~ Imperative, as in "Enter/type in text".
#. Don't forget the space.
@@ -1989,12 +2145,12 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"(Android) Use virtual joystick to trigger \"aux\" button.\n"
-"If enabled, virtual joystick will also tap \"aux\" button when out of main "
+"(Android) Use virtual joystick to trigger \"Aux1\" button.\n"
+"If enabled, virtual joystick will also tap \"Aux1\" button when out of main "
"circle."
msgstr ""
-"(Android) ИÑпользовать виртуальный джойÑтик Ð´Ð»Ñ Ð°ÐºÑ‚Ð¸Ð²Ð°Ñ†Ð¸Ð¸ кнопки \"aux\".\n"
-"ЕÑли включено, виртуальный джойÑтик также будет нажимать кнопку \"aux\", "
+"(Android) ИÑпользовать виртуальный джойÑтик Ð´Ð»Ñ Ð°ÐºÑ‚Ð¸Ð²Ð°Ñ†Ð¸Ð¸ кнопки \"Aux1\".\n"
+"ЕÑли включено, виртуальный джойÑтик также будет нажимать кнопку \"Aux1\", "
"когда будет находитьÑÑ Ð·Ð° пределами оÑновного колеÑа."
#: src/settings_translation_file.cpp
@@ -2135,14 +2291,13 @@ msgid ""
msgstr ""
"Поддержка 3D.\n"
"Ð¡ÐµÐ¹Ñ‡Ð°Ñ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶Ð¸Ð²Ð°ÑŽÑ‚ÑÑ:\n"
-"- none: 3D-режим отключён.\n"
-"- anaglyph: голубой/пурпурный цвет в 3D.\n"
-"- interlaced: чётные/нечётные линии отображают два разных кадра Ð´Ð»Ñ "
-"Ñкранов, поддерживающих полÑризацию.\n"
-"- topbottom: Разделение Ñкрана верх/низ.\n"
-"- sidebyside: Разделение Ñкрана право/лево.\n"
+"- none: Ðет.\n"
+"- anaglyph: Ðнаглифные очки.\n"
+"- interlaced: ПолÑризационные 3d-очки.\n"
+"- topbottom: Разделение Ñкрана по горизонтали.\n"
+"- sidebyside: Разделение Ñкрана по диагонали.\n"
"- crossview: 3D на оÑнове автоÑтереограммы.\n"
-"- pageflip: 3D на оÑнове четырёхкратной буферизации.\n"
+"- pageflip: Ð§ÐµÑ‚Ñ‹Ñ€Ñ‘Ñ…ÐºÑ€Ð°Ñ‚Ð½Ð°Ñ Ð±ÑƒÑ„ÐµÑ€Ð¸Ð·Ð°Ñ†Ð¸Ñ.\n"
"Примечание: в режиме interlaced шейдеры должны быть включены."
#: src/settings_translation_file.cpp
@@ -2167,7 +2322,7 @@ msgstr "ABM интервал"
#: src/settings_translation_file.cpp
msgid "ABM time budget"
-msgstr "Бюджет времени ABM"
+msgstr "Лимит времени ABM"
#: src/settings_translation_file.cpp
msgid "Absolute limit of queued blocks to emerge"
@@ -2220,6 +2375,12 @@ msgstr ""
"только Ð´Ð»Ñ Android). Ðапример Ð´Ð»Ñ Ð¼Ð¾Ð½Ð¸Ñ‚Ð¾Ñ€Ð¾Ð² Ñ Ñ€Ð°Ð·Ñ€ÐµÑˆÐµÐ½Ð¸ÐµÐ¼ в 4k."
#: src/settings_translation_file.cpp
+msgid "Adjust the detected display density, used for scaling UI elements."
+msgstr ""
+"ÐаÑтройка обнаруженной плотноÑти диÑплеÑ, иÑпользуетÑÑ Ð´Ð»Ñ Ð¼Ð°ÑÑˆÑ‚Ð°Ð±Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ "
+"Ñлементов интерфейÑа."
+
+#: src/settings_translation_file.cpp
#, c-format
msgid ""
"Adjusts the density of the floatland layer.\n"
@@ -2248,11 +2409,11 @@ msgid ""
"This only has significant effect on daylight and artificial\n"
"light, it has very little effect on natural night light."
msgstr ""
-"ИзменÑет кривую Ñвета, применÑÑ Ðº ней \"гамма-коррекцию\".\n"
-"Более выÑокие Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð´ÐµÐ»Ð°ÑŽÑ‚ Ñредний и Ñлабый Ñвет Ñрче.\n"
-"Значение \"1.0\" оÑтавлÑет кривую Ñвета без изменений.\n"
-"Значительный Ñффект виден только на дневном и иÑкуÑÑтвенном\n"
-"оÑвещении, почти не влиÑет на еÑтеÑтвенный ночной Ñвет."
+"ИзменÑет кривую Ñвета, применÑÑ Ðº ней гамма-коррекцию.\n"
+"Более выÑокие Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð´ÐµÐ»Ð°ÑŽÑ‚ Ñредние и низкие уровни Ñвета более Ñркими.\n"
+"Значение 1.0 оÑтавлÑет кривую Ñвета без изменений.\n"
+"Это значительно влиÑет только на дневной и иÑкуÑÑтвенный\n"
+"Ñвет, но имеет очень Ñлабый Ñффект на еÑтеÑтвенный ночной Ñвет."
#: src/settings_translation_file.cpp
msgid "Always fly and fast"
@@ -2282,7 +2443,7 @@ msgstr "О Ñервере"
#: src/settings_translation_file.cpp
msgid "Announce to this serverlist."
-msgstr "ÐнонÑировать на Ñтот ÑпиÑок Ñерверов."
+msgstr "Оповещение в Ñтот Ñервер-лиÑÑ‚."
#: src/settings_translation_file.cpp
msgid "Append item name"
@@ -2341,7 +2502,7 @@ msgstr "ÐвтоматичеÑÐºÐ°Ñ ÐºÐ½Ð¾Ð¿ÐºÐ° вперед"
#: src/settings_translation_file.cpp
msgid "Automatically jump up single-node obstacles."
-msgstr "ÐвтоматичеÑкий подъем на одиночные блоки."
+msgstr "ÐвтоматичеÑкий подъем на одиночные ноды."
#: src/settings_translation_file.cpp
msgid "Automatically report to the serverlist."
@@ -2356,6 +2517,14 @@ msgid "Autoscaling mode"
msgstr "Режим автоматичеÑкого маÑштабированиÑ"
#: src/settings_translation_file.cpp
+msgid "Aux1 key"
+msgstr "Клавиша Aux1"
+
+#: src/settings_translation_file.cpp
+msgid "Aux1 key for climbing/descending"
+msgstr "Клавиша Aux1 Ð´Ð»Ñ Ð¿Ð¾Ð´ÑŠÐµÐ¼Ð°/ÑпуÑка"
+
+#: src/settings_translation_file.cpp
msgid "Backward key"
msgstr "Клавиша назад"
@@ -2400,10 +2569,6 @@ msgid "Biome noise"
msgstr "Шум биомов"
#: src/settings_translation_file.cpp
-msgid "Bits per pixel (aka color depth) in fullscreen mode."
-msgstr "Бит на пикÑель (глубина цвета) в полноÑкранном режиме."
-
-#: src/settings_translation_file.cpp
msgid "Block send optimize distance"
msgstr "Оптимизированное раÑÑтоÑние отправки блока"
@@ -2510,6 +2675,14 @@ msgstr ""
"где 0.0 — минимальный уровень Ñвета, а 1.0 — макÑимальный."
#: src/settings_translation_file.cpp
+msgid "Chat command time message threshold"
+msgstr "Порог cÐ¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ‹ чата"
+
+#: src/settings_translation_file.cpp
+msgid "Chat commands"
+msgstr "Команды чата"
+
+#: src/settings_translation_file.cpp
msgid "Chat font size"
msgstr "Размер шрифта чата"
@@ -2542,8 +2715,8 @@ msgid "Chat toggle key"
msgstr "Кнопка Ð¿ÐµÑ€ÐµÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ñ‡Ð°Ñ‚Ð°"
#: src/settings_translation_file.cpp
-msgid "Chatcommands"
-msgstr "Команды в чате"
+msgid "Chat weblinks"
+msgstr "Веб-ÑÑылки чата"
#: src/settings_translation_file.cpp
msgid "Chunk size"
@@ -2562,6 +2735,12 @@ msgid "Clean transparent textures"
msgstr "ОчиÑтить прозрачные текÑтуры"
#: src/settings_translation_file.cpp
+msgid ""
+"Clickable weblinks (middle-click or Ctrl+left-click) enabled in chat console "
+"output."
+msgstr "ÐажимающиеÑÑ ÑÑылки (СКМ или Ctrl+ЛКМ) включены в конÑоли."
+
+#: src/settings_translation_file.cpp
msgid "Client"
msgstr "Клиент"
@@ -2606,6 +2785,10 @@ msgid "Colored fog"
msgstr "Цветной туман"
#: src/settings_translation_file.cpp
+msgid "Colored shadows"
+msgstr "Цветные тени"
+
+#: src/settings_translation_file.cpp
msgid ""
"Comma-separated list of flags to hide in the content repository.\n"
"\"nonfree\" can be used to hide packages which do not qualify as 'free "
@@ -2629,16 +2812,16 @@ msgid ""
"Comma-separated list of mods that are allowed to access HTTP APIs, which\n"
"allow them to upload and download data to/from the internet."
msgstr ""
-"Разделенный запÑтыми ÑпиÑок модов, которые позволÑÑŽÑ‚ получить доÑтуп к HTTP "
-"APIs, что позволит им загружать и Ñкачивать данные в/из интернета."
+"Разделённый запÑтыми ÑпиÑок модов, у которых еÑть доÑтуп к HTTP API,\n"
+"что позволÑет им загружать и отдавать данные по интернету."
#: 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 ""
-"СпиÑок доверенных модов разделённых через запÑтую, которым разрешён доÑтуп к "
-"небезопаÑным функциÑм даже когда включена защита модов (через "
+"Разделённый запÑтыми ÑпиÑок доверенных модов, которым разрешён\n"
+"доÑтуп к небезопаÑным функциÑм, даже когда включена защита модов (через "
"request_insecure_environment())."
#: src/settings_translation_file.cpp
@@ -2646,6 +2829,35 @@ msgid "Command key"
msgstr "Команда"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid ""
+"Compression level to use when saving mapblocks to disk.\n"
+"-1 - use default compression level\n"
+"0 - least compression, fastest\n"
+"9 - best compression, slowest"
+msgstr ""
+"Уровень ÑÐ¶Ð°Ñ‚Ð¸Ñ ZLib Ð´Ð»Ñ Ð¸ÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¿Ñ€Ð¸ Ñохранении картографичеÑких блоков "
+"на диÑке.\n"
+"-1 - уровень ÑÐ¶Ð°Ñ‚Ð¸Ñ Zlib по умолчанию\n"
+"0 - без компреÑÑора, Ñамый быÑтрый\n"
+"9 - лучшее Ñжатие, Ñамое медленное\n"
+"(уровни 1-3 иÑпользуют \"быÑтрый\" метод Zlib, 4-9 иÑпользуют обычный метод)"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid ""
+"Compression level to use when sending mapblocks to the client.\n"
+"-1 - use default compression level\n"
+"0 - least compression, fastest\n"
+"9 - best compression, slowest"
+msgstr ""
+"Уровень ÑÐ¶Ð°Ñ‚Ð¸Ñ ZLib Ð´Ð»Ñ Ð¸ÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¿Ñ€Ð¸ отправке блоков карты клиенту.\n"
+"-1 - уровень ÑÐ¶Ð°Ñ‚Ð¸Ñ Zlib по умолчанию\n"
+"0 - без компреÑÑора, Ñамый быÑтрый\n"
+"9 - лучшее Ñжатие, Ñамое медленное\n"
+"(уровни 1-3 иÑпользуют \"быÑтрый\" метод Zlib, 4-9 иÑпользуют обычный метод)"
+
+#: src/settings_translation_file.cpp
msgid "Connect glass"
msgstr "Стёкла без швов"
@@ -2746,10 +2958,10 @@ msgstr "ПрозрачноÑть перекреÑтиÑ"
#: src/settings_translation_file.cpp
msgid ""
"Crosshair alpha (opaqueness, between 0 and 255).\n"
-"Also controls the object crosshair color"
+"This also applies to the object crosshair."
msgstr ""
"ПрозрачноÑть прицела (от 0 (прозрачно) до 255 (непрозрачно)).\n"
-"Также контролирует цвет перекреÑÑ‚Ð¸Ñ Ð¾Ð±ÑŠÐµÐºÑ‚Ð°"
+"Также контролирует перекреÑÑ‚Ð¸Ñ Ð¾Ð±ÑŠÐµÐºÑ‚Ð°."
#: src/settings_translation_file.cpp
msgid "Crosshair color"
@@ -2828,12 +3040,15 @@ msgid "Default stack size"
msgstr "Размер Ñтака по умолчанию"
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
-"Default timeout for cURL, stated in milliseconds.\n"
-"Only has an effect if compiled with cURL."
+"Define shadow filtering quality.\n"
+"This simulates the soft shadows effect by applying a PCF or Poisson disk\n"
+"but also uses more resources."
msgstr ""
-"Стандартный тайм-аут Ð´Ð»Ñ cURL, заданный в миллиÑекундах.\n"
-"Работает только на Ñборках Ñ cURL."
+"Определите качеÑтво фильтрации теней\n"
+"Это имитирует Ñффект мÑгких теней, применÑÑ PCF или пуаÑÑоновÑкий диÑк\n"
+"но также иÑпользует больше реÑурÑов."
#: src/settings_translation_file.cpp
msgid "Defines areas where trees have apples."
@@ -2963,6 +3178,10 @@ msgid "Disallow empty passwords"
msgstr "Запретить пуÑтой пароль"
#: src/settings_translation_file.cpp
+msgid "Display Density Scaling Factor"
+msgstr "КоÑффициент маÑÑˆÑ‚Ð°Ð±Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¿Ð»Ð¾Ñ‚Ð½Ð¾Ñти отображениÑ"
+
+#: src/settings_translation_file.cpp
msgid "Domain name of server, to be displayed in the serverlist."
msgstr "Доменное Ð¸Ð¼Ñ Ñервера, отображаемое в ÑпиÑке Ñерверов."
@@ -3000,7 +3219,7 @@ msgid ""
"Required for IPv6 connections to work at all."
msgstr ""
"Включить поддержку IPv6 (Ð´Ð»Ñ ÐºÐ»Ð¸ÐµÐ½Ñ‚Ð° и Ñервера).\n"
-"Ðеобходимо Ð´Ð»Ñ Ñ€Ð°Ð±Ð¾Ñ‚Ñ‹ IPv6-Ñоединений."
+"ТребуетÑÑ Ð´Ð»Ñ Ñ‚Ð¾Ð³Ð¾, чтобы вообще ÑоединÑтьÑÑ Ð¿Ð¾ IPv6."
#: src/settings_translation_file.cpp
msgid ""
@@ -3011,6 +3230,26 @@ msgstr ""
"Эта поддержка ÑвлÑетÑÑ ÑкÑпериментальной и API может изменитьÑÑ."
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid ""
+"Enable Poisson disk filtering.\n"
+"On true uses Poisson disk to make \"soft shadows\". Otherwise uses PCF "
+"filtering."
+msgstr ""
+"Включить фильтрацию диÑка ПуаÑÑона.\n"
+"По иÑтине иÑпользует диÑк ПуаÑÑона Ð´Ð»Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ \"мÑгких теней\". Иначе "
+"иÑпользуетÑÑ Ñ„Ð¸Ð»ÑŒÑ‚Ñ€Ð°Ñ†Ð¸Ñ PCF."
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid ""
+"Enable colored shadows.\n"
+"On true translucent nodes cast colored shadows. This is expensive."
+msgstr ""
+"Включить цветные тени.\n"
+"Ðа иÑтинно полупрозрачных узлах отбраÑываютÑÑ Ñ†Ð²ÐµÑ‚Ð½Ñ‹Ðµ тени. Это дорого."
+
+#: src/settings_translation_file.cpp
msgid "Enable console window"
msgstr "Включить окно конÑоли"
@@ -3148,6 +3387,15 @@ msgstr ""
"Изменение Ñтого параметра требует перезапуÑка."
#: src/settings_translation_file.cpp
+msgid ""
+"Enables tradeoffs that reduce CPU load or increase rendering performance\n"
+"at the expense of minor visual glitches that do not impact game playability."
+msgstr ""
+"ОбеÑпечивает компромиÑÑ, который Ñнижает иÑпользование ЦП или увеличивает "
+"производительноÑть рендеринга\n"
+"ценой мелких визуальных дефектов, не влиÑющих на геймплей."
+
+#: src/settings_translation_file.cpp
msgid "Engine profiling data print interval"
msgstr "Интервал печати данных Ð¿Ñ€Ð¾Ñ„Ð¸Ð»Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð´Ð²Ð¸Ð¶ÐºÐ°"
@@ -3173,7 +3421,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "FPS when unfocused or paused"
-msgstr "МакÑимум кадровой чаÑтоты при паузе."
+msgstr "МакÑимум кадровой чаÑтоты при паузе или когда окно вне фокуÑа"
#: src/settings_translation_file.cpp
msgid "FSAA"
@@ -3192,18 +3440,6 @@ msgid "Fallback font path"
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 "Клавиша уÑкорениÑ"
@@ -3221,10 +3457,10 @@ msgstr "БыÑтрое перемещение"
#: src/settings_translation_file.cpp
msgid ""
-"Fast movement (via the \"special\" key).\n"
+"Fast movement (via the \"Aux1\" key).\n"
"This requires the \"fast\" privilege on the server."
msgstr ""
-"БыÑтрое перемещение (Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ клавиши «ИÑпользовать»).\n"
+"БыÑтрое перемещение (Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ клавиши \"Aux1\").\n"
"Это требует привилегию 'fast' на Ñервере."
#: src/settings_translation_file.cpp
@@ -3259,14 +3495,17 @@ 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."
+"which PNG optimizers usually discard, often resulting in dark or\n"
+"light edges to transparent textures. Apply a filter to clean that up\n"
+"at texture load time. This is automatically enabled if mipmapping is enabled."
msgstr ""
-"Отфильтрованные текÑтуры могут Ñмешивать Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ RGB Ñ Ð¿Ð¾Ð»Ð½Ð¾Ñтью\n"
-"прозрачными ÑоÑедними, которые оптимизаторы PNG обычно отбраÑывают.\n"
-"Иногда Ñто может привеÑти к тёмным или Ñветлым краÑм полупрозрачных\n"
-"текÑтур. Примените Ñтот фильтр, чтобы иÑправить текÑтуру во Ð²Ñ€ÐµÐ¼Ñ Ð·Ð°Ð³Ñ€ÑƒÐ·ÐºÐ¸."
+"Фильтрованные текÑтуры могут Ñмешивать Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ RGB Ñ Ð¿Ð¾Ð»Ð½Ð¾Ñтью прозрачными "
+"ÑоÑедними,\n"
+"которые оптимизаторы PNG обычно отбраÑывают, что чаÑто приводит к темным "
+"или\n"
+"Ñветлым краÑм прозрачных текÑтур. Примените фильтр Ð´Ð»Ñ Ð¾Ñ‡Ð¸Ñтки\n"
+"во Ð²Ñ€ÐµÐ¼Ñ Ð·Ð°Ð³Ñ€ÑƒÐ·ÐºÐ¸ текÑтуры. Это автоматичеÑки включаетÑÑ, еÑли включен "
+"mipmapping."
#: src/settings_translation_file.cpp
msgid "Filtering"
@@ -3357,15 +3596,18 @@ msgid "Font size"
msgstr "Размер шрифта"
#: src/settings_translation_file.cpp
-msgid "Font size of the default font in point (pt)."
-msgstr "Размер Ñтандартного шрифта в пунктах (pt)."
+#, fuzzy
+msgid "Font size divisible by"
+msgstr "Размер шрифта, кратный"
#: src/settings_translation_file.cpp
-msgid "Font size of the fallback font in point (pt)."
-msgstr "Размер резервного шрифта в пунктах (pt)."
+#, fuzzy
+msgid "Font size of the default font where 1 unit = 1 pixel at 96 DPI"
+msgstr "Размер Ñтандартного шрифта в пунктах (pt)."
#: src/settings_translation_file.cpp
-msgid "Font size of the monospace font in point (pt)."
+#, fuzzy
+msgid "Font size of the monospace font where 1 unit = 1 pixel at 96 DPI"
msgstr "Размер моноширинного шрифта в пунктах (pt)."
#: src/settings_translation_file.cpp
@@ -3377,6 +3619,24 @@ msgstr ""
"Значение 0 будет иÑпользовать размер шрифта по умолчанию."
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid ""
+"For pixel-style fonts that do not scale well, this ensures that font sizes "
+"used\n"
+"with this font will always be divisible by this value, in pixels. For "
+"instance,\n"
+"a pixel font 16 pixels tall should have this set to 16, so it will only ever "
+"be\n"
+"sized 16, 32, 48, etc., so a mod requesting a size of 25 will get 32."
+msgstr ""
+"Ð”Ð»Ñ ÑˆÑ€Ð¸Ñ„Ñ‚Ð¾Ð² пикÑельного ÑтилÑ, которые плохо маÑштабируютÑÑ, Ñто "
+"гарантирует, что размеры шрифта, иÑпользуемые\n"
+"Ñ Ñтим шрифтом вÑегда будут кратны Ñтому значению в пикÑелÑÑ…. Ðапример,\n"
+"пикÑельный шрифт выÑотой 16 пикÑелей должен иметь значение 16, поÑтому он "
+"вÑегда будет иметь только\n"
+"16, 32, 48 и Ñ‚.д., поÑтому мод, запрашивающий размер 25, получит 32."
+
+#: src/settings_translation_file.cpp
msgid ""
"Format of player chat messages. The following strings are valid "
"placeholders:\n"
@@ -3440,10 +3700,6 @@ msgid "Fraction of the visible distance at which fog starts to be rendered"
msgstr "ЧаÑть видимого раÑÑтоÑниÑ, на которой начинает поÑвлÑтьÑÑ Ñ‚ÑƒÐ¼Ð°Ð½"
#: src/settings_translation_file.cpp
-msgid "FreeType fonts"
-msgstr "Шрифты FreeType"
-
-#: src/settings_translation_file.cpp
msgid ""
"From how far blocks are generated for clients, stated in mapblocks (16 "
"nodes)."
@@ -3476,10 +3732,6 @@ msgid "Full screen"
msgstr "Полный Ñкран"
#: src/settings_translation_file.cpp
-msgid "Full screen BPP"
-msgstr "Глубина цвета в полноÑкранном режиме"
-
-#: src/settings_translation_file.cpp
msgid "Fullscreen mode."
msgstr "ПолноÑкранный режим."
@@ -3500,15 +3752,15 @@ msgid "Global callbacks"
msgstr "Глобальные обратные вызовы"
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
"Global map generation attributes.\n"
"In Mapgen v6 the 'decorations' flag controls all decorations except trees\n"
-"and junglegrass, in all other mapgens this flag controls all decorations."
+"and jungle grass, in all other mapgens this flag controls all decorations."
msgstr ""
"Глобальные атрибуты генерации карт.\n"
-"Ð’ картогенераторе v6 флаг «decorations» не влиÑет на деревьÑ\n"
-"и траву в джунглÑÑ…, в оÑтальных генераторах Ñтот флаг\n"
-"контролирует вÑе декорации."
+"Ð’ картогенераторе v6 флаг «decorations» не влиÑет на Ð´ÐµÑ€ÐµÐ²ÑŒÑ Ð¸ траву\n"
+"в джунглÑÑ…, в оÑтальных генераторах Ñтот флаг контролирует вÑе декорации."
#: src/settings_translation_file.cpp
msgid ""
@@ -3540,7 +3792,7 @@ msgstr "Уровень земли"
#: src/settings_translation_file.cpp
msgid "Ground noise"
-msgstr "Шум грунта"
+msgstr "Шум земли"
#: src/settings_translation_file.cpp
msgid "HTTP mods"
@@ -3590,8 +3842,11 @@ msgid "Heat noise"
msgstr "Шум теплоты"
#: src/settings_translation_file.cpp
-msgid "Height component of the initial window size."
-msgstr "Ð’Ñ‹Ñота окна при запуÑке."
+msgid ""
+"Height component of the initial window size. Ignored in fullscreen mode."
+msgstr ""
+"Компонент выÑоты начального размера окна. ИгнорируетÑÑ Ð² полноÑкранном "
+"режиме."
#: src/settings_translation_file.cpp
msgid "Height noise"
@@ -3602,10 +3857,6 @@ msgid "Height select noise"
msgstr "Шум выбора выÑоты"
#: src/settings_translation_file.cpp
-msgid "High-precision FPU"
-msgstr "Ð’Ñ‹Ñокоточный FPU"
-
-#: src/settings_translation_file.cpp
msgid "Hill steepness"
msgstr "Крутизна холмов"
@@ -3667,135 +3918,135 @@ msgstr "Предыдущий предмет на горÑчей панели"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 1 key"
-msgstr "Предмет 1 на горÑчей панели"
+msgstr "БыÑÑ‚Ñ€Ð°Ñ ÐºÐ½Ð¾Ð¿ÐºÐ° 1"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 10 key"
-msgstr "Предмет 10 на горÑчей панели"
+msgstr "БыÑÑ‚Ñ€Ð°Ñ ÐºÐ½Ð¾Ð¿ÐºÐ° 10"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 11 key"
-msgstr "Предмет 11 на горÑчей панели"
+msgstr "БыÑÑ‚Ñ€Ð°Ñ ÐºÐ½Ð¾Ð¿ÐºÐ° 11"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 12 key"
-msgstr "Предмет 12 на горÑчей панели"
+msgstr "БыÑÑ‚Ñ€Ð°Ñ ÐºÐ½Ð¾Ð¿ÐºÐ° 12"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 13 key"
-msgstr "Предмет 13 на горÑчей панели"
+msgstr "БыÑÑ‚Ñ€Ð°Ñ ÐºÐ½Ð¾Ð¿ÐºÐ° 13"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 14 key"
-msgstr "Предмет 14 на горÑчей панели"
+msgstr "БыÑÑ‚Ñ€Ð°Ñ ÐºÐ½Ð¾Ð¿ÐºÐ° 14"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 15 key"
-msgstr "Предмет 15 на горÑчей панели"
+msgstr "БыÑÑ‚Ñ€Ð°Ñ ÐºÐ½Ð¾Ð¿ÐºÐ° 15"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 16 key"
-msgstr "Предмет 16 на горÑчей панели"
+msgstr "БыÑÑ‚Ñ€Ð°Ñ ÐºÐ½Ð¾Ð¿ÐºÐ° 16"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 17 key"
-msgstr "Предмет 17 на горÑчей панели"
+msgstr "БыÑÑ‚Ñ€Ð°Ñ ÐºÐ½Ð¾Ð¿ÐºÐ° 17"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 18 key"
-msgstr "Предмет 18 на горÑчей панели"
+msgstr "БыÑÑ‚Ñ€Ð°Ñ ÐºÐ½Ð¾Ð¿ÐºÐ° 18"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 19 key"
-msgstr "Предмет 19 на горÑчей панели"
+msgstr "БыÑÑ‚Ñ€Ð°Ñ ÐºÐ½Ð¾Ð¿ÐºÐ° 19"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 2 key"
-msgstr "Предмет 2 на горÑчей панели"
+msgstr "БыÑÑ‚Ñ€Ð°Ñ ÐºÐ½Ð¾Ð¿ÐºÐ° 2"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 20 key"
-msgstr "Предмет 20 на горÑчей панели"
+msgstr "БыÑÑ‚Ñ€Ð°Ñ ÐºÐ½Ð¾Ð¿ÐºÐ° 20"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 21 key"
-msgstr "Предмет 21 на горÑчей панели"
+msgstr "БыÑÑ‚Ñ€Ð°Ñ ÐºÐ½Ð¾Ð¿ÐºÐ° 21"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 22 key"
-msgstr "Предмет 22 на горÑчей панели"
+msgstr "БыÑÑ‚Ñ€Ð°Ñ ÐºÐ½Ð¾Ð¿ÐºÐ° 22"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 23 key"
-msgstr "Предмет 23 на горÑчей панели"
+msgstr "БыÑÑ‚Ñ€Ð°Ñ ÐºÐ½Ð¾Ð¿ÐºÐ° 23"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 24 key"
-msgstr "Предмет 24 на горÑчей панели"
+msgstr "БыÑÑ‚Ñ€Ð°Ñ ÐºÐ½Ð¾Ð¿ÐºÐ° 24"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 25 key"
-msgstr "Предмет 25 на горÑчей панели"
+msgstr "БыÑÑ‚Ñ€Ð°Ñ ÐºÐ½Ð¾Ð¿ÐºÐ° 25"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 26 key"
-msgstr "Предмет 26 на горÑчей панели"
+msgstr "БыÑÑ‚Ñ€Ð°Ñ ÐºÐ½Ð¾Ð¿ÐºÐ° 26"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 27 key"
-msgstr "Предмет 27 на горÑчей панели"
+msgstr "БыÑÑ‚Ñ€Ð°Ñ ÐºÐ½Ð¾Ð¿ÐºÐ° 27"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 28 key"
-msgstr "Предмет 28 на горÑчей панели"
+msgstr "БыÑÑ‚Ñ€Ð°Ñ ÐºÐ½Ð¾Ð¿ÐºÐ° 28"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 29 key"
-msgstr "Предмет 29 на горÑчей панели"
+msgstr "БыÑÑ‚Ñ€Ð°Ñ ÐºÐ½Ð¾Ð¿ÐºÐ° 29"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 3 key"
-msgstr "Предмет 3 на горÑчей панели"
+msgstr "БыÑÑ‚Ñ€Ð°Ñ ÐºÐ½Ð¾Ð¿ÐºÐ° 3"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 30 key"
-msgstr "Предмет 30 на горÑчей панели"
+msgstr "БыÑÑ‚Ñ€Ð°Ñ ÐºÐ½Ð¾Ð¿ÐºÐ° 30"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 31 key"
-msgstr "Предмет 31 на горÑчей панели"
+msgstr "БыÑÑ‚Ñ€Ð°Ñ ÐºÐ½Ð¾Ð¿ÐºÐ° 31"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 32 key"
-msgstr "Предмет 32 на горÑчей панели"
+msgstr "БыÑÑ‚Ñ€Ð°Ñ ÐºÐ½Ð¾Ð¿ÐºÐ° 32"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 4 key"
-msgstr "Предмет 4 на горÑчей панели"
+msgstr "БыÑÑ‚Ñ€Ð°Ñ ÐºÐ½Ð¾Ð¿ÐºÐ° 4"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 5 key"
-msgstr "Предмет 5 на горÑчей панели"
+msgstr "БыÑÑ‚Ñ€Ð°Ñ ÐºÐ½Ð¾Ð¿ÐºÐ° 5"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 6 key"
-msgstr "Предмет 6 на горÑчей панели"
+msgstr "БыÑÑ‚Ñ€Ð°Ñ ÐºÐ½Ð¾Ð¿ÐºÐ° 6"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 7 key"
-msgstr "Предмет 7 на горÑчей панели"
+msgstr "БыÑÑ‚Ñ€Ð°Ñ ÐºÐ½Ð¾Ð¿ÐºÐ° 7"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 8 key"
-msgstr "Предмет 8 на горÑчей панели"
+msgstr "БыÑÑ‚Ñ€Ð°Ñ ÐºÐ½Ð¾Ð¿ÐºÐ° 8"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 9 key"
-msgstr "Предмет 9 на горÑчей панели"
+msgstr "БыÑÑ‚Ñ€Ð°Ñ ÐºÐ½Ð¾Ð¿ÐºÐ° 9"
#: src/settings_translation_file.cpp
msgid "How deep to make rivers."
-msgstr "Как глубоко делать реки."
+msgstr "ÐаÑколько глубоко делать реки."
#: src/settings_translation_file.cpp
msgid ""
@@ -3817,7 +4068,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "How wide to make rivers."
-msgstr "ÐаÑколько широкими делать реки."
+msgstr "ÐаÑколько широко делать реки."
#: src/settings_translation_file.cpp
msgid "Humidity blend noise"
@@ -3849,12 +4100,12 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"If disabled, \"special\" key is used to fly fast if both fly and fast mode "
-"are\n"
+"If disabled, \"Aux1\" key is used to fly fast if both fly and fast mode are\n"
"enabled."
msgstr ""
-"ЕÑли отключено, кнопка «ИÑпользовать» активирует быÑтрый полёт, еÑли "
-"одновременно включены режим быÑтрого Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ Ð¸ режим полёта."
+"ЕÑли отключено, кнопка \"Aux1\" иÑпользуетÑÑ Ð´Ð»Ñ Ð±Ñ‹Ñтрого полета, еÑли режим "
+"полёта и быÑтрый режим\n"
+"включены."
#: src/settings_translation_file.cpp
msgid ""
@@ -3881,12 +4132,13 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"If enabled, \"special\" key instead of \"sneak\" key is used for climbing "
-"down and\n"
+"If enabled, \"Aux1\" key instead of \"Sneak\" key is used for climbing down "
+"and\n"
"descending."
msgstr ""
-"ЕÑли включено, то Ð´Ð»Ñ ÑпуÑка (в воде или при полёте) будет задейÑтвована "
-"клавиша «ИÑпользовать», а не «КраÑтьÑÑ»."
+"ЕÑли включено, клавиша \"Aux1\" вмеÑто клавиши \"Sneak\" иÑпользуетÑÑ Ð´Ð»Ñ "
+"подъема вниз и\n"
+"ÑпуÑка."
#: src/settings_translation_file.cpp
msgid ""
@@ -3941,6 +4193,14 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"If the execution of a chat command takes longer than this specified time in\n"
+"seconds, add the time information to the chat command message"
+msgstr ""
+"ЕÑли выполнение команды чата занимает больше указанного времени в\n"
+"Ñекундах, добавьте информацию о времени в Ñообщение команды чата"
+
+#: src/settings_translation_file.cpp
+msgid ""
"If the file size of debug.txt exceeds the number of megabytes specified in\n"
"this setting when it is opened, the file is moved to debug.txt.1,\n"
"deleting an older debug.txt.1 if it exists.\n"
@@ -3992,7 +4252,7 @@ msgstr ""
"Обычно Ñто нужно тем, кто пишет код Ð´Ð»Ñ Ð´Ð²Ð¸Ð¶ÐºÐ°"
#: src/settings_translation_file.cpp
-msgid "Instrument chatcommands on registration."
+msgid "Instrument chat commands on registration."
msgstr "ВыполнÑть команды в чате при региÑтрации."
#: src/settings_translation_file.cpp
@@ -4082,7 +4342,7 @@ msgid "Joystick button repetition interval"
msgstr "Интервал повторного клика кнопкой джойÑтика"
#: src/settings_translation_file.cpp
-msgid "Joystick deadzone"
+msgid "Joystick dead zone"
msgstr "ÐœÐµÑ€Ñ‚Ð²Ð°Ñ Ð·Ð¾Ð½Ð° джойÑтика"
#: src/settings_translation_file.cpp
@@ -5107,11 +5367,6 @@ msgstr ""
"Включить завиÑимоÑть цвета тумана и облаков от времени Ñуток (раÑÑвет/закат)."
#: src/settings_translation_file.cpp
-msgid "Makes DirectX work with LuaJIT. Disable if it causes troubles."
-msgstr ""
-"ЗаÑтавлÑет DirectX работать Ñ LuaJIT. Отключите, еÑли Ñто вызывает проблемы."
-
-#: src/settings_translation_file.cpp
msgid "Makes all liquids opaque"
msgstr "Сделать вÑе жидкоÑти непрозрачными"
@@ -5202,6 +5457,11 @@ msgid "Map save interval"
msgstr "Интервал ÑÐ¾Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ ÐºÐ°Ñ€Ñ‚Ñ‹"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Map shadows update frames"
+msgstr "Ð’Ñ€ÐµÐ¼Ñ Ð¾Ð±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ ÐºÐ°Ñ€Ñ‚Ñ‹"
+
+#: src/settings_translation_file.cpp
msgid "Mapblock limit"
msgstr "Предел блока"
@@ -5311,6 +5571,10 @@ msgstr ""
"МакÑимальный FPS, когда окно не ÑфокуÑировано, или когда игра приоÑтановлена."
#: src/settings_translation_file.cpp
+msgid "Maximum distance to render shadows."
+msgstr "МакÑимальное раÑÑтоÑние Ð´Ð»Ñ Ð¾Ñ‚Ñ€Ð¸Ñовки теней."
+
+#: src/settings_translation_file.cpp
msgid "Maximum forceloaded blocks"
msgstr "МакÑимальное количеÑтво принудительно загруженных блоков"
@@ -5399,7 +5663,7 @@ msgid ""
msgstr ""
"МакÑимальное количеÑтво пакетов, отправлÑемых за шаг. ЕÑли у Ð²Ð°Ñ Ð¼ÐµÐ´Ð»ÐµÐ½Ð½Ð¾Ðµ "
"подключение,\n"
-"попробуйте уменьшить его, но не уÑтанавливайте ниже Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ ÐºÐ»Ð¸ÐµÐ½Ñ‚Ð°, "
+"попробуйте уменьшить его, но не уÑтанавливайте ниже Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ ÐºÐ»Ð¸ÐµÐ½Ñ‚Ð°,\n"
"умноженного на два."
#: src/settings_translation_file.cpp
@@ -5443,10 +5707,20 @@ msgstr ""
"0 Ð´Ð»Ñ Ð¾Ñ‚ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ð¾Ñ‡ÐµÑ€ÐµÐ´Ð¸ и -1 Ð´Ð»Ñ Ð½ÐµÐ¾Ð³Ñ€Ð°Ð½Ð¸Ñ‡ÐµÐ½Ð½Ð¾Ð³Ð¾ размера."
#: src/settings_translation_file.cpp
-msgid "Maximum time in ms a file download (e.g. a mod download) may take."
+msgid ""
+"Maximum time a file download (e.g. a mod download) may take, stated in "
+"milliseconds."
msgstr ""
-"МакÑимум времени (в миллиÑекундах), которое может занÑть загрузка (например, "
-"мода)."
+"МакÑимальное Ð²Ñ€ÐµÐ¼Ñ Ð·Ð°Ð³Ñ€ÑƒÐ·ÐºÐ¸ файла (например, загрузки мода), указанное в "
+"миллиÑекундах."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum time an interactive request (e.g. server list fetch) may take, "
+"stated in milliseconds."
+msgstr ""
+"МакÑимальное времÑ, которое может занÑть интерактивный Ð·Ð°Ð¿Ñ€Ð¾Ñ (например, "
+"получение ÑпиÑка Ñерверов), указываетÑÑ Ð² миллиÑекундах."
#: src/settings_translation_file.cpp
msgid "Maximum users"
@@ -5509,7 +5783,7 @@ msgid "Mod channels"
msgstr "Каналы модификаций"
#: src/settings_translation_file.cpp
-msgid "Modifies the size of the hudbar elements."
+msgid "Modifies the size of the HUD elements."
msgstr "ИзменÑет размер Ñлементов игрового интерфейÑа."
#: src/settings_translation_file.cpp
@@ -5521,6 +5795,11 @@ msgid "Monospace font size"
msgstr "Размер моноширинного шрифта"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Monospace font size divisible by"
+msgstr "Размер моноширинного шрифта"
+
+#: src/settings_translation_file.cpp
msgid "Mountain height noise"
msgstr "Шум выÑоты гор"
@@ -5662,9 +5941,10 @@ msgstr ""
"Ð”Ð»Ñ Ð±Ð¾Ð»ÑŒÑˆÐ¸Ð½Ñтва пользователей наилучшим значением может быть '1'."
#: src/settings_translation_file.cpp
+#, fuzzy
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"
+"This is a trade-off between SQLite transaction overhead and\n"
"memory consumption (4096=100MB, as a rule of thumb)."
msgstr ""
"КоличеÑтво дополнительных блоков, которые могут Ñразу быть загружены /"
@@ -5684,12 +5964,7 @@ msgstr "Ðепрозрачные жидкоÑти"
#: src/settings_translation_file.cpp
msgid ""
"Opaqueness (alpha) of the shadow behind the default font, between 0 and 255."
-msgstr "ÐепрозрачноÑть (альфа) тени позади шрифта по умолчанию, между 0 и 255."
-
-#: src/settings_translation_file.cpp
-msgid ""
-"Opaqueness (alpha) of the shadow behind the fallback font, between 0 and 255."
-msgstr "ÐепрозрачноÑть (альфа) тени за резервным шрифтом, между 0 и 255."
+msgstr "ПрозрачноÑть тени Ñзади Ñтандартного шрифта, между 0 и 255."
#: src/settings_translation_file.cpp
msgid ""
@@ -5701,10 +5976,13 @@ msgstr ""
"форма уже открыта."
#: src/settings_translation_file.cpp
+msgid "Optional override for chat weblink color."
+msgstr "ÐеобÑзательное переопределение цвета ÑÑылки в чате."
+
+#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
-"Path of the fallback font.\n"
-"If “freetype†setting is enabled: Must be a TrueType font.\n"
-"If “freetype†setting is disabled: Must be a bitmap or XML vectors font.\n"
+"Path of the fallback font. Must be a TrueType font.\n"
"This font will be used for certain languages or if the default font is "
"unavailable."
msgstr ""
@@ -5734,13 +6012,12 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Path to texture directory. All textures are first searched from here."
msgstr ""
-"Путь до каталога Ñ Ñ‚ÐµÐºÑтурами. Ð’Ñе текÑтуры в первую очередь берутÑÑ Ð¾Ñ‚ Ñюда."
+"Путь к директории Ñ Ñ‚ÐµÐºÑтурами. Ð’Ñе текÑтуры в первую очередь берутÑÑ Ð¾Ñ‚Ñюда."
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
-"Path to the default font.\n"
-"If “freetype†setting is enabled: Must be a TrueType font.\n"
-"If “freetype†setting is disabled: Must be a bitmap or XML vectors font.\n"
+"Path to the default font. Must be a TrueType font.\n"
"The fallback font will be used if the font cannot be loaded."
msgstr ""
"Путь к шрифту по умолчанию.\n"
@@ -5750,10 +6027,9 @@ msgstr ""
"Резервный шрифт будет иÑпользоватьÑÑ, еÑли шрифт не может быть загружен."
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
-"Path to the monospace font.\n"
-"If “freetype†setting is enabled: Must be a TrueType font.\n"
-"If “freetype†setting is disabled: Must be a bitmap or XML vectors font.\n"
+"Path to the monospace font. Must be a TrueType font.\n"
"This font is used for e.g. the console and profiler screen."
msgstr ""
"Путь к моноширинному шрифту.\n"
@@ -5788,7 +6064,7 @@ msgstr "Режим Ð´Ð²Ð¸Ð¶ÐµÐ½Ð¸Ñ Ð²Ð½Ð¸Ð·/вверх по направленÐ
#: src/settings_translation_file.cpp
msgid "Place key"
-msgstr "Клавиша «РазмеÑтить»"
+msgstr "Клавиша положить"
#: src/settings_translation_file.cpp
msgid "Place repetition interval"
@@ -5815,6 +6091,10 @@ msgid "Player versus player"
msgstr "Режим «Игрок против игрока» (PvP)"
#: src/settings_translation_file.cpp
+msgid "Poisson filtering"
+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."
@@ -5867,11 +6147,12 @@ msgid "Prometheus listener address"
msgstr "Ð°Ð´Ñ€ÐµÑ Ð¿Ñ€Ð¸Ñ‘Ð¼Ð½Ð¸ÐºÐ° Prometheus"
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
"Prometheus listener address.\n"
-"If minetest is compiled with ENABLE_PROMETHEUS option enabled,\n"
+"If Minetest is compiled with ENABLE_PROMETHEUS option enabled,\n"
"enable metrics listener for Prometheus on that address.\n"
-"Metrics can be fetch on http://127.0.0.1:30000/metrics"
+"Metrics can be fetched on http://127.0.0.1:30000/metrics"
msgstr ""
"ÐÐ´Ñ€ÐµÑ Ð¿Ñ€Ð¸Ñ‘Ð¼Ð½Ð¸ÐºÐ° Prometheus.\n"
"ЕÑли мой теÑÑ‚ Ñкомпилирован Ñ Ð²ÐºÐ»ÑŽÑ‡ÐµÐ½Ð½Ð¾Ð¹ опцией ENABLE_PROMETHEUS,\n"
@@ -5909,7 +6190,7 @@ msgstr "Ðедавние ÑÐ¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ñ‡Ð°Ñ‚Ð°"
#: src/settings_translation_file.cpp
msgid "Regular font path"
-msgstr "Стандартный путь шрифта"
+msgstr "Путь к обычному шрифту"
#: src/settings_translation_file.cpp
msgid "Remote media"
@@ -6050,9 +6331,9 @@ msgstr ""
"МаÑштабировать интерфейÑ, иÑÐ¿Ð¾Ð»ÑŒÐ·ÑƒÑ Ð·Ð°Ð´Ð°Ð½Ð½Ð¾Ðµ пользователем значение.\n"
"ИÑпользовать метод ближайшего ÑоÑеда и антиалиаÑинг, чтобы маÑштабировать "
"интерфейÑ.\n"
-"Это Ñгладит некоторые оÑтрые углы и Ñмешает пикÑели при уменьшении маÑштаба "
-"за Ñчёт\n"
-"Ñ€Ð°Ð·Ð¼Ñ‹Ð²Ð°Ð½Ð¸Ñ Ð¿Ð¸ÐºÑелей на гранÑÑ… при маÑштабировании на нецелые размеры."
+"Это Ñгладит некоторые оÑтрые углы и Ñмешает\n"
+"пикÑели при уменьшении маÑштаба за Ñчёт размываниÑ\n"
+"пикÑелей на гранÑÑ… при маÑштабировании на нецелые размеры."
#: src/settings_translation_file.cpp
msgid "Screen height"
@@ -6212,6 +6493,45 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Set the shadow strength.\n"
+"Lower value means lighter shadows, higher value means darker shadows."
+msgstr ""
+"УÑтановите Ñилу тени.\n"
+"Меньшее значение означает более Ñветлые тени, большее значение означает "
+"более тёмные тени."
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid ""
+"Set the soft shadow radius size.\n"
+"Lower values mean sharper shadows, bigger values mean softer shadows.\n"
+"Minimum value: 1.0; maximum value: 10.0"
+msgstr ""
+"УÑтановить размер радиуÑа мÑгкой тени.\n"
+"Меньшие Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð¾Ð·Ð½Ð°Ñ‡Ð°ÑŽÑ‚ более резкие тени, большие Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð±Ð¾Ð»ÐµÐµ мÑгкие.\n"
+"Минимальное значение 1,0 и макÑимальное 10,0"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid ""
+"Set the tilt of Sun/Moon orbit in degrees.\n"
+"Value of 0 means no tilt / vertical orbit.\n"
+"Minimum value: 0.0; maximum value: 60.0"
+msgstr ""
+"УÑтановка наклона орбиты Солнца/Луны в градуÑах.\n"
+"Значение 0 означает отÑутÑтвие наклона / вертикальную орбиту.\n"
+"Минимальное значение 0.0 и макÑимальное значение 60.0"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set to true to enable Shadow Mapping.\n"
+"Requires shaders to be enabled."
+msgstr ""
+"УÑтановка в true включает покачивание лиÑтвы.\n"
+"Требует, чтобы шейдеры были включены."
+
+#: src/settings_translation_file.cpp
+msgid ""
"Set to true to enable waving leaves.\n"
"Requires shaders to be enabled."
msgstr ""
@@ -6235,6 +6555,16 @@ msgstr ""
"Требует, чтобы шейдеры были включены."
#: src/settings_translation_file.cpp
+msgid ""
+"Sets shadow texture quality to 32 bits.\n"
+"On false, 16 bits texture will be used.\n"
+"This can cause much more artifacts in the shadow."
+msgstr ""
+"УÑтанавливает качеÑтво текÑтуры тени в 32 бита.\n"
+"При значении false будет иÑпользоватьÑÑ 16-Ð±Ð¸Ñ‚Ð½Ð°Ñ Ñ‚ÐµÐºÑтура.\n"
+"Это может вызвать гораздо больше артефактов в тени."
+
+#: src/settings_translation_file.cpp
msgid "Shader path"
msgstr "Путь к шейдерам"
@@ -6246,10 +6576,27 @@ msgid ""
"This only works with the OpenGL video backend."
msgstr ""
"Шейдеры позволÑÑŽÑ‚ иÑпользовать дополнительные визуальные Ñффекты и могут "
-"увеличить производительноÑть на некоторых видеокартах.\n"
+"увеличить\n"
+"производительноÑть на некоторых видеокартах.\n"
"Работают только Ñ Ð²Ð¸Ð´ÐµÐ¾-бÑкендом OpenGL."
#: src/settings_translation_file.cpp
+msgid "Shadow filter quality"
+msgstr "КачеÑтво теневого фильтра"
+
+#: src/settings_translation_file.cpp
+msgid "Shadow map max distance in nodes to render shadows"
+msgstr "МакÑимальное раÑÑтоÑние карты теней в узлах Ð´Ð»Ñ Ñ€ÐµÐ½Ð´ÐµÑ€Ð¸Ð½Ð³Ð° теней"
+
+#: src/settings_translation_file.cpp
+msgid "Shadow map texture in 32 bits"
+msgstr "ТекÑтура карты теней в 32 битах"
+
+#: src/settings_translation_file.cpp
+msgid "Shadow map texture size"
+msgstr "Размер текÑтуры карты теней"
+
+#: src/settings_translation_file.cpp
msgid ""
"Shadow offset (in pixels) of the default font. If 0, then shadow will not be "
"drawn."
@@ -6258,12 +6605,8 @@ msgstr ""
"будет показана."
#: src/settings_translation_file.cpp
-msgid ""
-"Shadow offset (in pixels) of the fallback font. If 0, then shadow will not "
-"be drawn."
-msgstr ""
-"Смещение тени резервного шрифта (в пикÑелÑÑ…). ЕÑли указан 0, то тень не "
-"будет показана."
+msgid "Shadow strength"
+msgstr "Сила тени"
#: src/settings_translation_file.cpp
msgid "Shape of the minimap. Enabled = round, disabled = square."
@@ -6286,7 +6629,8 @@ msgstr ""
"Требует перезапуÑка поÑле изменениÑ."
#: src/settings_translation_file.cpp
-msgid "Show nametag backgrounds by default"
+#, fuzzy
+msgid "Show name tag backgrounds by default"
msgstr "Отображать фон у табличек Ñ Ð¸Ð¼ÐµÐ½Ð°Ð¼Ð¸"
#: src/settings_translation_file.cpp
@@ -6323,6 +6667,10 @@ msgstr ""
"из оÑновного потока игры, тем Ñамым ÑƒÐ¼ÐµÐ½ÑŒÑˆÐ°Ñ ÐºÐ¾Ð»ÐµÐ±Ð°Ð½Ð¸Ñ ÐºÐ°Ð´Ñ€Ð¾Ð²Ð¾Ð¹ чаÑтоты."
#: src/settings_translation_file.cpp
+msgid "Sky Body Orbit Tilt"
+msgstr "Ðаклон орбиты небеÑного тела"
+
+#: src/settings_translation_file.cpp
msgid "Slice w"
msgstr "Разрез w"
@@ -6381,16 +6729,12 @@ msgid "Sneaking speed, in nodes per second."
msgstr "СкороÑть ходьбы украдкой в нодах в Ñекунду."
#: src/settings_translation_file.cpp
-msgid "Sound"
-msgstr "Звук"
+msgid "Soft shadow radius"
+msgstr "Ð Ð°Ð´Ð¸ÑƒÑ Ð¼Ñгкой тени"
#: src/settings_translation_file.cpp
-msgid "Special key"
-msgstr "Клавиша иÑпользовать"
-
-#: src/settings_translation_file.cpp
-msgid "Special key for climbing/descending"
-msgstr "Клавиша «ИÑпользовать» Ð´Ð»Ñ ÑпуÑка"
+msgid "Sound"
+msgstr "Звук"
#: src/settings_translation_file.cpp
msgid ""
@@ -6417,6 +6761,19 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Spread a complete update of shadow map over given amount of frames.\n"
+"Higher values might make shadows laggy, lower values\n"
+"will consume more resources.\n"
+"Minimum value: 1; maximum value: 16"
+msgstr ""
+"РаÑпроÑтранÑет полное обновление карты теней на заданное количеÑтво кадров.\n"
+"Более выÑокие Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð¼Ð¾Ð³ÑƒÑ‚ Ñделать тени неÑтабильными, более низкие "
+"значениÑ\n"
+"будут потреблÑть больше реÑурÑов.\n"
+"Минимальное значение: 1; макÑимальное значение: 16"
+
+#: src/settings_translation_file.cpp
+msgid ""
"Spread of light curve boost range.\n"
"Controls the width of the range to be boosted.\n"
"Standard deviation of the light curve boost Gaussian."
@@ -6549,6 +6906,17 @@ msgid "Texture path"
msgstr "Путь к текÑтурам"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid ""
+"Texture size to render the shadow map on.\n"
+"This must be a power of two.\n"
+"Bigger numbers create better shadows but it is also more expensive."
+msgstr ""
+"Размер текÑтуры Ð´Ð»Ñ Ñ€ÐµÐ½Ð´ÐµÑ€Ð¸Ð½Ð³Ð° карты теней.\n"
+"Это должно быть чиÑло, кратное двум.\n"
+"Большие чиÑла Ñоздают более качеÑтвенные тени, но они и более дорогие."
+
+#: src/settings_translation_file.cpp
msgid ""
"Textures on a node may be aligned either to the node or to the world.\n"
"The former mode suits better things like machines, furniture, etc., while\n"
@@ -6571,7 +6939,8 @@ msgid "The URL for the content repository"
msgstr "ÐÐ´Ñ€ÐµÑ Ñетевого репозиториÑ"
#: src/settings_translation_file.cpp
-msgid "The deadzone of the joystick"
+#, fuzzy
+msgid "The dead zone of the joystick"
msgstr "ÐœÐµÑ€Ñ‚Ð²Ð°Ñ Ð·Ð¾Ð½Ð° джойÑтика"
#: src/settings_translation_file.cpp
@@ -6650,24 +7019,26 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"The rendering back-end for Irrlicht.\n"
+"The rendering back-end.\n"
"A restart is required after changing this.\n"
"Note: On Android, stick with OGLES1 if unsure! App may fail to start "
"otherwise.\n"
"On other platforms, OpenGL is recommended.\n"
"Shaders are supported by OpenGL (desktop only) and OGLES2 (experimental)"
msgstr ""
-"Программный Ð¸Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ Ð²Ð¸Ð·ÑƒÐ°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ð¸ Ð´Ð»Ñ Irrlicht.\n"
-"ПоÑле Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ñтого параметра потребуетÑÑ Ð¿ÐµÑ€ÐµÐ·Ð°Ð¿ÑƒÑк.\n"
-"Примечание: ЕÑли не уверены, иÑпользуйте OGLES1 Ð´Ð»Ñ Android, иначе\n"
-"приложение может не запуÑтитьÑÑ. Ðа других платформах рекомендуетÑÑ\n"
-"OpenGL. Шейдеры поддерживаютÑÑ OpenGL (только на деÑктопах) и OGLES2 "
-"(ÑкÑпериментально)"
+"БÑкÑнд рендеринга.\n"
+"ПоÑле Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ñтого параметра требуетÑÑ Ð¿ÐµÑ€ÐµÐ·Ð°Ð³Ñ€ÑƒÐ·ÐºÐ°.\n"
+"Примечание: Ðа Android, еÑли вы не уверены, иÑпользуйте OGLES1! Ð’ противном "
+"Ñлучае приложение может не запуÑтитьÑÑ.\n"
+"Ðа других платформах рекомендуетÑÑ Ð¸Ñпользовать OpenGL.\n"
+"Шейдеры поддерживаютÑÑ OpenGL (только Ð´Ð»Ñ Ð½Ð°Ñтольных компьютеров) и OGLES2 "
+"(ÑкÑпериментальный)"
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
"The sensitivity of the joystick axes for moving the\n"
-"ingame view frustum around."
+"in-game view frustum around."
msgstr ""
"ЧувÑтвительноÑть оÑей джойÑтика Ð´Ð»Ñ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ\n"
"взглÑда в игре."
@@ -6716,8 +7087,8 @@ msgid ""
"The time in seconds it takes between repeated node placements when holding\n"
"the place button."
msgstr ""
-"Задержка перед повторным размещением блока в Ñекундах\n"
-"при удержании клавиши размещениÑ"
+"Задержка перед повторным размещением ноды в Ñекундах\n"
+"при удержании клавиши размещениÑ."
#: src/settings_translation_file.cpp
msgid "The type of joystick"
@@ -6791,6 +7162,10 @@ msgid "Touch screen threshold"
msgstr "Порог ÑенÑорного Ñкрана"
#: src/settings_translation_file.cpp
+msgid "Tradeoffs for performance"
+msgstr "КомпромиÑÑÑ‹ Ð´Ð»Ñ Ð¿Ñ€Ð¾Ð¸Ð·Ð²Ð¾Ð´Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð¾Ñти"
+
+#: src/settings_translation_file.cpp
msgid "Trees noise"
msgstr "Шум деревьев"
@@ -6869,14 +7244,15 @@ msgid "Use bilinear filtering when scaling textures."
msgstr "ИÑпользовать билинейную фильтрацию Ð´Ð»Ñ Ð¼Ð°ÑÑˆÑ‚Ð°Ð±Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ñ‚ÐµÐºÑтур."
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
-"Use mip mapping to scale textures. May slightly increase performance,\n"
+"Use mipmapping to scale textures. May slightly increase performance,\n"
"especially when using a high resolution texture pack.\n"
"Gamma correct downscaling is not supported."
msgstr ""
-"ИÑпользовать MIP-текÑтурирование Ð´Ð»Ñ Ð¼Ð°ÑÑˆÑ‚Ð°Ð±Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ñ‚ÐµÐºÑтур.\n"
-"Может немного увеличить производительноÑть, оÑобенно при\n"
-"иÑпользовании пакета текÑтур выÑокого разрешениÑ.\n"
+"ИÑпользовать MIP-текÑтурирование Ð´Ð»Ñ Ð¼Ð°ÑÑˆÑ‚Ð°Ð±Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ñ‚ÐµÐºÑтур. Может немного "
+"увеличить производительноÑть,\n"
+"оÑобенно при иÑпользовании пакета текÑтур выÑокого разрешениÑ.\n"
"Гамма-ÐºÐ¾Ñ€Ñ€ÐµÐºÑ†Ð¸Ñ Ð¿Ñ€Ð¸ уменьшении маÑштаба не поддерживаетÑÑ."
#: src/settings_translation_file.cpp
@@ -7000,8 +7376,8 @@ msgid "Viewing range"
msgstr "ДиÑÑ‚Ð°Ð½Ñ†Ð¸Ñ Ð¾Ñ‚Ñ€Ð¸Ñовки"
#: src/settings_translation_file.cpp
-msgid "Virtual joystick triggers aux button"
-msgstr "Ð”Ð¾Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð°Ñ ÐºÐ½Ð¾Ð¿ÐºÐ° триггеров виртуального джойÑтика"
+msgid "Virtual joystick triggers Aux1 button"
+msgstr "Виртуальный джойÑтик нажимает кнопку Aux1"
#: src/settings_translation_file.cpp
msgid "Volume"
@@ -7013,7 +7389,7 @@ msgid ""
"Requires the sound system to be enabled."
msgstr ""
"ГромкоÑть вÑех звуков.\n"
-"ТребуетÑÑ Ð²ÐºÐ»ÑŽÑ‡Ð¸Ñ‚ÑŒ звуковую ÑиÑтему."
+"Требует включенной звуковой ÑиÑтемы."
#: src/settings_translation_file.cpp
msgid ""
@@ -7073,13 +7449,18 @@ msgstr "СкороÑть волн волниÑтых жидкоÑтей"
#: src/settings_translation_file.cpp
msgid "Waving liquids wavelength"
-msgstr "Длина волн волниÑтых жидкоÑтей"
+msgstr "Длина волн на воде"
#: src/settings_translation_file.cpp
msgid "Waving plants"
msgstr "Покачивание раÑтений"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Weblink color"
+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"
@@ -7104,41 +7485,36 @@ msgstr ""
"правильно поддерживают загрузку текÑтур Ñ Ð°Ð¿Ð¿Ð°Ñ€Ð°Ñ‚Ð½Ð¾Ð³Ð¾ обеÑпечениÑ."
#: src/settings_translation_file.cpp
+#, fuzzy
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.\n"
+"memory. Powers of 2 are recommended. This setting is ONLY applied if\n"
+"bilinear/trilinear/anisotropic filtering is enabled.\n"
"This is also used as the base node texture size for world-aligned\n"
"texture autoscaling."
msgstr ""
-"При иÑпользовании билинейного, трилинейного или анизотропного фильтра\n"
-"текÑтуры Ñ Ð½Ð¸Ð·ÐºÐ¸Ð¼ разрешением могут быть размыты, поÑтому проиÑходит\n"
-"автоматичеÑкое маÑштабирование их Ñ Ð¸Ð½Ñ‚ÐµÑ€Ð¿Ð¾Ð»Ñцией по ближайшим ÑоÑедÑм,\n"
-"чтобы Ñохранить чёткие пикÑели. Этот параметр определÑет минимальный\n"
-"размер Ð´Ð»Ñ ÑƒÐ²ÐµÐ»Ð¸Ñ‡ÐµÐ½Ð½Ñ‹Ñ… текÑтур. При выÑоких значениÑÑ… отображение более\n"
-"чёткое, но требует больше памÑти. РекомендуетÑÑ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ðµ 2. УÑтановка Ñтого\n"
-"Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð²Ñ‹ÑˆÐµ 1 может не иметь видимого Ñффекта, еÑли не включена \n"
-"билинейнаÑ, Ñ‚Ñ€Ð¸Ð»Ð¸Ð½ÐµÐ¹Ð½Ð°Ñ Ð¸Ð»Ð¸ Ð°Ð½Ð¸Ð·Ð¾Ñ‚Ñ€Ð¾Ð¿Ð½Ð°Ñ Ñ„Ð¸Ð»ÑŒÑ‚Ñ€Ð°Ñ†Ð¸Ñ.\n"
-"Также иÑпользуетÑÑ ÐºÐ°Ðº размер базовой текÑтуры ноды Ð´Ð»Ñ Ð¼Ð¸Ñ€Ð¾Ð²Ð¾Ð³Ð¾\n"
-"автомаÑÑˆÑ‚Ð°Ð±Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ñ‚ÐµÐºÑтур."
-
-#: src/settings_translation_file.cpp
-msgid ""
-"Whether FreeType fonts are used, requires FreeType support to be compiled "
-"in.\n"
-"If disabled, bitmap and XML vectors fonts are used instead."
-msgstr ""
-"ИÑпользовать ли шрифты FreeType. Поддержка FreeType должна быть включена при "
-"Ñборке.\n"
-"ЕÑли отключено, иÑпользуютÑÑ Ñ€Ð°Ñтровые и XML-векторные изображениÑ."
+"При иÑпользовании билинейных/трилинейных/анизотропных фильтров текÑтуры Ñ "
+"низким разрешением\n"
+"могут быть размыты, поÑтому автоматичеÑки повышайте их маÑштаб Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ "
+"ближайших ÑоÑедей\n"
+"интерполÑцией, чтобы Ñохранить чёткие пикÑели. ЗдеÑÑŒ задаетÑÑ Ð¼Ð¸Ð½Ð¸Ð¼Ð°Ð»ÑŒÐ½Ñ‹Ð¹ "
+"размер текÑтуры\n"
+"Ð´Ð»Ñ ÑƒÐ²ÐµÐ»Ð¸Ñ‡ÐµÐ½Ð½Ñ‹Ñ… текÑтур; более выÑокие Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð²Ñ‹Ð³Ð»ÑдÑÑ‚ более чёткими, но "
+"требуют больше\n"
+"памÑти. РекомендуетÑÑ Ð¸Ñпользовать значениÑ, кратные 2. Эта наÑтройка "
+"применÑетÑÑ Ð¢ÐžÐ›Ð¬ÐšÐž в том Ñлучае, еÑли\n"
+"включена билинейнаÑ/трилинейнаÑ/Ð°Ð½Ð¸Ð·Ð¾Ñ‚Ñ€Ð¾Ð¿Ð½Ð°Ñ Ñ„Ð¸Ð»ÑŒÑ‚Ñ€Ð°Ñ†Ð¸Ñ.\n"
+"Это значение также иÑпользуетÑÑ Ð² качеÑтве базового размера текÑтуры узла "
+"Ð´Ð»Ñ Ð°Ð²Ñ‚Ð¾Ð¼Ð°ÑÑˆÑ‚Ð°Ð±Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ñ‚ÐµÐºÑтур Ñ Ð²Ñ‹Ñ€Ð°Ð²Ð½Ð¸Ð²Ð°Ð½Ð¸ÐµÐ¼ по миру\n"
+"автомаÑÑˆÑ‚Ð°Ð±Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ñ‚ÐµÐºÑтуры."
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
-"Whether nametag backgrounds should be shown by default.\n"
+"Whether name tag backgrounds should be shown by default.\n"
"Mods may still set a background."
msgstr ""
"Должен ли отображатьÑÑ Ñ„Ð¾Ð½ бирки по умолчанию.\n"
@@ -7181,10 +7557,11 @@ msgid ""
"In-game, you can toggle the mute state with the mute key or by using the\n"
"pause menu."
msgstr ""
-"Отключить ли звуки. Ð’Ñ‹ можете включить звуки в любое времÑ, еÑли \n"
-"Ð·Ð²ÑƒÐºÐ¾Ð²Ð°Ñ ÑиÑтема не отключена (enable_sound=false). \n"
-"Ð’ игре, вы можете отключить их Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ клавиши mute\n"
-"или Ð²Ñ‹Ð·Ñ‹Ð²Ð°Ñ Ð¼ÐµÐ½ÑŽ паузы."
+"Ðужно ли выключить звуки? Ð’Ñ‹ можете включить звуки в любое времÑ, еÑли\n"
+"Ð·Ð²ÑƒÐºÐ¾Ð²Ð°Ñ ÑиÑтема не отключена (enable_sound=false).\n"
+"Внутри игры, вы можете включить режим Ð¾Ñ‚ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ð·Ð²ÑƒÐºÐ¾Ð², нажав на клавишу "
+"Ð¾Ñ‚ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ð·Ð²ÑƒÐºÐ¾Ð² или иÑпользуÑ\n"
+"меню паузы."
#: src/settings_translation_file.cpp
msgid ""
@@ -7192,8 +7569,10 @@ msgid ""
msgstr "Показывать данные отладки (аналогично нажатию F5)."
#: src/settings_translation_file.cpp
-msgid "Width component of the initial window size."
-msgstr "Ширина компонента начального размера окна."
+msgid "Width component of the initial window size. Ignored in fullscreen mode."
+msgstr ""
+"Компонент ширины начального размера окна. ИгнорируетÑÑ Ð² полноÑкранном "
+"режиме."
#: src/settings_translation_file.cpp
msgid "Width of the selection box lines around nodes."
@@ -7230,13 +7609,14 @@ msgid ""
"See also texture_min_size.\n"
"Warning: This option is EXPERIMENTAL!"
msgstr ""
-"Выровненные по миру текÑтуры можно маÑштабировать так, чтобы они\n"
-"охватывали неÑколько нод. Ðо Ñервер может не отправить нужный\n"
-"маÑштаб, оÑобенно еÑли вы иÑпользуете Ñпециально разработанный\n"
-"пакет текÑтур; Ñ Ñтим параметром клиент пытаетÑÑ Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»Ð¸Ñ‚ÑŒ маÑштаб\n"
-"автоматичеÑки на оÑновании размера текÑтуры.\n"
-"Смотрите также texture_min_size.\n"
-"Внимание: Этот параметр ЭКСПЕРИМЕÐТÐЛЬÐЫЙ!"
+"ТекÑтуры Ñ Ð²Ñ‹Ñ€Ð°Ð²Ð½Ð¸Ð²Ð°Ð½Ð¸ÐµÐ¼ по миру могут быть маÑштабированы так, чтобы "
+"охватить неÑколько узлов. Однако,\n"
+"Ñервер может не передать нужный маÑштаб, оÑобенно еÑли вы иÑпользуете\n"
+"Ñпециально разработанный пакет текÑтур; при иÑпользовании Ñтой опции клиент "
+"пытаетÑÑ\n"
+"определить маÑштаб автоматичеÑки, оÑновываÑÑÑŒ на размере текÑтуры.\n"
+"См. также texture_min_size.\n"
+"Предупреждение: Эта Ð¾Ð¿Ñ†Ð¸Ñ ÑвлÑетÑÑ Ð­ÐšÐ¡ÐŸÐ•Ð Ð˜ÐœÐ•ÐТÐЛЬÐОЙ!"
#: src/settings_translation_file.cpp
msgid "World-aligned textures mode"
@@ -7295,45 +7675,22 @@ msgid "Y-level of seabed."
msgstr "Y-уровень морÑкого дна."
#: src/settings_translation_file.cpp
-msgid ""
-"ZLib compression level to use when saving mapblocks to disk.\n"
-"-1 - Zlib's default compression level\n"
-"0 - no compresson, fastest\n"
-"9 - best compression, slowest\n"
-"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)"
-msgstr ""
-"Уровень ÑÐ¶Ð°Ñ‚Ð¸Ñ ZLib Ð´Ð»Ñ Ð¸ÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¿Ñ€Ð¸ Ñохранении картографичеÑких блоков "
-"на диÑке.\n"
-"-1 - уровень ÑÐ¶Ð°Ñ‚Ð¸Ñ Zlib по умолчанию\n"
-"0 - без компреÑÑора, Ñамый быÑтрый\n"
-"9 - лучшее Ñжатие, Ñамое медленное\n"
-"(уровни 1-3 иÑпользуют \"быÑтрый\" метод Zlib, 4-9 иÑпользуют обычный метод)"
-
-#: src/settings_translation_file.cpp
-msgid ""
-"ZLib compression level to use when sending mapblocks to the client.\n"
-"-1 - Zlib's default compression level\n"
-"0 - no compresson, fastest\n"
-"9 - best compression, slowest\n"
-"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)"
-msgstr ""
-"Уровень ÑÐ¶Ð°Ñ‚Ð¸Ñ ZLib Ð´Ð»Ñ Ð¸ÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¿Ñ€Ð¸ отправке блоков карты клиенту.\n"
-"-1 - уровень ÑÐ¶Ð°Ñ‚Ð¸Ñ Zlib по умолчанию\n"
-"0 - без компреÑÑора, Ñамый быÑтрый\n"
-"9 - лучшее Ñжатие, Ñамое медленное\n"
-"(уровни 1-3 иÑпользуют \"быÑтрый\" метод Zlib, 4-9 иÑпользуют обычный метод)"
-
-#: src/settings_translation_file.cpp
msgid "cURL file download timeout"
msgstr "Тайм-аут загрузки файла Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ cURL"
#: src/settings_translation_file.cpp
+msgid "cURL interactive timeout"
+msgstr "Интерактивный таймаут cURL"
+
+#: src/settings_translation_file.cpp
msgid "cURL parallel limit"
msgstr "Лимит одновременных Ñоединений cURL"
-#: src/settings_translation_file.cpp
-msgid "cURL timeout"
-msgstr "cURL тайм-аут"
+#~ msgid "- Creative Mode: "
+#~ msgstr "- Режим творчеÑтва: "
+
+#~ msgid "- Damage: "
+#~ msgstr "- Урон: "
#~ msgid ""
#~ "0 = parallax occlusion with slope information (faster).\n"
@@ -7342,6 +7699,9 @@ msgstr "cURL тайм-аут"
#~ "0 = ÐŸÐ°Ñ€Ð°Ð»Ð»Ð°ÐºÑ Ð¾ÐºÐºÐ»ÑŽÐ·Ð¸Ð¸ Ñ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸ÐµÐ¹ о Ñклоне (быÑтро).\n"
#~ "1 = Рельефный маппинг (медленно, но качеÑтвенно)."
+#~ msgid "Address / Port"
+#~ msgstr "ÐÐ´Ñ€ÐµÑ / Порт"
+
#~ msgid ""
#~ "Adjust the gamma encoding for the light tables. Higher numbers are "
#~ "brighter.\n"
@@ -7360,6 +7720,9 @@ msgstr "cURL тайм-аут"
#~ msgid "Back"
#~ msgstr "Ðазад"
+#~ msgid "Bits per pixel (aka color depth) in fullscreen mode."
+#~ msgstr "Бит на пикÑель (глубина цвета) в полноÑкранном режиме."
+
#~ msgid "Bump Mapping"
#~ msgstr "Бампмаппинг"
@@ -7401,13 +7764,26 @@ msgstr "cURL тайм-аут"
#~ "Контролирует ширину тоннелей. Меньшие Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ñоздают более широкие "
#~ "тоннели."
+#~ msgid "Credits"
+#~ msgstr "БлагодарноÑти"
+
#~ msgid "Crosshair color (R,G,B)."
#~ msgstr "Цвет перекреÑÑ‚Ð¸Ñ (R,G,B)."
+#~ msgid "Damage enabled"
+#~ msgstr "Урон включён"
+
#~ msgid "Darkness sharpness"
#~ msgstr "РезкоÑть темноты"
#~ msgid ""
+#~ "Default timeout for cURL, stated in milliseconds.\n"
+#~ "Only has an effect if compiled with cURL."
+#~ msgstr ""
+#~ "Стандартный тайм-аут Ð´Ð»Ñ cURL, заданный в миллиÑекундах.\n"
+#~ "Работает только на Ñборках Ñ cURL."
+
+#~ msgid ""
#~ "Defines areas of floatland smooth terrain.\n"
#~ "Smooth floatlands occur when noise > 0."
#~ msgstr ""
@@ -7476,6 +7852,15 @@ msgstr "cURL тайм-аут"
#~ msgid "FPS in pause menu"
#~ msgstr "ÐšÐ°Ð´Ñ€Ð¾Ð²Ð°Ñ Ñ‡Ð°Ñтота во Ð²Ñ€ÐµÐ¼Ñ Ð¿Ð°ÑƒÐ·Ñ‹"
+#~ msgid "Fallback font shadow"
+#~ msgstr "Тень резервного шрифта"
+
+#~ msgid "Fallback font shadow alpha"
+#~ msgstr "ПрозрачноÑть тени резервного шрифта"
+
+#~ msgid "Fallback font size"
+#~ msgstr "Размер резервного шрифта"
+
#~ msgid "Floatland base height noise"
#~ msgstr "Шум базовой выÑоты парÑщих оÑтровов"
@@ -7485,6 +7870,15 @@ msgstr "cURL тайм-аут"
#~ msgid "Font shadow alpha (opaqueness, between 0 and 255)."
#~ msgstr "ПрозрачноÑть тени шрифта (непрозрачноÑть от 0 до 255)."
+#~ msgid "Font size of the fallback font in point (pt)."
+#~ msgstr "Размер резервного шрифта в пунктах (pt)."
+
+#~ msgid "FreeType fonts"
+#~ msgstr "Шрифты FreeType"
+
+#~ msgid "Full screen BPP"
+#~ msgstr "Глубина цвета в полноÑкранном режиме"
+
#~ msgid "Gamma"
#~ msgstr "Гамма"
@@ -7494,9 +7888,15 @@ msgstr "cURL тайм-аут"
#~ msgid "Generate normalmaps"
#~ msgstr "Генерировать карты нормалей"
+#~ msgid "High-precision FPU"
+#~ msgstr "Ð’Ñ‹Ñокоточный FPU"
+
#~ msgid "IPv6 support."
#~ msgstr "Поддержка IPv6."
+#~ msgid "Install: file: \"$1\""
+#~ msgstr "УÑтановка мода: файл \"$1\""
+
#~ msgid "Lava depth"
#~ msgstr "Глубина лавы"
@@ -7512,6 +7912,11 @@ msgstr "cURL тайм-аут"
#~ msgid "Main menu style"
#~ msgstr "Стиль главного меню"
+#~ msgid "Makes DirectX work with LuaJIT. Disable if it causes troubles."
+#~ msgstr ""
+#~ "ЗаÑтавлÑет DirectX работать Ñ LuaJIT. Отключите, еÑли Ñто вызывает "
+#~ "проблемы."
+
#~ msgid "Minimap in radar mode, Zoom x2"
#~ msgstr "Миникарта в режиме радара, увеличение x2"
@@ -7524,6 +7929,9 @@ msgstr "cURL тайм-аут"
#~ msgid "Minimap in surface mode, Zoom x4"
#~ msgstr "Миникарта в поверхноÑтном режиме, увеличение x4"
+#~ msgid "Name / Password"
+#~ msgstr "Ð˜Ð¼Ñ / Пароль"
+
#~ msgid "Name/Password"
#~ msgstr "ИмÑ/Пароль"
@@ -7542,6 +7950,11 @@ msgstr "cURL тайм-аут"
#~ msgid "Ok"
#~ msgstr "Oк"
+#~ msgid ""
+#~ "Opaqueness (alpha) of the shadow behind the fallback font, between 0 and "
+#~ "255."
+#~ msgstr "ÐепрозрачноÑть (альфа) тени за резервным шрифтом, между 0 и 255."
+
#~ msgid "Overall bias of parallax occlusion effect, usually scale/2."
#~ msgstr "Общее Ñмещение Ñффекта Parallax Occlusion, обычно маÑштаб/2."
@@ -7578,15 +7991,42 @@ msgstr "cURL тайм-аут"
#~ msgid "Projecting dungeons"
#~ msgstr "ПроÑтупающие подземельÑ"
+#~ msgid "PvP enabled"
+#~ msgstr "PvP разрешён"
+
#~ msgid "Reset singleplayer world"
#~ msgstr "Ð¡Ð±Ñ€Ð¾Ñ Ð¾Ð´Ð¸Ð½Ð¾Ñ‡Ð½Ð¾Ð¹ игры"
#~ msgid "Select Package File:"
#~ msgstr "Выберите файл дополнениÑ:"
+#~ msgid ""
+#~ "Set the shadow update time.\n"
+#~ "Lower value means shadows and map updates faster, but it consume more "
+#~ "resources.\n"
+#~ "Minimun value 0.001 seconds max value 0.2 seconds"
+#~ msgstr ""
+#~ "УÑтановить Ð²Ñ€ÐµÐ¼Ñ Ð¾Ð±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ Ñ‚ÐµÐ½ÐµÐ¹.\n"
+#~ "Меньшее значение означает, что тени и карта обновлÑÑŽÑ‚ÑÑ Ð±Ñ‹Ñтрее, но Ñто "
+#~ "потреблÑет больше реÑурÑов.\n"
+#~ "Минимальное значение 0,001 Ñекунды, макÑимальное 0,2 Ñекунды"
+
#~ msgid "Shadow limit"
#~ msgstr "Лимит теней"
+#~ msgid ""
+#~ "Shadow offset (in pixels) of the fallback font. If 0, then shadow will "
+#~ "not be drawn."
+#~ msgstr ""
+#~ "Смещение тени резервного шрифта (в пикÑелÑÑ…). ЕÑли указан 0, то тень не "
+#~ "будет показана."
+
+#~ msgid "Special"
+#~ msgstr "ОÑобенный"
+
+#~ msgid "Special key"
+#~ msgstr "Клавиша иÑпользовать"
+
#~ msgid "Start Singleplayer"
#~ msgstr "Ðачать одиночную игру"
@@ -7599,6 +8039,9 @@ msgstr "cURL тайм-аут"
#~ msgid "This font will be used for certain languages."
#~ msgstr "Этот шрифт будет иÑпользован Ð´Ð»Ñ Ð½ÐµÐºÐ¾Ñ‚Ð¾Ñ€Ñ‹Ñ… Ñзыков."
+#~ msgid "To enable shaders the OpenGL driver needs to be used."
+#~ msgstr "Ð”Ð»Ñ Ð²ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ ÑˆÐµÐ¹Ð´ÐµÑ€Ð¾Ð² необходим драйвер OpenGL."
+
#~ msgid "Toggle Cinematic"
#~ msgstr "Кино"
@@ -7622,6 +8065,15 @@ msgstr "cURL тайм-аут"
#~ msgid "Waving water"
#~ msgstr "Волны на воде"
+#~ msgid ""
+#~ "Whether FreeType fonts are used, requires FreeType support to be compiled "
+#~ "in.\n"
+#~ "If disabled, bitmap and XML vectors fonts are used instead."
+#~ msgstr ""
+#~ "ИÑпользовать ли шрифты FreeType. Поддержка FreeType должна быть включена "
+#~ "при Ñборке.\n"
+#~ "ЕÑли отключено, иÑпользуютÑÑ Ñ€Ð°Ñтровые и XML-векторные изображениÑ."
+
#, fuzzy
#~ msgid "Y of upper limit of lava in large caves."
#~ msgstr "Верхний предел по Y Ð´Ð»Ñ Ð±Ð¾Ð»ÑŒÑˆÐ¸Ñ… пÑевдоÑлучайных пещер."
@@ -7634,3 +8086,9 @@ msgstr "cURL тайм-аут"
#~ msgid "Yes"
#~ msgstr "Да"
+
+#~ msgid "You died."
+#~ msgstr "Ты умер."
+
+#~ msgid "needs_fallback_font"
+#~ msgstr "no"
diff --git a/po/sk/minetest.po b/po/sk/minetest.po
index f3c6f4445..22cf8e570 100644
--- a/po/sk/minetest.po
+++ b/po/sk/minetest.po
@@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: minetest\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-02-23 19:03+0100\n"
-"PO-Revision-Date: 2021-03-14 11:02+0000\n"
+"POT-Creation-Date: 2022-01-25 23:19+0100\n"
+"PO-Revision-Date: 2022-01-26 22:42+0000\n"
"Last-Translator: Marian <daretmavi@gmail.com>\n"
"Language-Team: Slovak <https://hosted.weblate.org/projects/minetest/minetest/"
"sk/>\n"
@@ -17,7 +17,43 @@ msgstr ""
"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 4.5.2-dev\n"
+"X-Generator: Weblate 4.11-dev\n"
+
+#: builtin/client/chatcommands.lua
+msgid "Clear the out chat queue"
+msgstr "Vymaž výstupnú komunikaÄnú frontu"
+
+#: builtin/client/chatcommands.lua
+msgid "Empty command."
+msgstr "Prázdny príkaz."
+
+#: builtin/client/chatcommands.lua
+msgid "Exit to main menu"
+msgstr "Návrat do menu"
+
+#: builtin/client/chatcommands.lua
+msgid "Invalid command: "
+msgstr "Chybný príkaz: "
+
+#: builtin/client/chatcommands.lua
+msgid "Issued command: "
+msgstr "Spustený príkaz: "
+
+#: builtin/client/chatcommands.lua
+msgid "List online players"
+msgstr "Zoznam online hráÄov"
+
+#: builtin/client/chatcommands.lua
+msgid "Online players: "
+msgstr "Online hráÄi: "
+
+#: builtin/client/chatcommands.lua
+msgid "The out chat queue is now empty."
+msgstr "Výstupná komunikaÄná fronty je teraz prázdna."
+
+#: builtin/client/chatcommands.lua
+msgid "This command is disabled by server."
+msgstr "Tento príkaz je zakázaný serverom."
#: builtin/client/death_formspec.lua src/client/game.cpp
msgid "Respawn"
@@ -27,11 +63,42 @@ msgstr "Oživiť"
msgid "You died"
msgstr "Zomrel si"
+#: builtin/common/chatcommands.lua
+msgid "Available commands:"
+msgstr "Dostupné príkazy:"
+
+#: builtin/common/chatcommands.lua
+msgid "Available commands: "
+msgstr "Dostupné príkazy: "
+
+#: builtin/common/chatcommands.lua
+msgid "Command not available: "
+msgstr "Príkaz nie je k dispozícií: "
+
+#: builtin/common/chatcommands.lua
+msgid "Get help for commands"
+msgstr "Zobraz pomoc k príkazom"
+
+#: builtin/common/chatcommands.lua
+msgid ""
+"Use '.help <cmd>' to get more information, or '.help all' to list everything."
+msgstr ""
+"Použi '.help <cmd>' aby si získal viac informácií, alebo '.help all' pre "
+"zobrazenie všetkého."
+
+#: builtin/common/chatcommands.lua
+msgid "[all | <cmd>]"
+msgstr "[all | <cmd>]"
+
#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp
msgid "OK"
msgstr "OK"
#: builtin/fstk/ui.lua
+msgid "<none available>"
+msgstr "<nie je k dispozícií>"
+
+#: builtin/fstk/ui.lua
msgid "An error occurred in a Lua script:"
msgstr "Chyba v lua skripte:"
@@ -234,6 +301,10 @@ msgid "Install missing dependencies"
msgstr "Nainštaluj chýbajúce závislosti"
#: builtin/mainmenu/dlg_contentstore.lua
+msgid "Install: Unsupported file type or broken archive"
+msgstr "Inštalácia: Nepodporovaný typ súboru, alebo poškodený archív"
+
+#: builtin/mainmenu/dlg_contentstore.lua
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Mods"
msgstr "Rozšírenia"
@@ -539,7 +610,7 @@ msgstr "< Späť na nastavenia"
msgid "Browse"
msgstr "Prehliadaj"
-#: builtin/mainmenu/dlg_settings_advanced.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_settings.lua
msgid "Disabled"
msgstr "Vypnuté"
@@ -564,7 +635,7 @@ msgid "Offset"
msgstr "Ofset"
#: builtin/mainmenu/dlg_settings_advanced.lua
-msgid "Persistance"
+msgid "Persistence"
msgstr "Vytrvalosť"
#: builtin/mainmenu/dlg_settings_advanced.lua
@@ -583,7 +654,7 @@ msgstr "Obnov štand. hodnoty"
msgid "Scale"
msgstr "Mierka"
-#: builtin/mainmenu/dlg_settings_advanced.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_online.lua
msgid "Search"
msgstr "Hľadaj"
@@ -678,14 +749,6 @@ msgstr ""
"rozšírení $1"
#: builtin/mainmenu/pkgmgr.lua
-msgid "Install: Unsupported file type \"$1\" or broken archive"
-msgstr "Inštalácia: Nepodporovaný typ súboru \"$1\", alebo poškodený archív"
-
-#: builtin/mainmenu/pkgmgr.lua
-msgid "Install: file: \"$1\""
-msgstr "Inštalácia: súbor: \"$1\""
-
-#: builtin/mainmenu/pkgmgr.lua
msgid "Unable to find a valid mod or modpack"
msgstr "Nie je možné nájsÅ¥ platné rozšírenie, alebo balíÄek rozšírení"
@@ -719,6 +782,42 @@ msgstr ""
"Skús znova povoliť verejný zoznam serverov a skontroluj internetové "
"pripojenie."
+#: builtin/mainmenu/tab_about.lua
+msgid "About"
+msgstr "O"
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Active Contributors"
+msgstr "Aktívny prispievatelia"
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Active renderer:"
+msgstr "Aktívny renderer:"
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Core Developers"
+msgstr "Hlavný vývojari"
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Open User Data Directory"
+msgstr "Otvor adresár užívateľa"
+
+#: builtin/mainmenu/tab_about.lua
+msgid ""
+"Opens the directory that contains user-provided worlds, games, mods,\n"
+"and texture packs in a file manager / explorer."
+msgstr ""
+"Otvor adresár, ktorý obsahuje svety, hry, mody a textúry\n"
+"od užívateľov v správcovi/prieskumníkovi súborov."
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Previous Contributors"
+msgstr "Predchádzajúci prispievatelia"
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Previous Core Developers"
+msgstr "Predchádzajúci hlavný vývojári"
+
#: builtin/mainmenu/tab_content.lua
msgid "Browse online content"
msgstr "Hľadaj nový obsah na internete"
@@ -759,38 +858,6 @@ msgstr "OdinÅ¡taluj balíÄek"
msgid "Use Texture Pack"
msgstr "Použi balíÄek textúr"
-#: builtin/mainmenu/tab_credits.lua
-msgid "Active Contributors"
-msgstr "Aktívny prispievatelia"
-
-#: builtin/mainmenu/tab_credits.lua
-msgid "Core Developers"
-msgstr "Hlavný vývojari"
-
-#: builtin/mainmenu/tab_credits.lua
-msgid "Credits"
-msgstr "PoÄakovanie"
-
-#: builtin/mainmenu/tab_credits.lua
-msgid "Open User Data Directory"
-msgstr "Otvor adresár s užívateľskými dátami"
-
-#: builtin/mainmenu/tab_credits.lua
-msgid ""
-"Opens the directory that contains user-provided worlds, games, mods,\n"
-"and texture packs in a file manager / explorer."
-msgstr ""
-"Otvor adresár, ktorý obsahuje svety, hry, mody a textúry\n"
-"od užívateľov v správcovi/prieskumníkovi súborov."
-
-#: builtin/mainmenu/tab_credits.lua
-msgid "Previous Contributors"
-msgstr "Predchádzajúci prispievatelia"
-
-#: builtin/mainmenu/tab_credits.lua
-msgid "Previous Core Developers"
-msgstr "Predchádzajúci hlavný vývojári"
-
#: builtin/mainmenu/tab_local.lua
msgid "Announce Server"
msgstr "Zverejni server"
@@ -819,7 +886,7 @@ msgstr "Hosťuj server"
msgid "Install games from ContentDB"
msgstr "Inštaluj hry z ContentDB"
-#: builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
msgid "Name"
msgstr "Meno"
@@ -831,7 +898,7 @@ msgstr "Nový"
msgid "No world created or selected!"
msgstr "Nie je vytvorený ani zvolený svet!"
-#: builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
msgid "Password"
msgstr "Heslo"
@@ -839,7 +906,7 @@ msgstr "Heslo"
msgid "Play Game"
msgstr "Hraj hru"
-#: builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
msgid "Port"
msgstr "Port"
@@ -860,8 +927,12 @@ msgid "Start Game"
msgstr "Spusti hru"
#: builtin/mainmenu/tab_online.lua
-msgid "Address / Port"
-msgstr "Adresa / Port"
+msgid "Address"
+msgstr "Adresa"
+
+#: builtin/mainmenu/tab_online.lua src/client/keycode.cpp
+msgid "Clear"
+msgstr "Zmaž"
#: builtin/mainmenu/tab_online.lua
msgid "Connect"
@@ -871,34 +942,42 @@ msgstr "Pripojiť sa"
msgid "Creative mode"
msgstr "Kreatívny mód"
+#. ~ PvP = Player versus Player
#: builtin/mainmenu/tab_online.lua
-msgid "Damage enabled"
-msgstr "Poškodenie je aktivované"
+msgid "Damage / PvP"
+msgstr "Zranenie / PvP"
#: builtin/mainmenu/tab_online.lua
msgid "Del. Favorite"
msgstr "Zmaž obľúbené"
#: builtin/mainmenu/tab_online.lua
-msgid "Favorite"
+msgid "Favorites"
msgstr "Obľúbené"
#: builtin/mainmenu/tab_online.lua
-msgid "Join Game"
-msgstr "Pripoj sa do hry"
+msgid "Incompatible Servers"
+msgstr "Nekompatibilné servery"
#: builtin/mainmenu/tab_online.lua
-msgid "Name / Password"
-msgstr "Meno / Heslo"
+msgid "Join Game"
+msgstr "Pripoj sa do hry"
#: builtin/mainmenu/tab_online.lua
msgid "Ping"
msgstr "Ping"
-#. ~ PvP = Player versus Player
#: builtin/mainmenu/tab_online.lua
-msgid "PvP enabled"
-msgstr "PvP je aktívne"
+msgid "Public Servers"
+msgstr "Verejné servery"
+
+#: builtin/mainmenu/tab_online.lua
+msgid "Refresh"
+msgstr "Obnov"
+
+#: builtin/mainmenu/tab_online.lua
+msgid "Server Description"
+msgstr "Popis servera"
#: builtin/mainmenu/tab_settings.lua
msgid "2x"
@@ -940,11 +1019,31 @@ msgstr "Zmeň ovládacie klávesy"
msgid "Connected Glass"
msgstr "Prepojené sklo"
+#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
+msgid "Dynamic shadows"
+msgstr "Dynamické tiene"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Dynamic shadows: "
+msgstr "Dynamické tiene: "
+
#: builtin/mainmenu/tab_settings.lua
msgid "Fancy Leaves"
msgstr "Ozdobné listy"
#: builtin/mainmenu/tab_settings.lua
+msgid "High"
+msgstr "Vysoké"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Low"
+msgstr "Nízke"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Medium"
+msgstr "Stredné"
+
+#: builtin/mainmenu/tab_settings.lua
msgid "Mipmap"
msgstr "Mipmapy"
@@ -1016,10 +1115,6 @@ msgstr "Jemné osvetlenie"
msgid "Texturing:"
msgstr "Textúrovanie:"
-#: builtin/mainmenu/tab_settings.lua
-msgid "To enable shaders the OpenGL driver needs to be used."
-msgstr "Aby mohli byť aktivované shadery, musí sa použiť OpenGL."
-
#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
msgid "Tone Mapping"
msgstr "Optim. farieb"
@@ -1033,6 +1128,14 @@ msgid "Trilinear Filter"
msgstr "Trilineárny filter"
#: builtin/mainmenu/tab_settings.lua
+msgid "Ultra High"
+msgstr "Veľmi vysoké"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Very Low"
+msgstr "Veľmi nízke"
+
+#: builtin/mainmenu/tab_settings.lua
msgid "Waving Leaves"
msgstr "Vlniace sa listy"
@@ -1044,7 +1147,7 @@ msgstr "Vlniace sa kvapaliny"
msgid "Waving Plants"
msgstr "Vlniace sa rastliny"
-#: src/client/client.cpp
+#: src/client/client.cpp src/client/game.cpp
msgid "Connection timed out."
msgstr "Časový limit pripojenia vypršal."
@@ -1073,8 +1176,8 @@ msgid "Connection error (timed out?)"
msgstr "Chyba spojenia (Äasový limit?)"
#: src/client/clientlauncher.cpp
-msgid "Could not find or load game \""
-msgstr "Nie je možné nájsť alebo nahrať hru \""
+msgid "Could not find or load game: "
+msgstr "Nie je možné nájsť alebo nahrať hru: "
#: src/client/clientlauncher.cpp
msgid "Invalid gamespec."
@@ -1104,18 +1207,6 @@ msgstr "Dodaný súbor s heslom nie je možné otvoriť: "
msgid "Provided world path doesn't exist: "
msgstr "Zadaná cesta k svetu neexistuje: "
-#. ~ DO NOT TRANSLATE THIS LITERALLY!
-#. This is a special string. Put either "no" or "yes"
-#. into the translation field (literally).
-#. Choose "yes" if the language requires use of the fallback
-#. font, "no" otherwise.
-#. The fallback font is (normally) required for languages with
-#. non-Latin script, like Chinese.
-#. When in doubt, test your translation.
-#: src/client/fontengine.cpp
-msgid "needs_fallback_font"
-msgstr "no"
-
#: src/client/game.cpp
msgid ""
"\n"
@@ -1129,14 +1220,6 @@ msgid "- Address: "
msgstr "- Adresa: "
#: src/client/game.cpp
-msgid "- Creative Mode: "
-msgstr "- Kreatívny mód: "
-
-#: src/client/game.cpp
-msgid "- Damage: "
-msgstr "- Poškodenie: "
-
-#: src/client/game.cpp
msgid "- Mode: "
msgstr "- Mode: "
@@ -1158,6 +1241,15 @@ msgid "- Server Name: "
msgstr "- Meno servera: "
#: src/client/game.cpp
+msgid "A serialization error occurred:"
+msgstr "Chyba pri serializácií:"
+
+#: src/client/game.cpp
+#, c-format
+msgid "Access denied. Reason: %s"
+msgstr "Prístup zamietnutý. Dôvod: %s"
+
+#: src/client/game.cpp
msgid "Automatic forward disabled"
msgstr "Automatický pohyb vpred je zakázaný"
@@ -1166,6 +1258,22 @@ msgid "Automatic forward enabled"
msgstr "Automatický pohyb vpred je aktivovaný"
#: src/client/game.cpp
+msgid "Block bounds hidden"
+msgstr "Hranice bloku sú skryté"
+
+#: src/client/game.cpp
+msgid "Block bounds shown for all blocks"
+msgstr "Hranice bloku sú zobrazené pre všetky bloky"
+
+#: src/client/game.cpp
+msgid "Block bounds shown for current block"
+msgstr "Hranice bloku sú zobrazené pre aktuálny blok"
+
+#: src/client/game.cpp
+msgid "Block bounds shown for nearby blocks"
+msgstr "Hranice bloku sú zobrazené pre blízke bloky"
+
+#: src/client/game.cpp
msgid "Camera update disabled"
msgstr "Aktualizácia kamery je zakázaná"
@@ -1174,6 +1282,11 @@ msgid "Camera update enabled"
msgstr "Aktualizácia kamery je aktivovaná"
#: src/client/game.cpp
+msgid "Can't show block bounds (need 'basic_debug' privilege)"
+msgstr ""
+"Hranice bloku nie je možné zobraziť (je potrebné oprávnenie 'basic_debug')"
+
+#: src/client/game.cpp
msgid "Change Password"
msgstr "Zmeniť heslo"
@@ -1186,6 +1299,10 @@ msgid "Cinematic mode enabled"
msgstr "Filmový režim je aktivovaný"
#: src/client/game.cpp
+msgid "Client disconnected"
+msgstr "Klient je odpojený"
+
+#: src/client/game.cpp
msgid "Client side scripting is disabled"
msgstr "Skriptovanie na strane klienta je zakázané"
@@ -1194,6 +1311,10 @@ msgid "Connecting to server..."
msgstr "Pripájam sa k serveru..."
#: src/client/game.cpp
+msgid "Connection failed for unknown reason"
+msgstr "Spojenie sa z neznámeho dôvodu nepodarilo"
+
+#: src/client/game.cpp
msgid "Continue"
msgstr "PokraÄuj"
@@ -1231,6 +1352,11 @@ msgstr ""
"- %s: komunikácia\n"
#: src/client/game.cpp
+#, c-format
+msgid "Couldn't resolve address: %s"
+msgstr "Nepodarilo za vyhodnotiť adresu: %s"
+
+#: src/client/game.cpp
msgid "Creating client..."
msgstr "Vytváram klienta..."
@@ -1359,6 +1485,10 @@ msgid "Minimap currently disabled by game or mod"
msgstr "Minimapa je aktuálne zakázaná hrou, alebo rozšírením"
#: src/client/game.cpp
+msgid "Multiplayer"
+msgstr "Hra pre viacerých hráÄov"
+
+#: src/client/game.cpp
msgid "Noclip mode disabled"
msgstr "Režim prechádzania stenami je zakázaný"
@@ -1433,6 +1563,21 @@ msgstr "Zvuk je obnovený"
#: src/client/game.cpp
#, c-format
+msgid "The server is probably running a different version of %s."
+msgstr "Na serveri pravdepodobne beží iná verzia %s."
+
+#: src/client/game.cpp
+#, c-format
+msgid "Unable to connect to %s because IPv6 is disabled"
+msgstr "Nemôžem sa pripojiť na %s, lebo IPv6 je zakázané"
+
+#: src/client/game.cpp
+#, c-format
+msgid "Unable to listen on %s because IPv6 is disabled"
+msgstr "Nemôžem sa spojiť s %s, lebo IPv6 je zakázané"
+
+#: src/client/game.cpp
+#, c-format
msgid "Viewing range changed to %d"
msgstr "Dohľadnosť je zmenená na %d"
@@ -1501,10 +1646,6 @@ msgid "Caps Lock"
msgstr "Caps Lock"
#: src/client/keycode.cpp
-msgid "Clear"
-msgstr "Zmaž"
-
-#: src/client/keycode.cpp
msgid "Control"
msgstr "CTRL"
@@ -1769,6 +1910,14 @@ msgstr "Minimapa v povrchovom režime, priblíženie x%d"
msgid "Minimap in texture mode"
msgstr "Minimapa v móde textúry"
+#: src/gui/guiChatConsole.cpp
+msgid "Failed to open webpage"
+msgstr "Nepodarilo sa otvoriť web stránku"
+
+#: src/gui/guiChatConsole.cpp
+msgid "Opening webpage"
+msgstr "Otváram web stránku"
+
#: src/gui/guiConfirmRegistration.cpp src/gui/guiPasswordChange.cpp
msgid "Passwords do not match!"
msgstr "Hesla sa nezhodujú!"
@@ -1797,8 +1946,8 @@ msgid "Proceed"
msgstr "PokraÄuj"
#: src/gui/guiKeyChangeMenu.cpp
-msgid "\"Special\" = climb down"
-msgstr "\"Špeciál\"=šplhaj dole"
+msgid "\"Aux1\" = climb down"
+msgstr "\"Aux1\"=šplhaj dole"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Autoforward"
@@ -1809,10 +1958,18 @@ msgid "Automatic jumping"
msgstr "Automatické skákanie"
#: src/gui/guiKeyChangeMenu.cpp
+msgid "Aux1"
+msgstr "Aux1"
+
+#: src/gui/guiKeyChangeMenu.cpp
msgid "Backward"
msgstr "Vzad"
#: src/gui/guiKeyChangeMenu.cpp
+msgid "Block bounds"
+msgstr "Hranice bloku"
+
+#: src/gui/guiKeyChangeMenu.cpp
msgid "Change camera"
msgstr "Zmeň pohľad"
@@ -1903,10 +2060,6 @@ msgid "Sneak"
msgstr "Zakrádať sa"
#: src/gui/guiKeyChangeMenu.cpp
-msgid "Special"
-msgstr "Špeciál"
-
-#: src/gui/guiKeyChangeMenu.cpp
msgid "Toggle HUD"
msgstr "Prepni HUD"
@@ -1967,8 +2120,9 @@ msgid "Muted"
msgstr "Zvuk stlmený"
#: src/gui/guiVolumeChange.cpp
-msgid "Sound Volume: "
-msgstr "Hlasitosť: "
+#, c-format
+msgid "Sound Volume: %d%%"
+msgstr "Hlasitosť: %d%%"
#. ~ Imperative, as in "Enter/type in text".
#. Don't forget the space.
@@ -1993,12 +2147,12 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"(Android) Use virtual joystick to trigger \"aux\" button.\n"
-"If enabled, virtual joystick will also tap \"aux\" button when out of main "
+"(Android) Use virtual joystick to trigger \"Aux1\" button.\n"
+"If enabled, virtual joystick will also tap \"Aux1\" button when out of main "
"circle."
msgstr ""
-"(Android) Použije virtuálny joystick na stlaÄenie tlaÄidla \"aux\".\n"
-"Ak je aktivované, virtuálny joystick stlaÄí tlaÄidlo \"aux\" keÄ je mimo "
+"(Android) Použije virtuálny joystick na stlaÄenie tlaÄidla \"Aux1\".\n"
+"Ak je aktivované, virtuálny joystick stlaÄí tlaÄidlo \"Aux1\" keÄ je mimo "
"hlavný kruh."
#: src/settings_translation_file.cpp
@@ -2220,6 +2374,12 @@ msgstr ""
"napr. pre 4k obrazovky."
#: src/settings_translation_file.cpp
+msgid "Adjust the detected display density, used for scaling UI elements."
+msgstr ""
+"Uprav zistenú hustotu zobrazenia, použitú pre zmenu veľkosti prvkov "
+"grafického rozhrania."
+
+#: src/settings_translation_file.cpp
#, c-format
msgid ""
"Adjusts the density of the floatland layer.\n"
@@ -2354,6 +2514,14 @@ msgid "Autoscaling mode"
msgstr "Režim automatickej zmeny mierky"
#: src/settings_translation_file.cpp
+msgid "Aux1 key"
+msgstr "TlaÄidlo Aux1"
+
+#: src/settings_translation_file.cpp
+msgid "Aux1 key for climbing/descending"
+msgstr "Klávesa Aux1 pre šplhanie hore/dole"
+
+#: src/settings_translation_file.cpp
msgid "Backward key"
msgstr "TlaÄidlo Vzad"
@@ -2398,10 +2566,6 @@ msgid "Biome noise"
msgstr "Šum biómu"
#: src/settings_translation_file.cpp
-msgid "Bits per pixel (aka color depth) in fullscreen mode."
-msgstr "PoÄet bitov na pixel (farebná hĺbka) v režime celej obrazovky."
-
-#: src/settings_translation_file.cpp
msgid "Block send optimize distance"
msgstr "Vzdialenosť pre optimalizáciu posielania blokov"
@@ -2506,6 +2670,14 @@ msgstr ""
"Kde 0.0 je minimálna úroveň, 1.0 je maximálna úroveň ."
#: src/settings_translation_file.cpp
+msgid "Chat command time message threshold"
+msgstr "Časové obmedzenie príkazu v správe"
+
+#: src/settings_translation_file.cpp
+msgid "Chat commands"
+msgstr "KomunikaÄné príkazy"
+
+#: src/settings_translation_file.cpp
msgid "Chat font size"
msgstr "VeľkosÅ¥ komunikaÄného písma"
@@ -2538,8 +2710,8 @@ msgid "Chat toggle key"
msgstr "TlaÄidlo Prepnutie komunikácie"
#: src/settings_translation_file.cpp
-msgid "Chatcommands"
-msgstr "KomunikaÄné príkazy"
+msgid "Chat weblinks"
+msgstr "KomunikaÄná webové odkazy"
#: src/settings_translation_file.cpp
msgid "Chunk size"
@@ -2558,6 +2730,14 @@ msgid "Clean transparent textures"
msgstr "VyÄisti priehľadné textúry"
#: src/settings_translation_file.cpp
+msgid ""
+"Clickable weblinks (middle-click or Ctrl+left-click) enabled in chat console "
+"output."
+msgstr ""
+"Spustiteľné webové odkazy (kliknutie stredným tlaÄítkom, alebo CTRL+ľave "
+"kliknutie) sú v komunikaÄnej konzole povolené."
+
+#: src/settings_translation_file.cpp
msgid "Client"
msgstr "Klient"
@@ -2602,6 +2782,10 @@ msgid "Colored fog"
msgstr "Farebná hmla"
#: src/settings_translation_file.cpp
+msgid "Colored shadows"
+msgstr "Farebné tiene"
+
+#: src/settings_translation_file.cpp
msgid ""
"Comma-separated list of flags to hide in the content repository.\n"
"\"nonfree\" can be used to hide packages which do not qualify as 'free "
@@ -2641,6 +2825,30 @@ msgid "Command key"
msgstr "TlaÄidlo Príkaz"
#: src/settings_translation_file.cpp
+msgid ""
+"Compression level to use when saving mapblocks to disk.\n"
+"-1 - use default compression level\n"
+"0 - least compression, fastest\n"
+"9 - best compression, slowest"
+msgstr ""
+"Úroveň kompresie použitej pri ukladaní blokov mapy na disk.\n"
+"-1 - predvolená úroveň kompresie\n"
+"0 - najmenšia kompresia, najrýchlejšie\n"
+"9 - najlepšia kompresia, najpomalšie"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Compression level to use when sending mapblocks to the client.\n"
+"-1 - use default compression level\n"
+"0 - least compression, fastest\n"
+"9 - best compression, slowest"
+msgstr ""
+"Úroveň kompresie použitej pri posielaní blokov mapy klientom.\n"
+"-1 - predvolená úroveň kompresie\n"
+"0 - najmenšia kompresia, najrýchlejšie\n"
+"9 - najlepšia kompresia, najpomalšie"
+
+#: src/settings_translation_file.cpp
msgid "Connect glass"
msgstr "Prepojené sklo"
@@ -2740,10 +2948,10 @@ msgstr "PriehľadnosÅ¥ zameriavaÄa"
#: src/settings_translation_file.cpp
msgid ""
"Crosshair alpha (opaqueness, between 0 and 255).\n"
-"Also controls the object crosshair color"
+"This also applies to the object crosshair."
msgstr ""
"PriehľadnosÅ¥ zameriavaÄa (nepriehľadnosÅ¥, medzi 0 a 255).\n"
-"Tiež nastavuje farbu objektu zameriavaÄa"
+"Tiež nastavuje farbu objektu zameriavaÄa."
#: src/settings_translation_file.cpp
msgid "Crosshair color"
@@ -2823,11 +3031,13 @@ msgstr "Štandardná veľkosť kôpky"
#: src/settings_translation_file.cpp
msgid ""
-"Default timeout for cURL, stated in milliseconds.\n"
-"Only has an effect if compiled with cURL."
+"Define shadow filtering quality.\n"
+"This simulates the soft shadows effect by applying a PCF or Poisson disk\n"
+"but also uses more resources."
msgstr ""
-"Å tandardný Äasový rámec pre cURL, zadaný v milisekundách.\n"
-"Má efekt len ak je skompilovaný s cURL."
+"Definuje kvalitu filtrovania tieňov\n"
+"Toto simuluje efekt jemných tieňov použitím PCF alebo poisson disk\n"
+"zároveň ale spotrebováva viac zdrojov."
#: src/settings_translation_file.cpp
msgid "Defines areas where trees have apples."
@@ -2952,6 +3162,10 @@ msgid "Disallow empty passwords"
msgstr "Zakáž prázdne heslá"
#: src/settings_translation_file.cpp
+msgid "Display Density Scaling Factor"
+msgstr "Faktor škálovania hustoty zobrazenia"
+
+#: src/settings_translation_file.cpp
msgid "Domain name of server, to be displayed in the serverlist."
msgstr "Doménové meno servera, ktoré bude zobrazené v zozname serverov."
@@ -3000,6 +3214,24 @@ msgstr ""
"Táto podpora je experimentálna a API sa môže zmeniť."
#: src/settings_translation_file.cpp
+msgid ""
+"Enable Poisson disk filtering.\n"
+"On true uses Poisson disk to make \"soft shadows\". Otherwise uses PCF "
+"filtering."
+msgstr ""
+"Aktivuj poisson disk filtrovanie.\n"
+"Ak je aktivované použije poisson disk pre vytvorenie \"mäkkých tieňov\". V "
+"opaÄnom prípade sa použije PCF filtrovanie."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable colored shadows.\n"
+"On true translucent nodes cast colored shadows. This is expensive."
+msgstr ""
+"Aktivuje farebné tiene.\n"
+"Ak je aktivovaný, tak priesvitné kocky dávajú farebné tiene. Toto je nároÄné."
+
+#: src/settings_translation_file.cpp
msgid "Enable console window"
msgstr "Aktivuj okno konzoly"
@@ -3134,6 +3366,14 @@ msgstr ""
"Zmena tohto nastavenia si vyžaduje reštart hry."
#: src/settings_translation_file.cpp
+msgid ""
+"Enables tradeoffs that reduce CPU load or increase rendering performance\n"
+"at the expense of minor visual glitches that do not impact game playability."
+msgstr ""
+"Povolí kompromis, ktorý zníži zaťaženie CPU, alebo zvýši výkon renderovania\n"
+"za cenu drobných vizuálnych chýb, ktoré neovplyvnia hrateľnosť."
+
+#: src/settings_translation_file.cpp
msgid "Engine profiling data print interval"
msgstr "Interval tlaÄe profilových dát enginu"
@@ -3179,18 +3419,6 @@ msgid "Fallback font path"
msgstr "Cesta k záložnému písmu"
#: src/settings_translation_file.cpp
-msgid "Fallback font shadow"
-msgstr "Tieň záložného písma"
-
-#: src/settings_translation_file.cpp
-msgid "Fallback font shadow alpha"
-msgstr "Priehľadnosť tieňa záložného fontu"
-
-#: src/settings_translation_file.cpp
-msgid "Fallback font size"
-msgstr "Veľkosť záložného písma"
-
-#: src/settings_translation_file.cpp
msgid "Fast key"
msgstr "TlaÄidlo RýchlosÅ¥"
@@ -3208,10 +3436,10 @@ msgstr "Rýchly pohyb"
#: src/settings_translation_file.cpp
msgid ""
-"Fast movement (via the \"special\" key).\n"
+"Fast movement (via the \"Aux1\" key).\n"
"This requires the \"fast\" privilege on the server."
msgstr ""
-"Rýchly pohyb (cez \"špeciálnu\" klávesu).\n"
+"Rýchly pohyb (cez \"Aux1\" klávesu).\n"
"Toto si na serveri vyžaduje privilégium \"fast\"."
#: src/settings_translation_file.cpp
@@ -3246,15 +3474,18 @@ msgstr "Filmový tone mapping"
#: 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."
+"which PNG optimizers usually discard, often resulting in dark or\n"
+"light edges to transparent textures. Apply a filter to clean that up\n"
+"at texture load time. This is automatically enabled if mipmapping is enabled."
msgstr ""
"Filtrované textúry môžu zmiešať svoje RGB hodnoty s plne priehľadnými "
"susedmi,\n"
-"s PNG optimizérmi obvykle zmazané, niekdy môžu viesť k tmavým oblastiam\n"
-"alebo svetlým rohom na priehľadnej textúre.\n"
-"Aplikuj tento filter na ich vyÄistenie pri nahrávaní textúry."
+"ktoré sú PNG optimizérmi obvykle zmazané, niekdy môžu viesť k tmavým "
+"oblastiam\n"
+"alebo svetlým rohom na priehľadnej textúre. Aplikuj tento filter na ich "
+"vyÄistenie\n"
+"pri nahrávaní textúry. Toto je automaticky aktivované, ak je aktivovaný "
+"mipmapping."
#: src/settings_translation_file.cpp
msgid "Filtering"
@@ -3345,16 +3576,16 @@ msgid "Font size"
msgstr "Veľkosť písma"
#: src/settings_translation_file.cpp
-msgid "Font size of the default font in point (pt)."
-msgstr "Veľkosť písma štandardného písma v bodoch (pt)."
+msgid "Font size divisible by"
+msgstr "Veľkosť písma deliteľná"
#: src/settings_translation_file.cpp
-msgid "Font size of the fallback font in point (pt)."
-msgstr "Veľkosť písma záložného písma v bodoch (pt)."
+msgid "Font size of the default font where 1 unit = 1 pixel at 96 DPI"
+msgstr "Veľkosť písma štandardného fontu, kde 1jednotka = 1 pixel pri 96 DPI"
#: src/settings_translation_file.cpp
-msgid "Font size of the monospace font in point (pt)."
-msgstr "Veľkosť písma s pevnou šírkou v bodoch (pt)."
+msgid "Font size of the monospace font where 1 unit = 1 pixel at 96 DPI"
+msgstr "Veľkosť písma s pevnou šírkou, kde 1jednotka = 1 pixel pri 96 DPI"
#: src/settings_translation_file.cpp
msgid ""
@@ -3367,6 +3598,24 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"For pixel-style fonts that do not scale well, this ensures that font sizes "
+"used\n"
+"with this font will always be divisible by this value, in pixels. For "
+"instance,\n"
+"a pixel font 16 pixels tall should have this set to 16, so it will only ever "
+"be\n"
+"sized 16, 32, 48, etc., so a mod requesting a size of 25 will get 32."
+msgstr ""
+"Pre pixelové písma, ktoré sa zle Å¡kálujú, toto zabezpeÄí, že použité "
+"veľkosti písma\n"
+"s týmto fontom budú vždy deliteľné touto hodnotou v pixeloch. Napríklad,\n"
+"pixelové písmo vysoké 16 pixelov, by malo mať toto nastavené na 16, aby sa "
+"veľkosť\n"
+"menila len na hodnoty 16, 32, 48, atÄ., takže rozšírenie požadujúce veľkosÅ¥ "
+"25 dostane 32."
+
+#: src/settings_translation_file.cpp
+msgid ""
"Format of player chat messages. The following strings are valid "
"placeholders:\n"
"@name, @message, @timestamp (optional)"
@@ -3434,10 +3683,6 @@ msgid "Fraction of the visible distance at which fog starts to be rendered"
msgstr "Zlomok viditeľnej vzdialenosti od ktorej zaÄne byÅ¥ vykresľovaná hmla"
#: src/settings_translation_file.cpp
-msgid "FreeType fonts"
-msgstr "FreeType písma"
-
-#: src/settings_translation_file.cpp
msgid ""
"From how far blocks are generated for clients, stated in mapblocks (16 "
"nodes)."
@@ -3472,10 +3717,6 @@ msgid "Full screen"
msgstr "Celá obrazovka"
#: src/settings_translation_file.cpp
-msgid "Full screen BPP"
-msgstr "BPP v režime celej obrazovky"
-
-#: src/settings_translation_file.cpp
msgid "Fullscreen mode."
msgstr "Režim celej obrazovky."
@@ -3499,7 +3740,7 @@ msgstr "Globálne odozvy"
msgid ""
"Global map generation attributes.\n"
"In Mapgen v6 the 'decorations' flag controls all decorations except trees\n"
-"and junglegrass, in all other mapgens this flag controls all decorations."
+"and jungle grass, in all other mapgens this flag controls all decorations."
msgstr ""
"Globálne atribúty pre generovanie máp.\n"
"V generátore v6 príznak 'decorations' riadi všetky dekorácie okrem stromov\n"
@@ -3586,8 +3827,9 @@ msgid "Heat noise"
msgstr "Teplotný šum"
#: src/settings_translation_file.cpp
-msgid "Height component of the initial window size."
-msgstr "Výška okna po spustení."
+msgid ""
+"Height component of the initial window size. Ignored in fullscreen mode."
+msgstr "Výška okna po spustení. Ignorované v móde plnej obrazovky."
#: src/settings_translation_file.cpp
msgid "Height noise"
@@ -3598,10 +3840,6 @@ msgid "Height select noise"
msgstr "Šum výšok"
#: src/settings_translation_file.cpp
-msgid "High-precision FPU"
-msgstr "Vysoko-presné FPU"
-
-#: src/settings_translation_file.cpp
msgid "Hill steepness"
msgstr "Strmosť kopcov"
@@ -3845,11 +4083,11 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"If disabled, \"special\" key is used to fly fast if both fly and fast mode "
-"are\n"
+"If disabled, \"Aux1\" key is used to fly fast if both fly and fast mode are\n"
"enabled."
msgstr ""
-"Ak je aktivované, použije sa \"špeciálna\" klávesa na lietanie, v prípade,\n"
+"Ak nie je aktivované, použije sa \"Aux1\" klávesa na rýchle lietanie, v "
+"prípade,\n"
"že je povolený režim lietania aj rýchlosti."
#: src/settings_translation_file.cpp
@@ -3878,12 +4116,12 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"If enabled, \"special\" key instead of \"sneak\" key is used for climbing "
-"down and\n"
+"If enabled, \"Aux1\" key instead of \"Sneak\" key is used for climbing down "
+"and\n"
"descending."
msgstr ""
-"Ak je aktivované, použije sa namiesto klávesy pre \"zakrádanie\" \"špeciálnu "
-"klávesu\"\n"
+"Ak je aktivované, použije sa namiesto klávesy pre \"zakrádanie\" \"Aux1\" "
+"klávesu\n"
"pre klesanie a šplhanie dole."
#: src/settings_translation_file.cpp
@@ -3940,6 +4178,14 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"If the execution of a chat command takes longer than this specified time in\n"
+"seconds, add the time information to the chat command message"
+msgstr ""
+"Ak vykonanie príkazu trvá dlhÅ¡ie ako zadaný Äas v sekundách,\n"
+"tak pridá informáciu o Äase do komunikaÄného správy príkazu"
+
+#: src/settings_translation_file.cpp
+msgid ""
"If the file size of debug.txt exceeds the number of megabytes specified in\n"
"this setting when it is opened, the file is moved to debug.txt.1,\n"
"deleting an older debug.txt.1 if it exists.\n"
@@ -3991,7 +4237,7 @@ msgstr ""
"Toto je obvykle potrebné len pre core/builtin prispievateľov"
#: src/settings_translation_file.cpp
-msgid "Instrument chatcommands on registration."
+msgid "Instrument chat commands on registration."
msgstr "InÅ¡trumentuj komunikaÄné príkazy pri registrácií."
#: src/settings_translation_file.cpp
@@ -4081,7 +4327,7 @@ msgid "Joystick button repetition interval"
msgstr "Interval opakovania tlaÄidla joysticku"
#: src/settings_translation_file.cpp
-msgid "Joystick deadzone"
+msgid "Joystick dead zone"
msgstr "Mŕtva zóna joysticku"
#: src/settings_translation_file.cpp
@@ -5107,10 +5353,6 @@ msgstr ""
"Prispôsob farbu hmly a oblohy dennej dobe (svitanie/súmrak) a uhlu pohľadu."
#: src/settings_translation_file.cpp
-msgid "Makes DirectX work with LuaJIT. Disable if it causes troubles."
-msgstr "Umožní DirectX pracovať s LuaJIT. Vypni ak to spôsobuje problémy."
-
-#: src/settings_translation_file.cpp
msgid "Makes all liquids opaque"
msgstr "Všetky tekutiny budú nepriehľadné"
@@ -5201,6 +5443,10 @@ msgid "Map save interval"
msgstr "Interval ukladania mapy"
#: src/settings_translation_file.cpp
+msgid "Map shadows update frames"
+msgstr "AktualizaÄný Äas mapy tieňov"
+
+#: src/settings_translation_file.cpp
msgid "Mapblock limit"
msgstr "Limit blokov mapy"
@@ -5310,6 +5556,10 @@ msgstr ""
"Maximálne FPS, ak je hra nie je v aktuálnom okne, alebo je pozastavená."
#: src/settings_translation_file.cpp
+msgid "Maximum distance to render shadows."
+msgstr "Maximálna vzdialenosť pre renderovanie tieňov."
+
+#: src/settings_translation_file.cpp
msgid "Maximum forceloaded blocks"
msgstr "Maximum vynútene nahraných blokov"
@@ -5438,12 +5688,22 @@ msgstr ""
"0 pre zakázanie fronty a -1 pre neobmedzenú frontu."
#: src/settings_translation_file.cpp
-msgid "Maximum time in ms a file download (e.g. a mod download) may take."
+msgid ""
+"Maximum time a file download (e.g. a mod download) may take, stated in "
+"milliseconds."
msgstr ""
"Maximálny Äas v ms, ktorý môže zabraÅ¥ sÅ¥ahovanie súboru (napr. sÅ¥ahovanie "
"rozšírenia)."
#: src/settings_translation_file.cpp
+msgid ""
+"Maximum time an interactive request (e.g. server list fetch) may take, "
+"stated in milliseconds."
+msgstr ""
+"Maximálny Äas v ms, ktorý môže zabraÅ¥ interaktívna požiadavka (napr. "
+"sťahovanie zoznamu serverov)."
+
+#: src/settings_translation_file.cpp
msgid "Maximum users"
msgstr "Maximálny poÄet hráÄov"
@@ -5506,7 +5766,7 @@ msgid "Mod channels"
msgstr "KomunikaÄné kanály rozšírení"
#: src/settings_translation_file.cpp
-msgid "Modifies the size of the hudbar elements."
+msgid "Modifies the size of the HUD elements."
msgstr "Upraví veľkosť elementov v užívateľskom rozhraní."
#: src/settings_translation_file.cpp
@@ -5518,6 +5778,10 @@ msgid "Monospace font size"
msgstr "Veľkosť písmo s pevnou šírkou"
#: src/settings_translation_file.cpp
+msgid "Monospace font size divisible by"
+msgstr "Veľkosť písma s pevnou šírkou deliteľná"
+
+#: src/settings_translation_file.cpp
msgid "Mountain height noise"
msgstr "Šum pre výšku hôr"
@@ -5660,11 +5924,11 @@ 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"
+"This is a trade-off between SQLite transaction overhead and\n"
"memory consumption (4096=100MB, as a rule of thumb)."
msgstr ""
"PoÄet extra blokov, ktoré môžu byÅ¥ naraz nahrané pomocou /clearobjects.\n"
-"Toto je kompromis medzi vyťažením sqlite transakciami\n"
+"Toto je kompromis medzi vyťažením SQLite transakciami\n"
"a spotrebou pamäti (4096=100MB, ako približné pravidlo)."
#: src/settings_translation_file.cpp
@@ -5682,11 +5946,6 @@ msgstr "Nepriehľadnosť tieňa za štandardným písmom, medzi 0 a 255."
#: src/settings_translation_file.cpp
msgid ""
-"Opaqueness (alpha) of the shadow behind the fallback font, between 0 and 255."
-msgstr "Nepriehľadnosť tieňa za záložným písmom, medzi 0 a 255."
-
-#: src/settings_translation_file.cpp
-msgid ""
"Open the pause menu when the window's focus is lost. Does not pause if a "
"formspec is\n"
"open."
@@ -5695,17 +5954,16 @@ msgstr ""
"Nepozastaví sa ak je otvorený formspec."
#: src/settings_translation_file.cpp
+msgid "Optional override for chat weblink color."
+msgstr "Voliteľná zmena farby webového odkazu v komunikaÄnej konzole."
+
+#: src/settings_translation_file.cpp
msgid ""
-"Path of the fallback font.\n"
-"If “freetype†setting is enabled: Must be a TrueType font.\n"
-"If “freetype†setting is disabled: Must be a bitmap or XML vectors font.\n"
+"Path of the fallback font. Must be a TrueType font.\n"
"This font will be used for certain languages or if the default font is "
"unavailable."
msgstr ""
-"Cesta k záložnému písmu.\n"
-"Ak je aktívne nastavenie “freetypeâ€: Musí to byÅ¥ TrueType písmo.\n"
-"Ak je zakázané nastavenie “freetypeâ€: Musí to byÅ¥ bitmapové, alebo XML "
-"vektorové písmo.\n"
+"Cesta k záložnému písmu. Musí to byť TrueType font.\n"
"Toto písmo bude použité pre urÄité jazyky, alebo ak nie je Å¡tandardné písmo "
"k dispozícií."
@@ -5732,28 +5990,18 @@ msgstr "Cesta do adresára s textúrami. Všetky textúry sú najprv hľadané t
#: src/settings_translation_file.cpp
msgid ""
-"Path to the default font.\n"
-"If “freetype†setting is enabled: Must be a TrueType font.\n"
-"If “freetype†setting is disabled: Must be a bitmap or XML vectors font.\n"
+"Path to the default font. Must be a TrueType font.\n"
"The fallback font will be used if the font cannot be loaded."
msgstr ""
-"Cesta k štandardnému písmu.\n"
-"Ak je aktivné nastavenie “freetypeâ€: Musí to byÅ¥ TrueType písmo.\n"
-"Ak je zakázané nastavenie “freetypeâ€: Musí to byÅ¥ bitmapové, alebo XML "
-"vektorové písmo.\n"
+"Cesta k štandardnému písmu. Musí to byť TrueType font.\n"
"Bude použité záložné písmo, ak nebude možné písmo nahrať."
#: src/settings_translation_file.cpp
msgid ""
-"Path to the monospace font.\n"
-"If “freetype†setting is enabled: Must be a TrueType font.\n"
-"If “freetype†setting is disabled: Must be a bitmap or XML vectors font.\n"
+"Path to the monospace font. Must be a TrueType font.\n"
"This font is used for e.g. the console and profiler screen."
msgstr ""
-"Cesta k písmu s pevnou šírkou.\n"
-"Ak je aktívne nastavenie “freetypeâ€: Musí to byÅ¥ TrueType písmo.\n"
-"Ak je zakázané nastavenie “freetypeâ€: Musí to byÅ¥ bitmapové, alebo XML "
-"vektorové písmo.\n"
+"Cesta k písmu s pevnou šírkou. Musí to byť TrueType font.\n"
"Toto písmo je použité pre napr. konzolu a okno profilera."
#: src/settings_translation_file.cpp
@@ -5809,6 +6057,10 @@ msgid "Player versus player"
msgstr "HrÃ¡Ä proti hráÄovi (PvP)"
#: src/settings_translation_file.cpp
+msgid "Poisson filtering"
+msgstr "Poisson filtrovanie"
+
+#: src/settings_translation_file.cpp
msgid ""
"Port to connect to (UDP).\n"
"Note that the port field in the main menu overrides this setting."
@@ -5861,12 +6113,12 @@ msgstr "OdpoÄúvacia adresa Promethea"
#: src/settings_translation_file.cpp
msgid ""
"Prometheus listener address.\n"
-"If minetest is compiled with ENABLE_PROMETHEUS option enabled,\n"
+"If Minetest is compiled with ENABLE_PROMETHEUS option enabled,\n"
"enable metrics listener for Prometheus on that address.\n"
-"Metrics can be fetch on http://127.0.0.1:30000/metrics"
+"Metrics can be fetched on http://127.0.0.1:30000/metrics"
msgstr ""
"OdpoÄúvacia adresa Promethea.\n"
-"Ak je minetest skompilovaný s nastaveným ENABLE_PROMETHEUS,\n"
+"Ak je Minetest skompilovaný s nastaveným ENABLE_PROMETHEUS,\n"
"aktivuj odpoÄúvanie metriky pre Prometheus na zadanej adrese.\n"
"Metrika môže byť získaná na http://127.0.0.1:30000/metrics"
@@ -6199,6 +6451,43 @@ msgstr "Nastav maximálny poÄet znakov komunikaÄnej správy posielanej klientm
#: src/settings_translation_file.cpp
msgid ""
+"Set the shadow strength.\n"
+"Lower value means lighter shadows, higher value means darker shadows."
+msgstr ""
+"Nastav silu tieňov.\n"
+"Nižšia hodnota znamená svetlejšie tiene, vyššia hodnota znamená tmavšie "
+"tiene."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set the soft shadow radius size.\n"
+"Lower values mean sharper shadows, bigger values mean softer shadows.\n"
+"Minimum value: 1.0; maximum value: 10.0"
+msgstr ""
+"Nastav dosah mäkkých tieňov.\n"
+"Nižšia hodnota znamená ostrejšie a vyššia jemnejšie tiene.\n"
+"Minimálna hodnota: 1.0; max. hodnota: 10.0"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set the tilt of Sun/Moon orbit in degrees.\n"
+"Value of 0 means no tilt / vertical orbit.\n"
+"Minimum value: 0.0; maximum value: 60.0"
+msgstr ""
+"Nastav sklon orbity slnka/mesiaca v stupňoch\n"
+"Hodnota 0 znamená bez vertikálneho sklonu orbity.\n"
+"Minimálna hodnota: 0.0; max. hodnota: 60.0"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set to true to enable Shadow Mapping.\n"
+"Requires shaders to be enabled."
+msgstr ""
+"Nastav true pre povolenie mapovania tieňov.\n"
+"Požaduje aby boli aktivované shadery."
+
+#: src/settings_translation_file.cpp
+msgid ""
"Set to true to enable waving leaves.\n"
"Requires shaders to be enabled."
msgstr ""
@@ -6222,6 +6511,16 @@ msgstr ""
"Požaduje aby boli aktivované shadery."
#: src/settings_translation_file.cpp
+msgid ""
+"Sets shadow texture quality to 32 bits.\n"
+"On false, 16 bits texture will be used.\n"
+"This can cause much more artifacts in the shadow."
+msgstr ""
+"Nastav kvalitu textúr tieňov na 32 bitov.\n"
+"Ak je false, použijú sa 16 bitové textúry.\n"
+"Toto môže spôsobiť v tieňoch viac artefaktov."
+
+#: src/settings_translation_file.cpp
msgid "Shader path"
msgstr "Cesta k shaderom"
@@ -6238,6 +6537,23 @@ msgstr ""
"Toto funguje len s OpenGL."
#: src/settings_translation_file.cpp
+msgid "Shadow filter quality"
+msgstr "Kvalita filtra pre tiene"
+
+#: src/settings_translation_file.cpp
+msgid "Shadow map max distance in nodes to render shadows"
+msgstr ""
+"Maximálna vzdialenosť v kockách, pre mapu tieňov na renderovanie tieňov"
+
+#: src/settings_translation_file.cpp
+msgid "Shadow map texture in 32 bits"
+msgstr "32 bitové textúry pre mapovanie tieňov"
+
+#: src/settings_translation_file.cpp
+msgid "Shadow map texture size"
+msgstr "Veľkosť textúry pre mapovanie tieňov"
+
+#: src/settings_translation_file.cpp
msgid ""
"Shadow offset (in pixels) of the default font. If 0, then shadow will not be "
"drawn."
@@ -6246,12 +6562,8 @@ msgstr ""
"vykreslený."
#: src/settings_translation_file.cpp
-msgid ""
-"Shadow offset (in pixels) of the fallback font. If 0, then shadow will not "
-"be drawn."
-msgstr ""
-"Posun tieňa (v pixeloch) záložného písma. Ak je 0, tak tieň nebude "
-"vykreslený."
+msgid "Shadow strength"
+msgstr "Sila tieňov"
#: src/settings_translation_file.cpp
msgid "Shape of the minimap. Enabled = round, disabled = square."
@@ -6274,8 +6586,8 @@ msgstr ""
"Po zmene je požadovaný reštart."
#: src/settings_translation_file.cpp
-msgid "Show nametag backgrounds by default"
-msgstr "Pri mene zobraz štandardne pozadie"
+msgid "Show name tag backgrounds by default"
+msgstr "Å tandardne zobraz menovku pozadia"
#: src/settings_translation_file.cpp
msgid "Shutdown message"
@@ -6309,6 +6621,10 @@ msgstr ""
"z hlavnej vetvy a tým sa zníži chvenie."
#: src/settings_translation_file.cpp
+msgid "Sky Body Orbit Tilt"
+msgstr "Sklon orbity na oblohe"
+
+#: src/settings_translation_file.cpp
msgid "Slice w"
msgstr "Plátok w"
@@ -6366,16 +6682,12 @@ msgid "Sneaking speed, in nodes per second."
msgstr "Rýchlosť zakrádania sa, v kockách za sekundu."
#: src/settings_translation_file.cpp
-msgid "Sound"
-msgstr "Zvuk"
-
-#: src/settings_translation_file.cpp
-msgid "Special key"
-msgstr "Å peciálne tlaÄidlo"
+msgid "Soft shadow radius"
+msgstr "Dosah mäkkých tieňov"
#: src/settings_translation_file.cpp
-msgid "Special key for climbing/descending"
-msgstr "Špeciálna klávesa pre šplhanie hore/dole"
+msgid "Sound"
+msgstr "Zvuk"
#: src/settings_translation_file.cpp
msgid ""
@@ -6401,6 +6713,18 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Spread a complete update of shadow map over given amount of frames.\n"
+"Higher values might make shadows laggy, lower values\n"
+"will consume more resources.\n"
+"Minimum value: 1; maximum value: 16"
+msgstr ""
+"Rozptýľ celkovú aktualizáciu mapy tieňov cez zadané množstvo snímok.\n"
+"Vyššie hodnoty môžu spôsobiť trhanie tieňov, nižšie hodnoty\n"
+"spotrebujú viac zdrojov.\n"
+"Minimálna hodnota: 1; maximálna hodnota: 16"
+
+#: src/settings_translation_file.cpp
+msgid ""
"Spread of light curve boost range.\n"
"Controls the width of the range to be boosted.\n"
"Standard deviation of the light curve boost Gaussian."
@@ -6532,6 +6856,16 @@ msgstr "Cesta k textúram"
#: src/settings_translation_file.cpp
msgid ""
+"Texture size to render the shadow map on.\n"
+"This must be a power of two.\n"
+"Bigger numbers create better shadows but it is also more expensive."
+msgstr ""
+"Veľkosť textúry pre renderovanie mapy tieňov.\n"
+"Toto musí byť mocnina dvoch.\n"
+"VäÄÅ¡ie Äísla vytvoria lepÅ¡ie tiene, ale sú aj nároÄnejÅ¡ie."
+
+#: src/settings_translation_file.cpp
+msgid ""
"Textures on a node may be aligned either to the node or to the world.\n"
"The former mode suits better things like machines, furniture, etc., while\n"
"the latter makes stairs and microblocks fit surroundings better.\n"
@@ -6551,7 +6885,7 @@ msgid "The URL for the content repository"
msgstr "Webová adresa (URL) k úložisku doplnkov"
#: src/settings_translation_file.cpp
-msgid "The deadzone of the joystick"
+msgid "The dead zone of the joystick"
msgstr "Mŕtva zóna joysticku"
#: src/settings_translation_file.cpp
@@ -6627,14 +6961,14 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"The rendering back-end for Irrlicht.\n"
+"The rendering back-end.\n"
"A restart is required after changing this.\n"
"Note: On Android, stick with OGLES1 if unsure! App may fail to start "
"otherwise.\n"
"On other platforms, OpenGL is recommended.\n"
"Shaders are supported by OpenGL (desktop only) and OGLES2 (experimental)"
msgstr ""
-"Renderovací back-end pre Irrlicht.\n"
+"Renderovací back-end.\n"
"Po zmene je vyžadovaný reštart.\n"
"Poznámka: Na Androide, ak si nie si istý, ponechaj OGLES1! Aplikácia by "
"nemusela naštartovať.\n"
@@ -6644,7 +6978,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"The sensitivity of the joystick axes for moving the\n"
-"ingame view frustum around."
+"in-game view frustum around."
msgstr ""
"Citlivosť osí joysticku pre pohyb\n"
"otáÄania pohľadu v hre."
@@ -6762,6 +7096,10 @@ msgid "Touch screen threshold"
msgstr "Prah citlivosti dotykovej obrazovky"
#: src/settings_translation_file.cpp
+msgid "Tradeoffs for performance"
+msgstr "Kompromisy za výkon"
+
+#: src/settings_translation_file.cpp
msgid "Trees noise"
msgstr "Å um stromov"
@@ -6839,12 +7177,12 @@ msgstr "Použi bilineárne filtrovanie pri zmene mierky textúr."
#: src/settings_translation_file.cpp
msgid ""
-"Use mip mapping to scale textures. May slightly increase performance,\n"
+"Use mipmapping to scale textures. May slightly increase performance,\n"
"especially when using a high resolution texture pack.\n"
"Gamma correct downscaling is not supported."
msgstr ""
-"Použi mip mapy pre úpravu textúr. Môže jemne zvýšiť výkon,\n"
-"obzvlášť použití balíÄka textúr s vysokým rozlíšením.\n"
+"Použi mip mapy pre zmenu veľkosti textúr. Môže jemne zvýšiť výkon,\n"
+"obzvlášť pri použití balíÄka textúr s vysokým rozlíšením.\n"
"Gama korektné podvzorkovanie nie je podporované."
#: src/settings_translation_file.cpp
@@ -6966,8 +7304,8 @@ msgid "Viewing range"
msgstr "Vzdialenosť dohľadu"
#: src/settings_translation_file.cpp
-msgid "Virtual joystick triggers aux button"
-msgstr "Virtuálny joystick stlaÄí tlaÄidlo aux"
+msgid "Virtual joystick triggers Aux1 button"
+msgstr "Virtuálny joystick aktivuje tlaÄidlo Aux1"
#: src/settings_translation_file.cpp
msgid "Volume"
@@ -7045,6 +7383,10 @@ msgid "Waving plants"
msgstr "Vlniace sa rastliny"
#: src/settings_translation_file.cpp
+msgid "Weblink color"
+msgstr "Farba webového odkazu"
+
+#: 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"
@@ -7072,9 +7414,8 @@ msgid ""
"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.\n"
+"memory. Powers of 2 are recommended. This setting is ONLY applied if\n"
+"bilinear/trilinear/anisotropic filtering is enabled.\n"
"This is also used as the base node texture size for world-aligned\n"
"texture autoscaling."
msgstr ""
@@ -7084,27 +7425,17 @@ msgstr ""
"s najbližším susedom aby bola zachovaná ostrosť pixelov.\n"
"Toto nastaví minimálnu veľkosť pre upravenú textúru;\n"
"vyššia hodnota znamená ostrejší vzhľad, ale potrebuje viac pamäti.\n"
-"OdporúÄané sú mocniny 2. Nastavenie viac než 1 nemusí maÅ¥ viditeľný efekt,\n"
-"kým nie je použité bilineárne/trilineárne/anisotropné filtrovanie.\n"
+"OdporúÄané sú mocniny 2. Nastavenie sa aplikuje len,\n"
+"ak je použité bilineárne/trilineárne/anisotropné filtrovanie.\n"
"Toto sa tiež používa ako základná veľkosť textúry kociek pre\n"
"\"world-aligned autoscaling\" textúr."
#: src/settings_translation_file.cpp
msgid ""
-"Whether FreeType fonts are used, requires FreeType support to be compiled "
-"in.\n"
-"If disabled, bitmap and XML vectors fonts are used instead."
-msgstr ""
-"Aby boli FreeType písma použité, je nutné aby bola podpora FreeType "
-"zakompilovaná.\n"
-"Ak je zakázané, budú použité bitmapové a XML vektorové písma."
-
-#: src/settings_translation_file.cpp
-msgid ""
-"Whether nametag backgrounds should be shown by default.\n"
+"Whether name tag backgrounds should be shown by default.\n"
"Mods may still set a background."
msgstr ""
-"Či sa má pri mene zobraziť pozadie.\n"
+"Či sa má štandardne zobraziť menovka pozadia.\n"
"Rozšírenia stále môžu pozadie nastaviť."
#: src/settings_translation_file.cpp
@@ -7153,8 +7484,8 @@ msgid ""
msgstr "Zobrazenie ladiaceho okna na klientovi (má rovnaký efekt ako F5)."
#: src/settings_translation_file.cpp
-msgid "Width component of the initial window size."
-msgstr "Šírka okna po spustení."
+msgid "Width component of the initial window size. Ignored in fullscreen mode."
+msgstr "Šírka okna po spustení. Ignorované v móde celej obrazovky."
#: src/settings_translation_file.cpp
msgid "Width of the selection box lines around nodes."
@@ -7256,46 +7587,22 @@ msgid "Y-level of seabed."
msgstr "Y-úroveň morského dna."
#: src/settings_translation_file.cpp
-msgid ""
-"ZLib compression level to use when saving mapblocks to disk.\n"
-"-1 - Zlib's default compression level\n"
-"0 - no compresson, fastest\n"
-"9 - best compression, slowest\n"
-"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)"
-msgstr ""
-"Úroveň kompresie ZLib používaný pri ukladaní blokov mapy na disk.\n"
-"-1 - predvolená úroveň kompresie Zlib\n"
-"0 - bez kompresie, najrýchlejšie\n"
-"9 - najlepšia kompresia, najpomalšie\n"
-"(pre úrovne 1-3 používa Zlib \"rýchlu\" metódu, pre 4-9 používa normálnu "
-"metódu)"
-
-#: src/settings_translation_file.cpp
-msgid ""
-"ZLib compression level to use when sending mapblocks to the client.\n"
-"-1 - Zlib's default compression level\n"
-"0 - no compresson, fastest\n"
-"9 - best compression, slowest\n"
-"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)"
-msgstr ""
-"Úroveň kompresie ZLib používaný pri posielaní blokov mapy klientom.\n"
-"-1 - predvolená úroveň kompresie Zlib\n"
-"0 - bez kompresie, najrýchlejšie\n"
-"9 - najlepšia kompresia, najpomalšie\n"
-"(pre úrovne 1-3 používa Zlib \"rýchlu\" metódu, pre 4-9 používa normálnu "
-"metódu)"
-
-#: src/settings_translation_file.cpp
msgid "cURL file download timeout"
msgstr "cURL Äasový rámec sÅ¥ahovania súborov"
#: src/settings_translation_file.cpp
+msgid "cURL interactive timeout"
+msgstr "Časový rámec interakcie cURL"
+
+#: src/settings_translation_file.cpp
msgid "cURL parallel limit"
msgstr "Paralelný limit cURL"
-#: src/settings_translation_file.cpp
-msgid "cURL timeout"
-msgstr "Časový rámec cURL"
+#~ msgid "- Creative Mode: "
+#~ msgstr "- Kreatívny mód: "
+
+#~ msgid "- Damage: "
+#~ msgstr "- Poškodenie: "
#~ msgid ""
#~ "0 = parallax occlusion with slope information (faster).\n"
@@ -7304,9 +7611,15 @@ msgstr "Časový rámec cURL"
#~ "0 = parallax occlusion s informácia o sklone (rýchlejšie).\n"
#~ "1 = mapovanie reliéfu (pomalšie, presnejšie)."
+#~ msgid "Address / Port"
+#~ msgstr "Adresa / Port"
+
#~ msgid "Are you sure to reset your singleplayer world?"
#~ msgstr "Si si istý, že chceÅ¡ vynulovaÅ¥ svoj svet jedného hráÄa?"
+#~ msgid "Bits per pixel (aka color depth) in fullscreen mode."
+#~ msgstr "PoÄet bitov na pixel (farebná hĺbka) v režime celej obrazovky."
+
#~ msgid "Bump Mapping"
#~ msgstr "Bump Mapping (Ilúzia nerovnosti)"
@@ -7333,9 +7646,22 @@ msgstr "Časový rámec cURL"
#~ msgid "Configure"
#~ msgstr "Konfigurácia"
+#~ msgid "Credits"
+#~ msgstr "PoÄakovanie"
+
#~ msgid "Crosshair color (R,G,B)."
#~ msgstr "Farba zameriavaÄa (R,G,B)."
+#~ msgid "Damage enabled"
+#~ msgstr "Poškodenie je aktivované"
+
+#~ msgid ""
+#~ "Default timeout for cURL, stated in milliseconds.\n"
+#~ "Only has an effect if compiled with cURL."
+#~ msgstr ""
+#~ "Å tandardný Äasový rámec pre cURL, zadaný v milisekundách.\n"
+#~ "Má efekt len ak je skompilovaný s cURL."
+
#~ msgid ""
#~ "Defines sampling step of texture.\n"
#~ "A higher value results in smoother normal maps."
@@ -7378,18 +7704,45 @@ msgstr "Časový rámec cURL"
#~ msgid "FPS in pause menu"
#~ msgstr "FPS v menu pozastavenia hry"
+#~ msgid "Fallback font shadow"
+#~ msgstr "Tieň záložného písma"
+
+#~ msgid "Fallback font shadow alpha"
+#~ msgstr "Priehľadnosť tieňa záložného fontu"
+
+#~ msgid "Fallback font size"
+#~ msgstr "Veľkosť záložného písma"
+
+#~ msgid "Font size of the fallback font in point (pt)."
+#~ msgstr "Veľkosť písma záložného písma v bodoch (pt)."
+
+#~ msgid "FreeType fonts"
+#~ msgstr "FreeType písma"
+
+#~ msgid "Full screen BPP"
+#~ msgstr "BPP v režime celej obrazovky"
+
#~ msgid "Generate Normal Maps"
#~ msgstr "Normal Maps (nerovnosti)"
#~ msgid "Generate normalmaps"
#~ msgstr "Generuj normálové mapy"
+#~ msgid "High-precision FPU"
+#~ msgstr "Vysoko-presné FPU"
+
+#~ msgid "Install: file: \"$1\""
+#~ msgstr "Inštalácia: súbor: \"$1\""
+
#~ msgid "Main"
#~ msgstr "Hlavné"
#~ msgid "Main menu style"
#~ msgstr "Štýl hlavného menu"
+#~ msgid "Makes DirectX work with LuaJIT. Disable if it causes troubles."
+#~ msgstr "Umožní DirectX pracovať s LuaJIT. Vypni ak to spôsobuje problémy."
+
#~ msgid "Minimap in radar mode, Zoom x2"
#~ msgstr "Minimapa v radarovom režime, priblíženie x2"
@@ -7402,6 +7755,9 @@ msgstr "Časový rámec cURL"
#~ msgid "Minimap in surface mode, Zoom x4"
#~ msgstr "Minimapa v povrchovom režime, priblíženie x4"
+#~ msgid "Name / Password"
+#~ msgstr "Meno / Heslo"
+
#~ msgid "Name/Password"
#~ msgstr "Meno/Heslo"
@@ -7417,6 +7773,11 @@ msgstr "Časový rámec cURL"
#~ msgid "Number of parallax occlusion iterations."
#~ msgstr "PoÄet opakovaní výpoÄtu parallax occlusion."
+#~ msgid ""
+#~ "Opaqueness (alpha) of the shadow behind the fallback font, between 0 and "
+#~ "255."
+#~ msgstr "Nepriehľadnosť tieňa za záložným písmom, medzi 0 a 255."
+
#~ msgid "Overall bias of parallax occlusion effect, usually scale/2."
#~ msgstr "Celkové skreslenie parallax occlusion efektu, obvykle mierka/2."
@@ -7441,17 +7802,62 @@ msgstr "Časový rámec cURL"
#~ msgid "Parallax occlusion scale"
#~ msgstr "Mierka parallax occlusion"
+#~ msgid "PvP enabled"
+#~ msgstr "PvP je aktívne"
+
#~ msgid "Reset singleplayer world"
#~ msgstr "Vynuluj svet jedného hráÄa"
+#~ msgid ""
+#~ "Set the shadow update time.\n"
+#~ "Lower value means shadows and map updates faster, but it consume more "
+#~ "resources.\n"
+#~ "Minimun value 0.001 seconds max value 0.2 seconds"
+#~ msgstr ""
+#~ "Nastav aktualizaÄný Äas tieňov.\n"
+#~ "Nižšia hodnota znamená. že sa mapa a tiene aktualizujú rýchlejšie, ale "
+#~ "spotrebuje sa viac zdrojov.\n"
+#~ "Minimálna hodnota je 0.001 sekúnd max. hodnota je 0.2 sekundy"
+
+#~ msgid ""
+#~ "Shadow offset (in pixels) of the fallback font. If 0, then shadow will "
+#~ "not be drawn."
+#~ msgstr ""
+#~ "Posun tieňa (v pixeloch) záložného písma. Ak je 0, tak tieň nebude "
+#~ "vykreslený."
+
+#~ msgid "Special"
+#~ msgstr "Špeciál"
+
+#~ msgid "Special key"
+#~ msgstr "Å peciálne tlaÄidlo"
+
#~ msgid "Start Singleplayer"
#~ msgstr "Spusti hru pre jedného hráÄa"
#~ msgid "Strength of generated normalmaps."
#~ msgstr "Intenzita generovaných normálových máp."
+#~ msgid "To enable shaders the OpenGL driver needs to be used."
+#~ msgstr "Aby mohli byť aktivované shadery, musí sa použiť OpenGL."
+
#~ msgid "View"
#~ msgstr "Zobraziť"
+#~ msgid ""
+#~ "Whether FreeType fonts are used, requires FreeType support to be compiled "
+#~ "in.\n"
+#~ "If disabled, bitmap and XML vectors fonts are used instead."
+#~ msgstr ""
+#~ "Aby boli FreeType písma použité, je nutné aby bola podpora FreeType "
+#~ "zakompilovaná.\n"
+#~ "Ak je zakázané, budú použité bitmapové a XML vektorové písma."
+
#~ msgid "Yes"
#~ msgstr "Ãno"
+
+#~ msgid "You died."
+#~ msgstr "Zomrel si."
+
+#~ msgid "needs_fallback_font"
+#~ msgstr "no"
diff --git a/po/sl/minetest.po b/po/sl/minetest.po
index a67ac9c65..cab8e9dae 100644
--- a/po/sl/minetest.po
+++ b/po/sl/minetest.po
@@ -2,7 +2,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Slovenian (Minetest)\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-02-23 19:03+0100\n"
+"POT-Creation-Date: 2022-01-25 23:19+0100\n"
"PO-Revision-Date: 2020-09-30 19:41+0000\n"
"Last-Translator: Iztok Bajcar <iztok.bajcar@gmail.com>\n"
"Language-Team: Slovenian <https://hosted.weblate.org/projects/minetest/"
@@ -15,6 +15,46 @@ msgstr ""
"%100==4 ? 2 : 3;\n"
"X-Generator: Weblate 4.3-dev\n"
+#: builtin/client/chatcommands.lua
+msgid "Clear the out chat queue"
+msgstr ""
+
+#: builtin/client/chatcommands.lua
+msgid "Empty command."
+msgstr ""
+
+#: builtin/client/chatcommands.lua
+#, fuzzy
+msgid "Exit to main menu"
+msgstr "Izhod na meni"
+
+#: builtin/client/chatcommands.lua
+#, fuzzy
+msgid "Invalid command: "
+msgstr "Krajevni ukaz"
+
+#: builtin/client/chatcommands.lua
+msgid "Issued command: "
+msgstr ""
+
+#: builtin/client/chatcommands.lua
+#, fuzzy
+msgid "List online players"
+msgstr "samostojna igra"
+
+#: builtin/client/chatcommands.lua
+#, fuzzy
+msgid "Online players: "
+msgstr "samostojna igra"
+
+#: builtin/client/chatcommands.lua
+msgid "The out chat queue is now empty."
+msgstr ""
+
+#: builtin/client/chatcommands.lua
+msgid "This command is disabled by server."
+msgstr ""
+
#: builtin/client/death_formspec.lua src/client/game.cpp
msgid "Respawn"
msgstr "Ponovno oživi"
@@ -23,11 +63,42 @@ msgstr "Ponovno oživi"
msgid "You died"
msgstr "Umrl si"
+#: builtin/common/chatcommands.lua
+#, fuzzy
+msgid "Available commands:"
+msgstr "Krajevni ukaz"
+
+#: builtin/common/chatcommands.lua
+#, fuzzy
+msgid "Available commands: "
+msgstr "Krajevni ukaz"
+
+#: builtin/common/chatcommands.lua
+msgid "Command not available: "
+msgstr ""
+
+#: builtin/common/chatcommands.lua
+msgid "Get help for commands"
+msgstr ""
+
+#: builtin/common/chatcommands.lua
+msgid ""
+"Use '.help <cmd>' to get more information, or '.help all' to list everything."
+msgstr ""
+
+#: builtin/common/chatcommands.lua
+msgid "[all | <cmd>]"
+msgstr ""
+
#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp
msgid "OK"
msgstr "V redu"
#: builtin/fstk/ui.lua
+msgid "<none available>"
+msgstr ""
+
+#: builtin/fstk/ui.lua
msgid "An error occurred in a Lua script:"
msgstr "Prišlo je do napake v Lua skripti:"
@@ -237,6 +308,11 @@ msgid "Install missing dependencies"
msgstr "Izbirne možnosti:"
#: builtin/mainmenu/dlg_contentstore.lua
+#, fuzzy
+msgid "Install: Unsupported file type or broken archive"
+msgstr "NameÅ¡Äanje: nepodprta vrsta datoteke \"$1\" oziroma okvarjen arhiv"
+
+#: builtin/mainmenu/dlg_contentstore.lua
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Mods"
msgstr "Prilagoditve (mods)"
@@ -554,7 +630,7 @@ msgstr "< Nazaj do Nastavitev"
msgid "Browse"
msgstr "Prebrskaj"
-#: builtin/mainmenu/dlg_settings_advanced.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_settings.lua
msgid "Disabled"
msgstr "OnemogoÄeno"
@@ -580,7 +656,8 @@ msgid "Offset"
msgstr "Odmik"
#: builtin/mainmenu/dlg_settings_advanced.lua
-msgid "Persistance"
+#, fuzzy
+msgid "Persistence"
msgstr "Trajanje"
#: builtin/mainmenu/dlg_settings_advanced.lua
@@ -599,7 +676,7 @@ msgstr "Obnovi privzeto"
msgid "Scale"
msgstr "Skala"
-#: builtin/mainmenu/dlg_settings_advanced.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_online.lua
msgid "Search"
msgstr "PoiÅ¡Äi"
@@ -694,14 +771,6 @@ msgstr ""
"prilagoditev $1"
#: builtin/mainmenu/pkgmgr.lua
-msgid "Install: Unsupported file type \"$1\" or broken archive"
-msgstr "NameÅ¡Äanje: nepodprta vrsta datoteke \"$1\" oziroma okvarjen arhiv"
-
-#: builtin/mainmenu/pkgmgr.lua
-msgid "Install: file: \"$1\""
-msgstr "Namesti: datoteka: »$1«"
-
-#: builtin/mainmenu/pkgmgr.lua
msgid "Unable to find a valid mod or modpack"
msgstr "Ni mogoÄe najti ustrezne prilagoditve ali paketa prilagoditev"
@@ -736,6 +805,41 @@ msgstr ""
"Morda je treba ponovno omogoÄiti javni seznam strežnikov oziroma preveriti "
"internetno povezavo."
+#: builtin/mainmenu/tab_about.lua
+msgid "About"
+msgstr ""
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Active Contributors"
+msgstr "Dejavni sodelavci"
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Active renderer:"
+msgstr ""
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Core Developers"
+msgstr "Glavni razvijalci"
+
+#: builtin/mainmenu/tab_about.lua
+#, fuzzy
+msgid "Open User Data Directory"
+msgstr "Izberi mapo"
+
+#: builtin/mainmenu/tab_about.lua
+msgid ""
+"Opens the directory that contains user-provided worlds, games, mods,\n"
+"and texture packs in a file manager / explorer."
+msgstr ""
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Previous Contributors"
+msgstr "Predhodni sodelavci"
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Previous Core Developers"
+msgstr "Predhodni razvajalci"
+
#: builtin/mainmenu/tab_content.lua
msgid "Browse online content"
msgstr "Brskaj po spletnih vsebinah"
@@ -776,37 +880,6 @@ msgstr "Odstrani paket"
msgid "Use Texture Pack"
msgstr "Uporabi paket tekstur"
-#: builtin/mainmenu/tab_credits.lua
-msgid "Active Contributors"
-msgstr "Dejavni sodelavci"
-
-#: builtin/mainmenu/tab_credits.lua
-msgid "Core Developers"
-msgstr "Glavni razvijalci"
-
-#: builtin/mainmenu/tab_credits.lua
-msgid "Credits"
-msgstr "Zasluge"
-
-#: builtin/mainmenu/tab_credits.lua
-#, fuzzy
-msgid "Open User Data Directory"
-msgstr "Izberi mapo"
-
-#: builtin/mainmenu/tab_credits.lua
-msgid ""
-"Opens the directory that contains user-provided worlds, games, mods,\n"
-"and texture packs in a file manager / explorer."
-msgstr ""
-
-#: builtin/mainmenu/tab_credits.lua
-msgid "Previous Contributors"
-msgstr "Predhodni sodelavci"
-
-#: builtin/mainmenu/tab_credits.lua
-msgid "Previous Core Developers"
-msgstr "Predhodni razvajalci"
-
#: builtin/mainmenu/tab_local.lua
msgid "Announce Server"
msgstr "Objavi strežnik"
@@ -835,7 +908,7 @@ msgstr "Gostiteljski strežnik"
msgid "Install games from ContentDB"
msgstr "Namesti igre iz ContentDB"
-#: builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
msgid "Name"
msgstr ""
@@ -847,7 +920,7 @@ msgstr "Novo"
msgid "No world created or selected!"
msgstr "Ni ustvarjenega oziroma izbranega sveta!"
-#: builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
#, fuzzy
msgid "Password"
msgstr "Novo geslo"
@@ -856,7 +929,7 @@ msgstr "Novo geslo"
msgid "Play Game"
msgstr "Zaženi igro"
-#: builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
msgid "Port"
msgstr "Vrata"
@@ -878,8 +951,13 @@ msgid "Start Game"
msgstr "ZaÄni igro"
#: builtin/mainmenu/tab_online.lua
-msgid "Address / Port"
-msgstr "Naslov / Vrata"
+#, fuzzy
+msgid "Address"
+msgstr "– Naslov: "
+
+#: builtin/mainmenu/tab_online.lua src/client/keycode.cpp
+msgid "Clear"
+msgstr "PoÄisti"
#: builtin/mainmenu/tab_online.lua
msgid "Connect"
@@ -889,34 +967,46 @@ msgstr "Poveži"
msgid "Creative mode"
msgstr "Ustvarjalni naÄin"
+#. ~ PvP = Player versus Player
#: builtin/mainmenu/tab_online.lua
-msgid "Damage enabled"
-msgstr "PoÅ¡kodbe so omogoÄene"
+#, fuzzy
+msgid "Damage / PvP"
+msgstr "Poškodbe"
#: builtin/mainmenu/tab_online.lua
msgid "Del. Favorite"
msgstr "Izbriši priljubljeno"
#: builtin/mainmenu/tab_online.lua
-msgid "Favorite"
+#, fuzzy
+msgid "Favorites"
msgstr "Priljubljeno"
#: builtin/mainmenu/tab_online.lua
-msgid "Join Game"
-msgstr "Prijavi se v igro"
+msgid "Incompatible Servers"
+msgstr ""
#: builtin/mainmenu/tab_online.lua
-msgid "Name / Password"
-msgstr "Ime / Geslo"
+msgid "Join Game"
+msgstr "Prijavi se v igro"
#: builtin/mainmenu/tab_online.lua
msgid "Ping"
msgstr "Ping"
-#. ~ PvP = Player versus Player
#: builtin/mainmenu/tab_online.lua
-msgid "PvP enabled"
-msgstr "Igra PvP je omogoÄena"
+#, fuzzy
+msgid "Public Servers"
+msgstr "Objavi strežnik"
+
+#: builtin/mainmenu/tab_online.lua
+msgid "Refresh"
+msgstr ""
+
+#: builtin/mainmenu/tab_online.lua
+#, fuzzy
+msgid "Server Description"
+msgstr "Vrata strežnika"
#: builtin/mainmenu/tab_settings.lua
msgid "2x"
@@ -958,11 +1048,32 @@ msgstr "Spremeni tipke"
msgid "Connected Glass"
msgstr "Povezano steklo"
+#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
+#, fuzzy
+msgid "Dynamic shadows"
+msgstr "Senca pisave"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Dynamic shadows: "
+msgstr ""
+
#: builtin/mainmenu/tab_settings.lua
msgid "Fancy Leaves"
msgstr "Olepšani listi"
#: builtin/mainmenu/tab_settings.lua
+msgid "High"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Low"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Medium"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
msgid "Mipmap"
msgstr "Zemljevid (minimap)"
@@ -1035,10 +1146,6 @@ msgstr "Gladko osvetljevanje"
msgid "Texturing:"
msgstr "Tekstura:"
-#: builtin/mainmenu/tab_settings.lua
-msgid "To enable shaders the OpenGL driver needs to be used."
-msgstr "Za prikaz senÄenja mora biti omogoÄen gonilnik OpenGL."
-
#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
msgid "Tone Mapping"
msgstr "Barvno preslikavanje"
@@ -1053,6 +1160,14 @@ msgid "Trilinear Filter"
msgstr "Trilinearni filter"
#: builtin/mainmenu/tab_settings.lua
+msgid "Ultra High"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Very Low"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
msgid "Waving Leaves"
msgstr "Pokaži premikanje listov"
@@ -1064,7 +1179,7 @@ msgstr "Valovanje tekoÄin"
msgid "Waving Plants"
msgstr "Pokaži nihanje rastlin"
-#: src/client/client.cpp
+#: src/client/client.cpp src/client/game.cpp
msgid "Connection timed out."
msgstr "Povezava je potekla."
@@ -1093,7 +1208,8 @@ msgid "Connection error (timed out?)"
msgstr "Napaka povezave (ali je dejanje Äasovno preteklo?)"
#: src/client/clientlauncher.cpp
-msgid "Could not find or load game \""
+#, fuzzy
+msgid "Could not find or load game: "
msgstr "Ni mogoÄe najti oziroma naložiti igre »"
#: src/client/clientlauncher.cpp
@@ -1126,18 +1242,6 @@ msgstr "Ni bilo mogoÄe odpreti datoteke z geslom: "
msgid "Provided world path doesn't exist: "
msgstr "Podana pot do sveta ne obstaja: "
-#. ~ DO NOT TRANSLATE THIS LITERALLY!
-#. This is a special string. Put either "no" or "yes"
-#. into the translation field (literally).
-#. Choose "yes" if the language requires use of the fallback
-#. font, "no" otherwise.
-#. The fallback font is (normally) required for languages with
-#. non-Latin script, like Chinese.
-#. When in doubt, test your translation.
-#: src/client/fontengine.cpp
-msgid "needs_fallback_font"
-msgstr "no"
-
#: src/client/game.cpp
msgid ""
"\n"
@@ -1151,14 +1255,6 @@ msgid "- Address: "
msgstr "– Naslov: "
#: src/client/game.cpp
-msgid "- Creative Mode: "
-msgstr "– Ustvarjalni naÄin: "
-
-#: src/client/game.cpp
-msgid "- Damage: "
-msgstr "– Poškodbe: "
-
-#: src/client/game.cpp
msgid "- Mode: "
msgstr "– NaÄin: "
@@ -1180,6 +1276,16 @@ msgid "- Server Name: "
msgstr "– Ime strežnika: "
#: src/client/game.cpp
+#, fuzzy
+msgid "A serialization error occurred:"
+msgstr "Prišlo je do napake:"
+
+#: src/client/game.cpp
+#, c-format
+msgid "Access denied. Reason: %s"
+msgstr ""
+
+#: src/client/game.cpp
msgid "Automatic forward disabled"
msgstr "Samodejno premikanje naprej je onemogoÄeno"
@@ -1188,6 +1294,22 @@ msgid "Automatic forward enabled"
msgstr "Samodejno premikanje naprej je omogoÄeno"
#: src/client/game.cpp
+msgid "Block bounds hidden"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Block bounds shown for all blocks"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Block bounds shown for current block"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Block bounds shown for nearby blocks"
+msgstr ""
+
+#: src/client/game.cpp
msgid "Camera update disabled"
msgstr "Posodabljanje kamere je onemogoÄeno"
@@ -1196,6 +1318,10 @@ msgid "Camera update enabled"
msgstr "Posodabljanje kamere je omogoÄeno"
#: src/client/game.cpp
+msgid "Can't show block bounds (need 'basic_debug' privilege)"
+msgstr ""
+
+#: src/client/game.cpp
msgid "Change Password"
msgstr "Spremeni geslo"
@@ -1208,6 +1334,10 @@ msgid "Cinematic mode enabled"
msgstr "Filmski naÄin (Cinematic mode) je omogoÄen"
#: src/client/game.cpp
+msgid "Client disconnected"
+msgstr ""
+
+#: src/client/game.cpp
msgid "Client side scripting is disabled"
msgstr "Skriptiranje s strani odjemalca je onemogoÄeno"
@@ -1216,6 +1346,10 @@ msgid "Connecting to server..."
msgstr "Poteka povezovanje s strežnikom ..."
#: src/client/game.cpp
+msgid "Connection failed for unknown reason"
+msgstr ""
+
+#: src/client/game.cpp
msgid "Continue"
msgstr "Nadaljuj"
@@ -1253,6 +1387,11 @@ msgstr ""
"- %s 9: omogoÄi klepet\n"
#: src/client/game.cpp
+#, c-format
+msgid "Couldn't resolve address: %s"
+msgstr ""
+
+#: src/client/game.cpp
msgid "Creating client..."
msgstr "Ustvarjanje odjemalca ..."
@@ -1384,6 +1523,11 @@ msgstr ""
"Zemljevid (minimap) je trenutno onemogoÄen zaradi igre ali prilagoditve"
#: src/client/game.cpp
+#, fuzzy
+msgid "Multiplayer"
+msgstr "samostojna igra"
+
+#: src/client/game.cpp
msgid "Noclip mode disabled"
msgstr "Prehod skozi zid (naÄin duha) je onemogoÄen"
@@ -1460,6 +1604,21 @@ msgstr "Zvok ni utišan"
#: src/client/game.cpp
#, c-format
+msgid "The server is probably running a different version of %s."
+msgstr ""
+
+#: src/client/game.cpp
+#, c-format
+msgid "Unable to connect to %s because IPv6 is disabled"
+msgstr ""
+
+#: src/client/game.cpp
+#, c-format
+msgid "Unable to listen on %s because IPv6 is disabled"
+msgstr ""
+
+#: src/client/game.cpp
+#, c-format
msgid "Viewing range changed to %d"
msgstr "Doseg pogleda je nastavljena na %d %%"
@@ -1530,10 +1689,6 @@ msgid "Caps Lock"
msgstr "Velike Ärke"
#: src/client/keycode.cpp
-msgid "Clear"
-msgstr "PoÄisti"
-
-#: src/client/keycode.cpp
msgid "Control"
msgstr "Control"
@@ -1805,6 +1960,15 @@ msgstr "Zemljevid (minimap) je v naÄinu prikazovanja povrÅ¡ja, Zoom x1"
msgid "Minimap in texture mode"
msgstr "Zemljevid (minimap) je v naÄinu prikazovanja povrÅ¡ja, Zoom x1"
+#: src/gui/guiChatConsole.cpp
+#, fuzzy
+msgid "Failed to open webpage"
+msgstr "Prenos $1 je spodletel"
+
+#: src/gui/guiChatConsole.cpp
+msgid "Opening webpage"
+msgstr ""
+
#: src/gui/guiConfirmRegistration.cpp src/gui/guiPasswordChange.cpp
msgid "Passwords do not match!"
msgstr "Gesli se ne ujemata!"
@@ -1833,7 +1997,8 @@ msgid "Proceed"
msgstr "Nadaljuj"
#: src/gui/guiKeyChangeMenu.cpp
-msgid "\"Special\" = climb down"
+#, fuzzy
+msgid "\"Aux1\" = climb down"
msgstr "\"Special\" = plezanje dol"
#: src/gui/guiKeyChangeMenu.cpp
@@ -1845,10 +2010,18 @@ msgid "Automatic jumping"
msgstr "Samodejno skakanje"
#: src/gui/guiKeyChangeMenu.cpp
+msgid "Aux1"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
msgid "Backward"
msgstr "Nazaj"
#: src/gui/guiKeyChangeMenu.cpp
+msgid "Block bounds"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
msgid "Change camera"
msgstr "Sprememba kamere"
@@ -1939,10 +2112,6 @@ msgid "Sneak"
msgstr "Plaziti se"
#: src/gui/guiKeyChangeMenu.cpp
-msgid "Special"
-msgstr "Specialen"
-
-#: src/gui/guiKeyChangeMenu.cpp
msgid "Toggle HUD"
msgstr "Preklopi HUD"
@@ -2004,7 +2173,8 @@ msgid "Muted"
msgstr "Utišano"
#: src/gui/guiVolumeChange.cpp
-msgid "Sound Volume: "
+#, fuzzy, c-format
+msgid "Sound Volume: %d%%"
msgstr "Glasnost zvoka: "
#. ~ Imperative, as in "Enter/type in text".
@@ -2030,9 +2200,10 @@ msgstr ""
"pritiska na ekran."
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
-"(Android) Use virtual joystick to trigger \"aux\" button.\n"
-"If enabled, virtual joystick will also tap \"aux\" button when out of main "
+"(Android) Use virtual joystick to trigger \"Aux1\" button.\n"
+"If enabled, virtual joystick will also tap \"Aux1\" button when out of main "
"circle."
msgstr ""
"(Android) Uporabi virtualno igralno palico za pritisk gumba \"aux\".\n"
@@ -2255,6 +2426,10 @@ msgstr ""
"Android), npr. za 4K ekrane."
#: src/settings_translation_file.cpp
+msgid "Adjust the detected display density, used for scaling UI elements."
+msgstr ""
+
+#: src/settings_translation_file.cpp
#, c-format
msgid ""
"Adjusts the density of the floatland layer.\n"
@@ -2381,6 +2556,15 @@ msgid "Autoscaling mode"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Aux1 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Aux1 key for climbing/descending"
+msgstr "Posebna tipka, ki se uporablja za plezanje in spuÅ¡Äanje"
+
+#: src/settings_translation_file.cpp
msgid "Backward key"
msgstr "Tipka backward"
@@ -2427,10 +2611,6 @@ msgid "Biome noise"
msgstr "Å um bioma"
#: src/settings_translation_file.cpp
-msgid "Bits per pixel (aka color depth) in fullscreen mode."
-msgstr "Biti na piksel (barvna globina) v celozaslonskem naÄinu."
-
-#: src/settings_translation_file.cpp
msgid "Block send optimize distance"
msgstr ""
@@ -2544,6 +2724,15 @@ msgstr ""
"0.0 je minimalna raven svetlobe, 1.0 maksimalna."
#: src/settings_translation_file.cpp
+msgid "Chat command time message threshold"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Chat commands"
+msgstr "Ukaz"
+
+#: src/settings_translation_file.cpp
#, fuzzy
msgid "Chat font size"
msgstr "Velikost pisave"
@@ -2579,8 +2768,9 @@ msgid "Chat toggle key"
msgstr "Tipka za preklop na klepet"
#: src/settings_translation_file.cpp
-msgid "Chatcommands"
-msgstr ""
+#, fuzzy
+msgid "Chat weblinks"
+msgstr "Pogovor je prikazan"
#: src/settings_translation_file.cpp
#, fuzzy
@@ -2601,6 +2791,12 @@ msgid "Clean transparent textures"
msgstr "ÄŒiste prosojne teksture"
#: src/settings_translation_file.cpp
+msgid ""
+"Clickable weblinks (middle-click or Ctrl+left-click) enabled in chat console "
+"output."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Client"
msgstr "Odjemalec"
@@ -2645,6 +2841,11 @@ msgid "Colored fog"
msgstr "Barvna megla"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Colored shadows"
+msgstr "Barvna megla"
+
+#: src/settings_translation_file.cpp
msgid ""
"Comma-separated list of flags to hide in the content repository.\n"
"\"nonfree\" can be used to hide packages which do not qualify as 'free "
@@ -2672,6 +2873,22 @@ msgid "Command key"
msgstr "Tipka Command"
#: src/settings_translation_file.cpp
+msgid ""
+"Compression level to use when saving mapblocks to disk.\n"
+"-1 - use default compression level\n"
+"0 - least compression, fastest\n"
+"9 - best compression, slowest"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Compression level to use when sending mapblocks to the client.\n"
+"-1 - use default compression level\n"
+"0 - least compression, fastest\n"
+"9 - best compression, slowest"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Connect glass"
msgstr "Poveži steklo"
@@ -2765,7 +2982,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"Crosshair alpha (opaqueness, between 0 and 255).\n"
-"Also controls the object crosshair color"
+"This also applies to the object crosshair."
msgstr ""
#: src/settings_translation_file.cpp
@@ -2845,8 +3062,9 @@ msgstr "Privzeta igra"
#: src/settings_translation_file.cpp
msgid ""
-"Default timeout for cURL, stated in milliseconds.\n"
-"Only has an effect if compiled with cURL."
+"Define shadow filtering quality.\n"
+"This simulates the soft shadows effect by applying a PCF or Poisson disk\n"
+"but also uses more resources."
msgstr ""
#: src/settings_translation_file.cpp
@@ -2968,6 +3186,10 @@ msgid "Disallow empty passwords"
msgstr "Ne dovoli praznih gesel"
#: src/settings_translation_file.cpp
+msgid "Display Density Scaling Factor"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Domain name of server, to be displayed in the serverlist."
msgstr "Ime domene strežnika, ki se prikaže na seznamu strežnikov."
@@ -3012,6 +3234,19 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Enable Poisson disk filtering.\n"
+"On true uses Poisson disk to make \"soft shadows\". Otherwise uses PCF "
+"filtering."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable colored shadows.\n"
+"On true translucent nodes cast colored shadows. This is expensive."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Enable console window"
msgstr ""
@@ -3121,6 +3356,12 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Enables tradeoffs that reduce CPU load or increase rendering performance\n"
+"at the expense of minor visual glitches that do not impact game playability."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Engine profiling data print interval"
msgstr ""
@@ -3160,18 +3401,6 @@ msgid "Fallback font path"
msgstr "Pot pisave"
#: 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 "Tipka za hitro premikanje"
@@ -3190,7 +3419,7 @@ msgstr "Hitro premikanje"
#: src/settings_translation_file.cpp
#, fuzzy
msgid ""
-"Fast movement (via the \"special\" key).\n"
+"Fast movement (via the \"Aux1\" key).\n"
"This requires the \"fast\" privilege on the server."
msgstr ""
"Možnost omogoÄa hitro premikanje (s tipko »uporabi«).\n"
@@ -3228,9 +3457,9 @@ 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."
+"which PNG optimizers usually discard, often resulting in dark or\n"
+"light edges to transparent textures. Apply a filter to clean that up\n"
+"at texture load time. This is automatically enabled if mipmapping is enabled."
msgstr ""
#: src/settings_translation_file.cpp
@@ -3324,15 +3553,15 @@ msgid "Font size"
msgstr "Velikost pisave"
#: src/settings_translation_file.cpp
-msgid "Font size of the default font in point (pt)."
+msgid "Font size divisible by"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Font size of the fallback font in point (pt)."
+msgid "Font size of the default font where 1 unit = 1 pixel at 96 DPI"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Font size of the monospace font in point (pt)."
+msgid "Font size of the monospace font where 1 unit = 1 pixel at 96 DPI"
msgstr ""
#: src/settings_translation_file.cpp
@@ -3343,6 +3572,17 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"For pixel-style fonts that do not scale well, this ensures that font sizes "
+"used\n"
+"with this font will always be divisible by this value, in pixels. For "
+"instance,\n"
+"a pixel font 16 pixels tall should have this set to 16, so it will only ever "
+"be\n"
+"sized 16, 32, 48, etc., so a mod requesting a size of 25 will get 32."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Format of player chat messages. The following strings are valid "
"placeholders:\n"
"@name, @message, @timestamp (optional)"
@@ -3404,10 +3644,6 @@ msgid "Fraction of the visible distance at which fog starts to be rendered"
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)."
@@ -3432,10 +3668,6 @@ msgid "Full screen"
msgstr "Celozaslonski naÄin"
#: src/settings_translation_file.cpp
-msgid "Full screen BPP"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Fullscreen mode."
msgstr "Celozaslonski naÄin."
@@ -3459,7 +3691,7 @@ msgstr ""
msgid ""
"Global map generation attributes.\n"
"In Mapgen v6 the 'decorations' flag controls all decorations except trees\n"
-"and junglegrass, in all other mapgens this flag controls all decorations."
+"and jungle grass, in all other mapgens this flag controls all decorations."
msgstr ""
#: src/settings_translation_file.cpp
@@ -3528,7 +3760,8 @@ msgid "Heat noise"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Height component of the initial window size."
+msgid ""
+"Height component of the initial window size. Ignored in fullscreen mode."
msgstr ""
#: src/settings_translation_file.cpp
@@ -3540,10 +3773,6 @@ msgid "Height select noise"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "High-precision FPU"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Hill steepness"
msgstr "Strmina hriba"
@@ -3776,8 +4005,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"If disabled, \"special\" key is used to fly fast if both fly and fast mode "
-"are\n"
+"If disabled, \"Aux1\" key is used to fly fast if both fly and fast mode are\n"
"enabled."
msgstr ""
@@ -3801,9 +4029,10 @@ msgstr ""
"To zahteva privilegij \"noclip\" na strežniku."
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
-"If enabled, \"special\" key instead of \"sneak\" key is used for climbing "
-"down and\n"
+"If enabled, \"Aux1\" key instead of \"Sneak\" key is used for climbing down "
+"and\n"
"descending."
msgstr ""
"Izbrana možnost omogoÄi delovanje \"posebne\" tipke namesto tipke \"plaziti "
@@ -3860,6 +4089,12 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"If the execution of a chat command takes longer than this specified time in\n"
+"seconds, add the time information to the chat command message"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"If the file size of debug.txt exceeds the number of megabytes specified in\n"
"this setting when it is opened, the file is moved to debug.txt.1,\n"
"deleting an older debug.txt.1 if it exists.\n"
@@ -3907,7 +4142,7 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Instrument chatcommands on registration."
+msgid "Instrument chat commands on registration."
msgstr ""
#: src/settings_translation_file.cpp
@@ -3992,7 +4227,7 @@ msgid "Joystick button repetition interval"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Joystick deadzone"
+msgid "Joystick dead zone"
msgstr ""
#: src/settings_translation_file.cpp
@@ -4750,10 +4985,6 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Makes DirectX work with LuaJIT. Disable if it causes troubles."
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Makes all liquids opaque"
msgstr ""
@@ -4825,6 +5056,10 @@ msgid "Map save interval"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Map shadows update frames"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Mapblock limit"
msgstr ""
@@ -4934,6 +5169,10 @@ msgid "Maximum FPS when the window is not focused, or when the game is paused."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Maximum distance to render shadows."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Maximum forceloaded blocks"
msgstr ""
@@ -5039,7 +5278,15 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Maximum time in ms a file download (e.g. a mod download) may take."
+msgid ""
+"Maximum time a file download (e.g. a mod download) may take, stated in "
+"milliseconds."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum time an interactive request (e.g. server list fetch) may take, "
+"stated in milliseconds."
msgstr ""
#: src/settings_translation_file.cpp
@@ -5103,7 +5350,7 @@ msgid "Mod channels"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Modifies the size of the hudbar elements."
+msgid "Modifies the size of the HUD elements."
msgstr ""
#: src/settings_translation_file.cpp
@@ -5115,6 +5362,10 @@ msgid "Monospace font size"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Monospace font size divisible by"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Mountain height noise"
msgstr ""
@@ -5235,7 +5486,7 @@ 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"
+"This is a trade-off between SQLite transaction overhead and\n"
"memory consumption (4096=100MB, as a rule of thumb)."
msgstr ""
@@ -5254,21 +5505,18 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Opaqueness (alpha) of the shadow behind the fallback font, between 0 and 255."
-msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid ""
"Open the pause menu when the window's focus is lost. Does not pause if a "
"formspec is\n"
"open."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Optional override for chat weblink color."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid ""
-"Path of the fallback font.\n"
-"If “freetype†setting is enabled: Must be a TrueType font.\n"
-"If “freetype†setting is disabled: Must be a bitmap or XML vectors font.\n"
+"Path of the fallback font. Must be a TrueType font.\n"
"This font will be used for certain languages or if the default font is "
"unavailable."
msgstr ""
@@ -5291,17 +5539,13 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Path to the default font.\n"
-"If “freetype†setting is enabled: Must be a TrueType font.\n"
-"If “freetype†setting is disabled: Must be a bitmap or XML vectors font.\n"
+"Path to the default font. Must be a TrueType font.\n"
"The fallback font will be used if the font cannot be loaded."
msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Path to the monospace font.\n"
-"If “freetype†setting is enabled: Must be a TrueType font.\n"
-"If “freetype†setting is disabled: Must be a bitmap or XML vectors font.\n"
+"Path to the monospace font. Must be a TrueType font.\n"
"This font is used for e.g. the console and profiler screen."
msgstr ""
@@ -5359,6 +5603,11 @@ msgid "Player versus player"
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Poisson filtering"
+msgstr "Bilinearno filtriranje"
+
+#: src/settings_translation_file.cpp
msgid ""
"Port to connect to (UDP).\n"
"Note that the port field in the main menu overrides this setting."
@@ -5403,9 +5652,9 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"Prometheus listener address.\n"
-"If minetest is compiled with ENABLE_PROMETHEUS option enabled,\n"
+"If Minetest is compiled with ENABLE_PROMETHEUS option enabled,\n"
"enable metrics listener for Prometheus on that address.\n"
-"Metrics can be fetch on http://127.0.0.1:30000/metrics"
+"Metrics can be fetched on http://127.0.0.1:30000/metrics"
msgstr ""
#: src/settings_translation_file.cpp
@@ -5695,6 +5944,32 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Set the shadow strength.\n"
+"Lower value means lighter shadows, higher value means darker shadows."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set the soft shadow radius size.\n"
+"Lower values mean sharper shadows, bigger values mean softer shadows.\n"
+"Minimum value: 1.0; maximum value: 10.0"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set the tilt of Sun/Moon orbit in degrees.\n"
+"Value of 0 means no tilt / vertical orbit.\n"
+"Minimum value: 0.0; maximum value: 60.0"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set to true to enable Shadow Mapping.\n"
+"Requires shaders to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Set to true to enable waving leaves.\n"
"Requires shaders to be enabled."
msgstr ""
@@ -5712,6 +5987,13 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Sets shadow texture quality to 32 bits.\n"
+"On false, 16 bits texture will be used.\n"
+"This can cause much more artifacts in the shadow."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Shader path"
msgstr ""
@@ -5724,15 +6006,29 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Shadow filter quality"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Shadow map max distance in nodes to render shadows"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Shadow map texture in 32 bits"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Shadow map texture size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid ""
"Shadow offset (in pixels) of the default font. If 0, then shadow will not be "
"drawn."
msgstr ""
#: src/settings_translation_file.cpp
-msgid ""
-"Shadow offset (in pixels) of the fallback font. If 0, then shadow will not "
-"be drawn."
+msgid "Shadow strength"
msgstr ""
#: src/settings_translation_file.cpp
@@ -5754,7 +6050,7 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Show nametag backgrounds by default"
+msgid "Show name tag backgrounds by default"
msgstr ""
#: src/settings_translation_file.cpp
@@ -5779,6 +6075,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Sky Body Orbit Tilt"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Slice w"
msgstr ""
@@ -5839,16 +6139,13 @@ msgid "Sneaking speed, in nodes per second."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Sound"
-msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid "Special key"
-msgstr "Posebna tipka"
+#, fuzzy
+msgid "Soft shadow radius"
+msgstr "Senca pisave"
#: src/settings_translation_file.cpp
-msgid "Special key for climbing/descending"
-msgstr "Posebna tipka, ki se uporablja za plezanje in spuÅ¡Äanje"
+msgid "Sound"
+msgstr ""
#: src/settings_translation_file.cpp
msgid ""
@@ -5867,6 +6164,14 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Spread a complete update of shadow map over given amount of frames.\n"
+"Higher values might make shadows laggy, lower values\n"
+"will consume more resources.\n"
+"Minimum value: 1; maximum value: 16"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Spread of light curve boost range.\n"
"Controls the width of the range to be boosted.\n"
"Standard deviation of the light curve boost Gaussian."
@@ -5973,6 +6278,13 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Texture size to render the shadow map on.\n"
+"This must be a power of two.\n"
+"Bigger numbers create better shadows but it is also more expensive."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Textures on a node may be aligned either to the node or to the world.\n"
"The former mode suits better things like machines, furniture, etc., while\n"
"the latter makes stairs and microblocks fit surroundings better.\n"
@@ -5986,7 +6298,7 @@ msgid "The URL for the content repository"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "The deadzone of the joystick"
+msgid "The dead zone of the joystick"
msgstr ""
#: src/settings_translation_file.cpp
@@ -6044,7 +6356,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"The rendering back-end for Irrlicht.\n"
+"The rendering back-end.\n"
"A restart is required after changing this.\n"
"Note: On Android, stick with OGLES1 if unsure! App may fail to start "
"otherwise.\n"
@@ -6055,7 +6367,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"The sensitivity of the joystick axes for moving the\n"
-"ingame view frustum around."
+"in-game view frustum around."
msgstr ""
#: src/settings_translation_file.cpp
@@ -6149,6 +6461,10 @@ msgid "Touch screen threshold"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Tradeoffs for performance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Trees noise"
msgstr ""
@@ -6218,7 +6534,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Use mip mapping to scale textures. May slightly increase performance,\n"
+"Use mipmapping to scale textures. May slightly increase performance,\n"
"especially when using a high resolution texture pack.\n"
"Gamma correct downscaling is not supported."
msgstr ""
@@ -6331,7 +6647,7 @@ msgid "Viewing range"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Virtual joystick triggers aux button"
+msgid "Virtual joystick triggers Aux1 button"
msgstr ""
#: src/settings_translation_file.cpp
@@ -6406,6 +6722,10 @@ msgid "Waving plants"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Weblink color"
+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"
@@ -6426,23 +6746,15 @@ msgid ""
"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.\n"
+"memory. Powers of 2 are recommended. This setting is ONLY applied if\n"
+"bilinear/trilinear/anisotropic filtering is enabled.\n"
"This is also used as the base node texture size for world-aligned\n"
"texture autoscaling."
msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Whether FreeType fonts are used, requires FreeType support to be compiled "
-"in.\n"
-"If disabled, bitmap and XML vectors fonts are used instead."
-msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid ""
-"Whether nametag backgrounds should be shown by default.\n"
+"Whether name tag backgrounds should be shown by default.\n"
"Mods may still set a background."
msgstr ""
@@ -6484,7 +6796,7 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Width component of the initial window size."
+msgid "Width component of the initial window size. Ignored in fullscreen mode."
msgstr ""
#: src/settings_translation_file.cpp
@@ -6569,34 +6881,22 @@ msgid "Y-level of seabed."
msgstr ""
#: src/settings_translation_file.cpp
-msgid ""
-"ZLib compression level to use when saving mapblocks to disk.\n"
-"-1 - Zlib's default compression level\n"
-"0 - no compresson, fastest\n"
-"9 - best compression, slowest\n"
-"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)"
-msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid ""
-"ZLib compression level to use when sending mapblocks to the client.\n"
-"-1 - Zlib's default compression level\n"
-"0 - no compresson, fastest\n"
-"9 - best compression, slowest\n"
-"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)"
+msgid "cURL file download timeout"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "cURL file download timeout"
+msgid "cURL interactive timeout"
msgstr ""
#: src/settings_translation_file.cpp
msgid "cURL parallel limit"
msgstr ""
-#: src/settings_translation_file.cpp
-msgid "cURL timeout"
-msgstr ""
+#~ msgid "- Creative Mode: "
+#~ msgstr "– Ustvarjalni naÄin: "
+
+#~ msgid "- Damage: "
+#~ msgstr "– Poškodbe: "
#, fuzzy
#~ msgid ""
@@ -6606,12 +6906,18 @@ msgstr ""
#~ "0 = \"parallax occlusion\" s podatki o nagibih (hitrejše)\n"
#~ "1 = mapiranje reliefa (poÄasnejÅ¡e, a bolj natanÄno)"
+#~ msgid "Address / Port"
+#~ msgstr "Naslov / Vrata"
+
#~ msgid "Are you sure to reset your singleplayer world?"
#~ msgstr "Ali res želiš ponastaviti samostojno igro?"
#~ msgid "Back"
#~ msgstr "Nazaj"
+#~ msgid "Bits per pixel (aka color depth) in fullscreen mode."
+#~ msgstr "Biti na piksel (barvna globina) v celozaslonskem naÄinu."
+
#~ msgid "Bump Mapping"
#~ msgstr "Površinsko preslikavanje"
@@ -6636,6 +6942,12 @@ msgstr ""
#~ msgid "Configure"
#~ msgstr "Nastavi"
+#~ msgid "Credits"
+#~ msgstr "Zasluge"
+
+#~ msgid "Damage enabled"
+#~ msgstr "PoÅ¡kodbe so omogoÄene"
+
#~ msgid "Darkness sharpness"
#~ msgstr "Ostrina teme"
@@ -6659,6 +6971,9 @@ msgstr ""
#~ msgid "IPv6 support."
#~ msgstr "IPv6 podpora."
+#~ msgid "Install: file: \"$1\""
+#~ msgstr "Namesti: datoteka: »$1«"
+
#~ msgid "Main"
#~ msgstr "Glavni"
@@ -6677,6 +6992,9 @@ msgstr ""
#~ msgid "Minimap in surface mode, Zoom x4"
#~ msgstr "Zemljevid (minimap) je v naÄinu prikazovanja povrÅ¡ja, Zoom x4"
+#~ msgid "Name / Password"
+#~ msgstr "Ime / Geslo"
+
#~ msgid "Name/Password"
#~ msgstr "Ime / Geslo"
@@ -6693,15 +7011,27 @@ msgstr ""
#~ msgid "Parallax occlusion scale"
#~ msgstr "Lestvica okluzije paralakse"
+#~ msgid "PvP enabled"
+#~ msgstr "Igra PvP je omogoÄena"
+
#~ msgid "Reset singleplayer world"
#~ msgstr "Ponastavi samostojno igro"
#~ msgid "Select Package File:"
#~ msgstr "Izberi datoteko paketa:"
+#~ msgid "Special"
+#~ msgstr "Specialen"
+
+#~ msgid "Special key"
+#~ msgstr "Posebna tipka"
+
#~ msgid "Start Singleplayer"
#~ msgstr "Zaženi samostojno igro"
+#~ msgid "To enable shaders the OpenGL driver needs to be used."
+#~ msgstr "Za prikaz senÄenja mora biti omogoÄen gonilnik OpenGL."
+
#~ msgid "Toggle Cinematic"
#~ msgstr "Preklopi gladek pogled"
@@ -6711,3 +7041,10 @@ msgstr ""
#~ msgid "Yes"
#~ msgstr "Da"
+
+#, fuzzy
+#~ msgid "You died."
+#~ msgstr "Umrl si"
+
+#~ msgid "needs_fallback_font"
+#~ msgstr "no"
diff --git a/po/sr_Cyrl/minetest.po b/po/sr_Cyrl/minetest.po
index 5223e55e2..1c590fb9d 100644
--- a/po/sr_Cyrl/minetest.po
+++ b/po/sr_Cyrl/minetest.po
@@ -2,9 +2,9 @@ msgid ""
msgstr ""
"Project-Id-Version: Serbian (cyrillic) (Minetest)\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-02-23 19:03+0100\n"
-"PO-Revision-Date: 2020-07-08 20:47+0000\n"
-"Last-Translator: sfan5 <sfan5@live.de>\n"
+"POT-Creation-Date: 2022-01-25 23:19+0100\n"
+"PO-Revision-Date: 2021-07-20 14:34+0000\n"
+"Last-Translator: Stefan Vukanovic <lisacvukhome@gmail.com>\n"
"Language-Team: Serbian (cyrillic) <https://hosted.weblate.org/projects/"
"minetest/minetest/sr_Cyrl/>\n"
"Language: sr_Cyrl\n"
@@ -13,7 +13,47 @@ msgstr ""
"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 4.2-dev\n"
+"X-Generator: Weblate 4.7.2-dev\n"
+
+#: builtin/client/chatcommands.lua
+msgid "Clear the out chat queue"
+msgstr ""
+
+#: builtin/client/chatcommands.lua
+#, fuzzy
+msgid "Empty command."
+msgstr "Чат команде"
+
+#: builtin/client/chatcommands.lua
+#, fuzzy
+msgid "Exit to main menu"
+msgstr "Изађи у мени"
+
+#: builtin/client/chatcommands.lua
+#, fuzzy
+msgid "Invalid command: "
+msgstr "Ðеважећа команда: "
+
+#: builtin/client/chatcommands.lua
+#, fuzzy
+msgid "Issued command: "
+msgstr "Издата команда: "
+
+#: builtin/client/chatcommands.lua
+msgid "List online players"
+msgstr "ИзлиÑтај мрежне играче"
+
+#: builtin/client/chatcommands.lua
+msgid "Online players: "
+msgstr "Мрежни играчи: "
+
+#: builtin/client/chatcommands.lua
+msgid "The out chat queue is now empty."
+msgstr "Излазни ред Ñа ћаÑкање је Ñада празан."
+
+#: builtin/client/chatcommands.lua
+msgid "This command is disabled by server."
+msgstr "Ова команда није дозвољена од Ñтране Ñервера."
#: builtin/client/death_formspec.lua src/client/game.cpp
msgid "Respawn"
@@ -24,14 +64,45 @@ msgstr "Врати Ñе у живот"
msgid "You died"
msgstr "Умро/ла Ñи."
+#: builtin/common/chatcommands.lua
+msgid "Available commands:"
+msgstr "ДоÑтупне команде:"
+
+#: builtin/common/chatcommands.lua
+msgid "Available commands: "
+msgstr "ДоÑтупне команде: "
+
+#: builtin/common/chatcommands.lua
+msgid "Command not available: "
+msgstr "Команда није доÑтупна: "
+
+#: builtin/common/chatcommands.lua
+msgid "Get help for commands"
+msgstr "Ðађите помоћ за команде"
+
+#: builtin/common/chatcommands.lua
+msgid ""
+"Use '.help <cmd>' to get more information, or '.help all' to list everything."
+msgstr ""
+"КориÑтите '.help <komanda>' да биÑте добили више информација или '.help all' "
+"да биÑте Ñве набројали."
+
+#: builtin/common/chatcommands.lua
+msgid "[all | <cmd>]"
+msgstr "[all | <команда>]"
+
#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp
msgid "OK"
-msgstr ""
+msgstr "У реду"
#: builtin/fstk/ui.lua
#, fuzzy
+msgid "<none available>"
+msgstr "Команда није доÑтупна: "
+
+#: builtin/fstk/ui.lua
msgid "An error occurred in a Lua script:"
-msgstr "Догодила Ñе грешка у Lua Ñкрипти, у моду:"
+msgstr "Догодила Ñе грешка у Lua Ñкрипти:"
#: builtin/fstk/ui.lua
#, fuzzy
@@ -83,7 +154,6 @@ msgstr "Прекини"
#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/dlg_contentstore.lua
#: builtin/mainmenu/tab_content.lua
-#, fuzzy
msgid "Dependencies:"
msgstr "ЗавиÑи од:"
@@ -92,21 +162,18 @@ msgid "Disable all"
msgstr "Онемогући Ñве"
#: builtin/mainmenu/dlg_config_world.lua
-#, fuzzy
msgid "Disable modpack"
-msgstr "Онемогућено"
+msgstr "Онемогући групу модова"
#: builtin/mainmenu/dlg_config_world.lua
msgid "Enable all"
msgstr "Укључи Ñве"
#: builtin/mainmenu/dlg_config_world.lua
-#, fuzzy
msgid "Enable modpack"
-msgstr "Преименуј мод-паковање:"
+msgstr "Укључи групу модова:"
#: builtin/mainmenu/dlg_config_world.lua
-#, fuzzy
msgid ""
"Failed to enable mod \"$1\" as it contains disallowed characters. Only "
"characters [a-z0-9_] are allowed."
@@ -116,36 +183,31 @@ msgstr ""
#: builtin/mainmenu/dlg_config_world.lua
msgid "Find More Mods"
-msgstr ""
+msgstr "Ðађи још модова"
#: builtin/mainmenu/dlg_config_world.lua
msgid "Mod:"
msgstr "Мод:"
#: builtin/mainmenu/dlg_config_world.lua
-#, fuzzy
msgid "No (optional) dependencies"
-msgstr "Ðеобавезне завиÑноÑти:"
+msgstr "Ðема (необавезних) завиÑноÑти"
#: builtin/mainmenu/dlg_config_world.lua
-#, fuzzy
msgid "No game description provided."
-msgstr "Ðије доÑтупан Ð¾Ð¿Ð¸Ñ Ð¼Ð¾Ð´Ð°"
+msgstr "Ðије пружен Ð¾Ð¿Ð¸Ñ Ð¼Ð¾Ð´Ð°."
#: builtin/mainmenu/dlg_config_world.lua
-#, fuzzy
msgid "No hard dependencies"
-msgstr "Ðема завиÑноÑти."
+msgstr "Ðема обавезних завиÑноÑти."
#: builtin/mainmenu/dlg_config_world.lua
-#, fuzzy
msgid "No modpack description provided."
-msgstr "Ðије доÑтупан Ð¾Ð¿Ð¸Ñ Ð¼Ð¾Ð´Ð°"
+msgstr "Ðије пружен Ð¾Ð¿Ð¸Ñ Ð³Ñ€ÑƒÐ¿Ðµ модова."
#: builtin/mainmenu/dlg_config_world.lua
-#, fuzzy
msgid "No optional dependencies"
-msgstr "Ðеобавезне завиÑноÑти:"
+msgstr "Ðема необавезних завиÑноÑти"
#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_content.lua
msgid "Optional dependencies:"
@@ -166,67 +228,64 @@ msgstr "укључено"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "\"$1\" already exists. Would you like to overwrite it?"
-msgstr ""
+msgstr "\"$1\" већ поÑтоји. Да ли желите да га препишете?"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "$1 and $2 dependencies will be installed."
-msgstr ""
+msgstr "$1 и $2 завиÑноÑти ће бити инÑталиране."
#: builtin/mainmenu/dlg_contentstore.lua
msgid "$1 by $2"
-msgstr ""
+msgstr "$1 од $2"
#: builtin/mainmenu/dlg_contentstore.lua
msgid ""
"$1 downloading,\n"
"$2 queued"
msgstr ""
+"$1 Ñе преузима,\n"
+"$2 чекају преузимање"
#: builtin/mainmenu/dlg_contentstore.lua
-#, fuzzy
msgid "$1 downloading..."
-msgstr "Учитавање..."
+msgstr "$1 Ñе преузима..."
#: builtin/mainmenu/dlg_contentstore.lua
msgid "$1 required dependencies could not be found."
-msgstr ""
+msgstr "$1 неопходних завиÑноÑти није могло бити нађено."
#: builtin/mainmenu/dlg_contentstore.lua
msgid "$1 will be installed, and $2 dependencies will be skipped."
-msgstr ""
+msgstr "$1 завиÑноÑти ће бити инÑталирано, и $2 завиÑноÑти ће бити преÑкочено."
#: builtin/mainmenu/dlg_contentstore.lua
msgid "All packages"
-msgstr ""
+msgstr "Сви пакети"
#: builtin/mainmenu/dlg_contentstore.lua
-#, fuzzy
msgid "Already installed"
-msgstr "Дугме Ñе већ кориÑти"
+msgstr "Већ инÑталирано"
#: builtin/mainmenu/dlg_contentstore.lua
-#, fuzzy
msgid "Back to Main Menu"
-msgstr "Главни мени"
+msgstr "Ðазад у главни мени"
#: builtin/mainmenu/dlg_contentstore.lua
-#, fuzzy
msgid "Base Game:"
-msgstr "Ðаправи игру"
+msgstr "ОÑновна игра:"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "ContentDB is not available when Minetest was compiled without cURL"
msgstr ""
+"ContentDB није доÑтупан када је Minetest компајлиран без cURL библиотеке"
#: builtin/mainmenu/dlg_contentstore.lua
-#, fuzzy
msgid "Downloading..."
-msgstr "Учитавање..."
+msgstr "Преузимање..."
#: builtin/mainmenu/dlg_contentstore.lua
-#, fuzzy
msgid "Failed to download $1"
-msgstr "ÐеуÑпела инÑталација $1 у $2"
+msgstr "ÐеуÑпело преузимање $1"
#: builtin/mainmenu/dlg_contentstore.lua
#: builtin/mainmenu/dlg_settings_advanced.lua
@@ -238,14 +297,19 @@ msgid "Install"
msgstr "ИнÑталирај"
#: builtin/mainmenu/dlg_contentstore.lua
-#, fuzzy
msgid "Install $1"
-msgstr "ИнÑталирај"
+msgstr "ИнÑталирај $1"
#: builtin/mainmenu/dlg_contentstore.lua
-#, fuzzy
msgid "Install missing dependencies"
-msgstr "Ðеобавезне завиÑноÑти:"
+msgstr "ИнÑталирај недоÑтајуће завиÑноÑти"
+
+#: builtin/mainmenu/dlg_contentstore.lua
+#, fuzzy
+msgid "Install: Unsupported file type or broken archive"
+msgstr ""
+"\n"
+"ИнÑталирај мод: неподржан тип фајла \"$1\" или оштећена архива"
#: builtin/mainmenu/dlg_contentstore.lua
#: builtin/mainmenu/dlg_settings_advanced.lua
@@ -254,53 +318,52 @@ msgstr "Модови"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "No packages could be retrieved"
-msgstr ""
+msgstr "Ðиједан пакет није било могуће преузети"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "No results"
-msgstr ""
+msgstr "Ðема резултата"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "No updates"
-msgstr ""
+msgstr "Ðема ажурирања"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Not found"
-msgstr ""
+msgstr "Ðије пронађено"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Overwrite"
-msgstr ""
+msgstr "Препиши"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Please check that the base game is correct."
-msgstr ""
+msgstr "Молим проверите да ли је оÑновна игра иÑправна."
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Queued"
-msgstr ""
+msgstr "Ðа чекању"
#: builtin/mainmenu/dlg_contentstore.lua
-#, fuzzy
msgid "Texture packs"
msgstr "Сетови текÑтура"
#: builtin/mainmenu/dlg_contentstore.lua
#, fuzzy
msgid "Uninstall"
-msgstr "ИнÑталирај"
+msgstr "ДеинÑталирај"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Update"
-msgstr ""
+msgstr "Ðжурирај"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Update All [$1]"
-msgstr ""
+msgstr "Ðжурирај Ñве [$1]"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "View more information in a web browser"
-msgstr ""
+msgstr "Погледај још информација у веб претраживачу"
#: builtin/mainmenu/dlg_create_world.lua
msgid "A world named \"$1\" already exists"
@@ -308,70 +371,63 @@ msgstr "Свет \"$1\" већ поÑтоји"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Additional terrain"
-msgstr ""
+msgstr "Додатни терен"
#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
msgid "Altitude chill"
-msgstr ""
+msgstr "ВиÑинÑка хладноћа"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Altitude dry"
-msgstr ""
+msgstr "ВиÑинÑка Ñувоћа"
#: builtin/mainmenu/dlg_create_world.lua
-#, fuzzy
msgid "Biome blending"
-msgstr "Семе биома"
+msgstr "Склапање биома"
#: builtin/mainmenu/dlg_create_world.lua
-#, fuzzy
msgid "Biomes"
-msgstr "Семе биома"
+msgstr "Биоми"
#: builtin/mainmenu/dlg_create_world.lua
-#, fuzzy
msgid "Caverns"
-msgstr "Семе пећина"
+msgstr "Пећине"
#: builtin/mainmenu/dlg_create_world.lua
-#, fuzzy
msgid "Caves"
-msgstr "Семе пећина"
+msgstr "Јама"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Create"
msgstr "Ðаправи"
#: builtin/mainmenu/dlg_create_world.lua
-#, fuzzy
msgid "Decorations"
-msgstr "Информације о моду:"
+msgstr "УкраÑи"
#: builtin/mainmenu/dlg_create_world.lua
-#, fuzzy
msgid "Download a game, 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"
+msgstr "Преузми једну Ñа minetest.net"
#: builtin/mainmenu/dlg_create_world.lua
-#, fuzzy
msgid "Dungeons"
-msgstr "Семе пећина"
+msgstr "Тамнице"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Flat terrain"
-msgstr ""
+msgstr "Раван терен"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Floating landmasses in the sky"
-msgstr ""
+msgstr "Плутајуће копнене маÑе на небу"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Floatlands (experimental)"
-msgstr ""
+msgstr "Floatlands (екÑпериментални)"
#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
msgid "Game"
@@ -379,27 +435,29 @@ msgstr "Игра"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Generate non-fractal terrain: Oceans and underground"
-msgstr ""
+msgstr "Створи нефрактални терен: Океани и подземље"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Hills"
-msgstr ""
+msgstr "Брда"
#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
msgid "Humid rivers"
-msgstr ""
+msgstr "Влажне реке"
#: builtin/mainmenu/dlg_create_world.lua
+#, fuzzy
msgid "Increases humidity around rivers"
-msgstr ""
+msgstr "Повећава влажноÑÑ‚ око река"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Lakes"
-msgstr ""
+msgstr "Језера"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Low humidity and high heat causes shallow or dry rivers"
-msgstr ""
+msgstr "ÐиÑка влажноÑÑ‚ и велика врућина узрокују плитке или Ñуве реке"
#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
msgid "Mapgen"
@@ -407,46 +465,43 @@ msgstr "Генератор мапе"
#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
msgid "Mapgen flags"
-msgstr ""
+msgstr "Опције генератора мапа"
#: builtin/mainmenu/dlg_create_world.lua
-#, fuzzy
msgid "Mapgen-specific flags"
-msgstr "Генератор мапе"
+msgstr "Специфичне опције генератора мапа"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Mountains"
-msgstr ""
+msgstr "Планине"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Mud flow"
-msgstr ""
+msgstr "Проток блата"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Network of tunnels and caves"
-msgstr ""
+msgstr "Мрежа тунела и пећина"
#: builtin/mainmenu/dlg_create_world.lua
-#, fuzzy
msgid "No game selected"
-msgstr "Одабир домета"
+msgstr "Ðије одабрана игра"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Reduces heat with altitude"
-msgstr ""
+msgstr "Смањује топлоту виÑином"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Reduces humidity with altitude"
-msgstr ""
+msgstr "Смањује влагу виÑином"
#: builtin/mainmenu/dlg_create_world.lua
-#, fuzzy
msgid "Rivers"
-msgstr "Семе пећина"
+msgstr "Реке"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Sea level rivers"
-msgstr ""
+msgstr "Реке на нивоу мора"
#: builtin/mainmenu/dlg_create_world.lua
#: builtin/mainmenu/dlg_settings_advanced.lua
@@ -455,48 +510,49 @@ msgstr "Семе"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Smooth transition between biomes"
-msgstr ""
+msgstr "Глатка транзиција између биома"
#: builtin/mainmenu/dlg_create_world.lua
msgid ""
"Structures appearing on the terrain (no effect on trees and jungle grass "
"created by v6)"
msgstr ""
+"Структуре које Ñе појављују на терену (нема утицаја на дрвеће и траву џунгле "
+"коју је Ñтворила v6)"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Structures appearing on the terrain, typically trees and plants"
-msgstr ""
+msgstr "Структуре које Ñе појављују на терену, обично дрвеће и биљке"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Temperate, Desert"
-msgstr ""
+msgstr "Умерено, пуÑтиња"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Temperate, Desert, Jungle"
-msgstr ""
+msgstr "Умерено, пуÑтиња, џунгла"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Temperate, Desert, Jungle, Tundra, Taiga"
-msgstr ""
+msgstr "Умерено, пуÑтиња, џунгла, тундра, тајга"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Terrain surface erosion"
-msgstr ""
+msgstr "Ерозија површине терена"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Trees and jungle grass"
-msgstr ""
+msgstr "Дрвеће и трава џунгле"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Vary river depth"
-msgstr ""
+msgstr "Варирај дубину реке"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Very large caverns deep in the underground"
-msgstr ""
+msgstr "Веома велике пећине дубоко у подземљу"
#: builtin/mainmenu/dlg_create_world.lua
-#, fuzzy
msgid "Warning: The Development Test is meant for developers."
msgstr "Упозорење: Минимални развојни теÑÑ‚ је намењен развијачима."
@@ -520,14 +576,12 @@ msgid "Delete"
msgstr "Обриши"
#: builtin/mainmenu/dlg_delete_content.lua
-#, fuzzy
msgid "pkgmgr: failed to delete \"$1\""
-msgstr "Modmgr: неуÑпело бриÑање \"$1\""
+msgstr "pkgmgr: неуÑпело бриÑање \"$1\""
#: builtin/mainmenu/dlg_delete_content.lua
-#, fuzzy
msgid "pkgmgr: invalid path \"$1\""
-msgstr "Modmgr: локација мода \"$1\" није валидна"
+msgstr "pkgmgr: локација мода \"$1\" није валидна"
#: builtin/mainmenu/dlg_delete_world.lua
msgid "Delete World \"$1\"?"
@@ -539,13 +593,15 @@ msgstr "Прихвати"
#: builtin/mainmenu/dlg_rename_modpack.lua
msgid "Rename Modpack:"
-msgstr "Преименуј мод-паковање:"
+msgstr "Преименуј групу модова:"
#: builtin/mainmenu/dlg_rename_modpack.lua
msgid ""
"This modpack has an explicit name given in its modpack.conf which will "
"override any renaming here."
msgstr ""
+"Ова група модова има Ñпецифично име дато у Ñвом modpack.conf које ће "
+"препиÑати било које име дато овде."
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "(No description of setting given)"
@@ -554,7 +610,7 @@ msgstr "(Ðије дат Ð¾Ð¿Ð¸Ñ Ð¿Ð¾Ñтавке)"
#: builtin/mainmenu/dlg_settings_advanced.lua
#, fuzzy
msgid "2D Noise"
-msgstr "Cave2 Ñеме"
+msgstr "2D бука"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "< Back to Settings page"
@@ -564,7 +620,7 @@ msgstr "< Ðазад на Ñтрану Ñа поÑтавкама"
msgid "Browse"
msgstr "Прегледај"
-#: builtin/mainmenu/dlg_settings_advanced.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_settings.lua
msgid "Disabled"
msgstr "Онемогућено"
@@ -582,15 +638,16 @@ msgstr ""
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Octaves"
-msgstr ""
+msgstr "Октаве"
#: builtin/mainmenu/dlg_settings_advanced.lua src/settings_translation_file.cpp
msgid "Offset"
-msgstr ""
+msgstr "Помак"
#: builtin/mainmenu/dlg_settings_advanced.lua
-msgid "Persistance"
-msgstr ""
+#, fuzzy
+msgid "Persistence"
+msgstr "УпорноÑÑ‚"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Please enter a valid integer."
@@ -602,13 +659,13 @@ msgstr "Молим Ð²Ð°Ñ ÑƒÐ½ÐµÑите валидан број."
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Restore Default"
-msgstr "Поврати уобичајено"
+msgstr "Поврати подразумевано"
#: builtin/mainmenu/dlg_settings_advanced.lua src/settings_translation_file.cpp
msgid "Scale"
-msgstr ""
+msgstr "Скала"
-#: builtin/mainmenu/dlg_settings_advanced.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_online.lua
msgid "Search"
msgstr "Тражи"
@@ -710,18 +767,6 @@ msgstr ""
#: builtin/mainmenu/pkgmgr.lua
#, fuzzy
-msgid "Install: Unsupported file type \"$1\" or broken archive"
-msgstr ""
-"\n"
-"ИнÑталирај мод: неподржан тип фајла \"$1\" или оштећена архива"
-
-#: builtin/mainmenu/pkgmgr.lua
-#, fuzzy
-msgid "Install: file: \"$1\""
-msgstr "ИнÑталирај мод: фајл: \"$1\""
-
-#: builtin/mainmenu/pkgmgr.lua
-#, fuzzy
msgid "Unable to find a valid mod or modpack"
msgstr ""
"ИнÑталирај мод: не може Ñе пронаћи одговарајуће име за фаÑциклу мод-паковања "
@@ -761,6 +806,42 @@ msgstr ""
"Покушајте да поновно укључите лиÑту Ñервера и проверите вашу интернет "
"конекцију."
+#: builtin/mainmenu/tab_about.lua
+msgid "About"
+msgstr ""
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Active Contributors"
+msgstr "Ðктивни Ñарадници"
+
+#: builtin/mainmenu/tab_about.lua
+#, fuzzy
+msgid "Active renderer:"
+msgstr "Даљина Ñлања активног блока"
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Core Developers"
+msgstr "Главни развијачи"
+
+#: builtin/mainmenu/tab_about.lua
+#, fuzzy
+msgid "Open User Data Directory"
+msgstr "Изаберите фајл мода:"
+
+#: builtin/mainmenu/tab_about.lua
+msgid ""
+"Opens the directory that contains user-provided worlds, games, mods,\n"
+"and texture packs in a file manager / explorer."
+msgstr ""
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Previous Contributors"
+msgstr "Предходни Ñарадници"
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Previous Core Developers"
+msgstr "Предходни главни развијачи"
+
#: builtin/mainmenu/tab_content.lua
msgid "Browse online content"
msgstr ""
@@ -808,37 +889,6 @@ msgstr "Уклони изабрани мод"
msgid "Use Texture Pack"
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
-#, fuzzy
-msgid "Open User Data Directory"
-msgstr "Изаберите фајл мода:"
-
-#: builtin/mainmenu/tab_credits.lua
-msgid ""
-"Opens the directory that contains user-provided worlds, games, mods,\n"
-"and texture packs in a file manager / explorer."
-msgstr ""
-
-#: builtin/mainmenu/tab_credits.lua
-msgid "Previous Contributors"
-msgstr "Предходни Ñарадници"
-
-#: builtin/mainmenu/tab_credits.lua
-msgid "Previous Core Developers"
-msgstr "Предходни главни развијачи"
-
#: builtin/mainmenu/tab_local.lua
msgid "Announce Server"
msgstr "Пријави Ñервер"
@@ -867,7 +917,7 @@ msgstr "Ðаправи Ñервер"
msgid "Install games from ContentDB"
msgstr ""
-#: builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
msgid "Name"
msgstr ""
@@ -879,7 +929,7 @@ msgstr "Ðови"
msgid "No world created or selected!"
msgstr "Ðиједан Ñвет није направљен или изабран!"
-#: builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
#, fuzzy
msgid "Password"
msgstr "Ðова шифра"
@@ -889,7 +939,7 @@ msgstr "Ðова шифра"
msgid "Play Game"
msgstr "Почни игру"
-#: builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
msgid "Port"
msgstr "Порт"
@@ -912,8 +962,13 @@ msgid "Start Game"
msgstr "Ðаправи игру"
#: builtin/mainmenu/tab_online.lua
-msgid "Address / Port"
-msgstr "ÐдреÑа / Порт"
+#, fuzzy
+msgid "Address"
+msgstr "- ÐдреÑа: "
+
+#: builtin/mainmenu/tab_online.lua src/client/keycode.cpp
+msgid "Clear"
+msgstr "ОчиÑти"
#: builtin/mainmenu/tab_online.lua
msgid "Connect"
@@ -923,35 +978,47 @@ msgstr "Прикључи Ñе"
msgid "Creative mode"
msgstr "Слободни мод"
+#. ~ PvP = Player versus Player
#: builtin/mainmenu/tab_online.lua
-msgid "Damage enabled"
-msgstr "Оштећење омогућено"
+#, fuzzy
+msgid "Damage / PvP"
+msgstr "Штета"
#: builtin/mainmenu/tab_online.lua
msgid "Del. Favorite"
msgstr "Обриши Омиљени"
#: builtin/mainmenu/tab_online.lua
-msgid "Favorite"
+#, fuzzy
+msgid "Favorites"
msgstr "Омиљени"
#: builtin/mainmenu/tab_online.lua
+msgid "Incompatible Servers"
+msgstr ""
+
+#: builtin/mainmenu/tab_online.lua
#, fuzzy
msgid "Join Game"
msgstr "Ðаправи игру"
#: builtin/mainmenu/tab_online.lua
-msgid "Name / Password"
-msgstr "Име / Шифра"
-
-#: builtin/mainmenu/tab_online.lua
msgid "Ping"
msgstr "Одзив"
-#. ~ PvP = Player versus Player
#: builtin/mainmenu/tab_online.lua
-msgid "PvP enabled"
-msgstr "Туча омогућена"
+#, fuzzy
+msgid "Public Servers"
+msgstr "Пријави Ñервер"
+
+#: builtin/mainmenu/tab_online.lua
+msgid "Refresh"
+msgstr ""
+
+#: builtin/mainmenu/tab_online.lua
+#, fuzzy
+msgid "Server Description"
+msgstr "СерверÑки порт"
#: builtin/mainmenu/tab_settings.lua
msgid "2x"
@@ -995,11 +1062,31 @@ msgstr "ПодеÑи контроле"
msgid "Connected Glass"
msgstr "Спојено Ñтакло"
+#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
+msgid "Dynamic shadows"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Dynamic shadows: "
+msgstr ""
+
#: builtin/mainmenu/tab_settings.lua
msgid "Fancy Leaves"
msgstr "Елегантно лишће"
#: builtin/mainmenu/tab_settings.lua
+msgid "High"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Low"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Medium"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
msgid "Mipmap"
msgstr "Мипмап"
@@ -1071,10 +1158,6 @@ msgstr "Глатко оÑветљење"
msgid "Texturing:"
msgstr "Филтери за текÑтуре:"
-#: builtin/mainmenu/tab_settings.lua
-msgid "To enable shaders the OpenGL driver needs to be used."
-msgstr "Да би Ñе омогућили шејдери мора Ñе кориÑтити OpenGL драјвер."
-
#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
msgid "Tone Mapping"
msgstr "ТонÑко Мапирање"
@@ -1089,6 +1172,14 @@ msgid "Trilinear Filter"
msgstr "Трилинеарни филтер"
#: builtin/mainmenu/tab_settings.lua
+msgid "Ultra High"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Very Low"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
msgid "Waving Leaves"
msgstr "Лепршајуће лишће"
@@ -1101,7 +1192,7 @@ msgstr "Лепршајуће лишће"
msgid "Waving Plants"
msgstr "Лепршајуће биљке"
-#: src/client/client.cpp
+#: src/client/client.cpp src/client/game.cpp
msgid "Connection timed out."
msgstr "Конекцији је иÑтекло време."
@@ -1130,7 +1221,8 @@ msgid "Connection error (timed out?)"
msgstr "Грешка у конекцији (иÑтекло време?)"
#: src/client/clientlauncher.cpp
-msgid "Could not find or load game \""
+#, fuzzy
+msgid "Could not find or load game: "
msgstr "Ðемогу пронаћи или учитати игру \""
#: src/client/clientlauncher.cpp
@@ -1162,18 +1254,6 @@ msgstr ""
msgid "Provided world path doesn't exist: "
msgstr "Дата локација Ñвета не поÑтоји: "
-#. ~ DO NOT TRANSLATE THIS LITERALLY!
-#. This is a special string. Put either "no" or "yes"
-#. into the translation field (literally).
-#. Choose "yes" if the language requires use of the fallback
-#. font, "no" otherwise.
-#. The fallback font is (normally) required for languages with
-#. non-Latin script, like Chinese.
-#. When in doubt, test your translation.
-#: src/client/fontengine.cpp
-msgid "needs_fallback_font"
-msgstr "no"
-
#: src/client/game.cpp
msgid ""
"\n"
@@ -1187,14 +1267,6 @@ msgid "- Address: "
msgstr "- ÐдреÑа: "
#: src/client/game.cpp
-msgid "- Creative Mode: "
-msgstr "- Слободни мод: "
-
-#: src/client/game.cpp
-msgid "- Damage: "
-msgstr "- Оштећење: "
-
-#: src/client/game.cpp
msgid "- Mode: "
msgstr "- Мод: "
@@ -1217,6 +1289,16 @@ msgstr "- Име Ñервера: "
#: src/client/game.cpp
#, fuzzy
+msgid "A serialization error occurred:"
+msgstr "Догодила Ñе грешка:"
+
+#: src/client/game.cpp
+#, c-format
+msgid "Access denied. Reason: %s"
+msgstr ""
+
+#: src/client/game.cpp
+#, fuzzy
msgid "Automatic forward disabled"
msgstr "Кључ за ÑинематÑки мод"
@@ -1226,6 +1308,22 @@ msgid "Automatic forward enabled"
msgstr "Кључ за ÑинематÑки мод"
#: src/client/game.cpp
+msgid "Block bounds hidden"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Block bounds shown for all blocks"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Block bounds shown for current block"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Block bounds shown for nearby blocks"
+msgstr ""
+
+#: src/client/game.cpp
#, fuzzy
msgid "Camera update disabled"
msgstr "Кључ за укључивање/иÑкључивање оÑвежавања камере"
@@ -1236,6 +1334,10 @@ msgid "Camera update enabled"
msgstr "Кључ за укључивање/иÑкључивање оÑвежавања камере"
#: src/client/game.cpp
+msgid "Can't show block bounds (need 'basic_debug' privilege)"
+msgstr ""
+
+#: src/client/game.cpp
msgid "Change Password"
msgstr "Промени шифру"
@@ -1250,6 +1352,11 @@ msgid "Cinematic mode enabled"
msgstr "Кључ за ÑинематÑки мод"
#: src/client/game.cpp
+#, fuzzy
+msgid "Client disconnected"
+msgstr "Модификовање клијента"
+
+#: src/client/game.cpp
msgid "Client side scripting is disabled"
msgstr ""
@@ -1258,6 +1365,10 @@ msgid "Connecting to server..."
msgstr "Повезујем Ñе на Ñервер..."
#: src/client/game.cpp
+msgid "Connection failed for unknown reason"
+msgstr ""
+
+#: src/client/game.cpp
msgid "Continue"
msgstr "ÐаÑтави"
@@ -1295,6 +1406,11 @@ msgstr ""
"- %s: причање\n"
#: src/client/game.cpp
+#, c-format
+msgid "Couldn't resolve address: %s"
+msgstr ""
+
+#: src/client/game.cpp
msgid "Creating client..."
msgstr "Правим клијента..."
@@ -1428,6 +1544,11 @@ msgid "Minimap currently disabled by game or mod"
msgstr ""
#: src/client/game.cpp
+#, fuzzy
+msgid "Multiplayer"
+msgstr "Један играч"
+
+#: src/client/game.cpp
msgid "Noclip mode disabled"
msgstr ""
@@ -1503,6 +1624,21 @@ msgid "Sound unmuted"
msgstr "Јачина звука"
#: src/client/game.cpp
+#, c-format
+msgid "The server is probably running a different version of %s."
+msgstr ""
+
+#: src/client/game.cpp
+#, c-format
+msgid "Unable to connect to %s because IPv6 is disabled"
+msgstr ""
+
+#: src/client/game.cpp
+#, c-format
+msgid "Unable to listen on %s because IPv6 is disabled"
+msgstr ""
+
+#: src/client/game.cpp
#, fuzzy, c-format
msgid "Viewing range changed to %d"
msgstr "Јачина звука промењена на %d%%"
@@ -1574,10 +1710,6 @@ msgid "Caps Lock"
msgstr "Велика Ñлова"
#: src/client/keycode.cpp
-msgid "Clear"
-msgstr "ОчиÑти"
-
-#: src/client/keycode.cpp
msgid "Control"
msgstr "Контрола"
@@ -1843,6 +1975,15 @@ msgstr ""
msgid "Minimap in texture mode"
msgstr ""
+#: src/gui/guiChatConsole.cpp
+#, fuzzy
+msgid "Failed to open webpage"
+msgstr "ÐеуÑпело преузимање $1"
+
+#: src/gui/guiChatConsole.cpp
+msgid "Opening webpage"
+msgstr ""
+
#: src/gui/guiConfirmRegistration.cpp src/gui/guiPasswordChange.cpp
msgid "Passwords do not match!"
msgstr "Шифре Ñе не поклапају!"
@@ -1867,7 +2008,7 @@ msgstr "ÐаÑтави"
#: src/gui/guiKeyChangeMenu.cpp
#, fuzzy
-msgid "\"Special\" = climb down"
+msgid "\"Aux1\" = climb down"
msgstr "\"КориÑти\" = Силажење"
#: src/gui/guiKeyChangeMenu.cpp
@@ -1880,10 +2021,18 @@ msgid "Automatic jumping"
msgstr ""
#: src/gui/guiKeyChangeMenu.cpp
+msgid "Aux1"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
msgid "Backward"
msgstr "Ðазад"
#: src/gui/guiKeyChangeMenu.cpp
+msgid "Block bounds"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
#, fuzzy
msgid "Change camera"
msgstr "Промени дугмад"
@@ -1976,10 +2125,6 @@ msgid "Sneak"
msgstr "Шуњање"
#: src/gui/guiKeyChangeMenu.cpp
-msgid "Special"
-msgstr ""
-
-#: src/gui/guiKeyChangeMenu.cpp
#, fuzzy
msgid "Toggle HUD"
msgstr "Укључи/ИÑкључи летење"
@@ -2046,7 +2191,8 @@ msgid "Muted"
msgstr "Изкључи звук"
#: src/gui/guiVolumeChange.cpp
-msgid "Sound Volume: "
+#, fuzzy, c-format
+msgid "Sound Volume: %d%%"
msgstr "Јачина звука: "
#. ~ Imperative, as in "Enter/type in text".
@@ -2070,8 +2216,8 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"(Android) Use virtual joystick to trigger \"aux\" button.\n"
-"If enabled, virtual joystick will also tap \"aux\" button when out of main "
+"(Android) Use virtual joystick to trigger \"Aux1\" button.\n"
+"If enabled, virtual joystick will also tap \"Aux1\" button when out of main "
"circle."
msgstr ""
@@ -2279,6 +2425,10 @@ msgstr ""
"нпр. за 4k екране."
#: src/settings_translation_file.cpp
+msgid "Adjust the detected display density, used for scaling UI elements."
+msgstr ""
+
+#: src/settings_translation_file.cpp
#, c-format
msgid ""
"Adjusts the density of the floatland layer.\n"
@@ -2404,6 +2554,14 @@ msgid "Autoscaling mode"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Aux1 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Aux1 key for climbing/descending"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Backward key"
msgstr "Кључ за назад"
@@ -2449,10 +2607,6 @@ msgid "Biome noise"
msgstr "Семе биома"
#: src/settings_translation_file.cpp
-msgid "Bits per pixel (aka color depth) in fullscreen mode."
-msgstr "Битови по пикÑелу (или дубина боје) у моду целог екрана."
-
-#: src/settings_translation_file.cpp
msgid "Block send optimize distance"
msgstr ""
@@ -2553,6 +2707,16 @@ msgstr ""
#: src/settings_translation_file.cpp
#, fuzzy
+msgid "Chat command time message threshold"
+msgstr "Граница пећине"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Chat commands"
+msgstr "Чат команде"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
msgid "Chat font size"
msgstr "Величина комада"
@@ -2588,8 +2752,8 @@ msgid "Chat toggle key"
msgstr "Кључ за укључивање чета"
#: src/settings_translation_file.cpp
-msgid "Chatcommands"
-msgstr "Чат команде"
+msgid "Chat weblinks"
+msgstr ""
#: src/settings_translation_file.cpp
msgid "Chunk size"
@@ -2608,6 +2772,12 @@ msgid "Clean transparent textures"
msgstr "ОчиÑти провидне трекÑтуре"
#: src/settings_translation_file.cpp
+msgid ""
+"Clickable weblinks (middle-click or Ctrl+left-click) enabled in chat console "
+"output."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Client"
msgstr "Клијент"
@@ -2653,6 +2823,11 @@ msgid "Colored fog"
msgstr "Обојена магла"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Colored shadows"
+msgstr "Обојена магла"
+
+#: src/settings_translation_file.cpp
msgid ""
"Comma-separated list of flags to hide in the content repository.\n"
"\"nonfree\" can be used to hide packages which do not qualify as 'free "
@@ -2687,6 +2862,22 @@ msgid "Command key"
msgstr "Кључ за команду"
#: src/settings_translation_file.cpp
+msgid ""
+"Compression level to use when saving mapblocks to disk.\n"
+"-1 - use default compression level\n"
+"0 - least compression, fastest\n"
+"9 - best compression, slowest"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Compression level to use when sending mapblocks to the client.\n"
+"-1 - use default compression level\n"
+"0 - least compression, fastest\n"
+"9 - best compression, slowest"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Connect glass"
msgstr "Споји Ñтакло"
@@ -2783,7 +2974,7 @@ msgstr "ПровидноÑÑ‚ нишана"
#, fuzzy
msgid ""
"Crosshair alpha (opaqueness, between 0 and 255).\n"
-"Also controls the object crosshair color"
+"This also applies to the object crosshair."
msgstr "ПровидноÑÑ‚ нишана (видљивоÑÑ‚, између 0 и 255)."
#: src/settings_translation_file.cpp
@@ -2864,8 +3055,9 @@ msgstr "Уобичајена игра"
#: src/settings_translation_file.cpp
msgid ""
-"Default timeout for cURL, stated in milliseconds.\n"
-"Only has an effect if compiled with cURL."
+"Define shadow filtering quality.\n"
+"This simulates the soft shadows effect by applying a PCF or Poisson disk\n"
+"but also uses more resources."
msgstr ""
#: src/settings_translation_file.cpp
@@ -2984,6 +3176,10 @@ msgid "Disallow empty passwords"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Display Density Scaling Factor"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Domain name of server, to be displayed in the serverlist."
msgstr ""
@@ -3029,6 +3225,19 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Enable Poisson disk filtering.\n"
+"On true uses Poisson disk to make \"soft shadows\". Otherwise uses PCF "
+"filtering."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable colored shadows.\n"
+"On true translucent nodes cast colored shadows. This is expensive."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Enable console window"
msgstr ""
@@ -3137,6 +3346,12 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Enables tradeoffs that reduce CPU load or increase rendering performance\n"
+"at the expense of minor visual glitches that do not impact game playability."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Engine profiling data print interval"
msgstr ""
@@ -3175,18 +3390,6 @@ msgid "Fallback font path"
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 ""
@@ -3205,7 +3408,7 @@ msgstr "Брзо кретање"
#: src/settings_translation_file.cpp
#, fuzzy
msgid ""
-"Fast movement (via the \"special\" key).\n"
+"Fast movement (via the \"Aux1\" key).\n"
"This requires the \"fast\" privilege on the server."
msgstr ""
"Видно поље за време увеличавања.\n"
@@ -3241,9 +3444,9 @@ 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."
+"which PNG optimizers usually discard, often resulting in dark or\n"
+"light edges to transparent textures. Apply a filter to clean that up\n"
+"at texture load time. This is automatically enabled if mipmapping is enabled."
msgstr ""
#: src/settings_translation_file.cpp
@@ -3336,15 +3539,15 @@ msgid "Font size"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Font size of the default font in point (pt)."
+msgid "Font size divisible by"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Font size of the fallback font in point (pt)."
+msgid "Font size of the default font where 1 unit = 1 pixel at 96 DPI"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Font size of the monospace font in point (pt)."
+msgid "Font size of the monospace font where 1 unit = 1 pixel at 96 DPI"
msgstr ""
#: src/settings_translation_file.cpp
@@ -3355,6 +3558,17 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"For pixel-style fonts that do not scale well, this ensures that font sizes "
+"used\n"
+"with this font will always be divisible by this value, in pixels. For "
+"instance,\n"
+"a pixel font 16 pixels tall should have this set to 16, so it will only ever "
+"be\n"
+"sized 16, 32, 48, etc., so a mod requesting a size of 25 will get 32."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Format of player chat messages. The following strings are valid "
"placeholders:\n"
"@name, @message, @timestamp (optional)"
@@ -3413,10 +3627,6 @@ msgid "Fraction of the visible distance at which fog starts to be rendered"
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)."
@@ -3441,10 +3651,6 @@ msgid "Full screen"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Full screen BPP"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Fullscreen mode."
msgstr ""
@@ -3468,7 +3674,7 @@ msgstr ""
msgid ""
"Global map generation attributes.\n"
"In Mapgen v6 the 'decorations' flag controls all decorations except trees\n"
-"and junglegrass, in all other mapgens this flag controls all decorations."
+"and jungle grass, in all other mapgens this flag controls all decorations."
msgstr ""
#: src/settings_translation_file.cpp
@@ -3538,7 +3744,8 @@ msgid "Heat noise"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Height component of the initial window size."
+msgid ""
+"Height component of the initial window size. Ignored in fullscreen mode."
msgstr ""
#: src/settings_translation_file.cpp
@@ -3551,10 +3758,6 @@ msgid "Height select noise"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "High-precision FPU"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Hill steepness"
msgstr ""
@@ -3785,8 +3988,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"If disabled, \"special\" key is used to fly fast if both fly and fast mode "
-"are\n"
+"If disabled, \"Aux1\" key is used to fly fast if both fly and fast mode are\n"
"enabled."
msgstr ""
@@ -3808,8 +4010,8 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"If enabled, \"special\" key instead of \"sneak\" key is used for climbing "
-"down and\n"
+"If enabled, \"Aux1\" key instead of \"Sneak\" key is used for climbing down "
+"and\n"
"descending."
msgstr ""
@@ -3857,6 +4059,12 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"If the execution of a chat command takes longer than this specified time in\n"
+"seconds, add the time information to the chat command message"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"If the file size of debug.txt exceeds the number of megabytes specified in\n"
"this setting when it is opened, the file is moved to debug.txt.1,\n"
"deleting an older debug.txt.1 if it exists.\n"
@@ -3902,7 +4110,7 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Instrument chatcommands on registration."
+msgid "Instrument chat commands on registration."
msgstr ""
#: src/settings_translation_file.cpp
@@ -3986,7 +4194,7 @@ msgid "Joystick button repetition interval"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Joystick deadzone"
+msgid "Joystick dead zone"
msgstr ""
#: src/settings_translation_file.cpp
@@ -4745,10 +4953,6 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Makes DirectX work with LuaJIT. Disable if it causes troubles."
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Makes all liquids opaque"
msgstr ""
@@ -4820,6 +5024,10 @@ msgid "Map save interval"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Map shadows update frames"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Mapblock limit"
msgstr ""
@@ -4934,6 +5142,10 @@ msgid "Maximum FPS when the window is not focused, or when the game is paused."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Maximum distance to render shadows."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Maximum forceloaded blocks"
msgstr ""
@@ -5039,7 +5251,15 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Maximum time in ms a file download (e.g. a mod download) may take."
+msgid ""
+"Maximum time a file download (e.g. a mod download) may take, stated in "
+"milliseconds."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum time an interactive request (e.g. server list fetch) may take, "
+"stated in milliseconds."
msgstr ""
#: src/settings_translation_file.cpp
@@ -5103,7 +5323,7 @@ msgid "Mod channels"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Modifies the size of the hudbar elements."
+msgid "Modifies the size of the HUD elements."
msgstr ""
#: src/settings_translation_file.cpp
@@ -5115,6 +5335,10 @@ msgid "Monospace font size"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Monospace font size divisible by"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Mountain height noise"
msgstr ""
@@ -5235,7 +5459,7 @@ 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"
+"This is a trade-off between SQLite transaction overhead and\n"
"memory consumption (4096=100MB, as a rule of thumb)."
msgstr ""
@@ -5254,21 +5478,18 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Opaqueness (alpha) of the shadow behind the fallback font, between 0 and 255."
-msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid ""
"Open the pause menu when the window's focus is lost. Does not pause if a "
"formspec is\n"
"open."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Optional override for chat weblink color."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid ""
-"Path of the fallback font.\n"
-"If “freetype†setting is enabled: Must be a TrueType font.\n"
-"If “freetype†setting is disabled: Must be a bitmap or XML vectors font.\n"
+"Path of the fallback font. Must be a TrueType font.\n"
"This font will be used for certain languages or if the default font is "
"unavailable."
msgstr ""
@@ -5291,17 +5512,13 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Path to the default font.\n"
-"If “freetype†setting is enabled: Must be a TrueType font.\n"
-"If “freetype†setting is disabled: Must be a bitmap or XML vectors font.\n"
+"Path to the default font. Must be a TrueType font.\n"
"The fallback font will be used if the font cannot be loaded."
msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Path to the monospace font.\n"
-"If “freetype†setting is enabled: Must be a TrueType font.\n"
-"If “freetype†setting is disabled: Must be a bitmap or XML vectors font.\n"
+"Path to the monospace font. Must be a TrueType font.\n"
"This font is used for e.g. the console and profiler screen."
msgstr ""
@@ -5360,6 +5577,11 @@ msgid "Player versus player"
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Poisson filtering"
+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."
@@ -5404,9 +5626,9 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"Prometheus listener address.\n"
-"If minetest is compiled with ENABLE_PROMETHEUS option enabled,\n"
+"If Minetest is compiled with ENABLE_PROMETHEUS option enabled,\n"
"enable metrics listener for Prometheus on that address.\n"
-"Metrics can be fetch on http://127.0.0.1:30000/metrics"
+"Metrics can be fetched on http://127.0.0.1:30000/metrics"
msgstr ""
#: src/settings_translation_file.cpp
@@ -5717,6 +5939,32 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Set the shadow strength.\n"
+"Lower value means lighter shadows, higher value means darker shadows."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set the soft shadow radius size.\n"
+"Lower values mean sharper shadows, bigger values mean softer shadows.\n"
+"Minimum value: 1.0; maximum value: 10.0"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set the tilt of Sun/Moon orbit in degrees.\n"
+"Value of 0 means no tilt / vertical orbit.\n"
+"Minimum value: 0.0; maximum value: 60.0"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set to true to enable Shadow Mapping.\n"
+"Requires shaders to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Set to true to enable waving leaves.\n"
"Requires shaders to be enabled."
msgstr ""
@@ -5734,6 +5982,13 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Sets shadow texture quality to 32 bits.\n"
+"On false, 16 bits texture will be used.\n"
+"This can cause much more artifacts in the shadow."
+msgstr ""
+
+#: src/settings_translation_file.cpp
#, fuzzy
msgid "Shader path"
msgstr "Шејдери"
@@ -5747,15 +6002,29 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Shadow filter quality"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Shadow map max distance in nodes to render shadows"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Shadow map texture in 32 bits"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Shadow map texture size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid ""
"Shadow offset (in pixels) of the default font. If 0, then shadow will not be "
"drawn."
msgstr ""
#: src/settings_translation_file.cpp
-msgid ""
-"Shadow offset (in pixels) of the fallback font. If 0, then shadow will not "
-"be drawn."
+msgid "Shadow strength"
msgstr ""
#: src/settings_translation_file.cpp
@@ -5777,7 +6046,7 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Show nametag backgrounds by default"
+msgid "Show name tag backgrounds by default"
msgstr ""
#: src/settings_translation_file.cpp
@@ -5802,6 +6071,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Sky Body Orbit Tilt"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Slice w"
msgstr ""
@@ -5857,16 +6130,12 @@ msgid "Sneaking speed, in nodes per second."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Sound"
-msgstr ""
-
-#: src/settings_translation_file.cpp
#, fuzzy
-msgid "Special key"
-msgstr "притиÑните дугме"
+msgid "Soft shadow radius"
+msgstr "Величина облака"
#: src/settings_translation_file.cpp
-msgid "Special key for climbing/descending"
+msgid "Sound"
msgstr ""
#: src/settings_translation_file.cpp
@@ -5886,6 +6155,14 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Spread a complete update of shadow map over given amount of frames.\n"
+"Higher values might make shadows laggy, lower values\n"
+"will consume more resources.\n"
+"Minimum value: 1; maximum value: 16"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Spread of light curve boost range.\n"
"Controls the width of the range to be boosted.\n"
"Standard deviation of the light curve boost Gaussian."
@@ -5992,6 +6269,13 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Texture size to render the shadow map on.\n"
+"This must be a power of two.\n"
+"Bigger numbers create better shadows but it is also more expensive."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Textures on a node may be aligned either to the node or to the world.\n"
"The former mode suits better things like machines, furniture, etc., while\n"
"the latter makes stairs and microblocks fit surroundings better.\n"
@@ -6005,7 +6289,7 @@ msgid "The URL for the content repository"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "The deadzone of the joystick"
+msgid "The dead zone of the joystick"
msgstr ""
#: src/settings_translation_file.cpp
@@ -6063,7 +6347,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"The rendering back-end for Irrlicht.\n"
+"The rendering back-end.\n"
"A restart is required after changing this.\n"
"Note: On Android, stick with OGLES1 if unsure! App may fail to start "
"otherwise.\n"
@@ -6074,7 +6358,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"The sensitivity of the joystick axes for moving the\n"
-"ingame view frustum around."
+"in-game view frustum around."
msgstr ""
#: src/settings_translation_file.cpp
@@ -6169,6 +6453,10 @@ msgid "Touch screen threshold"
msgstr "Граница Ñемена за плаже"
#: src/settings_translation_file.cpp
+msgid "Tradeoffs for performance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Trees noise"
msgstr ""
@@ -6239,7 +6527,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Use mip mapping to scale textures. May slightly increase performance,\n"
+"Use mipmapping to scale textures. May slightly increase performance,\n"
"especially when using a high resolution texture pack.\n"
"Gamma correct downscaling is not supported."
msgstr ""
@@ -6352,7 +6640,7 @@ msgid "Viewing range"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Virtual joystick triggers aux button"
+msgid "Virtual joystick triggers Aux1 button"
msgstr ""
#: src/settings_translation_file.cpp
@@ -6427,6 +6715,10 @@ msgid "Waving plants"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Weblink color"
+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"
@@ -6447,23 +6739,15 @@ msgid ""
"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.\n"
+"memory. Powers of 2 are recommended. This setting is ONLY applied if\n"
+"bilinear/trilinear/anisotropic filtering is enabled.\n"
"This is also used as the base node texture size for world-aligned\n"
"texture autoscaling."
msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Whether FreeType fonts are used, requires FreeType support to be compiled "
-"in.\n"
-"If disabled, bitmap and XML vectors fonts are used instead."
-msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid ""
-"Whether nametag backgrounds should be shown by default.\n"
+"Whether name tag backgrounds should be shown by default.\n"
"Mods may still set a background."
msgstr ""
@@ -6505,7 +6789,7 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Width component of the initial window size."
+msgid "Width component of the initial window size. Ignored in fullscreen mode."
msgstr ""
#: src/settings_translation_file.cpp
@@ -6592,34 +6876,22 @@ msgid "Y-level of seabed."
msgstr ""
#: src/settings_translation_file.cpp
-msgid ""
-"ZLib compression level to use when saving mapblocks to disk.\n"
-"-1 - Zlib's default compression level\n"
-"0 - no compresson, fastest\n"
-"9 - best compression, slowest\n"
-"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)"
-msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid ""
-"ZLib compression level to use when sending mapblocks to the client.\n"
-"-1 - Zlib's default compression level\n"
-"0 - no compresson, fastest\n"
-"9 - best compression, slowest\n"
-"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)"
+msgid "cURL file download timeout"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "cURL file download timeout"
+msgid "cURL interactive timeout"
msgstr ""
#: src/settings_translation_file.cpp
msgid "cURL parallel limit"
msgstr ""
-#: src/settings_translation_file.cpp
-msgid "cURL timeout"
-msgstr ""
+#~ msgid "- Creative Mode: "
+#~ msgstr "- Слободни мод: "
+
+#~ msgid "- Damage: "
+#~ msgstr "- Оштећење: "
#~ msgid ""
#~ "0 = parallax occlusion with slope information (faster).\n"
@@ -6628,6 +6900,9 @@ msgstr ""
#~ "0 = parallax occlusion Ñа информацијама о нагибима (брже)\n"
#~ "1 = мапирање рељефа (Ñпорије, прецизније)."
+#~ msgid "Address / Port"
+#~ msgstr "ÐдреÑа / Порт"
+
#~ msgid ""
#~ "Adjust the gamma encoding for the light tables. Higher numbers are "
#~ "brighter.\n"
@@ -6642,6 +6917,9 @@ msgstr ""
#~ msgid "Back"
#~ msgstr "Ðазад"
+#~ msgid "Bits per pixel (aka color depth) in fullscreen mode."
+#~ msgstr "Битови по пикÑелу (или дубина боје) у моду целог екрана."
+
#~ msgid "Bump Mapping"
#~ msgstr "Bump-Мапирање"
@@ -6665,13 +6943,23 @@ msgstr ""
#~ msgid "Controls width of tunnels, a smaller value creates wider tunnels."
#~ msgstr "Контролише ширину тунела, мања вредноÑÑ‚ Ñтвара шире тунеле."
+#~ msgid "Credits"
+#~ msgstr "ЗаÑлуге"
+
#~ msgid "Crosshair color (R,G,B)."
#~ msgstr "Боја нишана (R,G,B)."
+#~ msgid "Damage enabled"
+#~ msgstr "Оштећење омогућено"
+
#, fuzzy
#~ msgid "Downloading and installing $1, please wait..."
#~ msgstr "Преузима Ñе $1, молим Ð²Ð°Ñ Ñачекајте..."
+#, fuzzy
+#~ msgid "Install: file: \"$1\""
+#~ msgstr "ИнÑталирај мод: фајл: \"$1\""
+
#~ msgid "Main"
#~ msgstr "Главно"
@@ -6679,6 +6967,9 @@ msgstr ""
#~ msgid "Main menu style"
#~ msgstr "Главни мени"
+#~ msgid "Name / Password"
+#~ msgstr "Име / Шифра"
+
#~ msgid "Name/Password"
#~ msgstr "Име/Шифра"
@@ -6695,6 +6986,9 @@ msgstr ""
#~ msgid "Parallax occlusion scale"
#~ msgstr "Parallax Occlusion Мапирање"
+#~ msgid "PvP enabled"
+#~ msgstr "Туча омогућена"
+
#~ msgid "Reset singleplayer world"
#~ msgstr "РеÑетуј Ñвет"
@@ -6702,11 +6996,24 @@ msgstr ""
#~ msgid "Select Package File:"
#~ msgstr "Изаберите фајл мода:"
+#, fuzzy
+#~ msgid "Special key"
+#~ msgstr "притиÑните дугме"
+
#~ msgid "Start Singleplayer"
#~ msgstr "Започни игру за једног играча"
+#~ msgid "To enable shaders the OpenGL driver needs to be used."
+#~ msgstr "Да би Ñе омогућили шејдери мора Ñе кориÑтити OpenGL драјвер."
+
#~ msgid "Toggle Cinematic"
#~ msgstr "Укључи/ИÑкључи Cinematic мод"
#~ msgid "Yes"
#~ msgstr "Да"
+
+#~ msgid "You died."
+#~ msgstr "Умро/ла Ñи."
+
+#~ msgid "needs_fallback_font"
+#~ msgstr "no"
diff --git a/po/sr_Latn/minetest.po b/po/sr_Latn/minetest.po
index 7c5ad11fc..eeb7e9ce2 100644
--- a/po/sr_Latn/minetest.po
+++ b/po/sr_Latn/minetest.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: minetest\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-02-23 19:03+0100\n"
+"POT-Creation-Date: 2022-01-25 23:19+0100\n"
"PO-Revision-Date: 2020-08-15 23:32+0000\n"
"Last-Translator: Milos <milosfilic97@gmail.com>\n"
"Language-Team: Serbian (latin) <https://hosted.weblate.org/projects/minetest/"
@@ -20,6 +20,43 @@ msgstr ""
"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
"X-Generator: Weblate 4.2-dev\n"
+#: builtin/client/chatcommands.lua
+msgid "Clear the out chat queue"
+msgstr ""
+
+#: builtin/client/chatcommands.lua
+msgid "Empty command."
+msgstr ""
+
+#: builtin/client/chatcommands.lua
+#, fuzzy
+msgid "Exit to main menu"
+msgstr "Nazad na Glavni meni"
+
+#: builtin/client/chatcommands.lua
+msgid "Invalid command: "
+msgstr ""
+
+#: builtin/client/chatcommands.lua
+msgid "Issued command: "
+msgstr ""
+
+#: builtin/client/chatcommands.lua
+msgid "List online players"
+msgstr ""
+
+#: builtin/client/chatcommands.lua
+msgid "Online players: "
+msgstr ""
+
+#: builtin/client/chatcommands.lua
+msgid "The out chat queue is now empty."
+msgstr ""
+
+#: builtin/client/chatcommands.lua
+msgid "This command is disabled by server."
+msgstr ""
+
#: builtin/client/death_formspec.lua src/client/game.cpp
msgid "Respawn"
msgstr "Vrati se u zivot"
@@ -28,11 +65,40 @@ msgstr "Vrati se u zivot"
msgid "You died"
msgstr "Umro/la si."
+#: builtin/common/chatcommands.lua
+msgid "Available commands:"
+msgstr ""
+
+#: builtin/common/chatcommands.lua
+msgid "Available commands: "
+msgstr ""
+
+#: builtin/common/chatcommands.lua
+msgid "Command not available: "
+msgstr ""
+
+#: builtin/common/chatcommands.lua
+msgid "Get help for commands"
+msgstr ""
+
+#: builtin/common/chatcommands.lua
+msgid ""
+"Use '.help <cmd>' to get more information, or '.help all' to list everything."
+msgstr ""
+
+#: builtin/common/chatcommands.lua
+msgid "[all | <cmd>]"
+msgstr ""
+
#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp
msgid "OK"
msgstr "OK"
#: builtin/fstk/ui.lua
+msgid "<none available>"
+msgstr ""
+
+#: builtin/fstk/ui.lua
msgid "An error occurred in a Lua script:"
msgstr "Doslo je do greske u Lua skripti:"
@@ -236,6 +302,10 @@ msgid "Install missing dependencies"
msgstr "Neobavezne zavisnosti:"
#: builtin/mainmenu/dlg_contentstore.lua
+msgid "Install: Unsupported file type or broken archive"
+msgstr ""
+
+#: builtin/mainmenu/dlg_contentstore.lua
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Mods"
msgstr "Modovi"
@@ -538,7 +608,7 @@ msgstr ""
msgid "Browse"
msgstr ""
-#: builtin/mainmenu/dlg_settings_advanced.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_settings.lua
msgid "Disabled"
msgstr ""
@@ -563,7 +633,7 @@ msgid "Offset"
msgstr ""
#: builtin/mainmenu/dlg_settings_advanced.lua
-msgid "Persistance"
+msgid "Persistence"
msgstr ""
#: builtin/mainmenu/dlg_settings_advanced.lua
@@ -582,7 +652,7 @@ msgstr ""
msgid "Scale"
msgstr ""
-#: builtin/mainmenu/dlg_settings_advanced.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_online.lua
msgid "Search"
msgstr "Trazi"
@@ -674,14 +744,6 @@ msgid "Install Mod: Unable to find suitable folder name for modpack $1"
msgstr ""
#: builtin/mainmenu/pkgmgr.lua
-msgid "Install: Unsupported file type \"$1\" or broken archive"
-msgstr ""
-
-#: builtin/mainmenu/pkgmgr.lua
-msgid "Install: file: \"$1\""
-msgstr ""
-
-#: builtin/mainmenu/pkgmgr.lua
msgid "Unable to find a valid mod or modpack"
msgstr ""
@@ -715,6 +777,40 @@ msgstr ""
"Pokusajte ponovo omoguciti javnu listu servera i proverite vasu internet "
"vezu."
+#: builtin/mainmenu/tab_about.lua
+msgid "About"
+msgstr ""
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Active Contributors"
+msgstr ""
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Active renderer:"
+msgstr ""
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Core Developers"
+msgstr ""
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Open User Data Directory"
+msgstr ""
+
+#: builtin/mainmenu/tab_about.lua
+msgid ""
+"Opens the directory that contains user-provided worlds, games, mods,\n"
+"and texture packs in a file manager / explorer."
+msgstr ""
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Previous Contributors"
+msgstr ""
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Previous Core Developers"
+msgstr ""
+
#: builtin/mainmenu/tab_content.lua
msgid "Browse online content"
msgstr ""
@@ -755,36 +851,6 @@ msgstr ""
msgid "Use Texture Pack"
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 "Open User Data Directory"
-msgstr ""
-
-#: builtin/mainmenu/tab_credits.lua
-msgid ""
-"Opens the directory that contains user-provided worlds, games, mods,\n"
-"and texture packs in a file manager / explorer."
-msgstr ""
-
-#: builtin/mainmenu/tab_credits.lua
-msgid "Previous Contributors"
-msgstr ""
-
-#: builtin/mainmenu/tab_credits.lua
-msgid "Previous Core Developers"
-msgstr ""
-
#: builtin/mainmenu/tab_local.lua
msgid "Announce Server"
msgstr ""
@@ -813,7 +879,7 @@ msgstr ""
msgid "Install games from ContentDB"
msgstr ""
-#: builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
msgid "Name"
msgstr ""
@@ -825,7 +891,7 @@ msgstr ""
msgid "No world created or selected!"
msgstr ""
-#: builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
msgid "Password"
msgstr ""
@@ -833,7 +899,7 @@ msgstr ""
msgid "Play Game"
msgstr ""
-#: builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
msgid "Port"
msgstr ""
@@ -854,7 +920,11 @@ msgid "Start Game"
msgstr ""
#: builtin/mainmenu/tab_online.lua
-msgid "Address / Port"
+msgid "Address"
+msgstr ""
+
+#: builtin/mainmenu/tab_online.lua src/client/keycode.cpp
+msgid "Clear"
msgstr ""
#: builtin/mainmenu/tab_online.lua
@@ -865,8 +935,9 @@ msgstr ""
msgid "Creative mode"
msgstr ""
+#. ~ PvP = Player versus Player
#: builtin/mainmenu/tab_online.lua
-msgid "Damage enabled"
+msgid "Damage / PvP"
msgstr ""
#: builtin/mainmenu/tab_online.lua
@@ -874,24 +945,32 @@ msgid "Del. Favorite"
msgstr ""
#: builtin/mainmenu/tab_online.lua
-msgid "Favorite"
+msgid "Favorites"
msgstr ""
#: builtin/mainmenu/tab_online.lua
-msgid "Join Game"
+msgid "Incompatible Servers"
msgstr ""
#: builtin/mainmenu/tab_online.lua
-msgid "Name / Password"
+msgid "Join Game"
msgstr ""
#: builtin/mainmenu/tab_online.lua
msgid "Ping"
msgstr ""
-#. ~ PvP = Player versus Player
#: builtin/mainmenu/tab_online.lua
-msgid "PvP enabled"
+#, fuzzy
+msgid "Public Servers"
+msgstr "Vlazne reke"
+
+#: builtin/mainmenu/tab_online.lua
+msgid "Refresh"
+msgstr ""
+
+#: builtin/mainmenu/tab_online.lua
+msgid "Server Description"
msgstr ""
#: builtin/mainmenu/tab_settings.lua
@@ -934,11 +1013,31 @@ msgstr ""
msgid "Connected Glass"
msgstr ""
+#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
+msgid "Dynamic shadows"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Dynamic shadows: "
+msgstr ""
+
#: builtin/mainmenu/tab_settings.lua
msgid "Fancy Leaves"
msgstr ""
#: builtin/mainmenu/tab_settings.lua
+msgid "High"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Low"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Medium"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
msgid "Mipmap"
msgstr ""
@@ -1011,10 +1110,6 @@ msgstr ""
msgid "Texturing:"
msgstr ""
-#: builtin/mainmenu/tab_settings.lua
-msgid "To enable shaders the OpenGL driver needs to be used."
-msgstr ""
-
#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
msgid "Tone Mapping"
msgstr ""
@@ -1028,6 +1123,14 @@ msgid "Trilinear Filter"
msgstr ""
#: builtin/mainmenu/tab_settings.lua
+msgid "Ultra High"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Very Low"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
msgid "Waving Leaves"
msgstr ""
@@ -1039,7 +1142,7 @@ msgstr ""
msgid "Waving Plants"
msgstr ""
-#: src/client/client.cpp
+#: src/client/client.cpp src/client/game.cpp
msgid "Connection timed out."
msgstr ""
@@ -1068,7 +1171,7 @@ msgid "Connection error (timed out?)"
msgstr ""
#: src/client/clientlauncher.cpp
-msgid "Could not find or load game \""
+msgid "Could not find or load game: "
msgstr ""
#: src/client/clientlauncher.cpp
@@ -1099,18 +1202,6 @@ msgstr ""
msgid "Provided world path doesn't exist: "
msgstr ""
-#. ~ DO NOT TRANSLATE THIS LITERALLY!
-#. This is a special string. Put either "no" or "yes"
-#. into the translation field (literally).
-#. Choose "yes" if the language requires use of the fallback
-#. font, "no" otherwise.
-#. The fallback font is (normally) required for languages with
-#. non-Latin script, like Chinese.
-#. When in doubt, test your translation.
-#: src/client/fontengine.cpp
-msgid "needs_fallback_font"
-msgstr "no"
-
#: src/client/game.cpp
msgid ""
"\n"
@@ -1122,14 +1213,6 @@ msgid "- Address: "
msgstr ""
#: src/client/game.cpp
-msgid "- Creative Mode: "
-msgstr ""
-
-#: src/client/game.cpp
-msgid "- Damage: "
-msgstr ""
-
-#: src/client/game.cpp
msgid "- Mode: "
msgstr ""
@@ -1151,6 +1234,16 @@ msgid "- Server Name: "
msgstr ""
#: src/client/game.cpp
+#, fuzzy
+msgid "A serialization error occurred:"
+msgstr "Doslo je do greske:"
+
+#: src/client/game.cpp
+#, c-format
+msgid "Access denied. Reason: %s"
+msgstr ""
+
+#: src/client/game.cpp
msgid "Automatic forward disabled"
msgstr ""
@@ -1159,6 +1252,22 @@ msgid "Automatic forward enabled"
msgstr ""
#: src/client/game.cpp
+msgid "Block bounds hidden"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Block bounds shown for all blocks"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Block bounds shown for current block"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Block bounds shown for nearby blocks"
+msgstr ""
+
+#: src/client/game.cpp
msgid "Camera update disabled"
msgstr ""
@@ -1167,6 +1276,10 @@ msgid "Camera update enabled"
msgstr ""
#: src/client/game.cpp
+msgid "Can't show block bounds (need 'basic_debug' privilege)"
+msgstr ""
+
+#: src/client/game.cpp
msgid "Change Password"
msgstr ""
@@ -1179,6 +1292,10 @@ msgid "Cinematic mode enabled"
msgstr ""
#: src/client/game.cpp
+msgid "Client disconnected"
+msgstr ""
+
+#: src/client/game.cpp
msgid "Client side scripting is disabled"
msgstr ""
@@ -1187,6 +1304,10 @@ msgid "Connecting to server..."
msgstr ""
#: src/client/game.cpp
+msgid "Connection failed for unknown reason"
+msgstr ""
+
+#: src/client/game.cpp
msgid "Continue"
msgstr ""
@@ -1210,6 +1331,11 @@ msgid ""
msgstr ""
#: src/client/game.cpp
+#, c-format
+msgid "Couldn't resolve address: %s"
+msgstr ""
+
+#: src/client/game.cpp
msgid "Creating client..."
msgstr ""
@@ -1326,6 +1452,10 @@ msgid "Minimap currently disabled by game or mod"
msgstr ""
#: src/client/game.cpp
+msgid "Multiplayer"
+msgstr ""
+
+#: src/client/game.cpp
msgid "Noclip mode disabled"
msgstr ""
@@ -1399,6 +1529,21 @@ msgstr ""
#: src/client/game.cpp
#, c-format
+msgid "The server is probably running a different version of %s."
+msgstr ""
+
+#: src/client/game.cpp
+#, c-format
+msgid "Unable to connect to %s because IPv6 is disabled"
+msgstr ""
+
+#: src/client/game.cpp
+#, c-format
+msgid "Unable to listen on %s because IPv6 is disabled"
+msgstr ""
+
+#: src/client/game.cpp
+#, c-format
msgid "Viewing range changed to %d"
msgstr ""
@@ -1467,10 +1612,6 @@ msgid "Caps Lock"
msgstr ""
#: src/client/keycode.cpp
-msgid "Clear"
-msgstr ""
-
-#: src/client/keycode.cpp
msgid "Control"
msgstr ""
@@ -1735,6 +1876,15 @@ msgstr ""
msgid "Minimap in texture mode"
msgstr ""
+#: src/gui/guiChatConsole.cpp
+#, fuzzy
+msgid "Failed to open webpage"
+msgstr "Neuspelo preuzimanje $1"
+
+#: src/gui/guiChatConsole.cpp
+msgid "Opening webpage"
+msgstr ""
+
#: src/gui/guiConfirmRegistration.cpp src/gui/guiPasswordChange.cpp
msgid "Passwords do not match!"
msgstr ""
@@ -1758,7 +1908,7 @@ msgid "Proceed"
msgstr ""
#: src/gui/guiKeyChangeMenu.cpp
-msgid "\"Special\" = climb down"
+msgid "\"Aux1\" = climb down"
msgstr ""
#: src/gui/guiKeyChangeMenu.cpp
@@ -1770,10 +1920,18 @@ msgid "Automatic jumping"
msgstr ""
#: src/gui/guiKeyChangeMenu.cpp
+msgid "Aux1"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
msgid "Backward"
msgstr ""
#: src/gui/guiKeyChangeMenu.cpp
+msgid "Block bounds"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
msgid "Change camera"
msgstr ""
@@ -1862,10 +2020,6 @@ msgid "Sneak"
msgstr ""
#: src/gui/guiKeyChangeMenu.cpp
-msgid "Special"
-msgstr ""
-
-#: src/gui/guiKeyChangeMenu.cpp
msgid "Toggle HUD"
msgstr ""
@@ -1926,7 +2080,8 @@ msgid "Muted"
msgstr ""
#: src/gui/guiVolumeChange.cpp
-msgid "Sound Volume: "
+#, c-format
+msgid "Sound Volume: %d%%"
msgstr ""
#. ~ Imperative, as in "Enter/type in text".
@@ -1950,8 +2105,8 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"(Android) Use virtual joystick to trigger \"aux\" button.\n"
-"If enabled, virtual joystick will also tap \"aux\" button when out of main "
+"(Android) Use virtual joystick to trigger \"Aux1\" button.\n"
+"If enabled, virtual joystick will also tap \"Aux1\" button when out of main "
"circle."
msgstr ""
@@ -2134,6 +2289,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Adjust the detected display density, used for scaling UI elements."
+msgstr ""
+
+#: src/settings_translation_file.cpp
#, c-format
msgid ""
"Adjusts the density of the floatland layer.\n"
@@ -2246,6 +2405,14 @@ msgid "Autoscaling mode"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Aux1 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Aux1 key for climbing/descending"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Backward key"
msgstr ""
@@ -2290,10 +2457,6 @@ msgid "Biome noise"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Bits per pixel (aka color depth) in fullscreen mode."
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Block send optimize distance"
msgstr ""
@@ -2392,6 +2555,14 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Chat command time message threshold"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Chat commands"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Chat font size"
msgstr ""
@@ -2424,7 +2595,7 @@ msgid "Chat toggle key"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Chatcommands"
+msgid "Chat weblinks"
msgstr ""
#: src/settings_translation_file.cpp
@@ -2444,6 +2615,12 @@ msgid "Clean transparent textures"
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Clickable weblinks (middle-click or Ctrl+left-click) enabled in chat console "
+"output."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Client"
msgstr ""
@@ -2488,6 +2665,10 @@ msgid "Colored fog"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Colored shadows"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid ""
"Comma-separated list of flags to hide in the content repository.\n"
"\"nonfree\" can be used to hide packages which do not qualify as 'free "
@@ -2515,6 +2696,22 @@ msgid "Command key"
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Compression level to use when saving mapblocks to disk.\n"
+"-1 - use default compression level\n"
+"0 - least compression, fastest\n"
+"9 - best compression, slowest"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Compression level to use when sending mapblocks to the client.\n"
+"-1 - use default compression level\n"
+"0 - least compression, fastest\n"
+"9 - best compression, slowest"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Connect glass"
msgstr ""
@@ -2605,7 +2802,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"Crosshair alpha (opaqueness, between 0 and 255).\n"
-"Also controls the object crosshair color"
+"This also applies to the object crosshair."
msgstr ""
#: src/settings_translation_file.cpp
@@ -2682,8 +2879,9 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Default timeout for cURL, stated in milliseconds.\n"
-"Only has an effect if compiled with cURL."
+"Define shadow filtering quality.\n"
+"This simulates the soft shadows effect by applying a PCF or Poisson disk\n"
+"but also uses more resources."
msgstr ""
#: src/settings_translation_file.cpp
@@ -2801,6 +2999,10 @@ msgid "Disallow empty passwords"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Display Density Scaling Factor"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Domain name of server, to be displayed in the serverlist."
msgstr ""
@@ -2845,6 +3047,19 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Enable Poisson disk filtering.\n"
+"On true uses Poisson disk to make \"soft shadows\". Otherwise uses PCF "
+"filtering."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable colored shadows.\n"
+"On true translucent nodes cast colored shadows. This is expensive."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Enable console window"
msgstr ""
@@ -2953,6 +3168,12 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Enables tradeoffs that reduce CPU load or increase rendering performance\n"
+"at the expense of minor visual glitches that do not impact game playability."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Engine profiling data print interval"
msgstr ""
@@ -2991,18 +3212,6 @@ msgid "Fallback font path"
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 ""
@@ -3020,7 +3229,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Fast movement (via the \"special\" key).\n"
+"Fast movement (via the \"Aux1\" key).\n"
"This requires the \"fast\" privilege on the server."
msgstr ""
@@ -3054,9 +3263,9 @@ 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."
+"which PNG optimizers usually discard, often resulting in dark or\n"
+"light edges to transparent textures. Apply a filter to clean that up\n"
+"at texture load time. This is automatically enabled if mipmapping is enabled."
msgstr ""
#: src/settings_translation_file.cpp
@@ -3148,15 +3357,15 @@ msgid "Font size"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Font size of the default font in point (pt)."
+msgid "Font size divisible by"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Font size of the fallback font in point (pt)."
+msgid "Font size of the default font where 1 unit = 1 pixel at 96 DPI"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Font size of the monospace font in point (pt)."
+msgid "Font size of the monospace font where 1 unit = 1 pixel at 96 DPI"
msgstr ""
#: src/settings_translation_file.cpp
@@ -3167,6 +3376,17 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"For pixel-style fonts that do not scale well, this ensures that font sizes "
+"used\n"
+"with this font will always be divisible by this value, in pixels. For "
+"instance,\n"
+"a pixel font 16 pixels tall should have this set to 16, so it will only ever "
+"be\n"
+"sized 16, 32, 48, etc., so a mod requesting a size of 25 will get 32."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Format of player chat messages. The following strings are valid "
"placeholders:\n"
"@name, @message, @timestamp (optional)"
@@ -3225,10 +3445,6 @@ msgid "Fraction of the visible distance at which fog starts to be rendered"
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)."
@@ -3253,10 +3469,6 @@ msgid "Full screen"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Full screen BPP"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Fullscreen mode."
msgstr ""
@@ -3280,7 +3492,7 @@ msgstr ""
msgid ""
"Global map generation attributes.\n"
"In Mapgen v6 the 'decorations' flag controls all decorations except trees\n"
-"and junglegrass, in all other mapgens this flag controls all decorations."
+"and jungle grass, in all other mapgens this flag controls all decorations."
msgstr ""
#: src/settings_translation_file.cpp
@@ -3349,7 +3561,8 @@ msgid "Heat noise"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Height component of the initial window size."
+msgid ""
+"Height component of the initial window size. Ignored in fullscreen mode."
msgstr ""
#: src/settings_translation_file.cpp
@@ -3361,10 +3574,6 @@ msgid "Height select noise"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "High-precision FPU"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Hill steepness"
msgstr ""
@@ -3595,8 +3804,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"If disabled, \"special\" key is used to fly fast if both fly and fast mode "
-"are\n"
+"If disabled, \"Aux1\" key is used to fly fast if both fly and fast mode are\n"
"enabled."
msgstr ""
@@ -3618,8 +3826,8 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"If enabled, \"special\" key instead of \"sneak\" key is used for climbing "
-"down and\n"
+"If enabled, \"Aux1\" key instead of \"Sneak\" key is used for climbing down "
+"and\n"
"descending."
msgstr ""
@@ -3665,6 +3873,12 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"If the execution of a chat command takes longer than this specified time in\n"
+"seconds, add the time information to the chat command message"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"If the file size of debug.txt exceeds the number of megabytes specified in\n"
"this setting when it is opened, the file is moved to debug.txt.1,\n"
"deleting an older debug.txt.1 if it exists.\n"
@@ -3710,7 +3924,7 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Instrument chatcommands on registration."
+msgid "Instrument chat commands on registration."
msgstr ""
#: src/settings_translation_file.cpp
@@ -3794,7 +4008,7 @@ msgid "Joystick button repetition interval"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Joystick deadzone"
+msgid "Joystick dead zone"
msgstr ""
#: src/settings_translation_file.cpp
@@ -4552,10 +4766,6 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Makes DirectX work with LuaJIT. Disable if it causes troubles."
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Makes all liquids opaque"
msgstr ""
@@ -4627,6 +4837,10 @@ msgid "Map save interval"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Map shadows update frames"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Mapblock limit"
msgstr ""
@@ -4735,6 +4949,10 @@ msgid "Maximum FPS when the window is not focused, or when the game is paused."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Maximum distance to render shadows."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Maximum forceloaded blocks"
msgstr ""
@@ -4840,7 +5058,15 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Maximum time in ms a file download (e.g. a mod download) may take."
+msgid ""
+"Maximum time a file download (e.g. a mod download) may take, stated in "
+"milliseconds."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum time an interactive request (e.g. server list fetch) may take, "
+"stated in milliseconds."
msgstr ""
#: src/settings_translation_file.cpp
@@ -4904,7 +5130,7 @@ msgid "Mod channels"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Modifies the size of the hudbar elements."
+msgid "Modifies the size of the HUD elements."
msgstr ""
#: src/settings_translation_file.cpp
@@ -4916,6 +5142,10 @@ msgid "Monospace font size"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Monospace font size divisible by"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Mountain height noise"
msgstr ""
@@ -5036,7 +5266,7 @@ 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"
+"This is a trade-off between SQLite transaction overhead and\n"
"memory consumption (4096=100MB, as a rule of thumb)."
msgstr ""
@@ -5055,21 +5285,18 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Opaqueness (alpha) of the shadow behind the fallback font, between 0 and 255."
-msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid ""
"Open the pause menu when the window's focus is lost. Does not pause if a "
"formspec is\n"
"open."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Optional override for chat weblink color."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid ""
-"Path of the fallback font.\n"
-"If “freetype†setting is enabled: Must be a TrueType font.\n"
-"If “freetype†setting is disabled: Must be a bitmap or XML vectors font.\n"
+"Path of the fallback font. Must be a TrueType font.\n"
"This font will be used for certain languages or if the default font is "
"unavailable."
msgstr ""
@@ -5092,17 +5319,13 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Path to the default font.\n"
-"If “freetype†setting is enabled: Must be a TrueType font.\n"
-"If “freetype†setting is disabled: Must be a bitmap or XML vectors font.\n"
+"Path to the default font. Must be a TrueType font.\n"
"The fallback font will be used if the font cannot be loaded."
msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Path to the monospace font.\n"
-"If “freetype†setting is enabled: Must be a TrueType font.\n"
-"If “freetype†setting is disabled: Must be a bitmap or XML vectors font.\n"
+"Path to the monospace font. Must be a TrueType font.\n"
"This font is used for e.g. the console and profiler screen."
msgstr ""
@@ -5157,6 +5380,10 @@ msgid "Player versus player"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Poisson filtering"
+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."
@@ -5201,9 +5428,9 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"Prometheus listener address.\n"
-"If minetest is compiled with ENABLE_PROMETHEUS option enabled,\n"
+"If Minetest is compiled with ENABLE_PROMETHEUS option enabled,\n"
"enable metrics listener for Prometheus on that address.\n"
-"Metrics can be fetch on http://127.0.0.1:30000/metrics"
+"Metrics can be fetched on http://127.0.0.1:30000/metrics"
msgstr ""
#: src/settings_translation_file.cpp
@@ -5492,6 +5719,32 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Set the shadow strength.\n"
+"Lower value means lighter shadows, higher value means darker shadows."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set the soft shadow radius size.\n"
+"Lower values mean sharper shadows, bigger values mean softer shadows.\n"
+"Minimum value: 1.0; maximum value: 10.0"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set the tilt of Sun/Moon orbit in degrees.\n"
+"Value of 0 means no tilt / vertical orbit.\n"
+"Minimum value: 0.0; maximum value: 60.0"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set to true to enable Shadow Mapping.\n"
+"Requires shaders to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Set to true to enable waving leaves.\n"
"Requires shaders to be enabled."
msgstr ""
@@ -5509,6 +5762,13 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Sets shadow texture quality to 32 bits.\n"
+"On false, 16 bits texture will be used.\n"
+"This can cause much more artifacts in the shadow."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Shader path"
msgstr ""
@@ -5521,15 +5781,29 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Shadow filter quality"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Shadow map max distance in nodes to render shadows"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Shadow map texture in 32 bits"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Shadow map texture size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid ""
"Shadow offset (in pixels) of the default font. If 0, then shadow will not be "
"drawn."
msgstr ""
#: src/settings_translation_file.cpp
-msgid ""
-"Shadow offset (in pixels) of the fallback font. If 0, then shadow will not "
-"be drawn."
+msgid "Shadow strength"
msgstr ""
#: src/settings_translation_file.cpp
@@ -5551,7 +5825,7 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Show nametag backgrounds by default"
+msgid "Show name tag backgrounds by default"
msgstr ""
#: src/settings_translation_file.cpp
@@ -5576,6 +5850,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Sky Body Orbit Tilt"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Slice w"
msgstr ""
@@ -5630,15 +5908,11 @@ msgid "Sneaking speed, in nodes per second."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Sound"
-msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid "Special key"
+msgid "Soft shadow radius"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Special key for climbing/descending"
+msgid "Sound"
msgstr ""
#: src/settings_translation_file.cpp
@@ -5658,6 +5932,14 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Spread a complete update of shadow map over given amount of frames.\n"
+"Higher values might make shadows laggy, lower values\n"
+"will consume more resources.\n"
+"Minimum value: 1; maximum value: 16"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Spread of light curve boost range.\n"
"Controls the width of the range to be boosted.\n"
"Standard deviation of the light curve boost Gaussian."
@@ -5764,6 +6046,13 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Texture size to render the shadow map on.\n"
+"This must be a power of two.\n"
+"Bigger numbers create better shadows but it is also more expensive."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Textures on a node may be aligned either to the node or to the world.\n"
"The former mode suits better things like machines, furniture, etc., while\n"
"the latter makes stairs and microblocks fit surroundings better.\n"
@@ -5777,7 +6066,7 @@ msgid "The URL for the content repository"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "The deadzone of the joystick"
+msgid "The dead zone of the joystick"
msgstr ""
#: src/settings_translation_file.cpp
@@ -5835,7 +6124,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"The rendering back-end for Irrlicht.\n"
+"The rendering back-end.\n"
"A restart is required after changing this.\n"
"Note: On Android, stick with OGLES1 if unsure! App may fail to start "
"otherwise.\n"
@@ -5846,7 +6135,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"The sensitivity of the joystick axes for moving the\n"
-"ingame view frustum around."
+"in-game view frustum around."
msgstr ""
#: src/settings_translation_file.cpp
@@ -5940,6 +6229,10 @@ msgid "Touch screen threshold"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Tradeoffs for performance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Trees noise"
msgstr ""
@@ -6009,7 +6302,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Use mip mapping to scale textures. May slightly increase performance,\n"
+"Use mipmapping to scale textures. May slightly increase performance,\n"
"especially when using a high resolution texture pack.\n"
"Gamma correct downscaling is not supported."
msgstr ""
@@ -6122,7 +6415,7 @@ msgid "Viewing range"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Virtual joystick triggers aux button"
+msgid "Virtual joystick triggers Aux1 button"
msgstr ""
#: src/settings_translation_file.cpp
@@ -6193,6 +6486,10 @@ msgid "Waving plants"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Weblink color"
+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"
@@ -6213,23 +6510,15 @@ msgid ""
"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.\n"
+"memory. Powers of 2 are recommended. This setting is ONLY applied if\n"
+"bilinear/trilinear/anisotropic filtering is enabled.\n"
"This is also used as the base node texture size for world-aligned\n"
"texture autoscaling."
msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Whether FreeType fonts are used, requires FreeType support to be compiled "
-"in.\n"
-"If disabled, bitmap and XML vectors fonts are used instead."
-msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid ""
-"Whether nametag backgrounds should be shown by default.\n"
+"Whether name tag backgrounds should be shown by default.\n"
"Mods may still set a background."
msgstr ""
@@ -6271,7 +6560,7 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Width component of the initial window size."
+msgid "Width component of the initial window size. Ignored in fullscreen mode."
msgstr ""
#: src/settings_translation_file.cpp
@@ -6356,34 +6645,23 @@ msgid "Y-level of seabed."
msgstr ""
#: src/settings_translation_file.cpp
-msgid ""
-"ZLib compression level to use when saving mapblocks to disk.\n"
-"-1 - Zlib's default compression level\n"
-"0 - no compresson, fastest\n"
-"9 - best compression, slowest\n"
-"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)"
-msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid ""
-"ZLib compression level to use when sending mapblocks to the client.\n"
-"-1 - Zlib's default compression level\n"
-"0 - no compresson, fastest\n"
-"9 - best compression, slowest\n"
-"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "cURL file download timeout"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "cURL parallel limit"
+msgid "cURL interactive timeout"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "cURL timeout"
+msgid "cURL parallel limit"
msgstr ""
#~ msgid "View"
#~ msgstr "Pogled"
+
+#, fuzzy
+#~ msgid "You died."
+#~ msgstr "Umro/la si."
+
+#~ msgid "needs_fallback_font"
+#~ msgstr "no"
diff --git a/po/sv/minetest.po b/po/sv/minetest.po
index e608d85e2..9c77e9a11 100644
--- a/po/sv/minetest.po
+++ b/po/sv/minetest.po
@@ -2,9 +2,9 @@ msgid ""
msgstr ""
"Project-Id-Version: Swedish (Minetest)\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-02-23 19:03+0100\n"
-"PO-Revision-Date: 2020-03-31 10:14+0000\n"
-"Last-Translator: sfan5 <sfan5@live.de>\n"
+"POT-Creation-Date: 2022-01-25 23:19+0100\n"
+"PO-Revision-Date: 2021-12-18 21:51+0000\n"
+"Last-Translator: xerxstirb <xerxstirb@gmail.com>\n"
"Language-Team: Swedish <https://hosted.weblate.org/projects/minetest/"
"minetest/sv/>\n"
"Language: sv\n"
@@ -12,24 +12,90 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 4.0-dev\n"
+"X-Generator: Weblate 4.10\n"
+
+#: builtin/client/chatcommands.lua
+msgid "Clear the out chat queue"
+msgstr "Rensa chattkön"
+
+#: builtin/client/chatcommands.lua
+msgid "Empty command."
+msgstr "Tomt kommando."
+
+#: builtin/client/chatcommands.lua
+msgid "Exit to main menu"
+msgstr "Avsluta till huvudmeny"
+
+#: builtin/client/chatcommands.lua
+msgid "Invalid command: "
+msgstr "Ogiltigt kommando: "
+
+#: builtin/client/chatcommands.lua
+msgid "Issued command: "
+msgstr "Utfärdat kommando: "
+
+#: builtin/client/chatcommands.lua
+msgid "List online players"
+msgstr "Lista över spelare online"
+
+#: builtin/client/chatcommands.lua
+msgid "Online players: "
+msgstr "Spelare online: "
+
+#: builtin/client/chatcommands.lua
+msgid "The out chat queue is now empty."
+msgstr "Den utgående chattkön är nu tom."
+
+#: builtin/client/chatcommands.lua
+msgid "This command is disabled by server."
+msgstr "Detta kommando är inaktiverat av servern."
#: builtin/client/death_formspec.lua src/client/game.cpp
msgid "Respawn"
-msgstr "Återföds"
+msgstr "Återuppstå"
#: builtin/client/death_formspec.lua src/client/game.cpp
msgid "You died"
msgstr "Du dog"
+#: builtin/common/chatcommands.lua
+msgid "Available commands:"
+msgstr "Tillgängliga kommandon:"
+
+#: builtin/common/chatcommands.lua
+msgid "Available commands: "
+msgstr "Tillgängliga kommandon: "
+
+#: builtin/common/chatcommands.lua
+msgid "Command not available: "
+msgstr "Kommando inte tillgängligt: "
+
+#: builtin/common/chatcommands.lua
+msgid "Get help for commands"
+msgstr "Få hjälp med kommandon"
+
+#: builtin/common/chatcommands.lua
+msgid ""
+"Use '.help <cmd>' to get more information, or '.help all' to list everything."
+msgstr ""
+"Använd '.help <cmd>' för att få mer information, eller '.help all' för att "
+"visa allt."
+
+#: builtin/common/chatcommands.lua
+msgid "[all | <cmd>]"
+msgstr "[all | <cmd>]"
+
#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp
msgid "OK"
-msgstr ""
+msgstr "OK"
+
+#: builtin/fstk/ui.lua
+msgid "<none available>"
+msgstr "<inget tillgängligt>"
#: builtin/fstk/ui.lua
-#, fuzzy
msgid "An error occurred in a Lua script:"
-msgstr "Ett fel uppstod i ett Lua-skript, såsom en mod:"
+msgstr "Ett fel uppstod i ett Lua-skript:"
#: builtin/fstk/ui.lua
msgid "An error occurred:"
@@ -49,7 +115,7 @@ msgstr "Servern har begärt en återanslutning:"
#: builtin/mainmenu/common.lua
msgid "Protocol version mismatch. "
-msgstr "Protokollversionen matchar ej. "
+msgstr "Protokollversionen matchar inte. "
#: builtin/mainmenu/common.lua
msgid "Server enforces protocol version $1. "
@@ -85,7 +151,7 @@ msgstr "Beroenden:"
#: builtin/mainmenu/dlg_config_world.lua
msgid "Disable all"
-msgstr "Inaktivera allt"
+msgstr "Avaktivera alla"
#: builtin/mainmenu/dlg_config_world.lua
msgid "Disable modpack"
@@ -93,7 +159,7 @@ msgstr "Avaktivera modpaket"
#: builtin/mainmenu/dlg_config_world.lua
msgid "Enable all"
-msgstr "Aktivera alla"
+msgstr "Aktivera allt"
#: builtin/mainmenu/dlg_config_world.lua
msgid "Enable modpack"
@@ -109,34 +175,31 @@ msgstr ""
#: builtin/mainmenu/dlg_config_world.lua
msgid "Find More Mods"
-msgstr ""
+msgstr "Hitta Fler Moddar"
#: builtin/mainmenu/dlg_config_world.lua
msgid "Mod:"
msgstr "Mod:"
#: builtin/mainmenu/dlg_config_world.lua
-#, fuzzy
msgid "No (optional) dependencies"
-msgstr "Valfria beroenden:"
+msgstr "Inga (valfria) beroenden"
#: builtin/mainmenu/dlg_config_world.lua
msgid "No game description provided."
msgstr "Ingen spelbeskrivning tillgänglig."
#: builtin/mainmenu/dlg_config_world.lua
-#, fuzzy
msgid "No hard dependencies"
-msgstr "Inga beroenden."
+msgstr "Inga hårda beroenden"
#: builtin/mainmenu/dlg_config_world.lua
msgid "No modpack description provided."
msgstr "Ingen modpaketsbeskrivning tillgänglig."
#: builtin/mainmenu/dlg_config_world.lua
-#, fuzzy
msgid "No optional dependencies"
-msgstr "Valfria beroenden:"
+msgstr "Inga valfria beroenden"
#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_content.lua
msgid "Optional dependencies:"
@@ -157,61 +220,59 @@ msgstr "aktiverad"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "\"$1\" already exists. Would you like to overwrite it?"
-msgstr ""
+msgstr "\"$1\" finns redan. Vill du skriva över den?"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "$1 and $2 dependencies will be installed."
-msgstr ""
+msgstr "$1 och $2 beroende paket kommer installeras."
#: builtin/mainmenu/dlg_contentstore.lua
msgid "$1 by $2"
-msgstr ""
+msgstr "$1 till $2"
#: builtin/mainmenu/dlg_contentstore.lua
msgid ""
"$1 downloading,\n"
"$2 queued"
msgstr ""
+"$1 laddas ner,\n"
+"$2 köad"
#: builtin/mainmenu/dlg_contentstore.lua
-#, fuzzy
msgid "$1 downloading..."
-msgstr "Laddar..."
+msgstr "$1 laddas ner..."
#: builtin/mainmenu/dlg_contentstore.lua
msgid "$1 required dependencies could not be found."
-msgstr ""
+msgstr "$1 nödvändiga beroenden kunde inte hittas."
#: builtin/mainmenu/dlg_contentstore.lua
msgid "$1 will be installed, and $2 dependencies will be skipped."
-msgstr ""
+msgstr "$1 kommer att installeras och $2 beroenden hoppas över."
#: builtin/mainmenu/dlg_contentstore.lua
msgid "All packages"
msgstr "Alla paket"
#: builtin/mainmenu/dlg_contentstore.lua
-#, fuzzy
msgid "Already installed"
-msgstr "Tangent används redan"
+msgstr "Redan installerad"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Back to Main Menu"
msgstr "Tillbaka till huvudmeny"
#: builtin/mainmenu/dlg_contentstore.lua
-#, fuzzy
msgid "Base Game:"
-msgstr "Bilda Spel"
+msgstr "Basspel:"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "ContentDB is not available when Minetest was compiled without cURL"
-msgstr ""
+msgstr "ContentDB är inte tillgänglig när Minetest är kompilerad utan cURL"
#: builtin/mainmenu/dlg_contentstore.lua
-#, fuzzy
msgid "Downloading..."
-msgstr "Laddar..."
+msgstr "Laddar ner..."
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Failed to download $1"
@@ -227,14 +288,16 @@ msgid "Install"
msgstr "Installera"
#: builtin/mainmenu/dlg_contentstore.lua
-#, fuzzy
msgid "Install $1"
-msgstr "Installera"
+msgstr "Installera $1"
#: builtin/mainmenu/dlg_contentstore.lua
-#, fuzzy
msgid "Install missing dependencies"
-msgstr "Valfria beroenden:"
+msgstr "Installera saknade beroenden"
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "Install: Unsupported file type or broken archive"
+msgstr "Installation: Filtyp stöds inte eller trasigt arkiv"
#: builtin/mainmenu/dlg_contentstore.lua
#: builtin/mainmenu/dlg_settings_advanced.lua
@@ -250,25 +313,24 @@ msgid "No results"
msgstr "Inga resultat"
#: builtin/mainmenu/dlg_contentstore.lua
-#, fuzzy
msgid "No updates"
-msgstr "Uppdatera"
+msgstr "Inga uppdateringar"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Not found"
-msgstr ""
+msgstr "Hittades inte"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Overwrite"
-msgstr ""
+msgstr "Skriv över"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Please check that the base game is correct."
-msgstr ""
+msgstr "Var snäll se att basspelet är korrekt."
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Queued"
-msgstr ""
+msgstr "Köad"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Texture packs"
@@ -284,11 +346,11 @@ msgstr "Uppdatera"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Update All [$1]"
-msgstr ""
+msgstr "Uppdatera Alla [$1]"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "View more information in a web browser"
-msgstr ""
+msgstr "Visa mer information i en webbläsare"
#: builtin/mainmenu/dlg_create_world.lua
msgid "A world named \"$1\" already exists"
@@ -296,46 +358,39 @@ msgstr "En värld med namnet \"$1\" finns redan"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Additional terrain"
-msgstr ""
+msgstr "Ytterligare terräng"
#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
-#, fuzzy
msgid "Altitude chill"
msgstr "Altitudkyla"
#: builtin/mainmenu/dlg_create_world.lua
-#, fuzzy
msgid "Altitude dry"
-msgstr "Altitudkyla"
+msgstr "Altitudtorka"
#: builtin/mainmenu/dlg_create_world.lua
-#, fuzzy
msgid "Biome blending"
-msgstr "Biotopoljud"
+msgstr "Biotopblandning"
#: builtin/mainmenu/dlg_create_world.lua
-#, fuzzy
msgid "Biomes"
-msgstr "Biotopoljud"
+msgstr "Biotoper"
#: builtin/mainmenu/dlg_create_world.lua
-#, fuzzy
msgid "Caverns"
-msgstr "Grottoljud"
+msgstr "Grottor"
#: builtin/mainmenu/dlg_create_world.lua
-#, fuzzy
msgid "Caves"
-msgstr "Oktaver"
+msgstr "Grottor"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Create"
msgstr "Skapa"
#: builtin/mainmenu/dlg_create_world.lua
-#, fuzzy
msgid "Decorations"
-msgstr "Modinformation:"
+msgstr "Dekorationer"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Download a game, such as Minetest Game, from minetest.net"
@@ -346,21 +401,20 @@ msgid "Download one from minetest.net"
msgstr "Ladda ner ett från minetest.net"
#: builtin/mainmenu/dlg_create_world.lua
-#, fuzzy
msgid "Dungeons"
-msgstr "Grottoljud"
+msgstr "Fängelsehålor"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Flat terrain"
-msgstr ""
+msgstr "Platt terräng"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Floating landmasses in the sky"
-msgstr ""
+msgstr "Svävande landmassor i himlen"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Floatlands (experimental)"
-msgstr ""
+msgstr "Floatlands (experimentellt)"
#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
msgid "Game"
@@ -368,27 +422,27 @@ msgstr "Spel"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Generate non-fractal terrain: Oceans and underground"
-msgstr ""
+msgstr "Generera icke-fraktal terräng: Oceaner och underjord"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Hills"
-msgstr ""
+msgstr "Kullar"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Humid rivers"
-msgstr ""
+msgstr "Fuktiga floder"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Increases humidity around rivers"
-msgstr ""
+msgstr "Ökar luftfuktigheten runt floderna"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Lakes"
-msgstr ""
+msgstr "Sjöar"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Low humidity and high heat causes shallow or dry rivers"
-msgstr ""
+msgstr "Låg luftfuktighet och hög värme orsakar grunda eller torra floder"
#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
msgid "Mapgen"
@@ -396,24 +450,23 @@ msgstr "Kartgenerator"
#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
msgid "Mapgen flags"
-msgstr ""
+msgstr "Mapgen-flaggor"
#: builtin/mainmenu/dlg_create_world.lua
-#, fuzzy
msgid "Mapgen-specific flags"
-msgstr "Kartgenerator"
+msgstr "Mapgen-specifika flaggor"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Mountains"
-msgstr ""
+msgstr "Berg"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Mud flow"
-msgstr ""
+msgstr "Lerflöde"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Network of tunnels and caves"
-msgstr ""
+msgstr "Nätverk med tunnlar och grottor"
#: builtin/mainmenu/dlg_create_world.lua
msgid "No game selected"
@@ -421,20 +474,19 @@ msgstr "Inget spel valt"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Reduces heat with altitude"
-msgstr ""
+msgstr "Minskar värmen efter höjd"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Reduces humidity with altitude"
-msgstr ""
+msgstr "Minskar luftfuktigheten efter höjd"
#: builtin/mainmenu/dlg_create_world.lua
-#, fuzzy
msgid "Rivers"
-msgstr "Grottoljud"
+msgstr "Floder"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Sea level rivers"
-msgstr ""
+msgstr "Havsnivåfloder"
#: builtin/mainmenu/dlg_create_world.lua
#: builtin/mainmenu/dlg_settings_advanced.lua
@@ -443,50 +495,51 @@ msgstr "Frö"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Smooth transition between biomes"
-msgstr ""
+msgstr "Smidig övergång mellan biotoper"
#: builtin/mainmenu/dlg_create_world.lua
msgid ""
"Structures appearing on the terrain (no effect on trees and jungle grass "
"created by v6)"
msgstr ""
+"Strukturer som förekommer i terrängen (ingen effekt på träd och djungelgräs "
+"som skapats av v6)"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Structures appearing on the terrain, typically trees and plants"
-msgstr ""
+msgstr "Strukturer som förekommer i terrängen, vanligtvis träd och växter"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Temperate, Desert"
-msgstr ""
+msgstr "Tempererad, Öken"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Temperate, Desert, Jungle"
-msgstr ""
+msgstr "Tempererad, Öken, Djungel"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Temperate, Desert, Jungle, Tundra, Taiga"
-msgstr ""
+msgstr "Tempererad, Öken, Djungel, Tundra, Tajga"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Terrain surface erosion"
-msgstr ""
+msgstr "Erosion av terrängytan"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Trees and jungle grass"
-msgstr ""
+msgstr "Träd- och djungelgräs"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Vary river depth"
-msgstr ""
+msgstr "Varierande floddjup"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Very large caverns deep in the underground"
-msgstr ""
+msgstr "Mycket stora grottor djupt ner i underjorden"
#: builtin/mainmenu/dlg_create_world.lua
-#, fuzzy
msgid "Warning: The Development Test is meant for developers."
-msgstr "Varning: Minimala utvecklingstestet är avsett för utvecklare."
+msgstr "Varning: Utvecklingstestet är avsett för utvecklare."
#: builtin/mainmenu/dlg_create_world.lua
msgid "World name"
@@ -507,14 +560,12 @@ msgid "Delete"
msgstr "Radera"
#: builtin/mainmenu/dlg_delete_content.lua
-#, fuzzy
msgid "pkgmgr: failed to delete \"$1\""
-msgstr "Modhanterare: misslyckades radera \"$1\""
+msgstr "pkgmgr: misslyckades att radera \"$1\""
#: builtin/mainmenu/dlg_delete_content.lua
-#, fuzzy
msgid "pkgmgr: invalid path \"$1\""
-msgstr "Modhanterare: ogiltig modsökväg \"$1\""
+msgstr "pkgmgr: ogiltig sökväg \"$1\""
#: builtin/mainmenu/dlg_delete_world.lua
msgid "Delete World \"$1\"?"
@@ -533,15 +584,16 @@ msgid ""
"This modpack has an explicit name given in its modpack.conf which will "
"override any renaming here."
msgstr ""
+"Detta moddpaket har ett uttryckligt namn angett i modpack.conf vilket går "
+"före namnändring här."
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "(No description of setting given)"
msgstr "(Ingen beskrivning av inställning angiven)"
#: builtin/mainmenu/dlg_settings_advanced.lua
-#, fuzzy
msgid "2D Noise"
-msgstr "Grotta2 oljud"
+msgstr "2D-Brus"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "< Back to Settings page"
@@ -551,7 +603,7 @@ msgstr "< Tillbaka till inställningssidan"
msgid "Browse"
msgstr "Bläddra"
-#: builtin/mainmenu/dlg_settings_advanced.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_settings.lua
msgid "Disabled"
msgstr "Inaktiverad"
@@ -576,7 +628,7 @@ msgid "Offset"
msgstr "Förskjutning"
#: builtin/mainmenu/dlg_settings_advanced.lua
-msgid "Persistance"
+msgid "Persistence"
msgstr "Persistens"
#: builtin/mainmenu/dlg_settings_advanced.lua
@@ -595,7 +647,7 @@ msgstr "Återställ till Ursprungsvärden"
msgid "Scale"
msgstr "Skala"
-#: builtin/mainmenu/dlg_settings_advanced.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_online.lua
msgid "Search"
msgstr "Sök"
@@ -604,9 +656,8 @@ msgid "Select directory"
msgstr "Välj katalog"
#: builtin/mainmenu/dlg_settings_advanced.lua
-#, fuzzy
msgid "Select file"
-msgstr "Välj modfil:"
+msgstr "Välj fil"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Show technical names"
@@ -650,15 +701,14 @@ msgstr "Z-spridning"
#. main menu -> "All Settings".
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "absvalue"
-msgstr ""
+msgstr "absolutvärde"
#. ~ "defaults" is a noise parameter flag.
#. It describes the default processing options
#. for noise settings in main menu -> "All Settings".
#: builtin/mainmenu/dlg_settings_advanced.lua
-#, fuzzy
msgid "defaults"
-msgstr "Standardspel"
+msgstr "standarder"
#. ~ "eased" is a noise parameter flag.
#. It is used to make the map smoother and
@@ -666,68 +716,47 @@ msgstr "Standardspel"
#. main menu -> "All Settings".
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "eased"
-msgstr ""
+msgstr "lättad"
#: builtin/mainmenu/pkgmgr.lua
-#, fuzzy
msgid "$1 (Enabled)"
-msgstr "Aktiverad"
+msgstr "$1 (Aktiverad)"
#: builtin/mainmenu/pkgmgr.lua
-#, fuzzy
msgid "$1 mods"
-msgstr "3D-läge"
+msgstr "$1 moddar"
#: builtin/mainmenu/pkgmgr.lua
msgid "Failed to install $1 to $2"
msgstr "Misslyckades installera $1 till $2"
#: builtin/mainmenu/pkgmgr.lua
-#, fuzzy
msgid "Install Mod: Unable to find real mod name for: $1"
-msgstr "Modinstallation: lyckas ej hitta riktiga modnamnet för: $1"
+msgstr "Moddinstallation: Lyckades ej hitta riktiga moddnamnet för: $1"
#: builtin/mainmenu/pkgmgr.lua
-#, fuzzy
msgid "Install Mod: Unable to find suitable folder name for modpack $1"
-msgstr "Modinstallation: lyckas ej hitta lämpligt mappnamn för modpaket $1"
-
-#: builtin/mainmenu/pkgmgr.lua
-#, fuzzy
-msgid "Install: Unsupported file type \"$1\" or broken archive"
-msgstr ""
-"\n"
-"Modinstallation: ej stöd för filtyp \"$1\" eller trasigt arkiv"
-
-#: builtin/mainmenu/pkgmgr.lua
-#, fuzzy
-msgid "Install: file: \"$1\""
-msgstr "Modinstallation: fil: \"$1\""
+msgstr "Moddinstallation: lyckas ej hitta lämpligt mappnamn för moddpaket $1"
#: builtin/mainmenu/pkgmgr.lua
-#, fuzzy
msgid "Unable to find a valid mod or modpack"
-msgstr "Modinstallation: lyckas ej hitta lämpligt mappnamn för modpaket $1"
+msgstr "Lyckades ej hitta lämplig modd eller moddpaket"
#: builtin/mainmenu/pkgmgr.lua
-#, fuzzy
msgid "Unable to install a $1 as a texture pack"
-msgstr "Misslyckades installera $1 till $2"
+msgstr "Misslyckades att installera $1 som ett texturpaket"
#: builtin/mainmenu/pkgmgr.lua
-#, fuzzy
msgid "Unable to install a game as a $1"
-msgstr "Misslyckades installera $1 till $2"
+msgstr "Misslyckades installera ett spel som en $1"
#: builtin/mainmenu/pkgmgr.lua
-#, fuzzy
msgid "Unable to install a mod as a $1"
-msgstr "Misslyckades installera $1 till $2"
+msgstr "Misslyckades installera en modd som en $1"
#: builtin/mainmenu/pkgmgr.lua
-#, fuzzy
msgid "Unable to install a modpack as a $1"
-msgstr "Misslyckades installera $1 till $2"
+msgstr "Misslyckades installera moddpaket som en $1"
#: builtin/mainmenu/serverlistmgr.lua src/client/game.cpp
msgid "Loading..."
@@ -735,90 +764,88 @@ msgstr "Laddar..."
#: builtin/mainmenu/serverlistmgr.lua
msgid "Public server list is disabled"
-msgstr ""
+msgstr "Den offentliga serverlistan är inaktiverad"
#: builtin/mainmenu/serverlistmgr.lua
msgid "Try reenabling public serverlist and check your internet connection."
msgstr ""
"Försök återaktivera allmän serverlista och kolla din internetanslutning."
+#: builtin/mainmenu/tab_about.lua
+msgid "About"
+msgstr "Om"
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Active Contributors"
+msgstr "Aktiva Bidragande"
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Active renderer:"
+msgstr "Aktiv renderer:"
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Core Developers"
+msgstr "Huvudutvecklare"
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Open User Data Directory"
+msgstr "Öppna Användardatamappen"
+
+#: builtin/mainmenu/tab_about.lua
+msgid ""
+"Opens the directory that contains user-provided worlds, games, mods,\n"
+"and texture packs in a file manager / explorer."
+msgstr ""
+"Öppnar mappen som innehåller världar, spel, moddar,\n"
+"och texturpaket i en filhanterare."
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Previous Contributors"
+msgstr "Före detta bidragande"
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Previous Core Developers"
+msgstr "Före detta huvudutvecklare"
+
#: builtin/mainmenu/tab_content.lua
msgid "Browse online content"
-msgstr ""
+msgstr "Bläddra bland onlineinnehåll"
#: builtin/mainmenu/tab_content.lua
-#, fuzzy
msgid "Content"
-msgstr "Fortsätt"
+msgstr "Innehåll"
#: builtin/mainmenu/tab_content.lua
-#, fuzzy
msgid "Disable Texture Pack"
-msgstr "Välj texturpaket:"
+msgstr "Inaktivera Texturpaket"
#: builtin/mainmenu/tab_content.lua
-#, fuzzy
msgid "Information:"
-msgstr "Modinformation:"
+msgstr "Information:"
#: builtin/mainmenu/tab_content.lua
-#, fuzzy
msgid "Installed Packages:"
-msgstr "Installerade moddar:"
+msgstr "Installerade paket:"
#: builtin/mainmenu/tab_content.lua
msgid "No dependencies."
msgstr "Inga beroenden."
#: builtin/mainmenu/tab_content.lua
-#, fuzzy
msgid "No package description available"
-msgstr "Ingen modbeskrivning tillgänglig"
+msgstr "Ingen paketbeskrivning tillgänglig"
#: builtin/mainmenu/tab_content.lua
msgid "Rename"
msgstr "Byt namn"
#: builtin/mainmenu/tab_content.lua
-#, fuzzy
msgid "Uninstall Package"
-msgstr "Avinstallera vald mod"
+msgstr "Avinstallera Paket"
#: builtin/mainmenu/tab_content.lua
-#, fuzzy
msgid "Use Texture Pack"
-msgstr "Texturpaket"
-
-#: builtin/mainmenu/tab_credits.lua
-msgid "Active Contributors"
-msgstr "Aktiva Bidragande"
-
-#: builtin/mainmenu/tab_credits.lua
-msgid "Core Developers"
-msgstr "Huvudutvecklare"
-
-#: builtin/mainmenu/tab_credits.lua
-msgid "Credits"
-msgstr "Medverkande"
-
-#: builtin/mainmenu/tab_credits.lua
-#, fuzzy
-msgid "Open User Data Directory"
-msgstr "Välj katalog"
-
-#: builtin/mainmenu/tab_credits.lua
-msgid ""
-"Opens the directory that contains user-provided worlds, games, mods,\n"
-"and texture packs in a file manager / explorer."
-msgstr ""
-
-#: builtin/mainmenu/tab_credits.lua
-msgid "Previous Contributors"
-msgstr "Före detta bidragande"
-
-#: builtin/mainmenu/tab_credits.lua
-msgid "Previous Core Developers"
-msgstr "Före detta huvudutvecklare"
+msgstr "Använd Texturpaket"
#: builtin/mainmenu/tab_local.lua
msgid "Announce Server"
@@ -842,15 +869,15 @@ msgstr "Bilda Spel"
#: builtin/mainmenu/tab_local.lua
msgid "Host Server"
-msgstr "Bilda Server"
+msgstr "Värdserver"
#: builtin/mainmenu/tab_local.lua
msgid "Install games from ContentDB"
-msgstr ""
+msgstr "Installera spel från ContentDB"
-#: builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
msgid "Name"
-msgstr ""
+msgstr "Namn"
#: builtin/mainmenu/tab_local.lua
msgid "New"
@@ -860,24 +887,21 @@ msgstr "Ny"
msgid "No world created or selected!"
msgstr "Ingen värld skapad eller vald!"
-#: builtin/mainmenu/tab_local.lua
-#, fuzzy
+#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
msgid "Password"
-msgstr "Nytt Lösenord"
+msgstr "Lösenord"
#: builtin/mainmenu/tab_local.lua
-#, fuzzy
msgid "Play Game"
-msgstr "Starta spel"
+msgstr "Starta Spel"
-#: builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
msgid "Port"
msgstr "Port"
#: builtin/mainmenu/tab_local.lua
-#, fuzzy
msgid "Select Mods"
-msgstr "Välj värld:"
+msgstr "Välj moddar"
#: builtin/mainmenu/tab_local.lua
msgid "Select World:"
@@ -888,13 +912,16 @@ msgid "Server Port"
msgstr "Serverport"
#: builtin/mainmenu/tab_local.lua
-#, fuzzy
msgid "Start Game"
-msgstr "Bilda Spel"
+msgstr "Starta Spel"
#: builtin/mainmenu/tab_online.lua
-msgid "Address / Port"
-msgstr "Adress / Port"
+msgid "Address"
+msgstr "Adress"
+
+#: builtin/mainmenu/tab_online.lua src/client/keycode.cpp
+msgid "Clear"
+msgstr "Rensa"
#: builtin/mainmenu/tab_online.lua
msgid "Connect"
@@ -904,35 +931,42 @@ msgstr "Anslut"
msgid "Creative mode"
msgstr "Kreativt läge"
+#. ~ PvP = Player versus Player
#: builtin/mainmenu/tab_online.lua
-msgid "Damage enabled"
-msgstr "Skada aktiverat"
+msgid "Damage / PvP"
+msgstr "Skada / PvP"
#: builtin/mainmenu/tab_online.lua
msgid "Del. Favorite"
msgstr "Radera Favorit"
#: builtin/mainmenu/tab_online.lua
-msgid "Favorite"
-msgstr "Favoritmarkera"
+msgid "Favorites"
+msgstr "Favoriter"
#: builtin/mainmenu/tab_online.lua
-#, fuzzy
-msgid "Join Game"
-msgstr "Bilda Spel"
+msgid "Incompatible Servers"
+msgstr "Inkompatibla Servrar"
#: builtin/mainmenu/tab_online.lua
-msgid "Name / Password"
-msgstr "Namn / Lösenord"
+msgid "Join Game"
+msgstr "Anslut Spel"
#: builtin/mainmenu/tab_online.lua
msgid "Ping"
msgstr "Ping"
-#. ~ PvP = Player versus Player
#: builtin/mainmenu/tab_online.lua
-msgid "PvP enabled"
-msgstr "PvP aktiverat"
+msgid "Public Servers"
+msgstr "Offentliga Servrar"
+
+#: builtin/mainmenu/tab_online.lua
+msgid "Refresh"
+msgstr "Uppdatera"
+
+#: builtin/mainmenu/tab_online.lua
+msgid "Server Description"
+msgstr "Serverbeskrivning"
#: builtin/mainmenu/tab_settings.lua
msgid "2x"
@@ -951,16 +985,14 @@ msgid "8x"
msgstr "8x"
#: builtin/mainmenu/tab_settings.lua
-#, fuzzy
msgid "All Settings"
-msgstr "Inställningar"
+msgstr "Alla Inställningar"
#: builtin/mainmenu/tab_settings.lua
msgid "Antialiasing:"
msgstr "Kantutjämning:"
#: builtin/mainmenu/tab_settings.lua
-#, fuzzy
msgid "Autosave Screen Size"
msgstr "Spara fönsterstorlek automatiskt"
@@ -974,13 +1006,33 @@ msgstr "Ändra Tangenter"
#: builtin/mainmenu/tab_settings.lua
msgid "Connected Glass"
-msgstr "Sammankopplat glas"
+msgstr "Sammanfogat Glas"
+
+#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
+msgid "Dynamic shadows"
+msgstr "Dynamiska skuggor"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Dynamic shadows: "
+msgstr "Dynamiska skuggor: "
#: builtin/mainmenu/tab_settings.lua
msgid "Fancy Leaves"
msgstr "Fina Löv"
#: builtin/mainmenu/tab_settings.lua
+msgid "High"
+msgstr "Hög"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Low"
+msgstr "LÃ¥g"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Medium"
+msgstr "Medium"
+
+#: builtin/mainmenu/tab_settings.lua
msgid "Mipmap"
msgstr "Mipmap"
@@ -1034,11 +1086,11 @@ msgstr "Shaders"
#: builtin/mainmenu/tab_settings.lua
msgid "Shaders (experimental)"
-msgstr ""
+msgstr "Shaders (experimentella)"
#: builtin/mainmenu/tab_settings.lua
msgid "Shaders (unavailable)"
-msgstr ""
+msgstr "Shaders (otillgängliga)"
#: builtin/mainmenu/tab_settings.lua
msgid "Simple Leaves"
@@ -1052,37 +1104,39 @@ msgstr "Utjämnad Belysning"
msgid "Texturing:"
msgstr "Texturering:"
-#: builtin/mainmenu/tab_settings.lua
-msgid "To enable shaders the OpenGL driver needs to be used."
-msgstr "För att aktivera shaders behöver OpenGL-drivern användas."
-
#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
msgid "Tone Mapping"
msgstr "Tonmappning"
#: builtin/mainmenu/tab_settings.lua
-#, fuzzy
msgid "Touchthreshold: (px)"
-msgstr "Touch-tröskel (px)"
+msgstr "Touch-tröskel: (px)"
#: builtin/mainmenu/tab_settings.lua
msgid "Trilinear Filter"
msgstr "Trilinjärt filter"
#: builtin/mainmenu/tab_settings.lua
+msgid "Ultra High"
+msgstr "Extremt Hög"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Very Low"
+msgstr "Väldigt Låg"
+
+#: builtin/mainmenu/tab_settings.lua
msgid "Waving Leaves"
msgstr "Vajande Löv"
#: builtin/mainmenu/tab_settings.lua
-#, fuzzy
msgid "Waving Liquids"
-msgstr "Vajande Löv"
+msgstr "Vajande Vätskor"
#: builtin/mainmenu/tab_settings.lua
msgid "Waving Plants"
msgstr "Vajande Växter"
-#: src/client/client.cpp
+#: src/client/client.cpp src/client/game.cpp
msgid "Connection timed out."
msgstr "Anslutningens tidsgräns nådd."
@@ -1111,12 +1165,12 @@ msgid "Connection error (timed out?)"
msgstr "Anslutningsfel (tidsgräns nådd?)"
#: src/client/clientlauncher.cpp
-msgid "Could not find or load game \""
-msgstr "Kunde inte hitta eller ladda spel \""
+msgid "Could not find or load game: "
+msgstr "Kunde inte hitta eller ladda spel: "
#: src/client/clientlauncher.cpp
msgid "Invalid gamespec."
-msgstr "Ogiltiga spelspecifikationer."
+msgstr "Ogiltig spelspecifikation."
#: src/client/clientlauncher.cpp
msgid "Main Menu"
@@ -1124,7 +1178,7 @@ msgstr "Huvudmeny"
#: src/client/clientlauncher.cpp
msgid "No world selected and no address provided. Nothing to do."
-msgstr "Ingen värld vald och ingen adress försed. Inget kan göras."
+msgstr "Ingen värld vald och ingen adress anginven. Inget att göra."
#: src/client/clientlauncher.cpp
msgid "Player name too long."
@@ -1132,27 +1186,15 @@ msgstr "Spelarnamn för långt."
#: src/client/clientlauncher.cpp
msgid "Please choose a name!"
-msgstr "Välj ett namn!"
+msgstr "Vänligen välj ett namn!"
#: src/client/clientlauncher.cpp
msgid "Provided password file failed to open: "
-msgstr ""
+msgstr "Den angivna lösenordsfilen kunde inte öppnas: "
#: src/client/clientlauncher.cpp
msgid "Provided world path doesn't exist: "
-msgstr "Den angivna sökvägen för världen existerar inte: "
-
-#. ~ DO NOT TRANSLATE THIS LITERALLY!
-#. This is a special string. Put either "no" or "yes"
-#. into the translation field (literally).
-#. Choose "yes" if the language requires use of the fallback
-#. font, "no" otherwise.
-#. The fallback font is (normally) required for languages with
-#. non-Latin script, like Chinese.
-#. When in doubt, test your translation.
-#: src/client/fontengine.cpp
-msgid "needs_fallback_font"
-msgstr "no"
+msgstr "Angiven världssökväg existerar inte: "
#: src/client/game.cpp
msgid ""
@@ -1160,31 +1202,19 @@ msgid ""
"Check debug.txt for details."
msgstr ""
"\n"
-"Läs debug.txt för detaljer."
+"Se debug.txt för detaljer."
#: src/client/game.cpp
-#, fuzzy
msgid "- Address: "
-msgstr "Bindningsadress"
-
-#: src/client/game.cpp
-#, fuzzy
-msgid "- Creative Mode: "
-msgstr "Kreativt läge"
-
-#: src/client/game.cpp
-#, fuzzy
-msgid "- Damage: "
-msgstr "Aktivera skada"
+msgstr "- Bindningsadress: "
#: src/client/game.cpp
msgid "- Mode: "
msgstr "- Läge: "
#: src/client/game.cpp
-#, fuzzy
msgid "- Port: "
-msgstr "Port"
+msgstr "- Port: "
#: src/client/game.cpp
msgid "- Public: "
@@ -1200,53 +1230,84 @@ msgid "- Server Name: "
msgstr "- Servernamn: "
#: src/client/game.cpp
-#, fuzzy
+msgid "A serialization error occurred:"
+msgstr "Ett serialiseringsfel uppstod:"
+
+#: src/client/game.cpp
+#, c-format
+msgid "Access denied. Reason: %s"
+msgstr "Ã…tkomst nekad. Anledning: %s"
+
+#: src/client/game.cpp
msgid "Automatic forward disabled"
-msgstr "Tangent för filmiskt länge"
+msgstr "Automatiskt framåt inaktiverad"
#: src/client/game.cpp
-#, fuzzy
msgid "Automatic forward enabled"
-msgstr "Tangent för filmiskt länge"
+msgstr "Automatiskt framåt aktiverat"
+
+#: src/client/game.cpp
+msgid "Block bounds hidden"
+msgstr "Blockgränser dolda"
+
+#: src/client/game.cpp
+msgid "Block bounds shown for all blocks"
+msgstr "Blockgränser visas för alla block"
+
+#: src/client/game.cpp
+msgid "Block bounds shown for current block"
+msgstr "Blockgränser visas för det aktuella blocket"
+
+#: src/client/game.cpp
+msgid "Block bounds shown for nearby blocks"
+msgstr "Blockgränser visas för närliggande block"
#: src/client/game.cpp
-#, fuzzy
msgid "Camera update disabled"
-msgstr "Av/på-tangent för kamerauppdatering"
+msgstr "Kamerauppdatering inaktiverad"
#: src/client/game.cpp
-#, fuzzy
msgid "Camera update enabled"
-msgstr "Av/på-tangent för kamerauppdatering"
+msgstr "Kamerauppdatering aktiverat"
+
+#: src/client/game.cpp
+msgid "Can't show block bounds (need 'basic_debug' privilege)"
+msgstr "Kan inte visa blockgränser (behöver behörigheten 'basic_debug')"
#: src/client/game.cpp
msgid "Change Password"
msgstr "Ändra Lösenord"
#: src/client/game.cpp
-#, fuzzy
msgid "Cinematic mode disabled"
-msgstr "Tangent för filmiskt länge"
+msgstr "Filmiskt länge inaktiverad"
#: src/client/game.cpp
-#, fuzzy
msgid "Cinematic mode enabled"
-msgstr "Tangent för filmiskt länge"
+msgstr "Filmiskt länge aktiverat"
+
+#: src/client/game.cpp
+msgid "Client disconnected"
+msgstr "Klienten frånkopplades"
#: src/client/game.cpp
msgid "Client side scripting is disabled"
-msgstr ""
+msgstr "Klientsidiga skriptar är inaktiverade"
#: src/client/game.cpp
msgid "Connecting to server..."
msgstr "Ansluter till server..."
#: src/client/game.cpp
+msgid "Connection failed for unknown reason"
+msgstr "Anslutningen misslyckades av okänd anledning"
+
+#: src/client/game.cpp
msgid "Continue"
msgstr "Fortsätt"
#: src/client/game.cpp
-#, fuzzy, c-format
+#, c-format
msgid ""
"Controls:\n"
"- %s: move forwards\n"
@@ -1269,16 +1330,21 @@ msgstr ""
"- %s: rör dig åt vänster\n"
"- %s: rör dig åt höger\n"
"- %s: hoppa/klättra\n"
+"- %s: gräv/slå\n"
+"- %s: använd\n"
"- %s: smyg/rör dig nedåt\n"
"- %s: släpp föremål\n"
"- %s: förråd\n"
"- Mus: vänd/titta\n"
-"- Vänsterklick: gräv/slå\n"
-"- Högerklick: placera/använd\n"
"- Mushjul: välj föremål\n"
"- %s: chatt\n"
#: src/client/game.cpp
+#, c-format
+msgid "Couldn't resolve address: %s"
+msgstr "Kunde inte lösa adressen: %s"
+
+#: src/client/game.cpp
msgid "Creating client..."
msgstr "Skapar klient..."
@@ -1288,16 +1354,15 @@ msgstr "Skapar server..."
#: src/client/game.cpp
msgid "Debug info and profiler graph hidden"
-msgstr ""
+msgstr "Felsökningsinfo och profileringsgraf gömd"
#: src/client/game.cpp
-#, fuzzy
msgid "Debug info shown"
-msgstr "Av/På tangent för debuginformation"
+msgstr "Felsökningsinfo visas"
#: src/client/game.cpp
msgid "Debug info, profiler graph, and wireframe hidden"
-msgstr ""
+msgstr "Felsökningsinfo, profileringsgraf och wireframe gömd"
#: src/client/game.cpp
msgid ""
@@ -1329,11 +1394,11 @@ msgstr ""
#: src/client/game.cpp
msgid "Disabled unlimited viewing range"
-msgstr ""
+msgstr "Inaktiverat obegränsat visningsområde"
#: src/client/game.cpp
msgid "Enabled unlimited viewing range"
-msgstr ""
+msgstr "Aktiverat obegränsat visningsområde"
#: src/client/game.cpp
msgid "Exit to Menu"
@@ -1341,43 +1406,39 @@ msgstr "Avsluta till Meny"
#: src/client/game.cpp
msgid "Exit to OS"
-msgstr "Avsluta till Operativsystem"
+msgstr "Avsluta till OS"
#: src/client/game.cpp
msgid "Fast mode disabled"
-msgstr ""
+msgstr "Snabbt läge inaktiverat"
#: src/client/game.cpp
-#, fuzzy
msgid "Fast mode enabled"
-msgstr "Skada aktiverat"
+msgstr "Snabbläge aktiverat"
#: src/client/game.cpp
msgid "Fast mode enabled (note: no 'fast' privilege)"
-msgstr ""
+msgstr "Snabbt läge aktiverat (notera: inget 'fast'-tillstånd)"
#: src/client/game.cpp
msgid "Fly mode disabled"
-msgstr ""
+msgstr "Flygläge inaktiverat"
#: src/client/game.cpp
-#, fuzzy
msgid "Fly mode enabled"
-msgstr "Skada aktiverat"
+msgstr "Flygläge aktiverat"
#: src/client/game.cpp
msgid "Fly mode enabled (note: no 'fly' privilege)"
-msgstr ""
+msgstr "Flygläge aktiverat (notera: inget 'fast'-tillstånd)"
#: src/client/game.cpp
-#, fuzzy
msgid "Fog disabled"
-msgstr "Inaktiverad"
+msgstr "Dimma inaktiverad"
#: src/client/game.cpp
-#, fuzzy
msgid "Fog enabled"
-msgstr "aktiverad"
+msgstr "Dimma aktiverat"
#: src/client/game.cpp
msgid "Game info:"
@@ -1409,20 +1470,23 @@ msgstr "MiB/s"
#: src/client/game.cpp
msgid "Minimap currently disabled by game or mod"
-msgstr ""
+msgstr "Minimapp för närvarande inaktiverad av spel eller modd"
+
+#: src/client/game.cpp
+msgid "Multiplayer"
+msgstr "Flerspelarläge"
#: src/client/game.cpp
msgid "Noclip mode disabled"
-msgstr ""
+msgstr "Noclipläge inaktiverat"
#: src/client/game.cpp
-#, fuzzy
msgid "Noclip mode enabled"
-msgstr "Skada aktiverat"
+msgstr "Noclipläge aktiverat"
#: src/client/game.cpp
msgid "Noclip mode enabled (note: no 'noclip' privilege)"
-msgstr ""
+msgstr "Noclipläge aktiverat (notera: inget 'noclip'-tillstånd)"
#: src/client/game.cpp
msgid "Node definitions..."
@@ -1446,7 +1510,7 @@ msgstr ""
#: src/client/game.cpp
msgid "Profiler graph shown"
-msgstr ""
+msgstr "Profileringsgraf visas"
#: src/client/game.cpp
msgid "Remote server"
@@ -1469,37 +1533,50 @@ msgid "Sound Volume"
msgstr "Ljudvolym"
#: src/client/game.cpp
-#, fuzzy
msgid "Sound muted"
-msgstr "Ljudvolym"
+msgstr "Ljudvolym avstängd"
#: src/client/game.cpp
msgid "Sound system is disabled"
-msgstr ""
+msgstr "Ljudsystem är inaktiverad"
#: src/client/game.cpp
msgid "Sound system is not supported on this build"
-msgstr ""
+msgstr "Ljudsystem stöds inte i detta bygge"
#: src/client/game.cpp
-#, fuzzy
msgid "Sound unmuted"
-msgstr "Ljudvolym"
+msgstr "Ljud påsatt"
+
+#: src/client/game.cpp
+#, c-format
+msgid "The server is probably running a different version of %s."
+msgstr "Servern kör troligtvist en annan version av %s."
+
+#: src/client/game.cpp
+#, c-format
+msgid "Unable to connect to %s because IPv6 is disabled"
+msgstr "Kan inte ansluta till %s eftersom IPv6 är inaktiverad"
+
+#: src/client/game.cpp
+#, c-format
+msgid "Unable to listen on %s because IPv6 is disabled"
+msgstr "Kan inte lyssna på %s eftersom IPv6 är inaktiverad"
#: src/client/game.cpp
-#, fuzzy, c-format
+#, c-format
msgid "Viewing range changed to %d"
-msgstr "Volym ändrad till to %d%%"
+msgstr "Visningsområde ändrad till %d"
#: src/client/game.cpp
#, c-format
msgid "Viewing range is at maximum: %d"
-msgstr ""
+msgstr "Visningsområde är vid sitt maximala: %d"
#: src/client/game.cpp
#, c-format
msgid "Viewing range is at minimum: %d"
-msgstr ""
+msgstr "Visningsområde är vid sitt minimala: %d"
#: src/client/game.cpp
#, c-format
@@ -1508,60 +1585,54 @@ msgstr "Volym ändrad till to %d%%"
#: src/client/game.cpp
msgid "Wireframe shown"
-msgstr ""
+msgstr "Wireframe visas"
#: src/client/game.cpp
msgid "Zoom currently disabled by game or mod"
-msgstr ""
+msgstr "Zoom är för närvarande inaktiverad av spel eller modd"
#: src/client/game.cpp
msgid "ok"
msgstr "ok"
#: src/client/gameui.cpp
-#, fuzzy
msgid "Chat hidden"
-msgstr "Chattangent"
+msgstr "Chatt gömd"
#: src/client/gameui.cpp
msgid "Chat shown"
-msgstr ""
+msgstr "Chatt visas"
#: src/client/gameui.cpp
msgid "HUD hidden"
-msgstr ""
+msgstr "HUD gömd"
#: src/client/gameui.cpp
msgid "HUD shown"
-msgstr ""
+msgstr "HUD visas"
#: src/client/gameui.cpp
msgid "Profiler hidden"
-msgstr ""
+msgstr "Profilering gömd"
#: src/client/gameui.cpp
#, c-format
msgid "Profiler shown (page %d of %d)"
-msgstr ""
+msgstr "Profilering visas (sida %d av %d)"
#: src/client/keycode.cpp
msgid "Apps"
msgstr "Appar"
#: src/client/keycode.cpp
-#, fuzzy
msgid "Backspace"
-msgstr "Tillbaka"
+msgstr "Backspace"
#: src/client/keycode.cpp
msgid "Caps Lock"
msgstr "Caps Lock"
#: src/client/keycode.cpp
-msgid "Clear"
-msgstr "Rensa"
-
-#: src/client/keycode.cpp
msgid "Control"
msgstr "Kontroll"
@@ -1716,11 +1787,11 @@ msgstr "Rensa OEM"
#: src/client/keycode.cpp
msgid "Page down"
-msgstr ""
+msgstr "Sida ner"
#: src/client/keycode.cpp
msgid "Page up"
-msgstr ""
+msgstr "Sida upp"
#: src/client/keycode.cpp
msgid "Pause"
@@ -1810,21 +1881,29 @@ msgstr "Zoom"
#: src/client/minimap.cpp
msgid "Minimap hidden"
-msgstr ""
+msgstr "Minimapp gömd"
#: src/client/minimap.cpp
#, c-format
msgid "Minimap in radar mode, Zoom x%d"
-msgstr ""
+msgstr "Minimapp i radarläge, Zoom x%d"
#: src/client/minimap.cpp
#, c-format
msgid "Minimap in surface mode, Zoom x%d"
-msgstr ""
+msgstr "Minimapp i ytläge, Zoom x%d"
#: src/client/minimap.cpp
msgid "Minimap in texture mode"
-msgstr ""
+msgstr "Minimapp i texturläge"
+
+#: src/gui/guiChatConsole.cpp
+msgid "Failed to open webpage"
+msgstr "Misslyckades att öppna hemsida"
+
+#: src/gui/guiChatConsole.cpp
+msgid "Opening webpage"
+msgstr "Öppnar hemsida"
#: src/gui/guiConfirmRegistration.cpp src/gui/guiPasswordChange.cpp
msgid "Passwords do not match!"
@@ -1832,7 +1911,7 @@ msgstr "Lösenorden matchar inte!"
#: src/gui/guiConfirmRegistration.cpp
msgid "Register and Join"
-msgstr ""
+msgstr "Registrera och Anslut"
#: src/gui/guiConfirmRegistration.cpp
#, c-format
@@ -1843,33 +1922,44 @@ msgid ""
"Please retype your password and click 'Register and Join' to confirm account "
"creation, or click 'Cancel' to abort."
msgstr ""
+"Du håller på att ansluta till den här servern med namnet \"%s\" för den "
+"första gången.\n"
+"Om du fortsätter kommer ett nytt konto med dina uppgifter skapas på "
+"servern.\n"
+"Var snäll och fyll i ditt lösenord och tryck på 'Registrera och Anslut' för "
+"att bekräfta kontoregistrering, eller tryck \"Avbryt\" för att avbryta."
#: src/gui/guiFormSpecMenu.cpp
msgid "Proceed"
msgstr "Fortsätt"
#: src/gui/guiKeyChangeMenu.cpp
-#, fuzzy
-msgid "\"Special\" = climb down"
-msgstr "\"Använd\" = klättra neråt"
+msgid "\"Aux1\" = climb down"
+msgstr "\"Aux1\" = klättra neråt"
#: src/gui/guiKeyChangeMenu.cpp
-#, fuzzy
msgid "Autoforward"
-msgstr "Framåt"
+msgstr "Autoframåt"
#: src/gui/guiKeyChangeMenu.cpp src/settings_translation_file.cpp
msgid "Automatic jumping"
-msgstr ""
+msgstr "Automatiskt hopp"
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Aux1"
+msgstr "Aux1"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Backward"
msgstr "Bakåt"
#: src/gui/guiKeyChangeMenu.cpp
-#, fuzzy
+msgid "Block bounds"
+msgstr "Blockgränser"
+
+#: src/gui/guiKeyChangeMenu.cpp
msgid "Change camera"
-msgstr "Ändra tangenter"
+msgstr "Ändra kamera"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Chat"
@@ -1885,7 +1975,7 @@ msgstr "Konsol"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Dec. range"
-msgstr ""
+msgstr "Min. räckvidd"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Dec. volume"
@@ -1905,7 +1995,7 @@ msgstr "Framåt"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Inc. range"
-msgstr ""
+msgstr "Höj räckvidd"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Inc. volume"
@@ -1951,25 +2041,19 @@ msgstr "Välj räckvidd"
#: src/gui/guiKeyChangeMenu.cpp src/settings_translation_file.cpp
msgid "Screenshot"
-msgstr ""
+msgstr "Skärmdump"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Sneak"
msgstr "Smyg"
#: src/gui/guiKeyChangeMenu.cpp
-msgid "Special"
-msgstr ""
-
-#: src/gui/guiKeyChangeMenu.cpp
-#, fuzzy
msgid "Toggle HUD"
-msgstr "Slå av/på flygläge"
+msgstr "Slå av/på HUD"
#: src/gui/guiKeyChangeMenu.cpp
-#, fuzzy
msgid "Toggle chat log"
-msgstr "Slå av/på snabb"
+msgstr "Slå av/på chattlog"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Toggle fast"
@@ -1980,27 +2064,24 @@ msgid "Toggle fly"
msgstr "Slå av/på flygläge"
#: src/gui/guiKeyChangeMenu.cpp
-#, fuzzy
msgid "Toggle fog"
-msgstr "Slå av/på flygläge"
+msgstr "Slå av/på dimma"
#: src/gui/guiKeyChangeMenu.cpp
-#, fuzzy
msgid "Toggle minimap"
-msgstr "Slå av/på noclip"
+msgstr "Slå av/på minimapp"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Toggle noclip"
msgstr "Slå av/på noclip"
#: src/gui/guiKeyChangeMenu.cpp
-#, fuzzy
msgid "Toggle pitchmove"
-msgstr "Slå av/på snabb"
+msgstr "Slå av/på pitchmove"
#: src/gui/guiKeyChangeMenu.cpp
msgid "press key"
-msgstr "tryck på tangent"
+msgstr "tryck på knapp"
#: src/gui/guiPasswordChange.cpp
msgid "Change"
@@ -2023,13 +2104,13 @@ msgid "Exit"
msgstr "Avsluta"
#: src/gui/guiVolumeChange.cpp
-#, fuzzy
msgid "Muted"
-msgstr "Tysta"
+msgstr "Tyst"
#: src/gui/guiVolumeChange.cpp
-msgid "Sound Volume: "
-msgstr "Ljudvolym: "
+#, c-format
+msgid "Sound Volume: %d%%"
+msgstr "Ljudvolym: %d%%"
#. ~ Imperative, as in "Enter/type in text".
#. Don't forget the space.
@@ -2049,16 +2130,21 @@ msgid ""
"(Android) Fixes the position of virtual joystick.\n"
"If disabled, virtual joystick will center to first-touch's position."
msgstr ""
+"(Android) Fastställer den virtuella joystickens position.\n"
+"Om inaktiverad centreras den virtuella joysticken till det första "
+"fingertryckets position."
#: src/settings_translation_file.cpp
msgid ""
-"(Android) Use virtual joystick to trigger \"aux\" button.\n"
-"If enabled, virtual joystick will also tap \"aux\" button when out of main "
+"(Android) Use virtual joystick to trigger \"Aux1\" button.\n"
+"If enabled, virtual joystick will also tap \"Aux1\" button when out of main "
"circle."
msgstr ""
+"(Android) Använd den virtuella joysticken för \"Aux1\"-knappen.\n"
+"Om aktiverad kommer den virtuella joysticken att aktivera \"Aux1\"-knappen "
+"när den är utanför huvudcirkeln."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"(X,Y,Z) offset of fractal from world center in units of 'scale'.\n"
"Can be used to move a desired point to (0, 0) to create a\n"
@@ -2070,10 +2156,13 @@ msgid ""
"Range roughly -2 to 2. Multiply by 'scale' for offset in nodes."
msgstr ""
"(X,Y,Z) förskjutning av fraktal från världscenter i enheten 'skala'.\n"
-"Används för att flytta ett passande spawn-område av lågland nära (0, 0).\n"
-"Ursprungsvärdena passar mandelbrotmängder, de behöver ändras för "
-"juliamängder.\n"
-"Värden mellan -2 to 2. Multiplicera med 'skala' för avvikelse i noder."
+"Kan användas för att förflytta en punkt till (0, 0) för att skapa en\n"
+"passande spawnpunkt, eller för att tillåta inzoomning på en specifik\n"
+"punkt genom att höja 'scale'.\n"
+"Ursprungsvärdena passar en spawnpunkt för mandelbrotmängder,\n"
+"den kan behöva ändras i andra situationer.\n"
+"Värdegräns mellan -2 och 2. Multiplicera med 'skala för avvikelse\n"
+"i noder."
#: src/settings_translation_file.cpp
msgid ""
@@ -2085,34 +2174,41 @@ msgid ""
"Default is for a vertically-squashed shape suitable for\n"
"an island, set all 3 numbers equal for the raw shape."
msgstr ""
+"(X,Y,Z) fraktalens skala i noder.\n"
+"Den riktiga storleken kommer att vara 2 till 3 gånger större.\n"
+"Siffrorna kan göras mycket stora, men fraktalen\n"
+"behöver inte rymmas i världen.\n"
+"Öka dessa för att 'zooma' in i fraktalens detaljer.\n"
+"Standardvärdet är för en vertikalt mosad form som passar för\n"
+"en ö, ställ in alla 3 siffrorna lika för den ursprungliga formen."
#: src/settings_translation_file.cpp
msgid "2D noise that controls the shape/size of ridged mountains."
-msgstr ""
+msgstr "2D-brus som styr formen/storleken på berg."
#: src/settings_translation_file.cpp
msgid "2D noise that controls the shape/size of rolling hills."
-msgstr ""
+msgstr "2D-brus som styr formen/storleken av rullande kullar."
#: src/settings_translation_file.cpp
msgid "2D noise that controls the shape/size of step mountains."
-msgstr ""
+msgstr "2D-brus som styr formen/storleken på steppberg."
#: src/settings_translation_file.cpp
msgid "2D noise that controls the size/occurrence of ridged mountain ranges."
-msgstr ""
+msgstr "2D-brus som styr storleken/förekomsten av bergskedjor med rågångar."
#: src/settings_translation_file.cpp
msgid "2D noise that controls the size/occurrence of rolling hills."
-msgstr ""
+msgstr "2D-brus som styr storleken/förekomsten av rullande kullar."
#: src/settings_translation_file.cpp
msgid "2D noise that controls the size/occurrence of step mountain ranges."
-msgstr ""
+msgstr "2D-brus som styr storleken/förekomsten av bergskedjor med rågångar."
#: src/settings_translation_file.cpp
msgid "2D noise that locates the river valleys and channels."
-msgstr ""
+msgstr "2D-brus som lokaliserar floddalar och kanaler."
#: src/settings_translation_file.cpp
msgid "3D clouds"
@@ -2124,7 +2220,7 @@ msgstr "3D-läge"
#: src/settings_translation_file.cpp
msgid "3D mode parallax strength"
-msgstr ""
+msgstr "Parallaxstyrka i 3D-läge"
#: src/settings_translation_file.cpp
msgid "3D noise defining giant caverns."
@@ -2145,26 +2241,30 @@ msgid ""
"to be adjusted, as floatland tapering functions best when this noise has\n"
"a value range of approximately -2.0 to 2.0."
msgstr ""
+"3D-brus som definierar strukturen hos floatlands.\n"
+"Om det ändras från standardvärdet kan brusets 'skala' (vanligtvist 0.7) "
+"behöva\n"
+"justeras, eftersom avsmalningen av floatlands fungerar bäst när detta brus "
+"har\n"
+"ett värdeintervall på ungefär -2.0 till 2.0."
#: src/settings_translation_file.cpp
msgid "3D noise defining structure of river canyon walls."
msgstr "3D oljudsdefiniering av strukturen av floddalsväggar."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "3D noise defining terrain."
-msgstr "3D oljudsdefinierade jättegrottor"
+msgstr "3D brusdefinierad terräng."
#: src/settings_translation_file.cpp
msgid "3D noise for mountain overhangs, cliffs, etc. Usually small variations."
-msgstr ""
+msgstr "3D-brus för bergsöverhäng, klippor osv. Vanligtvist små variationer."
#: src/settings_translation_file.cpp
msgid "3D noise that determines number of dungeons per mapchunk."
-msgstr ""
+msgstr "3D-brus som bestämmer antalet fängelsehålor per mappchunk."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"3D support.\n"
"Currently supported:\n"
@@ -2184,7 +2284,9 @@ msgstr ""
"- interlaced: skärmstöd för ojämn/jämn linjebaserad polarisering.\n"
"- topbottom: split screen över/under.\n"
"- sidebyside: split screen sida vid sida.\n"
-"- pageflip: quadbufferbaserad 3d."
+"- crossview: Korsögad 3d\n"
+"- pageflip: quadbufferbaserad 3d.\n"
+"Notera att 'interlaced'-läget kräver shaders."
#: src/settings_translation_file.cpp
msgid ""
@@ -2204,16 +2306,15 @@ msgstr "Ett meddelande som visas för alla klienter när servern stängs ner."
#: src/settings_translation_file.cpp
msgid "ABM interval"
-msgstr ""
+msgstr "ABM-intervall"
#: src/settings_translation_file.cpp
msgid "ABM time budget"
-msgstr ""
+msgstr "ABM-tidsbudget"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Absolute limit of queued blocks to emerge"
-msgstr "Absolut gräns av emerge kö"
+msgstr "Absolut gräns för köade block att framträda"
#: src/settings_translation_file.cpp
msgid "Acceleration in air"
@@ -2221,16 +2322,15 @@ msgstr "Acceleration i luften"
#: src/settings_translation_file.cpp
msgid "Acceleration of gravity, in nodes per second per second."
-msgstr ""
+msgstr "Accelerering av gravitation, i noder per sekund per sekund."
#: src/settings_translation_file.cpp
msgid "Active Block Modifiers"
msgstr "Aktiva Blockmodifierare"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Active block management interval"
-msgstr "Aktivt Blockhanteringsintervall"
+msgstr "Aktivt blockhanteringsintervall"
#: src/settings_translation_file.cpp
msgid "Active block range"
@@ -2264,6 +2364,12 @@ msgstr ""
"för 4k-skärmar."
#: src/settings_translation_file.cpp
+msgid "Adjust the detected display density, used for scaling UI elements."
+msgstr ""
+"Justera den identifierade skärmdensiteten, vilket används för skalning av "
+"gränssnittet."
+
+#: src/settings_translation_file.cpp
#, c-format
msgid ""
"Adjusts the density of the floatland layer.\n"
@@ -2272,6 +2378,11 @@ msgid ""
"Value = 2.0 (can be higher depending on 'mgv7_np_floatland', always test\n"
"to be sure) creates a solid floatland layer."
msgstr ""
+"Justerar tätheten hos floatlandslagret.\n"
+"Öka värdet för att öka tätheten. Kan vara positiv eller negativ.\n"
+"Värde = 0.0: 50% av volymen är floatland.\n"
+"Värde = 2.0 (kan vara högre beroende på 'mgv7_np_floatland', testa alltid\n"
+"för att vara säker) skapar ett fast floatlandslager."
#: src/settings_translation_file.cpp
msgid "Advanced"
@@ -2285,6 +2396,12 @@ msgid ""
"This only has significant effect on daylight and artificial\n"
"light, it has very little effect on natural night light."
msgstr ""
+"Ändrar ljuskurvan genom att tillämpa 'gammakorrigering' på den.\n"
+"Högre värden leder till att de mellersta och lägre ljusnivåerna blir "
+"ljusare.\n"
+"Värdet '1.0' lämnar ljuskurvan oförändrad. Detta har endast betydande\n"
+"effekt på dagsljus och konstgjort ljus, det har väldigt liten effekt på\n"
+"naturligt nattljus."
#: src/settings_translation_file.cpp
msgid "Always fly and fast"
@@ -2296,12 +2413,11 @@ msgstr "Ambient ocklusion gamma"
#: src/settings_translation_file.cpp
msgid "Amount of messages a player may send per 10 seconds."
-msgstr ""
+msgstr "Antal meddelanden en spelare får skicka per 10 sekunder."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Amplifies the valleys."
-msgstr "Amplifiera dalgångar"
+msgstr "Amplifierar dalgångarna."
#: src/settings_translation_file.cpp
msgid "Anisotropic filtering"
@@ -2312,17 +2428,16 @@ msgid "Announce server"
msgstr "Offentliggör server"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Announce to this serverlist."
-msgstr "Offentliggör server"
+msgstr "Annonsera till serverlistan."
#: src/settings_translation_file.cpp
msgid "Append item name"
-msgstr ""
+msgstr "Infoga objektnamn"
#: src/settings_translation_file.cpp
msgid "Append item name to tooltip."
-msgstr ""
+msgstr "Infoga objektnamn till verktygstips."
#: src/settings_translation_file.cpp
msgid "Apple trees noise"
@@ -2330,20 +2445,21 @@ msgstr "Äppelträdlojud"
#: src/settings_translation_file.cpp
msgid "Arm inertia"
-msgstr ""
+msgstr "Armtröghet"
#: src/settings_translation_file.cpp
msgid ""
"Arm inertia, gives a more realistic movement of\n"
"the arm when the camera moves."
msgstr ""
+"Armtröghet, ger mer realistisk rörelse av armen\n"
+"när kameran förflyttar sig."
#: src/settings_translation_file.cpp
msgid "Ask to reconnect after crash"
msgstr "Förfråga att återkoppla efter krash"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"At this distance the server will aggressively optimize which blocks are sent "
"to\n"
@@ -2357,27 +2473,28 @@ msgid ""
"optimization.\n"
"Stated in mapblocks (16 nodes)."
msgstr ""
-"Vid detta avstånd kommer servern att aggressivt omtimera vilka block som "
-"skickas till klienterna.\n"
+"Vid detta avstånd kommer servern att aggressivt optimera vilka block som "
+"skickas till\n"
+"klienterna.\n"
"Små värden kan potentiellt förbättra prestandan avsevärt, på bekostnaden av "
-"synliga renderingsglitchar.\n"
-"(vissa block kommer inte att renderas under vatten och i grottor, ibland "
-"även på land)\n"
+"synliga\n"
+"renderingsglitchar (vissa block kommer inte att renderas under vatten och i "
+"grottor,\n"
+"ibland även på land).\n"
"Sätts detta till ett värde större än max_block_send_distance inaktiveras "
-"denna optimering.\n"
-"Angiven i mapblocks (16 noder)"
+"denna\n"
+"optimering.\n"
+"Angiven i mapblocks (16 noder)."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Automatic forward key"
-msgstr "Tangent för filmiskt länge"
+msgstr "Automatisk framåtknapp"
#: src/settings_translation_file.cpp
msgid "Automatically jump up single-node obstacles."
-msgstr ""
+msgstr "Hoppa automatiskt upp över enstaka noder hinder."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Automatically report to the serverlist."
msgstr "Rapportera automatiskt till serverlistan."
@@ -2387,7 +2504,15 @@ msgstr "Spara fönsterstorlek automatiskt"
#: src/settings_translation_file.cpp
msgid "Autoscaling mode"
-msgstr ""
+msgstr "Automatiskt skalningsläge"
+
+#: src/settings_translation_file.cpp
+msgid "Aux1 key"
+msgstr "Aux1-knappen"
+
+#: src/settings_translation_file.cpp
+msgid "Aux1 key for climbing/descending"
+msgstr "Aux1-knappen för klättring/sjunkning"
#: src/settings_translation_file.cpp
msgid "Backward key"
@@ -2395,21 +2520,19 @@ msgstr "Bakåttangent"
#: src/settings_translation_file.cpp
msgid "Base ground level"
-msgstr ""
+msgstr "Grundnivå"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Base terrain height."
-msgstr "Bas för terränghöjd"
+msgstr "Bas för terränghöjd."
#: src/settings_translation_file.cpp
msgid "Basic"
msgstr "Grundläggande"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Basic privileges"
-msgstr "Grundläggande Privilegier"
+msgstr "Grundläggande privilegier"
#: src/settings_translation_file.cpp
msgid "Beach noise"
@@ -2436,28 +2559,24 @@ msgid "Biome noise"
msgstr "Biotopoljud"
#: src/settings_translation_file.cpp
-msgid "Bits per pixel (aka color depth) in fullscreen mode."
-msgstr "Bits per pixel (dvs färgdjup) i fullskärmsläge."
-
-#: src/settings_translation_file.cpp
msgid "Block send optimize distance"
-msgstr ""
+msgstr "Distans för optimering av blockskickning"
#: src/settings_translation_file.cpp
msgid "Bold and italic font path"
-msgstr ""
+msgstr "Fet och kursiv typsnittssökväg"
#: src/settings_translation_file.cpp
msgid "Bold and italic monospace font path"
-msgstr ""
+msgstr "Fet och kursiv monospace-typsnittssökväg"
#: src/settings_translation_file.cpp
msgid "Bold font path"
-msgstr ""
+msgstr "Fet typsnittssökväg"
#: src/settings_translation_file.cpp
msgid "Bold monospace font path"
-msgstr ""
+msgstr "Fet monospace-typsnittssökväg"
#: src/settings_translation_file.cpp
msgid "Build inside player"
@@ -2474,6 +2593,11 @@ msgid ""
"Increasing can reduce artifacting on weaker GPUs.\n"
"0.1 = Default, 0.25 = Good value for weaker tablets."
msgstr ""
+"Kameraavståndet 'nära urklippsplan' i noder, mellan 0 och 0.25\n"
+"Fungerar bara på GLES-plattformar. De flesta användare behöver inte ändra "
+"detta.\n"
+"Ökning kan minska artefakter på svagare GPU:er.\n"
+"0.1 = Standard, 0.25 = Bra värde för svagare tabletter."
#: src/settings_translation_file.cpp
msgid "Camera smoothing"
@@ -2528,55 +2652,60 @@ msgid "Cavern threshold"
msgstr "Grottröskel"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Cavern upper limit"
-msgstr "Grottbegränsning"
+msgstr "Övre grottbegränsning"
#: src/settings_translation_file.cpp
msgid ""
"Center of light curve boost range.\n"
"Where 0.0 is minimum light level, 1.0 is maximum light level."
msgstr ""
+"Center för ljuskurvans förstärkningsområde.\n"
+"0.0 är minsta ljusnivå, 1.0 är högsta ljusnivå."
+
+#: src/settings_translation_file.cpp
+msgid "Chat command time message threshold"
+msgstr "Chattkommando tidströskel"
+
+#: src/settings_translation_file.cpp
+msgid "Chat commands"
+msgstr "Chattkommandon"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Chat font size"
-msgstr "Chunkstorlek"
+msgstr "Chattens typsnittsstorlek"
#: src/settings_translation_file.cpp
msgid "Chat key"
msgstr "Chattangent"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Chat log level"
-msgstr "Nivå av debuglogg"
+msgstr "Chattens loggnivå"
#: src/settings_translation_file.cpp
msgid "Chat message count limit"
-msgstr ""
+msgstr "Gräns för antalet chattmeddelanden"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Chat message format"
-msgstr "Krashmeddelande"
+msgstr "Chattmeddelandeformat"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Chat message kick threshold"
-msgstr "Oljudströskel för öken"
+msgstr "Chattmeddelandens sparkningströskel"
#: src/settings_translation_file.cpp
msgid "Chat message max length"
-msgstr ""
+msgstr "Högsta längd för chattmeddelande"
#: src/settings_translation_file.cpp
msgid "Chat toggle key"
msgstr "Chattangent Av/PÃ¥"
#: src/settings_translation_file.cpp
-msgid "Chatcommands"
-msgstr "Chattkommandon"
+msgid "Chat weblinks"
+msgstr "Weblänkar i chatt"
#: src/settings_translation_file.cpp
msgid "Chunk size"
@@ -2595,6 +2724,14 @@ msgid "Clean transparent textures"
msgstr "Rena transparenta texturer"
#: src/settings_translation_file.cpp
+msgid ""
+"Clickable weblinks (middle-click or Ctrl+left-click) enabled in chat console "
+"output."
+msgstr ""
+"Klickbara weblänkar (mellanklicka eller Ctrl+vänsterklicka) aktiverad i "
+"chattkonsolens utdata."
+
+#: src/settings_translation_file.cpp
msgid "Client"
msgstr "Klient"
@@ -2607,13 +2744,12 @@ msgid "Client modding"
msgstr "Klientmoddande"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Client side modding restrictions"
-msgstr "Klientmoddande"
+msgstr "Begränsningar för klientmoddning"
#: src/settings_translation_file.cpp
msgid "Client side node lookup range restriction"
-msgstr ""
+msgstr "Begränsing av klientsidig nodsökningsområde"
#: src/settings_translation_file.cpp
msgid "Climbing speed"
@@ -2640,6 +2776,10 @@ msgid "Colored fog"
msgstr "Färgad dimma"
#: src/settings_translation_file.cpp
+msgid "Colored shadows"
+msgstr "Färgad dimma"
+
+#: src/settings_translation_file.cpp
msgid ""
"Comma-separated list of flags to hide in the content repository.\n"
"\"nonfree\" can be used to hide packages which do not qualify as 'free "
@@ -2649,6 +2789,13 @@ msgid ""
"These flags are independent from Minetest versions,\n"
"so see a full list at https://content.minetest.net/help/content_flags/"
msgstr ""
+"Kommaseparerad lista av flaggar som ska döljas i innehållsdatabasen.\n"
+"\"nonfree\" kan användas för att gömma paket som inte kvalifieras som 'fri "
+"programvara',\n"
+"per Free Software Foundations definition.\n"
+"Du kan även specifiera innehållsvarningar.\n"
+"Dessa flaggor är oberoende från Minetest-versioner,\n"
+"så en full lista finns på https://content.minetest.net/help/content_flags/"
#: src/settings_translation_file.cpp
msgid ""
@@ -2673,6 +2820,30 @@ msgid "Command key"
msgstr "Kommandotangent"
#: src/settings_translation_file.cpp
+msgid ""
+"Compression level to use when saving mapblocks to disk.\n"
+"-1 - use default compression level\n"
+"0 - least compression, fastest\n"
+"9 - best compression, slowest"
+msgstr ""
+"Komprimeringsnivå att använda när mappblock sparas till disk.\n"
+"-1 - använd standardnivå\n"
+"0 - minst komprimering, snabbast\n"
+"9 - bäst komprimering, långsammast"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Compression level to use when sending mapblocks to the client.\n"
+"-1 - use default compression level\n"
+"0 - least compression, fastest\n"
+"9 - best compression, slowest"
+msgstr ""
+"Komprimeringsnivå att använda när mappblock skickas till klienten.\n"
+"-1 - använd standardnivå\n"
+"0 - minst komprimering, snabbast\n"
+"9 - bäst komprimering, långsammast"
+
+#: src/settings_translation_file.cpp
msgid "Connect glass"
msgstr "Sammankoppla glas"
@@ -2698,16 +2869,15 @@ msgstr "Konsolhöjd"
#: src/settings_translation_file.cpp
msgid "ContentDB Flag Blacklist"
-msgstr ""
+msgstr "ContentDB Flaggsvartlista"
#: src/settings_translation_file.cpp
msgid "ContentDB Max Concurrent Downloads"
-msgstr ""
+msgstr "ContentDB Högsta Parallella Nedladdningar"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "ContentDB URL"
-msgstr "Fortsätt"
+msgstr "ContentDB URL"
#: src/settings_translation_file.cpp
msgid "Continuous forward"
@@ -2718,25 +2888,28 @@ msgid ""
"Continuous forward movement, toggled by autoforward key.\n"
"Press the autoforward key again or the backwards movement to disable."
msgstr ""
+"Kontinuerlig framåtgående rörelse, växlas med hjälp av autoforward-"
+"tagenten.\n"
+"Tryck på autoforward-knappen igen eller på bakåtknappen för att inaktivera."
#: src/settings_translation_file.cpp
msgid "Controls"
msgstr "Kontrollerar"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Controls length of day/night cycle.\n"
"Examples:\n"
"72 = 20min, 360 = 4min, 1 = 24hour, 0 = day/night/whatever stays unchanged."
msgstr ""
-"Kontrollerar längden av cyklerna för dag/natt\n"
-"Exempel: 72 = 20min, 360 = 4min, 1 = 24timme, 0 = dag/natt/whatever förblir "
+"Kontrollerar längden av cyklerna för dag/natt.\n"
+"Exempel:\n"
+"72 = 20min, 360 = 4min, 1 = 24timme, 0 = dag/natt/någonting förblir "
"oförändrat."
#: src/settings_translation_file.cpp
msgid "Controls sinking speed in liquid."
-msgstr ""
+msgstr "Styr sjunkhastigheten i vätska."
#: src/settings_translation_file.cpp
msgid "Controls steepness/depth of lake depressions."
@@ -2752,6 +2925,9 @@ msgid ""
"Value >= 10.0 completely disables generation of tunnels and avoids the\n"
"intensive noise calculations."
msgstr ""
+"Kontrollerar tunnlarnas bredd, ett mindre värde ger bredare tunnlar.\n"
+"Värde >= 10.0 inaktiverar helt generering av tunnlar och undviker\n"
+"intensiva brusberäkningar."
#: src/settings_translation_file.cpp
msgid "Crash message"
@@ -2766,11 +2942,12 @@ msgid "Crosshair alpha"
msgstr "HÃ¥rkorsalpha"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Crosshair alpha (opaqueness, between 0 and 255).\n"
-"Also controls the object crosshair color"
-msgstr "HÃ¥rkorsalpha (ogenomskinlighet, mellan 0 och 255)."
+"This also applies to the object crosshair."
+msgstr ""
+"HÃ¥rkorsalpha (ogenomskinlighet, mellan 0 och 255).\n"
+"Kontrollerar även objektets hårkorsfärg."
#: src/settings_translation_file.cpp
msgid "Crosshair color"
@@ -2781,6 +2958,8 @@ msgid ""
"Crosshair color (R,G,B).\n"
"Also controls the object crosshair color"
msgstr ""
+"Hårkorsfärg (R,G,B).\n"
+"Styr även hårkorsets färg på objektet"
#: src/settings_translation_file.cpp
msgid "DPI"
@@ -2795,9 +2974,8 @@ msgid "Debug info toggle key"
msgstr "Av/På tangent för debuginformation"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Debug log file size threshold"
-msgstr "Oljudströskel för öken"
+msgstr "Felsökningslogg storlekströskel"
#: src/settings_translation_file.cpp
msgid "Debug log level"
@@ -2809,7 +2987,7 @@ msgstr "Tangent för volymsänkning"
#: src/settings_translation_file.cpp
msgid "Decrease this to increase liquid resistance to movement."
-msgstr ""
+msgstr "Minska detta för att öka vätskans motstånd mot rörelser."
#: src/settings_translation_file.cpp
msgid "Dedicated server step"
@@ -2844,17 +3022,19 @@ msgid "Default report format"
msgstr "Standardformat för rapporter"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Default stack size"
-msgstr "Standardspel"
+msgstr "Standardstapelstorlekar"
#: src/settings_translation_file.cpp
msgid ""
-"Default timeout for cURL, stated in milliseconds.\n"
-"Only has an effect if compiled with cURL."
+"Define shadow filtering quality.\n"
+"This simulates the soft shadows effect by applying a PCF or Poisson disk\n"
+"but also uses more resources."
msgstr ""
-"Standardtimeout för cURL, i millisekunder.\n"
-"Har bara en effekt om kompilerat med cURL."
+"Definiera kvaliteten på skuggfiltrering.\n"
+"Detta simulerar den mjuka skuggeffekten genom att tillämpa en PCF- eller "
+"Poisson-skiva\n"
+"men använder också mer resurser."
#: src/settings_translation_file.cpp
msgid "Defines areas where trees have apples."
@@ -2865,16 +3045,12 @@ msgid "Defines areas with sandy beaches."
msgstr "Definierar områden med sandstränder."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Defines distribution of higher terrain and steepness of cliffs."
-msgstr ""
-"Definierar områden för högre (klipptopp-)terräng och påverkar sluttningen av "
-"klippor."
+msgstr "Definierar distribuering för högre terräng och sluttningen av klippor."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Defines distribution of higher terrain."
-msgstr "Definierar områden för 'terrain_higher' (klipptoppsteräng)."
+msgstr "Definierar områden för högre terräng."
#: src/settings_translation_file.cpp
msgid "Defines full size of caverns, smaller values create larger caverns."
@@ -2890,14 +3066,12 @@ msgid "Defines location and terrain of optional hills and lakes."
msgstr "Definierar plats och terräng för valfria kullar och sjöar."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Defines the base ground level."
-msgstr "Definierar trädområden och trädtäthet."
+msgstr "Definierar basnivån."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Defines the depth of the river channel."
-msgstr "Definierar trädområden och trädtäthet."
+msgstr "Definierar djupet av älvkanalen."
#: src/settings_translation_file.cpp
msgid "Defines the maximal player transfer distance in blocks (0 = unlimited)."
@@ -2905,14 +3079,12 @@ msgstr ""
"Definierar maximal distans för spelarförflyttning i block (0 = oändligt)."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Defines the width of the river channel."
-msgstr "Definierar strukturen för storskaliga älvkanaler."
+msgstr "Definierar bredden för älvkanaler."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Defines the width of the river valley."
-msgstr "Definierar områden där träd har äpplen."
+msgstr "Definierar bredden för floddalar."
#: src/settings_translation_file.cpp
msgid "Defines tree areas and tree density."
@@ -2941,9 +3113,8 @@ msgid "Deprecated Lua API handling"
msgstr "Obruklig Lua API hantering"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Depth below which you'll find giant caverns."
-msgstr "Djup inunder du kan hitta stora grottor."
+msgstr "Djup neråt där du kan hitta enorma grottor."
#: src/settings_translation_file.cpp
msgid "Depth below which you'll find large caves."
@@ -2961,13 +3132,12 @@ msgid "Desert noise threshold"
msgstr "Oljudströskel för öken"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Deserts occur when np_biome exceeds this value.\n"
"When the 'snowbiomes' flag is enabled, this is ignored."
msgstr ""
-"Öknar förekommer när np_biome överskridet detta värde.\n"
-"När det nya biotopsystemet aktiveras så ignoreras detta."
+"Öknar förekommer när np_biome överskrider detta värde.\n"
+"Detta ignoreras när 'snowbiomes' flaggen är aktiverad."
#: src/settings_translation_file.cpp
msgid "Desynchronize block animation"
@@ -2975,7 +3145,7 @@ msgstr "Desynkronisera blockanimation"
#: src/settings_translation_file.cpp
msgid "Dig key"
-msgstr ""
+msgstr "Gräv-knapp"
#: src/settings_translation_file.cpp
msgid "Digging particles"
@@ -2990,93 +3160,122 @@ msgid "Disallow empty passwords"
msgstr "Tillåt inte tomma lösenord"
#: src/settings_translation_file.cpp
+msgid "Display Density Scaling Factor"
+msgstr "Skalningsfaktor för displaytäthet"
+
+#: src/settings_translation_file.cpp
msgid "Domain name of server, to be displayed in the serverlist."
msgstr "Domännamn för server, att visas i serverlistan."
#: src/settings_translation_file.cpp
msgid "Double tap jump for fly"
-msgstr ""
+msgstr "Dubbeltryck på hoppknapp för att flyga"
#: src/settings_translation_file.cpp
msgid "Double-tapping the jump key toggles fly mode."
-msgstr ""
+msgstr "Om du trycker på hoppknappen aktiveras flygläge."
#: src/settings_translation_file.cpp
msgid "Drop item key"
-msgstr ""
+msgstr "Släpp objekt-tagent"
#: src/settings_translation_file.cpp
msgid "Dump the mapgen debug information."
-msgstr ""
+msgstr "Dumpa felsökningsinformation för mapgen."
#: src/settings_translation_file.cpp
msgid "Dungeon maximum Y"
-msgstr ""
+msgstr "Maximalt Y för fängelsehålor"
#: src/settings_translation_file.cpp
msgid "Dungeon minimum Y"
-msgstr ""
+msgstr "Minimalt Y för fängelsehålor"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Dungeon noise"
-msgstr "Grottoljud"
+msgstr "Grottbrus"
#: src/settings_translation_file.cpp
msgid ""
"Enable IPv6 support (for both client and server).\n"
"Required for IPv6 connections to work at all."
msgstr ""
+"Aktivera IPv6-stöd (för både klient och server).\n"
+"Krävs för att IPv6-anslutningar ska fungera."
#: src/settings_translation_file.cpp
msgid ""
"Enable Lua modding support on client.\n"
"This support is experimental and API can change."
msgstr ""
+"Aktivera stöd för Lua-modifiering på klienten.\n"
+"Detta är experimentellt och API:et kan ändras."
#: src/settings_translation_file.cpp
-msgid "Enable console window"
+msgid ""
+"Enable Poisson disk filtering.\n"
+"On true uses Poisson disk to make \"soft shadows\". Otherwise uses PCF "
+"filtering."
msgstr ""
+"Aktivera Poisson-diskfiltrering.\n"
+"När aktiverad används Poisson-disk för att göra \"mjuka skuggor\". Annars "
+"används PCF-filtrering."
#: src/settings_translation_file.cpp
-msgid "Enable creative mode for all players"
+msgid ""
+"Enable colored shadows.\n"
+"On true translucent nodes cast colored shadows. This is expensive."
msgstr ""
+"Aktivera färgade skuggor.\n"
+"När aktiverad kastar genomskinliga noder färgade skuggor. Detta är intensivt."
+
+#: src/settings_translation_file.cpp
+msgid "Enable console window"
+msgstr "Aktivera konsollfönster"
+
+#: src/settings_translation_file.cpp
+msgid "Enable creative mode for all players"
+msgstr "Aktivera kreativt läge för alla spelare"
#: src/settings_translation_file.cpp
msgid "Enable joysticks"
-msgstr ""
+msgstr "Aktivera joysticks"
#: src/settings_translation_file.cpp
msgid "Enable mod channels support."
-msgstr ""
+msgstr "Aktivera stöd för mod-kanaler."
#: src/settings_translation_file.cpp
msgid "Enable mod security"
-msgstr ""
+msgstr "Aktivera modsäkerhet"
#: src/settings_translation_file.cpp
msgid "Enable players getting damage and dying."
-msgstr ""
+msgstr "Gör det möjligt för spelare att skadas och dö."
#: src/settings_translation_file.cpp
msgid "Enable random user input (only used for testing)."
-msgstr ""
+msgstr "Aktivera slumpmässig användarinmatning (används endast för testning)."
#: src/settings_translation_file.cpp
msgid "Enable register confirmation"
-msgstr ""
+msgstr "Aktivera registreringsbekräftelse"
#: src/settings_translation_file.cpp
msgid ""
"Enable register confirmation when connecting to server.\n"
"If disabled, new account will be registered automatically."
msgstr ""
+"Aktivera bekräftelse av registrering när du ansluter till servern.\n"
+"När inaktiverad registreras ett nytt konto automatiskt."
#: src/settings_translation_file.cpp
msgid ""
"Enable smooth lighting with simple ambient occlusion.\n"
"Disable for speed or for different looks."
msgstr ""
+"Möjliggör mjuk belysning med enkel omgivande ocklusion.\n"
+"Inaktivera för prestanda eller för ett annat utseende."
#: src/settings_translation_file.cpp
msgid ""
@@ -3086,6 +3285,10 @@ msgid ""
"to new servers, but they may not support all new features that you are "
"expecting."
msgstr ""
+"Aktivera för att hindra gamla klienter från att ansluta.\n"
+"Äldre klienter är kompatibla i och med att de inte krashar när de ansluter\n"
+"till nya servrar, men de kanske inte stöder alla nya funktioner du förväntar "
+"dig."
#: src/settings_translation_file.cpp
msgid ""
@@ -3094,12 +3297,18 @@ msgid ""
"textures)\n"
"when connecting to the server."
msgstr ""
+"Aktivera användning av fjärrmedieserver (om tillhandahålld av servern).\n"
+"Fjärrservrar är ett betydligt snabbare sätt att hämta media (t.ex. "
+"texturer)\n"
+"när du ansluter till servern."
#: src/settings_translation_file.cpp
msgid ""
"Enable vertex buffer objects.\n"
"This should greatly improve graphics performance."
msgstr ""
+"Aktivera vertexbuffertobjekt.\n"
+"Detta bör avsevärt förbättra grafikprestandan."
#: src/settings_translation_file.cpp
msgid ""
@@ -3113,6 +3322,9 @@ msgid ""
"Ignored if bind_address is set.\n"
"Needs enable_ipv6 to be enabled."
msgstr ""
+"Aktivera/avaktivera en IPv6-server.\n"
+"Ignoreras om bind_address är angedd.\n"
+"Kräver att enable_ipv6 är aktiverat."
#: src/settings_translation_file.cpp
msgid ""
@@ -3121,6 +3333,10 @@ msgid ""
"appearance of high dynamic range images. Mid-range contrast is slightly\n"
"enhanced, highlights and shadows are gradually compressed."
msgstr ""
+"Aktiverar Hable's 'Uncharted 2' filmisk tonmappning.\n"
+"Simulerar tonkurvan hos fotografisk film och hur den liknar utseendet\n"
+"på bilder med högt dynamiskt omfång. Kontrasten i mitten av intervallet\n"
+"förstärks något, ljuspunkter och skuggor komprimeras gradvis."
#: src/settings_translation_file.cpp
msgid "Enables animation of inventory items."
@@ -3128,11 +3344,11 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Enables caching of facedir rotated meshes."
-msgstr ""
+msgstr "Aktiverar cachning av facedirroterade mesher."
#: src/settings_translation_file.cpp
msgid "Enables minimap."
-msgstr ""
+msgstr "Aktiverar minimap."
#: src/settings_translation_file.cpp
msgid ""
@@ -3141,14 +3357,24 @@ msgid ""
"sound controls will be non-functional.\n"
"Changing this setting requires a restart."
msgstr ""
+"Aktiverar ljudsystemet.\n"
+"När inaktiverat inaktiveras alla ljud överallt och spelets\n"
+"ljudkontroller kommer inte fungera.\n"
+"Omstart krävs för att ändra den här inställningen."
#: src/settings_translation_file.cpp
-msgid "Engine profiling data print interval"
+msgid ""
+"Enables tradeoffs that reduce CPU load or increase rendering performance\n"
+"at the expense of minor visual glitches that do not impact game playability."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Engine profiling data print interval"
+msgstr "Intervall för utskrift av motorprofileringsdata"
+
+#: src/settings_translation_file.cpp
msgid "Entity methods"
-msgstr ""
+msgstr "Entitetsmetoder"
#: src/settings_translation_file.cpp
msgid ""
@@ -3162,65 +3388,55 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "FPS when unfocused or paused"
-msgstr ""
+msgstr "FPS när ofokuserad eller pausad"
#: src/settings_translation_file.cpp
msgid "FSAA"
-msgstr ""
+msgstr "FSAA"
#: src/settings_translation_file.cpp
msgid "Factor noise"
-msgstr ""
+msgstr "Faktorbrus"
#: src/settings_translation_file.cpp
msgid "Fall bobbing factor"
-msgstr ""
+msgstr "Fallets bobbingfaktor"
#: src/settings_translation_file.cpp
msgid "Fallback font path"
-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 ""
+msgstr "Sökväg för reservtypsnitt"
#: src/settings_translation_file.cpp
msgid "Fast key"
-msgstr ""
+msgstr "Snabbknapp"
#: src/settings_translation_file.cpp
msgid "Fast mode acceleration"
-msgstr ""
+msgstr "Acceleration i snabbt läge"
#: src/settings_translation_file.cpp
msgid "Fast mode speed"
-msgstr ""
+msgstr "Hastighet i snabbt läge"
#: src/settings_translation_file.cpp
msgid "Fast movement"
-msgstr ""
+msgstr "Snabb rörelse"
#: src/settings_translation_file.cpp
msgid ""
-"Fast movement (via the \"special\" key).\n"
+"Fast movement (via the \"Aux1\" key).\n"
"This requires the \"fast\" privilege on the server."
msgstr ""
+"Snabb rörelse (via \"Aux1\"-tagenten).\n"
+"Detta kräver \"snabb\"-privilegiet på servern."
#: src/settings_translation_file.cpp
msgid "Field of view"
-msgstr ""
+msgstr "Synfält"
#: src/settings_translation_file.cpp
msgid "Field of view in degrees."
-msgstr ""
+msgstr "Synfält i grader."
#: src/settings_translation_file.cpp
msgid ""
@@ -3228,50 +3444,53 @@ msgid ""
"the\n"
"Multiplayer Tab."
msgstr ""
+"Filen i client/serverlist/ som innehåller dina favoritservrar som visas i\n"
+"fliken Anslut Spel."
#: src/settings_translation_file.cpp
msgid "Filler depth"
-msgstr ""
+msgstr "Fyllnadsdjup"
#: src/settings_translation_file.cpp
msgid "Filler depth noise"
-msgstr ""
+msgstr "Fyllnadsdjupbrus"
#: src/settings_translation_file.cpp
msgid "Filmic tone mapping"
-msgstr ""
+msgstr "Filmisk tonmappning"
#: 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."
+"which PNG optimizers usually discard, often resulting in dark or\n"
+"light edges to transparent textures. Apply a filter to clean that up\n"
+"at texture load time. This is automatically enabled if mipmapping is enabled."
msgstr ""
#: src/settings_translation_file.cpp
msgid "Filtering"
-msgstr ""
+msgstr "Filtrering"
#: src/settings_translation_file.cpp
msgid "First of 4 2D noises that together define hill/mountain range height."
msgstr ""
+"Första av 4 2D-brus som tillsammans definierar höjden på kullar och berg."
#: src/settings_translation_file.cpp
msgid "First of two 3D noises that together define tunnels."
-msgstr ""
+msgstr "Första av två 3D-brus som tillsammans definierar tunnlar."
#: src/settings_translation_file.cpp
msgid "Fixed map seed"
-msgstr ""
+msgstr "Fastställd kartseed"
#: src/settings_translation_file.cpp
msgid "Fixed virtual joystick"
-msgstr ""
+msgstr "Fast virtuell joystick"
#: src/settings_translation_file.cpp
msgid "Floatland density"
-msgstr ""
+msgstr "Floatlanddensitet"
#: src/settings_translation_file.cpp
msgid "Floatland maximum Y"
@@ -3282,9 +3501,8 @@ msgid "Floatland minimum Y"
msgstr ""
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Floatland noise"
-msgstr "Grottoljud"
+msgstr "Floatlandbrus"
#: src/settings_translation_file.cpp
msgid "Floatland taper exponent"
@@ -3300,55 +3518,57 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Fly key"
-msgstr ""
+msgstr "Flygknapp"
#: src/settings_translation_file.cpp
msgid "Flying"
-msgstr ""
+msgstr "Flyga"
#: src/settings_translation_file.cpp
msgid "Fog"
-msgstr ""
+msgstr "Dimma"
#: src/settings_translation_file.cpp
msgid "Fog start"
-msgstr ""
+msgstr "Start av dimma"
#: src/settings_translation_file.cpp
msgid "Fog toggle key"
-msgstr ""
+msgstr "Växlingstagent för dimma"
#: src/settings_translation_file.cpp
msgid "Font bold by default"
-msgstr ""
+msgstr "Fetstilat typsnitt som standard"
#: src/settings_translation_file.cpp
msgid "Font italic by default"
-msgstr ""
+msgstr "Kursivt typsnitt som standard"
#: src/settings_translation_file.cpp
msgid "Font shadow"
-msgstr ""
+msgstr "Typsnittsskugga"
#: src/settings_translation_file.cpp
msgid "Font shadow alpha"
-msgstr ""
+msgstr "Genomskinlighet för typsnittsskugga"
#: src/settings_translation_file.cpp
msgid "Font size"
-msgstr ""
+msgstr "Typsnittsstorlek"
#: src/settings_translation_file.cpp
-msgid "Font size of the default font in point (pt)."
+msgid "Font size divisible by"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Font size of the fallback font in point (pt)."
-msgstr ""
+#, fuzzy
+msgid "Font size of the default font where 1 unit = 1 pixel at 96 DPI"
+msgstr "Storleken för standardtypsnittet i punkter (pt)."
#: src/settings_translation_file.cpp
-msgid "Font size of the monospace font in point (pt)."
-msgstr ""
+#, fuzzy
+msgid "Font size of the monospace font where 1 unit = 1 pixel at 96 DPI"
+msgstr "Storleken för monospacetypsnittet i punkter (pt)."
#: src/settings_translation_file.cpp
msgid ""
@@ -3358,6 +3578,17 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"For pixel-style fonts that do not scale well, this ensures that font sizes "
+"used\n"
+"with this font will always be divisible by this value, in pixels. For "
+"instance,\n"
+"a pixel font 16 pixels tall should have this set to 16, so it will only ever "
+"be\n"
+"sized 16, 32, 48, etc., so a mod requesting a size of 25 will get 32."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Format of player chat messages. The following strings are valid "
"placeholders:\n"
"@name, @message, @timestamp (optional)"
@@ -3365,70 +3596,69 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Format of screenshots."
-msgstr ""
+msgstr "Format för skärmdumpar."
#: src/settings_translation_file.cpp
msgid "Formspec Default Background Color"
-msgstr ""
+msgstr "Formspec Standardbakgrundsfärg"
#: src/settings_translation_file.cpp
msgid "Formspec Default Background Opacity"
-msgstr ""
+msgstr "Formspec Standardbakgrundsopacitet"
#: src/settings_translation_file.cpp
msgid "Formspec Full-Screen Background Color"
-msgstr ""
+msgstr "Formspec Standardbakgrundsfärg för fullskärm"
#: src/settings_translation_file.cpp
msgid "Formspec Full-Screen Background Opacity"
-msgstr ""
+msgstr "Formspec Standardbakgrundsopacitet för fullskärm"
#: src/settings_translation_file.cpp
msgid "Formspec default background color (R,G,B)."
-msgstr ""
+msgstr "Formspec Standardbakgrundsfärg (R,G,B)."
#: src/settings_translation_file.cpp
msgid "Formspec default background opacity (between 0 and 255)."
-msgstr ""
+msgstr "Formspec standardbakgrundsopacitet (mellan 0 och 255)."
#: src/settings_translation_file.cpp
msgid "Formspec full-screen background color (R,G,B)."
-msgstr ""
+msgstr "Formspec bakgrundsfärg för fullskärm (R,G,B)."
#: src/settings_translation_file.cpp
msgid "Formspec full-screen background opacity (between 0 and 255)."
-msgstr ""
+msgstr "Formspec bakgrundsopacitet för fullskärm (mellan 0 och 255)."
#: src/settings_translation_file.cpp
msgid "Forward key"
-msgstr ""
+msgstr "Framåtknapp"
#: src/settings_translation_file.cpp
msgid "Fourth of 4 2D noises that together define hill/mountain range height."
msgstr ""
+"Fyra av 4 2D-brus som tillsammans definerar höjden för kullar och berg."
#: src/settings_translation_file.cpp
msgid "Fractal type"
-msgstr ""
+msgstr "Fraktaltyp"
#: src/settings_translation_file.cpp
msgid "Fraction of the visible distance at which fog starts to be rendered"
-msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid "FreeType fonts"
-msgstr ""
+msgstr "Bråkdel av den synliga distansen som dimma börjar"
#: src/settings_translation_file.cpp
msgid ""
"From how far blocks are generated for clients, stated in mapblocks (16 "
"nodes)."
msgstr ""
+"Hur långt bort block genereras för klienter, mätt i mappblock (16 noder)."
#: src/settings_translation_file.cpp
msgid ""
"From how far blocks are sent to clients, stated in mapblocks (16 nodes)."
msgstr ""
+"Från hur långt block skickas till klienten, mätt i mappblock (16 noder)."
#: src/settings_translation_file.cpp
msgid ""
@@ -3441,37 +3671,33 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Full screen"
-msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid "Full screen BPP"
-msgstr ""
+msgstr "Fullskärm"
#: src/settings_translation_file.cpp
msgid "Fullscreen mode."
-msgstr ""
+msgstr "Fullskärmsläge."
#: src/settings_translation_file.cpp
msgid "GUI scaling"
-msgstr ""
+msgstr "Gränssnittsskalning"
#: src/settings_translation_file.cpp
msgid "GUI scaling filter"
-msgstr ""
+msgstr "Filter för Gränssnittsskalning"
#: src/settings_translation_file.cpp
msgid "GUI scaling filter txr2img"
-msgstr ""
+msgstr "Filter för Gränssnittsskalning txr2img"
#: src/settings_translation_file.cpp
msgid "Global callbacks"
-msgstr ""
+msgstr "Globala återkallelser"
#: src/settings_translation_file.cpp
msgid ""
"Global map generation attributes.\n"
"In Mapgen v6 the 'decorations' flag controls all decorations except trees\n"
-"and junglegrass, in all other mapgens this flag controls all decorations."
+"and jungle grass, in all other mapgens this flag controls all decorations."
msgstr ""
#: src/settings_translation_file.cpp
@@ -3488,32 +3714,31 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Graphics"
-msgstr ""
+msgstr "Grafik"
#: src/settings_translation_file.cpp
msgid "Gravity"
-msgstr ""
+msgstr "Gravitation"
#: src/settings_translation_file.cpp
msgid "Ground level"
-msgstr ""
+msgstr "Marknivå"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Ground noise"
-msgstr "Grottoljud"
+msgstr "Ytbrus"
#: src/settings_translation_file.cpp
msgid "HTTP mods"
-msgstr ""
+msgstr "HTTP-moddar"
#: src/settings_translation_file.cpp
msgid "HUD scale factor"
-msgstr ""
+msgstr "HUD-skalningsfaktor"
#: src/settings_translation_file.cpp
msgid "HUD toggle key"
-msgstr ""
+msgstr "HUD-växlingsknapp"
#: src/settings_translation_file.cpp
msgid ""
@@ -3534,61 +3759,60 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Heat blend noise"
-msgstr ""
+msgstr "Värmeblandingsbrus"
#: src/settings_translation_file.cpp
msgid "Heat noise"
-msgstr ""
+msgstr "Värmebrus"
#: src/settings_translation_file.cpp
-msgid "Height component of the initial window size."
-msgstr ""
+msgid ""
+"Height component of the initial window size. Ignored in fullscreen mode."
+msgstr "Höjden av den inledande fönsterstorleken. Ignorerad i fullskärmsläge."
#: src/settings_translation_file.cpp
msgid "Height noise"
-msgstr ""
+msgstr "Höjdbrus"
#: src/settings_translation_file.cpp
msgid "Height select noise"
-msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid "High-precision FPU"
-msgstr ""
+msgstr "Höjdvalbrus"
#: src/settings_translation_file.cpp
msgid "Hill steepness"
-msgstr ""
+msgstr "Kullslättning"
#: src/settings_translation_file.cpp
msgid "Hill threshold"
-msgstr ""
+msgstr "Kulltröskel"
#: src/settings_translation_file.cpp
msgid "Hilliness1 noise"
-msgstr ""
+msgstr "Kullig1 brus"
#: src/settings_translation_file.cpp
msgid "Hilliness2 noise"
-msgstr ""
+msgstr "Kullig2 brus"
#: src/settings_translation_file.cpp
msgid "Hilliness3 noise"
-msgstr ""
+msgstr "Kullig3 brus"
#: src/settings_translation_file.cpp
msgid "Hilliness4 noise"
-msgstr ""
+msgstr "Kullig4 brus"
#: src/settings_translation_file.cpp
msgid "Homepage of server, to be displayed in the serverlist."
-msgstr ""
+msgstr "Hemsida för servern, som visas i serverlistan."
#: src/settings_translation_file.cpp
msgid ""
"Horizontal acceleration in air when jumping or falling,\n"
"in nodes per second per second."
msgstr ""
+"Horisontell acceleration i luften vid hopp eller fall,\n"
+"i noder per sekund per sekund."
#: src/settings_translation_file.cpp
msgid ""
@@ -3787,8 +4011,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"If disabled, \"special\" key is used to fly fast if both fly and fast mode "
-"are\n"
+"If disabled, \"Aux1\" key is used to fly fast if both fly and fast mode are\n"
"enabled."
msgstr ""
@@ -3810,8 +4033,8 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"If enabled, \"special\" key instead of \"sneak\" key is used for climbing "
-"down and\n"
+"If enabled, \"Aux1\" key instead of \"Sneak\" key is used for climbing down "
+"and\n"
"descending."
msgstr ""
@@ -3857,6 +4080,12 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"If the execution of a chat command takes longer than this specified time in\n"
+"seconds, add the time information to the chat command message"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"If the file size of debug.txt exceeds the number of megabytes specified in\n"
"this setting when it is opened, the file is moved to debug.txt.1,\n"
"deleting an older debug.txt.1 if it exists.\n"
@@ -3902,7 +4131,7 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Instrument chatcommands on registration."
+msgid "Instrument chat commands on registration."
msgstr ""
#: src/settings_translation_file.cpp
@@ -3986,7 +4215,7 @@ msgid "Joystick button repetition interval"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Joystick deadzone"
+msgid "Joystick dead zone"
msgstr ""
#: src/settings_translation_file.cpp
@@ -4700,9 +4929,8 @@ msgid "Liquid queue purge time"
msgstr ""
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Liquid sinking"
-msgstr "Nedstigande hastighet"
+msgstr "Vätskesjunkning"
#: src/settings_translation_file.cpp
msgid "Liquid update interval in seconds."
@@ -4732,9 +4960,8 @@ msgid "Lower Y limit of dungeons."
msgstr ""
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Lower Y limit of floatlands."
-msgstr "Absolut gräns av emerge kö"
+msgstr "Nedre Y-gräns för floatlands."
#: src/settings_translation_file.cpp
msgid "Main menu script"
@@ -4746,10 +4973,6 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Makes DirectX work with LuaJIT. Disable if it causes troubles."
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Makes all liquids opaque"
msgstr ""
@@ -4821,6 +5044,10 @@ msgid "Map save interval"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Map shadows update frames"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Mapblock limit"
msgstr ""
@@ -4845,46 +5072,40 @@ msgid "Mapgen Carpathian specific flags"
msgstr ""
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Mapgen Flat"
-msgstr "Kartgenerator"
+msgstr "Mapgen Platt"
#: src/settings_translation_file.cpp
msgid "Mapgen Flat specific flags"
msgstr ""
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Mapgen Fractal"
-msgstr "Kartgenerator"
+msgstr "Mapgen Fraktal"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Mapgen Fractal specific flags"
-msgstr "Kartgenerator"
+msgstr "Specifika flaggar för fraktal"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Mapgen V5"
-msgstr "Kartgenerator"
+msgstr "Kartgenerator V5"
#: src/settings_translation_file.cpp
msgid "Mapgen V5 specific flags"
msgstr ""
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Mapgen V6"
-msgstr "Kartgenerator"
+msgstr "Kartgenerator V6"
#: src/settings_translation_file.cpp
msgid "Mapgen V6 specific flags"
msgstr ""
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Mapgen V7"
-msgstr "Kartgenerator"
+msgstr "Kartgenerator V7"
#: src/settings_translation_file.cpp
msgid "Mapgen V7 specific flags"
@@ -4935,6 +5156,10 @@ msgid "Maximum FPS when the window is not focused, or when the game is paused."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Maximum distance to render shadows."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Maximum forceloaded blocks"
msgstr ""
@@ -5040,7 +5265,15 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Maximum time in ms a file download (e.g. a mod download) may take."
+msgid ""
+"Maximum time a file download (e.g. a mod download) may take, stated in "
+"milliseconds."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum time an interactive request (e.g. server list fetch) may take, "
+"stated in milliseconds."
msgstr ""
#: src/settings_translation_file.cpp
@@ -5104,7 +5337,7 @@ msgid "Mod channels"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Modifies the size of the hudbar elements."
+msgid "Modifies the size of the HUD elements."
msgstr ""
#: src/settings_translation_file.cpp
@@ -5116,6 +5349,10 @@ msgid "Monospace font size"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Monospace font size divisible by"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Mountain height noise"
msgstr ""
@@ -5236,7 +5473,7 @@ 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"
+"This is a trade-off between SQLite transaction overhead and\n"
"memory consumption (4096=100MB, as a rule of thumb)."
msgstr ""
@@ -5255,21 +5492,18 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Opaqueness (alpha) of the shadow behind the fallback font, between 0 and 255."
-msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid ""
"Open the pause menu when the window's focus is lost. Does not pause if a "
"formspec is\n"
"open."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Optional override for chat weblink color."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid ""
-"Path of the fallback font.\n"
-"If “freetype†setting is enabled: Must be a TrueType font.\n"
-"If “freetype†setting is disabled: Must be a bitmap or XML vectors font.\n"
+"Path of the fallback font. Must be a TrueType font.\n"
"This font will be used for certain languages or if the default font is "
"unavailable."
msgstr ""
@@ -5292,17 +5526,13 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Path to the default font.\n"
-"If “freetype†setting is enabled: Must be a TrueType font.\n"
-"If “freetype†setting is disabled: Must be a bitmap or XML vectors font.\n"
+"Path to the default font. Must be a TrueType font.\n"
"The fallback font will be used if the font cannot be loaded."
msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Path to the monospace font.\n"
-"If “freetype†setting is enabled: Must be a TrueType font.\n"
-"If “freetype†setting is disabled: Must be a bitmap or XML vectors font.\n"
+"Path to the monospace font. Must be a TrueType font.\n"
"This font is used for e.g. the console and profiler screen."
msgstr ""
@@ -5323,18 +5553,16 @@ msgid "Physics"
msgstr ""
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Pitch move key"
-msgstr "Tangent för filmiskt länge"
+msgstr ""
#: src/settings_translation_file.cpp
msgid "Pitch move mode"
msgstr ""
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Place key"
-msgstr "Tangent för filmiskt länge"
+msgstr "Placeraknapp"
#: src/settings_translation_file.cpp
msgid "Place repetition interval"
@@ -5359,6 +5587,10 @@ msgid "Player versus player"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Poisson filtering"
+msgstr "Poissonfiltrering"
+
+#: src/settings_translation_file.cpp
msgid ""
"Port to connect to (UDP).\n"
"Note that the port field in the main menu overrides this setting."
@@ -5403,9 +5635,9 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"Prometheus listener address.\n"
-"If minetest is compiled with ENABLE_PROMETHEUS option enabled,\n"
+"If Minetest is compiled with ENABLE_PROMETHEUS option enabled,\n"
"enable metrics listener for Prometheus on that address.\n"
-"Metrics can be fetch on http://127.0.0.1:30000/metrics"
+"Metrics can be fetched on http://127.0.0.1:30000/metrics"
msgstr ""
#: src/settings_translation_file.cpp
@@ -5508,9 +5740,8 @@ msgid "River depth"
msgstr ""
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "River noise"
-msgstr "Grottoljud"
+msgstr "Flodbrus"
#: src/settings_translation_file.cpp
msgid "River size"
@@ -5625,7 +5856,6 @@ msgid "Selection box width"
msgstr ""
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Selects one of 18 fractal types.\n"
"1 = 4D \"Roundy\" Mandelbrot set.\n"
@@ -5647,25 +5877,25 @@ msgid ""
"17 = 4D \"Mandelbulb\" Mandelbrot set.\n"
"18 = 4D \"Mandelbulb\" Julia set."
msgstr ""
-"Val av 18 fractaler från 9 formler.\n"
-"1 = 4D \"Roundy\" mandelbrot set.\n"
-"2 = 4D \"Roundy\" julia set.\n"
-"3 = 4D \"Squarry\" mandelbrot set.\n"
-"4 = 4D \"Squarry\" julia set.\n"
-"5 = 4D \"Mandy Cousin\" mandelbrot set.\n"
-"6 = 4D \"Mandy Cousin\" julia set.\n"
-"7 = 4D \"Variation\" mandelbrot set.\n"
-"8 = 4D \"Variation\" julia set.\n"
-"9 = 3D \"Mandelbrot/Mandelbar\" mandelbrot set.\n"
-"10 = 3D \"Mandelbrot/Mandelbar\" julia set.\n"
-"11 = 3D \"Christmas Tree\" mandelbrot set.\n"
-"12 = 3D \"Christmas Tree\" julia set.\n"
-"13 = 3D \"Mandelbulb\" mandelbrot set.\n"
-"14 = 3D \"Mandelbulb\" julia set.\n"
-"15 = 3D \"Cosine Mandelbulb\" mandelbrot set.\n"
-"16 = 3D \"Cosine Mandelbulb\" julia set.\n"
-"17 = 4D \"Mandelbulb\" mandelbrot set.\n"
-"18 = 4D \"Mandelbulb\" julia set."
+"Val av 18 fraktaler.\n"
+"1 = 4D \"Roundy\" Mandelbrot set.\n"
+"2 = 4D \"Roundy\" Julia set.\n"
+"3 = 4D \"Squarry\" Mandelbrot set.\n"
+"4 = 4D \"Squarry\" Julia set.\n"
+"5 = 4D \"Mandy Cousin\" Mandelbrot set.\n"
+"6 = 4D \"Mandy Cousin\" Julia set.\n"
+"7 = 4D \"Variation\" Mandelbrot set.\n"
+"8 = 4D \"Variation\" Julia set.\n"
+"9 = 3D \"Mandelbrot/Mandelbar\" Mandelbrot set.\n"
+"10 = 3D \"Mandelbrot/Mandelbar\" Julia set.\n"
+"11 = 3D \"Christmas Tree\" Mandelbrot set.\n"
+"12 = 3D \"Christmas Tree\" Julia set.\n"
+"13 = 3D \"Mandelbulb\" Mandelbrot set.\n"
+"14 = 3D \"Mandelbulb\" Julia set.\n"
+"15 = 3D \"Cosine Mandelbulb\" Mandelbrot set.\n"
+"16 = 3D \"Cosine Mandelbulb\" Julia set.\n"
+"17 = 4D \"Mandelbulb\" Mandelbrot set.\n"
+"18 = 4D \"Mandelbulb\" Julia set."
#: src/settings_translation_file.cpp
msgid "Server / Singleplayer"
@@ -5715,6 +5945,32 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Set the shadow strength.\n"
+"Lower value means lighter shadows, higher value means darker shadows."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set the soft shadow radius size.\n"
+"Lower values mean sharper shadows, bigger values mean softer shadows.\n"
+"Minimum value: 1.0; maximum value: 10.0"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set the tilt of Sun/Moon orbit in degrees.\n"
+"Value of 0 means no tilt / vertical orbit.\n"
+"Minimum value: 0.0; maximum value: 60.0"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set to true to enable Shadow Mapping.\n"
+"Requires shaders to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Set to true to enable waving leaves.\n"
"Requires shaders to be enabled."
msgstr ""
@@ -5732,9 +5988,15 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-#, fuzzy
+msgid ""
+"Sets shadow texture quality to 32 bits.\n"
+"On false, 16 bits texture will be used.\n"
+"This can cause much more artifacts in the shadow."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Shader path"
-msgstr "Välj sökväg"
+msgstr "Shader-sökväg"
#: src/settings_translation_file.cpp
msgid ""
@@ -5745,15 +6007,29 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Shadow filter quality"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Shadow map max distance in nodes to render shadows"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Shadow map texture in 32 bits"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Shadow map texture size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid ""
"Shadow offset (in pixels) of the default font. If 0, then shadow will not be "
"drawn."
msgstr ""
#: src/settings_translation_file.cpp
-msgid ""
-"Shadow offset (in pixels) of the fallback font. If 0, then shadow will not "
-"be drawn."
+msgid "Shadow strength"
msgstr ""
#: src/settings_translation_file.cpp
@@ -5775,7 +6051,7 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Show nametag backgrounds by default"
+msgid "Show name tag backgrounds by default"
msgstr ""
#: src/settings_translation_file.cpp
@@ -5800,6 +6076,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Sky Body Orbit Tilt"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Slice w"
msgstr ""
@@ -5846,25 +6126,19 @@ msgid "Sneak key"
msgstr ""
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Sneaking speed"
-msgstr "Nedstigande hastighet"
+msgstr "Smyghastighet"
#: src/settings_translation_file.cpp
msgid "Sneaking speed, in nodes per second."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Sound"
-msgstr ""
-
-#: src/settings_translation_file.cpp
-#, fuzzy
-msgid "Special key"
-msgstr "tryck på tangent"
+msgid "Soft shadow radius"
+msgstr "Radie för mjuk skugga"
#: src/settings_translation_file.cpp
-msgid "Special key for climbing/descending"
+msgid "Sound"
msgstr ""
#: src/settings_translation_file.cpp
@@ -5884,6 +6158,14 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Spread a complete update of shadow map over given amount of frames.\n"
+"Higher values might make shadows laggy, lower values\n"
+"will consume more resources.\n"
+"Minimum value: 1; maximum value: 16"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Spread of light curve boost range.\n"
"Controls the width of the range to be boosted.\n"
"Standard deviation of the light curve boost Gaussian."
@@ -5955,9 +6237,8 @@ msgid "Terrain base noise"
msgstr ""
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Terrain height"
-msgstr "Bas för terränghöjd"
+msgstr "Terränghöjd"
#: src/settings_translation_file.cpp
msgid "Terrain higher noise"
@@ -5991,6 +6272,13 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Texture size to render the shadow map on.\n"
+"This must be a power of two.\n"
+"Bigger numbers create better shadows but it is also more expensive."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Textures on a node may be aligned either to the node or to the world.\n"
"The former mode suits better things like machines, furniture, etc., while\n"
"the latter makes stairs and microblocks fit surroundings better.\n"
@@ -6004,7 +6292,7 @@ msgid "The URL for the content repository"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "The deadzone of the joystick"
+msgid "The dead zone of the joystick"
msgstr ""
#: src/settings_translation_file.cpp
@@ -6062,7 +6350,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"The rendering back-end for Irrlicht.\n"
+"The rendering back-end.\n"
"A restart is required after changing this.\n"
"Note: On Android, stick with OGLES1 if unsure! App may fail to start "
"otherwise.\n"
@@ -6073,7 +6361,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"The sensitivity of the joystick axes for moving the\n"
-"ingame view frustum around."
+"in-game view frustum around."
msgstr ""
#: src/settings_translation_file.cpp
@@ -6163,9 +6451,12 @@ msgid "Tooltip delay"
msgstr ""
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Touch screen threshold"
-msgstr "Strandoljudströskel"
+msgstr "Tröskelvärde för pekskärm"
+
+#: src/settings_translation_file.cpp
+msgid "Tradeoffs for performance"
+msgstr ""
#: src/settings_translation_file.cpp
msgid "Trees noise"
@@ -6216,9 +6507,8 @@ msgid "Upper Y limit of dungeons."
msgstr ""
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Upper Y limit of floatlands."
-msgstr "Absolut gräns av emerge kö"
+msgstr "Övre Y-gräns för floatlands."
#: src/settings_translation_file.cpp
msgid "Use 3D cloud look instead of flat."
@@ -6238,7 +6528,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Use mip mapping to scale textures. May slightly increase performance,\n"
+"Use mipmapping to scale textures. May slightly increase performance,\n"
"especially when using a high resolution texture pack.\n"
"Gamma correct downscaling is not supported."
msgstr ""
@@ -6351,7 +6641,7 @@ msgid "Viewing range"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Virtual joystick triggers aux button"
+msgid "Virtual joystick triggers Aux1 button"
msgstr ""
#: src/settings_translation_file.cpp
@@ -6402,30 +6692,30 @@ msgid "Waving leaves"
msgstr ""
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Waving liquids"
-msgstr "Vajande Löv"
+msgstr "Vajande vätskor"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Waving liquids wave height"
-msgstr "Böljande Vatten"
+msgstr "Våghöjd för vajande vätskor"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Waving liquids wave speed"
-msgstr "Vajande Löv"
+msgstr "Våghastighet för vajande vätskor"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Waving liquids wavelength"
-msgstr "Böljande Vatten"
+msgstr "Våglängd för vajande vätskor"
#: src/settings_translation_file.cpp
msgid "Waving plants"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Weblink color"
+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"
@@ -6446,23 +6736,15 @@ msgid ""
"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.\n"
+"memory. Powers of 2 are recommended. This setting is ONLY applied if\n"
+"bilinear/trilinear/anisotropic filtering is enabled.\n"
"This is also used as the base node texture size for world-aligned\n"
"texture autoscaling."
msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Whether FreeType fonts are used, requires FreeType support to be compiled "
-"in.\n"
-"If disabled, bitmap and XML vectors fonts are used instead."
-msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid ""
-"Whether nametag backgrounds should be shown by default.\n"
+"Whether name tag backgrounds should be shown by default.\n"
"Mods may still set a background."
msgstr ""
@@ -6504,7 +6786,7 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Width component of the initial window size."
+msgid "Width component of the initial window size. Ignored in fullscreen mode."
msgstr ""
#: src/settings_translation_file.cpp
@@ -6525,9 +6807,8 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "World start time"
-msgstr "Världnamn"
+msgstr "Världsstarttid"
#: src/settings_translation_file.cpp
msgid ""
@@ -6554,9 +6835,8 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Y of upper limit of large caves."
-msgstr "Absolut gräns av emerge kö"
+msgstr "Y-nivå för högre gräns av stora grottor."
#: src/settings_translation_file.cpp
msgid "Y-distance over which caverns expand to full size."
@@ -6579,48 +6859,34 @@ msgid "Y-level of cavern upper limit."
msgstr ""
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Y-level of higher terrain that creates cliffs."
-msgstr "Y-nivå av lägre terräng och sjöbottnar."
+msgstr "Y-nivå för högre terräng som skapar klippor."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Y-level of lower terrain and seabed."
-msgstr "Y-nivå av lägre terräng och sjöbottnar."
+msgstr "Y-nivå för lägre terräng och sjöbottnar."
#: src/settings_translation_file.cpp
msgid "Y-level of seabed."
msgstr "Y-nivå av sjöbotten."
#: src/settings_translation_file.cpp
-msgid ""
-"ZLib compression level to use when saving mapblocks to disk.\n"
-"-1 - Zlib's default compression level\n"
-"0 - no compresson, fastest\n"
-"9 - best compression, slowest\n"
-"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)"
-msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid ""
-"ZLib compression level to use when sending mapblocks to the client.\n"
-"-1 - Zlib's default compression level\n"
-"0 - no compresson, fastest\n"
-"9 - best compression, slowest\n"
-"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "cURL file download timeout"
msgstr "cURL filhemladdning tidsgräns"
#: src/settings_translation_file.cpp
+msgid "cURL interactive timeout"
+msgstr "cURL-interaktivtimeout"
+
+#: src/settings_translation_file.cpp
msgid "cURL parallel limit"
msgstr "cURL parallellgräns"
-#: src/settings_translation_file.cpp
-msgid "cURL timeout"
-msgstr "cURL-timeout"
+#~ msgid "- Creative Mode: "
+#~ msgstr "- Kreativt läge: "
+
+#~ msgid "- Damage: "
+#~ msgstr "- Aktivera skada: "
#~ msgid ""
#~ "0 = parallax occlusion with slope information (faster).\n"
@@ -6629,6 +6895,9 @@ msgstr "cURL-timeout"
#~ "0 = parallax ocklusion med sluttningsinformation (snabbare).\n"
#~ "1 = reliefmappning (långsammare, noggrannare)."
+#~ msgid "Address / Port"
+#~ msgstr "Adress / Port"
+
#~ msgid ""
#~ "Adjust the gamma encoding for the light tables. Higher numbers are "
#~ "brighter.\n"
@@ -6643,6 +6912,9 @@ msgstr "cURL-timeout"
#~ msgid "Back"
#~ msgstr "Tillbaka"
+#~ msgid "Bits per pixel (aka color depth) in fullscreen mode."
+#~ msgstr "Bits per pixel (dvs färgdjup) i fullskärmsläge."
+
#~ msgid "Bump Mapping"
#~ msgstr "Stötkartläggning"
@@ -6667,9 +6939,22 @@ msgstr "cURL-timeout"
#~ msgstr ""
#~ "Kontrollerar bredd av tunnlar, mindre värden skapar bredare tunnlar."
+#~ msgid "Credits"
+#~ msgstr "Medverkande"
+
#~ msgid "Crosshair color (R,G,B)."
#~ msgstr "Hårkorsförg (R,G,B)."
+#~ msgid "Damage enabled"
+#~ msgstr "Skada aktiverat"
+
+#~ msgid ""
+#~ "Default timeout for cURL, stated in milliseconds.\n"
+#~ "Only has an effect if compiled with cURL."
+#~ msgstr ""
+#~ "Standardtimeout för cURL, i millisekunder.\n"
+#~ "Har bara en effekt om kompilerat med cURL."
+
#~ msgid ""
#~ "Defines areas of floatland smooth terrain.\n"
#~ "Smooth floatlands occur when noise > 0."
@@ -6687,6 +6972,12 @@ msgstr "cURL-timeout"
#~ msgid "Downloading and installing $1, please wait..."
#~ msgstr "Laddar ner och installerar $1, vänligen vänta..."
+#~ msgid "FreeType fonts"
+#~ msgstr "FreeType-typsnitt"
+
+#~ msgid "Install: file: \"$1\""
+#~ msgstr "Installera: fil: \"$1\""
+
#~ msgid "Main"
#~ msgstr "Huvudsaklig"
@@ -6694,6 +6985,9 @@ msgstr "cURL-timeout"
#~ msgid "Main menu style"
#~ msgstr "Huvudmeny"
+#~ msgid "Name / Password"
+#~ msgstr "Namn / Lösenord"
+
#~ msgid "Name/Password"
#~ msgstr "Namn/Lösenord"
@@ -6710,6 +7004,9 @@ msgstr "cURL-timeout"
#~ msgid "Parallax occlusion scale"
#~ msgstr "Parrallax Ocklusion"
+#~ msgid "PvP enabled"
+#~ msgstr "PvP aktiverat"
+
#~ msgid "Reset singleplayer world"
#~ msgstr "Starta om enspelarvärld"
@@ -6717,9 +7014,16 @@ msgstr "cURL-timeout"
#~ msgid "Select Package File:"
#~ msgstr "Välj modfil:"
+#, fuzzy
+#~ msgid "Special key"
+#~ msgstr "tryck på tangent"
+
#~ msgid "Start Singleplayer"
#~ msgstr "Starta Enspelarläge"
+#~ msgid "To enable shaders the OpenGL driver needs to be used."
+#~ msgstr "För att aktivera shaders behöver OpenGL-drivern användas."
+
#~ msgid "Toggle Cinematic"
#~ msgstr "Slå av/på Filmisk Kamera"
@@ -6728,3 +7032,9 @@ msgstr "cURL-timeout"
#~ msgid "Yes"
#~ msgstr "Ja"
+
+#~ msgid "You died."
+#~ msgstr "Du dog."
+
+#~ msgid "needs_fallback_font"
+#~ msgstr "no"
diff --git a/po/sw/minetest.po b/po/sw/minetest.po
index d0fffcb91..709937ea0 100644
--- a/po/sw/minetest.po
+++ b/po/sw/minetest.po
@@ -2,7 +2,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Swahili (Minetest)\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-02-23 19:03+0100\n"
+"POT-Creation-Date: 2022-01-25 23:19+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Swahili <https://hosted.weblate.org/projects/minetest/"
@@ -14,6 +14,47 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 3.9-dev\n"
+#: builtin/client/chatcommands.lua
+msgid "Clear the out chat queue"
+msgstr ""
+
+#: builtin/client/chatcommands.lua
+#, fuzzy
+msgid "Empty command."
+msgstr "Amri majadiliano"
+
+#: builtin/client/chatcommands.lua
+#, fuzzy
+msgid "Exit to main menu"
+msgstr "Toka kwenye menyu"
+
+#: builtin/client/chatcommands.lua
+#, fuzzy
+msgid "Invalid command: "
+msgstr "Amri majadiliano"
+
+#: builtin/client/chatcommands.lua
+msgid "Issued command: "
+msgstr ""
+
+#: builtin/client/chatcommands.lua
+#, fuzzy
+msgid "List online players"
+msgstr "Singleplayer"
+
+#: builtin/client/chatcommands.lua
+#, fuzzy
+msgid "Online players: "
+msgstr "Singleplayer"
+
+#: builtin/client/chatcommands.lua
+msgid "The out chat queue is now empty."
+msgstr ""
+
+#: builtin/client/chatcommands.lua
+msgid "This command is disabled by server."
+msgstr ""
+
#: builtin/client/death_formspec.lua src/client/game.cpp
msgid "Respawn"
msgstr "Respawn"
@@ -22,11 +63,42 @@ msgstr "Respawn"
msgid "You died"
msgstr "Umekufa."
+#: builtin/common/chatcommands.lua
+#, fuzzy
+msgid "Available commands:"
+msgstr "Amri majadiliano"
+
+#: builtin/common/chatcommands.lua
+#, fuzzy
+msgid "Available commands: "
+msgstr "Amri majadiliano"
+
+#: builtin/common/chatcommands.lua
+msgid "Command not available: "
+msgstr ""
+
+#: builtin/common/chatcommands.lua
+msgid "Get help for commands"
+msgstr ""
+
+#: builtin/common/chatcommands.lua
+msgid ""
+"Use '.help <cmd>' to get more information, or '.help all' to list everything."
+msgstr ""
+
+#: builtin/common/chatcommands.lua
+msgid "[all | <cmd>]"
+msgstr ""
+
#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp
msgid "OK"
msgstr ""
#: builtin/fstk/ui.lua
+msgid "<none available>"
+msgstr ""
+
+#: builtin/fstk/ui.lua
#, fuzzy
msgid "An error occurred in a Lua script:"
msgstr "Kosa limetokea katika hati Lua, kama vile Moduli na:"
@@ -242,6 +314,13 @@ msgid "Install missing dependencies"
msgstr "Inaanzilisha fundo"
#: builtin/mainmenu/dlg_contentstore.lua
+#, fuzzy
+msgid "Install: Unsupported file type or broken archive"
+msgstr ""
+"\n"
+"Sakinisha Moduli: filetype visivyotegemezwa \"$1\" au nyaraka kuvunjwa"
+
+#: builtin/mainmenu/dlg_contentstore.lua
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Mods"
msgstr "Mods"
@@ -565,7 +644,7 @@ msgstr ""
msgid "Browse"
msgstr "Vinjari"
-#: builtin/mainmenu/dlg_settings_advanced.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_settings.lua
msgid "Disabled"
msgstr "Walemavu"
@@ -592,7 +671,7 @@ msgstr ""
#: builtin/mainmenu/dlg_settings_advanced.lua
#, fuzzy
-msgid "Persistance"
+msgid "Persistence"
msgstr "Umbali wa uhamisho wa mchezaji"
#: builtin/mainmenu/dlg_settings_advanced.lua
@@ -611,7 +690,7 @@ msgstr "Rejesha chaguo-msingi"
msgid "Scale"
msgstr ""
-#: builtin/mainmenu/dlg_settings_advanced.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_online.lua
msgid "Search"
msgstr "Utafutaji"
@@ -714,18 +793,6 @@ msgstr ""
#: builtin/mainmenu/pkgmgr.lua
#, fuzzy
-msgid "Install: Unsupported file type \"$1\" or broken archive"
-msgstr ""
-"\n"
-"Sakinisha Moduli: filetype visivyotegemezwa \"$1\" au nyaraka kuvunjwa"
-
-#: builtin/mainmenu/pkgmgr.lua
-#, fuzzy
-msgid "Install: file: \"$1\""
-msgstr "Sakinisha Moduli: faili: \"$1\""
-
-#: builtin/mainmenu/pkgmgr.lua
-#, fuzzy
msgid "Unable to find a valid mod or modpack"
msgstr ""
"Sakinisha Moduli: haiwezi kupata foldername ya kufaa kwa ajili ya modpack $1"
@@ -762,6 +829,42 @@ msgstr ""
msgid "Try reenabling public serverlist and check your internet connection."
msgstr "Jaribu reenabling serverlist umma na Kagua muunganisho wako wa tovuti."
+#: builtin/mainmenu/tab_about.lua
+msgid "About"
+msgstr ""
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Active Contributors"
+msgstr "Wachangiaji amilifu"
+
+#: builtin/mainmenu/tab_about.lua
+#, fuzzy
+msgid "Active renderer:"
+msgstr "Kiolwa amilifu Tuma masafa"
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Core Developers"
+msgstr "Watengenezaji wa msingi"
+
+#: builtin/mainmenu/tab_about.lua
+#, fuzzy
+msgid "Open User Data Directory"
+msgstr "Orodha ya ramani"
+
+#: builtin/mainmenu/tab_about.lua
+msgid ""
+"Opens the directory that contains user-provided worlds, games, mods,\n"
+"and texture packs in a file manager / explorer."
+msgstr ""
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Previous Contributors"
+msgstr "Wachangiaji wa awali"
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Previous Core Developers"
+msgstr "Awali msingi watengenezaji"
+
#: builtin/mainmenu/tab_content.lua
msgid "Browse online content"
msgstr ""
@@ -809,37 +912,6 @@ msgstr "Sakinusha Moduli teuliwa"
msgid "Use Texture Pack"
msgstr "Texturepacks"
-#: builtin/mainmenu/tab_credits.lua
-msgid "Active Contributors"
-msgstr "Wachangiaji amilifu"
-
-#: builtin/mainmenu/tab_credits.lua
-msgid "Core Developers"
-msgstr "Watengenezaji wa msingi"
-
-#: builtin/mainmenu/tab_credits.lua
-msgid "Credits"
-msgstr "Mikopo"
-
-#: builtin/mainmenu/tab_credits.lua
-#, fuzzy
-msgid "Open User Data Directory"
-msgstr "Orodha ya ramani"
-
-#: builtin/mainmenu/tab_credits.lua
-msgid ""
-"Opens the directory that contains user-provided worlds, games, mods,\n"
-"and texture packs in a file manager / explorer."
-msgstr ""
-
-#: builtin/mainmenu/tab_credits.lua
-msgid "Previous Contributors"
-msgstr "Wachangiaji wa awali"
-
-#: builtin/mainmenu/tab_credits.lua
-msgid "Previous Core Developers"
-msgstr "Awali msingi watengenezaji"
-
#: builtin/mainmenu/tab_local.lua
#, fuzzy
msgid "Announce Server"
@@ -871,7 +943,7 @@ msgstr "Seva"
msgid "Install games from ContentDB"
msgstr ""
-#: builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
msgid "Name"
msgstr ""
@@ -883,7 +955,7 @@ msgstr "Mpya"
msgid "No world created or selected!"
msgstr "Duniani hakuna kuundwa au kuteuliwa!"
-#: builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
#, fuzzy
msgid "Password"
msgstr "Nywila mpya"
@@ -893,7 +965,7 @@ msgstr "Nywila mpya"
msgid "Play Game"
msgstr "Jina la mchezaji"
-#: builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
msgid "Port"
msgstr "Bandari"
@@ -916,8 +988,13 @@ msgid "Start Game"
msgstr "Ficha mchezo"
#: builtin/mainmenu/tab_online.lua
-msgid "Address / Port"
-msgstr "Kushughulikia / bandari"
+#, fuzzy
+msgid "Address"
+msgstr "Kumfunga anwani"
+
+#: builtin/mainmenu/tab_online.lua src/client/keycode.cpp
+msgid "Clear"
+msgstr "Wazi"
#: builtin/mainmenu/tab_online.lua
msgid "Connect"
@@ -927,35 +1004,47 @@ msgstr "Kuunganisha"
msgid "Creative mode"
msgstr "Hali ya ubunifu"
+#. ~ PvP = Player versus Player
#: builtin/mainmenu/tab_online.lua
-msgid "Damage enabled"
-msgstr "Uharibifu kuwezeshwa"
+#, fuzzy
+msgid "Damage / PvP"
+msgstr "Uharibifu"
#: builtin/mainmenu/tab_online.lua
msgid "Del. Favorite"
msgstr "Del. kipendwa"
#: builtin/mainmenu/tab_online.lua
-msgid "Favorite"
+#, fuzzy
+msgid "Favorites"
msgstr "Kipendwa"
#: builtin/mainmenu/tab_online.lua
+msgid "Incompatible Servers"
+msgstr ""
+
+#: builtin/mainmenu/tab_online.lua
#, fuzzy
msgid "Join Game"
msgstr "Ficha mchezo"
#: builtin/mainmenu/tab_online.lua
-msgid "Name / Password"
-msgstr "Jina / nenosiri"
+msgid "Ping"
+msgstr ""
#: builtin/mainmenu/tab_online.lua
-msgid "Ping"
+#, fuzzy
+msgid "Public Servers"
+msgstr "Kutangaza seva"
+
+#: builtin/mainmenu/tab_online.lua
+msgid "Refresh"
msgstr ""
-#. ~ PvP = Player versus Player
#: builtin/mainmenu/tab_online.lua
-msgid "PvP enabled"
-msgstr "PvP kuwezeshwa"
+#, fuzzy
+msgid "Server Description"
+msgstr "Maelezo ya seva"
#: builtin/mainmenu/tab_settings.lua
msgid "2x"
@@ -998,11 +1087,32 @@ msgstr "Badilisha funguo"
msgid "Connected Glass"
msgstr "Kioo kushikamana"
+#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
+#, fuzzy
+msgid "Dynamic shadows"
+msgstr "Kivuli cha fonti"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Dynamic shadows: "
+msgstr ""
+
#: builtin/mainmenu/tab_settings.lua
msgid "Fancy Leaves"
msgstr "Majani ya dhana"
#: builtin/mainmenu/tab_settings.lua
+msgid "High"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Low"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Medium"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
msgid "Mipmap"
msgstr "Mipmap"
@@ -1076,10 +1186,6 @@ msgstr "Taa laini"
msgid "Texturing:"
msgstr "Texturing:"
-#: builtin/mainmenu/tab_settings.lua
-msgid "To enable shaders the OpenGL driver needs to be used."
-msgstr "Ili kuwezesha shaders OpenGL ya kiendeshaji inahitaji kutumiwa."
-
#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
msgid "Tone Mapping"
msgstr "Ramani ya toni"
@@ -1094,6 +1200,14 @@ msgid "Trilinear Filter"
msgstr "Kichujio trilinear"
#: builtin/mainmenu/tab_settings.lua
+msgid "Ultra High"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Very Low"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
msgid "Waving Leaves"
msgstr "Waving majani"
@@ -1106,7 +1220,7 @@ msgstr "Waving fundo"
msgid "Waving Plants"
msgstr "Waving mimea"
-#: src/client/client.cpp
+#: src/client/client.cpp src/client/game.cpp
msgid "Connection timed out."
msgstr "Muunganisho limekatika."
@@ -1135,7 +1249,8 @@ msgid "Connection error (timed out?)"
msgstr "Kosa la muunganisho (wakati muafaka?)"
#: src/client/clientlauncher.cpp
-msgid "Could not find or load game \""
+#, fuzzy
+msgid "Could not find or load game: "
msgstr "Haikuweza kupata wala kupakia mchezo\""
#: src/client/clientlauncher.cpp
@@ -1167,18 +1282,6 @@ msgstr ""
msgid "Provided world path doesn't exist: "
msgstr "Njia ya dunia iliyotolewa haipo:"
-#. ~ DO NOT TRANSLATE THIS LITERALLY!
-#. This is a special string. Put either "no" or "yes"
-#. into the translation field (literally).
-#. Choose "yes" if the language requires use of the fallback
-#. font, "no" otherwise.
-#. The fallback font is (normally) required for languages with
-#. non-Latin script, like Chinese.
-#. When in doubt, test your translation.
-#: src/client/fontengine.cpp
-msgid "needs_fallback_font"
-msgstr "no"
-
#: src/client/game.cpp
msgid ""
"\n"
@@ -1193,16 +1296,6 @@ msgid "- Address: "
msgstr "Kumfunga anwani"
#: src/client/game.cpp
-#, fuzzy
-msgid "- Creative Mode: "
-msgstr "Hali ya ubunifu"
-
-#: src/client/game.cpp
-#, fuzzy
-msgid "- Damage: "
-msgstr "Uharibifu"
-
-#: src/client/game.cpp
msgid "- Mode: "
msgstr ""
@@ -1228,6 +1321,16 @@ msgstr "Jina la seva"
#: src/client/game.cpp
#, fuzzy
+msgid "A serialization error occurred:"
+msgstr "Kosa limetokea:"
+
+#: src/client/game.cpp
+#, c-format
+msgid "Access denied. Reason: %s"
+msgstr ""
+
+#: src/client/game.cpp
+#, fuzzy
msgid "Automatic forward disabled"
msgstr "Ufunguo wa mbele"
@@ -1237,6 +1340,22 @@ msgid "Automatic forward enabled"
msgstr "Ufunguo wa mbele"
#: src/client/game.cpp
+msgid "Block bounds hidden"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Block bounds shown for all blocks"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Block bounds shown for current block"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Block bounds shown for nearby blocks"
+msgstr ""
+
+#: src/client/game.cpp
#, fuzzy
msgid "Camera update disabled"
msgstr "Kibonye guro Usasishaji wa kamera"
@@ -1247,6 +1366,10 @@ msgid "Camera update enabled"
msgstr "Kibonye guro Usasishaji wa kamera"
#: src/client/game.cpp
+msgid "Can't show block bounds (need 'basic_debug' privilege)"
+msgstr ""
+
+#: src/client/game.cpp
msgid "Change Password"
msgstr "Badilisha nywila"
@@ -1261,6 +1384,11 @@ msgid "Cinematic mode enabled"
msgstr "Hali ya cinematic ufunguo"
#: src/client/game.cpp
+#, fuzzy
+msgid "Client disconnected"
+msgstr "Mteja"
+
+#: src/client/game.cpp
msgid "Client side scripting is disabled"
msgstr ""
@@ -1269,6 +1397,10 @@ msgid "Connecting to server..."
msgstr "Inaunganisha seva..."
#: src/client/game.cpp
+msgid "Connection failed for unknown reason"
+msgstr ""
+
+#: src/client/game.cpp
msgid "Continue"
msgstr "Kuendelea"
@@ -1303,6 +1435,11 @@ msgstr ""
"- T: mazungumzo\n"
#: src/client/game.cpp
+#, c-format
+msgid "Couldn't resolve address: %s"
+msgstr ""
+
+#: src/client/game.cpp
msgid "Creating client..."
msgstr "Inaunda mteja..."
@@ -1438,6 +1575,11 @@ msgid "Minimap currently disabled by game or mod"
msgstr ""
#: src/client/game.cpp
+#, fuzzy
+msgid "Multiplayer"
+msgstr "Singleplayer"
+
+#: src/client/game.cpp
msgid "Noclip mode disabled"
msgstr ""
@@ -1514,6 +1656,21 @@ msgid "Sound unmuted"
msgstr "Kiwango cha sauti"
#: src/client/game.cpp
+#, c-format
+msgid "The server is probably running a different version of %s."
+msgstr ""
+
+#: src/client/game.cpp
+#, c-format
+msgid "Unable to connect to %s because IPv6 is disabled"
+msgstr ""
+
+#: src/client/game.cpp
+#, c-format
+msgid "Unable to listen on %s because IPv6 is disabled"
+msgstr ""
+
+#: src/client/game.cpp
#, fuzzy, c-format
msgid "Viewing range changed to %d"
msgstr "Kuonyesha masafa"
@@ -1586,10 +1743,6 @@ msgid "Caps Lock"
msgstr ""
#: src/client/keycode.cpp
-msgid "Clear"
-msgstr "Wazi"
-
-#: src/client/keycode.cpp
msgid "Control"
msgstr "Udhibiti"
@@ -1863,6 +2016,15 @@ msgstr ""
msgid "Minimap in texture mode"
msgstr "Unamu wa kima cha chini cha ukubwa wa Vichujio"
+#: src/gui/guiChatConsole.cpp
+#, fuzzy
+msgid "Failed to open webpage"
+msgstr "Imeshindwa kusakinisha $1 hadi $2"
+
+#: src/gui/guiChatConsole.cpp
+msgid "Opening webpage"
+msgstr ""
+
#: src/gui/guiConfirmRegistration.cpp src/gui/guiPasswordChange.cpp
msgid "Passwords do not match!"
msgstr "MaNenotambulishi hayaoani!"
@@ -1887,7 +2049,7 @@ msgstr "Kuendelea"
#: src/gui/guiKeyChangeMenu.cpp
#, fuzzy
-msgid "\"Special\" = climb down"
+msgid "\"Aux1\" = climb down"
msgstr "\"Matumizi\" = kupanda chini"
#: src/gui/guiKeyChangeMenu.cpp
@@ -1900,10 +2062,18 @@ msgid "Automatic jumping"
msgstr ""
#: src/gui/guiKeyChangeMenu.cpp
+msgid "Aux1"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
msgid "Backward"
msgstr "Nyuma"
#: src/gui/guiKeyChangeMenu.cpp
+msgid "Block bounds"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
#, fuzzy
msgid "Change camera"
msgstr "Badilisha funguo"
@@ -1998,10 +2168,6 @@ msgid "Sneak"
msgstr "Taarifa"
#: src/gui/guiKeyChangeMenu.cpp
-msgid "Special"
-msgstr ""
-
-#: src/gui/guiKeyChangeMenu.cpp
#, fuzzy
msgid "Toggle HUD"
msgstr "Togoa kuruka"
@@ -2068,7 +2234,8 @@ msgid "Muted"
msgstr "Ufunguo wa matumizi"
#: src/gui/guiVolumeChange.cpp
-msgid "Sound Volume: "
+#, fuzzy, c-format
+msgid "Sound Volume: %d%%"
msgstr "Kiwango sauti:"
#. ~ Imperative, as in "Enter/type in text".
@@ -2092,8 +2259,8 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"(Android) Use virtual joystick to trigger \"aux\" button.\n"
-"If enabled, virtual joystick will also tap \"aux\" button when out of main "
+"(Android) Use virtual joystick to trigger \"Aux1\" button.\n"
+"If enabled, virtual joystick will also tap \"Aux1\" button when out of main "
"circle."
msgstr ""
@@ -2304,6 +2471,10 @@ msgstr ""
"mfano kwa 4 k skrini."
#: src/settings_translation_file.cpp
+msgid "Adjust the detected display density, used for scaling UI elements."
+msgstr ""
+
+#: src/settings_translation_file.cpp
#, c-format
msgid ""
"Adjusts the density of the floatland layer.\n"
@@ -2420,6 +2591,16 @@ msgid "Autoscaling mode"
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Aux1 key"
+msgstr "Ufunguo wa kuruka"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Aux1 key for climbing/descending"
+msgstr "Matumizi muhimu kwa ajili ya kupanda/kushuka"
+
+#: src/settings_translation_file.cpp
msgid "Backward key"
msgstr "Ufunguo wa nyuma"
@@ -2469,11 +2650,6 @@ msgid "Biome noise"
msgstr "Kelele za mto"
#: src/settings_translation_file.cpp
-msgid "Bits per pixel (aka color depth) in fullscreen mode."
-msgstr ""
-"Biti kwa pikseli (a.k.a rangi kina) katika hali-tumizi ya skrini nzima."
-
-#: src/settings_translation_file.cpp
#, fuzzy
msgid "Block send optimize distance"
msgstr "Umbo la Max Tuma umbali"
@@ -2585,6 +2761,16 @@ msgstr ""
#: src/settings_translation_file.cpp
#, fuzzy
+msgid "Chat command time message threshold"
+msgstr "Kilele cha mlima gorofa Mwandishi ramani"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Chat commands"
+msgstr "Amri majadiliano"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
msgid "Chat font size"
msgstr "Ukubwa wa fonti"
@@ -2620,8 +2806,8 @@ msgid "Chat toggle key"
msgstr "Kibonye guro wa mazungumzo"
#: src/settings_translation_file.cpp
-msgid "Chatcommands"
-msgstr "Amri majadiliano"
+msgid "Chat weblinks"
+msgstr ""
#: src/settings_translation_file.cpp
msgid "Chunk size"
@@ -2640,6 +2826,12 @@ msgid "Clean transparent textures"
msgstr "Unamu angavu safi"
#: src/settings_translation_file.cpp
+msgid ""
+"Clickable weblinks (middle-click or Ctrl+left-click) enabled in chat console "
+"output."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Client"
msgstr "Mteja"
@@ -2686,6 +2878,11 @@ msgid "Colored fog"
msgstr "Ukungu wa rangi"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Colored shadows"
+msgstr "Ukungu wa rangi"
+
+#: src/settings_translation_file.cpp
msgid ""
"Comma-separated list of flags to hide in the content repository.\n"
"\"nonfree\" can be used to hide packages which do not qualify as 'free "
@@ -2718,6 +2915,22 @@ msgid "Command key"
msgstr "Ufunguo wa amri"
#: src/settings_translation_file.cpp
+msgid ""
+"Compression level to use when saving mapblocks to disk.\n"
+"-1 - use default compression level\n"
+"0 - least compression, fastest\n"
+"9 - best compression, slowest"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Compression level to use when sending mapblocks to the client.\n"
+"-1 - use default compression level\n"
+"0 - least compression, fastest\n"
+"9 - best compression, slowest"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Connect glass"
msgstr "Kuunganisha kioo"
@@ -2816,7 +3029,7 @@ msgstr "Crosshair Alfa"
#, fuzzy
msgid ""
"Crosshair alpha (opaqueness, between 0 and 255).\n"
-"Also controls the object crosshair color"
+"This also applies to the object crosshair."
msgstr "Crosshair Alfa (opaqueness kati ya 0 na 255)."
#: src/settings_translation_file.cpp
@@ -2899,11 +3112,10 @@ msgstr "Chaguo-msingi mchezo"
#: src/settings_translation_file.cpp
msgid ""
-"Default timeout for cURL, stated in milliseconds.\n"
-"Only has an effect if compiled with cURL."
+"Define shadow filtering quality.\n"
+"This simulates the soft shadows effect by applying a PCF or Poisson disk\n"
+"but also uses more resources."
msgstr ""
-"Chaguo-msingi muda wa kuisha kwa cURL, alisema katika milisekunde.\n"
-"Tu ina athari kama alikusanya na Mkunjo."
#: src/settings_translation_file.cpp
msgid "Defines areas where trees have apples."
@@ -3026,6 +3238,10 @@ msgid "Disallow empty passwords"
msgstr "Usiruhusu nywila tupu"
#: src/settings_translation_file.cpp
+msgid "Display Density Scaling Factor"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Domain name of server, to be displayed in the serverlist."
msgstr "Kikoa jina la seva, kuonyeshwa katika serverlist ya."
@@ -3072,6 +3288,19 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Enable Poisson disk filtering.\n"
+"On true uses Poisson disk to make \"soft shadows\". Otherwise uses PCF "
+"filtering."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable colored shadows.\n"
+"On true translucent nodes cast colored shadows. This is expensive."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Enable console window"
msgstr ""
@@ -3198,6 +3427,12 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Enables tradeoffs that reduce CPU load or increase rendering performance\n"
+"at the expense of minor visual glitches that do not impact game playability."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Engine profiling data print interval"
msgstr "Injini ubainishaji wa data ya uchapaji nafasi"
@@ -3239,18 +3474,6 @@ msgid "Fallback font path"
msgstr "Fonti amebadilisha"
#: src/settings_translation_file.cpp
-msgid "Fallback font shadow"
-msgstr "Fonti amebadilisha kivuli"
-
-#: src/settings_translation_file.cpp
-msgid "Fallback font shadow alpha"
-msgstr "Fonti amebadilisha kivuli Alfa"
-
-#: src/settings_translation_file.cpp
-msgid "Fallback font size"
-msgstr "Ukubwa fonti amebadilisha"
-
-#: src/settings_translation_file.cpp
msgid "Fast key"
msgstr "Ufunguo kasi"
@@ -3269,7 +3492,7 @@ msgstr "Kutembea haraka"
#: src/settings_translation_file.cpp
#, fuzzy
msgid ""
-"Fast movement (via the \"special\" key).\n"
+"Fast movement (via the \"Aux1\" key).\n"
"This requires the \"fast\" privilege on the server."
msgstr ""
"Harakati haraka (kupitia matumizi muhimu).\n"
@@ -3311,9 +3534,9 @@ msgstr "Ramani ya toni filmic"
#, fuzzy
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."
+"which PNG optimizers usually discard, often resulting in dark or\n"
+"light edges to transparent textures. Apply a filter to clean that up\n"
+"at texture load time. This is automatically enabled if mipmapping is enabled."
msgstr ""
"Unamu kuchujwa wanaweza kujichanganya RGB thamani na majirani kikamilifu-"
"uwazi, ambayo PNG optimizers kawaida Tupa, wakati mwingine kusababisha "
@@ -3414,15 +3637,15 @@ msgid "Font size"
msgstr "Ukubwa wa fonti"
#: src/settings_translation_file.cpp
-msgid "Font size of the default font in point (pt)."
+msgid "Font size divisible by"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Font size of the fallback font in point (pt)."
+msgid "Font size of the default font where 1 unit = 1 pixel at 96 DPI"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Font size of the monospace font in point (pt)."
+msgid "Font size of the monospace font where 1 unit = 1 pixel at 96 DPI"
msgstr ""
#: src/settings_translation_file.cpp
@@ -3433,6 +3656,17 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"For pixel-style fonts that do not scale well, this ensures that font sizes "
+"used\n"
+"with this font will always be divisible by this value, in pixels. For "
+"instance,\n"
+"a pixel font 16 pixels tall should have this set to 16, so it will only ever "
+"be\n"
+"sized 16, 32, 48, etc., so a mod requesting a size of 25 will get 32."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Format of player chat messages. The following strings are valid "
"placeholders:\n"
"@name, @message, @timestamp (optional)"
@@ -3499,11 +3733,6 @@ msgid "Fraction of the visible distance at which fog starts to be rendered"
msgstr ""
#: src/settings_translation_file.cpp
-#, fuzzy
-msgid "FreeType fonts"
-msgstr "Fonti Freetype"
-
-#: src/settings_translation_file.cpp
msgid ""
"From how far blocks are generated for clients, stated in mapblocks (16 "
"nodes)."
@@ -3532,10 +3761,6 @@ msgid "Full screen"
msgstr "Kiwamba kizima"
#: src/settings_translation_file.cpp
-msgid "Full screen BPP"
-msgstr "Skrini BPP"
-
-#: src/settings_translation_file.cpp
msgid "Fullscreen mode."
msgstr "Hali-tumizi ya skrini nzima."
@@ -3560,7 +3785,7 @@ msgstr "Callbacks ya kimataifa"
msgid ""
"Global map generation attributes.\n"
"In Mapgen v6 the 'decorations' flag controls all decorations except trees\n"
-"and junglegrass, in all other mapgens this flag controls all decorations."
+"and jungle grass, in all other mapgens this flag controls all decorations."
msgstr ""
"Ramani ya kimataifa kizazi sifa.\n"
"Katika Mwandishi ramani v6 bendera ya 'kienyeji' udhibiti mapambo yote "
@@ -3652,7 +3877,9 @@ msgid "Heat noise"
msgstr "Pango kelele #1"
#: src/settings_translation_file.cpp
-msgid "Height component of the initial window size."
+#, fuzzy
+msgid ""
+"Height component of the initial window size. Ignored in fullscreen mode."
msgstr "Kijenzi cha urefu wa ukubwa cha kidirisha awali."
#: src/settings_translation_file.cpp
@@ -3666,10 +3893,6 @@ msgid "Height select noise"
msgstr "Mwandishi ramani v6 urefu Teua vigezo kelele"
#: src/settings_translation_file.cpp
-msgid "High-precision FPU"
-msgstr "FPU kuu-usahihi"
-
-#: src/settings_translation_file.cpp
#, fuzzy
msgid "Hill steepness"
msgstr "Mwandishi ramani gorofa kilima mwinuko"
@@ -3913,8 +4136,7 @@ msgstr ""
#: src/settings_translation_file.cpp
#, fuzzy
msgid ""
-"If disabled, \"special\" key is used to fly fast if both fly and fast mode "
-"are\n"
+"If disabled, \"Aux1\" key is used to fly fast if both fly and fast mode are\n"
"enabled."
msgstr ""
"Ikiwa kimelemazwa \"kutumia\" ufunguo ni kutumika kwa kuruka haraka kama "
@@ -3942,8 +4164,8 @@ msgstr ""
#: src/settings_translation_file.cpp
#, fuzzy
msgid ""
-"If enabled, \"special\" key instead of \"sneak\" key is used for climbing "
-"down and\n"
+"If enabled, \"Aux1\" key instead of \"Sneak\" key is used for climbing down "
+"and\n"
"descending."
msgstr ""
"Ikiwa imewezeshwa, ufunguo wa \"kutumia\" badala ya \"sneak\" ufunguo ni "
@@ -3998,6 +4220,12 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"If the execution of a chat command takes longer than this specified time in\n"
+"seconds, add the time information to the chat command message"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"If the file size of debug.txt exceeds the number of megabytes specified in\n"
"this setting when it is opened, the file is moved to debug.txt.1,\n"
"deleting an older debug.txt.1 if it exists.\n"
@@ -4051,7 +4279,8 @@ msgstr ""
"Hii ni kawaida tu zinazohitajika kwa wachangiaji wa msingi/builtin"
#: src/settings_translation_file.cpp
-msgid "Instrument chatcommands on registration."
+#, fuzzy
+msgid "Instrument chat commands on registration."
msgstr "Chombo chatcommands kwenye usajili."
#: src/settings_translation_file.cpp
@@ -4141,7 +4370,7 @@ msgid "Joystick button repetition interval"
msgstr "Kifimbocheza kitufe marudio nafasi"
#: src/settings_translation_file.cpp
-msgid "Joystick deadzone"
+msgid "Joystick dead zone"
msgstr ""
#: src/settings_translation_file.cpp
@@ -5203,10 +5432,6 @@ msgstr ""
"kuonyesha mwelekeo."
#: src/settings_translation_file.cpp
-msgid "Makes DirectX work with LuaJIT. Disable if it causes troubles."
-msgstr "Hufanya DirectX kazi na LuaJIT. Lemaza ikiwa husababisha matatizo."
-
-#: src/settings_translation_file.cpp
msgid "Makes all liquids opaque"
msgstr ""
@@ -5303,6 +5528,11 @@ msgid "Map save interval"
msgstr "Ramani hifadhi muda"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Map shadows update frames"
+msgstr "Pata sasishi kioevu"
+
+#: src/settings_translation_file.cpp
msgid "Mapblock limit"
msgstr "Kikomo cha Mapblock"
@@ -5427,6 +5657,10 @@ msgid "Maximum FPS when the window is not focused, or when the game is paused."
msgstr "Ramprogrammen juu wakati mchezo umesitishwa."
#: src/settings_translation_file.cpp
+msgid "Maximum distance to render shadows."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Maximum forceloaded blocks"
msgstr "Forceloaded upeo vitalu"
@@ -5549,12 +5783,21 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Maximum time in ms a file download (e.g. a mod download) may take."
+#, fuzzy
+msgid ""
+"Maximum time a file download (e.g. a mod download) may take, stated in "
+"milliseconds."
msgstr ""
"Muda wa juu zaidi katika ms kupakua faili (kwa mfano upakuaji na Moduli) "
"inaweza kuchukua."
#: src/settings_translation_file.cpp
+msgid ""
+"Maximum time an interactive request (e.g. server list fetch) may take, "
+"stated in milliseconds."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Maximum users"
msgstr "Watumiaji wa kiwango cha juu"
@@ -5616,7 +5859,7 @@ msgid "Mod channels"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Modifies the size of the hudbar elements."
+msgid "Modifies the size of the HUD elements."
msgstr ""
#: src/settings_translation_file.cpp
@@ -5629,6 +5872,11 @@ msgstr "Ukubwa wa fonti wa Monospace"
#: src/settings_translation_file.cpp
#, fuzzy
+msgid "Monospace font size divisible by"
+msgstr "Ukubwa wa fonti wa Monospace"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
msgid "Mountain height noise"
msgstr "Mwandishi ramani v7 mlima urefu kelele vigezo"
@@ -5759,9 +6007,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
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"
+"This is a trade-off between SQLite transaction overhead and\n"
"memory consumption (4096=100MB, as a rule of thumb)."
msgstr ""
"Idadi ya vitalu ziada ambayo inaweza kupakiwa na /clearobjects mara moja.\n"
@@ -5783,21 +6032,18 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Opaqueness (alpha) of the shadow behind the fallback font, between 0 and 255."
-msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid ""
"Open the pause menu when the window's focus is lost. Does not pause if a "
"formspec is\n"
"open."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Optional override for chat weblink color."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid ""
-"Path of the fallback font.\n"
-"If “freetype†setting is enabled: Must be a TrueType font.\n"
-"If “freetype†setting is disabled: Must be a bitmap or XML vectors font.\n"
+"Path of the fallback font. Must be a TrueType font.\n"
"This font will be used for certain languages or if the default font is "
"unavailable."
msgstr ""
@@ -5820,17 +6066,13 @@ msgstr "Njia ya orodha ya unamu. Unamu wote vinatafutizwa kwanza kutoka hapa."
#: src/settings_translation_file.cpp
msgid ""
-"Path to the default font.\n"
-"If “freetype†setting is enabled: Must be a TrueType font.\n"
-"If “freetype†setting is disabled: Must be a bitmap or XML vectors font.\n"
+"Path to the default font. Must be a TrueType font.\n"
"The fallback font will be used if the font cannot be loaded."
msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Path to the monospace font.\n"
-"If “freetype†setting is enabled: Must be a TrueType font.\n"
-"If “freetype†setting is disabled: Must be a bitmap or XML vectors font.\n"
+"Path to the monospace font. Must be a TrueType font.\n"
"This font is used for e.g. the console and profiler screen."
msgstr ""
@@ -5892,6 +6134,11 @@ msgid "Player versus player"
msgstr "Mchezaji dhidi ya mchezaji"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Poisson filtering"
+msgstr "Uchujaji wa bilinear"
+
+#: src/settings_translation_file.cpp
msgid ""
"Port to connect to (UDP).\n"
"Note that the port field in the main menu overrides this setting."
@@ -5941,9 +6188,9 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"Prometheus listener address.\n"
-"If minetest is compiled with ENABLE_PROMETHEUS option enabled,\n"
+"If Minetest is compiled with ENABLE_PROMETHEUS option enabled,\n"
"enable metrics listener for Prometheus on that address.\n"
-"Metrics can be fetch on http://127.0.0.1:30000/metrics"
+"Metrics can be fetched on http://127.0.0.1:30000/metrics"
msgstr ""
#: src/settings_translation_file.cpp
@@ -6278,6 +6525,35 @@ msgid "Set the maximum character length of a chat message sent by clients."
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Set the shadow strength.\n"
+"Lower value means lighter shadows, higher value means darker shadows."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set the soft shadow radius size.\n"
+"Lower values mean sharper shadows, bigger values mean softer shadows.\n"
+"Minimum value: 1.0; maximum value: 10.0"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set the tilt of Sun/Moon orbit in degrees.\n"
+"Value of 0 means no tilt / vertical orbit.\n"
+"Minimum value: 0.0; maximum value: 60.0"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid ""
+"Set to true to enable Shadow Mapping.\n"
+"Requires shaders to be enabled."
+msgstr ""
+"Kuweka huwezesha kweli waving majani.\n"
+"Inahitaji shaders kwa kuwezeshwa."
+
+#: src/settings_translation_file.cpp
#, fuzzy
msgid ""
"Set to true to enable waving leaves.\n"
@@ -6305,6 +6581,13 @@ msgstr ""
"Inahitaji shaders kwa kuwezeshwa."
#: src/settings_translation_file.cpp
+msgid ""
+"Sets shadow texture quality to 32 bits.\n"
+"On false, 16 bits texture will be used.\n"
+"This can cause much more artifacts in the shadow."
+msgstr ""
+
+#: src/settings_translation_file.cpp
#, fuzzy
msgid "Shader path"
msgstr "Shaders"
@@ -6323,17 +6606,32 @@ msgstr ""
#: src/settings_translation_file.cpp
#, fuzzy
+msgid "Shadow filter quality"
+msgstr "Screenshot ubora"
+
+#: src/settings_translation_file.cpp
+msgid "Shadow map max distance in nodes to render shadows"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Shadow map texture in 32 bits"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Shadow map texture size"
+msgstr "Unamu wa kima cha chini cha ukubwa wa Vichujio"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
"Shadow offset (in pixels) of the default font. If 0, then shadow will not be "
"drawn."
msgstr "Fonti kivuli Sawazisha, kama 0 basi kivuli itakuwa kuchukuliwa."
#: src/settings_translation_file.cpp
-#, fuzzy
-msgid ""
-"Shadow offset (in pixels) of the fallback font. If 0, then shadow will not "
-"be drawn."
-msgstr "Fonti kivuli Sawazisha, kama 0 basi kivuli itakuwa kuchukuliwa."
+msgid "Shadow strength"
+msgstr ""
#: src/settings_translation_file.cpp
msgid "Shape of the minimap. Enabled = round, disabled = square."
@@ -6357,7 +6655,7 @@ msgstr ""
"Kuanza upya inahitajika baada ya kubadilisha hii."
#: src/settings_translation_file.cpp
-msgid "Show nametag backgrounds by default"
+msgid "Show name tag backgrounds by default"
msgstr ""
#: src/settings_translation_file.cpp
@@ -6382,6 +6680,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Sky Body Orbit Tilt"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Slice w"
msgstr ""
@@ -6441,18 +6743,13 @@ msgid "Sneaking speed, in nodes per second."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Sound"
-msgstr "Sauti"
-
-#: src/settings_translation_file.cpp
#, fuzzy
-msgid "Special key"
-msgstr "Zawadi muhimu"
+msgid "Soft shadow radius"
+msgstr "Fonti kivuli Alfa"
#: src/settings_translation_file.cpp
-#, fuzzy
-msgid "Special key for climbing/descending"
-msgstr "Matumizi muhimu kwa ajili ya kupanda/kushuka"
+msgid "Sound"
+msgstr "Sauti"
#: src/settings_translation_file.cpp
msgid ""
@@ -6476,6 +6773,14 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Spread a complete update of shadow map over given amount of frames.\n"
+"Higher values might make shadows laggy, lower values\n"
+"will consume more resources.\n"
+"Minimum value: 1; maximum value: 16"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Spread of light curve boost range.\n"
"Controls the width of the range to be boosted.\n"
"Standard deviation of the light curve boost Gaussian."
@@ -6596,6 +6901,13 @@ msgstr "Njia ya unamu"
#: src/settings_translation_file.cpp
msgid ""
+"Texture size to render the shadow map on.\n"
+"This must be a power of two.\n"
+"Bigger numbers create better shadows but it is also more expensive."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Textures on a node may be aligned either to the node or to the world.\n"
"The former mode suits better things like machines, furniture, etc., while\n"
"the latter makes stairs and microblocks fit surroundings better.\n"
@@ -6609,7 +6921,7 @@ msgid "The URL for the content repository"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "The deadzone of the joystick"
+msgid "The dead zone of the joystick"
msgstr ""
#: src/settings_translation_file.cpp
@@ -6675,7 +6987,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"The rendering back-end for Irrlicht.\n"
+"The rendering back-end.\n"
"A restart is required after changing this.\n"
"Note: On Android, stick with OGLES1 if unsure! App may fail to start "
"otherwise.\n"
@@ -6684,9 +6996,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
"The sensitivity of the joystick axes for moving the\n"
-"ingame view frustum around."
+"in-game view frustum around."
msgstr "Unyeti wa Jira kifimbocheza kwa kuzunguka Mwoneko ingame frustum."
#: src/settings_translation_file.cpp
@@ -6800,6 +7113,10 @@ msgid "Touch screen threshold"
msgstr "Touchthreshold (px)"
#: src/settings_translation_file.cpp
+msgid "Tradeoffs for performance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Trees noise"
msgstr ""
@@ -6874,7 +7191,7 @@ msgstr "Tumia uchujaji bilinear wakati upimaji unamu."
#: src/settings_translation_file.cpp
msgid ""
-"Use mip mapping to scale textures. May slightly increase performance,\n"
+"Use mipmapping to scale textures. May slightly increase performance,\n"
"especially when using a high resolution texture pack.\n"
"Gamma correct downscaling is not supported."
msgstr ""
@@ -6997,7 +7314,7 @@ msgid "Viewing range"
msgstr "Kuonyesha masafa"
#: src/settings_translation_file.cpp
-msgid "Virtual joystick triggers aux button"
+msgid "Virtual joystick triggers Aux1 button"
msgstr ""
#: src/settings_translation_file.cpp
@@ -7080,6 +7397,11 @@ msgid "Waving plants"
msgstr "Waving mimea"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Weblink color"
+msgstr "Uteuzi kikasha rangi"
+
+#: 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"
@@ -7108,9 +7430,8 @@ msgid ""
"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.\n"
+"memory. Powers of 2 are recommended. This setting is ONLY applied if\n"
+"bilinear/trilinear/anisotropic filtering is enabled.\n"
"This is also used as the base node texture size for world-aligned\n"
"texture autoscaling."
msgstr ""
@@ -7123,18 +7444,8 @@ msgstr ""
"anisotropic ni kuwezeshwa."
#: src/settings_translation_file.cpp
-#, fuzzy
-msgid ""
-"Whether FreeType fonts are used, requires FreeType support to be compiled "
-"in.\n"
-"If disabled, bitmap and XML vectors fonts are used instead."
-msgstr ""
-"Kama freetype fonti hutumiwa, inahitaji msaada wa freetype kuwa alikusanya "
-"katika."
-
-#: src/settings_translation_file.cpp
msgid ""
-"Whether nametag backgrounds should be shown by default.\n"
+"Whether name tag backgrounds should be shown by default.\n"
"Mods may still set a background."
msgstr ""
@@ -7181,7 +7492,8 @@ msgstr ""
"Kama kuonyesha mteja Rekebisha taarifa (ina athari sawa kama kupiga F5)."
#: src/settings_translation_file.cpp
-msgid "Width component of the initial window size."
+#, fuzzy
+msgid "Width component of the initial window size. Ignored in fullscreen mode."
msgstr "Upana sehemu ya ukubwa cha kidirisha awali."
#: src/settings_translation_file.cpp
@@ -7271,34 +7583,25 @@ msgid "Y-level of seabed."
msgstr ""
#: src/settings_translation_file.cpp
-msgid ""
-"ZLib compression level to use when saving mapblocks to disk.\n"
-"-1 - Zlib's default compression level\n"
-"0 - no compresson, fastest\n"
-"9 - best compression, slowest\n"
-"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)"
-msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid ""
-"ZLib compression level to use when sending mapblocks to the client.\n"
-"-1 - Zlib's default compression level\n"
-"0 - no compresson, fastest\n"
-"9 - best compression, slowest\n"
-"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "cURL file download timeout"
msgstr "cURL muda wa upakuzi wa faili"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "cURL interactive timeout"
+msgstr "muda wa kuisha wa cURL"
+
+#: src/settings_translation_file.cpp
msgid "cURL parallel limit"
msgstr "cURL kikomo sambamba"
-#: src/settings_translation_file.cpp
-msgid "cURL timeout"
-msgstr "muda wa kuisha wa cURL"
+#, fuzzy
+#~ msgid "- Creative Mode: "
+#~ msgstr "Hali ya ubunifu"
+
+#, fuzzy
+#~ msgid "- Damage: "
+#~ msgstr "Uharibifu"
#~ msgid ""
#~ "0 = parallax occlusion with slope information (faster).\n"
@@ -7307,6 +7610,9 @@ msgstr "muda wa kuisha wa cURL"
#~ "0 = parallax occlusion na taarifa ya mteremko (haraka).\n"
#~ "1 = ramani ya misaada (polepole, sahihi zaidi)."
+#~ msgid "Address / Port"
+#~ msgstr "Kushughulikia / bandari"
+
#, fuzzy
#~ msgid ""
#~ "Adjust the gamma encoding for the light tables. Higher numbers are "
@@ -7322,6 +7628,10 @@ msgstr "muda wa kuisha wa cURL"
#~ msgid "Back"
#~ msgstr "Nyuma"
+#~ msgid "Bits per pixel (aka color depth) in fullscreen mode."
+#~ msgstr ""
+#~ "Biti kwa pikseli (a.k.a rangi kina) katika hali-tumizi ya skrini nzima."
+
#~ msgid "Bump Mapping"
#~ msgstr "Mapema ramani"
@@ -7338,14 +7648,27 @@ msgstr "muda wa kuisha wa cURL"
#~ msgstr ""
#~ "Vidhibiti vya upana wa vichuguu, thamani ndogo huunda vichuguu pana."
+#~ msgid "Credits"
+#~ msgstr "Mikopo"
+
#~ msgid "Crosshair color (R,G,B)."
#~ msgstr "Rangi ya crosshair (R, G, B)."
+#~ msgid "Damage enabled"
+#~ msgstr "Uharibifu kuwezeshwa"
+
#, fuzzy
#~ msgid "Darkness sharpness"
#~ msgstr "Mwandishi ramani ziwa gorofa mwinuko"
#~ msgid ""
+#~ "Default timeout for cURL, stated in milliseconds.\n"
+#~ "Only has an effect if compiled with cURL."
+#~ msgstr ""
+#~ "Chaguo-msingi muda wa kuisha kwa cURL, alisema katika milisekunde.\n"
+#~ "Tu ina athari kama alikusanya na Mkunjo."
+
+#~ msgid ""
#~ "Defines sampling step of texture.\n"
#~ "A higher value results in smoother normal maps."
#~ msgstr ""
@@ -7396,9 +7719,25 @@ msgstr "muda wa kuisha wa cURL"
#~ msgid "FPS in pause menu"
#~ msgstr "Ramprogrammen katika Menyu ya mapumziko"
+#~ msgid "Fallback font shadow"
+#~ msgstr "Fonti amebadilisha kivuli"
+
+#~ msgid "Fallback font shadow alpha"
+#~ msgstr "Fonti amebadilisha kivuli Alfa"
+
+#~ msgid "Fallback font size"
+#~ msgstr "Ukubwa fonti amebadilisha"
+
#~ msgid "Font shadow alpha (opaqueness, between 0 and 255)."
#~ msgstr "Fonti kivuli Alfa (opaqueness kati ya 0 na 255)."
+#, fuzzy
+#~ msgid "FreeType fonts"
+#~ msgstr "Fonti Freetype"
+
+#~ msgid "Full screen BPP"
+#~ msgstr "Skrini BPP"
+
#~ msgid "Gamma"
#~ msgstr "Gamma"
@@ -7409,10 +7748,17 @@ msgstr "muda wa kuisha wa cURL"
#~ msgid "Generate normalmaps"
#~ msgstr "Kuzalisha normalmaps"
+#~ msgid "High-precision FPU"
+#~ msgstr "FPU kuu-usahihi"
+
#~ msgid "IPv6 support."
#~ msgstr "IPv6 msaada."
#, fuzzy
+#~ msgid "Install: file: \"$1\""
+#~ msgstr "Sakinisha Moduli: faili: \"$1\""
+
+#, fuzzy
#~ msgid "Lava depth"
#~ msgstr "Kina ya pango kubwa"
@@ -7426,6 +7772,12 @@ msgstr "muda wa kuisha wa cURL"
#~ msgid "Main menu style"
#~ msgstr "Hati ya Menyu kuu"
+#~ msgid "Makes DirectX work with LuaJIT. Disable if it causes troubles."
+#~ msgstr "Hufanya DirectX kazi na LuaJIT. Lemaza ikiwa husababisha matatizo."
+
+#~ msgid "Name / Password"
+#~ msgstr "Jina / nenosiri"
+
#~ msgid "Name/Password"
#~ msgstr "Jina/nenosiri"
@@ -7478,6 +7830,9 @@ msgstr "muda wa kuisha wa cURL"
#~ msgid "Path to save screenshots at."
#~ msgstr "Njia ya kuokoa viwambo katika."
+#~ msgid "PvP enabled"
+#~ msgstr "PvP kuwezeshwa"
+
#~ msgid "Reset singleplayer world"
#~ msgstr "Weka upya singleplayer ulimwengu"
@@ -7489,6 +7844,16 @@ msgstr "muda wa kuisha wa cURL"
#~ msgid "Shadow limit"
#~ msgstr "Kikomo cha Mapblock"
+#, fuzzy
+#~ msgid ""
+#~ "Shadow offset (in pixels) of the fallback font. If 0, then shadow will "
+#~ "not be drawn."
+#~ msgstr "Fonti kivuli Sawazisha, kama 0 basi kivuli itakuwa kuchukuliwa."
+
+#, fuzzy
+#~ msgid "Special key"
+#~ msgstr "Zawadi muhimu"
+
#~ msgid "Start Singleplayer"
#~ msgstr "Kuanza Singleplayer"
@@ -7498,6 +7863,9 @@ msgstr "muda wa kuisha wa cURL"
#~ msgid "This font will be used for certain languages."
#~ msgstr "Fonti hii itatumika kwa lugha fulani."
+#~ msgid "To enable shaders the OpenGL driver needs to be used."
+#~ msgstr "Ili kuwezesha shaders OpenGL ya kiendeshaji inahitaji kutumiwa."
+
#~ msgid "Toggle Cinematic"
#~ msgstr "Togoa Cinematic"
@@ -7508,8 +7876,24 @@ msgstr "muda wa kuisha wa cURL"
#~ msgstr "Waving maji"
#, fuzzy
+#~ msgid ""
+#~ "Whether FreeType fonts are used, requires FreeType support to be compiled "
+#~ "in.\n"
+#~ "If disabled, bitmap and XML vectors fonts are used instead."
+#~ msgstr ""
+#~ "Kama freetype fonti hutumiwa, inahitaji msaada wa freetype kuwa "
+#~ "alikusanya katika."
+
+#, fuzzy
#~ msgid "Y of upper limit of lava in large caves."
#~ msgstr "Y ya upper kikomo ya kubwa pseudorandom cellars."
#~ msgid "Yes"
#~ msgstr "Ndio"
+
+#, fuzzy
+#~ msgid "You died."
+#~ msgstr "Umekufa."
+
+#~ msgid "needs_fallback_font"
+#~ msgstr "no"
diff --git a/po/th/minetest.po b/po/th/minetest.po
index 06e322f79..b7fb6fbf4 100644
--- a/po/th/minetest.po
+++ b/po/th/minetest.po
@@ -2,7 +2,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Thai (Minetest)\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-02-23 19:03+0100\n"
+"POT-Creation-Date: 2022-01-25 23:19+0100\n"
"PO-Revision-Date: 2020-07-08 08:41+0000\n"
"Last-Translator: TZTarzan <khunsatyptiphan@gmail.com>\n"
"Language-Team: Thai <https://hosted.weblate.org/projects/minetest/minetest/"
@@ -14,6 +14,47 @@ msgstr ""
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: Weblate 4.2-dev\n"
+#: builtin/client/chatcommands.lua
+#, fuzzy
+msgid "Clear the out chat queue"
+msgstr "ขนาดสูงสุดของคิวà¸à¸²à¸£à¹à¸Šà¸—นอà¸"
+
+#: builtin/client/chatcommands.lua
+msgid "Empty command."
+msgstr ""
+
+#: builtin/client/chatcommands.lua
+#, fuzzy
+msgid "Exit to main menu"
+msgstr "ออà¸à¸ˆà¸²à¸à¹€à¸¡à¸™à¸¹"
+
+#: builtin/client/chatcommands.lua
+#, fuzzy
+msgid "Invalid command: "
+msgstr "ท้องถิ่นคำสั่ง"
+
+#: builtin/client/chatcommands.lua
+msgid "Issued command: "
+msgstr ""
+
+#: builtin/client/chatcommands.lua
+#, fuzzy
+msgid "List online players"
+msgstr "เล่นคนเดียว"
+
+#: builtin/client/chatcommands.lua
+#, fuzzy
+msgid "Online players: "
+msgstr "เล่นคนเดียว"
+
+#: builtin/client/chatcommands.lua
+msgid "The out chat queue is now empty."
+msgstr ""
+
+#: builtin/client/chatcommands.lua
+msgid "This command is disabled by server."
+msgstr ""
+
#: builtin/client/death_formspec.lua src/client/game.cpp
msgid "Respawn"
msgstr "เà¸à¸´à¸”ใหม่"
@@ -22,11 +63,42 @@ msgstr "เà¸à¸´à¸”ใหม่"
msgid "You died"
msgstr "คุณตายà¹à¸¥à¹‰à¸§"
+#: builtin/common/chatcommands.lua
+#, fuzzy
+msgid "Available commands:"
+msgstr "ท้องถิ่นคำสั่ง"
+
+#: builtin/common/chatcommands.lua
+#, fuzzy
+msgid "Available commands: "
+msgstr "ท้องถิ่นคำสั่ง"
+
+#: builtin/common/chatcommands.lua
+msgid "Command not available: "
+msgstr ""
+
+#: builtin/common/chatcommands.lua
+msgid "Get help for commands"
+msgstr ""
+
+#: builtin/common/chatcommands.lua
+msgid ""
+"Use '.help <cmd>' to get more information, or '.help all' to list everything."
+msgstr ""
+
+#: builtin/common/chatcommands.lua
+msgid "[all | <cmd>]"
+msgstr ""
+
#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp
msgid "OK"
msgstr ""
#: builtin/fstk/ui.lua
+msgid "<none available>"
+msgstr ""
+
+#: builtin/fstk/ui.lua
#, fuzzy
msgid "An error occurred in a Lua script:"
msgstr "เà¸à¸´à¸”ข้อผิดพลาดในสคริปต์ Lua เช่น mod:"
@@ -237,6 +309,11 @@ msgid "Install missing dependencies"
msgstr "ไฟล์อ้างอิงที่เลือà¸à¹ƒà¸Šà¹‰à¹„ด้:"
#: builtin/mainmenu/dlg_contentstore.lua
+#, fuzzy
+msgid "Install: Unsupported file type or broken archive"
+msgstr "ติดตั้ง: ชนิดà¹à¸Ÿà¹‰à¸¡à¸—ี่ไม่สนับสนุน \"$1\" หรือเà¸à¸´à¸”à¸à¸²à¸£à¹€à¸ªà¸µà¸¢à¸«à¸²à¸¢"
+
+#: builtin/mainmenu/dlg_contentstore.lua
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Mods"
msgstr "ม็อด"
@@ -543,7 +620,7 @@ msgstr "< à¸à¸¥à¸±à¸šà¹„ปที่หน้าà¸à¸²à¸£à¸•ั้งค่า"
msgid "Browse"
msgstr "เรียà¸à¸”ู"
-#: builtin/mainmenu/dlg_settings_advanced.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_settings.lua
msgid "Disabled"
msgstr "ปิดà¸à¸²à¸£à¹ƒà¸Šà¹‰à¸‡à¸²à¸™à¹à¸¥à¹‰à¸§"
@@ -570,7 +647,8 @@ msgid "Offset"
msgstr "ค่าชดเชย"
#: builtin/mainmenu/dlg_settings_advanced.lua
-msgid "Persistance"
+#, fuzzy
+msgid "Persistence"
msgstr "ความมีอยู่"
#: builtin/mainmenu/dlg_settings_advanced.lua
@@ -589,7 +667,7 @@ msgstr "คืนค่าเริ่มต้น"
msgid "Scale"
msgstr "ขนาด"
-#: builtin/mainmenu/dlg_settings_advanced.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_online.lua
msgid "Search"
msgstr "ค้นหา"
@@ -681,14 +759,6 @@ msgid "Install Mod: Unable to find suitable folder name for modpack $1"
msgstr "ติดตั้ง Mod: ไม่สามารถค้นหาชื่อของโฟลเดอร์ที่เหมาะสมสำหรับ modpack $1"
#: builtin/mainmenu/pkgmgr.lua
-msgid "Install: Unsupported file type \"$1\" or broken archive"
-msgstr "ติดตั้ง: ชนิดà¹à¸Ÿà¹‰à¸¡à¸—ี่ไม่สนับสนุน \"$1\" หรือเà¸à¸´à¸”à¸à¸²à¸£à¹€à¸ªà¸µà¸¢à¸«à¸²à¸¢"
-
-#: builtin/mainmenu/pkgmgr.lua
-msgid "Install: file: \"$1\""
-msgstr "ติดตั้ง: ไฟล์: \"$1\""
-
-#: builtin/mainmenu/pkgmgr.lua
msgid "Unable to find a valid mod or modpack"
msgstr "ค้าหาไม่พบ mod หรือ modpack"
@@ -721,6 +791,41 @@ msgstr "à¸à¸²à¸£à¹€à¸‚ียนสคริปต์à¸à¸±à¹ˆà¸‡à¹„คลเอ
msgid "Try reenabling public serverlist and check your internet connection."
msgstr "ลองเปิดใช้งานเซิร์ฟเวอร์ลิสต์สาธารณะอีà¸à¸„รั้งà¹à¸¥à¸°à¸•รวจสอบà¸à¸²à¸£à¹€à¸Šà¸·à¹ˆà¸­à¸¡à¸•่ออินเทอร์เน็ต"
+#: builtin/mainmenu/tab_about.lua
+msgid "About"
+msgstr ""
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Active Contributors"
+msgstr "ผู้ร่วมให้ข้อมูล"
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Active renderer:"
+msgstr ""
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Core Developers"
+msgstr "นัà¸à¸žà¸±à¸’นาหลัà¸"
+
+#: builtin/mainmenu/tab_about.lua
+#, fuzzy
+msgid "Open User Data Directory"
+msgstr "เลือà¸à¹„ดเรà¸à¸—อรี"
+
+#: builtin/mainmenu/tab_about.lua
+msgid ""
+"Opens the directory that contains user-provided worlds, games, mods,\n"
+"and texture packs in a file manager / explorer."
+msgstr ""
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Previous Contributors"
+msgstr "ผู้สนับสนุนà¸à¹ˆà¸­à¸™à¸«à¸™à¹‰à¸²"
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Previous Core Developers"
+msgstr "นัà¸à¸žà¸±à¸’นาหลัà¸à¸à¹ˆà¸­à¸™à¸«à¸™à¹‰à¸²"
+
#: builtin/mainmenu/tab_content.lua
msgid "Browse online content"
msgstr "เรียà¸à¸”ูเนื้อหาออนไลน์"
@@ -761,37 +866,6 @@ msgstr "ถอนà¸à¸²à¸£à¸•ิดตั้งà¹à¸žà¸„เà¸à¸ˆ"
msgid "Use Texture Pack"
msgstr "ใช้พื้นผิว Texture"
-#: 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
-#, fuzzy
-msgid "Open User Data Directory"
-msgstr "เลือà¸à¹„ดเรà¸à¸—อรี"
-
-#: builtin/mainmenu/tab_credits.lua
-msgid ""
-"Opens the directory that contains user-provided worlds, games, mods,\n"
-"and texture packs in a file manager / explorer."
-msgstr ""
-
-#: builtin/mainmenu/tab_credits.lua
-msgid "Previous Contributors"
-msgstr "ผู้สนับสนุนà¸à¹ˆà¸­à¸™à¸«à¸™à¹‰à¸²"
-
-#: builtin/mainmenu/tab_credits.lua
-msgid "Previous Core Developers"
-msgstr "นัà¸à¸žà¸±à¸’นาหลัà¸à¸à¹ˆà¸­à¸™à¸«à¸™à¹‰à¸²"
-
#: builtin/mainmenu/tab_local.lua
msgid "Announce Server"
msgstr "ประà¸à¸²à¸¨ เซิร์ฟเวอร์"
@@ -820,7 +894,7 @@ msgstr "เซิร์ฟเวอร์"
msgid "Install games from ContentDB"
msgstr ""
-#: builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
msgid "Name"
msgstr ""
@@ -832,7 +906,7 @@ msgstr "ใหม่"
msgid "No world created or selected!"
msgstr "ยังไม่มีà¸à¸²à¸£à¸ªà¸£à¹‰à¸²à¸‡à¹‚ลภหรือยังไม่ได้เลือà¸!"
-#: builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
#, fuzzy
msgid "Password"
msgstr "รหัสผ่านใหม่"
@@ -841,7 +915,7 @@ msgstr "รหัสผ่านใหม่"
msgid "Play Game"
msgstr "เล่นเà¸à¸¡"
-#: builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
msgid "Port"
msgstr "พอร์ต"
@@ -863,8 +937,13 @@ msgid "Start Game"
msgstr "เริ่มเà¸à¸¡"
#: builtin/mainmenu/tab_online.lua
-msgid "Address / Port"
-msgstr "ที่อยู่ / พอร์ต"
+#, fuzzy
+msgid "Address"
+msgstr "-ที่อยู่: "
+
+#: builtin/mainmenu/tab_online.lua src/client/keycode.cpp
+msgid "Clear"
+msgstr "ล้าง"
#: builtin/mainmenu/tab_online.lua
msgid "Connect"
@@ -874,34 +953,46 @@ msgstr "เชื่อมต่อ"
msgid "Creative mode"
msgstr "โหมดสร้างสรรค์"
+#. ~ PvP = Player versus Player
#: builtin/mainmenu/tab_online.lua
-msgid "Damage enabled"
-msgstr "ความเสียหาย ที่เปิดใช้งาน"
+#, fuzzy
+msgid "Damage / PvP"
+msgstr "ความเสียหาย"
#: builtin/mainmenu/tab_online.lua
msgid "Del. Favorite"
msgstr "ลบรายà¸à¸²à¸£à¹‚ปรด"
#: builtin/mainmenu/tab_online.lua
-msgid "Favorite"
+#, fuzzy
+msgid "Favorites"
msgstr "ชื่นชอบ"
#: builtin/mainmenu/tab_online.lua
-msgid "Join Game"
-msgstr "เข้าร่วมเà¸à¸¡"
+msgid "Incompatible Servers"
+msgstr ""
#: builtin/mainmenu/tab_online.lua
-msgid "Name / Password"
-msgstr "ชื่อ / รหัสผ่าน"
+msgid "Join Game"
+msgstr "เข้าร่วมเà¸à¸¡"
#: builtin/mainmenu/tab_online.lua
msgid "Ping"
msgstr "เวลาตอบสนอง"
-#. ~ PvP = Player versus Player
#: builtin/mainmenu/tab_online.lua
-msgid "PvP enabled"
-msgstr "PvP เปิดใช้งาน"
+#, fuzzy
+msgid "Public Servers"
+msgstr "ประà¸à¸²à¸¨ เซิร์ฟเวอร์"
+
+#: builtin/mainmenu/tab_online.lua
+msgid "Refresh"
+msgstr ""
+
+#: builtin/mainmenu/tab_online.lua
+#, fuzzy
+msgid "Server Description"
+msgstr "คำอธิบายเซิร์ฟเวอร์"
#: builtin/mainmenu/tab_settings.lua
msgid "2x"
@@ -943,11 +1034,32 @@ msgstr "เปลี่ยนคีย์"
msgid "Connected Glass"
msgstr "เชื่อมต่อà¹à¸à¹‰à¸§"
+#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
+#, fuzzy
+msgid "Dynamic shadows"
+msgstr "เงาตัวอัà¸à¸©à¸£"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Dynamic shadows: "
+msgstr ""
+
#: builtin/mainmenu/tab_settings.lua
msgid "Fancy Leaves"
msgstr "ใบไม้"
#: builtin/mainmenu/tab_settings.lua
+msgid "High"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Low"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Medium"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
msgid "Mipmap"
msgstr "à¹à¸œà¸™à¸—ี่ย่อ"
@@ -1022,10 +1134,6 @@ msgstr "โคมไฟเรียบ"
msgid "Texturing:"
msgstr "พื้นผิว:"
-#: builtin/mainmenu/tab_settings.lua
-msgid "To enable shaders the OpenGL driver needs to be used."
-msgstr "à¸à¸²à¸£à¹€à¸›à¸´à¸”ใช้งานต้องมีโปรà¹à¸à¸£à¸¡à¸„วบคุม OpenGL ของ shaders ใช้."
-
#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
msgid "Tone Mapping"
msgstr "à¸à¸²à¸£à¹à¸¡à¸›à¹‚ทน"
@@ -1040,6 +1148,14 @@ msgid "Trilinear Filter"
msgstr "à¸à¸£à¸­à¸‡ trilinear"
#: builtin/mainmenu/tab_settings.lua
+msgid "Ultra High"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Very Low"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
msgid "Waving Leaves"
msgstr "ใบโบà¸"
@@ -1052,7 +1168,7 @@ msgstr "โบà¸à¹‚หนด"
msgid "Waving Plants"
msgstr "โบà¸à¹„ม้"
-#: src/client/client.cpp
+#: src/client/client.cpp src/client/game.cpp
msgid "Connection timed out."
msgstr "à¸à¸²à¸£à¹€à¸Šà¸·à¹ˆà¸­à¸¡à¸•่อหมดเวลา"
@@ -1081,7 +1197,8 @@ msgid "Connection error (timed out?)"
msgstr "ข้อผิดพลาดà¸à¸²à¸£à¹€à¸Šà¸·à¹ˆà¸­à¸¡à¸•่อ (หมดเวลา?)"
#: src/client/clientlauncher.cpp
-msgid "Could not find or load game \""
+#, fuzzy
+msgid "Could not find or load game: "
msgstr "ไม่สามารถค้นหา หรือโหลดเà¸à¸¡"
#: src/client/clientlauncher.cpp
@@ -1112,18 +1229,6 @@ msgstr "รหัสผ่านให้ไฟล์ไม่สามารถ
msgid "Provided world path doesn't exist: "
msgstr "โลà¸à¸¡à¸µà¹€à¸ªà¹‰à¸™à¹„ม่มี: "
-#. ~ DO NOT TRANSLATE THIS LITERALLY!
-#. This is a special string. Put either "no" or "yes"
-#. into the translation field (literally).
-#. Choose "yes" if the language requires use of the fallback
-#. font, "no" otherwise.
-#. The fallback font is (normally) required for languages with
-#. non-Latin script, like Chinese.
-#. When in doubt, test your translation.
-#: src/client/fontengine.cpp
-msgid "needs_fallback_font"
-msgstr "yes"
-
#: src/client/game.cpp
#, fuzzy
msgid ""
@@ -1138,14 +1243,6 @@ msgid "- Address: "
msgstr "-ที่อยู่: "
#: src/client/game.cpp
-msgid "- Creative Mode: "
-msgstr "-โหมดสร้างสรรค์: "
-
-#: src/client/game.cpp
-msgid "- Damage: "
-msgstr "-ความเสียหาย: "
-
-#: src/client/game.cpp
msgid "- Mode: "
msgstr "-โหมด: "
@@ -1168,6 +1265,16 @@ msgid "- Server Name: "
msgstr "-ชื่อเซิร์ฟเวอร์: "
#: src/client/game.cpp
+#, fuzzy
+msgid "A serialization error occurred:"
+msgstr "เà¸à¸´à¸”ข้อผิดพลาดขึ้น:"
+
+#: src/client/game.cpp
+#, c-format
+msgid "Access denied. Reason: %s"
+msgstr ""
+
+#: src/client/game.cpp
msgid "Automatic forward disabled"
msgstr "ปิดใช้งานà¸à¸²à¸£à¸ªà¹ˆà¸‡à¸•่ออัตโนมัติ"
@@ -1176,6 +1283,22 @@ msgid "Automatic forward enabled"
msgstr "เปิดใช้งานà¸à¸²à¸£à¸ªà¹ˆà¸‡à¸•่ออัตโนมัติ"
#: src/client/game.cpp
+msgid "Block bounds hidden"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Block bounds shown for all blocks"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Block bounds shown for current block"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Block bounds shown for nearby blocks"
+msgstr ""
+
+#: src/client/game.cpp
msgid "Camera update disabled"
msgstr "ปิดใช้งานà¸à¸²à¸£à¸­à¸±à¸›à¹€à¸”ตà¸à¸¥à¹‰à¸­à¸‡à¹à¸¥à¹‰à¸§"
@@ -1184,6 +1307,10 @@ msgid "Camera update enabled"
msgstr "เปิดใช้งานà¸à¸²à¸£à¸­à¸±à¸›à¹€à¸”ตà¸à¸¥à¹‰à¸­à¸‡à¹à¸¥à¹‰à¸§"
#: src/client/game.cpp
+msgid "Can't show block bounds (need 'basic_debug' privilege)"
+msgstr ""
+
+#: src/client/game.cpp
msgid "Change Password"
msgstr "เปลี่ยนรหัสผ่าน"
@@ -1196,6 +1323,11 @@ msgid "Cinematic mode enabled"
msgstr "เปิดใช้งานโหมดภาพยนตร์"
#: src/client/game.cpp
+#, fuzzy
+msgid "Client disconnected"
+msgstr "ลูà¸à¸„้า modding"
+
+#: src/client/game.cpp
msgid "Client side scripting is disabled"
msgstr "à¸à¸²à¸£à¹€à¸‚ียนสคริปต์à¸à¸±à¹ˆà¸‡à¹„คลเอ็นต์ถูà¸à¸›à¸´à¸”ใช้งาน"
@@ -1204,6 +1336,10 @@ msgid "Connecting to server..."
msgstr "เชื่อมต่อà¸à¸±à¸šà¹€à¸‹à¸´à¸£à¹Œà¸Ÿà¹€à¸§à¸­à¸£à¹Œ"
#: src/client/game.cpp
+msgid "Connection failed for unknown reason"
+msgstr ""
+
+#: src/client/game.cpp
msgid "Continue"
msgstr "ต่อ"
@@ -1241,6 +1377,11 @@ msgstr ""
"-%s9: à¹à¸Šà¸—\n"
#: src/client/game.cpp
+#, c-format
+msgid "Couldn't resolve address: %s"
+msgstr ""
+
+#: src/client/game.cpp
msgid "Creating client..."
msgstr "สร้างไคลเอ็นต์..."
@@ -1369,6 +1510,11 @@ msgid "Minimap currently disabled by game or mod"
msgstr "à¹à¸œà¸™à¸—ี่ย่อในปัจจุบันถูà¸à¸›à¸´à¸”ใช้งานโดยเà¸à¸¡à¸«à¸£à¸·à¸­à¸•ัวดัดà¹à¸›à¸¥à¸‡"
#: src/client/game.cpp
+#, fuzzy
+msgid "Multiplayer"
+msgstr "เล่นคนเดียว"
+
+#: src/client/game.cpp
msgid "Noclip mode disabled"
msgstr "ปิดใช้งานโหมด Noclip"
@@ -1443,6 +1589,21 @@ msgstr "เสียงไม่ปิดเสียง"
#: src/client/game.cpp
#, c-format
+msgid "The server is probably running a different version of %s."
+msgstr ""
+
+#: src/client/game.cpp
+#, c-format
+msgid "Unable to connect to %s because IPv6 is disabled"
+msgstr ""
+
+#: src/client/game.cpp
+#, c-format
+msgid "Unable to listen on %s because IPv6 is disabled"
+msgstr ""
+
+#: src/client/game.cpp
+#, c-format
msgid "Viewing range changed to %d"
msgstr "ช่วงà¸à¸²à¸£à¸”ูเปลี่ยนเป็น %d1"
@@ -1515,10 +1676,6 @@ msgid "Caps Lock"
msgstr "Caps Lock"
#: src/client/keycode.cpp
-msgid "Clear"
-msgstr "ล้าง"
-
-#: src/client/keycode.cpp
msgid "Control"
msgstr "ควบคุม"
@@ -1804,6 +1961,15 @@ msgstr "à¹à¸œà¸™à¸—ี่ย่อในโหมด surface, ซูม x1"
msgid "Minimap in texture mode"
msgstr "ขนาดพื้นผิวขั้นต่ำ"
+#: src/gui/guiChatConsole.cpp
+#, fuzzy
+msgid "Failed to open webpage"
+msgstr "ไม่สามารถดาวน์โหลด $1"
+
+#: src/gui/guiChatConsole.cpp
+msgid "Opening webpage"
+msgstr ""
+
#: src/gui/guiConfirmRegistration.cpp src/gui/guiPasswordChange.cpp
msgid "Passwords do not match!"
msgstr "รหัสผ่านไม่ตรงà¸à¸±à¸š!"
@@ -1831,7 +1997,8 @@ msgid "Proceed"
msgstr "ดำเนินà¸à¸²à¸£"
#: src/gui/guiKeyChangeMenu.cpp
-msgid "\"Special\" = climb down"
+#, fuzzy
+msgid "\"Aux1\" = climb down"
msgstr "\"Special\" = ปีนลง"
#: src/gui/guiKeyChangeMenu.cpp
@@ -1844,10 +2011,18 @@ msgid "Automatic jumping"
msgstr "à¸à¸£à¸°à¹‚ดด อัตโนมัติ"
#: src/gui/guiKeyChangeMenu.cpp
+msgid "Aux1"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
msgid "Backward"
msgstr "ย้อนหลัง"
#: src/gui/guiKeyChangeMenu.cpp
+msgid "Block bounds"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
msgid "Change camera"
msgstr "เปลี่ยนà¸à¸¥à¹‰à¸­à¸‡"
@@ -1936,10 +2111,6 @@ msgid "Sneak"
msgstr "à¹à¸­à¸š"
#: src/gui/guiKeyChangeMenu.cpp
-msgid "Special"
-msgstr "พิเศษ"
-
-#: src/gui/guiKeyChangeMenu.cpp
msgid "Toggle HUD"
msgstr "สลับ HUD"
@@ -2001,7 +2172,8 @@ msgid "Muted"
msgstr "เสียง"
#: src/gui/guiVolumeChange.cpp
-msgid "Sound Volume: "
+#, fuzzy, c-format
+msgid "Sound Volume: %d%%"
msgstr "ระดับเสียง "
#. ~ Imperative, as in "Enter/type in text".
@@ -2026,9 +2198,10 @@ msgstr ""
"หาà¸à¸›à¸´à¸”ใช้งานจอยสติà¸à¹€à¸ªà¸¡à¸·à¸­à¸™à¸ˆà¸°à¸­à¸¢à¸¹à¹ˆà¸—ี่ตำà¹à¸«à¸™à¹ˆà¸‡à¹à¸£à¸à¸‚องสัมผัส"
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
-"(Android) Use virtual joystick to trigger \"aux\" button.\n"
-"If enabled, virtual joystick will also tap \"aux\" button when out of main "
+"(Android) Use virtual joystick to trigger \"Aux1\" button.\n"
+"If enabled, virtual joystick will also tap \"Aux1\" button when out of main "
"circle."
msgstr ""
"(Android) ใช้จอยสติ๊à¸à¹€à¸ªà¸¡à¸·à¸­à¸™à¹€à¸žà¸·à¹ˆà¸­à¹€à¸£à¸µà¸¢à¸à¸›à¸¸à¹ˆà¸¡ \"aux\"\n"
@@ -2231,6 +2404,10 @@ msgstr ""
"4k."
#: src/settings_translation_file.cpp
+msgid "Adjust the detected display density, used for scaling UI elements."
+msgstr ""
+
+#: src/settings_translation_file.cpp
#, c-format
msgid ""
"Adjusts the density of the floatland layer.\n"
@@ -2345,6 +2522,16 @@ msgid "Autoscaling mode"
msgstr "โหมดปรับอัตโนมัติ"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Aux1 key"
+msgstr "ปุ่มà¸à¸£à¸°à¹‚ดด"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Aux1 key for climbing/descending"
+msgstr "คีย์พิเศษสำหรับà¸à¸²à¸£à¸›à¸µà¸™à¹€à¸‚า/เรียง"
+
+#: src/settings_translation_file.cpp
msgid "Backward key"
msgstr "ปุ่มย้อนà¸à¸¥à¸±à¸š"
@@ -2389,10 +2576,6 @@ msgid "Biome noise"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Bits per pixel (aka color depth) in fullscreen mode."
-msgstr "บิตต่อพิà¸à¹€à¸‹à¸¥ (ความลึà¸à¸‚องสี aka) ในโหมดเต็มหน้าจอ."
-
-#: src/settings_translation_file.cpp
msgid "Block send optimize distance"
msgstr ""
@@ -2500,6 +2683,15 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Chat command time message threshold"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Chat commands"
+msgstr "คำสั่ง"
+
+#: src/settings_translation_file.cpp
#, fuzzy
msgid "Chat font size"
msgstr "ขนาดตัวอัà¸à¸©à¸£"
@@ -2535,8 +2727,9 @@ msgid "Chat toggle key"
msgstr "ปุ่มสลับà¸à¸²à¸£à¹à¸Šà¸—"
#: src/settings_translation_file.cpp
-msgid "Chatcommands"
-msgstr ""
+#, fuzzy
+msgid "Chat weblinks"
+msgstr "สนทนาà¹à¸ªà¸”ง"
#: src/settings_translation_file.cpp
msgid "Chunk size"
@@ -2555,6 +2748,12 @@ msgid "Clean transparent textures"
msgstr "ทำความสะอาดพื้นผิวโปร่งใส"
#: src/settings_translation_file.cpp
+msgid ""
+"Clickable weblinks (middle-click or Ctrl+left-click) enabled in chat console "
+"output."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Client"
msgstr "ไคลเอนต์"
@@ -2599,6 +2798,11 @@ msgid "Colored fog"
msgstr "หมอà¸à¸ªà¸µ"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Colored shadows"
+msgstr "หมอà¸à¸ªà¸µ"
+
+#: src/settings_translation_file.cpp
msgid ""
"Comma-separated list of flags to hide in the content repository.\n"
"\"nonfree\" can be used to hide packages which do not qualify as 'free "
@@ -2626,6 +2830,22 @@ msgid "Command key"
msgstr "คีย์คำสั่ง"
#: src/settings_translation_file.cpp
+msgid ""
+"Compression level to use when saving mapblocks to disk.\n"
+"-1 - use default compression level\n"
+"0 - least compression, fastest\n"
+"9 - best compression, slowest"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Compression level to use when sending mapblocks to the client.\n"
+"-1 - use default compression level\n"
+"0 - least compression, fastest\n"
+"9 - best compression, slowest"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Connect glass"
msgstr "เชื่อมà¸à¸£à¸°à¸ˆà¸"
@@ -2719,7 +2939,7 @@ msgstr "Crosshair อัลฟา"
#, fuzzy
msgid ""
"Crosshair alpha (opaqueness, between 0 and 255).\n"
-"Also controls the object crosshair color"
+"This also applies to the object crosshair."
msgstr "Crosshair อัลฟา (ความทึบà¹à¸ªà¸‡à¸£à¸°à¸«à¸§à¹ˆà¸²à¸‡ 0 ถึง 255)."
#: src/settings_translation_file.cpp
@@ -2799,8 +3019,9 @@ msgstr "เà¸à¸¡à¹€à¸£à¸´à¹ˆà¸¡à¸•้น"
#: src/settings_translation_file.cpp
msgid ""
-"Default timeout for cURL, stated in milliseconds.\n"
-"Only has an effect if compiled with cURL."
+"Define shadow filtering quality.\n"
+"This simulates the soft shadows effect by applying a PCF or Poisson disk\n"
+"but also uses more resources."
msgstr ""
#: src/settings_translation_file.cpp
@@ -2921,6 +3142,10 @@ msgid "Disallow empty passwords"
msgstr "ไม่อนุà¸à¸²à¸•รหัสผ่านที่ว่างเปล่า"
#: src/settings_translation_file.cpp
+msgid "Display Density Scaling Factor"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Domain name of server, to be displayed in the serverlist."
msgstr "ชื่อโดเมนของเซิร์ฟเวอร์ที่จะà¹à¸ªà¸”งในรายà¸à¸²à¸£à¹€à¸‹à¸´à¸£à¹Œà¸Ÿà¹€à¸§à¸­à¸£à¹Œ."
@@ -2967,6 +3192,19 @@ msgstr ""
"à¸à¸²à¸£à¸ªà¸™à¸±à¸šà¸ªà¸™à¸¸à¸™à¸™à¸µà¹‰à¹€à¸›à¹‡à¸™à¸à¸²à¸£à¸—ดลองà¹à¸¥à¸° API สามารถเปลี่ยนà¹à¸›à¸¥à¸‡à¹„ด้"
#: src/settings_translation_file.cpp
+msgid ""
+"Enable Poisson disk filtering.\n"
+"On true uses Poisson disk to make \"soft shadows\". Otherwise uses PCF "
+"filtering."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable colored shadows.\n"
+"On true translucent nodes cast colored shadows. This is expensive."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Enable console window"
msgstr "เปิดใช้งานหน้าต่างคอนโซล"
@@ -3091,6 +3329,12 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Enables tradeoffs that reduce CPU load or increase rendering performance\n"
+"at the expense of minor visual glitches that do not impact game playability."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Engine profiling data print interval"
msgstr ""
@@ -3132,18 +3376,6 @@ msgid "Fallback font path"
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 "ปุ่มลัด"
@@ -3160,8 +3392,9 @@ msgid "Fast movement"
msgstr "à¸à¸²à¸£à¹€à¸„ลื่อนไหวเร็ว"
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
-"Fast movement (via the \"special\" key).\n"
+"Fast movement (via the \"Aux1\" key).\n"
"This requires the \"fast\" privilege on the server."
msgstr ""
"à¸à¸²à¸£à¹€à¸„ลื่อนไหวที่รวดเร็ว (ผ่านคีย์ 'พิเศษ').\n"
@@ -3197,11 +3430,12 @@ msgid "Filmic tone mapping"
msgstr "à¸à¸²à¸£à¸—ำà¹à¸œà¸™à¸—ี่โทนภาพยนตร์"
#: src/settings_translation_file.cpp
+#, fuzzy
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."
+"which PNG optimizers usually discard, often resulting in dark or\n"
+"light edges to transparent textures. Apply a filter to clean that up\n"
+"at texture load time. This is automatically enabled if mipmapping is enabled."
msgstr ""
"พื้นผิวที่ถูà¸à¸à¸£à¸­à¸‡à¸ªà¸²à¸¡à¸²à¸£à¸–ผสมผสานค่า RGB à¸à¸±à¸šà¹€à¸žà¸·à¹ˆà¸­à¸™à¸šà¹‰à¸²à¸™à¸—ี่โปร่งใสได้อย่างสมบูรณ์\n"
"เครื่องมือเพิ่มประสิทธิภาพ PNG ใดที่มัà¸à¸ˆà¸°à¸¥à¸°à¸—ิ้งซึ่งบางครั้งส่งผลให้มืดหรือ\n"
@@ -3299,15 +3533,15 @@ msgid "Font size"
msgstr "ขนาดตัวอัà¸à¸©à¸£"
#: src/settings_translation_file.cpp
-msgid "Font size of the default font in point (pt)."
+msgid "Font size divisible by"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Font size of the fallback font in point (pt)."
+msgid "Font size of the default font where 1 unit = 1 pixel at 96 DPI"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Font size of the monospace font in point (pt)."
+msgid "Font size of the monospace font where 1 unit = 1 pixel at 96 DPI"
msgstr ""
#: src/settings_translation_file.cpp
@@ -3318,6 +3552,17 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"For pixel-style fonts that do not scale well, this ensures that font sizes "
+"used\n"
+"with this font will always be divisible by this value, in pixels. For "
+"instance,\n"
+"a pixel font 16 pixels tall should have this set to 16, so it will only ever "
+"be\n"
+"sized 16, 32, 48, etc., so a mod requesting a size of 25 will get 32."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Format of player chat messages. The following strings are valid "
"placeholders:\n"
"@name, @message, @timestamp (optional)"
@@ -3376,10 +3621,6 @@ msgid "Fraction of the visible distance at which fog starts to be rendered"
msgstr "เศษส่วนของระยะทางที่มองเห็นซึ่งมีหมอà¸à¹€à¸£à¸´à¹ˆà¸¡à¹à¸ªà¸”ง"
#: src/settings_translation_file.cpp
-msgid "FreeType fonts"
-msgstr "à¹à¸šà¸šà¸­à¸±à¸à¸©à¸£à¸›à¸£à¸°à¹€à¸ à¸— FreeType"
-
-#: src/settings_translation_file.cpp
msgid ""
"From how far blocks are generated for clients, stated in mapblocks (16 "
"nodes)."
@@ -3404,10 +3645,6 @@ msgid "Full screen"
msgstr "เต็มจอ"
#: src/settings_translation_file.cpp
-msgid "Full screen BPP"
-msgstr "BPP เต็มหน้าจอ"
-
-#: src/settings_translation_file.cpp
msgid "Fullscreen mode."
msgstr "โหมดเต็มหน้าจอ"
@@ -3431,7 +3668,7 @@ msgstr ""
msgid ""
"Global map generation attributes.\n"
"In Mapgen v6 the 'decorations' flag controls all decorations except trees\n"
-"and junglegrass, in all other mapgens this flag controls all decorations."
+"and jungle grass, in all other mapgens this flag controls all decorations."
msgstr ""
#: src/settings_translation_file.cpp
@@ -3502,7 +3739,9 @@ msgid "Heat noise"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Height component of the initial window size."
+#, fuzzy
+msgid ""
+"Height component of the initial window size. Ignored in fullscreen mode."
msgstr "องค์ประà¸à¸­à¸šà¸„วามสูงของขนาดหน้าต่างเริ่มต้น"
#: src/settings_translation_file.cpp
@@ -3514,10 +3753,6 @@ msgid "Height select noise"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "High-precision FPU"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Hill steepness"
msgstr ""
@@ -3749,9 +3984,9 @@ msgstr ""
"เพื่อไม่ให้สิ้นเปลืองพลังงานของ CPU อย่างไม่มีประโยชน์"
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
-"If disabled, \"special\" key is used to fly fast if both fly and fast mode "
-"are\n"
+"If disabled, \"Aux1\" key is used to fly fast if both fly and fast mode are\n"
"enabled."
msgstr ""
"ถ้าปิดใช้งาน ใช้คีย์ 'พิเศษ' บินถ้าทั้งบิน à¹à¸¥à¸°à¹‚หมดที่รวดเร็วเป็น \n"
@@ -3776,9 +4011,10 @@ msgstr ""
"ต้องมีสิทธิ์ 'noclip' บนเซิร์ฟเวอร์."
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
-"If enabled, \"special\" key instead of \"sneak\" key is used for climbing "
-"down and\n"
+"If enabled, \"Aux1\" key instead of \"Sneak\" key is used for climbing down "
+"and\n"
"descending."
msgstr "ถ้าเปิดใช้งาน ใช้คีย์ 'พิเศษ' à¹à¸—น 'à¹à¸­à¸š' คีย์สำหรับปีนลงà¹à¸¥à¸° จาà¸."
@@ -3828,6 +4064,12 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"If the execution of a chat command takes longer than this specified time in\n"
+"seconds, add the time information to the chat command message"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"If the file size of debug.txt exceeds the number of megabytes specified in\n"
"this setting when it is opened, the file is moved to debug.txt.1,\n"
"deleting an older debug.txt.1 if it exists.\n"
@@ -3873,7 +4115,7 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Instrument chatcommands on registration."
+msgid "Instrument chat commands on registration."
msgstr ""
#: src/settings_translation_file.cpp
@@ -3960,7 +4202,7 @@ msgstr "ช่วงเวลาà¸à¸²à¸£à¸—ำซ้ำปุ่มจอยส
#: src/settings_translation_file.cpp
#, fuzzy
-msgid "Joystick deadzone"
+msgid "Joystick dead zone"
msgstr "ประเภทของจอยสติ๊à¸"
#: src/settings_translation_file.cpp
@@ -4949,10 +5191,6 @@ msgstr ""
"ทำให้หมอà¸à¹à¸¥à¸°à¸ªà¸µà¸‚องท้องฟ้าขึ้นอยู่à¸à¸±à¸šà¹€à¸§à¸¥à¸²à¸à¸¥à¸²à¸‡à¸§à¸±à¸™ (รุ่งอรุณ / พระอาทิตย์ตà¸) à¹à¸¥à¸°à¸—ิศทางà¸à¸²à¸£à¸”ู."
#: src/settings_translation_file.cpp
-msgid "Makes DirectX work with LuaJIT. Disable if it causes troubles."
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Makes all liquids opaque"
msgstr "ทำให้ของเหลวทั้งหมดขุ่น"
@@ -5024,6 +5262,10 @@ msgid "Map save interval"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Map shadows update frames"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Mapblock limit"
msgstr "ข้อ จำà¸à¸±à¸” Mapblock"
@@ -5133,6 +5375,10 @@ msgid "Maximum FPS when the window is not focused, or when the game is paused."
msgstr "FPS สูงสุดเมื่อเà¸à¸¡à¸«à¸¢à¸¸à¸”ชั่วคราว"
#: src/settings_translation_file.cpp
+msgid "Maximum distance to render shadows."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Maximum forceloaded blocks"
msgstr ""
@@ -5250,7 +5496,15 @@ msgstr ""
"0 เพื่อปิดใช้งานà¸à¸²à¸£à¸ˆà¸±à¸”คิวà¹à¸¥à¸° -1 เพื่อทำให้ขนาดของคิวไม่ จำà¸à¸±à¸”."
#: src/settings_translation_file.cpp
-msgid "Maximum time in ms a file download (e.g. a mod download) may take."
+msgid ""
+"Maximum time a file download (e.g. a mod download) may take, stated in "
+"milliseconds."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum time an interactive request (e.g. server list fetch) may take, "
+"stated in milliseconds."
msgstr ""
#: src/settings_translation_file.cpp
@@ -5315,7 +5569,8 @@ msgid "Mod channels"
msgstr "ช่องทาง Mod"
#: src/settings_translation_file.cpp
-msgid "Modifies the size of the hudbar elements."
+#, fuzzy
+msgid "Modifies the size of the HUD elements."
msgstr "ปรับเปลี่ยนขนาดขององค์ประà¸à¸­à¸š Hudbar."
#: src/settings_translation_file.cpp
@@ -5327,6 +5582,11 @@ msgid "Monospace font size"
msgstr "ขนาดตัวอัà¸à¸©à¸£ Monospace"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Monospace font size divisible by"
+msgstr "ขนาดตัวอัà¸à¸©à¸£ Monospace"
+
+#: src/settings_translation_file.cpp
msgid "Mountain height noise"
msgstr ""
@@ -5453,7 +5713,7 @@ 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"
+"This is a trade-off between SQLite transaction overhead and\n"
"memory consumption (4096=100MB, as a rule of thumb)."
msgstr ""
@@ -5472,21 +5732,18 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Opaqueness (alpha) of the shadow behind the fallback font, between 0 and 255."
-msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid ""
"Open the pause menu when the window's focus is lost. Does not pause if a "
"formspec is\n"
"open."
msgstr "เปิดเมนูหยุดชั่วคราวเมื่อโฟà¸à¸±à¸ªà¸‚องหน้าต่างหายไป ไม่หยุดถ้า formspec คือ เปิด."
#: src/settings_translation_file.cpp
+msgid "Optional override for chat weblink color."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid ""
-"Path of the fallback font.\n"
-"If “freetype†setting is enabled: Must be a TrueType font.\n"
-"If “freetype†setting is disabled: Must be a bitmap or XML vectors font.\n"
+"Path of the fallback font. Must be a TrueType font.\n"
"This font will be used for certain languages or if the default font is "
"unavailable."
msgstr ""
@@ -5509,17 +5766,13 @@ msgstr "เส้นทางไปยังไดเรà¸à¸—อรีพื้
#: src/settings_translation_file.cpp
msgid ""
-"Path to the default font.\n"
-"If “freetype†setting is enabled: Must be a TrueType font.\n"
-"If “freetype†setting is disabled: Must be a bitmap or XML vectors font.\n"
+"Path to the default font. Must be a TrueType font.\n"
"The fallback font will be used if the font cannot be loaded."
msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Path to the monospace font.\n"
-"If “freetype†setting is enabled: Must be a TrueType font.\n"
-"If “freetype†setting is disabled: Must be a bitmap or XML vectors font.\n"
+"Path to the monospace font. Must be a TrueType font.\n"
"This font is used for e.g. the console and profiler screen."
msgstr ""
@@ -5578,6 +5831,11 @@ msgid "Player versus player"
msgstr "ผู้เล่นà¸à¸±à¸šà¸œà¸¹à¹‰à¹€à¸¥à¹ˆà¸™"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Poisson filtering"
+msgstr "à¸à¸²à¸£à¸à¸£à¸­à¸‡ Bilinear"
+
+#: src/settings_translation_file.cpp
msgid ""
"Port to connect to (UDP).\n"
"Note that the port field in the main menu overrides this setting."
@@ -5626,9 +5884,9 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"Prometheus listener address.\n"
-"If minetest is compiled with ENABLE_PROMETHEUS option enabled,\n"
+"If Minetest is compiled with ENABLE_PROMETHEUS option enabled,\n"
"enable metrics listener for Prometheus on that address.\n"
-"Metrics can be fetch on http://127.0.0.1:30000/metrics"
+"Metrics can be fetched on http://127.0.0.1:30000/metrics"
msgstr ""
#: src/settings_translation_file.cpp
@@ -5929,6 +6187,35 @@ msgid "Set the maximum character length of a chat message sent by clients."
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Set the shadow strength.\n"
+"Lower value means lighter shadows, higher value means darker shadows."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set the soft shadow radius size.\n"
+"Lower values mean sharper shadows, bigger values mean softer shadows.\n"
+"Minimum value: 1.0; maximum value: 10.0"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set the tilt of Sun/Moon orbit in degrees.\n"
+"Value of 0 means no tilt / vertical orbit.\n"
+"Minimum value: 0.0; maximum value: 60.0"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid ""
+"Set to true to enable Shadow Mapping.\n"
+"Requires shaders to be enabled."
+msgstr ""
+"ตั้งค่าเป็นจริงช่วยให้ใบโบà¸\n"
+"ต้องมี shaders เพื่อเปิดใช้งาน"
+
+#: src/settings_translation_file.cpp
#, fuzzy
msgid ""
"Set to true to enable waving leaves.\n"
@@ -5956,6 +6243,13 @@ msgstr ""
"ต้องมี shaders เพื่อเปิดใช้งาน"
#: src/settings_translation_file.cpp
+msgid ""
+"Sets shadow texture quality to 32 bits.\n"
+"On false, 16 bits texture will be used.\n"
+"This can cause much more artifacts in the shadow."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Shader path"
msgstr "เส้นทาง Shader"
@@ -5972,17 +6266,32 @@ msgstr ""
#: src/settings_translation_file.cpp
#, fuzzy
+msgid "Shadow filter quality"
+msgstr "คุณภาพของภาพหน้าจอ"
+
+#: src/settings_translation_file.cpp
+msgid "Shadow map max distance in nodes to render shadows"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Shadow map texture in 32 bits"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Shadow map texture size"
+msgstr "ขนาดพื้นผิวขั้นต่ำ"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
"Shadow offset (in pixels) of the default font. If 0, then shadow will not be "
"drawn."
msgstr "เงาà¹à¸šà¸šà¸­à¸±à¸à¸©à¸£à¸Šà¸”เชยถ้า 0 à¹à¸¥à¹‰à¸§à¹€à¸‡à¸²à¸ˆà¸°à¹„ม่ถูà¸à¸§à¸²à¸”."
#: src/settings_translation_file.cpp
-#, fuzzy
-msgid ""
-"Shadow offset (in pixels) of the fallback font. If 0, then shadow will not "
-"be drawn."
-msgstr "เงาà¹à¸šà¸šà¸­à¸±à¸à¸©à¸£à¸Šà¸”เชยถ้า 0 à¹à¸¥à¹‰à¸§à¹€à¸‡à¸²à¸ˆà¸°à¹„ม่ถูà¸à¸§à¸²à¸”."
+msgid "Shadow strength"
+msgstr ""
#: src/settings_translation_file.cpp
msgid "Shape of the minimap. Enabled = round, disabled = square."
@@ -6003,7 +6312,7 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Show nametag backgrounds by default"
+msgid "Show name tag backgrounds by default"
msgstr ""
#: src/settings_translation_file.cpp
@@ -6031,6 +6340,10 @@ msgstr ""
"ด้ายจึงลดà¸à¸£à¸°à¸§à¸™à¸à¸£à¸°à¸§à¸²à¸¢à¹ƒà¸ˆ"
#: src/settings_translation_file.cpp
+msgid "Sky Body Orbit Tilt"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Slice w"
msgstr ""
@@ -6087,16 +6400,13 @@ msgid "Sneaking speed, in nodes per second."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Sound"
-msgstr "เสียง"
-
-#: src/settings_translation_file.cpp
-msgid "Special key"
-msgstr "รหัสพิเศษ"
+#, fuzzy
+msgid "Soft shadow radius"
+msgstr "ตัวอัà¸à¸©à¸£à¹€à¸‡à¸²à¸­à¸±à¸¥à¸Ÿà¸²"
#: src/settings_translation_file.cpp
-msgid "Special key for climbing/descending"
-msgstr "คีย์พิเศษสำหรับà¸à¸²à¸£à¸›à¸µà¸™à¹€à¸‚า/เรียง"
+msgid "Sound"
+msgstr "เสียง"
#: src/settings_translation_file.cpp
msgid ""
@@ -6118,6 +6428,14 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Spread a complete update of shadow map over given amount of frames.\n"
+"Higher values might make shadows laggy, lower values\n"
+"will consume more resources.\n"
+"Minimum value: 1; maximum value: 16"
+msgstr ""
+
+#: src/settings_translation_file.cpp
#, fuzzy
msgid ""
"Spread of light curve boost range.\n"
@@ -6229,6 +6547,13 @@ msgstr "เส้นทางพื้นผิว"
#: src/settings_translation_file.cpp
msgid ""
+"Texture size to render the shadow map on.\n"
+"This must be a power of two.\n"
+"Bigger numbers create better shadows but it is also more expensive."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Textures on a node may be aligned either to the node or to the world.\n"
"The former mode suits better things like machines, furniture, etc., while\n"
"the latter makes stairs and microblocks fit surroundings better.\n"
@@ -6249,7 +6574,7 @@ msgstr ""
#: src/settings_translation_file.cpp
#, fuzzy
-msgid "The deadzone of the joystick"
+msgid "The dead zone of the joystick"
msgstr "ตัวระบุของจอยสติ๊à¸à¸—ี่จะใช้"
#: src/settings_translation_file.cpp
@@ -6310,7 +6635,7 @@ msgstr ""
#: src/settings_translation_file.cpp
#, fuzzy
msgid ""
-"The rendering back-end for Irrlicht.\n"
+"The rendering back-end.\n"
"A restart is required after changing this.\n"
"Note: On Android, stick with OGLES1 if unsure! App may fail to start "
"otherwise.\n"
@@ -6324,9 +6649,10 @@ msgstr ""
"รองรับ shader ในขณะนี้"
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
"The sensitivity of the joystick axes for moving the\n"
-"ingame view frustum around."
+"in-game view frustum around."
msgstr ""
"ความไวของà¹à¸à¸™à¸ˆà¸­à¸¢à¸ªà¸•ิ๊à¸à¸ªà¸³à¸«à¸£à¸±à¸šà¸à¸²à¸£à¹€à¸¥à¸·à¹ˆà¸­à¸™\n"
"มุมมอง ingame frustum รอบ ๆ."
@@ -6433,6 +6759,10 @@ msgid "Touch screen threshold"
msgstr "ขีด จำà¸à¸±à¸” หน้าจอสัมผัส"
#: src/settings_translation_file.cpp
+msgid "Tradeoffs for performance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Trees noise"
msgstr ""
@@ -6510,8 +6840,9 @@ msgid "Use bilinear filtering when scaling textures."
msgstr "ใช้à¸à¸²à¸£à¸à¸£à¸­à¸‡ bilinear เมื่อปรับขนาดพื้นผิว"
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
-"Use mip mapping to scale textures. May slightly increase performance,\n"
+"Use mipmapping to scale textures. May slightly increase performance,\n"
"especially when using a high resolution texture pack.\n"
"Gamma correct downscaling is not supported."
msgstr ""
@@ -6629,7 +6960,8 @@ msgid "Viewing range"
msgstr "ดูช่วง"
#: src/settings_translation_file.cpp
-msgid "Virtual joystick triggers aux button"
+#, fuzzy
+msgid "Virtual joystick triggers Aux1 button"
msgstr "จอยสติà¸à¹€à¸ªà¸¡à¸·à¸­à¸™à¹€à¸£à¸µà¸¢à¸à¹ƒà¸Šà¹‰à¸›à¸¸à¹ˆà¸¡ aux"
#: src/settings_translation_file.cpp
@@ -6707,6 +7039,11 @@ msgid "Waving plants"
msgstr "โบà¸à¸•้นไม้"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Weblink color"
+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"
@@ -6729,14 +7066,14 @@ msgstr ""
"รองรับà¸à¸²à¸£à¸”าวน์โหลดพื้นผิวอย่างถูà¸à¸•้องจาà¸à¸®à¸²à¸£à¹Œà¸”à¹à¸§à¸£à¹Œ"
#: src/settings_translation_file.cpp
+#, fuzzy
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.\n"
+"memory. Powers of 2 are recommended. This setting is ONLY applied if\n"
+"bilinear/trilinear/anisotropic filtering is enabled.\n"
"This is also used as the base node texture size for world-aligned\n"
"texture autoscaling."
msgstr ""
@@ -6752,16 +7089,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Whether FreeType fonts are used, requires FreeType support to be compiled "
-"in.\n"
-"If disabled, bitmap and XML vectors fonts are used instead."
-msgstr ""
-"ไม่ว่าจะใช้ฟอนต์ FreeType ต้องมีà¸à¸²à¸£à¸ªà¸™à¸±à¸šà¸ªà¸™à¸¸à¸™ FreeType เพื่อรวบรวม\n"
-"หาà¸à¸›à¸´à¸”ใช้งาน ฟอนต์บิตà¹à¸¡à¸›à¹à¸¥à¸°à¹€à¸­à¹‡à¸à¸‹à¹Œà¹€à¸­à¹‡à¸¡à¹à¸­à¸¥à¹€à¸§à¸à¹€à¸•อร์จะใช้à¹à¸—น"
-
-#: src/settings_translation_file.cpp
-msgid ""
-"Whether nametag backgrounds should be shown by default.\n"
+"Whether name tag backgrounds should be shown by default.\n"
"Mods may still set a background."
msgstr ""
@@ -6807,7 +7135,8 @@ msgid ""
msgstr "ไม่ว่าจะà¹à¸ªà¸”งข้อมูลà¸à¸²à¸£à¹à¸à¹‰à¸›à¸±à¸à¸«à¸²à¸¥à¸¹à¸à¸„้า (มีผลเช่นเดียวà¸à¸±à¸šà¸à¸²à¸£à¸à¸”ปุ่ม F5)."
#: src/settings_translation_file.cpp
-msgid "Width component of the initial window size."
+#, fuzzy
+msgid "Width component of the initial window size. Ignored in fullscreen mode."
msgstr "องค์ประà¸à¸­à¸šà¸„วามà¸à¸§à¹‰à¸²à¸‡à¸‚องขนาดหน้าต่างเริ่มต้น"
#: src/settings_translation_file.cpp
@@ -6902,34 +7231,22 @@ msgid "Y-level of seabed."
msgstr ""
#: src/settings_translation_file.cpp
-msgid ""
-"ZLib compression level to use when saving mapblocks to disk.\n"
-"-1 - Zlib's default compression level\n"
-"0 - no compresson, fastest\n"
-"9 - best compression, slowest\n"
-"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)"
-msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid ""
-"ZLib compression level to use when sending mapblocks to the client.\n"
-"-1 - Zlib's default compression level\n"
-"0 - no compresson, fastest\n"
-"9 - best compression, slowest\n"
-"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)"
+msgid "cURL file download timeout"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "cURL file download timeout"
+msgid "cURL interactive timeout"
msgstr ""
#: src/settings_translation_file.cpp
msgid "cURL parallel limit"
msgstr ""
-#: src/settings_translation_file.cpp
-msgid "cURL timeout"
-msgstr ""
+#~ msgid "- Creative Mode: "
+#~ msgstr "-โหมดสร้างสรรค์: "
+
+#~ msgid "- Damage: "
+#~ msgstr "-ความเสียหาย: "
#~ msgid ""
#~ "0 = parallax occlusion with slope information (faster).\n"
@@ -6938,6 +7255,9 @@ msgstr ""
#~ "0 = à¸à¸²à¸£à¸šà¸”บังพารัลà¹à¸¥à¸à¸‹à¹Œà¸žà¸£à¹‰à¸­à¸¡à¸‚้อมูลความชัน (เร็วà¸à¸§à¹ˆà¸²)\n"
#~ "1 = à¸à¸²à¸£à¸—ำà¹à¸œà¸™à¸—ี่นูน (ช้าà¸à¸§à¹ˆà¸²à¹à¸¡à¹ˆà¸™à¸¢à¸³à¸à¸§à¹ˆà¸²)"
+#~ msgid "Address / Port"
+#~ msgstr "ที่อยู่ / พอร์ต"
+
#~ msgid ""
#~ "Adjust the gamma encoding for the light tables. Higher numbers are "
#~ "brighter.\n"
@@ -6952,6 +7272,9 @@ msgstr ""
#~ msgid "Back"
#~ msgstr "หลัง"
+#~ msgid "Bits per pixel (aka color depth) in fullscreen mode."
+#~ msgstr "บิตต่อพิà¸à¹€à¸‹à¸¥ (ความลึà¸à¸‚องสี aka) ในโหมดเต็มหน้าจอ."
+
#~ msgid "Bump Mapping"
#~ msgstr "à¸à¸²à¸£à¹à¸¡à¹‡à¸› ชน"
@@ -6968,9 +7291,15 @@ msgstr ""
#~ msgid "Configure"
#~ msgstr "à¸à¸³à¸«à¸™à¸”ค่า"
+#~ msgid "Credits"
+#~ msgstr "เครดิต"
+
#~ msgid "Crosshair color (R,G,B)."
#~ msgstr "สีของครอสà¹à¸®à¸£à¹Œ (R,G,B)."
+#~ msgid "Damage enabled"
+#~ msgstr "ความเสียหาย ที่เปิดใช้งาน"
+
#~ msgid "Darkness sharpness"
#~ msgstr "ความมืดมิด"
@@ -7024,9 +7353,24 @@ msgstr ""
#~ msgid "FPS in pause menu"
#~ msgstr "FPS ในเมนูหยุดชั่วคราว"
+#~ msgid "Fallback font shadow"
+#~ msgstr "เงาà¹à¸šà¸šà¸­à¸±à¸à¸©à¸£à¸—างเลือà¸"
+
+#~ msgid "Fallback font shadow alpha"
+#~ msgstr "เงาตัวอัà¸à¸©à¸£à¸—างเลือà¸à¸­à¸±à¸¥à¸Ÿà¸²"
+
+#~ msgid "Fallback font size"
+#~ msgstr "ขนาดตัวอัà¸à¸©à¸£à¸—างเลือà¸"
+
#~ msgid "Font shadow alpha (opaqueness, between 0 and 255)."
#~ msgstr "ตัวอัà¸à¸©à¸£à¹€à¸‡à¸²à¸­à¸±à¸¥à¸Ÿà¸² (ความทึบระหว่าง 0 à¹à¸¥à¸° 255)."
+#~ msgid "FreeType fonts"
+#~ msgstr "à¹à¸šà¸šà¸­à¸±à¸à¸©à¸£à¸›à¸£à¸°à¹€à¸ à¸— FreeType"
+
+#~ msgid "Full screen BPP"
+#~ msgstr "BPP เต็มหน้าจอ"
+
#~ msgid "Gamma"
#~ msgstr "à¹à¸à¸¡à¸¡à¸²"
@@ -7036,6 +7380,9 @@ msgstr ""
#~ msgid "Generate normalmaps"
#~ msgstr "สร้างà¹à¸œà¸™à¸—ี่ปà¸à¸•ิ"
+#~ msgid "Install: file: \"$1\""
+#~ msgstr "ติดตั้ง: ไฟล์: \"$1\""
+
#~ msgid "Lightness sharpness"
#~ msgstr "ความคมชัดของà¹à¸ªà¸‡"
@@ -7056,6 +7403,9 @@ msgstr ""
#~ msgid "Minimap in surface mode, Zoom x4"
#~ msgstr "à¹à¸œà¸™à¸—ี่ย่อในโหมด surface, ซูม x4"
+#~ msgid "Name / Password"
+#~ msgstr "ชื่อ / รหัสผ่าน"
+
#~ msgid "Name/Password"
#~ msgstr "ชื่อ/รหัสผ่าน"
@@ -7108,12 +7458,27 @@ msgstr ""
#~ msgid "Path to save screenshots at."
#~ msgstr "พา ธ เพื่อบันทึà¸à¸ à¸²à¸žà¸«à¸™à¹‰à¸²à¸ˆà¸­à¸—ี่ ..."
+#~ msgid "PvP enabled"
+#~ msgstr "PvP เปิดใช้งาน"
+
#~ msgid "Reset singleplayer world"
#~ msgstr "รีเซ็ต singleplayer โลà¸"
#~ msgid "Select Package File:"
#~ msgstr "เลือà¸à¹à¸Ÿà¹‰à¸¡à¹à¸žà¸„เà¸à¸ˆ:"
+#, fuzzy
+#~ msgid ""
+#~ "Shadow offset (in pixels) of the fallback font. If 0, then shadow will "
+#~ "not be drawn."
+#~ msgstr "เงาà¹à¸šà¸šà¸­à¸±à¸à¸©à¸£à¸Šà¸”เชยถ้า 0 à¹à¸¥à¹‰à¸§à¹€à¸‡à¸²à¸ˆà¸°à¹„ม่ถูà¸à¸§à¸²à¸”."
+
+#~ msgid "Special"
+#~ msgstr "พิเศษ"
+
+#~ msgid "Special key"
+#~ msgstr "รหัสพิเศษ"
+
#~ msgid "Start Singleplayer"
#~ msgstr "เริ่มเล่นเดี่ยว"
@@ -7126,6 +7491,9 @@ msgstr ""
#~ msgid "This font will be used for certain languages."
#~ msgstr "à¹à¸šà¸šà¸­à¸±à¸à¸©à¸£à¸™à¸µà¹‰à¸ˆà¸°à¹ƒà¸Šà¹‰à¸ªà¸³à¸«à¸£à¸±à¸šà¸šà¸²à¸‡à¸ à¸²à¸©à¸²"
+#~ msgid "To enable shaders the OpenGL driver needs to be used."
+#~ msgstr "à¸à¸²à¸£à¹€à¸›à¸´à¸”ใช้งานต้องมีโปรà¹à¸à¸£à¸¡à¸„วบคุม OpenGL ของ shaders ใช้."
+
#~ msgid "Toggle Cinematic"
#~ msgstr "สลับโรงภาพยนตร์"
@@ -7135,5 +7503,20 @@ msgstr ""
#~ msgid "Waving water"
#~ msgstr "โบà¸à¸™à¹‰à¸³"
+#~ msgid ""
+#~ "Whether FreeType fonts are used, requires FreeType support to be compiled "
+#~ "in.\n"
+#~ "If disabled, bitmap and XML vectors fonts are used instead."
+#~ msgstr ""
+#~ "ไม่ว่าจะใช้ฟอนต์ FreeType ต้องมีà¸à¸²à¸£à¸ªà¸™à¸±à¸šà¸ªà¸™à¸¸à¸™ FreeType เพื่อรวบรวม\n"
+#~ "หาà¸à¸›à¸´à¸”ใช้งาน ฟอนต์บิตà¹à¸¡à¸›à¹à¸¥à¸°à¹€à¸­à¹‡à¸à¸‹à¹Œà¹€à¸­à¹‡à¸¡à¹à¸­à¸¥à¹€à¸§à¸à¹€à¸•อร์จะใช้à¹à¸—น"
+
#~ msgid "Yes"
#~ msgstr "ใช่"
+
+#, fuzzy
+#~ msgid "You died."
+#~ msgstr "คุณตายà¹à¸¥à¹‰à¸§"
+
+#~ msgid "needs_fallback_font"
+#~ msgstr "yes"
diff --git a/po/tr/minetest.po b/po/tr/minetest.po
index 207b18a01..e68a75653 100644
--- a/po/tr/minetest.po
+++ b/po/tr/minetest.po
@@ -2,9 +2,9 @@ msgid ""
msgstr ""
"Project-Id-Version: Turkish (Minetest)\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-02-23 19:03+0100\n"
-"PO-Revision-Date: 2021-03-07 07:10+0000\n"
-"Last-Translator: OÄŸuz Ersen <oguzersen@protonmail.com>\n"
+"POT-Creation-Date: 2022-01-25 23:19+0100\n"
+"PO-Revision-Date: 2022-01-22 11:52+0000\n"
+"Last-Translator: Mehmet Ali <2045uuttb@relay.firefox.com>\n"
"Language-Team: Turkish <https://hosted.weblate.org/projects/minetest/"
"minetest/tr/>\n"
"Language: tr\n"
@@ -12,7 +12,43 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 4.5.1\n"
+"X-Generator: Weblate 4.11-dev\n"
+
+#: builtin/client/chatcommands.lua
+msgid "Clear the out chat queue"
+msgstr "Dış sohbet kuyruğunu temizle"
+
+#: builtin/client/chatcommands.lua
+msgid "Empty command."
+msgstr "BoÅŸ komut."
+
+#: builtin/client/chatcommands.lua
+msgid "Exit to main menu"
+msgstr "Ana menüye çık"
+
+#: builtin/client/chatcommands.lua
+msgid "Invalid command: "
+msgstr "Geçersiz komut: "
+
+#: builtin/client/chatcommands.lua
+msgid "Issued command: "
+msgstr "Verilen komut: "
+
+#: builtin/client/chatcommands.lua
+msgid "List online players"
+msgstr "Çevrim içi oyuncuları listele"
+
+#: builtin/client/chatcommands.lua
+msgid "Online players: "
+msgstr "Çevrim içi oyuncular: "
+
+#: builtin/client/chatcommands.lua
+msgid "The out chat queue is now empty."
+msgstr "Dış sohbet kuyruğu artık boş."
+
+#: builtin/client/chatcommands.lua
+msgid "This command is disabled by server."
+msgstr "Bu komut sunucu tarafından devre dışı bırakıldı."
#: builtin/client/death_formspec.lua src/client/game.cpp
msgid "Respawn"
@@ -22,11 +58,42 @@ msgstr "Yeniden Canlan"
msgid "You died"
msgstr "Öldün"
+#: builtin/common/chatcommands.lua
+msgid "Available commands:"
+msgstr "Kullanılabilir komutlar:"
+
+#: builtin/common/chatcommands.lua
+msgid "Available commands: "
+msgstr "Kullanılabilir komutlar: "
+
+#: builtin/common/chatcommands.lua
+msgid "Command not available: "
+msgstr "Komut kullanılamıyor: "
+
+#: builtin/common/chatcommands.lua
+msgid "Get help for commands"
+msgstr "Komutlar için yardım alın"
+
+#: builtin/common/chatcommands.lua
+msgid ""
+"Use '.help <cmd>' to get more information, or '.help all' to list everything."
+msgstr ""
+"Daha fazla bilgi almak için '.help <komut>' veya her şeyi listelemek için '."
+"help all' kullanın."
+
+#: builtin/common/chatcommands.lua
+msgid "[all | <cmd>]"
+msgstr "[all | <komut>]"
+
#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp
msgid "OK"
msgstr "Tamam"
#: builtin/fstk/ui.lua
+msgid "<none available>"
+msgstr "<mevcut deÄŸil>"
+
+#: builtin/fstk/ui.lua
msgid "An error occurred in a Lua script:"
msgstr "Lua betiÄŸinde bir hata oluÅŸtu:"
@@ -201,7 +268,7 @@ msgstr "Yerel oyun:"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "ContentDB is not available when Minetest was compiled without cURL"
-msgstr "Minetest cURL'siz derlediğinde ContentDB kullanılamaz"
+msgstr "Minetest cURL olmadan derlendiğinde ContentDB kullanılamaz"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Downloading..."
@@ -229,6 +296,10 @@ msgid "Install missing dependencies"
msgstr "Eksik bağımlılıkları kur"
#: builtin/mainmenu/dlg_contentstore.lua
+msgid "Install: Unsupported file type or broken archive"
+msgstr "Kur: Desteklenmeyen dosya türü veya bozuk arşiv"
+
+#: builtin/mainmenu/dlg_contentstore.lua
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Mods"
msgstr "Modlar"
@@ -271,7 +342,7 @@ msgstr "Kaldır"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Update"
-msgstr "Güncelle"
+msgstr "Güncelleme"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Update All [$1]"
@@ -532,7 +603,7 @@ msgstr "< Ayarlar sayfasına geri dön"
msgid "Browse"
msgstr "Gözat"
-#: builtin/mainmenu/dlg_settings_advanced.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_settings.lua
msgid "Disabled"
msgstr "Devre dışı"
@@ -557,7 +628,7 @@ msgid "Offset"
msgstr "Kaydırma"
#: builtin/mainmenu/dlg_settings_advanced.lua
-msgid "Persistance"
+msgid "Persistence"
msgstr "Süreklilik"
#: builtin/mainmenu/dlg_settings_advanced.lua
@@ -576,7 +647,7 @@ msgstr "Öntanımlıyı Geri Yükle"
msgid "Scale"
msgstr "Boyut"
-#: builtin/mainmenu/dlg_settings_advanced.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_online.lua
msgid "Search"
msgstr "Ara"
@@ -668,14 +739,6 @@ msgid "Install Mod: Unable to find suitable folder name for modpack $1"
msgstr "Mod Kur:$1 mod paketi için uygun bir klasör adı bulunamadı"
#: builtin/mainmenu/pkgmgr.lua
-msgid "Install: Unsupported file type \"$1\" or broken archive"
-msgstr "Kur: Desteklenmeyen dosya türü \"$1\" veya bozuk arşiv"
-
-#: builtin/mainmenu/pkgmgr.lua
-msgid "Install: file: \"$1\""
-msgstr "Kur: dosya: \"$1\""
-
-#: builtin/mainmenu/pkgmgr.lua
msgid "Unable to find a valid mod or modpack"
msgstr "Geçerli bir mod veya mod paketi bulunamadı"
@@ -701,13 +764,49 @@ msgstr "Yükleniyor..."
#: builtin/mainmenu/serverlistmgr.lua
msgid "Public server list is disabled"
-msgstr "Açık sunucu listesi devre dışı"
+msgstr "Herkese açık sunucu listesi devre dışı"
#: builtin/mainmenu/serverlistmgr.lua
msgid "Try reenabling public serverlist and check your internet connection."
msgstr ""
-"Açık sunucu listesini tekrar etkinleştirmeyi deneyin ve internet "
-"bağlantınızı doğrulayın."
+"Herkese açık sunucu listesini tekrar etkinleştirmeyi deneyin ve internet "
+"bağlantınızı gözden geçirin."
+
+#: builtin/mainmenu/tab_about.lua
+msgid "About"
+msgstr "Hakkında"
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Active Contributors"
+msgstr "Etkin Katkıda Bulunanlar"
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Active renderer:"
+msgstr "Etkin iÅŸleyici:"
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Core Developers"
+msgstr "Çekirdek Geliştiriciler"
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Open User Data Directory"
+msgstr "Kullanıcı Veri Dizinini Aç"
+
+#: builtin/mainmenu/tab_about.lua
+msgid ""
+"Opens the directory that contains user-provided worlds, games, mods,\n"
+"and texture packs in a file manager / explorer."
+msgstr ""
+"Bir dosya yöneticisi / gezgininde kullanıcı tarafından sağlanan dünyaları,\n"
+"oyunları, modları ve doku paketlerini içeren dizini açar."
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Previous Contributors"
+msgstr "Önceki Katkıda Bulunanlar"
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Previous Core Developers"
+msgstr "Önceki Çekirdek Geliştiriciler"
#: builtin/mainmenu/tab_content.lua
msgid "Browse online content"
@@ -749,38 +848,6 @@ msgstr "Paketi Kaldır"
msgid "Use Texture Pack"
msgstr "Doku Paketleri Kullan"
-#: builtin/mainmenu/tab_credits.lua
-msgid "Active Contributors"
-msgstr "Etkin Katkıda Bulunanlar"
-
-#: builtin/mainmenu/tab_credits.lua
-msgid "Core Developers"
-msgstr "Çekirdek Geliştiriciler"
-
-#: builtin/mainmenu/tab_credits.lua
-msgid "Credits"
-msgstr "Hakkında"
-
-#: builtin/mainmenu/tab_credits.lua
-msgid "Open User Data Directory"
-msgstr "Kullanıcı Veri Dizinini Aç"
-
-#: builtin/mainmenu/tab_credits.lua
-msgid ""
-"Opens the directory that contains user-provided worlds, games, mods,\n"
-"and texture packs in a file manager / explorer."
-msgstr ""
-"Bir dosya yöneticisi / gezgininde kullanıcı tarafından sağlanan dünyaları,\n"
-"oyunları, modları ve doku paketlerini içeren dizini açar."
-
-#: builtin/mainmenu/tab_credits.lua
-msgid "Previous Contributors"
-msgstr "Önceki Katkıda Bulunanlar"
-
-#: builtin/mainmenu/tab_credits.lua
-msgid "Previous Core Developers"
-msgstr "Önceki Çekirdek Geliştiriciler"
-
#: builtin/mainmenu/tab_local.lua
msgid "Announce Server"
msgstr "Sunucuyu Duyur"
@@ -809,7 +876,7 @@ msgstr "Sunucu Barındır"
msgid "Install games from ContentDB"
msgstr "ContentDB'den oyunlar yükle"
-#: builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
msgid "Name"
msgstr "Ad"
@@ -821,7 +888,7 @@ msgstr "Yeni"
msgid "No world created or selected!"
msgstr "Dünya seçilmedi ya da yaratılmadı!"
-#: builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
msgid "Password"
msgstr "Parola"
@@ -829,7 +896,7 @@ msgstr "Parola"
msgid "Play Game"
msgstr "Oyunu Oyna"
-#: builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
msgid "Port"
msgstr "Port"
@@ -850,8 +917,12 @@ msgid "Start Game"
msgstr "Oyun BaÅŸlat"
#: builtin/mainmenu/tab_online.lua
-msgid "Address / Port"
-msgstr "Adres / Port"
+msgid "Address"
+msgstr "Adres"
+
+#: builtin/mainmenu/tab_online.lua src/client/keycode.cpp
+msgid "Clear"
+msgstr "Temizle"
#: builtin/mainmenu/tab_online.lua
msgid "Connect"
@@ -861,34 +932,42 @@ msgstr "BaÄŸlan"
msgid "Creative mode"
msgstr "Yaratıcı kip"
+#. ~ PvP = Player versus Player
#: builtin/mainmenu/tab_online.lua
-msgid "Damage enabled"
-msgstr "Hasar etkin"
+msgid "Damage / PvP"
+msgstr "Hasar / SavaÅŸ (PvP)"
#: builtin/mainmenu/tab_online.lua
msgid "Del. Favorite"
-msgstr "Favoriyi Sil"
+msgstr "Sık Kullanılanı Sil"
#: builtin/mainmenu/tab_online.lua
-msgid "Favorite"
-msgstr "Favori"
+msgid "Favorites"
+msgstr "Sık Kullanılanlar"
#: builtin/mainmenu/tab_online.lua
-msgid "Join Game"
-msgstr "Oyuna Katıl"
+msgid "Incompatible Servers"
+msgstr "Uyumsuz Sunucular"
#: builtin/mainmenu/tab_online.lua
-msgid "Name / Password"
-msgstr "Ad / Parola"
+msgid "Join Game"
+msgstr "Oyuna Katıl"
#: builtin/mainmenu/tab_online.lua
msgid "Ping"
msgstr "Ping"
-#. ~ PvP = Player versus Player
#: builtin/mainmenu/tab_online.lua
-msgid "PvP enabled"
-msgstr "SavaÅŸ etkin"
+msgid "Public Servers"
+msgstr "Herkese Açık Sunucular"
+
+#: builtin/mainmenu/tab_online.lua
+msgid "Refresh"
+msgstr "Yenile"
+
+#: builtin/mainmenu/tab_online.lua
+msgid "Server Description"
+msgstr "Sunucu Açıklaması"
#: builtin/mainmenu/tab_settings.lua
msgid "2x"
@@ -930,11 +1009,31 @@ msgstr "Tuşları değiştir"
msgid "Connected Glass"
msgstr "BitiÅŸik Cam"
+#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
+msgid "Dynamic shadows"
+msgstr "Dinamik gölgeler"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Dynamic shadows: "
+msgstr "Dinamik gölgeler: "
+
#: builtin/mainmenu/tab_settings.lua
msgid "Fancy Leaves"
msgstr "Şık Yapraklar"
#: builtin/mainmenu/tab_settings.lua
+msgid "High"
+msgstr "Yüksek"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Low"
+msgstr "Düşük"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Medium"
+msgstr "Orta"
+
+#: builtin/mainmenu/tab_settings.lua
msgid "Mipmap"
msgstr "Mip eÅŸleme"
@@ -1006,10 +1105,6 @@ msgstr "Yumuşak Aydınlatma"
msgid "Texturing:"
msgstr "Doku:"
-#: builtin/mainmenu/tab_settings.lua
-msgid "To enable shaders the OpenGL driver needs to be used."
-msgstr "OpenGL sürücüleri seçilmeden gölgelemeler etkinleştirilemez."
-
#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
msgid "Tone Mapping"
msgstr "Ton EÅŸleme"
@@ -1023,6 +1118,14 @@ msgid "Trilinear Filter"
msgstr "Trilineer Filtre"
#: builtin/mainmenu/tab_settings.lua
+msgid "Ultra High"
+msgstr "Çok Yüksek"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Very Low"
+msgstr "Çok Düşük"
+
+#: builtin/mainmenu/tab_settings.lua
msgid "Waving Leaves"
msgstr "Dalgalanan Yapraklar"
@@ -1034,7 +1137,7 @@ msgstr "Dalgalanan Sıvılar"
msgid "Waving Plants"
msgstr "Dalgalanan Bitkiler"
-#: src/client/client.cpp
+#: src/client/client.cpp src/client/game.cpp
msgid "Connection timed out."
msgstr "Bağlantı zaman aşımına uğradı."
@@ -1063,8 +1166,8 @@ msgid "Connection error (timed out?)"
msgstr "Bağlantı hatası (zaman aşımı?)"
#: src/client/clientlauncher.cpp
-msgid "Could not find or load game \""
-msgstr "Oyun bulunamıyor veya yüklenemiyor \""
+msgid "Could not find or load game: "
+msgstr "Oyun bulunamadı veya yüklenemedi: "
#: src/client/clientlauncher.cpp
msgid "Invalid gamespec."
@@ -1094,18 +1197,6 @@ msgstr "Sağlanan parola dosyası açılamadı: "
msgid "Provided world path doesn't exist: "
msgstr "Belirtilen dünya konumu yok: "
-#. ~ DO NOT TRANSLATE THIS LITERALLY!
-#. This is a special string. Put either "no" or "yes"
-#. into the translation field (literally).
-#. Choose "yes" if the language requires use of the fallback
-#. font, "no" otherwise.
-#. The fallback font is (normally) required for languages with
-#. non-Latin script, like Chinese.
-#. When in doubt, test your translation.
-#: src/client/fontengine.cpp
-msgid "needs_fallback_font"
-msgstr "no"
-
#: src/client/game.cpp
msgid ""
"\n"
@@ -1119,14 +1210,6 @@ msgid "- Address: "
msgstr "- Adres: "
#: src/client/game.cpp
-msgid "- Creative Mode: "
-msgstr "- Yaratıcı Kip: "
-
-#: src/client/game.cpp
-msgid "- Damage: "
-msgstr "- Hasar: "
-
-#: src/client/game.cpp
msgid "- Mode: "
msgstr "- Kip: "
@@ -1136,18 +1219,27 @@ msgstr "- Port: "
#: src/client/game.cpp
msgid "- Public: "
-msgstr "- Herkes: "
+msgstr "- Herkese Açık: "
#. ~ PvP = Player versus Player
#: src/client/game.cpp
msgid "- PvP: "
-msgstr "- SavaÅŸ: "
+msgstr "- SavaÅŸ (PvP): "
#: src/client/game.cpp
msgid "- Server Name: "
msgstr "- Sunucu Adı: "
#: src/client/game.cpp
+msgid "A serialization error occurred:"
+msgstr "Serileştirme hatası oluştu:"
+
+#: src/client/game.cpp
+#, c-format
+msgid "Access denied. Reason: %s"
+msgstr "EriÅŸim reddedildi. Neden: %s"
+
+#: src/client/game.cpp
msgid "Automatic forward disabled"
msgstr "Kendiliğinden ileri devre dışı"
@@ -1156,6 +1248,22 @@ msgid "Automatic forward enabled"
msgstr "KendiliÄŸinden ileri etkin"
#: src/client/game.cpp
+msgid "Block bounds hidden"
+msgstr "Blok sınırları gizli"
+
+#: src/client/game.cpp
+msgid "Block bounds shown for all blocks"
+msgstr "Blok sınırları tüm bloklar için gösteriliyor"
+
+#: src/client/game.cpp
+msgid "Block bounds shown for current block"
+msgstr "Blok sınırları geçerli blok için gösteriliyor"
+
+#: src/client/game.cpp
+msgid "Block bounds shown for nearby blocks"
+msgstr "Blok sınırları yakındaki bloklar için gösteriliyor"
+
+#: src/client/game.cpp
msgid "Camera update disabled"
msgstr "Kamera güncelleme devre dışı"
@@ -1164,6 +1272,10 @@ msgid "Camera update enabled"
msgstr "Kamera güncelleme etkin"
#: src/client/game.cpp
+msgid "Can't show block bounds (need 'basic_debug' privilege)"
+msgstr "Blok sınırları gösterilemiyor ('basic_debug' ayrıcalığına ihtiyaç var)"
+
+#: src/client/game.cpp
msgid "Change Password"
msgstr "Parola deÄŸiÅŸtir"
@@ -1176,6 +1288,10 @@ msgid "Cinematic mode enabled"
msgstr "Sinematik kip etkin"
#: src/client/game.cpp
+msgid "Client disconnected"
+msgstr "İstemci bağlantısı kesildi"
+
+#: src/client/game.cpp
msgid "Client side scripting is disabled"
msgstr "İstemci tarafı betik devre dışı"
@@ -1184,6 +1300,10 @@ msgid "Connecting to server..."
msgstr "Sunucuya bağlanılıyor..."
#: src/client/game.cpp
+msgid "Connection failed for unknown reason"
+msgstr "Bilinmeyen bir nedenle bağlantı başarısız oldu"
+
+#: src/client/game.cpp
msgid "Continue"
msgstr "Devam et"
@@ -1221,6 +1341,11 @@ msgstr ""
"- %s: sohbet\n"
#: src/client/game.cpp
+#, c-format
+msgid "Couldn't resolve address: %s"
+msgstr "Adres çözümlenemedi: %s"
+
+#: src/client/game.cpp
msgid "Creating client..."
msgstr "İstemci yaratılıyor..."
@@ -1349,6 +1474,10 @@ msgid "Minimap currently disabled by game or mod"
msgstr "Mini harita şu anda, oyun veya mod tarafından devre dışı"
#: src/client/game.cpp
+msgid "Multiplayer"
+msgstr "Çok oyunculu"
+
+#: src/client/game.cpp
msgid "Noclip mode disabled"
msgstr "Hayalet kipi devre dışı"
@@ -1422,6 +1551,21 @@ msgstr "Ses açık"
#: src/client/game.cpp
#, c-format
+msgid "The server is probably running a different version of %s."
+msgstr "Sunucu muhtemelen farklı bir %s sürümü çalıştırıyor."
+
+#: src/client/game.cpp
+#, c-format
+msgid "Unable to connect to %s because IPv6 is disabled"
+msgstr "IPv6 devre dışı bırakıldığı için %s bağlantısı kurulamıyor"
+
+#: src/client/game.cpp
+#, c-format
+msgid "Unable to listen on %s because IPv6 is disabled"
+msgstr "IPv6 devre dışı bırakıldığından %s adresinde dinlenemiyor"
+
+#: src/client/game.cpp
+#, c-format
msgid "Viewing range changed to %d"
msgstr "Görüntüleme uzaklığı değişti: %d"
@@ -1490,10 +1634,6 @@ msgid "Caps Lock"
msgstr "Caps Lock"
#: src/client/keycode.cpp
-msgid "Clear"
-msgstr "Temizle"
-
-#: src/client/keycode.cpp
msgid "Control"
msgstr "CTRL"
@@ -1758,6 +1898,14 @@ msgstr "Yüzey kipinde mini harita, Yakınlaştırma x%d"
msgid "Minimap in texture mode"
msgstr "Doku kipinde mini harita"
+#: src/gui/guiChatConsole.cpp
+msgid "Failed to open webpage"
+msgstr "Web sayfası açılamadı"
+
+#: src/gui/guiChatConsole.cpp
+msgid "Opening webpage"
+msgstr "Web sayfası açılıyor"
+
#: src/gui/guiConfirmRegistration.cpp src/gui/guiPasswordChange.cpp
msgid "Passwords do not match!"
msgstr "Parolalar eÅŸleÅŸmiyor!"
@@ -1786,8 +1934,8 @@ msgid "Proceed"
msgstr "İlerle"
#: src/gui/guiKeyChangeMenu.cpp
-msgid "\"Special\" = climb down"
-msgstr "\"Özel\" = aşağı in"
+msgid "\"Aux1\" = climb down"
+msgstr "\"Aux1\" = aşağı in"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Autoforward"
@@ -1798,10 +1946,18 @@ msgid "Automatic jumping"
msgstr "Kendiliğinden zıplama"
#: src/gui/guiKeyChangeMenu.cpp
+msgid "Aux1"
+msgstr "Aux1"
+
+#: src/gui/guiKeyChangeMenu.cpp
msgid "Backward"
msgstr "Geri"
#: src/gui/guiKeyChangeMenu.cpp
+msgid "Block bounds"
+msgstr "Blok sınırları"
+
+#: src/gui/guiKeyChangeMenu.cpp
msgid "Change camera"
msgstr "Kamera deÄŸiÅŸtir"
@@ -1890,10 +2046,6 @@ msgid "Sneak"
msgstr "Sız"
#: src/gui/guiKeyChangeMenu.cpp
-msgid "Special"
-msgstr "Özel"
-
-#: src/gui/guiKeyChangeMenu.cpp
msgid "Toggle HUD"
msgstr "HUD'ı aç/kapa"
@@ -1954,8 +2106,9 @@ msgid "Muted"
msgstr "Ses Kısık"
#: src/gui/guiVolumeChange.cpp
-msgid "Sound Volume: "
-msgstr "Ses Seviyesi: "
+#, c-format
+msgid "Sound Volume: %d%%"
+msgstr "Ses Seviyesi: %%%d"
#. ~ Imperative, as in "Enter/type in text".
#. Don't forget the space.
@@ -1980,12 +2133,12 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"(Android) Use virtual joystick to trigger \"aux\" button.\n"
-"If enabled, virtual joystick will also tap \"aux\" button when out of main "
+"(Android) Use virtual joystick to trigger \"Aux1\" button.\n"
+"If enabled, virtual joystick will also tap \"Aux1\" button when out of main "
"circle."
msgstr ""
-"(Android) \"aux\" düğmesini tetiklemek için sanal joystick kullanın.\n"
-"Etkinleştirilirse, sanal joystick, ana çemberin dışındayken \"aux\" "
+"(Android) \"Aux1\" düğmesini tetiklemek için sanal joystick kullanın.\n"
+"Etkinleştirilirse, sanal joystick, ana çemberin dışındayken \"Aux1\" "
"düğmesini de dinler."
#: src/settings_translation_file.cpp
@@ -2207,6 +2360,10 @@ msgstr ""
"ör: 4k ekranlar için."
#: src/settings_translation_file.cpp
+msgid "Adjust the detected display density, used for scaling UI elements."
+msgstr ""
+
+#: src/settings_translation_file.cpp
#, c-format
msgid ""
"Adjusts the density of the floatland layer.\n"
@@ -2341,6 +2498,14 @@ msgid "Autoscaling mode"
msgstr "Kendiliğinden boyutlandırma kipi"
#: src/settings_translation_file.cpp
+msgid "Aux1 key"
+msgstr "Aux1 tuÅŸu"
+
+#: src/settings_translation_file.cpp
+msgid "Aux1 key for climbing/descending"
+msgstr "Tırmanma/alçalma için Aux1 tuşu"
+
+#: src/settings_translation_file.cpp
msgid "Backward key"
msgstr "Geri tuÅŸu"
@@ -2385,10 +2550,6 @@ msgid "Biome noise"
msgstr "Biyom Gürültüsü"
#: src/settings_translation_file.cpp
-msgid "Bits per pixel (aka color depth) in fullscreen mode."
-msgstr "Tam ekran kipinde piksel başına bit (renk derinliği)."
-
-#: src/settings_translation_file.cpp
msgid "Block send optimize distance"
msgstr "Blok gönderme iyileştirme uzaklığı"
@@ -2495,6 +2656,14 @@ msgstr ""
"0.0 minimum, 1.0 maksimum ışık seviyesidir."
#: src/settings_translation_file.cpp
+msgid "Chat command time message threshold"
+msgstr "Sohbet komutu zaman iletisi eÅŸiÄŸi"
+
+#: src/settings_translation_file.cpp
+msgid "Chat commands"
+msgstr "Sohbet komutları"
+
+#: src/settings_translation_file.cpp
msgid "Chat font size"
msgstr "Sohbet yazı tipi boyutu"
@@ -2527,8 +2696,8 @@ msgid "Chat toggle key"
msgstr "Sohbet açma/kapama tuşu"
#: src/settings_translation_file.cpp
-msgid "Chatcommands"
-msgstr "Sohbet komutları"
+msgid "Chat weblinks"
+msgstr "Sohbet web bağlantıları"
#: src/settings_translation_file.cpp
msgid "Chunk size"
@@ -2547,6 +2716,14 @@ msgid "Clean transparent textures"
msgstr "Saydam dokuları temizle"
#: src/settings_translation_file.cpp
+msgid ""
+"Clickable weblinks (middle-click or Ctrl+left-click) enabled in chat console "
+"output."
+msgstr ""
+"Sohbet konsolu çıktısında etkinleştirilen tıklanabilir (orta tıklama veya "
+"Ctrl+sol tıklama) web bağlantıları."
+
+#: src/settings_translation_file.cpp
msgid "Client"
msgstr "İstemci"
@@ -2591,6 +2768,10 @@ msgid "Colored fog"
msgstr "Renkli sis"
#: src/settings_translation_file.cpp
+msgid "Colored shadows"
+msgstr "Renkli gölgeler"
+
+#: src/settings_translation_file.cpp
msgid ""
"Comma-separated list of flags to hide in the content repository.\n"
"\"nonfree\" can be used to hide packages which do not qualify as 'free "
@@ -2630,6 +2811,31 @@ msgid "Command key"
msgstr "Komut tuÅŸu"
#: src/settings_translation_file.cpp
+msgid ""
+"Compression level to use when saving mapblocks to disk.\n"
+"-1 - use default compression level\n"
+"0 - least compression, fastest\n"
+"9 - best compression, slowest"
+msgstr ""
+"Harita kütlerini diske kaydederken kullanılacak sıkıştırma düzeyi.\n"
+"-1 - öntanımlı sıkıştırma düzeyini kullan\n"
+"0 - hiçbir sıkıştırma yok, en hızlı\n"
+"9 - en iyi sıkıştırma, en yavaş"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Compression level to use when sending mapblocks to the client.\n"
+"-1 - use default compression level\n"
+"0 - least compression, fastest\n"
+"9 - best compression, slowest"
+msgstr ""
+"Harita kütlerini istemciye(client) gönderirken kullanılacak sıkıştırma "
+"düzeyi.\n"
+"-1 - öntanımlı sıkıştırma düzeyini kullan\n"
+"0 - hiçbir sıkıştırma yok, en hızlı\n"
+"9 - en iyi sıkıştırma, en yavaş"
+
+#: src/settings_translation_file.cpp
msgid "Connect glass"
msgstr "BitiÅŸik cam"
@@ -2730,10 +2936,10 @@ msgstr "Artı saydamlığı"
#: src/settings_translation_file.cpp
msgid ""
"Crosshair alpha (opaqueness, between 0 and 255).\n"
-"Also controls the object crosshair color"
+"This also applies to the object crosshair."
msgstr ""
"Artı saydamlığı (solukluk, 0 ile 255 arasında).\n"
-"Ayrıca nesne artı rengini de denetler"
+"Ayrıca nesne artı rengi için de geçerlidir"
#: src/settings_translation_file.cpp
msgid "Crosshair color"
@@ -2813,11 +3019,14 @@ msgstr "Öntanımlı yığın boyutu"
#: src/settings_translation_file.cpp
msgid ""
-"Default timeout for cURL, stated in milliseconds.\n"
-"Only has an effect if compiled with cURL."
+"Define shadow filtering quality.\n"
+"This simulates the soft shadows effect by applying a PCF or Poisson disk\n"
+"but also uses more resources."
msgstr ""
-"CURL için öntanımlı zaman aşımı, milisaniye cinsinden.\n"
-"Yalnızca cURL ile derlenmiş ise bir etkisi vardır."
+"Gölge filtreleme kalitesini tanımla.\n"
+"Bu, bir PCF veya Poisson diski uygulayarak yumuşak gölge efektini taklit "
+"eder,\n"
+"ancak aynı zamanda daha fazla kaynak kullanır."
#: src/settings_translation_file.cpp
msgid "Defines areas where trees have apples."
@@ -2946,6 +3155,10 @@ msgid "Disallow empty passwords"
msgstr "BoÅŸ parolalara izin verme"
#: src/settings_translation_file.cpp
+msgid "Display Density Scaling Factor"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Domain name of server, to be displayed in the serverlist."
msgstr "Sunucu listesinde görüntülenecek sunucu alan adı."
@@ -2994,6 +3207,25 @@ msgstr ""
"Bu destek deneyseldir ve API deÄŸiÅŸebilir."
#: src/settings_translation_file.cpp
+msgid ""
+"Enable Poisson disk filtering.\n"
+"On true uses Poisson disk to make \"soft shadows\". Otherwise uses PCF "
+"filtering."
+msgstr ""
+"Poisson disk filtrelemeyi etkinleÅŸtir.\n"
+"Doğru ise \"yumuşak gölgeler\" yapmak için Poisson diski kullanır. Değilse "
+"PCF filtreleme kullanır."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable colored shadows.\n"
+"On true translucent nodes cast colored shadows. This is expensive."
+msgstr ""
+"Renkli gölgeleri etkinleştir.\n"
+"Doğru ise yarı saydam düğümlerde renkli gölgeler oluşturur. Bu fazla kaynak "
+"kullanır."
+
+#: src/settings_translation_file.cpp
msgid "Enable console window"
msgstr "Konsol penceresini etkinleÅŸtir"
@@ -3098,9 +3330,9 @@ msgid ""
"enhanced, highlights and shadows are gradually compressed."
msgstr ""
"Hable'ın 'Uncharted 2' film ton eşlemesini etkinleştirir.\n"
-"Fotoğrafsal film ton eğrisini simüle eder ve bu\n"
+"FotoÄŸrafsal film ton eÄŸrisini taklit eder ve bu\n"
"yüksek dinamik aralıklı görüntülerin görünümü yakınlaştırır. Orta-aralık\n"
-"kontrast biraz geliştirilir, vurgular ve gölgeler kademeli olarak "
+"karşıtlık biraz geliştirilir, vurgular ve gölgeler kademeli olarak "
"sıkıştırılır."
#: src/settings_translation_file.cpp
@@ -3128,6 +3360,12 @@ msgstr ""
"Bu ayarı değiştirmek, yeniden başlatma gerektirir."
#: src/settings_translation_file.cpp
+msgid ""
+"Enables tradeoffs that reduce CPU load or increase rendering performance\n"
+"at the expense of minor visual glitches that do not impact game playability."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Engine profiling data print interval"
msgstr "Motor profilleme veri yazdırma aralığı"
@@ -3173,18 +3411,6 @@ msgid "Fallback font path"
msgstr "Yedek yazı tipi konumu"
#: src/settings_translation_file.cpp
-msgid "Fallback font shadow"
-msgstr "Geri dönüş yazı tipi gölgesi"
-
-#: src/settings_translation_file.cpp
-msgid "Fallback font shadow alpha"
-msgstr "Geri dönüş yazı tipi gölge saydamlığı"
-
-#: src/settings_translation_file.cpp
-msgid "Fallback font size"
-msgstr "Geri dönüş yazı tipi boyutu"
-
-#: src/settings_translation_file.cpp
msgid "Fast key"
msgstr "Hızlı tuşu"
@@ -3202,10 +3428,10 @@ msgstr "Hızlı hareket"
#: src/settings_translation_file.cpp
msgid ""
-"Fast movement (via the \"special\" key).\n"
+"Fast movement (via the \"Aux1\" key).\n"
"This requires the \"fast\" privilege on the server."
msgstr ""
-"Hızlı hareket (\"özel\" tuşu ile).\n"
+"Hızlı hareket (\"Aux1\" tuşu ile).\n"
"Bu, sunucu üzerinde \"hızlı\" yetkisi gerektirir."
#: src/settings_translation_file.cpp
@@ -3222,8 +3448,8 @@ msgid ""
"the\n"
"Multiplayer Tab."
msgstr ""
-"İstemci/sunucu listesi/ içinde Multiplayer Sekmesinde görüntülenen\n"
-"favori sunucularızı içeren dosya."
+"Çok Oyunculu Sekmesinde görüntülenen sık kullanılan sunucularızı içeren\n"
+"istemci/sunucu listesi/ içindeki dosya."
#: src/settings_translation_file.cpp
msgid "Filler depth"
@@ -3240,16 +3466,17 @@ msgstr "Filmsel ton eÅŸleme"
#: 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."
+"which PNG optimizers usually discard, often resulting in dark or\n"
+"light edges to transparent textures. Apply a filter to clean that up\n"
+"at texture load time. This is automatically enabled if mipmapping is enabled."
msgstr ""
"Filtrelenmiş dokular, genellikle PNG iyileştiricilerin dikkate almadığı, "
"tamamen\n"
"şeffaf komşuları ile RGB değerlerini kaynaştırabilir, bazen şeffaf "
"dokularda\n"
"karanlık veya aydınlık kenarlara neden olabilir. Bunu temizlemek için bu\n"
-"filtreyi doku yükleme zamanında uygulayın."
+"filtreyi doku yükleme zamanında uygulayın. Bu, mip eşleme etkinleştirilirse\n"
+"otomatik olarak etkinleÅŸtirilir."
#: src/settings_translation_file.cpp
msgid "Filtering"
@@ -3340,15 +3567,17 @@ msgid "Font size"
msgstr "Yazı tipi boyutu"
#: src/settings_translation_file.cpp
-msgid "Font size of the default font in point (pt)."
-msgstr "Öntanımlı yazı tipinin nokta (pt) olarak boyutu."
+msgid "Font size divisible by"
+msgstr ""
#: src/settings_translation_file.cpp
-msgid "Font size of the fallback font in point (pt)."
-msgstr "Yedek yazı tipinin nokta (pt) olarak boyutu."
+#, fuzzy
+msgid "Font size of the default font where 1 unit = 1 pixel at 96 DPI"
+msgstr "Öntanımlı yazı tipinin nokta (pt) olarak boyutu."
#: src/settings_translation_file.cpp
-msgid "Font size of the monospace font in point (pt)."
+#, fuzzy
+msgid "Font size of the monospace font where 1 unit = 1 pixel at 96 DPI"
msgstr "Eş aralıklı yazı tipinin nokta (pt) olarak boyutu."
#: src/settings_translation_file.cpp
@@ -3362,6 +3591,17 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"For pixel-style fonts that do not scale well, this ensures that font sizes "
+"used\n"
+"with this font will always be divisible by this value, in pixels. For "
+"instance,\n"
+"a pixel font 16 pixels tall should have this set to 16, so it will only ever "
+"be\n"
+"sized 16, 32, 48, etc., so a mod requesting a size of 25 will get 32."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Format of player chat messages. The following strings are valid "
"placeholders:\n"
"@name, @message, @timestamp (optional)"
@@ -3423,10 +3663,6 @@ msgid "Fraction of the visible distance at which fog starts to be rendered"
msgstr "Sisin işlenmeye başlayacağı görünebilir uzaklığın kesiri"
#: src/settings_translation_file.cpp
-msgid "FreeType fonts"
-msgstr "Freetype yazı tipleri"
-
-#: src/settings_translation_file.cpp
msgid ""
"From how far blocks are generated for clients, stated in mapblocks (16 "
"nodes)."
@@ -3461,10 +3697,6 @@ msgid "Full screen"
msgstr "Tam ekran"
#: src/settings_translation_file.cpp
-msgid "Full screen BPP"
-msgstr "Tam ekran BPP"
-
-#: src/settings_translation_file.cpp
msgid "Fullscreen mode."
msgstr "Tam ekran kipi."
@@ -3485,10 +3717,11 @@ msgid "Global callbacks"
msgstr "Genel geri çağrılar"
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
"Global map generation attributes.\n"
"In Mapgen v6 the 'decorations' flag controls all decorations except trees\n"
-"and junglegrass, in all other mapgens this flag controls all decorations."
+"and jungle grass, in all other mapgens this flag controls all decorations."
msgstr ""
"Genel harita üretim özellikleri.\n"
"Mapgen v6'da 'decorations' bayrağı ağaçlar ve cangıl çimi hariç tüm "
@@ -3500,16 +3733,16 @@ msgid ""
"Gradient of light curve at maximum light level.\n"
"Controls the contrast of the highest light levels."
msgstr ""
-"Maksimum ışık seviyesinde ışık eğrisinin gradyantı.\n"
-"En yüksek ışık düzeylerinin kontrastını denetler."
+"Azami ışık seviyesinde ışık eğrisinin gradyantı.\n"
+"En yüksek ışık düzeylerinin karşıtlığını denetler."
#: src/settings_translation_file.cpp
msgid ""
"Gradient of light curve at minimum light level.\n"
"Controls the contrast of the lowest light levels."
msgstr ""
-"Minimum ışık seviyesinde ışık eğrisinin gradyantı.\n"
-"En düşük ışık düzeylerinin kontrastını kontrol eder."
+"Asgari ışık seviyesinde ışık eğrisinin gradyantı.\n"
+"En düşük ışık düzeylerinin karşıtlığını denetler."
#: src/settings_translation_file.cpp
msgid "Graphics"
@@ -3575,8 +3808,10 @@ msgid "Heat noise"
msgstr "Isı gürültüsü"
#: src/settings_translation_file.cpp
-msgid "Height component of the initial window size."
-msgstr "İlk pencere boyutunun yükseklik bileşeni."
+msgid ""
+"Height component of the initial window size. Ignored in fullscreen mode."
+msgstr ""
+"İlk pencere boyutunun yükseklik bileşeni. Tam ekran kipinde yok sayılır."
#: src/settings_translation_file.cpp
msgid "Height noise"
@@ -3587,10 +3822,6 @@ msgid "Height select noise"
msgstr "Yükseklik seçme gürültüsü"
#: src/settings_translation_file.cpp
-msgid "High-precision FPU"
-msgstr "Yüksek hassasiyetli FPU"
-
-#: src/settings_translation_file.cpp
msgid "Hill steepness"
msgstr "Tepe dikliÄŸi"
@@ -3836,11 +4067,10 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"If disabled, \"special\" key is used to fly fast if both fly and fast mode "
-"are\n"
+"If disabled, \"Aux1\" key is used to fly fast if both fly and fast mode are\n"
"enabled."
msgstr ""
-"Devre dışı bırakılırsa \"özel\" tuşu, hem uçma hem de hızlı kipi etkin ise,\n"
+"Devre dışı bırakılırsa \"Aux1\" tuşu, hem uçma hem de hızlı kipi etkin ise,\n"
"hızlı uçma için kullanılır."
#: src/settings_translation_file.cpp
@@ -3868,11 +4098,11 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"If enabled, \"special\" key instead of \"sneak\" key is used for climbing "
-"down and\n"
+"If enabled, \"Aux1\" key instead of \"Sneak\" key is used for climbing down "
+"and\n"
"descending."
msgstr ""
-"Etkinleştirilirse, \"sızma\" tuşu yerine \"özel\" tuşu aşağı inme ve "
+"Etkinleştirilirse, \"sızma\" tuşu yerine \"Aux1\" tuşu aşağı inme ve "
"alçalma\n"
"için kullanılır."
@@ -3886,7 +4116,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "If enabled, disable cheat prevention in multiplayer."
-msgstr "Etkinleştirilirse, multiplayer'da hile önleme devre dışı bırakılır."
+msgstr "Etkinleştirilirse, çok oyunculuda hile önleme devre dışı bırakılır."
#: src/settings_translation_file.cpp
msgid ""
@@ -3929,6 +4159,15 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"If the execution of a chat command takes longer than this specified time in\n"
+"seconds, add the time information to the chat command message"
+msgstr ""
+"Bir sohbet komutunun yürütülmesi, saniye cinsinden bu belirtilen süreden "
+"daha\n"
+"uzun sürerse, zaman bilgisini sohbet komut iletisine ekle"
+
+#: src/settings_translation_file.cpp
+msgid ""
"If the file size of debug.txt exceeds the number of megabytes specified in\n"
"this setting when it is opened, the file is moved to debug.txt.1,\n"
"deleting an older debug.txt.1 if it exists.\n"
@@ -3982,7 +4221,8 @@ msgstr ""
"Genellikle bu yalnızca çekirdek/yerleşik katkıda bulunanlar için gereklidir"
#: src/settings_translation_file.cpp
-msgid "Instrument chatcommands on registration."
+#, fuzzy
+msgid "Instrument chat commands on registration."
msgstr "Kayıt sırasında sohbet komutlarını belgele."
#: src/settings_translation_file.cpp
@@ -4074,7 +4314,7 @@ msgid "Joystick button repetition interval"
msgstr "Joystick düğmesi tekrarlama aralığı"
#: src/settings_translation_file.cpp
-msgid "Joystick deadzone"
+msgid "Joystick dead zone"
msgstr "Joystick ölü bölgesi"
#: src/settings_translation_file.cpp
@@ -5094,12 +5334,6 @@ msgstr ""
"bağlı değiştir."
#: src/settings_translation_file.cpp
-msgid "Makes DirectX work with LuaJIT. Disable if it causes troubles."
-msgstr ""
-"DirectX'in LuaJIT ile çalışmasını sağlar. Sorunlara neden olursa devre dışı "
-"bırakın."
-
-#: src/settings_translation_file.cpp
msgid "Makes all liquids opaque"
msgstr "Tüm sıvıları opak yapar"
@@ -5191,6 +5425,11 @@ msgid "Map save interval"
msgstr "Harita kaydetme aralığı"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Map shadows update frames"
+msgstr "Harita güncelleme zamanı"
+
+#: src/settings_translation_file.cpp
msgid "Mapblock limit"
msgstr "Harita bloğu sınırı"
@@ -5299,6 +5538,10 @@ msgid "Maximum FPS when the window is not focused, or when the game is paused."
msgstr "Pencere odaklanmadığında veya oyun duraklatıldığında en yüksek FPS."
#: src/settings_translation_file.cpp
+msgid "Maximum distance to render shadows."
+msgstr "Gölgeleri işlemek için azami mesafe."
+
+#: src/settings_translation_file.cpp
msgid "Maximum forceloaded blocks"
msgstr "Maksimum zorla yüklenen blok"
@@ -5426,10 +5669,20 @@ msgstr ""
"Kuyruğa almayı kapamak için 0 ve sınırsız kuyruk boyutu için -1."
#: src/settings_translation_file.cpp
-msgid "Maximum time in ms a file download (e.g. a mod download) may take."
+msgid ""
+"Maximum time a file download (e.g. a mod download) may take, stated in "
+"milliseconds."
msgstr ""
-"Bir dosya indirmesinin ms cinsinden alabileceği maksimum zaman (ör: mod "
-"indirme)."
+"Bir dosya indirmesinin (ör: mod indirme) alabileceği azami süre, milisaniye "
+"cinsinden belirtilir."
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum time an interactive request (e.g. server list fetch) may take, "
+"stated in milliseconds."
+msgstr ""
+"Etkileşimli bir isteğin (ör: sunucu listesi getirme) alabileceği azami süre, "
+"milisaniye cinsinden belirtilir."
#: src/settings_translation_file.cpp
msgid "Maximum users"
@@ -5492,8 +5745,8 @@ msgid "Mod channels"
msgstr "Mod kanalları"
#: src/settings_translation_file.cpp
-msgid "Modifies the size of the hudbar elements."
-msgstr "Hudbar öğelerinin boyutunu değiştirir."
+msgid "Modifies the size of the HUD elements."
+msgstr "HUD ögelerinin boyutunu değiştirir."
#: src/settings_translation_file.cpp
msgid "Monospace font path"
@@ -5504,6 +5757,11 @@ msgid "Monospace font size"
msgstr "Eş aralıklı yazı tipi boyutu"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Monospace font size divisible by"
+msgstr "Eş aralıklı yazı tipi boyutu"
+
+#: src/settings_translation_file.cpp
msgid "Mountain height noise"
msgstr "Dağ yükseklik gürültüsü"
@@ -5645,9 +5903,10 @@ msgstr ""
"Birçok kullanıcı için en iyi ayar '1' olabilir."
#: src/settings_translation_file.cpp
+#, fuzzy
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"
+"This is a trade-off between SQLite transaction overhead and\n"
"memory consumption (4096=100MB, as a rule of thumb)."
msgstr ""
"/clearobjects tarafında tek seferde yüklenebilecek ek blokların sayısı.\n"
@@ -5656,7 +5915,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Online Content Repository"
-msgstr "Çevrimiçi İçerik Deposu"
+msgstr "Çevrim İçi İçerik Deposu"
#: src/settings_translation_file.cpp
msgid "Opaque liquids"
@@ -5671,12 +5930,6 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Opaqueness (alpha) of the shadow behind the fallback font, between 0 and 255."
-msgstr ""
-"0 ile 255 arasında yedek yazı tipinin arkasındaki gölgenin opaklığı (alfa)."
-
-#: src/settings_translation_file.cpp
-msgid ""
"Open the pause menu when the window's focus is lost. Does not pause if a "
"formspec is\n"
"open."
@@ -5685,10 +5938,13 @@ msgstr ""
"duraklamaz."
#: src/settings_translation_file.cpp
+msgid "Optional override for chat weblink color."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
-"Path of the fallback font.\n"
-"If “freetype†setting is enabled: Must be a TrueType font.\n"
-"If “freetype†setting is disabled: Must be a bitmap or XML vectors font.\n"
+"Path of the fallback font. Must be a TrueType font.\n"
"This font will be used for certain languages or if the default font is "
"unavailable."
msgstr ""
@@ -5719,10 +5975,9 @@ msgid "Path to texture directory. All textures are first searched from here."
msgstr "Doku dizini konumu. Tüm dokular ilk burada aranır."
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
-"Path to the default font.\n"
-"If “freetype†setting is enabled: Must be a TrueType font.\n"
-"If “freetype†setting is disabled: Must be a bitmap or XML vectors font.\n"
+"Path to the default font. Must be a TrueType font.\n"
"The fallback font will be used if the font cannot be loaded."
msgstr ""
"Öntanımlı yazı tipi konumu.\n"
@@ -5731,10 +5986,9 @@ msgstr ""
"Yazı tipi yüklenemiyorsa yedek yazı tipi kullanılır."
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
-"Path to the monospace font.\n"
-"If “freetype†setting is enabled: Must be a TrueType font.\n"
-"If “freetype†setting is disabled: Must be a bitmap or XML vectors font.\n"
+"Path to the monospace font. Must be a TrueType font.\n"
"This font is used for e.g. the console and profiler screen."
msgstr ""
"Eş aralıklı yazı tipi konumu.\n"
@@ -5795,6 +6049,10 @@ msgid "Player versus player"
msgstr "Oyuncu oyuncuya karşı"
#: src/settings_translation_file.cpp
+msgid "Poisson filtering"
+msgstr "Poisson filtreleme"
+
+#: src/settings_translation_file.cpp
msgid ""
"Port to connect to (UDP).\n"
"Note that the port field in the main menu overrides this setting."
@@ -5845,11 +6103,12 @@ msgid "Prometheus listener address"
msgstr "Prometheus dinleyici adresi"
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
"Prometheus listener address.\n"
-"If minetest is compiled with ENABLE_PROMETHEUS option enabled,\n"
+"If Minetest is compiled with ENABLE_PROMETHEUS option enabled,\n"
"enable metrics listener for Prometheus on that address.\n"
-"Metrics can be fetch on http://127.0.0.1:30000/metrics"
+"Metrics can be fetched on http://127.0.0.1:30000/metrics"
msgstr ""
"Prometheus dinleyici adresi.\n"
"Minetest ENABLE_PROMETHEUS seçeneği etkin olarak derlenmişse,\n"
@@ -6189,6 +6448,46 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Set the shadow strength.\n"
+"Lower value means lighter shadows, higher value means darker shadows."
+msgstr ""
+"Gölge gücünü ayarla.\n"
+"Daha düşük değer daha açık gölgeler, daha yüksek değer daha koyu gölgeler "
+"anlamına gelir."
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid ""
+"Set the soft shadow radius size.\n"
+"Lower values mean sharper shadows, bigger values mean softer shadows.\n"
+"Minimum value: 1.0; maximum value: 10.0"
+msgstr ""
+"Yumuşak gölge yarıçapı boyutunu ayarla.\n"
+"Daha düşük değerler daha keskin, daha büyük değerler daha yumuşak gölgeler "
+"anlamına gelir.\n"
+"En düşük değer 1.0 ve en yüksek değer 10.0"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid ""
+"Set the tilt of Sun/Moon orbit in degrees.\n"
+"Value of 0 means no tilt / vertical orbit.\n"
+"Minimum value: 0.0; maximum value: 60.0"
+msgstr ""
+"Güneş/Ay yörüngesinin eğimini derece olarak ayarla\n"
+"0 değeri, eğim / dikey yörünge olmadığı anlamına gelir.\n"
+"En düşük değer 0.0 ve en yüksek değer 60.0"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set to true to enable Shadow Mapping.\n"
+"Requires shaders to be enabled."
+msgstr ""
+"Gölge Eşlemeyi etkinleştirmek için doğru olarak ayarlayın.\n"
+"Gölgelemelerin etkinleştirilmesini gerektirir."
+
+#: src/settings_translation_file.cpp
+msgid ""
"Set to true to enable waving leaves.\n"
"Requires shaders to be enabled."
msgstr ""
@@ -6212,6 +6511,16 @@ msgstr ""
"Gölgelemeler etkin kılınmalıdır."
#: src/settings_translation_file.cpp
+msgid ""
+"Sets shadow texture quality to 32 bits.\n"
+"On false, 16 bits texture will be used.\n"
+"This can cause much more artifacts in the shadow."
+msgstr ""
+"Gölge dokusu kalitesini 32 bit olarak ayarlar.\n"
+"Yanlış ise 16 bit doku kullanılacaktır.\n"
+"Bu, gölgede çok daha fazla bozulmalara neden olabilir."
+
+#: src/settings_translation_file.cpp
msgid "Shader path"
msgstr "Gölgeleme konumu"
@@ -6228,6 +6537,22 @@ msgstr ""
"Bu yalnızca OpenGL video arka ucu ile çalışır."
#: src/settings_translation_file.cpp
+msgid "Shadow filter quality"
+msgstr "Gölge filtresi kalitesi"
+
+#: src/settings_translation_file.cpp
+msgid "Shadow map max distance in nodes to render shadows"
+msgstr "Gölgeleri işlemek için nodlardaki gölge eşleme azami mesafesi"
+
+#: src/settings_translation_file.cpp
+msgid "Shadow map texture in 32 bits"
+msgstr "32 bitte gölge eşleme dokusu"
+
+#: src/settings_translation_file.cpp
+msgid "Shadow map texture size"
+msgstr "Gölge eşleme dokusu boyutu"
+
+#: src/settings_translation_file.cpp
msgid ""
"Shadow offset (in pixels) of the default font. If 0, then shadow will not be "
"drawn."
@@ -6235,11 +6560,8 @@ msgstr ""
"Öntanımlı yazı tipinin gölge uzaklığı (piksel olarak). 0 ise, gölge çizilmez."
#: src/settings_translation_file.cpp
-msgid ""
-"Shadow offset (in pixels) of the fallback font. If 0, then shadow will not "
-"be drawn."
-msgstr ""
-"Yedek yazı tipinin gölge uzaklığı (piksel olarak). 0 ise, gölge çizilmez."
+msgid "Shadow strength"
+msgstr "Gölge gücü"
#: src/settings_translation_file.cpp
msgid "Shape of the minimap. Enabled = round, disabled = square."
@@ -6262,7 +6584,8 @@ msgstr ""
"Bunu deÄŸiÅŸtirdikten sonra yeniden baÅŸlatma gerekir."
#: src/settings_translation_file.cpp
-msgid "Show nametag backgrounds by default"
+#, fuzzy
+msgid "Show name tag backgrounds by default"
msgstr "Ad etiketi arka planlarını öntanımlı olarak göster"
#: src/settings_translation_file.cpp
@@ -6296,6 +6619,10 @@ msgstr ""
"sonuç olarak yırtılmayı azaltır."
#: src/settings_translation_file.cpp
+msgid "Sky Body Orbit Tilt"
+msgstr "Gökyüzü Gövdesi Yörünge Eğimi"
+
+#: src/settings_translation_file.cpp
msgid "Slice w"
msgstr "Dilim w"
@@ -6353,16 +6680,12 @@ msgid "Sneaking speed, in nodes per second."
msgstr "Sızma hızı, saniye başına nod cinsinden."
#: src/settings_translation_file.cpp
-msgid "Sound"
-msgstr "Ses"
+msgid "Soft shadow radius"
+msgstr "Yumuşak gölge yarıçapı"
#: src/settings_translation_file.cpp
-msgid "Special key"
-msgstr "Özel tuşu"
-
-#: src/settings_translation_file.cpp
-msgid "Special key for climbing/descending"
-msgstr "Tırmanma/alçalma için özel tuş"
+msgid "Sound"
+msgstr "Ses"
#: src/settings_translation_file.cpp
msgid ""
@@ -6388,6 +6711,14 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Spread a complete update of shadow map over given amount of frames.\n"
+"Higher values might make shadows laggy, lower values\n"
+"will consume more resources.\n"
+"Minimum value: 1; maximum value: 16"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Spread of light curve boost range.\n"
"Controls the width of the range to be boosted.\n"
"Standard deviation of the light curve boost Gaussian."
@@ -6517,6 +6848,18 @@ msgid "Texture path"
msgstr "Doku konumu"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid ""
+"Texture size to render the shadow map on.\n"
+"This must be a power of two.\n"
+"Bigger numbers create better shadows but it is also more expensive."
+msgstr ""
+"Gölge eşlemenin işleneceği doku boyutu.\n"
+"Bu, 2'nin bir kuvveti olmalıdır.\n"
+"Daha büyük sayılar daha iyi gölgeler oluşturur ama aynı zamanda daha fazla "
+"kaynak kullanır."
+
+#: src/settings_translation_file.cpp
msgid ""
"Textures on a node may be aligned either to the node or to the world.\n"
"The former mode suits better things like machines, furniture, etc., while\n"
@@ -6537,8 +6880,8 @@ msgid "The URL for the content repository"
msgstr "İçerik deposu için URL"
#: src/settings_translation_file.cpp
-msgid "The deadzone of the joystick"
-msgstr "Joystick ölü bölgesi"
+msgid "The dead zone of the joystick"
+msgstr "Joystick'in ölü bölgesi"
#: src/settings_translation_file.cpp
msgid ""
@@ -6613,14 +6956,14 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"The rendering back-end for Irrlicht.\n"
+"The rendering back-end.\n"
"A restart is required after changing this.\n"
"Note: On Android, stick with OGLES1 if unsure! App may fail to start "
"otherwise.\n"
"On other platforms, OpenGL is recommended.\n"
"Shaders are supported by OpenGL (desktop only) and OGLES2 (experimental)"
msgstr ""
-"Irrlicht için işleme arka ucu.\n"
+"İşleme arka ucu.\n"
"Bunu deÄŸiÅŸtirdikten sonra yeniden baÅŸlatma gerekir.\n"
"Not: Android'de, emin değilseniz OGLES1 kullanın! Başka türlü, uygulama "
"baÅŸlayamayabilir.\n"
@@ -6629,9 +6972,10 @@ msgstr ""
"desteklenmektedir"
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
"The sensitivity of the joystick axes for moving the\n"
-"ingame view frustum around."
+"in-game view frustum around."
msgstr ""
"Oyun-içi görünüm frustum'unu hareket ettirirken\n"
"joystick eksenlerinin hassasiyeti."
@@ -6756,6 +7100,10 @@ msgid "Touch screen threshold"
msgstr "Dokunmatik ekran eÅŸiÄŸi"
#: src/settings_translation_file.cpp
+msgid "Tradeoffs for performance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Trees noise"
msgstr "Ağaçlar gürültüsü"
@@ -6779,7 +7127,7 @@ msgstr "Güvenilen modlar"
#: src/settings_translation_file.cpp
msgid "URL to the server list displayed in the Multiplayer Tab."
-msgstr "Multiplayer sekmesinde görüntülenen sunucu listesi URL'si."
+msgstr "Çok oyunculu sekmesinde görüntülenen sunucu listesinin URL'si."
#: src/settings_translation_file.cpp
msgid "Undersampling"
@@ -6832,8 +7180,9 @@ msgid "Use bilinear filtering when scaling textures."
msgstr "Dokuları boyutlandırırken bilineer filtreleme kullan."
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
-"Use mip mapping to scale textures. May slightly increase performance,\n"
+"Use mipmapping to scale textures. May slightly increase performance,\n"
"especially when using a high resolution texture pack.\n"
"Gamma correct downscaling is not supported."
msgstr ""
@@ -6961,8 +7310,8 @@ msgid "Viewing range"
msgstr "Görüntüleme uzaklığı"
#: src/settings_translation_file.cpp
-msgid "Virtual joystick triggers aux button"
-msgstr "Sanal joystick aux düğmesini tetikler"
+msgid "Virtual joystick triggers Aux1 button"
+msgstr "Sanal joystick Aux1 düğmesini tetikler"
#: src/settings_translation_file.cpp
msgid "Volume"
@@ -7040,6 +7389,10 @@ msgid "Waving plants"
msgstr "Dalgalanan bitkiler"
#: src/settings_translation_file.cpp
+msgid "Weblink color"
+msgstr "Web bağlantısı rengi"
+
+#: 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"
@@ -7062,14 +7415,14 @@ msgstr ""
"sürücüleri için, eski boyutlandırma yöntemini kullan."
#: src/settings_translation_file.cpp
+#, fuzzy
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.\n"
+"memory. Powers of 2 are recommended. This setting is ONLY applied if\n"
+"bilinear/trilinear/anisotropic filtering is enabled.\n"
"This is also used as the base node texture size for world-aligned\n"
"texture autoscaling."
msgstr ""
@@ -7079,27 +7432,16 @@ msgstr ""
"pikselleri\n"
"korumak için kendiliğinden büyütme yapılır. Bu minimum doku boyutunu\n"
"büyütülmüş dokular için ayarlar; daha yüksek değerler daha net görünür,\n"
-"ama daha fazla bellek gerektirir. 2'nin kuvvetleri tavsiye edilir. 1'den "
-"daha\n"
-"yükseğe ayarlamanın, bilineer/trilineer/anisotropik filtreler etkin "
-"deÄŸilse,\n"
-"görünür bit etkisi olmayabilir.\n"
-"Bu, dünya hizalı doku kendilinden boyutlandırmada taban nod doku boyutu\n"
+"ama daha fazla bellek gerektirir. 2'nin kuvvetleri tavsiye edilir. Bu ayar "
+"YALNIZCA\n"
+"bilineer/trilineer/anisotropik filtreler etkinse uygulanır.\n"
+"Bu, dünya hizalı doku kendiliğinden boyutlandırmada taban nod doku boyutu\n"
"olarak da kullanılır."
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
-"Whether FreeType fonts are used, requires FreeType support to be compiled "
-"in.\n"
-"If disabled, bitmap and XML vectors fonts are used instead."
-msgstr ""
-"Freetype yazı tiplerinin kullanılıp kullanılmayacağını, freetype desteği ile "
-"derlenmiş olmalıdır.\n"
-"Devre dışı kılınırsa, yerine bitmap ve XML vektör yazı tipleri kullanılır."
-
-#: src/settings_translation_file.cpp
-msgid ""
-"Whether nametag backgrounds should be shown by default.\n"
+"Whether name tag backgrounds should be shown by default.\n"
"Mods may still set a background."
msgstr ""
"Ad etiketi arka planlarının öntanımlı olarak gösterilip gösterilmeyileceği.\n"
@@ -7160,8 +7502,9 @@ msgstr ""
"ile aynı etkiye sahiptir)."
#: src/settings_translation_file.cpp
-msgid "Width component of the initial window size."
-msgstr "İlk pencere boyutunun genişlik bileşeni."
+msgid "Width component of the initial window size. Ignored in fullscreen mode."
+msgstr ""
+"İlk pencere boyutunun genişlik bileşeni. Tam ekran kipinde yok sayılır."
#: src/settings_translation_file.cpp
msgid "Width of the selection box lines around nodes."
@@ -7262,45 +7605,22 @@ msgid "Y-level of seabed."
msgstr "Deniz yatağının Y-seviyesi."
#: src/settings_translation_file.cpp
-msgid ""
-"ZLib compression level to use when saving mapblocks to disk.\n"
-"-1 - Zlib's default compression level\n"
-"0 - no compresson, fastest\n"
-"9 - best compression, slowest\n"
-"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)"
-msgstr ""
-"Harita kütlerini diske kaydederken kullanılacak ZLib sıkıştırma düzeyi.\n"
-"-1 - Zlib'in varsayılan sıkıştırma düzeyi\n"
-"0 - hiçbir sıkıştırma yok, en hızlı\n"
-"9 - en iyi sıkıştırma, en yavaş\n"
-"(seviye 1-3, Zlib'in \"hızlı\" , 4-9 sıradan yöntemi kullanır)"
-
-#: src/settings_translation_file.cpp
-msgid ""
-"ZLib compression level to use when sending mapblocks to the client.\n"
-"-1 - Zlib's default compression level\n"
-"0 - no compresson, fastest\n"
-"9 - best compression, slowest\n"
-"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)"
-msgstr ""
-"Harita kütlerini istemciye(client) gönderirken kullanılacak ZLib sıkıştırma "
-"düzeyi.\n"
-"-1 - Zlib'in varsayılan sıkıştırma düzeyi\n"
-"0 - hiçbir sıkıştırma yok, en hızlı\n"
-"9 - en iyi sıkıştırma, en yavaş\n"
-"(seviye 1-3, Zlib'in \"hızlı\" , 4-9 sıradan yöntemi kullanır)"
-
-#: src/settings_translation_file.cpp
msgid "cURL file download timeout"
msgstr "cURL dosya indirme zaman aşımı"
#: src/settings_translation_file.cpp
+msgid "cURL interactive timeout"
+msgstr "cURL etkileşimli zaman aşımı"
+
+#: src/settings_translation_file.cpp
msgid "cURL parallel limit"
msgstr "cURL paralel sınırı"
-#: src/settings_translation_file.cpp
-msgid "cURL timeout"
-msgstr "cURL zaman aşımı"
+#~ msgid "- Creative Mode: "
+#~ msgstr "- Yaratıcı Kip: "
+
+#~ msgid "- Damage: "
+#~ msgstr "- Hasar: "
#~ msgid ""
#~ "0 = parallax occlusion with slope information (faster).\n"
@@ -7309,6 +7629,9 @@ msgstr "cURL zaman aşımı"
#~ "0 = eğim bilgili paralaks oklüzyon (daha hızlı).\n"
#~ "1 = kabartma eÅŸleme (daha yavaÅŸ, daha doÄŸru)."
+#~ msgid "Address / Port"
+#~ msgstr "Adres / Port"
+
#~ msgid ""
#~ "Adjust the gamma encoding for the light tables. Higher numbers are "
#~ "brighter.\n"
@@ -7329,6 +7652,9 @@ msgstr "cURL zaman aşımı"
#~ msgid "Back"
#~ msgstr "Geri"
+#~ msgid "Bits per pixel (aka color depth) in fullscreen mode."
+#~ msgstr "Tam ekran kipinde piksel başına bit (renk derinliği)."
+
#~ msgid "Bump Mapping"
#~ msgstr "Tümsek Eşleme"
@@ -7370,13 +7696,26 @@ msgstr "cURL zaman aşımı"
#~ "Tünellerin genişliğini denetler, daha küçük bir değer daha geniş tüneller "
#~ "yaratır."
+#~ msgid "Credits"
+#~ msgstr "Hakkında"
+
#~ msgid "Crosshair color (R,G,B)."
#~ msgstr "Artı rengi (R,G,B)."
+#~ msgid "Damage enabled"
+#~ msgstr "Hasar etkin"
+
#~ msgid "Darkness sharpness"
#~ msgstr "Karanlık keskinliği"
#~ msgid ""
+#~ "Default timeout for cURL, stated in milliseconds.\n"
+#~ "Only has an effect if compiled with cURL."
+#~ msgstr ""
+#~ "CURL için öntanımlı zaman aşımı, milisaniye cinsinden.\n"
+#~ "Yalnızca cURL ile derlenmiş ise bir etkisi vardır."
+
+#~ msgid ""
#~ "Defines areas of floatland smooth terrain.\n"
#~ "Smooth floatlands occur when noise > 0."
#~ msgstr ""
@@ -7443,6 +7782,15 @@ msgstr "cURL zaman aşımı"
#~ msgid "FPS in pause menu"
#~ msgstr "Duraklat menüsünde FPS"
+#~ msgid "Fallback font shadow"
+#~ msgstr "Geri dönüş yazı tipi gölgesi"
+
+#~ msgid "Fallback font shadow alpha"
+#~ msgstr "Geri dönüş yazı tipi gölge saydamlığı"
+
+#~ msgid "Fallback font size"
+#~ msgstr "Geri dönüş yazı tipi boyutu"
+
#~ msgid "Floatland base height noise"
#~ msgstr "Yüzenkara taban yükseklik gürültüsü"
@@ -7452,6 +7800,15 @@ msgstr "cURL zaman aşımı"
#~ msgid "Font shadow alpha (opaqueness, between 0 and 255)."
#~ msgstr "Yazı tipi gölge saydamlığı (solukluk, 0 ve 255 arası)."
+#~ msgid "Font size of the fallback font in point (pt)."
+#~ msgstr "Yedek yazı tipinin nokta (pt) olarak boyutu."
+
+#~ msgid "FreeType fonts"
+#~ msgstr "Freetype yazı tipleri"
+
+#~ msgid "Full screen BPP"
+#~ msgstr "Tam ekran BPP"
+
#~ msgid "Gamma"
#~ msgstr "Gama"
@@ -7461,9 +7818,15 @@ msgstr "cURL zaman aşımı"
#~ msgid "Generate normalmaps"
#~ msgstr "Normal eşlemeleri üret"
+#~ msgid "High-precision FPU"
+#~ msgstr "Yüksek hassasiyetli FPU"
+
#~ msgid "IPv6 support."
#~ msgstr "IPv6 desteÄŸi."
+#~ msgid "Install: file: \"$1\""
+#~ msgstr "Kur: dosya: \"$1\""
+
#~ msgid "Lava depth"
#~ msgstr "Lav derinliÄŸi"
@@ -7479,6 +7842,11 @@ msgstr "cURL zaman aşımı"
#~ msgid "Main menu style"
#~ msgstr "Ana menü stili"
+#~ msgid "Makes DirectX work with LuaJIT. Disable if it causes troubles."
+#~ msgstr ""
+#~ "DirectX'in LuaJIT ile çalışmasını sağlar. Sorunlara neden olursa devre "
+#~ "dışı bırakın."
+
#~ msgid "Minimap in radar mode, Zoom x2"
#~ msgstr "Radar kipinde mini harita, Yakınlaştırma x2"
@@ -7491,6 +7859,9 @@ msgstr "cURL zaman aşımı"
#~ msgid "Minimap in surface mode, Zoom x4"
#~ msgstr "Yüzey kipinde mini harita, Yakınlaştırma x4"
+#~ msgid "Name / Password"
+#~ msgstr "Ad / Parola"
+
#~ msgid "Name/Password"
#~ msgstr "Ad/Åžifre"
@@ -7509,6 +7880,13 @@ msgstr "cURL zaman aşımı"
#~ msgid "Ok"
#~ msgstr "Tamam"
+#~ msgid ""
+#~ "Opaqueness (alpha) of the shadow behind the fallback font, between 0 and "
+#~ "255."
+#~ msgstr ""
+#~ "0 ile 255 arasında yedek yazı tipinin arkasındaki gölgenin opaklığı "
+#~ "(alfa)."
+
#~ msgid "Overall bias of parallax occlusion effect, usually scale/2."
#~ msgstr "Paralaks oklüzyon efektinin genel sapması, genellikle boyut/2."
@@ -7545,15 +7923,41 @@ msgstr "cURL zaman aşımı"
#~ msgid "Projecting dungeons"
#~ msgstr "İzdüşüm zindanlar"
+#~ msgid "PvP enabled"
+#~ msgstr "SavaÅŸ etkin"
+
#~ msgid "Reset singleplayer world"
#~ msgstr "Tek oyunculu dünyayı sıfırla"
#~ msgid "Select Package File:"
#~ msgstr "Paket Dosyası Seç:"
+#~ msgid ""
+#~ "Set the shadow update time.\n"
+#~ "Lower value means shadows and map updates faster, but it consume more "
+#~ "resources.\n"
+#~ "Minimun value 0.001 seconds max value 0.2 seconds"
+#~ msgstr ""
+#~ "Gölge güncelleme zamanını ayarla.\n"
+#~ "Daha düşük değer, gölgeler ve harita güncellemelerinin daha hızlı olması "
+#~ "anlamına gelir, ancak daha fazla kaynak tüketir.\n"
+#~ "En düşük değer 0,001 saniye, en yüksek değer 0,2 saniyedir"
+
#~ msgid "Shadow limit"
#~ msgstr "Gölge sınırı"
+#~ msgid ""
+#~ "Shadow offset (in pixels) of the fallback font. If 0, then shadow will "
+#~ "not be drawn."
+#~ msgstr ""
+#~ "Yedek yazı tipinin gölge uzaklığı (piksel olarak). 0 ise, gölge çizilmez."
+
+#~ msgid "Special"
+#~ msgstr "Özel"
+
+#~ msgid "Special key"
+#~ msgstr "Özel tuşu"
+
#~ msgid "Start Singleplayer"
#~ msgstr "Tek oyunculu baÅŸlat"
@@ -7566,6 +7970,9 @@ msgstr "cURL zaman aşımı"
#~ msgid "This font will be used for certain languages."
#~ msgstr "Belirli diller için bu yazı tipi kullanılacak."
+#~ msgid "To enable shaders the OpenGL driver needs to be used."
+#~ msgstr "OpenGL sürücüleri seçilmeden gölgelemeler etkinleştirilemez."
+
#~ msgid "Toggle Cinematic"
#~ msgstr "Sinematik Aç/Kapa"
@@ -7588,6 +7995,15 @@ msgstr "cURL zaman aşımı"
#~ msgid "Waving water"
#~ msgstr "Dalgalanan su"
+#~ msgid ""
+#~ "Whether FreeType fonts are used, requires FreeType support to be compiled "
+#~ "in.\n"
+#~ "If disabled, bitmap and XML vectors fonts are used instead."
+#~ msgstr ""
+#~ "Freetype yazı tiplerinin kullanılıp kullanılmayacağını, freetype desteği "
+#~ "ile derlenmiş olmalıdır.\n"
+#~ "Devre dışı kılınırsa, yerine bitmap ve XML vektör yazı tipleri kullanılır."
+
#~ msgid "Whether dungeons occasionally project from the terrain."
#~ msgstr "Zindanların bazen araziden yansıyıp yansımayacağı."
@@ -7602,3 +8018,9 @@ msgstr "cURL zaman aşımı"
#~ msgid "Yes"
#~ msgstr "Evet"
+
+#~ msgid "You died."
+#~ msgstr "Öldün."
+
+#~ msgid "needs_fallback_font"
+#~ msgstr "no"
diff --git a/po/tt/minetest.po b/po/tt/minetest.po
new file mode 100644
index 000000000..882032232
--- /dev/null
+++ b/po/tt/minetest.po
@@ -0,0 +1,6645 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the minetest package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: minetest\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2022-01-25 23:19+0100\n"
+"PO-Revision-Date: 2021-04-08 18:26+0000\n"
+"Last-Translator: Timur Seber <seber.tatsoft@gmail.com>\n"
+"Language-Team: Tatar <https://hosted.weblate.org/projects/minetest/minetest/"
+"tt/>\n"
+"Language: tt\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 4.6-dev\n"
+
+#: builtin/client/chatcommands.lua
+msgid "Clear the out chat queue"
+msgstr ""
+
+#: builtin/client/chatcommands.lua
+msgid "Empty command."
+msgstr ""
+
+#: builtin/client/chatcommands.lua
+msgid "Exit to main menu"
+msgstr ""
+
+#: builtin/client/chatcommands.lua
+msgid "Invalid command: "
+msgstr ""
+
+#: builtin/client/chatcommands.lua
+msgid "Issued command: "
+msgstr ""
+
+#: builtin/client/chatcommands.lua
+msgid "List online players"
+msgstr ""
+
+#: builtin/client/chatcommands.lua
+msgid "Online players: "
+msgstr ""
+
+#: builtin/client/chatcommands.lua
+msgid "The out chat queue is now empty."
+msgstr ""
+
+#: builtin/client/chatcommands.lua
+msgid "This command is disabled by server."
+msgstr ""
+
+#: builtin/client/death_formspec.lua src/client/game.cpp
+msgid "Respawn"
+msgstr "Тергезелергә"
+
+#: builtin/client/death_formspec.lua src/client/game.cpp
+msgid "You died"
+msgstr "Сез үлдегез"
+
+#: builtin/common/chatcommands.lua
+msgid "Available commands:"
+msgstr ""
+
+#: builtin/common/chatcommands.lua
+msgid "Available commands: "
+msgstr ""
+
+#: builtin/common/chatcommands.lua
+msgid "Command not available: "
+msgstr ""
+
+#: builtin/common/chatcommands.lua
+msgid "Get help for commands"
+msgstr ""
+
+#: builtin/common/chatcommands.lua
+msgid ""
+"Use '.help <cmd>' to get more information, or '.help all' to list everything."
+msgstr ""
+
+#: builtin/common/chatcommands.lua
+msgid "[all | <cmd>]"
+msgstr ""
+
+#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp
+msgid "OK"
+msgstr "Ярый"
+
+#: builtin/fstk/ui.lua
+msgid "<none available>"
+msgstr ""
+
+#: builtin/fstk/ui.lua
+msgid "An error occurred in a Lua script:"
+msgstr ""
+
+#: builtin/fstk/ui.lua
+msgid "An error occurred:"
+msgstr ""
+
+#: builtin/fstk/ui.lua
+msgid "Main menu"
+msgstr ""
+
+#: builtin/fstk/ui.lua
+msgid "Reconnect"
+msgstr ""
+
+#: builtin/fstk/ui.lua
+msgid "The server has requested a reconnect:"
+msgstr ""
+
+#: 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 "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_contentstore.lua
+#: builtin/mainmenu/dlg_create_world.lua
+#: builtin/mainmenu/dlg_delete_content.lua
+#: builtin/mainmenu/dlg_delete_world.lua
+#: builtin/mainmenu/dlg_rename_modpack.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua src/client/keycode.cpp
+#: src/gui/guiConfirmRegistration.cpp src/gui/guiKeyChangeMenu.cpp
+#: src/gui/guiPasswordChange.cpp
+msgid "Cancel"
+msgstr "Баш тарту"
+
+#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/dlg_contentstore.lua
+#: builtin/mainmenu/tab_content.lua
+msgid "Dependencies:"
+msgstr ""
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "Disable all"
+msgstr ""
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "Disable modpack"
+msgstr ""
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "Enable all"
+msgstr ""
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "Enable modpack"
+msgstr ""
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid ""
+"Failed to enable mod \"$1\" as it contains disallowed characters. Only "
+"characters [a-z0-9_] are allowed."
+msgstr ""
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "Find More Mods"
+msgstr ""
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "Mod:"
+msgstr ""
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "No (optional) dependencies"
+msgstr ""
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "No game description provided."
+msgstr ""
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "No hard dependencies"
+msgstr ""
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "No modpack description provided."
+msgstr ""
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "No optional dependencies"
+msgstr ""
+
+#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_content.lua
+msgid "Optional dependencies:"
+msgstr ""
+
+#: builtin/mainmenu/dlg_config_world.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua src/gui/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_contentstore.lua
+msgid "\"$1\" already exists. Would you like to overwrite it?"
+msgstr ""
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "$1 and $2 dependencies will be installed."
+msgstr ""
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "$1 by $2"
+msgstr ""
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid ""
+"$1 downloading,\n"
+"$2 queued"
+msgstr ""
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "$1 downloading..."
+msgstr ""
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "$1 required dependencies could not be found."
+msgstr ""
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "$1 will be installed, and $2 dependencies will be skipped."
+msgstr ""
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "All packages"
+msgstr ""
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "Already installed"
+msgstr ""
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "Back to Main Menu"
+msgstr ""
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "Base Game:"
+msgstr ""
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "ContentDB is not available when Minetest was compiled without cURL"
+msgstr ""
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "Downloading..."
+msgstr ""
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "Failed to download $1"
+msgstr ""
+
+#: builtin/mainmenu/dlg_contentstore.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Games"
+msgstr ""
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "Install"
+msgstr ""
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "Install $1"
+msgstr ""
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "Install missing dependencies"
+msgstr ""
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "Install: Unsupported file type or broken archive"
+msgstr ""
+
+#: builtin/mainmenu/dlg_contentstore.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Mods"
+msgstr ""
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "No packages could be retrieved"
+msgstr ""
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "No results"
+msgstr ""
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "No updates"
+msgstr ""
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "Not found"
+msgstr ""
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "Overwrite"
+msgstr ""
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "Please check that the base game is correct."
+msgstr ""
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "Queued"
+msgstr ""
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "Texture packs"
+msgstr ""
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "Uninstall"
+msgstr ""
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "Update"
+msgstr ""
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "Update All [$1]"
+msgstr ""
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "View more information in a web browser"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "A world named \"$1\" already exists"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Additional terrain"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
+msgid "Altitude chill"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Altitude dry"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Biome blending"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Biomes"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Caverns"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Caves"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Create"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Decorations"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Download a game, 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
+msgid "Dungeons"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Flat terrain"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Floating landmasses in the sky"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Floatlands (experimental)"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
+msgid "Game"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Generate non-fractal terrain: Oceans and underground"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Hills"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Humid rivers"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Increases humidity around rivers"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Lakes"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Low humidity and high heat causes shallow or dry rivers"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
+msgid "Mapgen"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
+msgid "Mapgen flags"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Mapgen-specific flags"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Mountains"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Mud flow"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Network of tunnels and caves"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "No game selected"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Reduces heat with altitude"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Reduces humidity with altitude"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Rivers"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Sea level rivers"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Seed"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Smooth transition between biomes"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid ""
+"Structures appearing on the terrain (no effect on trees and jungle grass "
+"created by v6)"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Structures appearing on the terrain, typically trees and plants"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Temperate, Desert"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Temperate, Desert, Jungle"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Temperate, Desert, Jungle, Tundra, Taiga"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Terrain surface erosion"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Trees and jungle grass"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Vary river depth"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Very large caverns deep in the underground"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Warning: The 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 games installed."
+msgstr ""
+
+#: builtin/mainmenu/dlg_delete_content.lua
+msgid "Are you sure you want to delete \"$1\"?"
+msgstr ""
+
+#: builtin/mainmenu/dlg_delete_content.lua
+#: builtin/mainmenu/dlg_delete_world.lua builtin/mainmenu/tab_local.lua
+#: src/client/keycode.cpp
+msgid "Delete"
+msgstr ""
+
+#: builtin/mainmenu/dlg_delete_content.lua
+msgid "pkgmgr: failed to delete \"$1\""
+msgstr ""
+
+#: builtin/mainmenu/dlg_delete_content.lua
+msgid "pkgmgr: invalid path \"$1\""
+msgstr ""
+
+#: builtin/mainmenu/dlg_delete_world.lua
+msgid "Delete World \"$1\"?"
+msgstr ""
+
+#: builtin/mainmenu/dlg_rename_modpack.lua
+msgid "Accept"
+msgstr ""
+
+#: builtin/mainmenu/dlg_rename_modpack.lua
+msgid "Rename Modpack:"
+msgstr ""
+
+#: builtin/mainmenu/dlg_rename_modpack.lua
+msgid ""
+"This modpack has an explicit name given in its modpack.conf which will "
+"override any renaming here."
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "(No description of setting given)"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "2D Noise"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "< Back to Settings page"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Browse"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_settings.lua
+msgid "Disabled"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Edit"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Enabled"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Lacunarity"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Octaves"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua src/settings_translation_file.cpp
+msgid "Offset"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Persistence"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Please enter a valid integer."
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Please enter a valid number."
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Restore Default"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua src/settings_translation_file.cpp
+msgid "Scale"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_online.lua
+msgid "Search"
+msgstr "Эзләү"
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Select directory"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Select file"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Show technical names"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "The value must be at least $1."
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "The value must not be larger than $1."
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "X"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "X spread"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Y"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Y spread"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Z"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Z spread"
+msgstr ""
+
+#. ~ "absvalue" is a noise parameter flag.
+#. It is short for "absolute value".
+#. It can be enabled in noise settings in
+#. main menu -> "All Settings".
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "absvalue"
+msgstr ""
+
+#. ~ "defaults" is a noise parameter flag.
+#. It describes the default processing options
+#. for noise settings in main menu -> "All Settings".
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "defaults"
+msgstr ""
+
+#. ~ "eased" is a noise parameter flag.
+#. It is used to make the map smoother and
+#. can be enabled in noise settings in
+#. main menu -> "All Settings".
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "eased"
+msgstr ""
+
+#: builtin/mainmenu/pkgmgr.lua
+msgid "$1 (Enabled)"
+msgstr ""
+
+#: builtin/mainmenu/pkgmgr.lua
+msgid "$1 mods"
+msgstr ""
+
+#: builtin/mainmenu/pkgmgr.lua
+msgid "Failed to install $1 to $2"
+msgstr ""
+
+#: builtin/mainmenu/pkgmgr.lua
+msgid "Install Mod: Unable to find real mod name for: $1"
+msgstr ""
+
+#: builtin/mainmenu/pkgmgr.lua
+msgid "Install Mod: Unable to find suitable folder name for modpack $1"
+msgstr ""
+
+#: builtin/mainmenu/pkgmgr.lua
+msgid "Unable to find a valid mod or modpack"
+msgstr ""
+
+#: builtin/mainmenu/pkgmgr.lua
+msgid "Unable to install a $1 as a texture pack"
+msgstr ""
+
+#: builtin/mainmenu/pkgmgr.lua
+msgid "Unable to install a game as a $1"
+msgstr ""
+
+#: builtin/mainmenu/pkgmgr.lua
+msgid "Unable to install a mod as a $1"
+msgstr ""
+
+#: builtin/mainmenu/pkgmgr.lua
+msgid "Unable to install a modpack as a $1"
+msgstr ""
+
+#: builtin/mainmenu/serverlistmgr.lua src/client/game.cpp
+msgid "Loading..."
+msgstr ""
+
+#: builtin/mainmenu/serverlistmgr.lua
+msgid "Public server list is disabled"
+msgstr ""
+
+#: builtin/mainmenu/serverlistmgr.lua
+msgid "Try reenabling public serverlist and check your internet connection."
+msgstr ""
+
+#: builtin/mainmenu/tab_about.lua
+msgid "About"
+msgstr ""
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Active Contributors"
+msgstr ""
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Active renderer:"
+msgstr ""
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Core Developers"
+msgstr ""
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Open User Data Directory"
+msgstr ""
+
+#: builtin/mainmenu/tab_about.lua
+msgid ""
+"Opens the directory that contains user-provided worlds, games, mods,\n"
+"and texture packs in a file manager / explorer."
+msgstr ""
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Previous Contributors"
+msgstr ""
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Previous Core Developers"
+msgstr ""
+
+#: builtin/mainmenu/tab_content.lua
+msgid "Browse online content"
+msgstr ""
+
+#: builtin/mainmenu/tab_content.lua
+msgid "Content"
+msgstr ""
+
+#: builtin/mainmenu/tab_content.lua
+msgid "Disable Texture Pack"
+msgstr ""
+
+#: builtin/mainmenu/tab_content.lua
+msgid "Information:"
+msgstr ""
+
+#: builtin/mainmenu/tab_content.lua
+msgid "Installed Packages:"
+msgstr ""
+
+#: builtin/mainmenu/tab_content.lua
+msgid "No dependencies."
+msgstr ""
+
+#: builtin/mainmenu/tab_content.lua
+msgid "No package description available"
+msgstr ""
+
+#: builtin/mainmenu/tab_content.lua
+msgid "Rename"
+msgstr ""
+
+#: builtin/mainmenu/tab_content.lua
+msgid "Uninstall Package"
+msgstr ""
+
+#: builtin/mainmenu/tab_content.lua
+msgid "Use Texture Pack"
+msgstr ""
+
+#: builtin/mainmenu/tab_local.lua
+msgid "Announce Server"
+msgstr ""
+
+#: builtin/mainmenu/tab_local.lua
+msgid "Bind Address"
+msgstr ""
+
+#: builtin/mainmenu/tab_local.lua
+msgid "Creative Mode"
+msgstr ""
+
+#: builtin/mainmenu/tab_local.lua
+msgid "Enable Damage"
+msgstr ""
+
+#: builtin/mainmenu/tab_local.lua
+msgid "Host Game"
+msgstr ""
+
+#: builtin/mainmenu/tab_local.lua
+msgid "Host Server"
+msgstr ""
+
+#: builtin/mainmenu/tab_local.lua
+msgid "Install games from ContentDB"
+msgstr ""
+
+#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
+msgid "Name"
+msgstr ""
+
+#: builtin/mainmenu/tab_local.lua
+msgid "New"
+msgstr ""
+
+#: builtin/mainmenu/tab_local.lua
+msgid "No world created or selected!"
+msgstr ""
+
+#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
+msgid "Password"
+msgstr ""
+
+#: builtin/mainmenu/tab_local.lua
+msgid "Play Game"
+msgstr ""
+
+#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
+msgid "Port"
+msgstr ""
+
+#: builtin/mainmenu/tab_local.lua
+msgid "Select Mods"
+msgstr ""
+
+#: builtin/mainmenu/tab_local.lua
+msgid "Select World:"
+msgstr ""
+
+#: builtin/mainmenu/tab_local.lua
+msgid "Server Port"
+msgstr ""
+
+#: builtin/mainmenu/tab_local.lua
+msgid "Start Game"
+msgstr ""
+
+#: builtin/mainmenu/tab_online.lua
+msgid "Address"
+msgstr ""
+
+#: builtin/mainmenu/tab_online.lua src/client/keycode.cpp
+msgid "Clear"
+msgstr ""
+
+#: builtin/mainmenu/tab_online.lua
+msgid "Connect"
+msgstr ""
+
+#: builtin/mainmenu/tab_online.lua
+msgid "Creative mode"
+msgstr ""
+
+#. ~ PvP = Player versus Player
+#: builtin/mainmenu/tab_online.lua
+msgid "Damage / PvP"
+msgstr ""
+
+#: builtin/mainmenu/tab_online.lua
+msgid "Del. Favorite"
+msgstr ""
+
+#: builtin/mainmenu/tab_online.lua
+msgid "Favorites"
+msgstr ""
+
+#: builtin/mainmenu/tab_online.lua
+msgid "Incompatible Servers"
+msgstr ""
+
+#: builtin/mainmenu/tab_online.lua
+msgid "Join Game"
+msgstr ""
+
+#: builtin/mainmenu/tab_online.lua
+msgid "Ping"
+msgstr ""
+
+#: builtin/mainmenu/tab_online.lua
+msgid "Public Servers"
+msgstr ""
+
+#: builtin/mainmenu/tab_online.lua
+msgid "Refresh"
+msgstr ""
+
+#: builtin/mainmenu/tab_online.lua
+msgid "Server Description"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "2x"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "3D Clouds"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "4x"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "8x"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "All Settings"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Antialiasing:"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Autosave Screen Size"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Bilinear Filter"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua src/client/game.cpp
+msgid "Change Keys"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Connected Glass"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
+msgid "Dynamic shadows"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Dynamic shadows: "
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Fancy Leaves"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "High"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Low"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Medium"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Mipmap"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Mipmap + Aniso. Filter"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "No Filter"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "No Mipmap"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Node Highlighting"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Node Outlining"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "None"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Opaque Leaves"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Opaque Water"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Particles"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Screen:"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Settings"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
+msgid "Shaders"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Shaders (experimental)"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Shaders (unavailable)"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Simple Leaves"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Smooth Lighting"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Texturing:"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
+msgid "Tone Mapping"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Touchthreshold: (px)"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Trilinear Filter"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Ultra High"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Very Low"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Waving Leaves"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Waving Liquids"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Waving Plants"
+msgstr ""
+
+#: src/client/client.cpp src/client/game.cpp
+msgid "Connection timed out."
+msgstr ""
+
+#: src/client/client.cpp
+msgid "Done!"
+msgstr ""
+
+#: src/client/client.cpp
+msgid "Initializing nodes"
+msgstr ""
+
+#: src/client/client.cpp
+msgid "Initializing nodes..."
+msgstr ""
+
+#: src/client/client.cpp
+msgid "Loading textures..."
+msgstr ""
+
+#: src/client/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 "Please choose a name!"
+msgstr ""
+
+#: src/client/clientlauncher.cpp
+msgid "Provided password file failed to open: "
+msgstr ""
+
+#: src/client/clientlauncher.cpp
+msgid "Provided world path doesn't exist: "
+msgstr ""
+
+#: src/client/game.cpp
+msgid ""
+"\n"
+"Check debug.txt for details."
+msgstr ""
+
+#: src/client/game.cpp
+msgid "- Address: "
+msgstr ""
+
+#: src/client/game.cpp
+msgid "- Mode: "
+msgstr ""
+
+#: src/client/game.cpp
+msgid "- Port: "
+msgstr ""
+
+#: src/client/game.cpp
+msgid "- Public: "
+msgstr ""
+
+#. ~ PvP = Player versus Player
+#: src/client/game.cpp
+msgid "- PvP: "
+msgstr ""
+
+#: src/client/game.cpp
+msgid "- Server Name: "
+msgstr ""
+
+#: src/client/game.cpp
+msgid "A serialization error occurred:"
+msgstr ""
+
+#: src/client/game.cpp
+#, c-format
+msgid "Access denied. Reason: %s"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Automatic forward disabled"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Automatic forward enabled"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Block bounds hidden"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Block bounds shown for all blocks"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Block bounds shown for current block"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Block bounds shown for nearby blocks"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Camera update disabled"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Camera update enabled"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Can't show block bounds (need 'basic_debug' privilege)"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Change Password"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Cinematic mode disabled"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Cinematic mode enabled"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Client disconnected"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Client side scripting is disabled"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Connecting to server..."
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Connection failed for unknown reason"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Continue"
+msgstr ""
+
+#: src/client/game.cpp
+#, c-format
+msgid ""
+"Controls:\n"
+"- %s: move forwards\n"
+"- %s: move backwards\n"
+"- %s: move left\n"
+"- %s: move right\n"
+"- %s: jump/climb up\n"
+"- %s: dig/punch\n"
+"- %s: place/use\n"
+"- %s: sneak/climb down\n"
+"- %s: drop item\n"
+"- %s: inventory\n"
+"- Mouse: turn/look\n"
+"- Mouse wheel: select item\n"
+"- %s: chat\n"
+msgstr ""
+
+#: src/client/game.cpp
+#, c-format
+msgid "Couldn't resolve address: %s"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Creating client..."
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Creating server..."
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Debug info and profiler graph hidden"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Debug info shown"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Debug info, profiler graph, and wireframe hidden"
+msgstr ""
+
+#: src/client/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/client/game.cpp
+msgid "Disabled unlimited viewing range"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Enabled unlimited viewing range"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Exit to Menu"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Exit to OS"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Fast mode disabled"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Fast mode enabled"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Fast mode enabled (note: no 'fast' privilege)"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Fly mode disabled"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Fly mode enabled"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Fly mode enabled (note: no 'fly' privilege)"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Fog disabled"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Fog enabled"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Game info:"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Game paused"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Hosting server"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Item definitions..."
+msgstr ""
+
+#: src/client/game.cpp
+msgid "KiB/s"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Media..."
+msgstr ""
+
+#: src/client/game.cpp
+msgid "MiB/s"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Minimap currently disabled by game or mod"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Multiplayer"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Noclip mode disabled"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Noclip mode enabled"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Noclip mode enabled (note: no 'noclip' privilege)"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Node definitions..."
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Off"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "On"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Pitch move mode disabled"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Pitch move mode enabled"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Profiler graph shown"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Remote server"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Resolving address..."
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Shutting down..."
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Singleplayer"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Sound Volume"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Sound muted"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Sound system is disabled"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Sound system is not supported on this build"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Sound unmuted"
+msgstr ""
+
+#: src/client/game.cpp
+#, c-format
+msgid "The server is probably running a different version of %s."
+msgstr ""
+
+#: src/client/game.cpp
+#, c-format
+msgid "Unable to connect to %s because IPv6 is disabled"
+msgstr ""
+
+#: src/client/game.cpp
+#, c-format
+msgid "Unable to listen on %s because IPv6 is disabled"
+msgstr ""
+
+#: src/client/game.cpp
+#, c-format
+msgid "Viewing range changed to %d"
+msgstr ""
+
+#: src/client/game.cpp
+#, c-format
+msgid "Viewing range is at maximum: %d"
+msgstr ""
+
+#: src/client/game.cpp
+#, c-format
+msgid "Viewing range is at minimum: %d"
+msgstr ""
+
+#: src/client/game.cpp
+#, c-format
+msgid "Volume changed to %d%%"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Wireframe shown"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Zoom currently disabled by game or mod"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "ok"
+msgstr ""
+
+#: src/client/gameui.cpp
+msgid "Chat hidden"
+msgstr ""
+
+#: src/client/gameui.cpp
+msgid "Chat shown"
+msgstr ""
+
+#: src/client/gameui.cpp
+msgid "HUD hidden"
+msgstr ""
+
+#: src/client/gameui.cpp
+msgid "HUD shown"
+msgstr ""
+
+#: src/client/gameui.cpp
+msgid "Profiler hidden"
+msgstr ""
+
+#: src/client/gameui.cpp
+#, c-format
+msgid "Profiler shown (page %d of %d)"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Apps"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Backspace"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Caps Lock"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Control"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Down"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "End"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Erase EOF"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Execute"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Help"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Home"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "IME Accept"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "IME Convert"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "IME Escape"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "IME Mode Change"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "IME Nonconvert"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Insert"
+msgstr ""
+
+#: src/client/keycode.cpp src/gui/guiKeyChangeMenu.cpp
+msgid "Left"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Left Button"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Left Control"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Left Menu"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Left Shift"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Left Windows"
+msgstr ""
+
+#. ~ Key name, common on Windows keyboards
+#: src/client/keycode.cpp
+msgid "Menu"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Middle Button"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Num Lock"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Numpad *"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Numpad +"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Numpad -"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Numpad ."
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Numpad /"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Numpad 0"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Numpad 1"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Numpad 2"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Numpad 3"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Numpad 4"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Numpad 5"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Numpad 6"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Numpad 7"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Numpad 8"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Numpad 9"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "OEM Clear"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Page down"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Page up"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Pause"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Play"
+msgstr ""
+
+#. ~ "Print screen" key
+#: src/client/keycode.cpp
+msgid "Print"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Return"
+msgstr ""
+
+#: src/client/keycode.cpp src/gui/guiKeyChangeMenu.cpp
+msgid "Right"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Right Button"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Right Control"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Right Menu"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Right Shift"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Right Windows"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Scroll Lock"
+msgstr ""
+
+#. ~ Key name
+#: src/client/keycode.cpp
+msgid "Select"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Shift"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Sleep"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Snapshot"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Space"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Tab"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Up"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "X Button 1"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "X Button 2"
+msgstr ""
+
+#: src/client/keycode.cpp src/gui/guiKeyChangeMenu.cpp
+msgid "Zoom"
+msgstr ""
+
+#: src/client/minimap.cpp
+msgid "Minimap hidden"
+msgstr ""
+
+#: src/client/minimap.cpp
+#, c-format
+msgid "Minimap in radar mode, Zoom x%d"
+msgstr ""
+
+#: src/client/minimap.cpp
+#, c-format
+msgid "Minimap in surface mode, Zoom x%d"
+msgstr ""
+
+#: src/client/minimap.cpp
+msgid "Minimap in texture mode"
+msgstr ""
+
+#: src/gui/guiChatConsole.cpp
+msgid "Failed to open webpage"
+msgstr ""
+
+#: src/gui/guiChatConsole.cpp
+msgid "Opening webpage"
+msgstr ""
+
+#: src/gui/guiConfirmRegistration.cpp src/gui/guiPasswordChange.cpp
+msgid "Passwords do not match!"
+msgstr ""
+
+#: src/gui/guiConfirmRegistration.cpp
+msgid "Register and Join"
+msgstr ""
+
+#: src/gui/guiConfirmRegistration.cpp
+#, c-format
+msgid ""
+"You are about to join this server with the name \"%s\" for the first time.\n"
+"If you proceed, a new account using your credentials will be created on this "
+"server.\n"
+"Please retype your password and click 'Register and Join' to confirm account "
+"creation, or click 'Cancel' to abort."
+msgstr ""
+
+#: src/gui/guiFormSpecMenu.cpp
+msgid "Proceed"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "\"Aux1\" = climb down"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Autoforward"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp src/settings_translation_file.cpp
+msgid "Automatic jumping"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Aux1"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Backward"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Block bounds"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Change camera"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Chat"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Command"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Console"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Dec. range"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Dec. volume"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Double tap \"jump\" to toggle fly"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Drop"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Forward"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Inc. range"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Inc. volume"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Inventory"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Jump"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Key already in use"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Local command"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Mute"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Next item"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Prev. item"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Range select"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp src/settings_translation_file.cpp
+msgid "Screenshot"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Sneak"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Toggle HUD"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Toggle chat log"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Toggle fast"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Toggle fly"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Toggle fog"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Toggle minimap"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Toggle noclip"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Toggle pitchmove"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "press key"
+msgstr ""
+
+#: src/gui/guiPasswordChange.cpp
+msgid "Change"
+msgstr ""
+
+#: src/gui/guiPasswordChange.cpp
+msgid "Confirm Password"
+msgstr ""
+
+#: src/gui/guiPasswordChange.cpp
+msgid "New Password"
+msgstr ""
+
+#: src/gui/guiPasswordChange.cpp
+msgid "Old Password"
+msgstr ""
+
+#: src/gui/guiVolumeChange.cpp
+msgid "Exit"
+msgstr ""
+
+#: src/gui/guiVolumeChange.cpp
+msgid "Muted"
+msgstr ""
+
+#: src/gui/guiVolumeChange.cpp
+#, c-format
+msgid "Sound Volume: %d%%"
+msgstr ""
+
+#. ~ Imperative, as in "Enter/type in text".
+#. Don't forget the space.
+#: src/gui/modalMenu.cpp
+msgid "Enter "
+msgstr ""
+
+#. ~ DO NOT TRANSLATE THIS LITERALLY!
+#. This is a special string which needs to contain the translation's
+#. language code (e.g. "de" for German).
+#: src/network/clientpackethandler.cpp src/script/lua_api/l_client.cpp
+msgid "LANG_CODE"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"(Android) Fixes the position of virtual joystick.\n"
+"If disabled, virtual joystick will center to first-touch's position."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"(Android) Use virtual joystick to trigger \"Aux1\" button.\n"
+"If enabled, virtual joystick will also tap \"Aux1\" button when out of main "
+"circle."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"(X,Y,Z) offset of fractal from world center in units of 'scale'.\n"
+"Can be used to move a desired point to (0, 0) to create a\n"
+"suitable spawn point, or to allow 'zooming in' on a desired\n"
+"point by increasing 'scale'.\n"
+"The default is tuned for a suitable spawn point for Mandelbrot\n"
+"sets with default parameters, it may need altering in other\n"
+"situations.\n"
+"Range roughly -2 to 2. Multiply by 'scale' for offset in nodes."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"(X,Y,Z) scale of fractal in nodes.\n"
+"Actual fractal size will be 2 to 3 times larger.\n"
+"These numbers can be made very large, the fractal does\n"
+"not have to fit inside the world.\n"
+"Increase these to 'zoom' into the detail of the fractal.\n"
+"Default is for a vertically-squashed shape suitable for\n"
+"an island, set all 3 numbers equal for the raw shape."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "2D noise that controls the shape/size of ridged mountains."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "2D noise that controls the shape/size of rolling hills."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "2D noise that controls the shape/size of step mountains."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "2D noise that controls the size/occurrence of ridged mountain ranges."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "2D noise that controls the size/occurrence of rolling hills."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "2D noise that controls the size/occurrence of step mountain ranges."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "2D noise that locates the river valleys and channels."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "3D clouds"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "3D mode"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "3D mode parallax strength"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "3D noise defining giant caverns."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"3D noise defining mountain structure and height.\n"
+"Also defines structure of floatland mountain terrain."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"3D noise defining structure of floatlands.\n"
+"If altered from the default, the noise 'scale' (0.7 by default) may need\n"
+"to be adjusted, as floatland tapering functions best when this noise has\n"
+"a value range of approximately -2.0 to 2.0."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "3D noise defining structure of river canyon walls."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "3D noise defining terrain."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "3D noise for mountain overhangs, cliffs, etc. Usually small variations."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "3D noise that determines number of dungeons per mapchunk."
+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.\n"
+"- crossview: Cross-eyed 3d\n"
+"- pageflip: quadbuffer based 3d.\n"
+"Note that the interlaced mode requires shaders to be enabled."
+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 "ABM interval"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "ABM time budget"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Absolute limit of queued blocks to emerge"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Acceleration in air"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Acceleration of gravity, in nodes per second per second."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Active Block Modifiers"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Active block management interval"
+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 "Adds particles when digging a node."
+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 detected display density, used for scaling UI elements."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, c-format
+msgid ""
+"Adjusts the density of the floatland layer.\n"
+"Increase value to increase density. Can be positive or negative.\n"
+"Value = 0.0: 50% of volume is floatland.\n"
+"Value = 2.0 (can be higher depending on 'mgv7_np_floatland', always test\n"
+"to be sure) creates a solid floatland layer."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Advanced"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Alters the light curve by applying 'gamma correction' to it.\n"
+"Higher values make middle and lower light levels brighter.\n"
+"Value '1.0' leaves the light curve unaltered.\n"
+"This only has significant effect on daylight and artificial\n"
+"light, it has very little effect on natural night light."
+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 "Amount of messages a player may send per 10 seconds."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Amplifies the valleys."
+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."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Append item name"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Append item name to tooltip."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Apple trees noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Arm inertia"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Arm inertia, gives a more realistic movement of\n"
+"the arm when the camera moves."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Ask to reconnect after crash"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"At this distance the server will aggressively optimize which blocks are sent "
+"to\n"
+"clients.\n"
+"Small values potentially improve performance a lot, at the expense of "
+"visible\n"
+"rendering glitches (some blocks will not be rendered under water and in "
+"caves,\n"
+"as well as sometimes on land).\n"
+"Setting this to a value greater than max_block_send_distance disables this\n"
+"optimization.\n"
+"Stated in mapblocks (16 nodes)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Automatic forward key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Automatically jump up single-node obstacles."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Automatically report to the serverlist."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Autosave screen size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Autoscaling mode"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Aux1 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Aux1 key for climbing/descending"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Backward key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Base ground level"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Base terrain height."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Basic"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Basic privileges"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Beach noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Beach noise threshold"
+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 "Biome API temperature and humidity noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Biome noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Block send optimize distance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Bold and italic font path"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Bold and italic monospace font path"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Bold font path"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Bold monospace font path"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Build inside player"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Builtin"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Camera 'near clipping plane' distance in nodes, between 0 and 0.25\n"
+"Only works on GLES platforms. Most users will not need to change this.\n"
+"Increasing can reduce artifacting on weaker GPUs.\n"
+"0.1 = Default, 0.25 = Good value for weaker tablets."
+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 "Cave noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Cave noise #1"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Cave noise #2"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Cave width"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Cave1 noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Cave2 noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Cavern limit"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Cavern noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Cavern taper"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Cavern threshold"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Cavern upper limit"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Center of light curve boost range.\n"
+"Where 0.0 is minimum light level, 1.0 is maximum light level."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Chat command time message threshold"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Chat commands"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Chat font size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Chat key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Chat log level"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Chat message count limit"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Chat message format"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Chat message kick threshold"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Chat message max length"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Chat toggle key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Chat weblinks"
+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 ""
+"Clickable weblinks (middle-click or Ctrl+left-click) enabled in chat console "
+"output."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Client"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Client and Server"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Client modding"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Client side modding restrictions"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Client side node lookup range restriction"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Climbing speed"
+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 "Colored shadows"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Comma-separated list of flags to hide in the content repository.\n"
+"\"nonfree\" can be used to hide packages which do not qualify as 'free "
+"software',\n"
+"as defined by the Free Software Foundation.\n"
+"You can also specify content ratings.\n"
+"These flags are independent from Minetest versions,\n"
+"so see a full list at https://content.minetest.net/help/content_flags/"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Comma-separated list of mods that are allowed to access HTTP APIs, which\n"
+"allow them to upload and download data to/from the internet."
+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 ""
+"Compression level to use when saving mapblocks to disk.\n"
+"-1 - use default compression level\n"
+"0 - least compression, fastest\n"
+"9 - best compression, slowest"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Compression level to use when sending mapblocks to the client.\n"
+"-1 - use default compression level\n"
+"0 - least compression, fastest\n"
+"9 - best compression, slowest"
+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 height"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "ContentDB Flag Blacklist"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "ContentDB Max Concurrent Downloads"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "ContentDB URL"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Continuous forward"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Continuous forward movement, toggled by autoforward key.\n"
+"Press the autoforward key again or the backwards movement to disable."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Controls"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Controls length of day/night cycle.\n"
+"Examples:\n"
+"72 = 20min, 360 = 4min, 1 = 24hour, 0 = day/night/whatever stays unchanged."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Controls sinking speed in liquid."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Controls steepness/depth of lake depressions."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Controls steepness/height of hills."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Controls width of tunnels, a smaller value creates wider tunnels.\n"
+"Value >= 10.0 completely disables generation of tunnels and avoids the\n"
+"intensive noise calculations."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Crash message"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Creative"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Crosshair alpha"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Crosshair alpha (opaqueness, between 0 and 255).\n"
+"This also applies to the object crosshair."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Crosshair color"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Crosshair color (R,G,B).\n"
+"Also controls the object crosshair color"
+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 file size threshold"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Debug log level"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Dec. volume key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Decrease this to increase liquid resistance to movement."
+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 report format"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Default stack size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Define shadow filtering quality.\n"
+"This simulates the soft shadows effect by applying a PCF or Poisson disk\n"
+"but also uses more resources."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Defines areas where trees have apples."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Defines areas with sandy beaches."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Defines distribution of higher terrain and steepness of cliffs."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Defines distribution of higher terrain."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Defines full size of caverns, smaller values create larger caverns."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Defines large-scale river channel structure."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Defines location and terrain of optional hills and lakes."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Defines the base ground level."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Defines the depth of the river channel."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Defines the maximal player transfer distance in blocks (0 = unlimited)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Defines the width of the river channel."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Defines the width of the river valley."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Defines tree areas and tree density."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Delay between mesh updates on the client in ms. Increasing this will slow\n"
+"down the rate of mesh updates, thus reducing jitter on slower clients."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Delay in sending blocks after building"
+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 "Depth below which you'll find giant caverns."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Depth below which you'll find large caves."
+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 "Desert noise threshold"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Deserts occur when np_biome exceeds this value.\n"
+"When the 'snowbiomes' flag is enabled, this is ignored."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Desynchronize block animation"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Dig key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Digging particles"
+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 "Display Density Scaling Factor"
+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 information."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Dungeon maximum Y"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Dungeon minimum Y"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Dungeon noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable IPv6 support (for both client and server).\n"
+"Required for IPv6 connections to work at all."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable Lua modding support on client.\n"
+"This support is experimental and API can change."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable Poisson disk filtering.\n"
+"On true uses Poisson disk to make \"soft shadows\". Otherwise uses PCF "
+"filtering."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable colored shadows.\n"
+"On true translucent nodes cast colored shadows. This is expensive."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Enable console window"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Enable creative mode for all players"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Enable joysticks"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Enable mod channels support."
+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 register confirmation"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable register confirmation when connecting to server.\n"
+"If disabled, new account will be registered automatically."
+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 vertex buffer objects.\n"
+"This should greatly improve graphics performance."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable view bobbing and amount of 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 ""
+"Enable/disable running an IPv6 server.\n"
+"Ignored if bind_address is set.\n"
+"Needs enable_ipv6 to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enables Hable's 'Uncharted 2' filmic tone mapping.\n"
+"Simulates the tone curve of photographic film and how this approximates the\n"
+"appearance of high dynamic range images. Mid-range contrast is slightly\n"
+"enhanced, highlights and shadows are gradually compressed."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Enables animation of inventory items."
+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 the sound system.\n"
+"If disabled, this completely disables all sounds everywhere and the in-game\n"
+"sound controls will be non-functional.\n"
+"Changing this setting requires a restart."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enables tradeoffs that reduce CPU load or increase rendering performance\n"
+"at the expense of minor visual glitches that do not impact game playability."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Engine profiling data print interval"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Entity methods"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Exponent of the floatland tapering. Alters the tapering behaviour.\n"
+"Value = 1.0 creates a uniform, linear tapering.\n"
+"Values > 1.0 create a smooth tapering suitable for the default separated\n"
+"floatlands.\n"
+"Values < 1.0 (for example 0.25) create a more defined surface level with\n"
+"flatter lowlands, suitable for a solid floatland layer."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "FPS when unfocused or paused"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "FSAA"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Factor noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fall bobbing factor"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fallback font path"
+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 the \"Aux1\" key).\n"
+"This requires the \"fast\" privilege on the server."
+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\n"
+"Multiplayer Tab."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Filler depth"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Filler depth noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Filmic tone mapping"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Filtered textures can blend RGB values with fully-transparent neighbors,\n"
+"which PNG optimizers usually discard, often resulting in dark or\n"
+"light edges to transparent textures. Apply a filter to clean that up\n"
+"at texture load time. This is automatically enabled if mipmapping is enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Filtering"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "First of 4 2D noises that together define hill/mountain range height."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "First of two 3D noises that together define tunnels."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fixed map seed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fixed virtual joystick"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland density"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland maximum Y"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland minimum Y"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland taper exponent"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland tapering distance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland water level"
+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 start"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fog toggle key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Font bold by default"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Font italic by default"
+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 size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Font size divisible by"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Font size of the default font where 1 unit = 1 pixel at 96 DPI"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Font size of the monospace font where 1 unit = 1 pixel at 96 DPI"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Font size of the recent chat text and chat prompt in point (pt).\n"
+"Value 0 will use the default font size."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"For pixel-style fonts that do not scale well, this ensures that font sizes "
+"used\n"
+"with this font will always be divisible by this value, in pixels. For "
+"instance,\n"
+"a pixel font 16 pixels tall should have this set to 16, so it will only ever "
+"be\n"
+"sized 16, 32, 48, etc., so a mod requesting a size of 25 will get 32."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Format of player chat messages. The following strings are valid "
+"placeholders:\n"
+"@name, @message, @timestamp (optional)"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Format of screenshots."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Formspec Default Background Color"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Formspec Default Background Opacity"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Formspec Full-Screen Background Color"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Formspec Full-Screen Background Opacity"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Formspec default background color (R,G,B)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Formspec default background opacity (between 0 and 255)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Formspec full-screen background color (R,G,B)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Formspec full-screen background opacity (between 0 and 255)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Forward key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fourth of 4 2D noises that together define hill/mountain range height."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fractal type"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fraction of the visible distance at which fog starts to be rendered"
+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).\n"
+"\n"
+"Setting this larger than active_block_range will also cause the server\n"
+"to maintain active objects up to this distance in the direction the\n"
+"player is looking. (This can avoid mobs suddenly disappearing from view)"
+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 "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 "Global callbacks"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Global map generation attributes.\n"
+"In Mapgen v6 the 'decorations' flag controls all decorations except trees\n"
+"and jungle grass, in all other mapgens this flag controls all decorations."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Gradient of light curve at maximum light level.\n"
+"Controls the contrast of the highest light levels."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Gradient of light curve at minimum light level.\n"
+"Controls the contrast of the lowest light levels."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Graphics"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Gravity"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Ground level"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Ground noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "HTTP mods"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "HUD scale factor"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "HUD toggle key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Handling for deprecated Lua API calls:\n"
+"- none: Do not log deprecated calls\n"
+"- log: mimic and log backtrace of deprecated call (default).\n"
+"- error: abort on usage of deprecated call (suggested for mod developers)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Have the profiler instrument itself:\n"
+"* Instrument an empty function.\n"
+"This estimates the overhead, that instrumentation is adding (+1 function "
+"call).\n"
+"* Instrument the sampler being used to update the statistics."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Heat blend noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Heat noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Height component of the initial window size. Ignored in fullscreen mode."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Height noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Height select noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hill steepness"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hill threshold"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hilliness1 noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hilliness2 noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hilliness3 noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hilliness4 noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Homepage of server, to be displayed in the serverlist."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Horizontal acceleration in air when jumping or falling,\n"
+"in nodes per second per second."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Horizontal and vertical acceleration in fast mode,\n"
+"in nodes per second per second."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Horizontal and vertical acceleration on ground or when climbing,\n"
+"in nodes per second per second."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar next key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar previous key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 1 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 10 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 11 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 12 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 13 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 14 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 15 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 16 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 17 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 18 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 19 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 2 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 20 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 21 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 22 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 23 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 24 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 25 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 26 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 27 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 28 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 29 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 3 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 30 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 31 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 32 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 4 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 5 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 6 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 7 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 8 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 9 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "How deep to make rivers."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"How fast liquid waves will move. Higher = faster.\n"
+"If negative, liquid waves will move backwards.\n"
+"Requires waving liquids to be enabled."
+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 "How wide to make rivers."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Humidity blend noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Humidity noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Humidity variation for biomes."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "IPv6"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "IPv6 server"
+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, \"Aux1\" key is used to fly fast if both fly and fast mode are\n"
+"enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"If enabled the server will perform map block occlusion culling based on\n"
+"on the eye position of the player. This can reduce the number of blocks\n"
+"sent to the client 50-80%. The client will not longer receive most "
+"invisible\n"
+"so that the utility of noclip mode is reduced."
+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 \"noclip\" privilege on the server."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"If enabled, \"Aux1\" key instead of \"Sneak\" key is used for climbing down "
+"and\n"
+"descending."
+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, makes move directions relative to the player's pitch when flying "
+"or swimming."
+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 the CSM restriction for node range is enabled, get_node calls are "
+"limited\n"
+"to this distance from the player to the node."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"If the execution of a chat command takes longer than this specified time in\n"
+"seconds, add the time information to the chat command message"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"If the file size of debug.txt exceeds the number of megabytes specified in\n"
+"this setting when it is opened, the file is moved to debug.txt.1,\n"
+"deleting an older debug.txt.1 if it exists.\n"
+"debug.txt is only moved if this setting is positive."
+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 "In-game chat console height, between 0.1 (10%) and 1.0 (100%)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Inc. volume key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Initial vertical speed when jumping, in nodes per second."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Instrument builtin.\n"
+"This is usually only needed by core/builtin contributors"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Instrument chat commands on registration."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Instrument global callback functions on registration.\n"
+"(anything you pass to a minetest.register_*() function)"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Instrument the action function of Active Block Modifiers on registration."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Instrument the action function of Loading Block Modifiers on registration."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Instrument the methods of entities on registration."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Instrumentation"
+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 items animations"
+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 "Italic font path"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Italic monospace font path"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Item entity TTL"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Iterations"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Iterations of the recursive function.\n"
+"Increasing this increases the amount of fine detail, but also\n"
+"increases processing load.\n"
+"At iterations = 20 this mapgen has a similar load to mapgen V7."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Joystick ID"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Joystick button repetition interval"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Joystick dead zone"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Joystick frustum sensitivity"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Joystick type"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Julia set only.\n"
+"W component of hypercomplex constant.\n"
+"Alters the shape of the fractal.\n"
+"Has no effect on 3D fractals.\n"
+"Range roughly -2 to 2."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Julia set only.\n"
+"X component of hypercomplex constant.\n"
+"Alters the shape of the fractal.\n"
+"Range roughly -2 to 2."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Julia set only.\n"
+"Y component of hypercomplex constant.\n"
+"Alters the shape of the fractal.\n"
+"Range roughly -2 to 2."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Julia set only.\n"
+"Z component of hypercomplex constant.\n"
+"Alters the shape of the fractal.\n"
+"Range roughly -2 to 2."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Julia w"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Julia x"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Julia y"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Julia z"
+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.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for decreasing the volume.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for digging.\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.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for increasing the volume.\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"
+"Will also disable autoforward, when active.\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 muting the game.\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 to type local 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 placing.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 11th hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 12th hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 13th hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 14th hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 15th hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 16th hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 17th hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 18th hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 19th hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 20th hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 21st hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 22nd hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 23rd hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 24th hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 25th hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 26th hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 27th hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 28th hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 29th hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 30th hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 31st hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 32nd hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the eighth hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the fifth hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the first hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the fourth hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the next item in the hotbar.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the ninth hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the previous item in the hotbar.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the second hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the seventh hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the sixth hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the tenth hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the third hotbar slot.\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 autoforward.\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 pitch move mode.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling the camera 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 chat.\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 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 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 large chat console.\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 to use view zoom when possible.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Kick players who sent more than X messages per 10 seconds."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Lake steepness"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Lake threshold"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Language"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Large cave depth"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Large cave maximum number"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Large cave minimum number"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Large cave proportion flooded"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Large chat console key"
+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\n"
+"network."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Length of liquid waves.\n"
+"Requires waving liquids to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Length of time between Active Block Modifier (ABM) execution cycles"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Length of time between NodeTimer execution cycles"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Length of time between active block management cycles"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Level of logging to be written to debug.txt:\n"
+"- <nothing> (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 "Light curve boost"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Light curve boost center"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Light curve boost spread"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Light curve gamma"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Light curve high gradient"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Light curve low gradient"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Limit of map generation, in nodes, in all 6 directions from (0, 0, 0).\n"
+"Only mapchunks completely within the mapgen limit are generated.\n"
+"Value is stored per-world."
+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 sinking"
+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 "Load the game profiler"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Load the game profiler to collect game profiling data.\n"
+"Provides a /profiler command to access the compiled profile.\n"
+"Useful for mod developers and server operators."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Loading Block Modifiers"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Lower Y limit of dungeons."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Lower Y limit of floatlands."
+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 all liquids opaque"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Map Compression Level for Disk Storage"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Map Compression Level for Network Transfer"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Map directory"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Map generation attributes specific to Mapgen Carpathian."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Map generation attributes specific to Mapgen Flat.\n"
+"Occasional lakes and hills can be added to the flat world."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Map generation attributes specific to Mapgen Fractal.\n"
+"'terrain' enables the generation of non-fractal terrain:\n"
+"ocean, islands and underground."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Map generation attributes specific to Mapgen Valleys.\n"
+"'altitude_chill': Reduces heat with altitude.\n"
+"'humid_rivers': Increases humidity around rivers.\n"
+"'vary_river_depth': If enabled, low humidity and high heat causes rivers\n"
+"to become shallower and occasionally dry.\n"
+"'altitude_dry': Reduces humidity with altitude."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Map generation attributes specific to Mapgen v5."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Map generation attributes specific to Mapgen v6.\n"
+"The 'snowbiomes' flag enables the new 5 biome system.\n"
+"When the 'snowbiomes' flag is enabled jungles are automatically enabled and\n"
+"the 'jungles' flag is ignored."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Map generation attributes specific to Mapgen v7.\n"
+"'ridges': Rivers.\n"
+"'floatlands': Floating land masses in the atmosphere.\n"
+"'caverns': Giant caves deep underground."
+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 "Map shadows update frames"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapblock limit"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapblock mesh generation delay"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapblock mesh generator's MapBlock cache size in MB"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapblock unload timeout"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen Carpathian"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen Carpathian specific flags"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen Flat"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen Flat specific flags"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen Fractal"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen Fractal specific flags"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen V5"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen V5 specific flags"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen V6"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen V6 specific flags"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen V7"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen V7 specific flags"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen Valleys"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen Valleys specific flags"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen debug"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen name"
+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 the window is not focused, or when the game is paused."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum distance to render shadows."
+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 limit of random number of large caves per mapchunk."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum limit of random number of small caves per mapchunk."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum liquid resistance. Controls deceleration when entering liquid at\n"
+"high speed."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum number of blocks that are simultaneously sent per client.\n"
+"The maximum total count is calculated dynamically:\n"
+"max_total = ceil((#clients + max_users) * per_client / 4)"
+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"
+"This limit is enforced per player."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum number of blocks to be queued that are to be loaded from file.\n"
+"This limit is enforced per player."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum number of concurrent downloads. Downloads exceeding this limit will "
+"be queued.\n"
+"This should be lower than curl_parallel_limit."
+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 be connected simultaneously."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum number of recent chat messages to show"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum number of statically stored objects in a block."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum objects per 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 simultaneous block sends per client"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum size of the out chat queue"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum size of the out chat queue.\n"
+"0 to disable queueing and -1 to make the queue size unlimited."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum time a file download (e.g. a mod download) may take, stated in "
+"milliseconds."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum time an interactive request (e.g. server list fetch) may take, "
+"stated in milliseconds."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum users"
+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 "Method used to highlight selected object."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Minimal level of logging to be written to chat."
+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 limit of random number of large caves per mapchunk."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Minimum limit of random number of small caves per mapchunk."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Minimum texture size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mipmapping"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mod channels"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Modifies the size of the HUD elements."
+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 "Monospace font size divisible by"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mountain height noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mountain noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mountain variation noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mountain zero level"
+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 "Mud noise"
+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 "Mute key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mute sound"
+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.\n"
+"Current mapgens in a highly unstable state:\n"
+"- The optional floatlands of v7 (disabled by default)."
+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 "Near plane"
+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 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 "NodeTimer interval"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Noises"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Number of emerge threads"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Number of emerge threads to use.\n"
+"Value 0:\n"
+"- Automatic selection. The number of emerge threads will be\n"
+"- 'number of processors - 2', with a lower limit of 1.\n"
+"Any other value:\n"
+"- Specifies the number of emerge threads, with a lower limit of 1.\n"
+"WARNING: Increasing the number of emerge threads increases engine mapgen\n"
+"speed, but this may harm game performance by interfering with other\n"
+"processes, especially in singleplayer and/or when running Lua code in\n"
+"'on_generated'. For many users the optimum setting may be '1'."
+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 "Online Content Repository"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Opaque liquids"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Opaqueness (alpha) of the shadow behind the default font, between 0 and 255."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Open the pause menu when the window's focus is lost. Does not pause if a "
+"formspec is\n"
+"open."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Optional override for chat weblink color."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Path of the fallback font. Must be a TrueType font.\n"
+"This font will be used for certain languages or if the default font is "
+"unavailable."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Path to save screenshots at. Can be an absolute or relative path.\n"
+"The folder will be created if it doesn't already exist."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Path to shader directory. If no path is defined, default location will be "
+"used."
+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 ""
+"Path to the default font. Must be a TrueType font.\n"
+"The fallback font will be used if the font cannot be loaded."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Path to the monospace font. Must be a TrueType font.\n"
+"This font is used for e.g. the console and profiler screen."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Pause on lost window focus"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Per-player limit of queued blocks load from disk"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Per-player limit of queued blocks to generate"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Physics"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Pitch move key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Pitch move mode"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Place key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Place repetition interval"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Player is able to fly without being affected by gravity.\n"
+"This requires the \"fly\" privilege on the server."
+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 "Poisson filtering"
+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 ""
+"Prevent digging and placing from repeating when holding the mouse buttons.\n"
+"Enable this when you dig or place too often by accident."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Prevent mods from doing insecure things like running shell commands."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Print the engine's profiling data in regular intervals (in seconds).\n"
+"0 = disable. Useful for developers."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Privileges that players with basic_privs can grant"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Profiler"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Profiler toggle key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Profiling"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Prometheus listener address"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Prometheus listener address.\n"
+"If Minetest is compiled with ENABLE_PROMETHEUS option enabled,\n"
+"enable metrics listener for Prometheus on that address.\n"
+"Metrics can be fetched on http://127.0.0.1:30000/metrics"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Proportion of large caves that contain liquid."
+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 "Raises terrain to make valleys around the rivers."
+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 "Recent Chat Messages"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Regular font path"
+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 ""
+"Remove color codes from incoming chat messages\n"
+"Use this to stop players from being able to use color in their messages"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Replaces the default main menu with a custom one."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Report path"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Restricts the access of certain client-side functions on servers.\n"
+"Combine the byteflags below to restrict client-side features, or set to 0\n"
+"for no restrictions:\n"
+"LOAD_CLIENT_MODS: 1 (disable loading client-provided mods)\n"
+"CHAT_MESSAGES: 2 (disable send_chat_message call client-side)\n"
+"READ_ITEMDEFS: 4 (disable get_item_def call client-side)\n"
+"READ_NODEDEFS: 8 (disable get_node_def call client-side)\n"
+"LOOKUP_NODES_LIMIT: 16 (limits get_node call client-side to\n"
+"csm_restriction_noderange)\n"
+"READ_PLAYERINFO: 32 (disable get_player_names call client-side)"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Ridge mountain spread noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Ridge noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Ridge underwater noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Ridged mountain size noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Right key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "River channel depth"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "River channel width"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "River depth"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "River noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "River size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "River valley width"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Rollback recording"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Rolling hill size noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Rolling hills spread noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Round minimap"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Safe digging and placing"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Sandy beaches occur when np_beach exceeds this value."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Save the map received by the client on disk."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Save window size automatically when modified."
+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 folder"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Screenshot format"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Screenshot quality"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Screenshot quality. Only used for JPEG format.\n"
+"1 means worst quality; 100 means best quality.\n"
+"Use 0 for default quality."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Seabed noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Second of 4 2D noises that together define hill/mountain range height."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Second of two 3D noises that together define tunnels."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Security"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "See https://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 ""
+"Selects one of 18 fractal types.\n"
+"1 = 4D \"Roundy\" Mandelbrot set.\n"
+"2 = 4D \"Roundy\" Julia set.\n"
+"3 = 4D \"Squarry\" Mandelbrot set.\n"
+"4 = 4D \"Squarry\" Julia set.\n"
+"5 = 4D \"Mandy Cousin\" Mandelbrot set.\n"
+"6 = 4D \"Mandy Cousin\" Julia set.\n"
+"7 = 4D \"Variation\" Mandelbrot set.\n"
+"8 = 4D \"Variation\" Julia set.\n"
+"9 = 3D \"Mandelbrot/Mandelbar\" Mandelbrot set.\n"
+"10 = 3D \"Mandelbrot/Mandelbar\" Julia set.\n"
+"11 = 3D \"Christmas Tree\" Mandelbrot set.\n"
+"12 = 3D \"Christmas Tree\" Julia set.\n"
+"13 = 3D \"Mandelbulb\" Mandelbrot set.\n"
+"14 = 3D \"Mandelbulb\" Julia set.\n"
+"15 = 3D \"Cosine Mandelbulb\" Mandelbrot set.\n"
+"16 = 3D \"Cosine Mandelbulb\" Julia set.\n"
+"17 = 4D \"Mandelbulb\" Mandelbrot set.\n"
+"18 = 4D \"Mandelbulb\" Julia set."
+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 "Server side occlusion culling"
+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 the maximum character length of a chat message sent by clients."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set the shadow strength.\n"
+"Lower value means lighter shadows, higher value means darker shadows."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set the soft shadow radius size.\n"
+"Lower values mean sharper shadows, bigger values mean softer shadows.\n"
+"Minimum value: 1.0; maximum value: 10.0"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set the tilt of Sun/Moon orbit in degrees.\n"
+"Value of 0 means no tilt / vertical orbit.\n"
+"Minimum value: 0.0; maximum value: 60.0"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set to true to enable Shadow Mapping.\n"
+"Requires shaders to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set to true to enable waving leaves.\n"
+"Requires shaders to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set to true to enable waving liquids (like water).\n"
+"Requires shaders to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set to true to enable waving plants.\n"
+"Requires shaders to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Sets shadow texture quality to 32 bits.\n"
+"On false, 16 bits texture will be used.\n"
+"This can cause much more artifacts in the shadow."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Shader path"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Shaders allow advanced visual effects and may increase performance on some "
+"video\n"
+"cards.\n"
+"This only works with the OpenGL video backend."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Shadow filter quality"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Shadow map max distance in nodes to render shadows"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Shadow map texture in 32 bits"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Shadow map texture size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Shadow offset (in pixels) of the default font. If 0, then shadow will not be "
+"drawn."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Shadow strength"
+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 "Show entity selection boxes"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Show entity selection boxes\n"
+"A restart is required after changing this."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Show name tag backgrounds by default"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Shutdown message"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Size of mapchunks generated by mapgen, stated in mapblocks (16 nodes).\n"
+"WARNING!: There is no benefit, and there are several dangers, in\n"
+"increasing this value above 5.\n"
+"Reducing this value increases cave and dungeon density.\n"
+"Altering this value is for special usage, leaving it unchanged is\n"
+"recommended."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Size of the MapBlock cache of the mesh generator. Increasing this will\n"
+"increase the cache hit %, reducing the data being copied from the main\n"
+"thread, thus reducing jitter."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Sky Body Orbit Tilt"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Slice w"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Slope and fill work together to modify the heights."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Small cave maximum number"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Small cave minimum number"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Small-scale humidity variation for blending biomes on borders."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Small-scale temperature variation for blending biomes on borders."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Smooth lighting"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Smooths camera when looking around. Also called look or mouse smoothing.\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 "Sneaking speed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Sneaking speed, in nodes per second."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Soft shadow radius"
+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 ""
+"Specifies the default stack size of nodes, items and tools.\n"
+"Note that mods or games may explicitly set a stack for certain (or all) "
+"items."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Spread a complete update of shadow map over given amount of frames.\n"
+"Higher values might make shadows laggy, lower values\n"
+"will consume more resources.\n"
+"Minimum value: 1; maximum value: 16"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Spread of light curve boost range.\n"
+"Controls the width of the range to be boosted.\n"
+"Standard deviation of the light curve boost Gaussian."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Static spawnpoint"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Steepness noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Step mountain size noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Step mountain spread noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Strength of 3D mode parallax."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Strength of light curve boost.\n"
+"The 3 'boost' parameters define a range of the light\n"
+"curve that is boosted in brightness."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Strict protocol checking"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Strip color codes"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Surface level of optional water placed on a solid floatland layer.\n"
+"Water is disabled by default and will only be placed if this value is set\n"
+"to above 'mgv7_floatland_ymax' - 'mgv7_floatland_taper' (the start of the\n"
+"upper tapering).\n"
+"***WARNING, POTENTIAL DANGER TO WORLDS AND SERVER PERFORMANCE***:\n"
+"When enabling water placement the floatlands must be configured and tested\n"
+"to be a solid layer by setting 'mgv7_floatland_density' to 2.0 (or other\n"
+"required value depending on 'mgv7_np_floatland'), to avoid\n"
+"server-intensive extreme water flow and to avoid vast flooding of the\n"
+"world surface below."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Synchronous SQLite"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Temperature variation for biomes."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Terrain alternative noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Terrain base noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Terrain height"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Terrain higher noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Terrain noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Terrain noise threshold for hills.\n"
+"Controls proportion of world area covered by hills.\n"
+"Adjust towards 0.0 for a larger proportion."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Terrain noise threshold for lakes.\n"
+"Controls proportion of world area covered by lakes.\n"
+"Adjust towards 0.0 for a larger proportion."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Terrain persistence noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Texture path"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Texture size to render the shadow map on.\n"
+"This must be a power of two.\n"
+"Bigger numbers create better shadows but it is also more expensive."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Textures on a node may be aligned either to the node or to the world.\n"
+"The former mode suits better things like machines, furniture, etc., while\n"
+"the latter makes stairs and microblocks fit surroundings better.\n"
+"However, as this possibility is new, thus may not be used by older servers,\n"
+"this option allows enforcing it for certain node types. Note though that\n"
+"that is considered EXPERIMENTAL and may not work properly."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "The URL for the content repository"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "The dead zone of the joystick"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The default format in which profiles are being saved,\n"
+"when calling `/profiler save [format]` without format."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "The depth of dirt or other biome filler node."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The file path relative to your worldpath in which profiles will be saved to."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "The identifier of the joystick to use"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "The length in pixels it takes for touch screen interaction to start."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The maximum height of the surface of waving liquids.\n"
+"4.0 = Wave height is two nodes.\n"
+"0.0 = Wave doesn't move at all.\n"
+"Default is 1.0 (1/2 node).\n"
+"Requires waving liquids to be enabled."
+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 radius of the volume of blocks around every player that is subject to "
+"the\n"
+"active block stuff, stated in mapblocks (16 nodes).\n"
+"In active blocks objects are loaded and ABMs run.\n"
+"This is also the minimum range in which active objects (mobs) are "
+"maintained.\n"
+"This should be configured together with active_object_send_range_blocks."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The rendering back-end.\n"
+"A restart is required after changing this.\n"
+"Note: On Android, stick with OGLES1 if unsure! App may fail to start "
+"otherwise.\n"
+"On other platforms, OpenGL is recommended.\n"
+"Shaders are supported by OpenGL (desktop only) and OGLES2 (experimental)"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The sensitivity of the joystick axes for moving the\n"
+"in-game view frustum around."
+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 budget allowed for ABMs to execute on each step\n"
+"(as a fraction of the ABM Interval)"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The time in seconds it takes between repeated events\n"
+"when holding down a joystick button combination."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The time in seconds it takes between repeated node placements when holding\n"
+"the place button."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "The type of joystick"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The vertical distance over which heat drops by 20 if 'altitude_chill' is\n"
+"enabled. Also the vertical distance over which humidity drops by 10 if\n"
+"'altitude_dry' is enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Third of 4 2D noises that together define hill/mountain range height."
+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 of day when a new world is started, in millihours (0-23999)."
+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 "Touch screen threshold"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Tradeoffs for performance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Trees noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Trilinear filtering"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"True = 256\n"
+"False = 128\n"
+"Usable 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 "Undersampling"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Undersampling is similar to using a lower screen resolution, but it applies\n"
+"to the game world only, keeping the GUI intact.\n"
+"It should give a significant performance boost at the cost of less detailed "
+"image.\n"
+"Higher values result in a less detailed image."
+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 "Upper Y limit of dungeons."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Upper Y limit of floatlands."
+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 mipmapping to scale textures. May slightly increase performance,\n"
+"especially when using a high resolution texture pack.\n"
+"Gamma correct downscaling is not supported."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Use multi-sample antialiasing (MSAA) to smooth out block edges.\n"
+"This algorithm smooths out the 3D viewport while keeping the image sharp,\n"
+"but it doesn't affect the insides of textures\n"
+"(which is especially noticeable with transparent textures).\n"
+"Visible spaces appear between nodes when shaders are disabled.\n"
+"If set to 0, MSAA is disabled.\n"
+"A restart is required after changing this option."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Use trilinear filtering when scaling textures."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "VBO"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "VSync"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Valley depth"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Valley fill"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Valley profile"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Valley slope"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Variation of biome filler depth."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Variation of maximum mountain height (in nodes)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Variation of number of caves."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Variation of terrain vertical scale.\n"
+"When noise is < -0.55 terrain is near-flat."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Varies depth of biome surface nodes."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Varies roughness of terrain.\n"
+"Defines the 'persistence' value for terrain_base and terrain_alt noises."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Varies steepness of cliffs."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Vertical climbing speed, in nodes per second."
+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 factor"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "View distance in nodes."
+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 "View zoom key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Viewing range"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Virtual joystick triggers Aux1 button"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Volume"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Volume of all sounds.\n"
+"Requires the sound system to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"W coordinate of the generated 3D slice of a 4D fractal.\n"
+"Determines which 3D slice of the 4D shape is generated.\n"
+"Alters the shape of the fractal.\n"
+"Has no effect on 3D fractals.\n"
+"Range roughly -2 to 2."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Walking and flying speed, in nodes per second."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Walking speed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Walking, flying and climbing speed in fast mode, in nodes per second."
+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 liquids"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Waving liquids wave height"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Waving liquids wave speed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Waving liquids wavelength"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Waving plants"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Weblink color"
+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"
+"properly 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. This setting is ONLY applied if\n"
+"bilinear/trilinear/anisotropic filtering is enabled.\n"
+"This is also used as the base node texture size for world-aligned\n"
+"texture autoscaling."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Whether name tag backgrounds should be shown by default.\n"
+"Mods may still set a background."
+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 mute sounds. You can unmute sounds at any time, unless the\n"
+"sound system is disabled (enable_sound=false).\n"
+"In-game, you can toggle the mute state with the mute key or by using the\n"
+"pause menu."
+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 component of the initial window size. Ignored in fullscreen mode."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Width of the selection box lines around nodes."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Windows systems only: Start Minetest with the command line window in the "
+"background.\n"
+"Contains the same information as the file debug.txt (default name)."
+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 "World start time"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"World-aligned textures may be scaled to span several nodes. However,\n"
+"the server may not send the scale you want, especially if you use\n"
+"a specially-designed texture pack; with this option, the client tries\n"
+"to determine the scale automatically basing on the texture size.\n"
+"See also texture_min_size.\n"
+"Warning: This option is EXPERIMENTAL!"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "World-aligned textures mode"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Y of flat ground."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Y of mountain density gradient zero level. Used to shift mountains "
+"vertically."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Y of upper limit of large caves."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Y-distance over which caverns expand to full size."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Y-distance over which floatlands taper from full density to nothing.\n"
+"Tapering starts at this distance from the Y limit.\n"
+"For a solid floatland layer, this controls the height of hills/mountains.\n"
+"Must be less than or equal to half the distance between the Y limits."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Y-level of average terrain surface."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Y-level of cavern upper limit."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Y-level of higher terrain that creates cliffs."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Y-level of lower terrain and seabed."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Y-level of seabed."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "cURL file download timeout"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "cURL interactive timeout"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "cURL parallel limit"
+msgstr ""
+
+#, fuzzy
+#~ msgid "You died."
+#~ msgstr "Сез үлдегез"
diff --git a/po/uk/minetest.po b/po/uk/minetest.po
index 81b100511..aa2928099 100644
--- a/po/uk/minetest.po
+++ b/po/uk/minetest.po
@@ -2,9 +2,9 @@ msgid ""
msgstr ""
"Project-Id-Version: Ukrainian (Minetest)\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-02-23 19:03+0100\n"
-"PO-Revision-Date: 2020-10-25 19:26+0000\n"
-"Last-Translator: Nick Naumenko <mykola.naumenko@protonmail.com>\n"
+"POT-Creation-Date: 2022-01-25 23:19+0100\n"
+"PO-Revision-Date: 2022-01-30 18:51+0000\n"
+"Last-Translator: Andrij Mizyk <andmizyk@gmail.com>\n"
"Language-Team: Ukrainian <https://hosted.weblate.org/projects/minetest/"
"minetest/uk/>\n"
"Language: uk\n"
@@ -13,7 +13,43 @@ msgstr ""
"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 4.3.2-dev\n"
+"X-Generator: Weblate 4.11-dev\n"
+
+#: builtin/client/chatcommands.lua
+msgid "Clear the out chat queue"
+msgstr "ОчиÑтити чергу чату"
+
+#: builtin/client/chatcommands.lua
+msgid "Empty command."
+msgstr "ÐŸÐ¾Ñ€Ð¾Ð¶Ð½Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð°."
+
+#: builtin/client/chatcommands.lua
+msgid "Exit to main menu"
+msgstr "Вихід в оÑновне меню"
+
+#: builtin/client/chatcommands.lua
+msgid "Invalid command: "
+msgstr "Ðеправильна команда: "
+
+#: builtin/client/chatcommands.lua
+msgid "Issued command: "
+msgstr "Проблемна команда: "
+
+#: builtin/client/chatcommands.lua
+msgid "List online players"
+msgstr "СпиÑок гравців у мережі"
+
+#: builtin/client/chatcommands.lua
+msgid "Online players: "
+msgstr "Гравці в мережі: "
+
+#: builtin/client/chatcommands.lua
+msgid "The out chat queue is now empty."
+msgstr ""
+
+#: builtin/client/chatcommands.lua
+msgid "This command is disabled by server."
+msgstr "Ð¦Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð° вимкнена на Ñервері."
#: builtin/client/death_formspec.lua src/client/game.cpp
msgid "Respawn"
@@ -23,13 +59,42 @@ msgstr "ПереродитиÑÑ"
msgid "You died"
msgstr "Ви загинули"
+#: builtin/common/chatcommands.lua
+msgid "Available commands:"
+msgstr "ДоÑтупні команди:"
+
+#: builtin/common/chatcommands.lua
+msgid "Available commands: "
+msgstr "ДоÑтупні команди: "
+
+#: builtin/common/chatcommands.lua
+msgid "Command not available: "
+msgstr "Команда не доÑтупна: "
+
+#: builtin/common/chatcommands.lua
+msgid "Get help for commands"
+msgstr "Отримати довідку Ð´Ð»Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´"
+
+#: builtin/common/chatcommands.lua
+msgid ""
+"Use '.help <cmd>' to get more information, or '.help all' to list everything."
+msgstr ""
+
+#: builtin/common/chatcommands.lua
+msgid "[all | <cmd>]"
+msgstr ""
+
#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp
msgid "OK"
-msgstr "ОК"
+msgstr "Добре"
+
+#: builtin/fstk/ui.lua
+msgid "<none available>"
+msgstr ""
#: builtin/fstk/ui.lua
msgid "An error occurred in a Lua script:"
-msgstr "ТрапилаÑÑ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ° у Lua Ñкрипті:"
+msgstr "ТрапилаÑÑ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ° в Ñкрипті Lua:"
#: builtin/fstk/ui.lua
msgid "An error occurred:"
@@ -37,15 +102,15 @@ msgstr "ТрапилаÑÑ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°:"
#: builtin/fstk/ui.lua
msgid "Main menu"
-msgstr "Головне меню"
+msgstr "ОÑновне меню"
#: builtin/fstk/ui.lua
msgid "Reconnect"
-msgstr "Повторне підключеннÑ"
+msgstr "ПерезʼєднаннÑ"
#: builtin/fstk/ui.lua
msgid "The server has requested a reconnect:"
-msgstr "Сервер запроÑив перез'єднаннÑ:"
+msgstr "Сервер запроÑив перезʼєднаннÑ:"
#: builtin/mainmenu/common.lua
msgid "Protocol version mismatch. "
@@ -81,7 +146,7 @@ msgstr "СкаÑувати"
#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/dlg_contentstore.lua
#: builtin/mainmenu/tab_content.lua
msgid "Dependencies:"
-msgstr "Залежить від:"
+msgstr "ЗалежноÑті:"
#: builtin/mainmenu/dlg_config_world.lua
msgid "Disable all"
@@ -89,23 +154,23 @@ msgstr "Вимкнути вÑе"
#: builtin/mainmenu/dlg_config_world.lua
msgid "Disable modpack"
-msgstr "Вимкнути модпак"
+msgstr "Вимкнути пакмод"
#: builtin/mainmenu/dlg_config_world.lua
msgid "Enable all"
-msgstr "Увімкнути вÑе"
+msgstr "Дозволити вÑе"
#: builtin/mainmenu/dlg_config_world.lua
msgid "Enable modpack"
-msgstr "Увімкнути модпак"
+msgstr "Дозволити пакмод"
#: builtin/mainmenu/dlg_config_world.lua
msgid ""
"Failed to enable mod \"$1\" as it contains disallowed characters. Only "
"characters [a-z0-9_] are allowed."
msgstr ""
-"Ðе вдалоÑÑ Ð²Ð²Ñ–Ð¼ÐºÐ½ÑƒÑ‚Ð¸ модифікацію \"$1\", тому що вона міÑтить заборонені "
-"Ñимволи. ДозволÑєтьÑÑ Ð²Ð¸ÐºÐ¾Ñ€Ð¸ÑÑ‚Ð°Ð½Ð½Ñ Ñ‚Ð°ÐºÐ¸Ñ… Ñимволів: [a-z0-9_]."
+"Ðе вдалоÑÑ Ð²Ð²Ñ–Ð¼ÐºÐ½ÑƒÑ‚Ð¸ мод \"$1\", тому що він міÑтить не дозволені знаки. "
+"ДозволÑютьÑÑ Ñ‚Ð°ÐºÑ– знаки: [a-z0-9_]."
#: builtin/mainmenu/dlg_config_world.lua
msgid "Find More Mods"
@@ -117,7 +182,7 @@ msgstr "Мод:"
#: builtin/mainmenu/dlg_config_world.lua
msgid "No (optional) dependencies"
-msgstr "Ðеобов'Ñзкові залежноÑті відÑутні"
+msgstr "ВідÑутні (необовʼÑзкові) залежноÑті"
#: builtin/mainmenu/dlg_config_world.lua
msgid "No game description provided."
@@ -125,19 +190,19 @@ msgstr "ÐžÐ¿Ð¸Ñ Ð³Ñ€Ð¸ відÑутній."
#: builtin/mainmenu/dlg_config_world.lua
msgid "No hard dependencies"
-msgstr "Без обов'Ñзкових залежноÑтей"
+msgstr "Без обовʼÑзкових залежноÑтей"
#: builtin/mainmenu/dlg_config_world.lua
msgid "No modpack description provided."
-msgstr "ÐžÐ¿Ð¸Ñ Ð¼Ð¾Ð´Ð¸Ñ„Ñ–ÐºÐ°Ñ†Ñ–Ñ— відÑутній."
+msgstr "ÐžÐ¿Ð¸Ñ Ð¿Ð°ÐºÐ¼Ð¾Ð´Ð° відÑутній."
#: builtin/mainmenu/dlg_config_world.lua
msgid "No optional dependencies"
-msgstr "ВідÑутні необов'Ñзкові залежноÑті"
+msgstr "ВідÑутні необовʼÑзкові залежноÑті"
#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_content.lua
msgid "Optional dependencies:"
-msgstr "Ðеобов'Ñзкові залежноÑті:"
+msgstr "ÐеобовʼÑзкові залежноÑті:"
#: builtin/mainmenu/dlg_config_world.lua
#: builtin/mainmenu/dlg_settings_advanced.lua src/gui/guiKeyChangeMenu.cpp
@@ -150,60 +215,59 @@ msgstr "Світ:"
#: builtin/mainmenu/dlg_config_world.lua
msgid "enabled"
-msgstr "увімкнено"
+msgstr "дозволено"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "\"$1\" already exists. Would you like to overwrite it?"
-msgstr ""
+msgstr "\"$1\" вже Ñ–Ñнує. Бажаєте перезапиÑати?"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "$1 and $2 dependencies will be installed."
-msgstr ""
+msgstr "Ð’ÑтановитьÑÑ $1 Ñ– $2 залежноÑтей."
#: builtin/mainmenu/dlg_contentstore.lua
msgid "$1 by $2"
-msgstr ""
+msgstr "$1 від $2"
#: builtin/mainmenu/dlg_contentstore.lua
msgid ""
"$1 downloading,\n"
"$2 queued"
msgstr ""
+"$1 завантажуєтьÑÑ,\n"
+"$2 у черзі"
#: builtin/mainmenu/dlg_contentstore.lua
-#, fuzzy
msgid "$1 downloading..."
-msgstr "ЗавантаженнÑ..."
+msgstr "$1 завантажуєтьÑÑ..."
#: builtin/mainmenu/dlg_contentstore.lua
msgid "$1 required dependencies could not be found."
-msgstr ""
+msgstr "$1 необхідних залежноÑтей не знайдено."
#: builtin/mainmenu/dlg_contentstore.lua
msgid "$1 will be installed, and $2 dependencies will be skipped."
-msgstr ""
+msgstr "$1 вÑтановитьÑÑ, Ñ– $2 залежноÑтей буде пропущено."
#: builtin/mainmenu/dlg_contentstore.lua
msgid "All packages"
-msgstr "Ð’ÑÑ– пакунки"
+msgstr "УÑÑ– пакунки"
#: builtin/mainmenu/dlg_contentstore.lua
-#, fuzzy
msgid "Already installed"
-msgstr "Клавіша вже викориÑтовуєтьÑÑ"
+msgstr "Уже вÑтановлено"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Back to Main Menu"
-msgstr "Ðазад в Головне Меню"
+msgstr "Ðазад до головного меню"
#: builtin/mainmenu/dlg_contentstore.lua
-#, fuzzy
msgid "Base Game:"
-msgstr "Грати (Ñервер)"
+msgstr "Базова гра:"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "ContentDB is not available when Minetest was compiled without cURL"
-msgstr "ContentDB не Ñ” доÑтупним коли Minetest не міÑтить підтримку cURL"
+msgstr "ContentDB недоÑтупний, коли Minetest Ñкомпільований без CURL"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Downloading..."
@@ -223,48 +287,49 @@ msgid "Install"
msgstr "Ð’Ñтановити"
#: builtin/mainmenu/dlg_contentstore.lua
-#, fuzzy
msgid "Install $1"
-msgstr "Ð’Ñтановити"
+msgstr "Ð’Ñтановити $1"
#: builtin/mainmenu/dlg_contentstore.lua
-#, fuzzy
msgid "Install missing dependencies"
-msgstr "Ðеобов'Ñзкові залежноÑті:"
+msgstr "Ð’Ñтановити відÑутні залежноÑті"
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "Install: Unsupported file type or broken archive"
+msgstr "УÑтановленнÑ: Ðепідтримуваний тип файлу або пошкоджений архів"
#: builtin/mainmenu/dlg_contentstore.lua
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Mods"
-msgstr "Модифікації"
+msgstr "Моди"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "No packages could be retrieved"
-msgstr "Ðеможливо закачати пакунки"
+msgstr "Ðе вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ пакунки"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "No results"
msgstr "Ðічого не знайдено"
#: builtin/mainmenu/dlg_contentstore.lua
-#, fuzzy
msgid "No updates"
-msgstr "Оновити"
+msgstr "Ðема оновлень"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Not found"
-msgstr ""
+msgstr "Ðе знайдено"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Overwrite"
-msgstr ""
+msgstr "ПерезапиÑати"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Please check that the base game is correct."
-msgstr ""
+msgstr "Перевірте чи оÑновна гра Ñ” правильною."
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Queued"
-msgstr ""
+msgstr "У черзі"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Texture packs"
@@ -280,15 +345,15 @@ msgstr "Оновити"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Update All [$1]"
-msgstr ""
+msgstr "Оновити вÑе [$1]"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "View more information in a web browser"
-msgstr ""
+msgstr "ПереглÑнути більше інформації у вебоглÑдачі"
#: builtin/mainmenu/dlg_create_world.lua
msgid "A world named \"$1\" already exists"
-msgstr "Світ з такою назвою \"$1\" вже Ñ–Ñнує"
+msgstr "Світ з назвою \"$1\" вже Ñ–Ñнує"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Additional terrain"
@@ -348,7 +413,7 @@ msgstr "Плаваючі земельні маÑиви в небі"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Floatlands (experimental)"
-msgstr "ВиÑÑчі оÑтрови"
+msgstr "ВиÑÑчі оÑтрови (екÑпериментальне)"
#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
msgid "Game"
@@ -356,7 +421,7 @@ msgstr "Гра"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Generate non-fractal terrain: Oceans and underground"
-msgstr "Генерувати нефрактальну міÑцевіÑть: Океани та підземеллÑ"
+msgstr "Òенерувати нефрактальну міÑцевіÑть: океани Ñ– підземеллÑ"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Hills"
@@ -380,15 +445,15 @@ msgstr "Ðизька вологіÑть Ñ– велика Ñпека ÑпричиÐ
#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
msgid "Mapgen"
-msgstr "Генератор Ñвіту"
+msgstr "Òенератор Ñвіту"
#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
msgid "Mapgen flags"
-msgstr "Прапори Генератору Ñвіту"
+msgstr "Мітки ґенератора Ñвіту"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Mapgen-specific flags"
-msgstr "ВлаÑтивоÑті генератору Ñвіту"
+msgstr "Мітки Ð´Ð»Ñ Ò‘ÐµÐ½ÐµÑ€Ð°Ñ‚Ð¾Ñ€Ð° Ñвіту"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Mountains"
@@ -396,7 +461,7 @@ msgstr "Гори"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Mud flow"
-msgstr "ГрÑзьовий потік"
+msgstr "БолотÑний потік"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Network of tunnels and caves"
@@ -404,7 +469,7 @@ msgstr "Мережа тунелів і печер"
#: builtin/mainmenu/dlg_create_world.lua
msgid "No game selected"
-msgstr "Гру не вибрано"
+msgstr "Ðе вибрано гру"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Reduces heat with altitude"
@@ -420,7 +485,7 @@ msgstr "Річки"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Sea level rivers"
-msgstr "Річки Ð Ñ–Ð²Ð½Ñ Ð¼Ð¾Ñ€Ñ"
+msgstr "Річки на рівні морÑ"
#: builtin/mainmenu/dlg_create_world.lua
#: builtin/mainmenu/dlg_settings_advanced.lua
@@ -449,7 +514,7 @@ msgstr "Помірний, пуÑтелÑ"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Temperate, Desert, Jungle"
-msgstr "Помірного ПоÑÑу, ПуÑтелі, Джунглі"
+msgstr "Помірний, пуÑтелі, джунглі"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Temperate, Desert, Jungle, Tundra, Taiga"
@@ -461,7 +526,7 @@ msgstr "Ð•Ñ€Ð¾Ð·Ñ–Ñ Ð¿Ð¾Ð²ÐµÑ€Ñ…Ð½Ñ– міÑцевоÑті"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Trees and jungle grass"
-msgstr "Дерева та трава джунглів"
+msgstr "Дерева і трава джунглів"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Vary river depth"
@@ -472,9 +537,8 @@ msgid "Very large caverns deep in the underground"
msgstr "Дуже великі печери глибоко під землею"
#: builtin/mainmenu/dlg_create_world.lua
-#, fuzzy
msgid "Warning: The Development Test is meant for developers."
-msgstr "Увага: мінімальна теÑтова верÑÑ–Ñ Ð¿Ñ€Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð° Ð´Ð»Ñ Ñ€Ð¾Ð·Ñ€Ð¾Ð±Ð½Ð¸ÐºÑ–Ð²."
+msgstr "Увага: теÑтова розробка означає Ð´Ð»Ñ Ñ€Ð¾Ð·Ñ€Ð¾Ð±Ð½Ð¸ÐºÑ–Ð²."
#: builtin/mainmenu/dlg_create_world.lua
msgid "World name"
@@ -512,35 +576,34 @@ msgstr "ПрийнÑти"
#: builtin/mainmenu/dlg_rename_modpack.lua
msgid "Rename Modpack:"
-msgstr "Перейменувати збірку модифікацій:"
+msgstr "Перейменувати пакмод:"
#: builtin/mainmenu/dlg_rename_modpack.lua
msgid ""
"This modpack has an explicit name given in its modpack.conf which will "
"override any renaming here."
msgstr ""
-"Цей набір модифікацій (модпак) має точну назву, вÑтановлену у modpack.conf, "
-"на що не вплине перейменуваннÑ."
+"Цей пакмод має Ñвну назву в modpack.conf, на що не вплине перейменуваннÑ."
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "(No description of setting given)"
-msgstr "(поÑÑÐ½ÐµÐ½Ð½Ñ Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð²Ñ–Ð´Ñутнє)"
+msgstr "(не задані опиÑи налаштувань)"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "2D Noise"
-msgstr "2D Шум"
+msgstr "2D-шум"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "< Back to Settings page"
-msgstr "< Ðазад до Ðалаштувань"
+msgstr "< Ðазад до налаштувань"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Browse"
-msgstr "ПереглÑнути"
+msgstr "ОглÑнути"
-#: builtin/mainmenu/dlg_settings_advanced.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_settings.lua
msgid "Disabled"
-msgstr "Вимкнено"
+msgstr "Заборонено"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Edit"
@@ -548,11 +611,11 @@ msgstr "Правити"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Enabled"
-msgstr "Увімкнено"
+msgstr "Дозволено"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Lacunarity"
-msgstr "ЛакунарніÑть"
+msgstr "ПорожниÑтіÑть"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Octaves"
@@ -563,32 +626,32 @@ msgid "Offset"
msgstr "ЗÑув"
#: builtin/mainmenu/dlg_settings_advanced.lua
-msgid "Persistance"
+msgid "Persistence"
msgstr "ПоÑтійніÑть"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Please enter a valid integer."
-msgstr "Будь-лаÑка введіть коректне ціле чиÑло."
+msgstr "Введіть коректне ціле чиÑло."
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Please enter a valid number."
-msgstr "Будь-лаÑка введіть коректне чиÑло."
+msgstr "Введіть коректне чиÑло."
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Restore Default"
-msgstr "Відновити за замовченнÑм"
+msgstr "Відновити типові"
#: builtin/mainmenu/dlg_settings_advanced.lua src/settings_translation_file.cpp
msgid "Scale"
msgstr "Шкала"
-#: builtin/mainmenu/dlg_settings_advanced.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_online.lua
msgid "Search"
msgstr "Пошук"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Select directory"
-msgstr "Виберіть директорію"
+msgstr "Виберіть каталог"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Select file"
@@ -600,7 +663,7 @@ msgstr "Показувати технічні назви"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "The value must be at least $1."
-msgstr "Ð—Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¼Ð°Ñ” бути Ñк мінімум $1."
+msgstr "ЗначеннÑм має бути щонайменше $1."
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "The value must not be larger than $1."
@@ -655,11 +718,11 @@ msgstr "полегшений"
#: builtin/mainmenu/pkgmgr.lua
msgid "$1 (Enabled)"
-msgstr "$1 (Увімкнено)"
+msgstr "$1 (Дозволено)"
#: builtin/mainmenu/pkgmgr.lua
msgid "$1 mods"
-msgstr "$1 модифікації"
+msgstr "$1 модів"
#: builtin/mainmenu/pkgmgr.lua
msgid "Failed to install $1 to $2"
@@ -667,25 +730,16 @@ msgstr "Ðе вдалоÑÑ Ð²Ñтановити $1 в $2"
#: builtin/mainmenu/pkgmgr.lua
msgid "Install Mod: Unable to find real mod name for: $1"
-msgstr "Ð’ÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð¼Ð¾Ð´Ð¸Ñ„Ñ–ÐºÐ°Ñ†Ñ–Ñ—: не вдаєтьÑÑ Ð·Ð½Ð°Ð¹Ñ‚Ð¸ реальну назву длÑ: $1"
+msgstr "Ð’ÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð¼Ð¾Ð´Ð°: не вдаєтьÑÑ Ð·Ð½Ð°Ð¹Ñ‚Ð¸ Ñправжню назву длÑ: $1"
#: builtin/mainmenu/pkgmgr.lua
msgid "Install Mod: Unable to find suitable folder name for modpack $1"
msgstr ""
-"Ð’ÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð¼Ð¾Ð´Ð¸Ñ„Ñ–ÐºÐ°Ñ†Ñ–Ñ—: неможливо знайти відповідну назву папки Ð´Ð»Ñ "
-"модпаку $1"
-
-#: builtin/mainmenu/pkgmgr.lua
-msgid "Install: Unsupported file type \"$1\" or broken archive"
-msgstr "Ð’ÑтановленнÑ: тип файлу \"$1\" не підтримуєтьÑÑ Ð°Ð±Ð¾ архів пошкоджено"
-
-#: builtin/mainmenu/pkgmgr.lua
-msgid "Install: file: \"$1\""
-msgstr "Ð’ÑтановленнÑ: файл: \"$1\""
+"Ð’ÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð¼Ð¾Ð´Ð°: неможливо знайти відповідну назву теки Ð´Ð»Ñ Ð¿Ð°ÐºÐ¼Ð¾Ð´Ñƒ $1"
#: builtin/mainmenu/pkgmgr.lua
msgid "Unable to find a valid mod or modpack"
-msgstr "Ðеможливо знайти вірну модифікацію або набір модифікацій (модпак)"
+msgstr "Ðеможливо знайти правильний мод або пакмод"
#: builtin/mainmenu/pkgmgr.lua
msgid "Unable to install a $1 as a texture pack"
@@ -708,9 +762,8 @@ msgid "Loading..."
msgstr "ЗавантаженнÑ..."
#: builtin/mainmenu/serverlistmgr.lua
-#, fuzzy
msgid "Public server list is disabled"
-msgstr "КлієнтоÑторонні Ñкрипти на клієнті вимкнено"
+msgstr "СпиÑок публічних Ñерверів вимкнено"
#: builtin/mainmenu/serverlistmgr.lua
msgid "Try reenabling public serverlist and check your internet connection."
@@ -718,13 +771,49 @@ msgstr ""
"Спробуйте оновити ÑпиÑок публічних Ñерверів та перевірте Ñвоє Інтернет-"
"з'єднаннÑ."
+#: builtin/mainmenu/tab_about.lua
+msgid "About"
+msgstr "Про"
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Active Contributors"
+msgstr "Ðктивні Ñпіврозробники"
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Active renderer:"
+msgstr "Ðктивний промальовувач:"
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Core Developers"
+msgstr "ОÑновні розробники"
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Open User Data Directory"
+msgstr "Відкрити каталог кориÑтувацьких даних"
+
+#: builtin/mainmenu/tab_about.lua
+msgid ""
+"Opens the directory that contains user-provided worlds, games, mods,\n"
+"and texture packs in a file manager / explorer."
+msgstr ""
+"Відкриває каталог, що міÑтить надані кориÑтувачем Ñвіти, ігри, моди,\n"
+"Ñ– набори текÑтур у файловому керівнику / оглÑдачі."
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Previous Contributors"
+msgstr "Попередні Ñпіврозробники"
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Previous Core Developers"
+msgstr "Попередні оÑновні розробники"
+
#: builtin/mainmenu/tab_content.lua
msgid "Browse online content"
-msgstr "ПереглÑнути контент у мережі"
+msgstr "ОглÑнути вміÑÑ‚ у мережі"
#: builtin/mainmenu/tab_content.lua
msgid "Content"
-msgstr "Контент"
+msgstr "ВміÑÑ‚"
#: builtin/mainmenu/tab_content.lua
msgid "Disable Texture Pack"
@@ -756,42 +845,11 @@ msgstr "Видалити пакунок"
#: builtin/mainmenu/tab_content.lua
msgid "Use Texture Pack"
-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
-#, fuzzy
-msgid "Open User Data Directory"
-msgstr "Виберіть директорію"
-
-#: builtin/mainmenu/tab_credits.lua
-msgid ""
-"Opens the directory that contains user-provided worlds, games, mods,\n"
-"and texture packs in a file manager / explorer."
-msgstr ""
-
-#: builtin/mainmenu/tab_credits.lua
-msgid "Previous Contributors"
-msgstr "Попередні учаÑники"
-
-#: builtin/mainmenu/tab_credits.lua
-msgid "Previous Core Developers"
-msgstr "Попередні розробники Ñдра"
+msgstr "Викор. набір текÑтур"
#: builtin/mainmenu/tab_local.lua
msgid "Announce Server"
-msgstr "Публічний"
+msgstr "ÐнонÑувати Ñервер"
#: builtin/mainmenu/tab_local.lua
msgid "Bind Address"
@@ -799,11 +857,11 @@ msgstr "Закріпити адреÑу"
#: builtin/mainmenu/tab_local.lua
msgid "Creative Mode"
-msgstr "Творчій режим"
+msgstr "Творчий режим"
#: builtin/mainmenu/tab_local.lua
msgid "Enable Damage"
-msgstr "Увімкнути ушкодженнÑ"
+msgstr "Дозволити пошкодженнÑ"
#: builtin/mainmenu/tab_local.lua
msgid "Host Game"
@@ -817,9 +875,9 @@ msgstr "Сервер"
msgid "Install games from ContentDB"
msgstr "Ð’Ñтановити ігри з ContentDB"
-#: builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
msgid "Name"
-msgstr ""
+msgstr "Ðазва"
#: builtin/mainmenu/tab_local.lua
msgid "New"
@@ -829,23 +887,21 @@ msgstr "Ðовий"
msgid "No world created or selected!"
msgstr "Світ не Ñтворено або не обрано!"
-#: builtin/mainmenu/tab_local.lua
-#, fuzzy
+#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
msgid "Password"
-msgstr "Ðовий пароль"
+msgstr "Пароль"
#: builtin/mainmenu/tab_local.lua
msgid "Play Game"
-msgstr "Грати"
+msgstr "Грати гру"
-#: builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
msgid "Port"
msgstr "Порт"
#: builtin/mainmenu/tab_local.lua
-#, fuzzy
msgid "Select Mods"
-msgstr "Виберіть Ñвіт:"
+msgstr "Виберіть моди"
#: builtin/mainmenu/tab_local.lua
msgid "Select World:"
@@ -860,45 +916,57 @@ msgid "Start Game"
msgstr "Почати гру"
#: builtin/mainmenu/tab_online.lua
-msgid "Address / Port"
-msgstr "ÐдреÑа / Порт"
+msgid "Address"
+msgstr "ÐдреÑа"
+
+#: builtin/mainmenu/tab_online.lua src/client/keycode.cpp
+msgid "Clear"
+msgstr "ОчиÑтити"
#: builtin/mainmenu/tab_online.lua
msgid "Connect"
-msgstr "Під'єднатиÑÑ"
+msgstr "ЗʼєднатиÑÑ"
#: builtin/mainmenu/tab_online.lua
msgid "Creative mode"
-msgstr "Творчій режим"
+msgstr "Творчий режим"
+#. ~ PvP = Player versus Player
#: builtin/mainmenu/tab_online.lua
-msgid "Damage enabled"
-msgstr "Ð£ÑˆÐºÐ¾Ð´Ð¶ÐµÐ½Ð½Ñ Ð²Ð²Ñ–Ð¼ÐºÐ½ÐµÐ½Ð¾"
+msgid "Damage / PvP"
+msgstr "ÐŸÐ¾ÑˆÐºÐ¾Ð´Ð¶ÐµÐ½Ð½Ñ / ГпГ"
#: builtin/mainmenu/tab_online.lua
msgid "Del. Favorite"
-msgstr "Видалити з закладок"
+msgstr "Видалити зі закладок"
#: builtin/mainmenu/tab_online.lua
-msgid "Favorite"
-msgstr "Закладки"
+msgid "Favorites"
+msgstr "Відібрані"
#: builtin/mainmenu/tab_online.lua
-msgid "Join Game"
-msgstr "Під'єднатиÑÑ Ð´Ð¾ гри"
+msgid "Incompatible Servers"
+msgstr "ÐеÑуміÑні Ñервери"
#: builtin/mainmenu/tab_online.lua
-msgid "Name / Password"
-msgstr "Ім'Ñ / Пароль"
+msgid "Join Game"
+msgstr "ДолучитиÑÑ Ð´Ð¾ гри"
#: builtin/mainmenu/tab_online.lua
msgid "Ping"
-msgstr "Пінг"
+msgstr "Пінґ"
+
+#: builtin/mainmenu/tab_online.lua
+msgid "Public Servers"
+msgstr "Публічні Ñервери"
+
+#: builtin/mainmenu/tab_online.lua
+msgid "Refresh"
+msgstr "Оновити"
-#. ~ PvP = Player versus Player
#: builtin/mainmenu/tab_online.lua
-msgid "PvP enabled"
-msgstr "Бої увімкнено"
+msgid "Server Description"
+msgstr "ÐžÐ¿Ð¸Ñ Ñервера"
#: builtin/mainmenu/tab_settings.lua
msgid "2x"
@@ -918,7 +986,7 @@ msgstr "8x"
#: builtin/mainmenu/tab_settings.lua
msgid "All Settings"
-msgstr "Ð’ÑÑ– налаштуваннÑ"
+msgstr "УÑÑ– налаштуваннÑ"
#: builtin/mainmenu/tab_settings.lua
msgid "Antialiasing:"
@@ -930,7 +998,7 @@ msgstr "Зберігати розмір вікна"
#: builtin/mainmenu/tab_settings.lua
msgid "Bilinear Filter"
-msgstr "Білінійна фільтраціÑ"
+msgstr "Дволінійне фільтруваннÑ"
#: builtin/mainmenu/tab_settings.lua src/client/game.cpp
msgid "Change Keys"
@@ -938,13 +1006,33 @@ msgstr "Змінити клавіші"
#: builtin/mainmenu/tab_settings.lua
msgid "Connected Glass"
-msgstr "З'єднане Ñкло"
+msgstr "Зʼєднане Ñкло"
+
+#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
+msgid "Dynamic shadows"
+msgstr "Динамічні тіні"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Dynamic shadows: "
+msgstr "Динамічні тіні: "
#: builtin/mainmenu/tab_settings.lua
msgid "Fancy Leaves"
msgstr "Гарне лиÑÑ‚Ñ"
#: builtin/mainmenu/tab_settings.lua
+msgid "High"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Low"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Medium"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
msgid "Mipmap"
msgstr "Міпмапи"
@@ -954,7 +1042,7 @@ msgstr "Міпмапи і анізотропний фільтр"
#: builtin/mainmenu/tab_settings.lua
msgid "No Filter"
-msgstr "Без фільтрації"
+msgstr "Без фільтруваннÑ"
#: builtin/mainmenu/tab_settings.lua
msgid "No Mipmap"
@@ -994,16 +1082,15 @@ msgstr "ÐалаштуваннÑ"
#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
msgid "Shaders"
-msgstr "Шейдери"
+msgstr "Відтінювачі"
#: builtin/mainmenu/tab_settings.lua
-#, fuzzy
msgid "Shaders (experimental)"
-msgstr "ВиÑÑчі оÑтрови"
+msgstr "Відтінювачі (екÑпериментальне)"
#: builtin/mainmenu/tab_settings.lua
msgid "Shaders (unavailable)"
-msgstr "Шейдери (недоÑтупно)"
+msgstr "Відтінювачі (недоÑтупно)"
#: builtin/mainmenu/tab_settings.lua
msgid "Simple Leaves"
@@ -1017,10 +1104,6 @@ msgstr "Згладжене оÑвітленнÑ"
msgid "Texturing:"
msgstr "ТекÑтуруваннÑ:"
-#: builtin/mainmenu/tab_settings.lua
-msgid "To enable shaders the OpenGL driver needs to be used."
-msgstr "Ð”Ð»Ñ Ñ‚Ð¾Ð³Ð¾, щоб увімкнути шейдери, потрібно мати драйвер OpenGL."
-
#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
msgid "Tone Mapping"
msgstr "Тоновий шейдер"
@@ -1034,6 +1117,14 @@ msgid "Trilinear Filter"
msgstr "Трилінійна фільтраціÑ"
#: builtin/mainmenu/tab_settings.lua
+msgid "Ultra High"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Very Low"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
msgid "Waving Leaves"
msgstr "Коливати лиÑÑ‚Ñ"
@@ -1045,21 +1136,21 @@ msgstr "ХвилÑÑті Рідини"
msgid "Waving Plants"
msgstr "Коливати квіти"
-#: src/client/client.cpp
+#: src/client/client.cpp src/client/game.cpp
msgid "Connection timed out."
msgstr "Ð§Ð°Ñ Ð¾Ñ‡Ñ–ÐºÑƒÐ²Ð°Ð½Ð½Ñ Ð²Ð¸Ð¹ÑˆÐ¾Ð²."
#: src/client/client.cpp
msgid "Done!"
-msgstr "Виконано!"
+msgstr "Готово!"
#: src/client/client.cpp
msgid "Initializing nodes"
-msgstr "Ð†Ð½Ñ–Ñ†Ñ–Ð°Ð»Ñ–Ð·Ð°Ñ†Ñ–Ñ Ð±Ð»Ð¾ÐºÑ–Ð²"
+msgstr "Ð†Ð½Ñ–Ñ†Ñ–Ð°Ð»Ñ–Ð·ÑƒÐ²Ð°Ð½Ð½Ñ Ð±Ð»Ð¾ÐºÑ–Ð²"
#: src/client/client.cpp
msgid "Initializing nodes..."
-msgstr "Ð†Ð½Ñ–Ñ†Ñ–Ð°Ð»Ñ–Ð·Ð°Ñ†Ñ–Ñ Ð±Ð»Ð¾ÐºÑ–Ð²..."
+msgstr "Ð†Ð½Ñ–Ñ†Ñ–Ð°Ð»Ñ–Ð·ÑƒÐ²Ð°Ð½Ð½Ñ Ð±Ð»Ð¾ÐºÑ–Ð²..."
#: src/client/client.cpp
msgid "Loading textures..."
@@ -1071,11 +1162,11 @@ msgstr "Перебудова шейдерів..."
#: src/client/clientlauncher.cpp
msgid "Connection error (timed out?)"
-msgstr "Помилка з'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ (Ñ‡Ð°Ñ Ð²Ð¸Ð¹ÑˆÐ¾Ð²?)"
+msgstr "Помилка Ð·Ê¼Ñ”Ð´Ð½Ð°Ð½Ð½Ñ (Ñ‡Ð°Ñ Ð²Ð¸Ð¹ÑˆÐ¾Ð²?)"
#: src/client/clientlauncher.cpp
-msgid "Could not find or load game \""
-msgstr "Ðеможливо знайти або завантажити гру \""
+msgid "Could not find or load game: "
+msgstr "Ðеможливо знайти або завантажити гру: "
#: src/client/clientlauncher.cpp
msgid "Invalid gamespec."
@@ -1083,7 +1174,7 @@ msgstr "Помилкова ÐºÐ¾Ð½Ñ„Ñ–Ð³ÑƒÑ€Ð°Ñ†Ñ–Ñ gamespec."
#: src/client/clientlauncher.cpp
msgid "Main Menu"
-msgstr "Головне Меню"
+msgstr "ОÑновне меню"
#: src/client/clientlauncher.cpp
msgid "No world selected and no address provided. Nothing to do."
@@ -1091,11 +1182,11 @@ msgstr "Жоден Ñвіт не вибрано та не надано адреÑ
#: src/client/clientlauncher.cpp
msgid "Player name too long."
-msgstr "Ім'Ñ Ð³Ñ€Ð°Ð²Ñ†Ñ Ð·Ð°Ð½Ð°Ð´Ñ‚Ð¾ довге."
+msgstr "Ð†Ð¼Ê¼Ñ Ð³Ñ€Ð°Ð²Ñ†Ñ Ð·Ð°Ð´Ð¾Ð²Ð³Ðµ."
#: src/client/clientlauncher.cpp
msgid "Please choose a name!"
-msgstr "Будь-лаÑка введіть ім'Ñ!"
+msgstr "Будь-лаÑка, оберіть імʼÑ!"
#: src/client/clientlauncher.cpp
msgid "Provided password file failed to open: "
@@ -1105,18 +1196,6 @@ msgstr "Ðе вдалоÑÑ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ð¸ файл паролю: "
msgid "Provided world path doesn't exist: "
msgstr "Вказаний шлÑÑ… до Ñвіту не Ñ–Ñнує: "
-#. ~ DO NOT TRANSLATE THIS LITERALLY!
-#. This is a special string. Put either "no" or "yes"
-#. into the translation field (literally).
-#. Choose "yes" if the language requires use of the fallback
-#. font, "no" otherwise.
-#. The fallback font is (normally) required for languages with
-#. non-Latin script, like Chinese.
-#. When in doubt, test your translation.
-#: src/client/fontengine.cpp
-msgid "needs_fallback_font"
-msgstr "no"
-
#: src/client/game.cpp
msgid ""
"\n"
@@ -1130,14 +1209,6 @@ msgid "- Address: "
msgstr "- ÐдреÑа: "
#: src/client/game.cpp
-msgid "- Creative Mode: "
-msgstr "- ТворчіÑть: "
-
-#: src/client/game.cpp
-msgid "- Damage: "
-msgstr "- УшкодженнÑ: "
-
-#: src/client/game.cpp
msgid "- Mode: "
msgstr "- Режим: "
@@ -1152,13 +1223,22 @@ msgstr "- Публічний: "
#. ~ PvP = Player versus Player
#: src/client/game.cpp
msgid "- PvP: "
-msgstr "- PvP (бої): "
+msgstr "- ГпГ (бої): "
#: src/client/game.cpp
msgid "- Server Name: "
msgstr "- Ðазва Ñервера: "
#: src/client/game.cpp
+msgid "A serialization error occurred:"
+msgstr "ТрапилаÑÑ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ° Ñеріалізації:"
+
+#: src/client/game.cpp
+#, c-format
+msgid "Access denied. Reason: %s"
+msgstr "ДоÑтуп відхилено. Причина: %s"
+
+#: src/client/game.cpp
msgid "Automatic forward disabled"
msgstr "Ðвтоматичний рух вперед вимкнено"
@@ -1167,6 +1247,22 @@ msgid "Automatic forward enabled"
msgstr "Ðвтоматичний рух вперед увімкнено"
#: src/client/game.cpp
+msgid "Block bounds hidden"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Block bounds shown for all blocks"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Block bounds shown for current block"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Block bounds shown for nearby blocks"
+msgstr ""
+
+#: src/client/game.cpp
msgid "Camera update disabled"
msgstr "ÐžÐ½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ ÐºÐ°Ð¼ÐµÑ€Ð¸ вимкнено"
@@ -1175,6 +1271,10 @@ msgid "Camera update enabled"
msgstr "ÐžÐ½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ ÐºÐ°Ð¼ÐµÑ€Ð¸ увімкнено"
#: src/client/game.cpp
+msgid "Can't show block bounds (need 'basic_debug' privilege)"
+msgstr ""
+
+#: src/client/game.cpp
msgid "Change Password"
msgstr "Змінити пароль"
@@ -1187,6 +1287,10 @@ msgid "Cinematic mode enabled"
msgstr "Кінорежим увімкнено"
#: src/client/game.cpp
+msgid "Client disconnected"
+msgstr "Клієнта відʼєднано"
+
+#: src/client/game.cpp
msgid "Client side scripting is disabled"
msgstr "КлієнтоÑторонні Ñкрипти на клієнті вимкнено"
@@ -1195,11 +1299,15 @@ msgid "Connecting to server..."
msgstr "ÐŸÑ–Ð´ÐºÐ»ÑŽÑ‡ÐµÐ½Ð½Ñ Ð´Ð¾ Ñервера..."
#: src/client/game.cpp
+msgid "Connection failed for unknown reason"
+msgstr "Ðевдале Ð·Ê¼Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð· невідомих причин"
+
+#: src/client/game.cpp
msgid "Continue"
msgstr "Продовжити"
#: src/client/game.cpp
-#, fuzzy, c-format
+#, c-format
msgid ""
"Controls:\n"
"- %s: move forwards\n"
@@ -1216,22 +1324,27 @@ msgid ""
"- Mouse wheel: select item\n"
"- %s: chat\n"
msgstr ""
-"Стандартне ÐºÐµÑ€ÑƒÐ²Ð°Ð½Ð½Ñ ÐºÐ»Ð°Ð²Ñ–ÑˆÐ°Ð¼Ð¸:\n"
-"- %s: вперед\n"
-"- %s: назад\n"
-"- %s: ліворуч\n"
-"- %s: праворуч\n"
+"КеруваннÑ:\n"
+"- %s: рухатиÑÑ Ð²Ð¿ÐµÑ€ÐµÐ´\n"
+"- %s: рухатиÑÑ Ð½Ð°Ð·Ð°Ð´\n"
+"- %s: рухатиÑÑ Ð²Ð»Ñ–Ð²Ð¾\n"
+"- %s: рухатиÑÑ Ð²Ð¿Ñ€Ð°Ð²Ð¾\n"
"- %s: Ñтрибок/лізти вгору\n"
+"- %s: копати/удар\n"
+"- %s: поÑтавити/викориÑтати\n"
"- %s: краÑтиÑÑ/лізти вниз\n"
"- %s: кинути предмет\n"
"- %s: інвентар\n"
-"- Мишка: поворот/дивитиÑÑ\n"
-"- Ліва кнопка миші: копати/удар\n"
-"- Права кнопка миші: поÑтавити/викориÑтати\n"
-"- КолеÑо миші: вибір предмета\n"
+"- Миша: поворот/дивитиÑÑ\n"
+"- Коліщатко миші: вибір предмета\n"
"- %s: чат\n"
#: src/client/game.cpp
+#, c-format
+msgid "Couldn't resolve address: %s"
+msgstr ""
+
+#: src/client/game.cpp
msgid "Creating client..."
msgstr "Ð¡Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ ÐºÐ»Ñ–Ñ”Ð½Ñ‚Ð°..."
@@ -1289,11 +1402,11 @@ msgstr "Ðеобмежена видиміÑть (повільно)"
#: src/client/game.cpp
msgid "Exit to Menu"
-msgstr "Вихід в меню"
+msgstr "Вихід у меню"
#: src/client/game.cpp
msgid "Exit to OS"
-msgstr "Вихід з гри"
+msgstr "Вихід із гри"
#: src/client/game.cpp
msgid "Fast mode disabled"
@@ -1360,6 +1473,10 @@ msgid "Minimap currently disabled by game or mod"
msgstr "Мінімапа вимкнена грою або модифікацією"
#: src/client/game.cpp
+msgid "Multiplayer"
+msgstr "БагатокориÑтувацька гра"
+
+#: src/client/game.cpp
msgid "Noclip mode disabled"
msgstr "Прохід крізь Ñтіни вимкнено"
@@ -1377,11 +1494,11 @@ msgstr "Ð’Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð±Ð»Ð¾ÐºÑ–Ð²..."
#: src/client/game.cpp
msgid "Off"
-msgstr "Вимкнено"
+msgstr "Вимк."
#: src/client/game.cpp
msgid "On"
-msgstr "Увімкнено"
+msgstr "Увім."
#: src/client/game.cpp
msgid "Pitch move mode disabled"
@@ -1433,6 +1550,21 @@ msgstr "Звук увімкнено"
#: src/client/game.cpp
#, c-format
+msgid "The server is probably running a different version of %s."
+msgstr ""
+
+#: src/client/game.cpp
+#, c-format
+msgid "Unable to connect to %s because IPv6 is disabled"
+msgstr ""
+
+#: src/client/game.cpp
+#, c-format
+msgid "Unable to listen on %s because IPv6 is disabled"
+msgstr ""
+
+#: src/client/game.cpp
+#, c-format
msgid "Viewing range changed to %d"
msgstr "ВидиміÑть змінено до %d"
@@ -1461,23 +1593,23 @@ msgstr "ÐÐ°Ð±Ð»Ð¸Ð¶ÐµÐ½Ð½Ñ (бінокль) вимкнено грою або Ð
#: src/client/game.cpp
msgid "ok"
-msgstr "гаразд"
+msgstr "добре"
#: src/client/gameui.cpp
msgid "Chat hidden"
-msgstr "Чат вимкнено"
+msgstr "Чат Ñховано"
#: src/client/gameui.cpp
msgid "Chat shown"
-msgstr "Чат увімкнено"
+msgstr "Чат показано"
#: src/client/gameui.cpp
msgid "HUD hidden"
-msgstr "Позначки на екрані вимкнено"
+msgstr "HUD приховано"
#: src/client/gameui.cpp
msgid "HUD shown"
-msgstr "Позначки на екрані увімкнено"
+msgstr "HUD показано"
#: src/client/gameui.cpp
msgid "Profiler hidden"
@@ -1494,17 +1626,13 @@ msgstr "Додатки"
#: src/client/keycode.cpp
msgid "Backspace"
-msgstr "Ðазад (Backspace)"
+msgstr "Backspace"
#: src/client/keycode.cpp
msgid "Caps Lock"
msgstr "Caps Lock"
#: src/client/keycode.cpp
-msgid "Clear"
-msgstr "ОчиÑтити"
-
-#: src/client/keycode.cpp
msgid "Control"
msgstr "Ctrl"
@@ -1526,7 +1654,7 @@ msgstr "Виконати"
#: src/client/keycode.cpp
msgid "Help"
-msgstr "Допомога"
+msgstr "Довідка"
#: src/client/keycode.cpp
msgid "Home"
@@ -1713,7 +1841,7 @@ msgstr "Scroll Lock"
#. ~ Key name
#: src/client/keycode.cpp
msgid "Select"
-msgstr "Обрати"
+msgstr "Вибрати"
#: src/client/keycode.cpp
msgid "Shift"
@@ -1725,7 +1853,7 @@ msgstr "Сон"
#: src/client/keycode.cpp
msgid "Snapshot"
-msgstr "Знімок"
+msgstr "Зріз"
#: src/client/keycode.cpp
msgid "Space"
@@ -1756,19 +1884,26 @@ msgid "Minimap hidden"
msgstr "Мінімапа вимкнена"
#: src/client/minimap.cpp
-#, fuzzy, c-format
+#, c-format
msgid "Minimap in radar mode, Zoom x%d"
-msgstr "Мінімапа в режимі радар. ÐÐ°Ð±Ð»Ð¸Ð¶ÐµÐ½Ð½Ñ Ñ…1"
+msgstr "Мінімапа в режимі радара. ÐÐ°Ð±Ð»Ð¸Ð¶ÐµÐ½Ð½Ñ x%d"
#: src/client/minimap.cpp
-#, fuzzy, c-format
+#, c-format
msgid "Minimap in surface mode, Zoom x%d"
-msgstr "Мінімапа в режимі поверхнÑ. ÐÐ°Ð±Ð»Ð¸Ð¶ÐµÐ½Ð½Ñ Ñ…1"
+msgstr "Мінімапа в режимі поверхні. ÐÐ°Ð±Ð»Ð¸Ð¶ÐµÐ½Ð½Ñ x%d"
#: src/client/minimap.cpp
-#, fuzzy
msgid "Minimap in texture mode"
-msgstr "Мінімапа в режимі поверхнÑ. ÐÐ°Ð±Ð»Ð¸Ð¶ÐµÐ½Ð½Ñ Ñ…1"
+msgstr "Мінімапа в текÑтурному режимі"
+
+#: src/gui/guiChatConsole.cpp
+msgid "Failed to open webpage"
+msgstr "Ðе вдалоÑÑ Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶Ð¸Ñ‚Ð¸ вебÑторінку"
+
+#: src/gui/guiChatConsole.cpp
+msgid "Opening webpage"
+msgstr "Ð’Ñ–Ð´ÐºÑ€Ð¸Ð²Ð°Ð½Ð½Ñ Ð²ÐµÐ±Ñторінки"
#: src/gui/guiConfirmRegistration.cpp src/gui/guiPasswordChange.cpp
msgid "Passwords do not match!"
@@ -1798,8 +1933,8 @@ msgid "Proceed"
msgstr "Далі"
#: src/gui/guiKeyChangeMenu.cpp
-msgid "\"Special\" = climb down"
-msgstr "Спеціальна = ÑпуÑкатиÑÑ"
+msgid "\"Aux1\" = climb down"
+msgstr "\"Aux1\" = лізти вниз"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Autoforward"
@@ -1810,10 +1945,18 @@ msgid "Automatic jumping"
msgstr "Ðвтоматичне переÑтрибуваннÑ"
#: src/gui/guiKeyChangeMenu.cpp
+msgid "Aux1"
+msgstr "Aux1"
+
+#: src/gui/guiKeyChangeMenu.cpp
msgid "Backward"
msgstr "Ðазад"
#: src/gui/guiKeyChangeMenu.cpp
+msgid "Block bounds"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
msgid "Change camera"
msgstr "Змінити камеру"
@@ -1877,7 +2020,7 @@ msgstr ""
#: src/gui/guiKeyChangeMenu.cpp
msgid "Local command"
-msgstr "Команда (локальна)"
+msgstr "Локальна команда"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Mute"
@@ -1885,11 +2028,11 @@ msgstr "Вимкнути звук"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Next item"
-msgstr "ÐаÑтупний Ñлот"
+msgstr "ÐаÑтупний предмет"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Prev. item"
-msgstr "Попередній Ñлот"
+msgstr "Попередній предмет"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Range select"
@@ -1897,23 +2040,19 @@ msgstr "Вибір діапазону"
#: src/gui/guiKeyChangeMenu.cpp src/settings_translation_file.cpp
msgid "Screenshot"
-msgstr "Знімок екрану"
+msgstr "Знімок екрана"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Sneak"
msgstr "КраÑтиÑÑ"
#: src/gui/guiKeyChangeMenu.cpp
-msgid "Special"
-msgstr "Спеціальна"
-
-#: src/gui/guiKeyChangeMenu.cpp
msgid "Toggle HUD"
-msgstr "Увімкнути позначки на екрані"
+msgstr "Увімкнути HUD"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Toggle chat log"
-msgstr "Увімкнути чат (журнал)"
+msgstr "Увімкнути журнал чату"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Toggle fast"
@@ -1941,7 +2080,7 @@ msgstr "Увімкнути виÑотний рух"
#: src/gui/guiKeyChangeMenu.cpp
msgid "press key"
-msgstr "виберіть"
+msgstr "натиÑніть клавішу"
#: src/gui/guiPasswordChange.cpp
msgid "Change"
@@ -1949,7 +2088,7 @@ msgstr "Змінити"
#: src/gui/guiPasswordChange.cpp
msgid "Confirm Password"
-msgstr "Підтвердити новий пароль"
+msgstr "Підтвердіть пароль"
#: src/gui/guiPasswordChange.cpp
msgid "New Password"
@@ -1968,8 +2107,9 @@ msgid "Muted"
msgstr "Звук вимкнено"
#: src/gui/guiVolumeChange.cpp
-msgid "Sound Volume: "
-msgstr "ГучніÑть звуку: "
+#, c-format
+msgid "Sound Volume: %d%%"
+msgstr "ГучніÑть звуку: %d%%"
#. ~ Imperative, as in "Enter/type in text".
#. Don't forget the space.
@@ -1995,14 +2135,14 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"(Android) Use virtual joystick to trigger \"aux\" button.\n"
-"If enabled, virtual joystick will also tap \"aux\" button when out of main "
+"(Android) Use virtual joystick to trigger \"Aux1\" button.\n"
+"If enabled, virtual joystick will also tap \"Aux1\" button when out of main "
"circle."
msgstr ""
-"(Android) ВикориÑтовувати віртуальний джойÑтик Ð´Ð»Ñ Ð°ÐºÑ‚Ð¸Ð²Ð°Ñ†Ñ–Ñ— кнопки \"aux"
-"\".\n"
-"Якщо увімкнено, віртуальний джойÑтик також натиÑне \"aux\", коли поза межами "
-"головного кола."
+"(Android) ВикориÑтовувати віртуальний джойÑтик Ð´Ð»Ñ Ð°ÐºÑ‚Ð¸Ð²Ð°Ñ†Ñ–Ñ— кнопки \"Aux1\"."
+"\n"
+"Якщо ввімкнено, віртуальний джойÑтик також натиÑне \"Aux1\", коли поза "
+"межами головного кола."
#: src/settings_translation_file.cpp
msgid ""
@@ -2072,7 +2212,7 @@ msgstr "2D шум що розміщує долини та руÑла річок.
#: src/settings_translation_file.cpp
msgid "3D clouds"
-msgstr "Об'ємні хмари"
+msgstr "Обʼємні хмари"
#: src/settings_translation_file.cpp
msgid "3D mode"
@@ -2178,7 +2318,7 @@ msgstr "ÐбÑолютний ліміт Ð²Ñ–Ð´Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ Ð±Ð»Ð¾ÐºÑ–Ð² з
#: src/settings_translation_file.cpp
msgid "Acceleration in air"
-msgstr "ПриÑÐºÐ¾Ñ€ÐµÐ½Ð½Ñ Ñƒ повітрі"
+msgstr "ПриÑÐºÐ¾Ñ€ÐµÐ½Ð½Ñ Ð² повітрі"
#: src/settings_translation_file.cpp
msgid "Acceleration of gravity, in nodes per second per second."
@@ -2212,13 +2352,19 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Adds particles when digging a node."
-msgstr ""
+msgstr "Додавати чаÑточки при копанні блока."
#: src/settings_translation_file.cpp
msgid ""
"Adjust dpi configuration to your screen (non X11/Android only) e.g. for 4k "
"screens."
msgstr ""
+"Ðалаштувати dpi на вашому екрані (тільки не X11/Android), напр. Ð´Ð»Ñ 4k-"
+"екранів."
+
+#: src/settings_translation_file.cpp
+msgid "Adjust the detected display density, used for scaling UI elements."
+msgstr ""
#: src/settings_translation_file.cpp
#, c-format
@@ -2229,6 +2375,13 @@ msgid ""
"Value = 2.0 (can be higher depending on 'mgv7_np_floatland', always test\n"
"to be sure) creates a solid floatland layer."
msgstr ""
+"Ðалаштувати щільніÑть плавучого шару.\n"
+"Збільшуйте значеннÑ, щоб збільшити щільніÑть. Може бути позитивним або "
+"негативним.\n"
+"Ð—Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ = 0.0: 50% від обÑÑгу плавучого оÑтрова.\n"
+"Ð—Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ = 2.0 (можна збільшувати залежно від 'mgv7_np_floatland', завжди "
+"перевірÑйте,\n"
+"щоб бути певними) Ñтворює твердий шар плавучої землі."
#: src/settings_translation_file.cpp
msgid "Advanced"
@@ -2242,10 +2395,15 @@ msgid ""
"This only has significant effect on daylight and artificial\n"
"light, it has very little effect on natural night light."
msgstr ""
+"Змінює криву Ñвітла заÑтоÑовуючи до неї 'гамма-корекцію'.\n"
+"Більше Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ñ€Ð¾Ð±Ð¸Ñ‚ÑŒ Ñередній Ñ– нижчий рівень ÑÑкравоÑті оÑвітленнÑ.\n"
+"Ð—Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ '1.0' залишає криву Ñвітла незмінною.\n"
+"Це впливає лише на денне Ñ– штучне Ñвітло,\n"
+"воно мало впливає на природне нічне Ñвітло."
#: src/settings_translation_file.cpp
msgid "Always fly and fast"
-msgstr ""
+msgstr "Завжди літає і швидко"
#: src/settings_translation_file.cpp
msgid "Ambient occlusion gamma"
@@ -2253,7 +2411,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Amount of messages a player may send per 10 seconds."
-msgstr ""
+msgstr "К-Ñть повідомлень, Ñкі гравець може надіÑлати протÑгом 10 Ñекунд."
#: src/settings_translation_file.cpp
msgid "Amplifies the valleys."
@@ -2273,29 +2431,31 @@ msgstr "ÐнонÑувати Ñервер в цей перелік ÑерверÑ
#: src/settings_translation_file.cpp
msgid "Append item name"
-msgstr ""
+msgstr "Додавати назви предметів"
#: src/settings_translation_file.cpp
msgid "Append item name to tooltip."
-msgstr ""
+msgstr "Додавати назви предметів до підказок."
#: src/settings_translation_file.cpp
msgid "Apple trees noise"
-msgstr ""
+msgstr "Шум Ñблунь"
#: src/settings_translation_file.cpp
msgid "Arm inertia"
-msgstr ""
+msgstr "Ð†Ð½ÐµÑ€Ñ†Ñ–Ñ Ñ€ÑƒÐºÐ¸"
#: src/settings_translation_file.cpp
msgid ""
"Arm inertia, gives a more realistic movement of\n"
"the arm when the camera moves."
msgstr ""
+"Ð†Ð½ÐµÑ€Ñ†Ñ–Ñ Ñ€ÑƒÐºÐ¸ забезпечує реаліÑтичніші рухи\n"
+"під Ñ‡Ð°Ñ Ñ€ÑƒÑ…Ñƒ камери."
#: src/settings_translation_file.cpp
msgid "Ask to reconnect after crash"
-msgstr ""
+msgstr "Запитувати про Ð¿ÐµÑ€ÐµÐ·Ê¼Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð¿Ñ–Ð´ Ñ‡Ð°Ñ Ð·Ð±Ð¾ÑŽ"
#: src/settings_translation_file.cpp
msgid ""
@@ -2313,17 +2473,16 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Automatic forward key"
msgstr "Клавіша автоматичного руху вперед"
#: src/settings_translation_file.cpp
msgid "Automatically jump up single-node obstacles."
-msgstr ""
+msgstr "Ðвтоматично Ñтрибати на блок вище."
#: src/settings_translation_file.cpp
msgid "Automatically report to the serverlist."
-msgstr ""
+msgstr "Ðвтоматично звітувати у ÑпиÑок Ñерверів."
#: src/settings_translation_file.cpp
msgid "Autosave screen size"
@@ -2331,15 +2490,23 @@ msgstr "Зберігати розмір вікна"
#: src/settings_translation_file.cpp
msgid "Autoscaling mode"
-msgstr ""
+msgstr "Режим автомаÑштабуваннÑ"
+
+#: src/settings_translation_file.cpp
+msgid "Aux1 key"
+msgstr "Клавіша Aux1"
+
+#: src/settings_translation_file.cpp
+msgid "Aux1 key for climbing/descending"
+msgstr "Клавіша Aux1 Ð´Ð»Ñ Ð¿Ñ–Ð´Ð½Ñ–Ð¼Ð°Ð½Ð½Ñ/ÑпуÑку"
#: src/settings_translation_file.cpp
msgid "Backward key"
-msgstr "Ðазад"
+msgstr "Клавіша Ðазад"
#: src/settings_translation_file.cpp
msgid "Base ground level"
-msgstr ""
+msgstr "Базовий рівень землі"
#: src/settings_translation_file.cpp
msgid "Base terrain height."
@@ -2347,7 +2514,7 @@ msgstr "ВиÑота оÑновної поверхні."
#: src/settings_translation_file.cpp
msgid "Basic"
-msgstr ""
+msgstr "ОÑнови"
#: src/settings_translation_file.cpp
msgid "Basic privileges"
@@ -2355,11 +2522,11 @@ msgstr "Стандартні права"
#: src/settings_translation_file.cpp
msgid "Beach noise"
-msgstr ""
+msgstr "Шум плÑжу"
#: src/settings_translation_file.cpp
msgid "Beach noise threshold"
-msgstr ""
+msgstr "Поріг плÑжного шуму"
#: src/settings_translation_file.cpp
msgid "Bilinear filtering"
@@ -2375,11 +2542,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Biome noise"
-msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid "Bits per pixel (aka color depth) in fullscreen mode."
-msgstr ""
+msgstr "Шум біому"
#: src/settings_translation_file.cpp
msgid "Block send optimize distance"
@@ -2387,20 +2550,19 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Bold and italic font path"
-msgstr ""
+msgstr "ШлÑÑ… до жирного Ñ– курÑивного шрифту"
#: src/settings_translation_file.cpp
msgid "Bold and italic monospace font path"
-msgstr ""
+msgstr "ШлÑÑ… до жирного Ñ– курÑивного моноширного шрифту"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Bold font path"
-msgstr "ШлÑÑ… до шрифту"
+msgstr "ШлÑÑ… до жирного шрифту"
#: src/settings_translation_file.cpp
msgid "Bold monospace font path"
-msgstr ""
+msgstr "ШлÑÑ… до жирного моноширного шрифту"
#: src/settings_translation_file.cpp
msgid "Build inside player"
@@ -2432,35 +2594,35 @@ msgstr "Контроль Ð¾Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ ÐºÐ°Ð¼ÐµÑ€Ð¸"
#: src/settings_translation_file.cpp
msgid "Cave noise"
-msgstr ""
+msgstr "Шум печери"
#: src/settings_translation_file.cpp
msgid "Cave noise #1"
-msgstr ""
+msgstr "Шум печери #1"
#: src/settings_translation_file.cpp
msgid "Cave noise #2"
-msgstr ""
+msgstr "Шум печери #2"
#: src/settings_translation_file.cpp
msgid "Cave width"
-msgstr ""
+msgstr "Ширина печери"
#: src/settings_translation_file.cpp
msgid "Cave1 noise"
-msgstr ""
+msgstr "Шум Ð´Ð»Ñ ÐŸÐµÑ‡ÐµÑ€Ð°1"
#: src/settings_translation_file.cpp
msgid "Cave2 noise"
-msgstr ""
+msgstr "Шум Ð´Ð»Ñ ÐŸÐµÑ‡ÐµÑ€Ð°2"
#: src/settings_translation_file.cpp
msgid "Cavern limit"
-msgstr ""
+msgstr "ÐžÐ±Ð¼ÐµÐ¶ÐµÐ½Ð½Ñ ÐºÐ°Ð²ÐµÑ€Ð½Ð¸"
#: src/settings_translation_file.cpp
msgid "Cavern noise"
-msgstr ""
+msgstr "Шум каверни"
#: src/settings_translation_file.cpp
msgid "Cavern taper"
@@ -2472,7 +2634,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Cavern upper limit"
-msgstr ""
+msgstr "Верхнє Ð¾Ð±Ð¼ÐµÐ¶ÐµÐ½Ð½Ñ ÐºÐ°Ð²ÐµÑ€Ð½Ð¸"
#: src/settings_translation_file.cpp
msgid ""
@@ -2481,25 +2643,32 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Chat command time message threshold"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Chat commands"
+msgstr "Команди чату"
+
+#: src/settings_translation_file.cpp
msgid "Chat font size"
msgstr "Розмір шрифту чату"
#: src/settings_translation_file.cpp
msgid "Chat key"
-msgstr "Чат"
+msgstr "Клавіша чату"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Chat log level"
-msgstr "Чат"
+msgstr "Рівень журналу чату"
#: src/settings_translation_file.cpp
msgid "Chat message count limit"
-msgstr ""
+msgstr "ÐžÐ±Ð¼ÐµÐ¶ÐµÐ½Ð½Ñ Ðº-Ñті повідомлень чату"
#: src/settings_translation_file.cpp
msgid "Chat message format"
-msgstr ""
+msgstr "Формат повідомлень чату"
#: src/settings_translation_file.cpp
msgid "Chat message kick threshold"
@@ -2507,15 +2676,15 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Chat message max length"
-msgstr ""
+msgstr "МакÑимальна довжина Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ñ‡Ð°Ñ‚Ñƒ"
#: src/settings_translation_file.cpp
msgid "Chat toggle key"
-msgstr "Чат"
+msgstr "Клавіша ÑƒÐ²Ñ–Ð¼ÐºÐ½ÐµÐ½Ð½Ñ Ñ‡Ð°Ñ‚Ñƒ"
#: src/settings_translation_file.cpp
-msgid "Chatcommands"
-msgstr "Команди чату"
+msgid "Chat weblinks"
+msgstr "ВебпоÑÐ¸Ð»Ð°Ð½Ð½Ñ Ñ‡Ð°Ñ‚Ñƒ"
#: src/settings_translation_file.cpp
msgid "Chunk size"
@@ -2527,13 +2696,19 @@ msgstr "Кінорежим"
#: src/settings_translation_file.cpp
msgid "Cinematic mode key"
-msgstr "Кінорежим"
+msgstr "Клавіша кінорежиму"
#: src/settings_translation_file.cpp
msgid "Clean transparent textures"
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Clickable weblinks (middle-click or Ctrl+left-click) enabled in chat console "
+"output."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Client"
msgstr "Клієнт"
@@ -2578,6 +2753,10 @@ msgid "Colored fog"
msgstr "Кольоровий туман"
#: src/settings_translation_file.cpp
+msgid "Colored shadows"
+msgstr "Кольорові тіні"
+
+#: src/settings_translation_file.cpp
msgid ""
"Comma-separated list of flags to hide in the content repository.\n"
"\"nonfree\" can be used to hide packages which do not qualify as 'free "
@@ -2602,7 +2781,23 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Command key"
-msgstr "Команда"
+msgstr "Клавіша команди"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Compression level to use when saving mapblocks to disk.\n"
+"-1 - use default compression level\n"
+"0 - least compression, fastest\n"
+"9 - best compression, slowest"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Compression level to use when sending mapblocks to the client.\n"
+"-1 - use default compression level\n"
+"0 - least compression, fastest\n"
+"9 - best compression, slowest"
+msgstr ""
#: src/settings_translation_file.cpp
msgid "Connect glass"
@@ -2637,9 +2832,8 @@ msgid "ContentDB Max Concurrent Downloads"
msgstr ""
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "ContentDB URL"
-msgstr "Додатки"
+msgstr "URL ContentDB"
#: src/settings_translation_file.cpp
msgid "Continuous forward"
@@ -2683,7 +2877,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Crash message"
-msgstr ""
+msgstr "ÐŸÐ¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð·Ð±Ð¾ÑŽ"
#: src/settings_translation_file.cpp
msgid "Creative"
@@ -2696,7 +2890,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"Crosshair alpha (opaqueness, between 0 and 255).\n"
-"Also controls the object crosshair color"
+"This also applies to the object crosshair."
msgstr ""
#: src/settings_translation_file.cpp
@@ -2719,7 +2913,7 @@ msgstr "ПораненнÑ"
#: src/settings_translation_file.cpp
msgid "Debug info toggle key"
-msgstr ""
+msgstr "Клавіша ÑƒÐ²Ñ–Ð¼ÐºÐ½ÐµÐ½Ð½Ñ Ð´Ð°Ð½Ð¸Ñ… налагодженнÑ"
#: src/settings_translation_file.cpp
msgid "Debug log file size threshold"
@@ -2727,11 +2921,11 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Debug log level"
-msgstr ""
+msgstr "Рівень журналу зневадженнÑ"
#: src/settings_translation_file.cpp
msgid "Dec. volume key"
-msgstr ""
+msgstr "Клавіша зменш. гучноÑті"
#: src/settings_translation_file.cpp
msgid "Decrease this to increase liquid resistance to movement."
@@ -2767,17 +2961,17 @@ msgstr "Стандартні права"
#: src/settings_translation_file.cpp
msgid "Default report format"
-msgstr ""
+msgstr "Типовий формат звіту"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Default stack size"
-msgstr "Стандартна гра"
+msgstr "Типовий розмір Ñтеку"
#: src/settings_translation_file.cpp
msgid ""
-"Default timeout for cURL, stated in milliseconds.\n"
-"Only has an effect if compiled with cURL."
+"Define shadow filtering quality.\n"
+"This simulates the soft shadows effect by applying a PCF or Poisson disk\n"
+"but also uses more resources."
msgstr ""
#: src/settings_translation_file.cpp
@@ -2879,9 +3073,8 @@ msgid "Desynchronize block animation"
msgstr ""
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Dig key"
-msgstr "Права клавіша"
+msgstr "Клавіша Копати"
#: src/settings_translation_file.cpp
msgid "Digging particles"
@@ -2896,6 +3089,10 @@ msgid "Disallow empty passwords"
msgstr "Заборонити порожні паролі"
#: src/settings_translation_file.cpp
+msgid "Display Density Scaling Factor"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Domain name of server, to be displayed in the serverlist."
msgstr "Доменне ім'Ñ Ñервера, Ñке буде показуватиÑÑ Ñƒ ÑпиÑку Ñерверів."
@@ -2909,7 +3106,7 @@ msgstr "Подвійне натиÑÐºÐ°Ð½Ð½Ñ ÐºÐ½Ð¾Ð¿ÐºÐ¸ Ñтрибка вми
#: src/settings_translation_file.cpp
msgid "Drop item key"
-msgstr "Кнопка Ð´Ð»Ñ Ð²Ð¸ÐºÐ¸Ð´Ð°Ð½Ð½Ñ Ð¿Ñ€ÐµÐ´Ð¼ÐµÑ‚Ñ–Ð²"
+msgstr "Клавіша Ð²Ð¸ÐºÐ¸Ð´Ð°Ð½Ð½Ñ Ð¿Ñ€ÐµÐ´Ð¼ÐµÑ‚Ñ–Ð²"
#: src/settings_translation_file.cpp
msgid "Dump the mapgen debug information."
@@ -2940,14 +3137,27 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Enable console window"
+msgid ""
+"Enable Poisson disk filtering.\n"
+"On true uses Poisson disk to make \"soft shadows\". Otherwise uses PCF "
+"filtering."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Enable creative mode for all players"
+msgid ""
+"Enable colored shadows.\n"
+"On true translucent nodes cast colored shadows. This is expensive."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Enable console window"
+msgstr "Дозволити вікно конÑолі"
+
+#: src/settings_translation_file.cpp
+msgid "Enable creative mode for all players"
+msgstr "Дозволити режим творчоÑті Ð´Ð»Ñ Ð²ÑÑ–Ñ… гравців"
+
+#: src/settings_translation_file.cpp
msgid "Enable joysticks"
msgstr "Увімкнути джойÑтики"
@@ -3029,7 +3239,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Enables animation of inventory items."
-msgstr ""
+msgstr "Дозволити анімацію предметів інвентарÑ."
#: src/settings_translation_file.cpp
msgid "Enables caching of facedir rotated meshes."
@@ -3048,6 +3258,12 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Enables tradeoffs that reduce CPU load or increase rendering performance\n"
+"at the expense of minor visual glitches that do not impact game playability."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Engine profiling data print interval"
msgstr ""
@@ -3066,9 +3282,8 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "FPS when unfocused or paused"
-msgstr "МакÑимум FPS при паузі."
+msgstr "FPS, коли призупинено або поза фокуÑом"
#: src/settings_translation_file.cpp
msgid "FSAA"
@@ -3083,25 +3298,12 @@ msgid "Fall bobbing factor"
msgstr ""
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Fallback font path"
-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 ""
+msgstr "ШлÑÑ… до резервного шрифту"
#: src/settings_translation_file.cpp
msgid "Fast key"
-msgstr ""
+msgstr "Швидка клавіша"
#: src/settings_translation_file.cpp
msgid "Fast mode acceleration"
@@ -3109,15 +3311,15 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Fast mode speed"
-msgstr ""
+msgstr "ШвидкіÑть швидкого режиму"
#: src/settings_translation_file.cpp
msgid "Fast movement"
-msgstr ""
+msgstr "Швидкі рухи"
#: src/settings_translation_file.cpp
msgid ""
-"Fast movement (via the \"special\" key).\n"
+"Fast movement (via the \"Aux1\" key).\n"
"This requires the \"fast\" privilege on the server."
msgstr ""
@@ -3151,9 +3353,9 @@ 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."
+"which PNG optimizers usually discard, often resulting in dark or\n"
+"light edges to transparent textures. Apply a filter to clean that up\n"
+"at texture load time. This is automatically enabled if mipmapping is enabled."
msgstr ""
#: src/settings_translation_file.cpp
@@ -3206,11 +3408,11 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Fly key"
-msgstr "Кнопка Ð´Ð»Ñ Ð¿Ð¾Ð»ÑŒÐ¾Ñ‚Ñƒ"
+msgstr "Клавіша польоту"
#: src/settings_translation_file.cpp
msgid "Flying"
-msgstr ""
+msgstr "Політ"
#: src/settings_translation_file.cpp
msgid "Fog"
@@ -3222,38 +3424,38 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Fog toggle key"
-msgstr ""
+msgstr "Клавіша Ð²Ð²Ñ–Ð¼ÐºÐ½ÐµÐ½Ð½Ñ Ñ‚ÑƒÐ¼Ð°Ð½Ñƒ"
#: src/settings_translation_file.cpp
msgid "Font bold by default"
-msgstr ""
+msgstr "Типовий грубий шрифт"
#: src/settings_translation_file.cpp
msgid "Font italic by default"
-msgstr ""
+msgstr "Типовий похилий шрифт"
#: src/settings_translation_file.cpp
msgid "Font shadow"
-msgstr ""
+msgstr "Тінь шрифту"
#: src/settings_translation_file.cpp
msgid "Font shadow alpha"
-msgstr ""
+msgstr "Ðльфа-тінь шрифту"
#: src/settings_translation_file.cpp
msgid "Font size"
msgstr "Розмір шрифту"
#: src/settings_translation_file.cpp
-msgid "Font size of the default font in point (pt)."
+msgid "Font size divisible by"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Font size of the fallback font in point (pt)."
+msgid "Font size of the default font where 1 unit = 1 pixel at 96 DPI"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Font size of the monospace font in point (pt)."
+msgid "Font size of the monospace font where 1 unit = 1 pixel at 96 DPI"
msgstr ""
#: src/settings_translation_file.cpp
@@ -3264,6 +3466,17 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"For pixel-style fonts that do not scale well, this ensures that font sizes "
+"used\n"
+"with this font will always be divisible by this value, in pixels. For "
+"instance,\n"
+"a pixel font 16 pixels tall should have this set to 16, so it will only ever "
+"be\n"
+"sized 16, 32, 48, etc., so a mod requesting a size of 25 will get 32."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Format of player chat messages. The following strings are valid "
"placeholders:\n"
"@name, @message, @timestamp (optional)"
@@ -3271,7 +3484,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Format of screenshots."
-msgstr ""
+msgstr "Формат знімків екрана."
#: src/settings_translation_file.cpp
msgid "Formspec Default Background Color"
@@ -3307,7 +3520,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Forward key"
-msgstr "Вперед"
+msgstr "Клавіша Вперед"
#: src/settings_translation_file.cpp
msgid "Fourth of 4 2D noises that together define hill/mountain range height."
@@ -3322,10 +3535,6 @@ msgid "Fraction of the visible distance at which fog starts to be rendered"
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)."
@@ -3350,10 +3559,6 @@ msgid "Full screen"
msgstr "Повний екран"
#: src/settings_translation_file.cpp
-msgid "Full screen BPP"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Fullscreen mode."
msgstr "Повноекранний режим."
@@ -3377,7 +3582,7 @@ msgstr ""
msgid ""
"Global map generation attributes.\n"
"In Mapgen v6 the 'decorations' flag controls all decorations except trees\n"
-"and junglegrass, in all other mapgens this flag controls all decorations."
+"and jungle grass, in all other mapgens this flag controls all decorations."
msgstr ""
#: src/settings_translation_file.cpp
@@ -3418,7 +3623,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "HUD toggle key"
-msgstr ""
+msgstr "Клавіша Ð²Ð²Ñ–Ð¼ÐºÐ½ÐµÐ½Ð½Ñ HUD"
#: src/settings_translation_file.cpp
msgid ""
@@ -3446,7 +3651,8 @@ msgid "Heat noise"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Height component of the initial window size."
+msgid ""
+"Height component of the initial window size. Ignored in fullscreen mode."
msgstr ""
#: src/settings_translation_file.cpp
@@ -3458,10 +3664,6 @@ msgid "Height select noise"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "High-precision FPU"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Hill steepness"
msgstr ""
@@ -3517,135 +3719,135 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Hotbar slot 1 key"
-msgstr ""
+msgstr "Клавіша Ñлоту 1 швидкої панелі"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 10 key"
-msgstr ""
+msgstr "Клавіша Ñлоту 10 швидкої панелі"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 11 key"
-msgstr ""
+msgstr "Клавіша Ñлоту 11 швидкої панелі"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 12 key"
-msgstr ""
+msgstr "Клавіша Ñлоту 12 швидкої панелі"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 13 key"
-msgstr ""
+msgstr "Клавіша Ñлоту 13 швидкої панелі"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 14 key"
-msgstr ""
+msgstr "Клавіша Ñлоту 14 швидкої панелі"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 15 key"
-msgstr ""
+msgstr "Клавіша Ñлоту 15 швидкої панелі"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 16 key"
-msgstr ""
+msgstr "Клавіша Ñлоту 16 швидкої панелі"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 17 key"
-msgstr ""
+msgstr "Клавіша Ñлоту 17 швидкої панелі"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 18 key"
-msgstr ""
+msgstr "Клавіша Ñлоту 18 швидкої панелі"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 19 key"
-msgstr ""
+msgstr "Клавіша Ñлоту 19 швидкої панелі"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 2 key"
-msgstr ""
+msgstr "Клавіша Ñлоту 2 швидкої панелі"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 20 key"
-msgstr ""
+msgstr "Клавіша Ñлоту 20 швидкої панелі"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 21 key"
-msgstr ""
+msgstr "Клавіша Ñлоту 21 швидкої панелі"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 22 key"
-msgstr ""
+msgstr "Клавіша Ñлоту 22 швидкої панелі"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 23 key"
-msgstr ""
+msgstr "Клавіша Ñлоту 23 швидкої панелі"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 24 key"
-msgstr ""
+msgstr "Клавіша Ñлоту 24 швидкої панелі"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 25 key"
-msgstr ""
+msgstr "Клавіша Ñлоту 25 швидкої панелі"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 26 key"
-msgstr ""
+msgstr "Клавіша Ñлоту 26 швидкої панелі"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 27 key"
-msgstr ""
+msgstr "Клавіша Ñлоту 27 швидкої панелі"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 28 key"
-msgstr ""
+msgstr "Клавіша Ñлоту 28 швидкої панелі"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 29 key"
-msgstr ""
+msgstr "Клавіша Ñлоту 29 швидкої панелі"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 3 key"
-msgstr ""
+msgstr "Клавіша Ñлоту 3 швидкої панелі"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 30 key"
-msgstr ""
+msgstr "Клавіша Ñлоту 30 швидкої панелі"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 31 key"
-msgstr ""
+msgstr "Клавіша Ñлоту 31 швидкої панелі"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 32 key"
-msgstr ""
+msgstr "Клавіша Ñлоту 32 швидкої панелі"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 4 key"
-msgstr ""
+msgstr "Клавіша Ñлоту 4 швидкої панелі"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 5 key"
-msgstr ""
+msgstr "Клавіша Ñлоту 5 швидкої панелі"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 6 key"
-msgstr ""
+msgstr "Клавіша Ñлоту 6 швидкої панелі"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 7 key"
-msgstr ""
+msgstr "Клавіша Ñлоту 7 швидкої панелі"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 8 key"
-msgstr ""
+msgstr "Клавіша Ñлоту 8 швидкої панелі"
#: src/settings_translation_file.cpp
msgid "Hotbar slot 9 key"
-msgstr ""
+msgstr "Клавіша Ñлоту 9 швидкої панелі"
#: src/settings_translation_file.cpp
msgid "How deep to make rivers."
-msgstr ""
+msgstr "Як глибоко робити ріки."
#: src/settings_translation_file.cpp
msgid ""
@@ -3662,7 +3864,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "How wide to make rivers."
-msgstr ""
+msgstr "Як широко робити ріки."
#: src/settings_translation_file.cpp
msgid "Humidity blend noise"
@@ -3692,8 +3894,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"If disabled, \"special\" key is used to fly fast if both fly and fast mode "
-"are\n"
+"If disabled, \"Aux1\" key is used to fly fast if both fly and fast mode are\n"
"enabled."
msgstr ""
@@ -3715,8 +3916,8 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"If enabled, \"special\" key instead of \"sneak\" key is used for climbing "
-"down and\n"
+"If enabled, \"Aux1\" key instead of \"Sneak\" key is used for climbing down "
+"and\n"
"descending."
msgstr ""
@@ -3762,6 +3963,12 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"If the execution of a chat command takes longer than this specified time in\n"
+"seconds, add the time information to the chat command message"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"If the file size of debug.txt exceeds the number of megabytes specified in\n"
"this setting when it is opened, the file is moved to debug.txt.1,\n"
"deleting an older debug.txt.1 if it exists.\n"
@@ -3774,7 +3981,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Ignore world errors"
-msgstr ""
+msgstr "Ігнорувати помилки Ñвіту"
#: src/settings_translation_file.cpp
msgid "In-Game"
@@ -3794,7 +4001,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Inc. volume key"
-msgstr "Збільшити гучніÑть"
+msgstr "Клавіша збільш. гучноÑті"
#: src/settings_translation_file.cpp
msgid "Initial vertical speed when jumping, in nodes per second."
@@ -3807,7 +4014,7 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Instrument chatcommands on registration."
+msgid "Instrument chat commands on registration."
msgstr ""
#: src/settings_translation_file.cpp
@@ -3844,28 +4051,27 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Inventory items animations"
-msgstr ""
+msgstr "ÐÐ½Ñ–Ð¼Ð°Ñ†Ñ–Ñ Ð¿Ñ€ÐµÐ´Ð¼ÐµÑ‚Ñ–Ð² інвентарÑ"
#: src/settings_translation_file.cpp
msgid "Inventory key"
-msgstr "Інвентар"
+msgstr "Клавіша інвентарÑ"
#: src/settings_translation_file.cpp
msgid "Invert mouse"
-msgstr ""
+msgstr "Інвертувати мишку"
#: src/settings_translation_file.cpp
msgid "Invert vertical mouse movement."
-msgstr ""
+msgstr "Інвертувати вертикальні рухи мишки."
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Italic font path"
-msgstr "ШлÑÑ… до шрифту"
+msgstr "ШлÑÑ… до похилого шрифту"
#: src/settings_translation_file.cpp
msgid "Italic monospace font path"
-msgstr ""
+msgstr "ШлÑÑ… до похилого моноширного шрифту"
#: src/settings_translation_file.cpp
msgid "Item entity TTL"
@@ -3873,7 +4079,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Iterations"
-msgstr ""
+msgstr "Ітерації"
#: src/settings_translation_file.cpp
msgid ""
@@ -3885,14 +4091,14 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Joystick ID"
-msgstr ""
+msgstr "ІД джойÑтика"
#: src/settings_translation_file.cpp
msgid "Joystick button repetition interval"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Joystick deadzone"
+msgid "Joystick dead zone"
msgstr ""
#: src/settings_translation_file.cpp
@@ -3901,7 +4107,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Joystick type"
-msgstr ""
+msgstr "Тип джойÑтика"
#: src/settings_translation_file.cpp
msgid ""
@@ -3954,11 +4160,11 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Jump key"
-msgstr "Стрибок"
+msgstr "Клавіша Стрибок"
#: src/settings_translation_file.cpp
msgid "Jumping speed"
-msgstr ""
+msgstr "ШвидкіÑть ÑтрибаннÑ"
#: src/settings_translation_file.cpp
msgid ""
@@ -3966,6 +4172,9 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
+"Клавіша Ð´Ð»Ñ Ð·Ð¼ÐµÐ½ÑˆÐµÐ½Ð½Ñ Ð²Ð¸Ð´Ð¸Ð¼Ð¾Ñті.\n"
+"ДивітьÑÑ http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
msgid ""
@@ -3973,6 +4182,9 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
+"Клавіша Ð´Ð»Ñ Ð·Ð¼ÐµÐ½ÑˆÐµÐ½Ð½Ñ Ð³ÑƒÑ‡Ð½Ð¾Ñті.\n"
+"ДивітьÑÑ http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
msgid ""
@@ -3980,6 +4192,9 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
+"Клавіша Ð´Ð»Ñ ÐºÐ¾Ð¿Ð°Ð½Ð½Ñ.\n"
+"ДивітьÑÑ http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
msgid ""
@@ -3987,6 +4202,9 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
+"Клавіша Ð´Ð»Ñ ÐºÐ¸Ð´Ð°Ð½Ð½Ñ Ð¿Ð¾Ñ‚Ð¾Ñ‡Ð½Ð¾Ð³Ð¾ предмета.\n"
+"ДивітьÑÑ http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
msgid ""
@@ -3994,6 +4212,9 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
+"Клавіша Ð´Ð»Ñ Ð·Ð±Ñ–Ð»ÑŒÑˆÐµÐ½Ð½Ñ Ð²Ð¸Ð´Ð¸Ð¼Ð¾Ñті.\n"
+"ДивітьÑÑ http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
msgid ""
@@ -4001,6 +4222,9 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
+"Клавіша Ð´Ð»Ñ Ð·Ð±Ñ–Ð»ÑŒÑˆÐµÐ½Ð½Ñ Ð³ÑƒÑ‡Ð½Ð¾Ñті.\n"
+"ДивітьÑÑ http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
msgid ""
@@ -4008,6 +4232,9 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
+"Клавіша Ð´Ð»Ñ ÑтрибаннÑ.\n"
+"ДивітьÑÑ http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
msgid ""
@@ -4015,6 +4242,9 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
+"Клавіша Ð´Ð»Ñ ÑˆÐ²Ð¸Ð´ÐºÐ¾Ð³Ð¾ руху у швидкому режимі.\n"
+"ДивітьÑÑ http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
msgid ""
@@ -4030,6 +4260,9 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
+"Клавіша Ð´Ð»Ñ Ñ€ÑƒÑ…Ñƒ Ð³Ñ€Ð°Ð²Ñ†Ñ Ð²Ð¿ÐµÑ€ÐµÐ´.\n"
+"ДивітьÑÑ http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
msgid ""
@@ -4037,6 +4270,9 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
+"Клавіша Ð´Ð»Ñ Ñ€ÑƒÑ…Ñƒ Ð³Ñ€Ð°Ð²Ñ†Ñ Ð²Ð»Ñ–Ð²Ð¾.\n"
+"ДивітьÑÑ http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
msgid ""
@@ -4044,6 +4280,9 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
+"Клавіша Ð´Ð»Ñ Ñ€ÑƒÑ…Ñƒ Ð³Ñ€Ð°Ð²Ñ†Ñ Ð²Ð¿Ñ€Ð°Ð²Ð¾.\n"
+"ДивітьÑÑ http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
msgid ""
@@ -4051,6 +4290,9 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
+"Клавіша Ð´Ð»Ñ Ð¿Ñ€Ð¸Ð³Ð»ÑƒÑˆÐµÐ½Ð½Ñ Ð³Ñ€Ð¸.\n"
+"ДивітьÑÑ http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
msgid ""
@@ -4058,6 +4300,9 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
+"Клавіша Ð´Ð»Ñ Ð²Ñ–Ð´ÐºÑ€Ð¸Ð²Ð°Ð½Ð½Ñ Ð²Ñ–ÐºÐ½Ð° чату Ð´Ð»Ñ Ð²Ð²ÐµÐ´ÐµÐ½Ð½Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´.\n"
+"ДивітьÑÑ http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
msgid ""
@@ -4065,6 +4310,9 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
+"Клавіша Ð´Ð»Ñ Ð²Ñ–Ð´ÐºÑ€Ð¸Ð²Ð°Ð½Ð½Ñ Ð²Ñ–ÐºÐ½Ð° чату Ð´Ð»Ñ Ð½Ð°Ð±Ð¸Ñ€Ð°Ð½Ð½Ñ Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ð¸Ñ… команд.\n"
+"ДивітьÑÑ http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
msgid ""
@@ -4072,6 +4320,9 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
+"Клавіша Ð´Ð»Ñ Ð²Ñ–Ð´ÐºÑ€Ð¸Ð²Ð°Ð½Ð½Ñ Ð²Ñ–ÐºÐ½Ð° чату.\n"
+"ДивітьÑÑ http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
msgid ""
@@ -4079,6 +4330,9 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
+"Клавіша Ð´Ð»Ñ Ð²Ñ–Ð´ÐºÑ€Ð¸Ð²Ð°Ð½Ð½Ñ Ñ–Ð½Ð²ÐµÐ½Ñ‚Ð°Ñ€Ñ.\n"
+"ДивітьÑÑ http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
msgid ""
@@ -4086,6 +4340,9 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
+"Клавіша поклаÑти.\n"
+"ДивітьÑÑ http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
msgid ""
@@ -4093,6 +4350,9 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
+"Клавіша Ð´Ð»Ñ Ð²Ð¸Ð±Ð¾Ñ€Ñƒ 11-го Ñлоту швидкої панелі.\n"
+"ДивітьÑÑ http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
msgid ""
@@ -4100,6 +4360,9 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
+"Клавіша Ð´Ð»Ñ Ð²Ð¸Ð±Ð¾Ñ€Ñƒ 12-го Ñлоту швидкої панелі.\n"
+"ДивітьÑÑ http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
msgid ""
@@ -4107,6 +4370,9 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
+"Клавіша Ð´Ð»Ñ Ð²Ð¸Ð±Ð¾Ñ€Ñƒ 13-го Ñлоту швидкої панелі.\n"
+"ДивітьÑÑ http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
msgid ""
@@ -4114,6 +4380,9 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
+"Клавіша Ð´Ð»Ñ Ð²Ð¸Ð±Ð¾Ñ€Ñƒ 14-го Ñлоту швидкої панелі.\n"
+"ДивітьÑÑ http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
msgid ""
@@ -4121,6 +4390,9 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
+"Клавіша Ð´Ð»Ñ Ð²Ð¸Ð±Ð¾Ñ€Ñƒ 15-го Ñлоту швидкої панелі.\n"
+"ДивітьÑÑ http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
msgid ""
@@ -4128,6 +4400,9 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
+"Клавіша Ð´Ð»Ñ Ð²Ð¸Ð±Ð¾Ñ€Ñƒ 16-го Ñлоту швидкої панелі.\n"
+"ДивітьÑÑ http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
msgid ""
@@ -4135,6 +4410,9 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
+"Клавіша Ð´Ð»Ñ Ð²Ð¸Ð±Ð¾Ñ€Ñƒ 17-го Ñлоту швидкої панелі.\n"
+"ДивітьÑÑ http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
msgid ""
@@ -4142,6 +4420,9 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
+"Клавіша Ð´Ð»Ñ Ð²Ð¸Ð±Ð¾Ñ€Ñƒ 18-го Ñлоту швидкої панелі.\n"
+"ДивітьÑÑ http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
msgid ""
@@ -4149,6 +4430,9 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
+"Клавіша Ð´Ð»Ñ Ð²Ð¸Ð±Ð¾Ñ€Ñƒ 19-го Ñлоту швидкої панелі.\n"
+"ДивітьÑÑ http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
msgid ""
@@ -4156,6 +4440,9 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
+"Клавіша Ð´Ð»Ñ Ð²Ð¸Ð±Ð¾Ñ€Ñƒ 20-го Ñлоту швидкої панелі.\n"
+"ДивітьÑÑ http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
msgid ""
@@ -4431,6 +4718,9 @@ msgid ""
"See http://irrlicht.sourceforge.net/docu/namespaceirr."
"html#a54da2a0e231901735e3da1b0edf72eb3"
msgstr ""
+"Клавіша Ð²Ð²Ñ–Ð¼ÐºÐ½ÐµÐ½Ð½Ñ Ð²Ñ–Ð´Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ HUD.\n"
+"ДивітьÑÑ http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
#: src/settings_translation_file.cpp
msgid ""
@@ -4642,7 +4932,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Main menu script"
-msgstr ""
+msgstr "Скрипт оÑновного меню"
#: src/settings_translation_file.cpp
msgid ""
@@ -4650,10 +4940,6 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Makes DirectX work with LuaJIT. Disable if it causes troubles."
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Makes all liquids opaque"
msgstr ""
@@ -4667,7 +4953,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Map directory"
-msgstr "Тека мапи"
+msgstr "Каталог мапи"
#: src/settings_translation_file.cpp
msgid "Map generation attributes specific to Mapgen Carpathian."
@@ -4725,6 +5011,10 @@ msgid "Map save interval"
msgstr "Інтервал Ð·Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ð½Ñ Ð¼Ð°Ð¿Ð¸"
#: src/settings_translation_file.cpp
+msgid "Map shadows update frames"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Mapblock limit"
msgstr ""
@@ -4761,9 +5051,8 @@ msgid "Mapgen Fractal"
msgstr "Генератор Ñвіту: фрактальний"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Mapgen Fractal specific flags"
-msgstr "Генератор Ñвіту: фрактальний"
+msgstr "Мітки Ð´Ð»Ñ Ñ„Ñ€Ð°ÐºÑ‚Ð°Ð»ÑŒÐ½Ð¾Ð³Ð¾ ґенератора Ñвіту"
#: src/settings_translation_file.cpp
msgid "Mapgen V5"
@@ -4798,14 +5087,12 @@ msgid "Mapgen Valleys specific flags"
msgstr ""
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Mapgen debug"
-msgstr "ÐÐ°Ð»Ð°Ð³Ð¾Ð´Ð¶ÐµÐ½Ð½Ñ Ð³ÐµÐ½ÐµÑ€Ð°Ñ†Ñ–Ñ— Ñвіту"
+msgstr "ÐÐ°Ð»Ð°Ð³Ð¾Ð´Ð¶ÐµÐ½Ð½Ñ Ò‘ÐµÐ½ÐµÑ€Ð°Ñ‚Ð¾Ñ€Ð° Ñвіту"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Mapgen name"
-msgstr "Ðазва генерації Ñвіту"
+msgstr "Ðазва ґенератора Ñвіту"
#: src/settings_translation_file.cpp
msgid "Max block generate distance"
@@ -4816,28 +5103,28 @@ msgid "Max block send distance"
msgstr ""
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Max liquids processed per step."
-msgstr "МакÑимальна кількіÑть рідин, оброблених на крок."
+msgstr "Ðайбільша кількіÑть рідини на крок."
#: src/settings_translation_file.cpp
msgid "Max. clearobjects extra blocks"
msgstr ""
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Max. packets per iteration"
-msgstr "МакÑимальна кількіÑть пакетів за одну ітерацію"
+msgstr "Ðайбільша кількіÑть пакетів на ітерацію"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Maximum FPS"
-msgstr "МакÑимальна кількіÑть кадрів в Ñекунду (FPS)"
+msgstr "Ðайбільша кількіÑть FPS"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Maximum FPS when the window is not focused, or when the game is paused."
-msgstr "МакÑимум FPS при паузі."
+msgstr "Ðайбільша кількіÑть FPS, коли вікно поза фокуÑом або гру призупинено."
+
+#: src/settings_translation_file.cpp
+msgid "Maximum distance to render shadows."
+msgstr ""
#: src/settings_translation_file.cpp
msgid "Maximum forceloaded blocks"
@@ -4922,7 +5209,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Maximum objects per block"
-msgstr ""
+msgstr "Ðайбільша кількіÑть обʼєктів на блок"
#: src/settings_translation_file.cpp
msgid ""
@@ -4945,12 +5232,20 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Maximum time in ms a file download (e.g. a mod download) may take."
+msgid ""
+"Maximum time a file download (e.g. a mod download) may take, stated in "
+"milliseconds."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum time an interactive request (e.g. server list fetch) may take, "
+"stated in milliseconds."
msgstr ""
#: src/settings_translation_file.cpp
msgid "Maximum users"
-msgstr "МакÑимум кориÑтувачів"
+msgstr "Ðайбільше кориÑтувачів"
#: src/settings_translation_file.cpp
msgid "Menus"
@@ -4962,7 +5257,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Message of the day"
-msgstr ""
+msgstr "ÐŸÐ¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð´Ð½Ñ"
#: src/settings_translation_file.cpp
msgid "Message of the day displayed to players connecting."
@@ -4982,7 +5277,7 @@ msgstr "Мінімапа"
#: src/settings_translation_file.cpp
msgid "Minimap key"
-msgstr ""
+msgstr "Клавіша мінімапи"
#: src/settings_translation_file.cpp
msgid "Minimap scan height"
@@ -5009,15 +5304,19 @@ msgid "Mod channels"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Modifies the size of the hudbar elements."
-msgstr ""
+msgid "Modifies the size of the HUD elements."
+msgstr "Змінює розмір елементів HUD."
#: src/settings_translation_file.cpp
msgid "Monospace font path"
-msgstr ""
+msgstr "ШлÑÑ… до моноширного шрифту"
#: src/settings_translation_file.cpp
msgid "Monospace font size"
+msgstr "Розмір моноширного шрифту"
+
+#: src/settings_translation_file.cpp
+msgid "Monospace font size divisible by"
msgstr ""
#: src/settings_translation_file.cpp
@@ -5060,7 +5359,7 @@ msgstr "Вимкнути звук"
#: src/settings_translation_file.cpp
msgid "Mute sound"
-msgstr ""
+msgstr "Заглушити звук"
#: src/settings_translation_file.cpp
msgid ""
@@ -5118,7 +5417,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Noises"
-msgstr ""
+msgstr "Шуми"
#: src/settings_translation_file.cpp
msgid "Number of emerge threads"
@@ -5141,13 +5440,13 @@ 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"
+"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 "Online Content Repository"
-msgstr ""
+msgstr "Репозиторій мережевого вміÑту"
#: src/settings_translation_file.cpp
msgid "Opaque liquids"
@@ -5160,21 +5459,18 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Opaqueness (alpha) of the shadow behind the fallback font, between 0 and 255."
-msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid ""
"Open the pause menu when the window's focus is lost. Does not pause if a "
"formspec is\n"
"open."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Optional override for chat weblink color."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid ""
-"Path of the fallback font.\n"
-"If “freetype†setting is enabled: Must be a TrueType font.\n"
-"If “freetype†setting is disabled: Must be a bitmap or XML vectors font.\n"
+"Path of the fallback font. Must be a TrueType font.\n"
"This font will be used for certain languages or if the default font is "
"unavailable."
msgstr ""
@@ -5197,17 +5493,13 @@ msgstr "ШлÑÑ… до теки з текÑтурами. Ð’ÑÑ– текÑтури
#: src/settings_translation_file.cpp
msgid ""
-"Path to the default font.\n"
-"If “freetype†setting is enabled: Must be a TrueType font.\n"
-"If “freetype†setting is disabled: Must be a bitmap or XML vectors font.\n"
+"Path to the default font. Must be a TrueType font.\n"
"The fallback font will be used if the font cannot be loaded."
msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Path to the monospace font.\n"
-"If “freetype†setting is enabled: Must be a TrueType font.\n"
-"If “freetype†setting is disabled: Must be a bitmap or XML vectors font.\n"
+"Path to the monospace font. Must be a TrueType font.\n"
"This font is used for e.g. the console and profiler screen."
msgstr ""
@@ -5228,18 +5520,16 @@ msgid "Physics"
msgstr "Фізика"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Pitch move key"
-msgstr "Кнопка польоту"
+msgstr "Клавіша зміни виÑоти"
#: src/settings_translation_file.cpp
msgid "Pitch move mode"
msgstr ""
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Place key"
-msgstr "Кнопка Ð´Ð»Ñ Ð¿Ð¾Ð»ÑŒÐ¾Ñ‚Ñƒ"
+msgstr "Клавіша поклаÑти"
#: src/settings_translation_file.cpp
msgid "Place repetition interval"
@@ -5253,7 +5543,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Player name"
-msgstr "Ім'Ñ Ð³Ñ€Ð°Ð²Ñ†Ñ"
+msgstr "Ð†Ð¼Ê¼Ñ Ð³Ñ€Ð°Ð²Ñ†Ñ"
#: src/settings_translation_file.cpp
msgid "Player transfer distance"
@@ -5264,6 +5554,10 @@ msgid "Player versus player"
msgstr "Гравець проти гравцÑ"
#: src/settings_translation_file.cpp
+msgid "Poisson filtering"
+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."
@@ -5308,9 +5602,9 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"Prometheus listener address.\n"
-"If minetest is compiled with ENABLE_PROMETHEUS option enabled,\n"
+"If Minetest is compiled with ENABLE_PROMETHEUS option enabled,\n"
"enable metrics listener for Prometheus on that address.\n"
-"Metrics can be fetch on http://127.0.0.1:30000/metrics"
+"Metrics can be fetched on http://127.0.0.1:30000/metrics"
msgstr ""
#: src/settings_translation_file.cpp
@@ -5338,20 +5632,19 @@ msgstr "Вибір діапазону"
#: src/settings_translation_file.cpp
msgid "Recent Chat Messages"
-msgstr ""
+msgstr "ОÑтанні Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ñ‡Ð°Ñ‚Ñƒ"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Regular font path"
-msgstr "ШлÑÑ… Ð´Ð»Ñ Ð·Ð²Ñ–Ñ‚Ñƒ"
+msgstr "ШлÑÑ… до звичайного шрифту"
#: src/settings_translation_file.cpp
msgid "Remote media"
-msgstr ""
+msgstr "Віддалені реÑурÑи"
#: src/settings_translation_file.cpp
msgid "Remote port"
-msgstr ""
+msgstr "Віддалений порт"
#: src/settings_translation_file.cpp
msgid ""
@@ -5402,9 +5695,8 @@ msgid "Right key"
msgstr "Права клавіша"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "River channel depth"
-msgstr "Глибина великих печер"
+msgstr "Глибина каналу річки"
#: src/settings_translation_file.cpp
msgid "River channel width"
@@ -5412,7 +5704,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "River depth"
-msgstr ""
+msgstr "Глибина річки"
#: src/settings_translation_file.cpp
msgid "River noise"
@@ -5420,7 +5712,7 @@ msgstr "Річковий шум"
#: src/settings_translation_file.cpp
msgid "River size"
-msgstr ""
+msgstr "Розмір річки"
#: src/settings_translation_file.cpp
msgid "River valley width"
@@ -5481,7 +5773,7 @@ msgstr "Ширина екрана"
#: src/settings_translation_file.cpp
msgid "Screenshot folder"
-msgstr ""
+msgstr "Тека Ð´Ð»Ñ Ð·Ð½Ñ–Ð¼ÐºÑ–Ð² екрана"
#: src/settings_translation_file.cpp
msgid "Screenshot format"
@@ -5555,7 +5847,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Server / Singleplayer"
-msgstr "Сервер / Гра"
+msgstr "Сервер / Одиночна гра"
#: src/settings_translation_file.cpp
msgid "Server URL"
@@ -5583,11 +5875,11 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Serverlist URL"
-msgstr "ÐдреÑа ÑпиÑку публічних Ñерверів"
+msgstr "ÐдреÑа ÑпиÑку Ñерверів"
#: src/settings_translation_file.cpp
msgid "Serverlist file"
-msgstr "Файл ÑпиÑку публічних Ñерверів"
+msgstr "Файл ÑпиÑку Ñерверів"
#: src/settings_translation_file.cpp
msgid ""
@@ -5603,6 +5895,32 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Set the shadow strength.\n"
+"Lower value means lighter shadows, higher value means darker shadows."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set the soft shadow radius size.\n"
+"Lower values mean sharper shadows, bigger values mean softer shadows.\n"
+"Minimum value: 1.0; maximum value: 10.0"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set the tilt of Sun/Moon orbit in degrees.\n"
+"Value of 0 means no tilt / vertical orbit.\n"
+"Minimum value: 0.0; maximum value: 60.0"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set to true to enable Shadow Mapping.\n"
+"Requires shaders to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Set to true to enable waving leaves.\n"
"Requires shaders to be enabled."
msgstr ""
@@ -5620,6 +5938,13 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Sets shadow texture quality to 32 bits.\n"
+"On false, 16 bits texture will be used.\n"
+"This can cause much more artifacts in the shadow."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Shader path"
msgstr "ШлÑÑ… до шейдерів"
@@ -5632,15 +5957,29 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Shadow filter quality"
+msgstr "ЯкіÑть фільтру тіні"
+
+#: src/settings_translation_file.cpp
+msgid "Shadow map max distance in nodes to render shadows"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Shadow map texture in 32 bits"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Shadow map texture size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid ""
"Shadow offset (in pixels) of the default font. If 0, then shadow will not be "
"drawn."
msgstr ""
#: src/settings_translation_file.cpp
-msgid ""
-"Shadow offset (in pixels) of the fallback font. If 0, then shadow will not "
-"be drawn."
+msgid "Shadow strength"
msgstr ""
#: src/settings_translation_file.cpp
@@ -5649,28 +5988,27 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Show debug info"
-msgstr ""
+msgstr "Показати дані зневадженнÑ"
#: src/settings_translation_file.cpp
msgid "Show entity selection boxes"
msgstr ""
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Show entity selection boxes\n"
"A restart is required after changing this."
msgstr ""
-"Вказати мову. Залиште порожнім, щоб викориÑтовувати ÑиÑтемну мову.\n"
-"Потрібен перезапуÑк піÑÐ»Ñ Ñ†Ñ–Ñ”Ñ— зміни."
+"Показати поле Ð²Ð¸Ð´Ñ–Ð»ÐµÐ½Ð½Ñ Ð¾Ð±Ê¼Ñ”ÐºÑ‚Ñ–Ð²\n"
+"ПіÑÐ»Ñ Ð·Ð¼Ñ–Ð½Ð¸ потрібно перезапуÑтити."
#: src/settings_translation_file.cpp
-msgid "Show nametag backgrounds by default"
+msgid "Show name tag backgrounds by default"
msgstr ""
#: src/settings_translation_file.cpp
msgid "Shutdown message"
-msgstr ""
+msgstr "Вимкнути повідомленнÑ"
#: src/settings_translation_file.cpp
msgid ""
@@ -5690,6 +6028,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Sky Body Orbit Tilt"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Slice w"
msgstr ""
@@ -5744,16 +6086,12 @@ msgid "Sneaking speed, in nodes per second."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Sound"
-msgstr "Звук"
-
-#: src/settings_translation_file.cpp
-msgid "Special key"
-msgstr "Спеціальна клавіша"
+msgid "Soft shadow radius"
+msgstr "Ð Ð°Ð´Ñ–ÑƒÑ Ð»ÐµÐ³ÐºÐ¸Ñ… тіней"
#: src/settings_translation_file.cpp
-msgid "Special key for climbing/descending"
-msgstr "Спеціальна клавіша Ð´Ð»Ñ Ñ€ÑƒÑ…Ñƒ вгору/вниз"
+msgid "Sound"
+msgstr "Звук"
#: src/settings_translation_file.cpp
msgid ""
@@ -5772,6 +6110,14 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Spread a complete update of shadow map over given amount of frames.\n"
+"Higher values might make shadows laggy, lower values\n"
+"will consume more resources.\n"
+"Minimum value: 1; maximum value: 16"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Spread of light curve boost range.\n"
"Controls the width of the range to be boosted.\n"
"Standard deviation of the light curve boost Gaussian."
@@ -5878,6 +6224,13 @@ msgstr "ШлÑÑ… до текÑтури"
#: src/settings_translation_file.cpp
msgid ""
+"Texture size to render the shadow map on.\n"
+"This must be a power of two.\n"
+"Bigger numbers create better shadows but it is also more expensive."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Textures on a node may be aligned either to the node or to the world.\n"
"The former mode suits better things like machines, furniture, etc., while\n"
"the latter makes stairs and microblocks fit surroundings better.\n"
@@ -5891,8 +6244,8 @@ msgid "The URL for the content repository"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "The deadzone of the joystick"
-msgstr ""
+msgid "The dead zone of the joystick"
+msgstr "Мертва зона джойÑтика"
#: src/settings_translation_file.cpp
msgid ""
@@ -5949,7 +6302,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"The rendering back-end for Irrlicht.\n"
+"The rendering back-end.\n"
"A restart is required after changing this.\n"
"Note: On Android, stick with OGLES1 if unsure! App may fail to start "
"otherwise.\n"
@@ -5960,7 +6313,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"The sensitivity of the joystick axes for moving the\n"
-"ingame view frustum around."
+"in-game view frustum around."
msgstr ""
#: src/settings_translation_file.cpp
@@ -5998,7 +6351,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "The type of joystick"
-msgstr ""
+msgstr "Тип джойÑтика"
#: src/settings_translation_file.cpp
msgid ""
@@ -6023,11 +6376,11 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Time send interval"
-msgstr ""
+msgstr "Період надÑÐ¸Ð»Ð°Ð½Ð½Ñ Ñ‡Ð°Ñу"
#: src/settings_translation_file.cpp
msgid "Time speed"
-msgstr ""
+msgstr "ШвидкіÑть чаÑу"
#: src/settings_translation_file.cpp
msgid "Timeout for client to remove unused map data from memory."
@@ -6054,10 +6407,14 @@ msgid "Touch screen threshold"
msgstr "Межа чутливоÑті дотику"
#: src/settings_translation_file.cpp
-msgid "Trees noise"
+msgid "Tradeoffs for performance"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Trees noise"
+msgstr "Шум дерев"
+
+#: src/settings_translation_file.cpp
msgid "Trilinear filtering"
msgstr "Трилінійна фільтраціÑ"
@@ -6123,7 +6480,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Use mip mapping to scale textures. May slightly increase performance,\n"
+"Use mipmapping to scale textures. May slightly increase performance,\n"
"especially when using a high resolution texture pack.\n"
"Gamma correct downscaling is not supported."
msgstr ""
@@ -6236,18 +6593,20 @@ msgid "Viewing range"
msgstr "ВидиміÑть"
#: src/settings_translation_file.cpp
-msgid "Virtual joystick triggers aux button"
+msgid "Virtual joystick triggers Aux1 button"
msgstr ""
#: src/settings_translation_file.cpp
msgid "Volume"
-msgstr "ГучніÑть звуку"
+msgstr "ГучніÑть"
#: src/settings_translation_file.cpp
msgid ""
"Volume of all sounds.\n"
"Requires the sound system to be enabled."
msgstr ""
+"ГучніÑть уÑÑ–Ñ… звуків.\n"
+"Вимагає ÑƒÐ²Ñ–Ð¼ÐºÐ½ÐµÐ½Ð½Ñ ÑиÑтеми звуку."
#: src/settings_translation_file.cpp
msgid ""
@@ -6260,11 +6619,11 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Walking and flying speed, in nodes per second."
-msgstr ""
+msgstr "ШвидкіÑть ходьби Ñ– польоту, в блоках за Ñекунду."
#: src/settings_translation_file.cpp
msgid "Walking speed"
-msgstr ""
+msgstr "ШвидкіÑть ходьби"
#: src/settings_translation_file.cpp
msgid "Walking, flying and climbing speed in fast mode, in nodes per second."
@@ -6272,7 +6631,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Water level"
-msgstr ""
+msgstr "Рівень води"
#: src/settings_translation_file.cpp
msgid "Water surface level of the world."
@@ -6280,35 +6639,35 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Waving Nodes"
-msgstr "Блоки, що коливаютьÑÑ"
+msgstr "ÐšÐ¾Ð»Ð¸Ð²Ð°Ð½Ð½Ñ Ð±Ð»Ð¾ÐºÑ–Ð²"
#: src/settings_translation_file.cpp
msgid "Waving leaves"
-msgstr "ЛиÑÑ‚Ñ, що коливаєтьÑÑ"
+msgstr "ÐšÐ¾Ð»Ð¸Ð²Ð°Ð½Ð½Ñ Ð»Ð¸ÑÑ‚Ñ"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Waving liquids"
-msgstr "ХвилÑÑті Рідини"
+msgstr "ХвилÑÑті рідини"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Waving liquids wave height"
-msgstr "Коливати воду"
+msgstr "ВиÑота хвилі хвилÑÑтих рідин"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Waving liquids wave speed"
-msgstr "Коливати лиÑÑ‚Ñ"
+msgstr "ШвидкіÑть хвилі хвилÑÑтих рідин"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Waving liquids wavelength"
-msgstr "Коливати воду"
+msgstr "Довжина хвилі хвилÑÑтих рідин"
#: src/settings_translation_file.cpp
msgid "Waving plants"
-msgstr ""
+msgstr "ÐšÐ¾Ð»Ð¸Ð²Ð°Ð½Ð½Ñ Ñ€Ð¾Ñлин"
+
+#: src/settings_translation_file.cpp
+msgid "Weblink color"
+msgstr "Колір вебпоÑиланнÑ"
#: src/settings_translation_file.cpp
msgid ""
@@ -6331,23 +6690,15 @@ msgid ""
"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.\n"
+"memory. Powers of 2 are recommended. This setting is ONLY applied if\n"
+"bilinear/trilinear/anisotropic filtering is enabled.\n"
"This is also used as the base node texture size for world-aligned\n"
"texture autoscaling."
msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Whether FreeType fonts are used, requires FreeType support to be compiled "
-"in.\n"
-"If disabled, bitmap and XML vectors fonts are used instead."
-msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid ""
-"Whether nametag backgrounds should be shown by default.\n"
+"Whether name tag backgrounds should be shown by default.\n"
"Mods may still set a background."
msgstr ""
@@ -6389,7 +6740,7 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Width component of the initial window size."
+msgid "Width component of the initial window size. Ignored in fullscreen mode."
msgstr ""
#: src/settings_translation_file.cpp
@@ -6474,34 +6825,22 @@ msgid "Y-level of seabed."
msgstr "Y-Рівень морÑького дна."
#: src/settings_translation_file.cpp
-msgid ""
-"ZLib compression level to use when saving mapblocks to disk.\n"
-"-1 - Zlib's default compression level\n"
-"0 - no compresson, fastest\n"
-"9 - best compression, slowest\n"
-"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)"
-msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid ""
-"ZLib compression level to use when sending mapblocks to the client.\n"
-"-1 - Zlib's default compression level\n"
-"0 - no compresson, fastest\n"
-"9 - best compression, slowest\n"
-"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)"
+msgid "cURL file download timeout"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "cURL file download timeout"
+msgid "cURL interactive timeout"
msgstr ""
#: src/settings_translation_file.cpp
msgid "cURL parallel limit"
msgstr ""
-#: src/settings_translation_file.cpp
-msgid "cURL timeout"
-msgstr ""
+#~ msgid "- Creative Mode: "
+#~ msgstr "- ТворчіÑть: "
+
+#~ msgid "- Damage: "
+#~ msgstr "- УшкодженнÑ: "
#~ msgid ""
#~ "0 = parallax occlusion with slope information (faster).\n"
@@ -6510,12 +6849,18 @@ msgstr ""
#~ "0 = Ñ‚ÐµÑ…Ð½Ð¾Ð»Ð¾Ð³Ñ–Ñ \"parallax occlusion\" з інформацією про криві (швидше).\n"
#~ "1 = Ñ‚ÐµÑ…Ð½Ð¾Ð»Ð¾Ð³Ñ–Ñ \"relief mapping\" (повільніше, більш акуратніше)."
+#~ msgid "Address / Port"
+#~ msgstr "ÐдреÑа / Порт"
+
#~ msgid "Are you sure to reset your singleplayer world?"
#~ msgstr "Ви впевнені, що бажаєте Ñкинути Ñвій Ñвіт одиночної гри?"
#~ msgid "Back"
#~ msgstr "Ðазад"
+#~ msgid "Bits per pixel (aka color depth) in fullscreen mode."
+#~ msgstr "Бітів на пікÑель (глибина кольору) в повноекранному режимі."
+
#~ msgid "Bump Mapping"
#~ msgstr "Бамп-маппінг"
@@ -6531,6 +6876,12 @@ msgstr ""
#~ msgid "Content Store"
#~ msgstr "Додатки"
+#~ msgid "Credits"
+#~ msgstr "ПодÑки"
+
+#~ msgid "Damage enabled"
+#~ msgstr "Ð£ÑˆÐºÐ¾Ð´Ð¶ÐµÐ½Ð½Ñ Ð²Ð²Ñ–Ð¼ÐºÐ½ÐµÐ½Ð¾"
+
#~ msgid "Downloading and installing $1, please wait..."
#~ msgstr "Ð—Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ñ– вÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ $1, зачекайте..."
@@ -6546,6 +6897,9 @@ msgstr ""
#~ msgid "IPv6 support."
#~ msgstr "Підтримка IPv6."
+#~ msgid "Install: file: \"$1\""
+#~ msgstr "Ð’ÑтановленнÑ: файл: \"$1\""
+
#~ msgid "Lava depth"
#~ msgstr "Глибина лави"
@@ -6567,6 +6921,9 @@ msgstr ""
#~ msgid "Minimap in surface mode, Zoom x4"
#~ msgstr "Мінімапа в режимі поверхнÑ. ÐÐ°Ð±Ð»Ð¸Ð¶ÐµÐ½Ð½Ñ Ñ…4"
+#~ msgid "Name / Password"
+#~ msgstr "Ім'Ñ / Пароль"
+
#~ msgid "Name/Password"
#~ msgstr "Ім'Ñ/Пароль"
@@ -6585,15 +6942,27 @@ msgstr ""
#~ msgid "Parallax occlusion scale"
#~ msgstr "Ступінь паралакÑової оклюзії"
+#~ msgid "PvP enabled"
+#~ msgstr "Бої увімкнено"
+
#~ msgid "Reset singleplayer world"
#~ msgstr "Скинути Ñвіт одиночної гри"
#~ msgid "Select Package File:"
#~ msgstr "Виберіть файл пакунку:"
+#~ msgid "Special"
+#~ msgstr "Спеціальна"
+
+#~ msgid "Special key"
+#~ msgstr "Спеціальна клавіша"
+
#~ msgid "Start Singleplayer"
#~ msgstr "Почати одиночну гру"
+#~ msgid "To enable shaders the OpenGL driver needs to be used."
+#~ msgstr "Ð”Ð»Ñ Ñ‚Ð¾Ð³Ð¾, щоб увімкнути шейдери, потрібно мати драйвер OpenGL."
+
#~ msgid "Toggle Cinematic"
#~ msgstr "Кінематографічний режим"
@@ -6602,3 +6971,10 @@ msgstr ""
#~ msgid "Yes"
#~ msgstr "Так"
+
+#, fuzzy
+#~ msgid "You died."
+#~ msgstr "Ви загинули"
+
+#~ msgid "needs_fallback_font"
+#~ msgstr "no"
diff --git a/po/vi/minetest.po b/po/vi/minetest.po
index 1238015ec..4f6f41eb0 100644
--- a/po/vi/minetest.po
+++ b/po/vi/minetest.po
@@ -2,9 +2,9 @@ msgid ""
msgstr ""
"Project-Id-Version: Vietnamese (Minetest)\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-02-23 19:03+0100\n"
-"PO-Revision-Date: 2020-06-13 21:08+0000\n"
-"Last-Translator: darkcloudcat <leducthn@gmail.com>\n"
+"POT-Creation-Date: 2022-01-25 23:19+0100\n"
+"PO-Revision-Date: 2022-01-04 06:53+0000\n"
+"Last-Translator: IAmOlive <nhathungtran2011@gmail.com>\n"
"Language-Team: Vietnamese <https://hosted.weblate.org/projects/minetest/"
"minetest/vi/>\n"
"Language: vi\n"
@@ -12,7 +12,43 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
-"X-Generator: Weblate 4.1-dev\n"
+"X-Generator: Weblate 4.10.1\n"
+
+#: builtin/client/chatcommands.lua
+msgid "Clear the out chat queue"
+msgstr "Xóa hàng đợi trò chuyện"
+
+#: builtin/client/chatcommands.lua
+msgid "Empty command."
+msgstr "Lệnh trống."
+
+#: builtin/client/chatcommands.lua
+msgid "Exit to main menu"
+msgstr "Thoát ra màn hình chính"
+
+#: builtin/client/chatcommands.lua
+msgid "Invalid command: "
+msgstr "Lệnh không hợp lệ: "
+
+#: builtin/client/chatcommands.lua
+msgid "Issued command: "
+msgstr "Lệnh đã dùng: "
+
+#: builtin/client/chatcommands.lua
+msgid "List online players"
+msgstr "Liệt kê những ngưá»i Ä‘ang chÆ¡i trá»±c tuyến"
+
+#: builtin/client/chatcommands.lua
+msgid "Online players: "
+msgstr "Những ngưá»i Ä‘ang chÆ¡i trá»±c tuyến: "
+
+#: builtin/client/chatcommands.lua
+msgid "The out chat queue is now empty."
+msgstr "Hàng đợi trò chuyện đã trống."
+
+#: builtin/client/chatcommands.lua
+msgid "This command is disabled by server."
+msgstr "Lệnh này đã bị cấm trong máy chủ này."
#: builtin/client/death_formspec.lua src/client/game.cpp
msgid "Respawn"
@@ -20,23 +56,54 @@ msgstr "Hồi sinh"
#: builtin/client/death_formspec.lua src/client/game.cpp
msgid "You died"
-msgstr "Bạn đã chết"
+msgstr "Bạn đã bị chết"
+
+#: builtin/common/chatcommands.lua
+msgid "Available commands:"
+msgstr "Lệnh có sẵn:"
+
+#: builtin/common/chatcommands.lua
+msgid "Available commands: "
+msgstr "Lệnh có sẵn: "
+
+#: builtin/common/chatcommands.lua
+msgid "Command not available: "
+msgstr "Lệnh không có sẵn: "
+
+#: builtin/common/chatcommands.lua
+msgid "Get help for commands"
+msgstr "Trợ giúp vỠlệnh"
+
+#: builtin/common/chatcommands.lua
+msgid ""
+"Use '.help <cmd>' to get more information, or '.help all' to list everything."
+msgstr ""
+"Dùng '.help <câu lệnh>' để có thêm thông tin vỠmột câu lệnh hoặc dùng '."
+"help all' để xem danh sách vỠnhững câu lệnh có sẵn."
+
+#: builtin/common/chatcommands.lua
+msgid "[all | <cmd>]"
+msgstr "[all | <câu lệnh>]"
#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp
msgid "OK"
-msgstr ""
+msgstr "OK"
+
+#: builtin/fstk/ui.lua
+msgid "<none available>"
+msgstr "<không có sẵn>"
#: builtin/fstk/ui.lua
msgid "An error occurred in a Lua script:"
-msgstr "Äã xảy ra lá»—i trong tập lệnh Lua:"
+msgstr "Một lỗi đã xảy ra trong tập lệnh Lua:"
#: builtin/fstk/ui.lua
msgid "An error occurred:"
-msgstr "Xảy ra lỗi:"
+msgstr "Äã xảy ra lá»—i:"
#: builtin/fstk/ui.lua
msgid "Main menu"
-msgstr "Trình đơn chính"
+msgstr "Màn hình chính"
#: builtin/fstk/ui.lua
msgid "Reconnect"
@@ -48,7 +115,7 @@ msgstr "Máy chủ đã yêu cầu kết nối lại:"
#: builtin/mainmenu/common.lua
msgid "Protocol version mismatch. "
-msgstr "Phiên bản giao thức không khớp "
+msgstr "Phiên bản giao thức không khớp. "
#: builtin/mainmenu/common.lua
msgid "Server enforces protocol version $1. "
@@ -88,11 +155,11 @@ msgstr "Vô hiệu hóa tất cả"
#: builtin/mainmenu/dlg_config_world.lua
msgid "Disable modpack"
-msgstr "Vô hiệu hóa modpack"
+msgstr "Vô hiệu hóa gói mod"
#: builtin/mainmenu/dlg_config_world.lua
msgid "Enable all"
-msgstr "Cho phép tất cả"
+msgstr "Kích hoạt tất cả"
#: builtin/mainmenu/dlg_config_world.lua
msgid "Enable modpack"
@@ -103,43 +170,40 @@ msgid ""
"Failed to enable mod \"$1\" as it contains disallowed characters. Only "
"characters [a-z0-9_] are allowed."
msgstr ""
-"Không thể bật mod \"$ 1\" vì nó chứa các ký tự không được phép. Chỉ cho phép "
-"các ký tự [a-z0-9_]."
+"Không thể bật mod \"$1\" vì nó chứa các ký tự không được phép. Chỉ cho phép "
+"các ký tự Latinh; chữ số và ký tự \"_\"."
#: builtin/mainmenu/dlg_config_world.lua
msgid "Find More Mods"
-msgstr ""
+msgstr "Tìm thêm mod"
#: builtin/mainmenu/dlg_config_world.lua
msgid "Mod:"
msgstr "Mod:"
#: builtin/mainmenu/dlg_config_world.lua
-#, fuzzy
msgid "No (optional) dependencies"
-msgstr "Phụ thuá»™c tùy chá»n:"
+msgstr "Không có phần phụ thuộc bắt buộc nào"
#: builtin/mainmenu/dlg_config_world.lua
msgid "No game description provided."
msgstr "Không có mô tả trò chơi được cung cấp."
#: builtin/mainmenu/dlg_config_world.lua
-#, fuzzy
msgid "No hard dependencies"
-msgstr "Phụ thuá»™c tùy chá»n:"
+msgstr "Không có phần phụ thuộc khó nào"
#: builtin/mainmenu/dlg_config_world.lua
msgid "No modpack description provided."
-msgstr "Không có mô tả modpack được cung cấp."
+msgstr "Không có mô tả mod được cung cấp."
#: builtin/mainmenu/dlg_config_world.lua
-#, fuzzy
msgid "No optional dependencies"
-msgstr "Phụ thuá»™c tùy chá»n:"
+msgstr "Không có phần phụ thuá»™c tùy chá»n nào"
#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_content.lua
msgid "Optional dependencies:"
-msgstr "Phụ thuá»™c tùy chá»n:"
+msgstr "Phần phụ thuá»™c tùy chá»n:"
#: builtin/mainmenu/dlg_config_world.lua
#: builtin/mainmenu/dlg_settings_advanced.lua src/gui/guiKeyChangeMenu.cpp
@@ -148,19 +212,19 @@ msgstr "Tiết kiệm"
#: builtin/mainmenu/dlg_config_world.lua
msgid "World:"
-msgstr "Thế giới"
+msgstr "Thế giới:"
#: builtin/mainmenu/dlg_config_world.lua
msgid "enabled"
-msgstr "kích hoạt"
+msgstr "đã kích hoạt"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "\"$1\" already exists. Would you like to overwrite it?"
-msgstr ""
+msgstr "Äã có \"$1\". Bạn có muốn ghi đè nó không?"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "$1 and $2 dependencies will be installed."
-msgstr ""
+msgstr "Phần phụ thuộc $1 và $2 sẽ được cài đặt."
#: builtin/mainmenu/dlg_contentstore.lua
msgid "$1 by $2"
@@ -171,19 +235,20 @@ msgid ""
"$1 downloading,\n"
"$2 queued"
msgstr ""
+"$1 đang cài đặt,\n"
+"$2 đã được xếp vào hàng đợi"
#: builtin/mainmenu/dlg_contentstore.lua
-#, fuzzy
msgid "$1 downloading..."
-msgstr "Äang tải..."
+msgstr "Äang tải xuống $1..."
#: builtin/mainmenu/dlg_contentstore.lua
msgid "$1 required dependencies could not be found."
-msgstr ""
+msgstr "Không thể tìm thấy phần phụ thuộc $1 (cần thiết)."
#: builtin/mainmenu/dlg_contentstore.lua
msgid "$1 will be installed, and $2 dependencies will be skipped."
-msgstr ""
+msgstr "$1 sẽ được cài, phần phụ thuộc $2 sẽ được bỠqua."
#: builtin/mainmenu/dlg_contentstore.lua
msgid "All packages"
@@ -191,28 +256,27 @@ msgstr "Tất cả các gói"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Already installed"
-msgstr ""
+msgstr "Äã được cài"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Back to Main Menu"
-msgstr ""
+msgstr "Trở vỠmàn hình chính"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Base Game:"
-msgstr ""
+msgstr "Trò chơi cơ bản:"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "ContentDB is not available when Minetest was compiled without cURL"
-msgstr ""
+msgstr "ContentDB không có sẵn khi Minetest được cài mà không có cURL"
#: builtin/mainmenu/dlg_contentstore.lua
-#, fuzzy
msgid "Downloading..."
-msgstr "Äang tải..."
+msgstr "Äang tải xuống..."
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Failed to download $1"
-msgstr ""
+msgstr "Không tải xuống được $1"
#: builtin/mainmenu/dlg_contentstore.lua
#: builtin/mainmenu/dlg_settings_advanced.lua
@@ -221,16 +285,19 @@ msgstr "Trò chơi"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Install"
-msgstr ""
+msgstr "Cài đặt"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Install $1"
-msgstr ""
+msgstr "Cài đặt $1"
#: builtin/mainmenu/dlg_contentstore.lua
-#, fuzzy
msgid "Install missing dependencies"
-msgstr "Phụ thuá»™c tùy chá»n:"
+msgstr "Cài phần phụ thuộc bị thiếu"
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "Install: Unsupported file type or broken archive"
+msgstr "Cài đặt: Loại tệp không được há»— trợ hoặc tệp lưu trữ bị há»ng"
#: builtin/mainmenu/dlg_contentstore.lua
#: builtin/mainmenu/dlg_settings_advanced.lua
@@ -239,143 +306,144 @@ msgstr "Mod"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "No packages could be retrieved"
-msgstr ""
+msgstr "Không nhận được gói nào"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "No results"
-msgstr ""
+msgstr "Không có kết quả"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "No updates"
-msgstr ""
+msgstr "Không có cập nhật mới"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Not found"
-msgstr ""
+msgstr "Không tìm thấy"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Overwrite"
-msgstr ""
+msgstr "Ghi đè"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Please check that the base game is correct."
-msgstr ""
+msgstr "Vui lòng kiểm tra xem trò chơi này có đúng không."
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Queued"
-msgstr ""
+msgstr "Äã xếp vào hàng đợi"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Texture packs"
-msgstr ""
+msgstr "Gói cấu hình khối"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Uninstall"
-msgstr ""
+msgstr "Gỡ cài đặt"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Update"
-msgstr ""
+msgstr "Cập nhật"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Update All [$1]"
-msgstr ""
+msgstr "Cập nhật tất cả [$1]"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "View more information in a web browser"
-msgstr ""
+msgstr "Xem thêm thông tin trên trình duyệt web của bạn"
#: builtin/mainmenu/dlg_create_world.lua
msgid "A world named \"$1\" already exists"
-msgstr ""
+msgstr "Thế giới \"$1\" đã tồn tại"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Additional terrain"
-msgstr ""
+msgstr "Äịa hình bổ sung"
#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
msgid "Altitude chill"
-msgstr ""
+msgstr "Äá»™ cao lạnh"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Altitude dry"
-msgstr ""
+msgstr "Äá»™ cao khô ráo"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Biome blending"
-msgstr ""
+msgstr "Các khu vá»±c sinh há»c Ä‘ang trá»™n lại vá»›i nhau"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Biomes"
-msgstr ""
+msgstr "Khu sinh há»c"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Caverns"
-msgstr ""
+msgstr "Hang động"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Caves"
-msgstr ""
+msgstr "Hang động"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Create"
-msgstr ""
+msgstr "Tạo"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Decorations"
-msgstr ""
+msgstr "Vật trang trí"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Download a game, such as Minetest Game, from minetest.net"
msgstr ""
+"Tải xuống một trò chơi, chẳng hạn như trò chơi Minetest, từ minetest.net"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Download one from minetest.net"
-msgstr ""
+msgstr "Tải xuống một trò chơi từ minetest.net"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Dungeons"
-msgstr ""
+msgstr "Ngục tối"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Flat terrain"
-msgstr ""
+msgstr "Äịa hình phẳng"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Floating landmasses in the sky"
-msgstr ""
+msgstr "Vùng đất lÆ¡ lá»­ng trên trá»i"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Floatlands (experimental)"
-msgstr ""
+msgstr "Vùng đất lơ lửng (đang trong thử nghiệm)"
#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
msgid "Game"
-msgstr ""
+msgstr "Trò chơi"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Generate non-fractal terrain: Oceans and underground"
-msgstr ""
+msgstr "Tạo địa hình không phân dạng: Äại dương và lòng đất"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Hills"
-msgstr ""
+msgstr "Äồi"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Humid rivers"
-msgstr ""
+msgstr "Sông ẩm ướt"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Increases humidity around rivers"
-msgstr ""
+msgstr "Tăng độ ẩm xung quanh sông"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Lakes"
-msgstr ""
+msgstr "Hồ nước"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Low humidity and high heat causes shallow or dry rivers"
-msgstr ""
+msgstr "Äá»™ ẩm thấp và nhiệt độ cao làm cho sông cạn hoặc khô"
#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
msgid "Mapgen"
@@ -383,43 +451,43 @@ msgstr ""
#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
msgid "Mapgen flags"
-msgstr ""
+msgstr "Cá» cá»§a Mapgen"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Mapgen-specific flags"
-msgstr ""
+msgstr "CỠcụ thể của Mapgen"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Mountains"
-msgstr ""
+msgstr "Núi"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Mud flow"
-msgstr ""
+msgstr "Suối bùn"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Network of tunnels and caves"
-msgstr ""
+msgstr "Mạng lưới đưá»ng hầm và hang động"
#: builtin/mainmenu/dlg_create_world.lua
msgid "No game selected"
-msgstr ""
+msgstr "Không có trò chÆ¡i nào được chá»n"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Reduces heat with altitude"
-msgstr ""
+msgstr "Giảm nhiệt theo độ cao"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Reduces humidity with altitude"
-msgstr ""
+msgstr "Giảm độ ẩm theo độ cao"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Rivers"
-msgstr ""
+msgstr "Sông"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Sea level rivers"
-msgstr ""
+msgstr "Sông theo mực nước biển"
#: builtin/mainmenu/dlg_create_world.lua
#: builtin/mainmenu/dlg_settings_advanced.lua
@@ -428,117 +496,121 @@ msgstr ""
#: builtin/mainmenu/dlg_create_world.lua
msgid "Smooth transition between biomes"
-msgstr ""
+msgstr "Chuyển đổi suôn sẻ giữa các khu sinh há»c"
#: builtin/mainmenu/dlg_create_world.lua
msgid ""
"Structures appearing on the terrain (no effect on trees and jungle grass "
"created by v6)"
msgstr ""
+"Các cấu trúc xuất hiện trên địa hình (không ảnh hưởng đến cây cối, cỠrừng "
+"và được tạo bởi v6)"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Structures appearing on the terrain, typically trees and plants"
-msgstr ""
+msgstr "Các cấu trúc xuất hiện trên địa hình, điển hình là cây cối và thực vật"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Temperate, Desert"
-msgstr ""
+msgstr "Ôn đới, sa mạc"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Temperate, Desert, Jungle"
-msgstr ""
+msgstr "Ôn đới, sa mạc, rừng rậm"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Temperate, Desert, Jungle, Tundra, Taiga"
-msgstr ""
+msgstr "Ôn đới, sa mạc, rừng rậm, đồng cá», rừng taiga"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Terrain surface erosion"
-msgstr ""
+msgstr "Xói mòn bỠmặt địa hình"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Trees and jungle grass"
-msgstr ""
+msgstr "Cây và cỠrừng"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Vary river depth"
-msgstr ""
+msgstr "Äá»™ sâu sông thay đổi"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Very large caverns deep in the underground"
-msgstr ""
+msgstr "Các hang động lớn nằm sâu trong lòng đất"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Warning: The Development Test is meant for developers."
-msgstr ""
+msgstr "Cảnh báo: Kiểm tra Phát triển chỉ dành cho các nhà phát triển."
#: builtin/mainmenu/dlg_create_world.lua
msgid "World name"
-msgstr ""
+msgstr "Tên thế giới"
#: builtin/mainmenu/dlg_create_world.lua
msgid "You have no games installed."
-msgstr ""
+msgstr "Bạn chưa cài đặt trò chơi nào."
#: builtin/mainmenu/dlg_delete_content.lua
msgid "Are you sure you want to delete \"$1\"?"
-msgstr ""
+msgstr "Bạn có chắc chắn muốn xóa \"$1\" không?"
#: builtin/mainmenu/dlg_delete_content.lua
#: builtin/mainmenu/dlg_delete_world.lua builtin/mainmenu/tab_local.lua
#: src/client/keycode.cpp
msgid "Delete"
-msgstr ""
+msgstr "Xóa"
#: builtin/mainmenu/dlg_delete_content.lua
msgid "pkgmgr: failed to delete \"$1\""
-msgstr ""
+msgstr "pkgmgr: không xóa được \"$1\""
#: builtin/mainmenu/dlg_delete_content.lua
msgid "pkgmgr: invalid path \"$1\""
-msgstr ""
+msgstr "pkgmgr: đưá»ng dẫn \"$1\" không hợp lệ"
#: builtin/mainmenu/dlg_delete_world.lua
msgid "Delete World \"$1\"?"
-msgstr ""
+msgstr "Xóa thế giới \"$ 1\"?"
#: builtin/mainmenu/dlg_rename_modpack.lua
msgid "Accept"
-msgstr ""
+msgstr "Chấp nhận"
#: builtin/mainmenu/dlg_rename_modpack.lua
msgid "Rename Modpack:"
-msgstr ""
+msgstr "Äổi tên mod:"
#: builtin/mainmenu/dlg_rename_modpack.lua
msgid ""
"This modpack has an explicit name given in its modpack.conf which will "
"override any renaming here."
msgstr ""
+"Mod này có một tên rõ ràng được đưa ra trong tệp modpack.conf của nó, tên "
+"này sẽ ghi đè bất kỳ sự đổi tên nào ở đây."
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "(No description of setting given)"
-msgstr ""
+msgstr "(Không có mô tả vỠCài đặt nào được đưa ra)"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "2D Noise"
-msgstr ""
+msgstr "Âm thanh 2D"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "< Back to Settings page"
-msgstr ""
+msgstr "< VỠtrang Cài đặt"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Browse"
-msgstr ""
+msgstr "Duyệt"
-#: builtin/mainmenu/dlg_settings_advanced.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_settings.lua
msgid "Disabled"
msgstr ""
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Edit"
-msgstr ""
+msgstr "Chỉnh sửa"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Enabled"
@@ -546,59 +618,59 @@ msgstr ""
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Lacunarity"
-msgstr ""
+msgstr "Khoảng cách"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Octaves"
-msgstr ""
+msgstr "Quãng tám"
#: builtin/mainmenu/dlg_settings_advanced.lua src/settings_translation_file.cpp
msgid "Offset"
msgstr ""
#: builtin/mainmenu/dlg_settings_advanced.lua
-msgid "Persistance"
-msgstr ""
+msgid "Persistence"
+msgstr "Sá»± bá»n bỉ"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Please enter a valid integer."
-msgstr ""
+msgstr "Vui lòng nhập một số nguyên hợp lệ."
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Please enter a valid number."
-msgstr ""
+msgstr "Vui lòng nhập một số hợp lệ."
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Restore Default"
-msgstr ""
+msgstr "Phục hồi Cài đặt mặc định"
#: builtin/mainmenu/dlg_settings_advanced.lua src/settings_translation_file.cpp
msgid "Scale"
-msgstr ""
+msgstr "Tỉ lệ"
-#: builtin/mainmenu/dlg_settings_advanced.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_online.lua
msgid "Search"
-msgstr ""
+msgstr "Tìm kiếm"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Select directory"
-msgstr ""
+msgstr "Chá»n thư mục"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Select file"
-msgstr ""
+msgstr "Chá»n tệp"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Show technical names"
-msgstr ""
+msgstr "Hiển thị tên kỹ thuật"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "The value must be at least $1."
-msgstr ""
+msgstr "Giá trị ít nhất phải là $1."
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "The value must not be larger than $1."
-msgstr ""
+msgstr "Giá trị không được lớn hơn $1."
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "X"
@@ -630,14 +702,14 @@ msgstr ""
#. main menu -> "All Settings".
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "absvalue"
-msgstr ""
+msgstr "Giá trị tuyệt đối"
#. ~ "defaults" is a noise parameter flag.
#. It describes the default processing options
#. for noise settings in main menu -> "All Settings".
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "defaults"
-msgstr ""
+msgstr "Mặc định"
#. ~ "eased" is a noise parameter flag.
#. It is used to make the map smoother and
@@ -645,11 +717,11 @@ msgstr ""
#. main menu -> "All Settings".
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "eased"
-msgstr ""
+msgstr "Ná»›i lá»ng"
#: builtin/mainmenu/pkgmgr.lua
msgid "$1 (Enabled)"
-msgstr ""
+msgstr "$1 (đã bật)"
#: builtin/mainmenu/pkgmgr.lua
msgid "$1 mods"
@@ -657,43 +729,35 @@ msgstr ""
#: builtin/mainmenu/pkgmgr.lua
msgid "Failed to install $1 to $2"
-msgstr ""
+msgstr "Không cài đặt được $1 đến $2"
#: builtin/mainmenu/pkgmgr.lua
msgid "Install Mod: Unable to find real mod name for: $1"
-msgstr ""
+msgstr "Cài đặt mod: Không thể tìm thấy tên mod thật cho: $1"
#: builtin/mainmenu/pkgmgr.lua
msgid "Install Mod: Unable to find suitable folder name for modpack $1"
-msgstr ""
-
-#: builtin/mainmenu/pkgmgr.lua
-msgid "Install: Unsupported file type \"$1\" or broken archive"
-msgstr ""
-
-#: builtin/mainmenu/pkgmgr.lua
-msgid "Install: file: \"$1\""
-msgstr ""
+msgstr "Cài đặt mod: Không thể tìm thấy tên thư mục phù hợp cho gói mod $1"
#: builtin/mainmenu/pkgmgr.lua
msgid "Unable to find a valid mod or modpack"
-msgstr ""
+msgstr "Không tìm thấy một mod hoặc gói mod hợp lệ"
#: builtin/mainmenu/pkgmgr.lua
msgid "Unable to install a $1 as a texture pack"
-msgstr ""
+msgstr "Không thể cài đặt $1 dưới dạng gói kết cấu địa hình"
#: builtin/mainmenu/pkgmgr.lua
msgid "Unable to install a game as a $1"
-msgstr ""
+msgstr "Không thể cài đặt trò chơi dưới dạng $1"
#: builtin/mainmenu/pkgmgr.lua
msgid "Unable to install a mod as a $1"
-msgstr ""
+msgstr "Không thể cài đặt mod dưới dạng $1"
#: builtin/mainmenu/pkgmgr.lua
msgid "Unable to install a modpack as a $1"
-msgstr ""
+msgstr "Không thể cài đặt gói mod dưới dạng $1"
#: builtin/mainmenu/serverlistmgr.lua src/client/game.cpp
msgid "Loading..."
@@ -701,192 +765,211 @@ msgstr "Äang tải..."
#: builtin/mainmenu/serverlistmgr.lua
msgid "Public server list is disabled"
-msgstr ""
+msgstr "Danh sách máy chủ công cộng bị tắt"
#: builtin/mainmenu/serverlistmgr.lua
msgid "Try reenabling public serverlist and check your internet connection."
msgstr ""
-"Hãy thử kích hoạt lại danh sách máy chủ công cộng và kiểm tra kết nối "
-"internet của bạn."
+"Hãy thử kích hoạt lại danh sách máy chủ công cộng và kiểm tra kết nối mạng "
+"của bạn."
+
+#: builtin/mainmenu/tab_about.lua
+msgid "About"
+msgstr "Giới thiệu"
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Active Contributors"
+msgstr "Những ngưá»i đóng góp tích cá»±c"
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Active renderer:"
+msgstr "Trình kết xuất hiện hoạt:"
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Core Developers"
+msgstr "Các nhà phát triển cốt lõi"
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Open User Data Directory"
+msgstr "Mở thư mục Dữ liệu ngưá»i dùng"
+
+#: builtin/mainmenu/tab_about.lua
+msgid ""
+"Opens the directory that contains user-provided worlds, games, mods,\n"
+"and texture packs in a file manager / explorer."
+msgstr ""
+"Mở thư mục chứa thế giá»›i, trò chÆ¡i, bản mod do ngưá»i dùng cung cấp\n"
+"và các gói kết cấu trong trình quản lý / trình khám phá tệp."
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Previous Contributors"
+msgstr "Những ngưá»i đóng góp trước đây"
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Previous Core Developers"
+msgstr "Các nhà phát triển cốt lõi trước đây"
#: builtin/mainmenu/tab_content.lua
msgid "Browse online content"
-msgstr ""
+msgstr "Duyệt nội dung trực tuyến"
#: builtin/mainmenu/tab_content.lua
msgid "Content"
-msgstr ""
+msgstr "Ná»™i dung"
#: builtin/mainmenu/tab_content.lua
msgid "Disable Texture Pack"
-msgstr ""
+msgstr "Tắt tất cả gói kết cấu"
#: builtin/mainmenu/tab_content.lua
msgid "Information:"
-msgstr ""
+msgstr "Thông tin:"
#: builtin/mainmenu/tab_content.lua
msgid "Installed Packages:"
-msgstr ""
+msgstr "Các gói đã cài đặt:"
#: builtin/mainmenu/tab_content.lua
msgid "No dependencies."
-msgstr ""
+msgstr "Không có phần phụ thuộc nào."
#: builtin/mainmenu/tab_content.lua
msgid "No package description available"
-msgstr ""
+msgstr "Không có mô tả gói"
#: builtin/mainmenu/tab_content.lua
msgid "Rename"
-msgstr ""
+msgstr "Äổi tên"
#: builtin/mainmenu/tab_content.lua
msgid "Uninstall Package"
-msgstr ""
+msgstr "Gỡ cài đặt gói"
#: builtin/mainmenu/tab_content.lua
msgid "Use Texture Pack"
-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 "Open User Data Directory"
-msgstr ""
-
-#: builtin/mainmenu/tab_credits.lua
-msgid ""
-"Opens the directory that contains user-provided worlds, games, mods,\n"
-"and texture packs in a file manager / explorer."
-msgstr ""
-
-#: builtin/mainmenu/tab_credits.lua
-msgid "Previous Contributors"
-msgstr ""
-
-#: builtin/mainmenu/tab_credits.lua
-msgid "Previous Core Developers"
-msgstr ""
+msgstr "Dùng gói cấu hình này"
#: builtin/mainmenu/tab_local.lua
msgid "Announce Server"
-msgstr ""
+msgstr "Thông báo máy chủ"
#: builtin/mainmenu/tab_local.lua
msgid "Bind Address"
-msgstr ""
+msgstr "Äịa chỉ bắt buá»™c"
#: builtin/mainmenu/tab_local.lua
msgid "Creative Mode"
-msgstr ""
+msgstr "Chế độ sáng tạo"
#: builtin/mainmenu/tab_local.lua
msgid "Enable Damage"
-msgstr ""
+msgstr "Kích hoạt sát thương"
#: builtin/mainmenu/tab_local.lua
msgid "Host Game"
-msgstr ""
+msgstr "Lưu trữ trò chơi"
#: builtin/mainmenu/tab_local.lua
msgid "Host Server"
-msgstr ""
+msgstr "Lưu trữ máy chủ"
#: builtin/mainmenu/tab_local.lua
msgid "Install games from ContentDB"
-msgstr ""
+msgstr "Cài đặt trò chơi từ ContentDB"
-#: builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
msgid "Name"
-msgstr ""
+msgstr "Tên"
#: builtin/mainmenu/tab_local.lua
msgid "New"
-msgstr ""
+msgstr "Má»›i"
#: builtin/mainmenu/tab_local.lua
msgid "No world created or selected!"
-msgstr ""
+msgstr "Không có thế giá»›i nào được tạo ra hoặc được lá»±a chá»n."
-#: builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
msgid "Password"
-msgstr ""
+msgstr "Mật khẩu"
#: builtin/mainmenu/tab_local.lua
msgid "Play Game"
-msgstr ""
+msgstr "Chơi trò chơi"
-#: builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
msgid "Port"
-msgstr ""
+msgstr "Cổng"
#: builtin/mainmenu/tab_local.lua
msgid "Select Mods"
-msgstr ""
+msgstr "Mod đã chá»n"
#: builtin/mainmenu/tab_local.lua
msgid "Select World:"
-msgstr ""
+msgstr "Thế giá»›i đã chá»n:"
#: builtin/mainmenu/tab_local.lua
msgid "Server Port"
-msgstr ""
+msgstr "Cổng máy chủ"
#: builtin/mainmenu/tab_local.lua
msgid "Start Game"
-msgstr ""
+msgstr "Bắt đầu trò chơi"
#: builtin/mainmenu/tab_online.lua
-msgid "Address / Port"
-msgstr ""
+msgid "Address"
+msgstr "Äịa chỉ"
+
+#: builtin/mainmenu/tab_online.lua src/client/keycode.cpp
+#, fuzzy
+msgid "Clear"
+msgstr "Xóa"
#: builtin/mainmenu/tab_online.lua
msgid "Connect"
-msgstr ""
+msgstr "Kết nối"
#: builtin/mainmenu/tab_online.lua
msgid "Creative mode"
-msgstr ""
+msgstr "Chế độ sáng tạo"
+#. ~ PvP = Player versus Player
#: builtin/mainmenu/tab_online.lua
-msgid "Damage enabled"
-msgstr ""
+msgid "Damage / PvP"
+msgstr "Sát thương / PvP"
#: builtin/mainmenu/tab_online.lua
msgid "Del. Favorite"
-msgstr ""
+msgstr "Xóa yêu thích"
#: builtin/mainmenu/tab_online.lua
-msgid "Favorite"
-msgstr ""
+msgid "Favorites"
+msgstr "Yêu thích"
#: builtin/mainmenu/tab_online.lua
-msgid "Join Game"
-msgstr ""
+msgid "Incompatible Servers"
+msgstr "Máy chủ không tương thích"
#: builtin/mainmenu/tab_online.lua
-msgid "Name / Password"
-msgstr ""
+msgid "Join Game"
+msgstr "Tham gia trò chơi"
#: builtin/mainmenu/tab_online.lua
msgid "Ping"
msgstr ""
-#. ~ PvP = Player versus Player
#: builtin/mainmenu/tab_online.lua
-msgid "PvP enabled"
-msgstr ""
+msgid "Public Servers"
+msgstr "Máy chủ công cộng"
+
+#: builtin/mainmenu/tab_online.lua
+msgid "Refresh"
+msgstr "Làm mới"
+
+#: builtin/mainmenu/tab_online.lua
+msgid "Server Description"
+msgstr "Mô tả Máy chủ"
#: builtin/mainmenu/tab_settings.lua
msgid "2x"
@@ -894,7 +977,7 @@ msgstr ""
#: builtin/mainmenu/tab_settings.lua
msgid "3D Clouds"
-msgstr ""
+msgstr "Mây 3D"
#: builtin/mainmenu/tab_settings.lua
msgid "4x"
@@ -906,7 +989,7 @@ msgstr ""
#: builtin/mainmenu/tab_settings.lua
msgid "All Settings"
-msgstr ""
+msgstr "Tất cả cài đặt"
#: builtin/mainmenu/tab_settings.lua
msgid "Antialiasing:"
@@ -914,47 +997,71 @@ msgstr ""
#: builtin/mainmenu/tab_settings.lua
msgid "Autosave Screen Size"
-msgstr ""
+msgstr "Tự động lưu kích cỡ màn hình"
#: builtin/mainmenu/tab_settings.lua
msgid "Bilinear Filter"
-msgstr ""
+msgstr "Bá»™ lá»c song tuyến"
#: builtin/mainmenu/tab_settings.lua src/client/game.cpp
msgid "Change Keys"
-msgstr ""
+msgstr "Thay đổi khóa"
#: builtin/mainmenu/tab_settings.lua
msgid "Connected Glass"
-msgstr ""
+msgstr "Kính đã kết nối"
+
+#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
+msgid "Dynamic shadows"
+msgstr "Bóng kiểu động lá»±c há»c"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Dynamic shadows: "
+msgstr "Bóng kiểu động lá»±c há»c: "
#: builtin/mainmenu/tab_settings.lua
msgid "Fancy Leaves"
-msgstr ""
+msgstr "Lá lạ mắt"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "High"
+msgstr "Cao"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Low"
+msgstr "Thấp"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Medium"
+msgstr "Trung bình"
#: builtin/mainmenu/tab_settings.lua
msgid "Mipmap"
msgstr ""
#: builtin/mainmenu/tab_settings.lua
+#, fuzzy
msgid "Mipmap + Aniso. Filter"
-msgstr ""
+msgstr "Mipmap + Bá»™ lá»c Aniso."
#: builtin/mainmenu/tab_settings.lua
msgid "No Filter"
-msgstr ""
+msgstr "Không bá»™ lá»c"
#: builtin/mainmenu/tab_settings.lua
+#, fuzzy
msgid "No Mipmap"
-msgstr ""
+msgstr "Không Mipmap"
#: builtin/mainmenu/tab_settings.lua
+#, fuzzy
msgid "Node Highlighting"
-msgstr ""
+msgstr "Äánh dấu node"
#: builtin/mainmenu/tab_settings.lua
+#, fuzzy
msgid "Node Outlining"
-msgstr ""
+msgstr "Phác thảo node"
#: builtin/mainmenu/tab_settings.lua
msgid "None"
@@ -962,51 +1069,48 @@ msgstr ""
#: builtin/mainmenu/tab_settings.lua
msgid "Opaque Leaves"
-msgstr ""
+msgstr "Lá đục"
#: builtin/mainmenu/tab_settings.lua
msgid "Opaque Water"
-msgstr ""
+msgstr "Nước đục"
#: builtin/mainmenu/tab_settings.lua
+#, fuzzy
msgid "Particles"
-msgstr ""
+msgstr "Vật rất nhá»"
#: builtin/mainmenu/tab_settings.lua
msgid "Screen:"
-msgstr ""
+msgstr "Màn hình:"
#: builtin/mainmenu/tab_settings.lua
msgid "Settings"
-msgstr ""
+msgstr "Cài đặt"
#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
msgid "Shaders"
-msgstr ""
+msgstr "Trình tạo bóng"
#: builtin/mainmenu/tab_settings.lua
msgid "Shaders (experimental)"
-msgstr ""
+msgstr "Trình tạo bóng (đang trong thử nghiệm)"
#: builtin/mainmenu/tab_settings.lua
msgid "Shaders (unavailable)"
-msgstr ""
+msgstr "Trình tạo bóng (không tồn tại)"
#: builtin/mainmenu/tab_settings.lua
msgid "Simple Leaves"
-msgstr ""
+msgstr "Lá đơn giản"
#: builtin/mainmenu/tab_settings.lua
msgid "Smooth Lighting"
-msgstr ""
+msgstr "Ãnh sáng mịn"
#: builtin/mainmenu/tab_settings.lua
msgid "Texturing:"
-msgstr ""
-
-#: builtin/mainmenu/tab_settings.lua
-msgid "To enable shaders the OpenGL driver needs to be used."
-msgstr ""
+msgstr "Cấu hình địa hình:"
#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
msgid "Tone Mapping"
@@ -1018,170 +1122,202 @@ msgstr ""
#: builtin/mainmenu/tab_settings.lua
msgid "Trilinear Filter"
-msgstr ""
+msgstr "Bá»™ lá»c tam song"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Ultra High"
+msgstr "Cá»±c cao"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Very Low"
+msgstr "Cực thấp"
#: builtin/mainmenu/tab_settings.lua
msgid "Waving Leaves"
-msgstr ""
+msgstr "Lá sóng"
#: builtin/mainmenu/tab_settings.lua
msgid "Waving Liquids"
-msgstr ""
+msgstr "Nước chuyển động như sóng"
#: builtin/mainmenu/tab_settings.lua
msgid "Waving Plants"
-msgstr ""
+msgstr "Sinh vật chuyển động như sóng"
-#: src/client/client.cpp
+#: src/client/client.cpp src/client/game.cpp
msgid "Connection timed out."
-msgstr ""
+msgstr "Kết nối quá hạn."
#: src/client/client.cpp
msgid "Done!"
-msgstr ""
+msgstr "Äã xong!"
#: src/client/client.cpp
+#, fuzzy
msgid "Initializing nodes"
-msgstr ""
+msgstr "Äang khởi tạo các node"
#: src/client/client.cpp
+#, fuzzy
msgid "Initializing nodes..."
-msgstr ""
+msgstr "Äang khởi tạo các node..."
#: src/client/client.cpp
msgid "Loading textures..."
-msgstr ""
+msgstr "Äang tải cấu hình địa hình..."
#: src/client/client.cpp
msgid "Rebuilding shaders..."
-msgstr ""
+msgstr "Äang xây dá»±ng lại trình tạo bóng..."
#: src/client/clientlauncher.cpp
msgid "Connection error (timed out?)"
-msgstr ""
+msgstr "Lá»—i kết nối (hết thá»i gian chá»?)"
#: src/client/clientlauncher.cpp
-msgid "Could not find or load game \""
-msgstr ""
+msgid "Could not find or load game: "
+msgstr "Không tìm thấy hoặc tải trò chơi: "
#: src/client/clientlauncher.cpp
+#, fuzzy
msgid "Invalid gamespec."
-msgstr ""
+msgstr "Gamespec không hợp lệ."
#: src/client/clientlauncher.cpp
msgid "Main Menu"
-msgstr ""
+msgstr "Màn hình chính"
#: src/client/clientlauncher.cpp
msgid "No world selected and no address provided. Nothing to do."
msgstr ""
+"Không có thế giá»›i nào được chá»n và không có địa chỉ nào được cung cấp. Không "
+"có gì làm hết."
#: src/client/clientlauncher.cpp
msgid "Player name too long."
-msgstr ""
+msgstr "Tên ngưá»i chÆ¡i quá dài."
#: src/client/clientlauncher.cpp
msgid "Please choose a name!"
-msgstr ""
+msgstr "Xin vui lòng chá»n má»™t tên ngưá»i chÆ¡i!"
#: src/client/clientlauncher.cpp
msgid "Provided password file failed to open: "
-msgstr ""
+msgstr "Không mở được tệp mật khẩu được cung cấp: "
#: src/client/clientlauncher.cpp
msgid "Provided world path doesn't exist: "
-msgstr ""
-
-#. ~ DO NOT TRANSLATE THIS LITERALLY!
-#. This is a special string. Put either "no" or "yes"
-#. into the translation field (literally).
-#. Choose "yes" if the language requires use of the fallback
-#. font, "no" otherwise.
-#. The fallback font is (normally) required for languages with
-#. non-Latin script, like Chinese.
-#. When in doubt, test your translation.
-#: src/client/fontengine.cpp
-msgid "needs_fallback_font"
-msgstr ""
+msgstr "ÄÆ°á»ng dẫn thế giá»›i được cung cấp không tồn tại: "
#: src/client/game.cpp
msgid ""
"\n"
"Check debug.txt for details."
msgstr ""
+"\n"
+"Hãy kiểm tra debug.txt để có thông tin chi tiết."
#: src/client/game.cpp
msgid "- Address: "
-msgstr ""
-
-#: src/client/game.cpp
-msgid "- Creative Mode: "
-msgstr ""
-
-#: src/client/game.cpp
-msgid "- Damage: "
-msgstr ""
+msgstr "- Äịa chỉ: "
#: src/client/game.cpp
msgid "- Mode: "
-msgstr ""
+msgstr "- Chế độ: "
#: src/client/game.cpp
msgid "- Port: "
-msgstr ""
+msgstr "- Cổng: "
#: src/client/game.cpp
msgid "- Public: "
-msgstr ""
+msgstr "- Công cộng: "
#. ~ PvP = Player versus Player
#: src/client/game.cpp
msgid "- PvP: "
-msgstr ""
+msgstr "- PvP: "
#: src/client/game.cpp
msgid "- Server Name: "
-msgstr ""
+msgstr "- Tên máy chủ: "
+
+#: src/client/game.cpp
+msgid "A serialization error occurred:"
+msgstr "Äã xảy ra lá»—i tuần tá»± hóa:"
+
+#: src/client/game.cpp
+#, c-format
+msgid "Access denied. Reason: %s"
+msgstr "Quyá»n truy cập bị từ chối vá»›i lý do: %s"
#: src/client/game.cpp
msgid "Automatic forward disabled"
-msgstr ""
+msgstr "Tự động chuyển tiếp bị tắt"
#: src/client/game.cpp
msgid "Automatic forward enabled"
-msgstr ""
+msgstr "Tự động chuyển tiếp đã bật"
+
+#: src/client/game.cpp
+msgid "Block bounds hidden"
+msgstr "Các ranh giới khối đã ẩn"
+
+#: src/client/game.cpp
+msgid "Block bounds shown for all blocks"
+msgstr "Äã hiển thị ranh giá»›i cho tất cả các khối"
+
+#: src/client/game.cpp
+msgid "Block bounds shown for current block"
+msgstr "Äã hiển thị ranh giá»›i hiển thị cho khối hiện tại"
+
+#: src/client/game.cpp
+msgid "Block bounds shown for nearby blocks"
+msgstr "Äã hiển thị ranh giá»›i cho các khối gần bạn"
#: src/client/game.cpp
msgid "Camera update disabled"
-msgstr ""
+msgstr "Cập nhật máy ảnh đã tắt"
#: src/client/game.cpp
msgid "Camera update enabled"
-msgstr ""
+msgstr "Cập nhật máy ảnh đã bật"
+
+#: src/client/game.cpp
+msgid "Can't show block bounds (need 'basic_debug' privilege)"
+msgstr "Không thể hiển thị giá»›i hạn khối (vì phải có quyá»n 'basic_debug')"
#: src/client/game.cpp
msgid "Change Password"
-msgstr ""
+msgstr "Äổi mật khẩu"
#: src/client/game.cpp
msgid "Cinematic mode disabled"
-msgstr ""
+msgstr "Chế độ điện ảnh đã tắt"
#: src/client/game.cpp
msgid "Cinematic mode enabled"
-msgstr ""
+msgstr "Chế độ điện ảnh đã bật"
+
+#: src/client/game.cpp
+msgid "Client disconnected"
+msgstr "Máy khách đã ngắt kết nối"
#: src/client/game.cpp
msgid "Client side scripting is disabled"
-msgstr ""
+msgstr "Lập trình phía máy khách đã tắt"
#: src/client/game.cpp
msgid "Connecting to server..."
-msgstr ""
+msgstr "Äang kết nối tá»›i máy chá»§..."
+
+#: src/client/game.cpp
+msgid "Connection failed for unknown reason"
+msgstr "Kết nối không thành công vì lý do không xác định"
#: src/client/game.cpp
msgid "Continue"
-msgstr ""
+msgstr "Tiếp tục"
#: src/client/game.cpp
#, c-format
@@ -1201,26 +1337,45 @@ msgid ""
"- Mouse wheel: select item\n"
"- %s: chat\n"
msgstr ""
+"Äiá»n khiển:\n"
+"- %s: tiến lên\n"
+"- %s: lùi vỠphía sau\n"
+"- %s: di chuyển sang trái\n"
+"- %s: di chuyển sang phải\n"
+"- %s: nhảy lên / leo lên\n"
+"- %s: đào / đấm\n"
+"- %s: địa điểm / sử dụng\n"
+"- %s: lẻn / leo xuống\n"
+"- %s: thả đồ\n"
+"- %s: khoảng không quảng cáo\n"
+"- Chuột: xoay / nhìn\n"
+"- Con lăn chuá»™t: chá»n đồ\n"
+"- %s: trò chuyện\n"
+
+#: src/client/game.cpp
+#, c-format
+msgid "Couldn't resolve address: %s"
+msgstr "Không thể giải mã địa chỉ: %s"
#: src/client/game.cpp
msgid "Creating client..."
-msgstr ""
+msgstr "Äang tạo máy khách..."
#: src/client/game.cpp
msgid "Creating server..."
-msgstr ""
+msgstr "Äang tạo máy chá»§..."
#: src/client/game.cpp
msgid "Debug info and profiler graph hidden"
-msgstr ""
+msgstr "Thông tin gỡ lỗi và biểu đồ hồ sơ đã ẩn"
#: src/client/game.cpp
msgid "Debug info shown"
-msgstr ""
+msgstr "Thông tin gỡ lỗi đã hiển thị"
#: src/client/game.cpp
msgid "Debug info, profiler graph, and wireframe hidden"
-msgstr ""
+msgstr "Thông tin gỡ lỗi, biểu đồ hồ sơ và khung dây đã ẩn"
#: src/client/game.cpp
msgid ""
@@ -1237,66 +1392,78 @@ msgid ""
"- touch&drag, tap 2nd finger\n"
" --> place single item to slot\n"
msgstr ""
+"Äiá»u khiển mặc định:\n"
+"Không có menu nào hiển thị:\n"
+"- một lần nhấn: nút kích hoạt\n"
+"- nhấn đúp: đặt / sử dụng\n"
+"- trượt ngón tay: nhìn xung quanh\n"
+"Menu / khoảng không quảng cáo hiển thị:\n"
+"- nhấn đúp (bên ngoài):\n"
+" -> đóng\n"
+"- ngăn xếp cảm ứng, khe cắm cảm ứng:\n"
+" -> di chuyển ngăn xếp\n"
+"- chạm và kéo, chạm vào ngón tay thứ 2\n"
+" -> đặt một mục duy nhất vào vị trí\n"
#: src/client/game.cpp
msgid "Disabled unlimited viewing range"
-msgstr ""
+msgstr "Äã tắt phạm vi nhìn không giá»›i hạn"
#: src/client/game.cpp
msgid "Enabled unlimited viewing range"
-msgstr ""
+msgstr "Äã bật phạm vi nhìn không giá»›i hạn"
#: src/client/game.cpp
msgid "Exit to Menu"
-msgstr ""
+msgstr "Thoát ra màn hình chính"
#: src/client/game.cpp
msgid "Exit to OS"
-msgstr ""
+msgstr "Tắt Minetest"
#: src/client/game.cpp
msgid "Fast mode disabled"
-msgstr ""
+msgstr "Chế độ nhanh đã tắt"
#: src/client/game.cpp
msgid "Fast mode enabled"
-msgstr ""
+msgstr "Chế độ nhanh đã bật"
#: src/client/game.cpp
msgid "Fast mode enabled (note: no 'fast' privilege)"
-msgstr ""
+msgstr "Chế độ nhanh đã bật (ghi chú: không có ưu tiên cho 'nhanh')"
#: src/client/game.cpp
msgid "Fly mode disabled"
-msgstr ""
+msgstr "Chế độ bay đã tắt"
#: src/client/game.cpp
msgid "Fly mode enabled"
-msgstr ""
+msgstr "Chế độ bay đã bật"
#: src/client/game.cpp
msgid "Fly mode enabled (note: no 'fly' privilege)"
-msgstr ""
+msgstr "Chế độ bay đã bật (ghi chú: không có ưu tiên cho 'bay')"
#: src/client/game.cpp
msgid "Fog disabled"
-msgstr ""
+msgstr "Sương mù đã tắt"
#: src/client/game.cpp
msgid "Fog enabled"
-msgstr ""
+msgstr "Sương mù đã bật"
#: src/client/game.cpp
msgid "Game info:"
-msgstr ""
+msgstr "Thông tin trò chơi:"
#: src/client/game.cpp
msgid "Game paused"
-msgstr ""
+msgstr "Trò chơi đã được tạm dừng"
#: src/client/game.cpp
msgid "Hosting server"
-msgstr ""
+msgstr "Äang tải máy chá»§"
#: src/client/game.cpp
msgid "Item definitions..."
@@ -1304,7 +1471,7 @@ msgstr ""
#: src/client/game.cpp
msgid "KiB/s"
-msgstr ""
+msgstr "KiB/s"
#: src/client/game.cpp
msgid "Media..."
@@ -1319,6 +1486,10 @@ msgid "Minimap currently disabled by game or mod"
msgstr ""
#: src/client/game.cpp
+msgid "Multiplayer"
+msgstr ""
+
+#: src/client/game.cpp
msgid "Noclip mode disabled"
msgstr ""
@@ -1392,6 +1563,21 @@ msgstr ""
#: src/client/game.cpp
#, c-format
+msgid "The server is probably running a different version of %s."
+msgstr ""
+
+#: src/client/game.cpp
+#, c-format
+msgid "Unable to connect to %s because IPv6 is disabled"
+msgstr ""
+
+#: src/client/game.cpp
+#, c-format
+msgid "Unable to listen on %s because IPv6 is disabled"
+msgstr ""
+
+#: src/client/game.cpp
+#, c-format
msgid "Viewing range changed to %d"
msgstr ""
@@ -1460,10 +1646,6 @@ msgid "Caps Lock"
msgstr ""
#: src/client/keycode.cpp
-msgid "Clear"
-msgstr ""
-
-#: src/client/keycode.cpp
msgid "Control"
msgstr ""
@@ -1728,6 +1910,14 @@ msgstr ""
msgid "Minimap in texture mode"
msgstr ""
+#: src/gui/guiChatConsole.cpp
+msgid "Failed to open webpage"
+msgstr ""
+
+#: src/gui/guiChatConsole.cpp
+msgid "Opening webpage"
+msgstr ""
+
#: src/gui/guiConfirmRegistration.cpp src/gui/guiPasswordChange.cpp
msgid "Passwords do not match!"
msgstr ""
@@ -1751,7 +1941,7 @@ msgid "Proceed"
msgstr ""
#: src/gui/guiKeyChangeMenu.cpp
-msgid "\"Special\" = climb down"
+msgid "\"Aux1\" = climb down"
msgstr ""
#: src/gui/guiKeyChangeMenu.cpp
@@ -1763,10 +1953,18 @@ msgid "Automatic jumping"
msgstr ""
#: src/gui/guiKeyChangeMenu.cpp
+msgid "Aux1"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
msgid "Backward"
msgstr ""
#: src/gui/guiKeyChangeMenu.cpp
+msgid "Block bounds"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
msgid "Change camera"
msgstr ""
@@ -1855,10 +2053,6 @@ msgid "Sneak"
msgstr ""
#: src/gui/guiKeyChangeMenu.cpp
-msgid "Special"
-msgstr ""
-
-#: src/gui/guiKeyChangeMenu.cpp
msgid "Toggle HUD"
msgstr ""
@@ -1919,7 +2113,8 @@ msgid "Muted"
msgstr ""
#: src/gui/guiVolumeChange.cpp
-msgid "Sound Volume: "
+#, c-format
+msgid "Sound Volume: %d%%"
msgstr ""
#. ~ Imperative, as in "Enter/type in text".
@@ -1943,8 +2138,8 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"(Android) Use virtual joystick to trigger \"aux\" button.\n"
-"If enabled, virtual joystick will also tap \"aux\" button when out of main "
+"(Android) Use virtual joystick to trigger \"Aux1\" button.\n"
+"If enabled, virtual joystick will also tap \"Aux1\" button when out of main "
"circle."
msgstr ""
@@ -2127,6 +2322,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Adjust the detected display density, used for scaling UI elements."
+msgstr ""
+
+#: src/settings_translation_file.cpp
#, c-format
msgid ""
"Adjusts the density of the floatland layer.\n"
@@ -2239,6 +2438,14 @@ msgid "Autoscaling mode"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Aux1 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Aux1 key for climbing/descending"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Backward key"
msgstr ""
@@ -2283,10 +2490,6 @@ msgid "Biome noise"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Bits per pixel (aka color depth) in fullscreen mode."
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Block send optimize distance"
msgstr ""
@@ -2385,6 +2588,14 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Chat command time message threshold"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Chat commands"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Chat font size"
msgstr ""
@@ -2417,7 +2628,7 @@ msgid "Chat toggle key"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Chatcommands"
+msgid "Chat weblinks"
msgstr ""
#: src/settings_translation_file.cpp
@@ -2437,6 +2648,12 @@ msgid "Clean transparent textures"
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Clickable weblinks (middle-click or Ctrl+left-click) enabled in chat console "
+"output."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Client"
msgstr ""
@@ -2481,6 +2698,10 @@ msgid "Colored fog"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Colored shadows"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid ""
"Comma-separated list of flags to hide in the content repository.\n"
"\"nonfree\" can be used to hide packages which do not qualify as 'free "
@@ -2508,6 +2729,22 @@ msgid "Command key"
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Compression level to use when saving mapblocks to disk.\n"
+"-1 - use default compression level\n"
+"0 - least compression, fastest\n"
+"9 - best compression, slowest"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Compression level to use when sending mapblocks to the client.\n"
+"-1 - use default compression level\n"
+"0 - least compression, fastest\n"
+"9 - best compression, slowest"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Connect glass"
msgstr ""
@@ -2598,7 +2835,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"Crosshair alpha (opaqueness, between 0 and 255).\n"
-"Also controls the object crosshair color"
+"This also applies to the object crosshair."
msgstr ""
#: src/settings_translation_file.cpp
@@ -2617,7 +2854,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Damage"
-msgstr ""
+msgstr "Sát thương"
#: src/settings_translation_file.cpp
msgid "Debug info toggle key"
@@ -2675,8 +2912,9 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Default timeout for cURL, stated in milliseconds.\n"
-"Only has an effect if compiled with cURL."
+"Define shadow filtering quality.\n"
+"This simulates the soft shadows effect by applying a PCF or Poisson disk\n"
+"but also uses more resources."
msgstr ""
#: src/settings_translation_file.cpp
@@ -2794,6 +3032,10 @@ msgid "Disallow empty passwords"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Display Density Scaling Factor"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Domain name of server, to be displayed in the serverlist."
msgstr ""
@@ -2838,6 +3080,19 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Enable Poisson disk filtering.\n"
+"On true uses Poisson disk to make \"soft shadows\". Otherwise uses PCF "
+"filtering."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable colored shadows.\n"
+"On true translucent nodes cast colored shadows. This is expensive."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Enable console window"
msgstr ""
@@ -2859,7 +3114,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Enable players getting damage and dying."
-msgstr ""
+msgstr "Cho phép ngưá»i chÆ¡i nhận sát thương và chết."
#: src/settings_translation_file.cpp
msgid "Enable random user input (only used for testing)."
@@ -2946,6 +3201,12 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Enables tradeoffs that reduce CPU load or increase rendering performance\n"
+"at the expense of minor visual glitches that do not impact game playability."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Engine profiling data print interval"
msgstr ""
@@ -2984,18 +3245,6 @@ msgid "Fallback font path"
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 ""
@@ -3013,7 +3262,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Fast movement (via the \"special\" key).\n"
+"Fast movement (via the \"Aux1\" key).\n"
"This requires the \"fast\" privilege on the server."
msgstr ""
@@ -3047,9 +3296,9 @@ 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."
+"which PNG optimizers usually discard, often resulting in dark or\n"
+"light edges to transparent textures. Apply a filter to clean that up\n"
+"at texture load time. This is automatically enabled if mipmapping is enabled."
msgstr ""
#: src/settings_translation_file.cpp
@@ -3141,15 +3390,15 @@ msgid "Font size"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Font size of the default font in point (pt)."
+msgid "Font size divisible by"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Font size of the fallback font in point (pt)."
+msgid "Font size of the default font where 1 unit = 1 pixel at 96 DPI"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Font size of the monospace font in point (pt)."
+msgid "Font size of the monospace font where 1 unit = 1 pixel at 96 DPI"
msgstr ""
#: src/settings_translation_file.cpp
@@ -3160,6 +3409,17 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"For pixel-style fonts that do not scale well, this ensures that font sizes "
+"used\n"
+"with this font will always be divisible by this value, in pixels. For "
+"instance,\n"
+"a pixel font 16 pixels tall should have this set to 16, so it will only ever "
+"be\n"
+"sized 16, 32, 48, etc., so a mod requesting a size of 25 will get 32."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Format of player chat messages. The following strings are valid "
"placeholders:\n"
"@name, @message, @timestamp (optional)"
@@ -3218,10 +3478,6 @@ msgid "Fraction of the visible distance at which fog starts to be rendered"
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)."
@@ -3246,10 +3502,6 @@ msgid "Full screen"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Full screen BPP"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Fullscreen mode."
msgstr ""
@@ -3273,7 +3525,7 @@ msgstr ""
msgid ""
"Global map generation attributes.\n"
"In Mapgen v6 the 'decorations' flag controls all decorations except trees\n"
-"and junglegrass, in all other mapgens this flag controls all decorations."
+"and jungle grass, in all other mapgens this flag controls all decorations."
msgstr ""
#: src/settings_translation_file.cpp
@@ -3342,7 +3594,8 @@ msgid "Heat noise"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Height component of the initial window size."
+msgid ""
+"Height component of the initial window size. Ignored in fullscreen mode."
msgstr ""
#: src/settings_translation_file.cpp
@@ -3354,10 +3607,6 @@ msgid "Height select noise"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "High-precision FPU"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Hill steepness"
msgstr ""
@@ -3588,8 +3837,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"If disabled, \"special\" key is used to fly fast if both fly and fast mode "
-"are\n"
+"If disabled, \"Aux1\" key is used to fly fast if both fly and fast mode are\n"
"enabled."
msgstr ""
@@ -3611,8 +3859,8 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"If enabled, \"special\" key instead of \"sneak\" key is used for climbing "
-"down and\n"
+"If enabled, \"Aux1\" key instead of \"Sneak\" key is used for climbing down "
+"and\n"
"descending."
msgstr ""
@@ -3658,6 +3906,12 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"If the execution of a chat command takes longer than this specified time in\n"
+"seconds, add the time information to the chat command message"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"If the file size of debug.txt exceeds the number of megabytes specified in\n"
"this setting when it is opened, the file is moved to debug.txt.1,\n"
"deleting an older debug.txt.1 if it exists.\n"
@@ -3703,7 +3957,7 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Instrument chatcommands on registration."
+msgid "Instrument chat commands on registration."
msgstr ""
#: src/settings_translation_file.cpp
@@ -3787,7 +4041,7 @@ msgid "Joystick button repetition interval"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Joystick deadzone"
+msgid "Joystick dead zone"
msgstr ""
#: src/settings_translation_file.cpp
@@ -4545,10 +4799,6 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Makes DirectX work with LuaJIT. Disable if it causes troubles."
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "Makes all liquids opaque"
msgstr ""
@@ -4620,6 +4870,10 @@ msgid "Map save interval"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Map shadows update frames"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Mapblock limit"
msgstr ""
@@ -4728,6 +4982,10 @@ msgid "Maximum FPS when the window is not focused, or when the game is paused."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Maximum distance to render shadows."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Maximum forceloaded blocks"
msgstr ""
@@ -4778,6 +5036,9 @@ msgid ""
"be queued.\n"
"This should be lower than curl_parallel_limit."
msgstr ""
+"Số lượt tải xuống đồng thá»i tối Ä‘a. Tải xuống vượt quá giá»›i hạn sẽ được xếp "
+"hàng đợi.\n"
+"Giá trị này phải thấp hơn curl_parallel_limit."
#: src/settings_translation_file.cpp
msgid "Maximum number of forceloaded mapblocks."
@@ -4833,7 +5094,15 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Maximum time in ms a file download (e.g. a mod download) may take."
+msgid ""
+"Maximum time a file download (e.g. a mod download) may take, stated in "
+"milliseconds."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum time an interactive request (e.g. server list fetch) may take, "
+"stated in milliseconds."
msgstr ""
#: src/settings_translation_file.cpp
@@ -4897,7 +5166,7 @@ msgid "Mod channels"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Modifies the size of the hudbar elements."
+msgid "Modifies the size of the HUD elements."
msgstr ""
#: src/settings_translation_file.cpp
@@ -4909,6 +5178,10 @@ msgid "Monospace font size"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Monospace font size divisible by"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Mountain height noise"
msgstr ""
@@ -5029,7 +5302,7 @@ 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"
+"This is a trade-off between SQLite transaction overhead and\n"
"memory consumption (4096=100MB, as a rule of thumb)."
msgstr ""
@@ -5048,21 +5321,18 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Opaqueness (alpha) of the shadow behind the fallback font, between 0 and 255."
-msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid ""
"Open the pause menu when the window's focus is lost. Does not pause if a "
"formspec is\n"
"open."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Optional override for chat weblink color."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid ""
-"Path of the fallback font.\n"
-"If “freetype†setting is enabled: Must be a TrueType font.\n"
-"If “freetype†setting is disabled: Must be a bitmap or XML vectors font.\n"
+"Path of the fallback font. Must be a TrueType font.\n"
"This font will be used for certain languages or if the default font is "
"unavailable."
msgstr ""
@@ -5085,17 +5355,13 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Path to the default font.\n"
-"If “freetype†setting is enabled: Must be a TrueType font.\n"
-"If “freetype†setting is disabled: Must be a bitmap or XML vectors font.\n"
+"Path to the default font. Must be a TrueType font.\n"
"The fallback font will be used if the font cannot be loaded."
msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Path to the monospace font.\n"
-"If “freetype†setting is enabled: Must be a TrueType font.\n"
-"If “freetype†setting is disabled: Must be a bitmap or XML vectors font.\n"
+"Path to the monospace font. Must be a TrueType font.\n"
"This font is used for e.g. the console and profiler screen."
msgstr ""
@@ -5150,6 +5416,10 @@ msgid "Player versus player"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Poisson filtering"
+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."
@@ -5194,9 +5464,9 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"Prometheus listener address.\n"
-"If minetest is compiled with ENABLE_PROMETHEUS option enabled,\n"
+"If Minetest is compiled with ENABLE_PROMETHEUS option enabled,\n"
"enable metrics listener for Prometheus on that address.\n"
-"Metrics can be fetch on http://127.0.0.1:30000/metrics"
+"Metrics can be fetched on http://127.0.0.1:30000/metrics"
msgstr ""
#: src/settings_translation_file.cpp
@@ -5485,6 +5755,32 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Set the shadow strength.\n"
+"Lower value means lighter shadows, higher value means darker shadows."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set the soft shadow radius size.\n"
+"Lower values mean sharper shadows, bigger values mean softer shadows.\n"
+"Minimum value: 1.0; maximum value: 10.0"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set the tilt of Sun/Moon orbit in degrees.\n"
+"Value of 0 means no tilt / vertical orbit.\n"
+"Minimum value: 0.0; maximum value: 60.0"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set to true to enable Shadow Mapping.\n"
+"Requires shaders to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Set to true to enable waving leaves.\n"
"Requires shaders to be enabled."
msgstr ""
@@ -5502,6 +5798,13 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Sets shadow texture quality to 32 bits.\n"
+"On false, 16 bits texture will be used.\n"
+"This can cause much more artifacts in the shadow."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Shader path"
msgstr ""
@@ -5514,15 +5817,29 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Shadow filter quality"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Shadow map max distance in nodes to render shadows"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Shadow map texture in 32 bits"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Shadow map texture size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid ""
"Shadow offset (in pixels) of the default font. If 0, then shadow will not be "
"drawn."
msgstr ""
#: src/settings_translation_file.cpp
-msgid ""
-"Shadow offset (in pixels) of the fallback font. If 0, then shadow will not "
-"be drawn."
+msgid "Shadow strength"
msgstr ""
#: src/settings_translation_file.cpp
@@ -5544,7 +5861,7 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Show nametag backgrounds by default"
+msgid "Show name tag backgrounds by default"
msgstr ""
#: src/settings_translation_file.cpp
@@ -5569,6 +5886,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Sky Body Orbit Tilt"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Slice w"
msgstr ""
@@ -5623,15 +5944,11 @@ msgid "Sneaking speed, in nodes per second."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Sound"
+msgid "Soft shadow radius"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Special key"
-msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid "Special key for climbing/descending"
+msgid "Sound"
msgstr ""
#: src/settings_translation_file.cpp
@@ -5641,6 +5958,10 @@ msgid ""
"(obviously, remote_media should end with a slash).\n"
"Files that are not present will be fetched the usual way."
msgstr ""
+"Chỉ định URL mà từ đó ứng dụng khách tìm phương tiện thay vì sử dụng UDP.\n"
+"$filename có thể truy cập được từ $remote_media$filename qua cURL\n"
+"(trong đó, remote_media phải kết thúc bằng dấu gạch chéo).\n"
+"Các tệp không có mặt sẽ được tìm theo cách thông thưá»ng."
#: src/settings_translation_file.cpp
msgid ""
@@ -5651,6 +5972,14 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Spread a complete update of shadow map over given amount of frames.\n"
+"Higher values might make shadows laggy, lower values\n"
+"will consume more resources.\n"
+"Minimum value: 1; maximum value: 16"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Spread of light curve boost range.\n"
"Controls the width of the range to be boosted.\n"
"Standard deviation of the light curve boost Gaussian."
@@ -5757,6 +6086,13 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Texture size to render the shadow map on.\n"
+"This must be a power of two.\n"
+"Bigger numbers create better shadows but it is also more expensive."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Textures on a node may be aligned either to the node or to the world.\n"
"The former mode suits better things like machines, furniture, etc., while\n"
"the latter makes stairs and microblocks fit surroundings better.\n"
@@ -5770,7 +6106,7 @@ msgid "The URL for the content repository"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "The deadzone of the joystick"
+msgid "The dead zone of the joystick"
msgstr ""
#: src/settings_translation_file.cpp
@@ -5828,7 +6164,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"The rendering back-end for Irrlicht.\n"
+"The rendering back-end.\n"
"A restart is required after changing this.\n"
"Note: On Android, stick with OGLES1 if unsure! App may fail to start "
"otherwise.\n"
@@ -5839,7 +6175,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"The sensitivity of the joystick axes for moving the\n"
-"ingame view frustum around."
+"in-game view frustum around."
msgstr ""
#: src/settings_translation_file.cpp
@@ -5933,6 +6269,10 @@ msgid "Touch screen threshold"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Tradeoffs for performance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Trees noise"
msgstr ""
@@ -6002,7 +6342,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Use mip mapping to scale textures. May slightly increase performance,\n"
+"Use mipmapping to scale textures. May slightly increase performance,\n"
"especially when using a high resolution texture pack.\n"
"Gamma correct downscaling is not supported."
msgstr ""
@@ -6115,7 +6455,7 @@ msgid "Viewing range"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Virtual joystick triggers aux button"
+msgid "Virtual joystick triggers Aux1 button"
msgstr ""
#: src/settings_translation_file.cpp
@@ -6186,6 +6526,10 @@ msgid "Waving plants"
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Weblink color"
+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"
@@ -6206,23 +6550,15 @@ msgid ""
"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.\n"
+"memory. Powers of 2 are recommended. This setting is ONLY applied if\n"
+"bilinear/trilinear/anisotropic filtering is enabled.\n"
"This is also used as the base node texture size for world-aligned\n"
"texture autoscaling."
msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Whether FreeType fonts are used, requires FreeType support to be compiled "
-"in.\n"
-"If disabled, bitmap and XML vectors fonts are used instead."
-msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid ""
-"Whether nametag backgrounds should be shown by default.\n"
+"Whether name tag backgrounds should be shown by default.\n"
"Mods may still set a background."
msgstr ""
@@ -6238,7 +6574,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid "Whether to allow players to damage and kill each other."
-msgstr ""
+msgstr "Có cho phép ngưá»i chÆ¡i sát thương và giết lẫn nhau hay không."
#: src/settings_translation_file.cpp
msgid ""
@@ -6264,7 +6600,7 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Width component of the initial window size."
+msgid "Width component of the initial window size. Ignored in fullscreen mode."
msgstr ""
#: src/settings_translation_file.cpp
@@ -6349,34 +6685,26 @@ msgid "Y-level of seabed."
msgstr ""
#: src/settings_translation_file.cpp
-msgid ""
-"ZLib compression level to use when saving mapblocks to disk.\n"
-"-1 - Zlib's default compression level\n"
-"0 - no compresson, fastest\n"
-"9 - best compression, slowest\n"
-"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)"
-msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid ""
-"ZLib compression level to use when sending mapblocks to the client.\n"
-"-1 - Zlib's default compression level\n"
-"0 - no compresson, fastest\n"
-"9 - best compression, slowest\n"
-"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)"
-msgstr ""
+msgid "cURL file download timeout"
+msgstr "Hết thá»i gian chá» tải xuống tệp trong cURL"
#: src/settings_translation_file.cpp
-msgid "cURL file download timeout"
-msgstr ""
+msgid "cURL interactive timeout"
+msgstr "Hết thá»i gian tương tác vá»›i cURL"
#: src/settings_translation_file.cpp
msgid "cURL parallel limit"
-msgstr ""
+msgstr "Gặp giới hạn số lượng tệp tải xuống trong cURL"
-#: src/settings_translation_file.cpp
-msgid "cURL timeout"
-msgstr ""
+#~ msgid "- Creative Mode: "
+#~ msgstr "- Chế độ sáng tạo: "
+
+#~ msgid "- Damage: "
+#~ msgstr "- Tổn hại: "
#~ msgid "Ok"
#~ msgstr "ÄÆ°á»£c"
+
+#, fuzzy
+#~ msgid "You died."
+#~ msgstr "Bạn đã chết"
diff --git a/po/yue/minetest.po b/po/yue/minetest.po
new file mode 100644
index 000000000..45631b422
--- /dev/null
+++ b/po/yue/minetest.po
@@ -0,0 +1,6638 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the minetest package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: minetest\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2022-01-25 23:19+0100\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: Automatically generated\n"
+"Language-Team: none\n"
+"Language: yue\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: builtin/client/chatcommands.lua
+msgid "Clear the out chat queue"
+msgstr ""
+
+#: builtin/client/chatcommands.lua
+msgid "Empty command."
+msgstr ""
+
+#: builtin/client/chatcommands.lua
+msgid "Exit to main menu"
+msgstr ""
+
+#: builtin/client/chatcommands.lua
+msgid "Invalid command: "
+msgstr ""
+
+#: builtin/client/chatcommands.lua
+msgid "Issued command: "
+msgstr ""
+
+#: builtin/client/chatcommands.lua
+msgid "List online players"
+msgstr ""
+
+#: builtin/client/chatcommands.lua
+msgid "Online players: "
+msgstr ""
+
+#: builtin/client/chatcommands.lua
+msgid "The out chat queue is now empty."
+msgstr ""
+
+#: builtin/client/chatcommands.lua
+msgid "This command is disabled by server."
+msgstr ""
+
+#: builtin/client/death_formspec.lua src/client/game.cpp
+msgid "Respawn"
+msgstr ""
+
+#: builtin/client/death_formspec.lua src/client/game.cpp
+msgid "You died"
+msgstr ""
+
+#: builtin/common/chatcommands.lua
+msgid "Available commands:"
+msgstr ""
+
+#: builtin/common/chatcommands.lua
+msgid "Available commands: "
+msgstr ""
+
+#: builtin/common/chatcommands.lua
+msgid "Command not available: "
+msgstr ""
+
+#: builtin/common/chatcommands.lua
+msgid "Get help for commands"
+msgstr ""
+
+#: builtin/common/chatcommands.lua
+msgid ""
+"Use '.help <cmd>' to get more information, or '.help all' to list everything."
+msgstr ""
+
+#: builtin/common/chatcommands.lua
+msgid "[all | <cmd>]"
+msgstr ""
+
+#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp
+msgid "OK"
+msgstr ""
+
+#: builtin/fstk/ui.lua
+msgid "<none available>"
+msgstr ""
+
+#: builtin/fstk/ui.lua
+msgid "An error occurred in a Lua script:"
+msgstr ""
+
+#: builtin/fstk/ui.lua
+msgid "An error occurred:"
+msgstr ""
+
+#: builtin/fstk/ui.lua
+msgid "Main menu"
+msgstr ""
+
+#: builtin/fstk/ui.lua
+msgid "Reconnect"
+msgstr ""
+
+#: builtin/fstk/ui.lua
+msgid "The server has requested a reconnect:"
+msgstr ""
+
+#: 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 "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_contentstore.lua
+#: builtin/mainmenu/dlg_create_world.lua
+#: builtin/mainmenu/dlg_delete_content.lua
+#: builtin/mainmenu/dlg_delete_world.lua
+#: builtin/mainmenu/dlg_rename_modpack.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua src/client/keycode.cpp
+#: src/gui/guiConfirmRegistration.cpp src/gui/guiKeyChangeMenu.cpp
+#: src/gui/guiPasswordChange.cpp
+msgid "Cancel"
+msgstr ""
+
+#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/dlg_contentstore.lua
+#: builtin/mainmenu/tab_content.lua
+msgid "Dependencies:"
+msgstr ""
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "Disable all"
+msgstr ""
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "Disable modpack"
+msgstr ""
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "Enable all"
+msgstr ""
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "Enable modpack"
+msgstr ""
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid ""
+"Failed to enable mod \"$1\" as it contains disallowed characters. Only "
+"characters [a-z0-9_] are allowed."
+msgstr ""
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "Find More Mods"
+msgstr ""
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "Mod:"
+msgstr ""
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "No (optional) dependencies"
+msgstr ""
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "No game description provided."
+msgstr ""
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "No hard dependencies"
+msgstr ""
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "No modpack description provided."
+msgstr ""
+
+#: builtin/mainmenu/dlg_config_world.lua
+msgid "No optional dependencies"
+msgstr ""
+
+#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_content.lua
+msgid "Optional dependencies:"
+msgstr ""
+
+#: builtin/mainmenu/dlg_config_world.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua src/gui/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_contentstore.lua
+msgid "\"$1\" already exists. Would you like to overwrite it?"
+msgstr ""
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "$1 and $2 dependencies will be installed."
+msgstr ""
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "$1 by $2"
+msgstr ""
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid ""
+"$1 downloading,\n"
+"$2 queued"
+msgstr ""
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "$1 downloading..."
+msgstr ""
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "$1 required dependencies could not be found."
+msgstr ""
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "$1 will be installed, and $2 dependencies will be skipped."
+msgstr ""
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "All packages"
+msgstr ""
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "Already installed"
+msgstr ""
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "Back to Main Menu"
+msgstr ""
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "Base Game:"
+msgstr ""
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "ContentDB is not available when Minetest was compiled without cURL"
+msgstr ""
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "Downloading..."
+msgstr ""
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "Failed to download $1"
+msgstr ""
+
+#: builtin/mainmenu/dlg_contentstore.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Games"
+msgstr ""
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "Install"
+msgstr ""
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "Install $1"
+msgstr ""
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "Install missing dependencies"
+msgstr ""
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "Install: Unsupported file type or broken archive"
+msgstr ""
+
+#: builtin/mainmenu/dlg_contentstore.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Mods"
+msgstr ""
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "No packages could be retrieved"
+msgstr ""
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "No results"
+msgstr ""
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "No updates"
+msgstr ""
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "Not found"
+msgstr ""
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "Overwrite"
+msgstr ""
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "Please check that the base game is correct."
+msgstr ""
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "Queued"
+msgstr ""
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "Texture packs"
+msgstr ""
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "Uninstall"
+msgstr ""
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "Update"
+msgstr ""
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "Update All [$1]"
+msgstr ""
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "View more information in a web browser"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "A world named \"$1\" already exists"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Additional terrain"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
+msgid "Altitude chill"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Altitude dry"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Biome blending"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Biomes"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Caverns"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Caves"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Create"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Decorations"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Download a game, 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
+msgid "Dungeons"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Flat terrain"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Floating landmasses in the sky"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Floatlands (experimental)"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
+msgid "Game"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Generate non-fractal terrain: Oceans and underground"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Hills"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Humid rivers"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Increases humidity around rivers"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Lakes"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Low humidity and high heat causes shallow or dry rivers"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
+msgid "Mapgen"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
+msgid "Mapgen flags"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Mapgen-specific flags"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Mountains"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Mud flow"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Network of tunnels and caves"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "No game selected"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Reduces heat with altitude"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Reduces humidity with altitude"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Rivers"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Sea level rivers"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Seed"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Smooth transition between biomes"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid ""
+"Structures appearing on the terrain (no effect on trees and jungle grass "
+"created by v6)"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Structures appearing on the terrain, typically trees and plants"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Temperate, Desert"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Temperate, Desert, Jungle"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Temperate, Desert, Jungle, Tundra, Taiga"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Terrain surface erosion"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Trees and jungle grass"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Vary river depth"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Very large caverns deep in the underground"
+msgstr ""
+
+#: builtin/mainmenu/dlg_create_world.lua
+msgid "Warning: The 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 games installed."
+msgstr ""
+
+#: builtin/mainmenu/dlg_delete_content.lua
+msgid "Are you sure you want to delete \"$1\"?"
+msgstr ""
+
+#: builtin/mainmenu/dlg_delete_content.lua
+#: builtin/mainmenu/dlg_delete_world.lua builtin/mainmenu/tab_local.lua
+#: src/client/keycode.cpp
+msgid "Delete"
+msgstr ""
+
+#: builtin/mainmenu/dlg_delete_content.lua
+msgid "pkgmgr: failed to delete \"$1\""
+msgstr ""
+
+#: builtin/mainmenu/dlg_delete_content.lua
+msgid "pkgmgr: invalid path \"$1\""
+msgstr ""
+
+#: builtin/mainmenu/dlg_delete_world.lua
+msgid "Delete World \"$1\"?"
+msgstr ""
+
+#: builtin/mainmenu/dlg_rename_modpack.lua
+msgid "Accept"
+msgstr ""
+
+#: builtin/mainmenu/dlg_rename_modpack.lua
+msgid "Rename Modpack:"
+msgstr ""
+
+#: builtin/mainmenu/dlg_rename_modpack.lua
+msgid ""
+"This modpack has an explicit name given in its modpack.conf which will "
+"override any renaming here."
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "(No description of setting given)"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "2D Noise"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "< Back to Settings page"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Browse"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_settings.lua
+msgid "Disabled"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Edit"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Enabled"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Lacunarity"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Octaves"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua src/settings_translation_file.cpp
+msgid "Offset"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Persistence"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Please enter a valid integer."
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Please enter a valid number."
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Restore Default"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua src/settings_translation_file.cpp
+msgid "Scale"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_online.lua
+msgid "Search"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Select directory"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Select file"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Show technical names"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "The value must be at least $1."
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "The value must not be larger than $1."
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "X"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "X spread"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Y"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Y spread"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Z"
+msgstr ""
+
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "Z spread"
+msgstr ""
+
+#. ~ "absvalue" is a noise parameter flag.
+#. It is short for "absolute value".
+#. It can be enabled in noise settings in
+#. main menu -> "All Settings".
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "absvalue"
+msgstr ""
+
+#. ~ "defaults" is a noise parameter flag.
+#. It describes the default processing options
+#. for noise settings in main menu -> "All Settings".
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "defaults"
+msgstr ""
+
+#. ~ "eased" is a noise parameter flag.
+#. It is used to make the map smoother and
+#. can be enabled in noise settings in
+#. main menu -> "All Settings".
+#: builtin/mainmenu/dlg_settings_advanced.lua
+msgid "eased"
+msgstr ""
+
+#: builtin/mainmenu/pkgmgr.lua
+msgid "$1 (Enabled)"
+msgstr ""
+
+#: builtin/mainmenu/pkgmgr.lua
+msgid "$1 mods"
+msgstr ""
+
+#: builtin/mainmenu/pkgmgr.lua
+msgid "Failed to install $1 to $2"
+msgstr ""
+
+#: builtin/mainmenu/pkgmgr.lua
+msgid "Install Mod: Unable to find real mod name for: $1"
+msgstr ""
+
+#: builtin/mainmenu/pkgmgr.lua
+msgid "Install Mod: Unable to find suitable folder name for modpack $1"
+msgstr ""
+
+#: builtin/mainmenu/pkgmgr.lua
+msgid "Unable to find a valid mod or modpack"
+msgstr ""
+
+#: builtin/mainmenu/pkgmgr.lua
+msgid "Unable to install a $1 as a texture pack"
+msgstr ""
+
+#: builtin/mainmenu/pkgmgr.lua
+msgid "Unable to install a game as a $1"
+msgstr ""
+
+#: builtin/mainmenu/pkgmgr.lua
+msgid "Unable to install a mod as a $1"
+msgstr ""
+
+#: builtin/mainmenu/pkgmgr.lua
+msgid "Unable to install a modpack as a $1"
+msgstr ""
+
+#: builtin/mainmenu/serverlistmgr.lua src/client/game.cpp
+msgid "Loading..."
+msgstr ""
+
+#: builtin/mainmenu/serverlistmgr.lua
+msgid "Public server list is disabled"
+msgstr ""
+
+#: builtin/mainmenu/serverlistmgr.lua
+msgid "Try reenabling public serverlist and check your internet connection."
+msgstr ""
+
+#: builtin/mainmenu/tab_about.lua
+msgid "About"
+msgstr ""
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Active Contributors"
+msgstr ""
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Active renderer:"
+msgstr ""
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Core Developers"
+msgstr ""
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Open User Data Directory"
+msgstr ""
+
+#: builtin/mainmenu/tab_about.lua
+msgid ""
+"Opens the directory that contains user-provided worlds, games, mods,\n"
+"and texture packs in a file manager / explorer."
+msgstr ""
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Previous Contributors"
+msgstr ""
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Previous Core Developers"
+msgstr ""
+
+#: builtin/mainmenu/tab_content.lua
+msgid "Browse online content"
+msgstr ""
+
+#: builtin/mainmenu/tab_content.lua
+msgid "Content"
+msgstr ""
+
+#: builtin/mainmenu/tab_content.lua
+msgid "Disable Texture Pack"
+msgstr ""
+
+#: builtin/mainmenu/tab_content.lua
+msgid "Information:"
+msgstr ""
+
+#: builtin/mainmenu/tab_content.lua
+msgid "Installed Packages:"
+msgstr ""
+
+#: builtin/mainmenu/tab_content.lua
+msgid "No dependencies."
+msgstr ""
+
+#: builtin/mainmenu/tab_content.lua
+msgid "No package description available"
+msgstr ""
+
+#: builtin/mainmenu/tab_content.lua
+msgid "Rename"
+msgstr ""
+
+#: builtin/mainmenu/tab_content.lua
+msgid "Uninstall Package"
+msgstr ""
+
+#: builtin/mainmenu/tab_content.lua
+msgid "Use Texture Pack"
+msgstr ""
+
+#: builtin/mainmenu/tab_local.lua
+msgid "Announce Server"
+msgstr ""
+
+#: builtin/mainmenu/tab_local.lua
+msgid "Bind Address"
+msgstr ""
+
+#: builtin/mainmenu/tab_local.lua
+msgid "Creative Mode"
+msgstr ""
+
+#: builtin/mainmenu/tab_local.lua
+msgid "Enable Damage"
+msgstr ""
+
+#: builtin/mainmenu/tab_local.lua
+msgid "Host Game"
+msgstr ""
+
+#: builtin/mainmenu/tab_local.lua
+msgid "Host Server"
+msgstr ""
+
+#: builtin/mainmenu/tab_local.lua
+msgid "Install games from ContentDB"
+msgstr ""
+
+#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
+msgid "Name"
+msgstr ""
+
+#: builtin/mainmenu/tab_local.lua
+msgid "New"
+msgstr ""
+
+#: builtin/mainmenu/tab_local.lua
+msgid "No world created or selected!"
+msgstr ""
+
+#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
+msgid "Password"
+msgstr ""
+
+#: builtin/mainmenu/tab_local.lua
+msgid "Play Game"
+msgstr ""
+
+#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
+msgid "Port"
+msgstr ""
+
+#: builtin/mainmenu/tab_local.lua
+msgid "Select Mods"
+msgstr ""
+
+#: builtin/mainmenu/tab_local.lua
+msgid "Select World:"
+msgstr ""
+
+#: builtin/mainmenu/tab_local.lua
+msgid "Server Port"
+msgstr ""
+
+#: builtin/mainmenu/tab_local.lua
+msgid "Start Game"
+msgstr ""
+
+#: builtin/mainmenu/tab_online.lua
+msgid "Address"
+msgstr ""
+
+#: builtin/mainmenu/tab_online.lua src/client/keycode.cpp
+msgid "Clear"
+msgstr ""
+
+#: builtin/mainmenu/tab_online.lua
+msgid "Connect"
+msgstr ""
+
+#: builtin/mainmenu/tab_online.lua
+msgid "Creative mode"
+msgstr ""
+
+#. ~ PvP = Player versus Player
+#: builtin/mainmenu/tab_online.lua
+msgid "Damage / PvP"
+msgstr ""
+
+#: builtin/mainmenu/tab_online.lua
+msgid "Del. Favorite"
+msgstr ""
+
+#: builtin/mainmenu/tab_online.lua
+msgid "Favorites"
+msgstr ""
+
+#: builtin/mainmenu/tab_online.lua
+msgid "Incompatible Servers"
+msgstr ""
+
+#: builtin/mainmenu/tab_online.lua
+msgid "Join Game"
+msgstr ""
+
+#: builtin/mainmenu/tab_online.lua
+msgid "Ping"
+msgstr ""
+
+#: builtin/mainmenu/tab_online.lua
+msgid "Public Servers"
+msgstr ""
+
+#: builtin/mainmenu/tab_online.lua
+msgid "Refresh"
+msgstr ""
+
+#: builtin/mainmenu/tab_online.lua
+msgid "Server Description"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "2x"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "3D Clouds"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "4x"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "8x"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "All Settings"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Antialiasing:"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Autosave Screen Size"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Bilinear Filter"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua src/client/game.cpp
+msgid "Change Keys"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Connected Glass"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
+msgid "Dynamic shadows"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Dynamic shadows: "
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Fancy Leaves"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "High"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Low"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Medium"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Mipmap"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Mipmap + Aniso. Filter"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "No Filter"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "No Mipmap"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Node Highlighting"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Node Outlining"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "None"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Opaque Leaves"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Opaque Water"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Particles"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Screen:"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Settings"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
+msgid "Shaders"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Shaders (experimental)"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Shaders (unavailable)"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Simple Leaves"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Smooth Lighting"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Texturing:"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
+msgid "Tone Mapping"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Touchthreshold: (px)"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Trilinear Filter"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Ultra High"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Very Low"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Waving Leaves"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Waving Liquids"
+msgstr ""
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Waving Plants"
+msgstr ""
+
+#: src/client/client.cpp src/client/game.cpp
+msgid "Connection timed out."
+msgstr ""
+
+#: src/client/client.cpp
+msgid "Done!"
+msgstr ""
+
+#: src/client/client.cpp
+msgid "Initializing nodes"
+msgstr ""
+
+#: src/client/client.cpp
+msgid "Initializing nodes..."
+msgstr ""
+
+#: src/client/client.cpp
+msgid "Loading textures..."
+msgstr ""
+
+#: src/client/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 "Please choose a name!"
+msgstr ""
+
+#: src/client/clientlauncher.cpp
+msgid "Provided password file failed to open: "
+msgstr ""
+
+#: src/client/clientlauncher.cpp
+msgid "Provided world path doesn't exist: "
+msgstr ""
+
+#: src/client/game.cpp
+msgid ""
+"\n"
+"Check debug.txt for details."
+msgstr ""
+
+#: src/client/game.cpp
+msgid "- Address: "
+msgstr ""
+
+#: src/client/game.cpp
+msgid "- Mode: "
+msgstr ""
+
+#: src/client/game.cpp
+msgid "- Port: "
+msgstr ""
+
+#: src/client/game.cpp
+msgid "- Public: "
+msgstr ""
+
+#. ~ PvP = Player versus Player
+#: src/client/game.cpp
+msgid "- PvP: "
+msgstr ""
+
+#: src/client/game.cpp
+msgid "- Server Name: "
+msgstr ""
+
+#: src/client/game.cpp
+msgid "A serialization error occurred:"
+msgstr ""
+
+#: src/client/game.cpp
+#, c-format
+msgid "Access denied. Reason: %s"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Automatic forward disabled"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Automatic forward enabled"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Block bounds hidden"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Block bounds shown for all blocks"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Block bounds shown for current block"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Block bounds shown for nearby blocks"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Camera update disabled"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Camera update enabled"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Can't show block bounds (need 'basic_debug' privilege)"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Change Password"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Cinematic mode disabled"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Cinematic mode enabled"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Client disconnected"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Client side scripting is disabled"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Connecting to server..."
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Connection failed for unknown reason"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Continue"
+msgstr ""
+
+#: src/client/game.cpp
+#, c-format
+msgid ""
+"Controls:\n"
+"- %s: move forwards\n"
+"- %s: move backwards\n"
+"- %s: move left\n"
+"- %s: move right\n"
+"- %s: jump/climb up\n"
+"- %s: dig/punch\n"
+"- %s: place/use\n"
+"- %s: sneak/climb down\n"
+"- %s: drop item\n"
+"- %s: inventory\n"
+"- Mouse: turn/look\n"
+"- Mouse wheel: select item\n"
+"- %s: chat\n"
+msgstr ""
+
+#: src/client/game.cpp
+#, c-format
+msgid "Couldn't resolve address: %s"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Creating client..."
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Creating server..."
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Debug info and profiler graph hidden"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Debug info shown"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Debug info, profiler graph, and wireframe hidden"
+msgstr ""
+
+#: src/client/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/client/game.cpp
+msgid "Disabled unlimited viewing range"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Enabled unlimited viewing range"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Exit to Menu"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Exit to OS"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Fast mode disabled"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Fast mode enabled"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Fast mode enabled (note: no 'fast' privilege)"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Fly mode disabled"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Fly mode enabled"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Fly mode enabled (note: no 'fly' privilege)"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Fog disabled"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Fog enabled"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Game info:"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Game paused"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Hosting server"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Item definitions..."
+msgstr ""
+
+#: src/client/game.cpp
+msgid "KiB/s"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Media..."
+msgstr ""
+
+#: src/client/game.cpp
+msgid "MiB/s"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Minimap currently disabled by game or mod"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Multiplayer"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Noclip mode disabled"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Noclip mode enabled"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Noclip mode enabled (note: no 'noclip' privilege)"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Node definitions..."
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Off"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "On"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Pitch move mode disabled"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Pitch move mode enabled"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Profiler graph shown"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Remote server"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Resolving address..."
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Shutting down..."
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Singleplayer"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Sound Volume"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Sound muted"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Sound system is disabled"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Sound system is not supported on this build"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Sound unmuted"
+msgstr ""
+
+#: src/client/game.cpp
+#, c-format
+msgid "The server is probably running a different version of %s."
+msgstr ""
+
+#: src/client/game.cpp
+#, c-format
+msgid "Unable to connect to %s because IPv6 is disabled"
+msgstr ""
+
+#: src/client/game.cpp
+#, c-format
+msgid "Unable to listen on %s because IPv6 is disabled"
+msgstr ""
+
+#: src/client/game.cpp
+#, c-format
+msgid "Viewing range changed to %d"
+msgstr ""
+
+#: src/client/game.cpp
+#, c-format
+msgid "Viewing range is at maximum: %d"
+msgstr ""
+
+#: src/client/game.cpp
+#, c-format
+msgid "Viewing range is at minimum: %d"
+msgstr ""
+
+#: src/client/game.cpp
+#, c-format
+msgid "Volume changed to %d%%"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Wireframe shown"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Zoom currently disabled by game or mod"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "ok"
+msgstr ""
+
+#: src/client/gameui.cpp
+msgid "Chat hidden"
+msgstr ""
+
+#: src/client/gameui.cpp
+msgid "Chat shown"
+msgstr ""
+
+#: src/client/gameui.cpp
+msgid "HUD hidden"
+msgstr ""
+
+#: src/client/gameui.cpp
+msgid "HUD shown"
+msgstr ""
+
+#: src/client/gameui.cpp
+msgid "Profiler hidden"
+msgstr ""
+
+#: src/client/gameui.cpp
+#, c-format
+msgid "Profiler shown (page %d of %d)"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Apps"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Backspace"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Caps Lock"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Control"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Down"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "End"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Erase EOF"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Execute"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Help"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Home"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "IME Accept"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "IME Convert"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "IME Escape"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "IME Mode Change"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "IME Nonconvert"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Insert"
+msgstr ""
+
+#: src/client/keycode.cpp src/gui/guiKeyChangeMenu.cpp
+msgid "Left"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Left Button"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Left Control"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Left Menu"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Left Shift"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Left Windows"
+msgstr ""
+
+#. ~ Key name, common on Windows keyboards
+#: src/client/keycode.cpp
+msgid "Menu"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Middle Button"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Num Lock"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Numpad *"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Numpad +"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Numpad -"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Numpad ."
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Numpad /"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Numpad 0"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Numpad 1"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Numpad 2"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Numpad 3"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Numpad 4"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Numpad 5"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Numpad 6"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Numpad 7"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Numpad 8"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Numpad 9"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "OEM Clear"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Page down"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Page up"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Pause"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Play"
+msgstr ""
+
+#. ~ "Print screen" key
+#: src/client/keycode.cpp
+msgid "Print"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Return"
+msgstr ""
+
+#: src/client/keycode.cpp src/gui/guiKeyChangeMenu.cpp
+msgid "Right"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Right Button"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Right Control"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Right Menu"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Right Shift"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Right Windows"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Scroll Lock"
+msgstr ""
+
+#. ~ Key name
+#: src/client/keycode.cpp
+msgid "Select"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Shift"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Sleep"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Snapshot"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Space"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Tab"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "Up"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "X Button 1"
+msgstr ""
+
+#: src/client/keycode.cpp
+msgid "X Button 2"
+msgstr ""
+
+#: src/client/keycode.cpp src/gui/guiKeyChangeMenu.cpp
+msgid "Zoom"
+msgstr ""
+
+#: src/client/minimap.cpp
+msgid "Minimap hidden"
+msgstr ""
+
+#: src/client/minimap.cpp
+#, c-format
+msgid "Minimap in radar mode, Zoom x%d"
+msgstr ""
+
+#: src/client/minimap.cpp
+#, c-format
+msgid "Minimap in surface mode, Zoom x%d"
+msgstr ""
+
+#: src/client/minimap.cpp
+msgid "Minimap in texture mode"
+msgstr ""
+
+#: src/gui/guiChatConsole.cpp
+msgid "Failed to open webpage"
+msgstr ""
+
+#: src/gui/guiChatConsole.cpp
+msgid "Opening webpage"
+msgstr ""
+
+#: src/gui/guiConfirmRegistration.cpp src/gui/guiPasswordChange.cpp
+msgid "Passwords do not match!"
+msgstr ""
+
+#: src/gui/guiConfirmRegistration.cpp
+msgid "Register and Join"
+msgstr ""
+
+#: src/gui/guiConfirmRegistration.cpp
+#, c-format
+msgid ""
+"You are about to join this server with the name \"%s\" for the first time.\n"
+"If you proceed, a new account using your credentials will be created on this "
+"server.\n"
+"Please retype your password and click 'Register and Join' to confirm account "
+"creation, or click 'Cancel' to abort."
+msgstr ""
+
+#: src/gui/guiFormSpecMenu.cpp
+msgid "Proceed"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "\"Aux1\" = climb down"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Autoforward"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp src/settings_translation_file.cpp
+msgid "Automatic jumping"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Aux1"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Backward"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Block bounds"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Change camera"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Chat"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Command"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Console"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Dec. range"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Dec. volume"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Double tap \"jump\" to toggle fly"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Drop"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Forward"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Inc. range"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Inc. volume"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Inventory"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Jump"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Key already in use"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Local command"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Mute"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Next item"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Prev. item"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Range select"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp src/settings_translation_file.cpp
+msgid "Screenshot"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Sneak"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Toggle HUD"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Toggle chat log"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Toggle fast"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Toggle fly"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Toggle fog"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Toggle minimap"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Toggle noclip"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "Toggle pitchmove"
+msgstr ""
+
+#: src/gui/guiKeyChangeMenu.cpp
+msgid "press key"
+msgstr ""
+
+#: src/gui/guiPasswordChange.cpp
+msgid "Change"
+msgstr ""
+
+#: src/gui/guiPasswordChange.cpp
+msgid "Confirm Password"
+msgstr ""
+
+#: src/gui/guiPasswordChange.cpp
+msgid "New Password"
+msgstr ""
+
+#: src/gui/guiPasswordChange.cpp
+msgid "Old Password"
+msgstr ""
+
+#: src/gui/guiVolumeChange.cpp
+msgid "Exit"
+msgstr ""
+
+#: src/gui/guiVolumeChange.cpp
+msgid "Muted"
+msgstr ""
+
+#: src/gui/guiVolumeChange.cpp
+#, c-format
+msgid "Sound Volume: %d%%"
+msgstr ""
+
+#. ~ Imperative, as in "Enter/type in text".
+#. Don't forget the space.
+#: src/gui/modalMenu.cpp
+msgid "Enter "
+msgstr ""
+
+#. ~ DO NOT TRANSLATE THIS LITERALLY!
+#. This is a special string which needs to contain the translation's
+#. language code (e.g. "de" for German).
+#: src/network/clientpackethandler.cpp src/script/lua_api/l_client.cpp
+msgid "LANG_CODE"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"(Android) Fixes the position of virtual joystick.\n"
+"If disabled, virtual joystick will center to first-touch's position."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"(Android) Use virtual joystick to trigger \"Aux1\" button.\n"
+"If enabled, virtual joystick will also tap \"Aux1\" button when out of main "
+"circle."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"(X,Y,Z) offset of fractal from world center in units of 'scale'.\n"
+"Can be used to move a desired point to (0, 0) to create a\n"
+"suitable spawn point, or to allow 'zooming in' on a desired\n"
+"point by increasing 'scale'.\n"
+"The default is tuned for a suitable spawn point for Mandelbrot\n"
+"sets with default parameters, it may need altering in other\n"
+"situations.\n"
+"Range roughly -2 to 2. Multiply by 'scale' for offset in nodes."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"(X,Y,Z) scale of fractal in nodes.\n"
+"Actual fractal size will be 2 to 3 times larger.\n"
+"These numbers can be made very large, the fractal does\n"
+"not have to fit inside the world.\n"
+"Increase these to 'zoom' into the detail of the fractal.\n"
+"Default is for a vertically-squashed shape suitable for\n"
+"an island, set all 3 numbers equal for the raw shape."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "2D noise that controls the shape/size of ridged mountains."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "2D noise that controls the shape/size of rolling hills."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "2D noise that controls the shape/size of step mountains."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "2D noise that controls the size/occurrence of ridged mountain ranges."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "2D noise that controls the size/occurrence of rolling hills."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "2D noise that controls the size/occurrence of step mountain ranges."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "2D noise that locates the river valleys and channels."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "3D clouds"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "3D mode"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "3D mode parallax strength"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "3D noise defining giant caverns."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"3D noise defining mountain structure and height.\n"
+"Also defines structure of floatland mountain terrain."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"3D noise defining structure of floatlands.\n"
+"If altered from the default, the noise 'scale' (0.7 by default) may need\n"
+"to be adjusted, as floatland tapering functions best when this noise has\n"
+"a value range of approximately -2.0 to 2.0."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "3D noise defining structure of river canyon walls."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "3D noise defining terrain."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "3D noise for mountain overhangs, cliffs, etc. Usually small variations."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "3D noise that determines number of dungeons per mapchunk."
+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.\n"
+"- crossview: Cross-eyed 3d\n"
+"- pageflip: quadbuffer based 3d.\n"
+"Note that the interlaced mode requires shaders to be enabled."
+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 "ABM interval"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "ABM time budget"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Absolute limit of queued blocks to emerge"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Acceleration in air"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Acceleration of gravity, in nodes per second per second."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Active Block Modifiers"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Active block management interval"
+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 "Adds particles when digging a node."
+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 detected display density, used for scaling UI elements."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, c-format
+msgid ""
+"Adjusts the density of the floatland layer.\n"
+"Increase value to increase density. Can be positive or negative.\n"
+"Value = 0.0: 50% of volume is floatland.\n"
+"Value = 2.0 (can be higher depending on 'mgv7_np_floatland', always test\n"
+"to be sure) creates a solid floatland layer."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Advanced"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Alters the light curve by applying 'gamma correction' to it.\n"
+"Higher values make middle and lower light levels brighter.\n"
+"Value '1.0' leaves the light curve unaltered.\n"
+"This only has significant effect on daylight and artificial\n"
+"light, it has very little effect on natural night light."
+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 "Amount of messages a player may send per 10 seconds."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Amplifies the valleys."
+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."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Append item name"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Append item name to tooltip."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Apple trees noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Arm inertia"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Arm inertia, gives a more realistic movement of\n"
+"the arm when the camera moves."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Ask to reconnect after crash"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"At this distance the server will aggressively optimize which blocks are sent "
+"to\n"
+"clients.\n"
+"Small values potentially improve performance a lot, at the expense of "
+"visible\n"
+"rendering glitches (some blocks will not be rendered under water and in "
+"caves,\n"
+"as well as sometimes on land).\n"
+"Setting this to a value greater than max_block_send_distance disables this\n"
+"optimization.\n"
+"Stated in mapblocks (16 nodes)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Automatic forward key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Automatically jump up single-node obstacles."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Automatically report to the serverlist."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Autosave screen size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Autoscaling mode"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Aux1 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Aux1 key for climbing/descending"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Backward key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Base ground level"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Base terrain height."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Basic"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Basic privileges"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Beach noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Beach noise threshold"
+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 "Biome API temperature and humidity noise parameters"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Biome noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Block send optimize distance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Bold and italic font path"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Bold and italic monospace font path"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Bold font path"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Bold monospace font path"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Build inside player"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Builtin"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Camera 'near clipping plane' distance in nodes, between 0 and 0.25\n"
+"Only works on GLES platforms. Most users will not need to change this.\n"
+"Increasing can reduce artifacting on weaker GPUs.\n"
+"0.1 = Default, 0.25 = Good value for weaker tablets."
+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 "Cave noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Cave noise #1"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Cave noise #2"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Cave width"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Cave1 noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Cave2 noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Cavern limit"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Cavern noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Cavern taper"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Cavern threshold"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Cavern upper limit"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Center of light curve boost range.\n"
+"Where 0.0 is minimum light level, 1.0 is maximum light level."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Chat command time message threshold"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Chat commands"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Chat font size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Chat key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Chat log level"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Chat message count limit"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Chat message format"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Chat message kick threshold"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Chat message max length"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Chat toggle key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Chat weblinks"
+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 ""
+"Clickable weblinks (middle-click or Ctrl+left-click) enabled in chat console "
+"output."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Client"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Client and Server"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Client modding"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Client side modding restrictions"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Client side node lookup range restriction"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Climbing speed"
+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 "Colored shadows"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Comma-separated list of flags to hide in the content repository.\n"
+"\"nonfree\" can be used to hide packages which do not qualify as 'free "
+"software',\n"
+"as defined by the Free Software Foundation.\n"
+"You can also specify content ratings.\n"
+"These flags are independent from Minetest versions,\n"
+"so see a full list at https://content.minetest.net/help/content_flags/"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Comma-separated list of mods that are allowed to access HTTP APIs, which\n"
+"allow them to upload and download data to/from the internet."
+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 ""
+"Compression level to use when saving mapblocks to disk.\n"
+"-1 - use default compression level\n"
+"0 - least compression, fastest\n"
+"9 - best compression, slowest"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Compression level to use when sending mapblocks to the client.\n"
+"-1 - use default compression level\n"
+"0 - least compression, fastest\n"
+"9 - best compression, slowest"
+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 height"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "ContentDB Flag Blacklist"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "ContentDB Max Concurrent Downloads"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "ContentDB URL"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Continuous forward"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Continuous forward movement, toggled by autoforward key.\n"
+"Press the autoforward key again or the backwards movement to disable."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Controls"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Controls length of day/night cycle.\n"
+"Examples:\n"
+"72 = 20min, 360 = 4min, 1 = 24hour, 0 = day/night/whatever stays unchanged."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Controls sinking speed in liquid."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Controls steepness/depth of lake depressions."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Controls steepness/height of hills."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Controls width of tunnels, a smaller value creates wider tunnels.\n"
+"Value >= 10.0 completely disables generation of tunnels and avoids the\n"
+"intensive noise calculations."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Crash message"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Creative"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Crosshair alpha"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Crosshair alpha (opaqueness, between 0 and 255).\n"
+"This also applies to the object crosshair."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Crosshair color"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Crosshair color (R,G,B).\n"
+"Also controls the object crosshair color"
+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 file size threshold"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Debug log level"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Dec. volume key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Decrease this to increase liquid resistance to movement."
+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 report format"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Default stack size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Define shadow filtering quality.\n"
+"This simulates the soft shadows effect by applying a PCF or Poisson disk\n"
+"but also uses more resources."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Defines areas where trees have apples."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Defines areas with sandy beaches."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Defines distribution of higher terrain and steepness of cliffs."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Defines distribution of higher terrain."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Defines full size of caverns, smaller values create larger caverns."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Defines large-scale river channel structure."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Defines location and terrain of optional hills and lakes."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Defines the base ground level."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Defines the depth of the river channel."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Defines the maximal player transfer distance in blocks (0 = unlimited)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Defines the width of the river channel."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Defines the width of the river valley."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Defines tree areas and tree density."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Delay between mesh updates on the client in ms. Increasing this will slow\n"
+"down the rate of mesh updates, thus reducing jitter on slower clients."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Delay in sending blocks after building"
+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 "Depth below which you'll find giant caverns."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Depth below which you'll find large caves."
+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 "Desert noise threshold"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Deserts occur when np_biome exceeds this value.\n"
+"When the 'snowbiomes' flag is enabled, this is ignored."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Desynchronize block animation"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Dig key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Digging particles"
+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 "Display Density Scaling Factor"
+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 information."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Dungeon maximum Y"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Dungeon minimum Y"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Dungeon noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable IPv6 support (for both client and server).\n"
+"Required for IPv6 connections to work at all."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable Lua modding support on client.\n"
+"This support is experimental and API can change."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable Poisson disk filtering.\n"
+"On true uses Poisson disk to make \"soft shadows\". Otherwise uses PCF "
+"filtering."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable colored shadows.\n"
+"On true translucent nodes cast colored shadows. This is expensive."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Enable console window"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Enable creative mode for all players"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Enable joysticks"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Enable mod channels support."
+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 register confirmation"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable register confirmation when connecting to server.\n"
+"If disabled, new account will be registered automatically."
+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 vertex buffer objects.\n"
+"This should greatly improve graphics performance."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable view bobbing and amount of 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 ""
+"Enable/disable running an IPv6 server.\n"
+"Ignored if bind_address is set.\n"
+"Needs enable_ipv6 to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enables Hable's 'Uncharted 2' filmic tone mapping.\n"
+"Simulates the tone curve of photographic film and how this approximates the\n"
+"appearance of high dynamic range images. Mid-range contrast is slightly\n"
+"enhanced, highlights and shadows are gradually compressed."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Enables animation of inventory items."
+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 the sound system.\n"
+"If disabled, this completely disables all sounds everywhere and the in-game\n"
+"sound controls will be non-functional.\n"
+"Changing this setting requires a restart."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enables tradeoffs that reduce CPU load or increase rendering performance\n"
+"at the expense of minor visual glitches that do not impact game playability."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Engine profiling data print interval"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Entity methods"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Exponent of the floatland tapering. Alters the tapering behaviour.\n"
+"Value = 1.0 creates a uniform, linear tapering.\n"
+"Values > 1.0 create a smooth tapering suitable for the default separated\n"
+"floatlands.\n"
+"Values < 1.0 (for example 0.25) create a more defined surface level with\n"
+"flatter lowlands, suitable for a solid floatland layer."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "FPS when unfocused or paused"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "FSAA"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Factor noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fall bobbing factor"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fallback font path"
+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 the \"Aux1\" key).\n"
+"This requires the \"fast\" privilege on the server."
+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\n"
+"Multiplayer Tab."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Filler depth"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Filler depth noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Filmic tone mapping"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Filtered textures can blend RGB values with fully-transparent neighbors,\n"
+"which PNG optimizers usually discard, often resulting in dark or\n"
+"light edges to transparent textures. Apply a filter to clean that up\n"
+"at texture load time. This is automatically enabled if mipmapping is enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Filtering"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "First of 4 2D noises that together define hill/mountain range height."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "First of two 3D noises that together define tunnels."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fixed map seed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fixed virtual joystick"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland density"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland maximum Y"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland minimum Y"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland taper exponent"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland tapering distance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Floatland water level"
+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 start"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fog toggle key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Font bold by default"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Font italic by default"
+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 size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Font size divisible by"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Font size of the default font where 1 unit = 1 pixel at 96 DPI"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Font size of the monospace font where 1 unit = 1 pixel at 96 DPI"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Font size of the recent chat text and chat prompt in point (pt).\n"
+"Value 0 will use the default font size."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"For pixel-style fonts that do not scale well, this ensures that font sizes "
+"used\n"
+"with this font will always be divisible by this value, in pixels. For "
+"instance,\n"
+"a pixel font 16 pixels tall should have this set to 16, so it will only ever "
+"be\n"
+"sized 16, 32, 48, etc., so a mod requesting a size of 25 will get 32."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Format of player chat messages. The following strings are valid "
+"placeholders:\n"
+"@name, @message, @timestamp (optional)"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Format of screenshots."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Formspec Default Background Color"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Formspec Default Background Opacity"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Formspec Full-Screen Background Color"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Formspec Full-Screen Background Opacity"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Formspec default background color (R,G,B)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Formspec default background opacity (between 0 and 255)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Formspec full-screen background color (R,G,B)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Formspec full-screen background opacity (between 0 and 255)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Forward key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fourth of 4 2D noises that together define hill/mountain range height."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fractal type"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Fraction of the visible distance at which fog starts to be rendered"
+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).\n"
+"\n"
+"Setting this larger than active_block_range will also cause the server\n"
+"to maintain active objects up to this distance in the direction the\n"
+"player is looking. (This can avoid mobs suddenly disappearing from view)"
+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 "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 "Global callbacks"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Global map generation attributes.\n"
+"In Mapgen v6 the 'decorations' flag controls all decorations except trees\n"
+"and jungle grass, in all other mapgens this flag controls all decorations."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Gradient of light curve at maximum light level.\n"
+"Controls the contrast of the highest light levels."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Gradient of light curve at minimum light level.\n"
+"Controls the contrast of the lowest light levels."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Graphics"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Gravity"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Ground level"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Ground noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "HTTP mods"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "HUD scale factor"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "HUD toggle key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Handling for deprecated Lua API calls:\n"
+"- none: Do not log deprecated calls\n"
+"- log: mimic and log backtrace of deprecated call (default).\n"
+"- error: abort on usage of deprecated call (suggested for mod developers)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Have the profiler instrument itself:\n"
+"* Instrument an empty function.\n"
+"This estimates the overhead, that instrumentation is adding (+1 function "
+"call).\n"
+"* Instrument the sampler being used to update the statistics."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Heat blend noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Heat noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Height component of the initial window size. Ignored in fullscreen mode."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Height noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Height select noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hill steepness"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hill threshold"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hilliness1 noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hilliness2 noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hilliness3 noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hilliness4 noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Homepage of server, to be displayed in the serverlist."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Horizontal acceleration in air when jumping or falling,\n"
+"in nodes per second per second."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Horizontal and vertical acceleration in fast mode,\n"
+"in nodes per second per second."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Horizontal and vertical acceleration on ground or when climbing,\n"
+"in nodes per second per second."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar next key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar previous key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 1 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 10 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 11 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 12 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 13 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 14 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 15 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 16 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 17 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 18 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 19 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 2 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 20 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 21 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 22 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 23 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 24 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 25 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 26 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 27 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 28 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 29 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 3 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 30 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 31 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 32 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 4 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 5 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 6 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 7 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 8 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Hotbar slot 9 key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "How deep to make rivers."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"How fast liquid waves will move. Higher = faster.\n"
+"If negative, liquid waves will move backwards.\n"
+"Requires waving liquids to be enabled."
+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 "How wide to make rivers."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Humidity blend noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Humidity noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Humidity variation for biomes."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "IPv6"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "IPv6 server"
+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, \"Aux1\" key is used to fly fast if both fly and fast mode are\n"
+"enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"If enabled the server will perform map block occlusion culling based on\n"
+"on the eye position of the player. This can reduce the number of blocks\n"
+"sent to the client 50-80%. The client will not longer receive most "
+"invisible\n"
+"so that the utility of noclip mode is reduced."
+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 \"noclip\" privilege on the server."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"If enabled, \"Aux1\" key instead of \"Sneak\" key is used for climbing down "
+"and\n"
+"descending."
+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, makes move directions relative to the player's pitch when flying "
+"or swimming."
+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 the CSM restriction for node range is enabled, get_node calls are "
+"limited\n"
+"to this distance from the player to the node."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"If the execution of a chat command takes longer than this specified time in\n"
+"seconds, add the time information to the chat command message"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"If the file size of debug.txt exceeds the number of megabytes specified in\n"
+"this setting when it is opened, the file is moved to debug.txt.1,\n"
+"deleting an older debug.txt.1 if it exists.\n"
+"debug.txt is only moved if this setting is positive."
+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 "In-game chat console height, between 0.1 (10%) and 1.0 (100%)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Inc. volume key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Initial vertical speed when jumping, in nodes per second."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Instrument builtin.\n"
+"This is usually only needed by core/builtin contributors"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Instrument chat commands on registration."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Instrument global callback functions on registration.\n"
+"(anything you pass to a minetest.register_*() function)"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Instrument the action function of Active Block Modifiers on registration."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Instrument the action function of Loading Block Modifiers on registration."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Instrument the methods of entities on registration."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Instrumentation"
+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 items animations"
+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 "Italic font path"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Italic monospace font path"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Item entity TTL"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Iterations"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Iterations of the recursive function.\n"
+"Increasing this increases the amount of fine detail, but also\n"
+"increases processing load.\n"
+"At iterations = 20 this mapgen has a similar load to mapgen V7."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Joystick ID"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Joystick button repetition interval"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Joystick dead zone"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Joystick frustum sensitivity"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Joystick type"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Julia set only.\n"
+"W component of hypercomplex constant.\n"
+"Alters the shape of the fractal.\n"
+"Has no effect on 3D fractals.\n"
+"Range roughly -2 to 2."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Julia set only.\n"
+"X component of hypercomplex constant.\n"
+"Alters the shape of the fractal.\n"
+"Range roughly -2 to 2."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Julia set only.\n"
+"Y component of hypercomplex constant.\n"
+"Alters the shape of the fractal.\n"
+"Range roughly -2 to 2."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Julia set only.\n"
+"Z component of hypercomplex constant.\n"
+"Alters the shape of the fractal.\n"
+"Range roughly -2 to 2."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Julia w"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Julia x"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Julia y"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Julia z"
+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.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for decreasing the volume.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for digging.\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.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for increasing the volume.\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"
+"Will also disable autoforward, when active.\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 muting the game.\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 to type local 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 placing.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 11th hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 12th hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 13th hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 14th hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 15th hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 16th hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 17th hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 18th hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 19th hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 20th hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 21st hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 22nd hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 23rd hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 24th hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 25th hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 26th hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 27th hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 28th hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 29th hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 30th hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 31st hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the 32nd hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the eighth hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the fifth hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the first hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the fourth hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the next item in the hotbar.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the ninth hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the previous item in the hotbar.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the second hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the seventh hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the sixth hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the tenth hotbar slot.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for selecting the third hotbar slot.\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 autoforward.\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 pitch move mode.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Key for toggling the camera 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 chat.\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 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 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 large chat console.\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 to use view zoom when possible.\n"
+"See http://irrlicht.sourceforge.net/docu/namespaceirr."
+"html#a54da2a0e231901735e3da1b0edf72eb3"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Kick players who sent more than X messages per 10 seconds."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Lake steepness"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Lake threshold"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Language"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Large cave depth"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Large cave maximum number"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Large cave minimum number"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Large cave proportion flooded"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Large chat console key"
+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\n"
+"network."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Length of liquid waves.\n"
+"Requires waving liquids to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Length of time between Active Block Modifier (ABM) execution cycles"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Length of time between NodeTimer execution cycles"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Length of time between active block management cycles"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Level of logging to be written to debug.txt:\n"
+"- <nothing> (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 "Light curve boost"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Light curve boost center"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Light curve boost spread"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Light curve gamma"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Light curve high gradient"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Light curve low gradient"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Limit of map generation, in nodes, in all 6 directions from (0, 0, 0).\n"
+"Only mapchunks completely within the mapgen limit are generated.\n"
+"Value is stored per-world."
+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 sinking"
+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 "Load the game profiler"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Load the game profiler to collect game profiling data.\n"
+"Provides a /profiler command to access the compiled profile.\n"
+"Useful for mod developers and server operators."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Loading Block Modifiers"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Lower Y limit of dungeons."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Lower Y limit of floatlands."
+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 all liquids opaque"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Map Compression Level for Disk Storage"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Map Compression Level for Network Transfer"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Map directory"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Map generation attributes specific to Mapgen Carpathian."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Map generation attributes specific to Mapgen Flat.\n"
+"Occasional lakes and hills can be added to the flat world."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Map generation attributes specific to Mapgen Fractal.\n"
+"'terrain' enables the generation of non-fractal terrain:\n"
+"ocean, islands and underground."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Map generation attributes specific to Mapgen Valleys.\n"
+"'altitude_chill': Reduces heat with altitude.\n"
+"'humid_rivers': Increases humidity around rivers.\n"
+"'vary_river_depth': If enabled, low humidity and high heat causes rivers\n"
+"to become shallower and occasionally dry.\n"
+"'altitude_dry': Reduces humidity with altitude."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Map generation attributes specific to Mapgen v5."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Map generation attributes specific to Mapgen v6.\n"
+"The 'snowbiomes' flag enables the new 5 biome system.\n"
+"When the 'snowbiomes' flag is enabled jungles are automatically enabled and\n"
+"the 'jungles' flag is ignored."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Map generation attributes specific to Mapgen v7.\n"
+"'ridges': Rivers.\n"
+"'floatlands': Floating land masses in the atmosphere.\n"
+"'caverns': Giant caves deep underground."
+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 "Map shadows update frames"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapblock limit"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapblock mesh generation delay"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapblock mesh generator's MapBlock cache size in MB"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapblock unload timeout"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen Carpathian"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen Carpathian specific flags"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen Flat"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen Flat specific flags"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen Fractal"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen Fractal specific flags"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen V5"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen V5 specific flags"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen V6"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen V6 specific flags"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen V7"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen V7 specific flags"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen Valleys"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen Valleys specific flags"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen debug"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mapgen name"
+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 the window is not focused, or when the game is paused."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum distance to render shadows."
+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 limit of random number of large caves per mapchunk."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum limit of random number of small caves per mapchunk."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum liquid resistance. Controls deceleration when entering liquid at\n"
+"high speed."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum number of blocks that are simultaneously sent per client.\n"
+"The maximum total count is calculated dynamically:\n"
+"max_total = ceil((#clients + max_users) * per_client / 4)"
+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"
+"This limit is enforced per player."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum number of blocks to be queued that are to be loaded from file.\n"
+"This limit is enforced per player."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum number of concurrent downloads. Downloads exceeding this limit will "
+"be queued.\n"
+"This should be lower than curl_parallel_limit."
+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 be connected simultaneously."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum number of recent chat messages to show"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum number of statically stored objects in a block."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum objects per 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 simultaneous block sends per client"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum size of the out chat queue"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum size of the out chat queue.\n"
+"0 to disable queueing and -1 to make the queue size unlimited."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum time a file download (e.g. a mod download) may take, stated in "
+"milliseconds."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Maximum time an interactive request (e.g. server list fetch) may take, "
+"stated in milliseconds."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Maximum users"
+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 "Method used to highlight selected object."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Minimal level of logging to be written to chat."
+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 limit of random number of large caves per mapchunk."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Minimum limit of random number of small caves per mapchunk."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Minimum texture size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mipmapping"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mod channels"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Modifies the size of the HUD elements."
+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 "Monospace font size divisible by"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mountain height noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mountain noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mountain variation noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mountain zero level"
+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 "Mud noise"
+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 "Mute key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Mute sound"
+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.\n"
+"Current mapgens in a highly unstable state:\n"
+"- The optional floatlands of v7 (disabled by default)."
+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 "Near plane"
+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 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 "NodeTimer interval"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Noises"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Number of emerge threads"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Number of emerge threads to use.\n"
+"Value 0:\n"
+"- Automatic selection. The number of emerge threads will be\n"
+"- 'number of processors - 2', with a lower limit of 1.\n"
+"Any other value:\n"
+"- Specifies the number of emerge threads, with a lower limit of 1.\n"
+"WARNING: Increasing the number of emerge threads increases engine mapgen\n"
+"speed, but this may harm game performance by interfering with other\n"
+"processes, especially in singleplayer and/or when running Lua code in\n"
+"'on_generated'. For many users the optimum setting may be '1'."
+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 "Online Content Repository"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Opaque liquids"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Opaqueness (alpha) of the shadow behind the default font, between 0 and 255."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Open the pause menu when the window's focus is lost. Does not pause if a "
+"formspec is\n"
+"open."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Optional override for chat weblink color."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Path of the fallback font. Must be a TrueType font.\n"
+"This font will be used for certain languages or if the default font is "
+"unavailable."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Path to save screenshots at. Can be an absolute or relative path.\n"
+"The folder will be created if it doesn't already exist."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Path to shader directory. If no path is defined, default location will be "
+"used."
+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 ""
+"Path to the default font. Must be a TrueType font.\n"
+"The fallback font will be used if the font cannot be loaded."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Path to the monospace font. Must be a TrueType font.\n"
+"This font is used for e.g. the console and profiler screen."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Pause on lost window focus"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Per-player limit of queued blocks load from disk"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Per-player limit of queued blocks to generate"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Physics"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Pitch move key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Pitch move mode"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Place key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Place repetition interval"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Player is able to fly without being affected by gravity.\n"
+"This requires the \"fly\" privilege on the server."
+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 "Poisson filtering"
+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 ""
+"Prevent digging and placing from repeating when holding the mouse buttons.\n"
+"Enable this when you dig or place too often by accident."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Prevent mods from doing insecure things like running shell commands."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Print the engine's profiling data in regular intervals (in seconds).\n"
+"0 = disable. Useful for developers."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Privileges that players with basic_privs can grant"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Profiler"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Profiler toggle key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Profiling"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Prometheus listener address"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Prometheus listener address.\n"
+"If Minetest is compiled with ENABLE_PROMETHEUS option enabled,\n"
+"enable metrics listener for Prometheus on that address.\n"
+"Metrics can be fetched on http://127.0.0.1:30000/metrics"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Proportion of large caves that contain liquid."
+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 "Raises terrain to make valleys around the rivers."
+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 "Recent Chat Messages"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Regular font path"
+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 ""
+"Remove color codes from incoming chat messages\n"
+"Use this to stop players from being able to use color in their messages"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Replaces the default main menu with a custom one."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Report path"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Restricts the access of certain client-side functions on servers.\n"
+"Combine the byteflags below to restrict client-side features, or set to 0\n"
+"for no restrictions:\n"
+"LOAD_CLIENT_MODS: 1 (disable loading client-provided mods)\n"
+"CHAT_MESSAGES: 2 (disable send_chat_message call client-side)\n"
+"READ_ITEMDEFS: 4 (disable get_item_def call client-side)\n"
+"READ_NODEDEFS: 8 (disable get_node_def call client-side)\n"
+"LOOKUP_NODES_LIMIT: 16 (limits get_node call client-side to\n"
+"csm_restriction_noderange)\n"
+"READ_PLAYERINFO: 32 (disable get_player_names call client-side)"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Ridge mountain spread noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Ridge noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Ridge underwater noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Ridged mountain size noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Right key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "River channel depth"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "River channel width"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "River depth"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "River noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "River size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "River valley width"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Rollback recording"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Rolling hill size noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Rolling hills spread noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Round minimap"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Safe digging and placing"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Sandy beaches occur when np_beach exceeds this value."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Save the map received by the client on disk."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Save window size automatically when modified."
+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 folder"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Screenshot format"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Screenshot quality"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Screenshot quality. Only used for JPEG format.\n"
+"1 means worst quality; 100 means best quality.\n"
+"Use 0 for default quality."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Seabed noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Second of 4 2D noises that together define hill/mountain range height."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Second of two 3D noises that together define tunnels."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Security"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "See https://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 ""
+"Selects one of 18 fractal types.\n"
+"1 = 4D \"Roundy\" Mandelbrot set.\n"
+"2 = 4D \"Roundy\" Julia set.\n"
+"3 = 4D \"Squarry\" Mandelbrot set.\n"
+"4 = 4D \"Squarry\" Julia set.\n"
+"5 = 4D \"Mandy Cousin\" Mandelbrot set.\n"
+"6 = 4D \"Mandy Cousin\" Julia set.\n"
+"7 = 4D \"Variation\" Mandelbrot set.\n"
+"8 = 4D \"Variation\" Julia set.\n"
+"9 = 3D \"Mandelbrot/Mandelbar\" Mandelbrot set.\n"
+"10 = 3D \"Mandelbrot/Mandelbar\" Julia set.\n"
+"11 = 3D \"Christmas Tree\" Mandelbrot set.\n"
+"12 = 3D \"Christmas Tree\" Julia set.\n"
+"13 = 3D \"Mandelbulb\" Mandelbrot set.\n"
+"14 = 3D \"Mandelbulb\" Julia set.\n"
+"15 = 3D \"Cosine Mandelbulb\" Mandelbrot set.\n"
+"16 = 3D \"Cosine Mandelbulb\" Julia set.\n"
+"17 = 4D \"Mandelbulb\" Mandelbrot set.\n"
+"18 = 4D \"Mandelbulb\" Julia set."
+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 "Server side occlusion culling"
+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 the maximum character length of a chat message sent by clients."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set the shadow strength.\n"
+"Lower value means lighter shadows, higher value means darker shadows."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set the soft shadow radius size.\n"
+"Lower values mean sharper shadows, bigger values mean softer shadows.\n"
+"Minimum value: 1.0; maximum value: 10.0"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set the tilt of Sun/Moon orbit in degrees.\n"
+"Value of 0 means no tilt / vertical orbit.\n"
+"Minimum value: 0.0; maximum value: 60.0"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set to true to enable Shadow Mapping.\n"
+"Requires shaders to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set to true to enable waving leaves.\n"
+"Requires shaders to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set to true to enable waving liquids (like water).\n"
+"Requires shaders to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set to true to enable waving plants.\n"
+"Requires shaders to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Sets shadow texture quality to 32 bits.\n"
+"On false, 16 bits texture will be used.\n"
+"This can cause much more artifacts in the shadow."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Shader path"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Shaders allow advanced visual effects and may increase performance on some "
+"video\n"
+"cards.\n"
+"This only works with the OpenGL video backend."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Shadow filter quality"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Shadow map max distance in nodes to render shadows"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Shadow map texture in 32 bits"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Shadow map texture size"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Shadow offset (in pixels) of the default font. If 0, then shadow will not be "
+"drawn."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Shadow strength"
+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 "Show entity selection boxes"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Show entity selection boxes\n"
+"A restart is required after changing this."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Show name tag backgrounds by default"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Shutdown message"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Size of mapchunks generated by mapgen, stated in mapblocks (16 nodes).\n"
+"WARNING!: There is no benefit, and there are several dangers, in\n"
+"increasing this value above 5.\n"
+"Reducing this value increases cave and dungeon density.\n"
+"Altering this value is for special usage, leaving it unchanged is\n"
+"recommended."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Size of the MapBlock cache of the mesh generator. Increasing this will\n"
+"increase the cache hit %, reducing the data being copied from the main\n"
+"thread, thus reducing jitter."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Sky Body Orbit Tilt"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Slice w"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Slope and fill work together to modify the heights."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Small cave maximum number"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Small cave minimum number"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Small-scale humidity variation for blending biomes on borders."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Small-scale temperature variation for blending biomes on borders."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Smooth lighting"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Smooths camera when looking around. Also called look or mouse smoothing.\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 "Sneaking speed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Sneaking speed, in nodes per second."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Soft shadow radius"
+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 ""
+"Specifies the default stack size of nodes, items and tools.\n"
+"Note that mods or games may explicitly set a stack for certain (or all) "
+"items."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Spread a complete update of shadow map over given amount of frames.\n"
+"Higher values might make shadows laggy, lower values\n"
+"will consume more resources.\n"
+"Minimum value: 1; maximum value: 16"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Spread of light curve boost range.\n"
+"Controls the width of the range to be boosted.\n"
+"Standard deviation of the light curve boost Gaussian."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Static spawnpoint"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Steepness noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Step mountain size noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Step mountain spread noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Strength of 3D mode parallax."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Strength of light curve boost.\n"
+"The 3 'boost' parameters define a range of the light\n"
+"curve that is boosted in brightness."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Strict protocol checking"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Strip color codes"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Surface level of optional water placed on a solid floatland layer.\n"
+"Water is disabled by default and will only be placed if this value is set\n"
+"to above 'mgv7_floatland_ymax' - 'mgv7_floatland_taper' (the start of the\n"
+"upper tapering).\n"
+"***WARNING, POTENTIAL DANGER TO WORLDS AND SERVER PERFORMANCE***:\n"
+"When enabling water placement the floatlands must be configured and tested\n"
+"to be a solid layer by setting 'mgv7_floatland_density' to 2.0 (or other\n"
+"required value depending on 'mgv7_np_floatland'), to avoid\n"
+"server-intensive extreme water flow and to avoid vast flooding of the\n"
+"world surface below."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Synchronous SQLite"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Temperature variation for biomes."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Terrain alternative noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Terrain base noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Terrain height"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Terrain higher noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Terrain noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Terrain noise threshold for hills.\n"
+"Controls proportion of world area covered by hills.\n"
+"Adjust towards 0.0 for a larger proportion."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Terrain noise threshold for lakes.\n"
+"Controls proportion of world area covered by lakes.\n"
+"Adjust towards 0.0 for a larger proportion."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Terrain persistence noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Texture path"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Texture size to render the shadow map on.\n"
+"This must be a power of two.\n"
+"Bigger numbers create better shadows but it is also more expensive."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Textures on a node may be aligned either to the node or to the world.\n"
+"The former mode suits better things like machines, furniture, etc., while\n"
+"the latter makes stairs and microblocks fit surroundings better.\n"
+"However, as this possibility is new, thus may not be used by older servers,\n"
+"this option allows enforcing it for certain node types. Note though that\n"
+"that is considered EXPERIMENTAL and may not work properly."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "The URL for the content repository"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "The dead zone of the joystick"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The default format in which profiles are being saved,\n"
+"when calling `/profiler save [format]` without format."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "The depth of dirt or other biome filler node."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The file path relative to your worldpath in which profiles will be saved to."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "The identifier of the joystick to use"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "The length in pixels it takes for touch screen interaction to start."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The maximum height of the surface of waving liquids.\n"
+"4.0 = Wave height is two nodes.\n"
+"0.0 = Wave doesn't move at all.\n"
+"Default is 1.0 (1/2 node).\n"
+"Requires waving liquids to be enabled."
+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 radius of the volume of blocks around every player that is subject to "
+"the\n"
+"active block stuff, stated in mapblocks (16 nodes).\n"
+"In active blocks objects are loaded and ABMs run.\n"
+"This is also the minimum range in which active objects (mobs) are "
+"maintained.\n"
+"This should be configured together with active_object_send_range_blocks."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The rendering back-end.\n"
+"A restart is required after changing this.\n"
+"Note: On Android, stick with OGLES1 if unsure! App may fail to start "
+"otherwise.\n"
+"On other platforms, OpenGL is recommended.\n"
+"Shaders are supported by OpenGL (desktop only) and OGLES2 (experimental)"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The sensitivity of the joystick axes for moving the\n"
+"in-game view frustum around."
+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 budget allowed for ABMs to execute on each step\n"
+"(as a fraction of the ABM Interval)"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The time in seconds it takes between repeated events\n"
+"when holding down a joystick button combination."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The time in seconds it takes between repeated node placements when holding\n"
+"the place button."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "The type of joystick"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"The vertical distance over which heat drops by 20 if 'altitude_chill' is\n"
+"enabled. Also the vertical distance over which humidity drops by 10 if\n"
+"'altitude_dry' is enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Third of 4 2D noises that together define hill/mountain range height."
+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 of day when a new world is started, in millihours (0-23999)."
+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 "Touch screen threshold"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Tradeoffs for performance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Trees noise"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Trilinear filtering"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"True = 256\n"
+"False = 128\n"
+"Usable 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 "Undersampling"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Undersampling is similar to using a lower screen resolution, but it applies\n"
+"to the game world only, keeping the GUI intact.\n"
+"It should give a significant performance boost at the cost of less detailed "
+"image.\n"
+"Higher values result in a less detailed image."
+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 "Upper Y limit of dungeons."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Upper Y limit of floatlands."
+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 mipmapping to scale textures. May slightly increase performance,\n"
+"especially when using a high resolution texture pack.\n"
+"Gamma correct downscaling is not supported."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Use multi-sample antialiasing (MSAA) to smooth out block edges.\n"
+"This algorithm smooths out the 3D viewport while keeping the image sharp,\n"
+"but it doesn't affect the insides of textures\n"
+"(which is especially noticeable with transparent textures).\n"
+"Visible spaces appear between nodes when shaders are disabled.\n"
+"If set to 0, MSAA is disabled.\n"
+"A restart is required after changing this option."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Use trilinear filtering when scaling textures."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "VBO"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "VSync"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Valley depth"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Valley fill"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Valley profile"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Valley slope"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Variation of biome filler depth."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Variation of maximum mountain height (in nodes)."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Variation of number of caves."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Variation of terrain vertical scale.\n"
+"When noise is < -0.55 terrain is near-flat."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Varies depth of biome surface nodes."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Varies roughness of terrain.\n"
+"Defines the 'persistence' value for terrain_base and terrain_alt noises."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Varies steepness of cliffs."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Vertical climbing speed, in nodes per second."
+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 factor"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "View distance in nodes."
+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 "View zoom key"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Viewing range"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Virtual joystick triggers Aux1 button"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Volume"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Volume of all sounds.\n"
+"Requires the sound system to be enabled."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"W coordinate of the generated 3D slice of a 4D fractal.\n"
+"Determines which 3D slice of the 4D shape is generated.\n"
+"Alters the shape of the fractal.\n"
+"Has no effect on 3D fractals.\n"
+"Range roughly -2 to 2."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Walking and flying speed, in nodes per second."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Walking speed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Walking, flying and climbing speed in fast mode, in nodes per second."
+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 liquids"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Waving liquids wave height"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Waving liquids wave speed"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Waving liquids wavelength"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Waving plants"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Weblink color"
+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"
+"properly 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. This setting is ONLY applied if\n"
+"bilinear/trilinear/anisotropic filtering is enabled.\n"
+"This is also used as the base node texture size for world-aligned\n"
+"texture autoscaling."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Whether name tag backgrounds should be shown by default.\n"
+"Mods may still set a background."
+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 mute sounds. You can unmute sounds at any time, unless the\n"
+"sound system is disabled (enable_sound=false).\n"
+"In-game, you can toggle the mute state with the mute key or by using the\n"
+"pause menu."
+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 component of the initial window size. Ignored in fullscreen mode."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Width of the selection box lines around nodes."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Windows systems only: Start Minetest with the command line window in the "
+"background.\n"
+"Contains the same information as the file debug.txt (default name)."
+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 "World start time"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"World-aligned textures may be scaled to span several nodes. However,\n"
+"the server may not send the scale you want, especially if you use\n"
+"a specially-designed texture pack; with this option, the client tries\n"
+"to determine the scale automatically basing on the texture size.\n"
+"See also texture_min_size.\n"
+"Warning: This option is EXPERIMENTAL!"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "World-aligned textures mode"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Y of flat ground."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Y of mountain density gradient zero level. Used to shift mountains "
+"vertically."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Y of upper limit of large caves."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Y-distance over which caverns expand to full size."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Y-distance over which floatlands taper from full density to nothing.\n"
+"Tapering starts at this distance from the Y limit.\n"
+"For a solid floatland layer, this controls the height of hills/mountains.\n"
+"Must be less than or equal to half the distance between the Y limits."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Y-level of average terrain surface."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Y-level of cavern upper limit."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Y-level of higher terrain that creates cliffs."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Y-level of lower terrain and seabed."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Y-level of seabed."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "cURL file download timeout"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "cURL interactive timeout"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "cURL parallel limit"
+msgstr ""
diff --git a/po/zh_CN/minetest.po b/po/zh_CN/minetest.po
index cfc51323e..1b9e17f8e 100644
--- a/po/zh_CN/minetest.po
+++ b/po/zh_CN/minetest.po
@@ -2,9 +2,9 @@ msgid ""
msgstr ""
"Project-Id-Version: Chinese (Simplified) (Minetest)\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-02-23 19:03+0100\n"
-"PO-Revision-Date: 2021-03-22 18:29+0000\n"
-"Last-Translator: Yangjun Wang <yangjunw50@outlook.com>\n"
+"POT-Creation-Date: 2022-01-25 23:19+0100\n"
+"PO-Revision-Date: 2022-01-30 18:51+0000\n"
+"Last-Translator: poi <erbaotao@outlook.com>\n"
"Language-Team: Chinese (Simplified) <https://hosted.weblate.org/projects/"
"minetest/minetest/zh_Hans/>\n"
"Language: zh_CN\n"
@@ -12,7 +12,43 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
-"X-Generator: Weblate 4.5.2-dev\n"
+"X-Generator: Weblate 4.11-dev\n"
+
+#: builtin/client/chatcommands.lua
+msgid "Clear the out chat queue"
+msgstr "清除èŠå¤©å‘é€é˜Ÿåˆ—"
+
+#: builtin/client/chatcommands.lua
+msgid "Empty command."
+msgstr "空命令。"
+
+#: builtin/client/chatcommands.lua
+msgid "Exit to main menu"
+msgstr "退出至主èœå•"
+
+#: builtin/client/chatcommands.lua
+msgid "Invalid command: "
+msgstr "无效命令 "
+
+#: builtin/client/chatcommands.lua
+msgid "Issued command: "
+msgstr "å‘é€çš„命令 "
+
+#: builtin/client/chatcommands.lua
+msgid "List online players"
+msgstr "åˆ—å‡ºè”æœºçީ家"
+
+#: builtin/client/chatcommands.lua
+msgid "Online players: "
+msgstr "在线玩家: "
+
+#: builtin/client/chatcommands.lua
+msgid "The out chat queue is now empty."
+msgstr "èŠå¤©å‘é€é˜Ÿåˆ—现在为空。"
+
+#: builtin/client/chatcommands.lua
+msgid "This command is disabled by server."
+msgstr "æœåС噍已ç¦ç”¨è¯¥å‘½ä»¤."
#: builtin/client/death_formspec.lua src/client/game.cpp
msgid "Respawn"
@@ -22,11 +58,42 @@ msgstr "é‡ç”Ÿ"
msgid "You died"
msgstr "æ‚¨å·²ç»æ­»äº¡"
+#: builtin/common/chatcommands.lua
+msgid "Available commands:"
+msgstr "å¯ç”¨å‘½ä»¤:"
+
+#: builtin/common/chatcommands.lua
+msgid "Available commands: "
+msgstr "å¯ç”¨å‘½ä»¤: "
+
+#: builtin/common/chatcommands.lua
+msgid "Command not available: "
+msgstr "命令ä¸å¯ç”¨ï¼š "
+
+#: builtin/common/chatcommands.lua
+msgid "Get help for commands"
+msgstr "获å–命令帮助"
+
+#: builtin/common/chatcommands.lua
+msgid ""
+"Use '.help <cmd>' to get more information, or '.help all' to list everything."
+msgstr ""
+"使用 '.help <cmd>' 获å–该命令的更多信æ¯ï¼Œæˆ–使用 '.help all' 列出所有内容。"
+
+#: builtin/common/chatcommands.lua
+msgid "[all | <cmd>]"
+msgstr "[all | <命令>]"
+
#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp
msgid "OK"
msgstr "OK"
#: builtin/fstk/ui.lua
+#, fuzzy
+msgid "<none available>"
+msgstr "命令ä¸å¯ç”¨ï¼š"
+
+#: builtin/fstk/ui.lua
msgid "An error occurred in a Lua script:"
msgstr "Lua 脚本å‘生错误:"
@@ -36,7 +103,7 @@ msgstr "å‘生了错误:"
#: builtin/fstk/ui.lua
msgid "Main menu"
-msgstr "主å•"
+msgstr "主èœå•"
#: builtin/fstk/ui.lua
msgid "Reconnect"
@@ -155,17 +222,19 @@ msgstr "\"$1\"å·²ç»å­˜åœ¨ï¼Œä½ æƒ³è¦†å†™å—?"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "$1 and $2 dependencies will be installed."
-msgstr ""
+msgstr "$1 å’Œ $2 ä¾èµ–项将被安装."
#: builtin/mainmenu/dlg_contentstore.lua
msgid "$1 by $2"
-msgstr ""
+msgstr "$1 作者: $2"
#: builtin/mainmenu/dlg_contentstore.lua
msgid ""
"$1 downloading,\n"
"$2 queued"
msgstr ""
+"$1 正在下载,\n"
+"$2 排队中"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "$1 downloading..."
@@ -173,11 +242,11 @@ msgstr "正在下载 $1 ……"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "$1 required dependencies could not be found."
-msgstr ""
+msgstr "有$1个ä¾èµ–项没有找到。"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "$1 will be installed, and $2 dependencies will be skipped."
-msgstr ""
+msgstr "$1 将被安装, $2 ä¾èµ–项将被跳过."
#: builtin/mainmenu/dlg_contentstore.lua
msgid "All packages"
@@ -225,6 +294,11 @@ msgid "Install missing dependencies"
msgstr "安装缺失的ä¾èµ–项"
#: builtin/mainmenu/dlg_contentstore.lua
+#, fuzzy
+msgid "Install: Unsupported file type or broken archive"
+msgstr "å®‰è£…ï¼šæ–‡ä»¶ç±»åž‹ä¸æ”¯æŒæˆ–档案已æŸå"
+
+#: builtin/mainmenu/dlg_contentstore.lua
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Mods"
msgstr "Mod"
@@ -254,7 +328,6 @@ msgid "Please check that the base game is correct."
msgstr "è¯·æŸ¥çœ‹æ¸¸æˆæ˜¯å¦æ­£ç¡®ã€‚"
#: builtin/mainmenu/dlg_contentstore.lua
-#, fuzzy
msgid "Queued"
msgstr "已加入队列"
@@ -447,7 +520,7 @@ msgstr "温带,沙漠,丛林,苔原,泰加林带"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Terrain surface erosion"
-msgstr "地形表é¢è…烂"
+msgstr "地形表é¢ä¾µèš€"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Trees and jungle grass"
@@ -526,7 +599,7 @@ msgstr "< 返回设置页é¢"
msgid "Browse"
msgstr "æµè§ˆ"
-#: builtin/mainmenu/dlg_settings_advanced.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_settings.lua
msgid "Disabled"
msgstr "ç¦ç”¨"
@@ -551,7 +624,8 @@ msgid "Offset"
msgstr "è¡¥å¿"
#: builtin/mainmenu/dlg_settings_advanced.lua
-msgid "Persistance"
+#, fuzzy
+msgid "Persistence"
msgstr "æŒç»­æ€§"
#: builtin/mainmenu/dlg_settings_advanced.lua
@@ -570,7 +644,7 @@ msgstr "æ¢å¤åˆå§‹è®¾ç½®"
msgid "Scale"
msgstr "比例"
-#: builtin/mainmenu/dlg_settings_advanced.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_online.lua
msgid "Search"
msgstr "æœç´¢"
@@ -662,14 +736,6 @@ msgid "Install Mod: Unable to find suitable folder name for modpack $1"
msgstr "安装mod:无法找到mod包$1çš„åˆé€‚文件夹å"
#: builtin/mainmenu/pkgmgr.lua
-msgid "Install: Unsupported file type \"$1\" or broken archive"
-msgstr "安装:“$1â€œä¸ºä¸æ”¯æŒçš„æ–‡ä»¶ç±»åž‹æˆ–å·²æŸå"
-
-#: builtin/mainmenu/pkgmgr.lua
-msgid "Install: file: \"$1\""
-msgstr "安装:文件:â€$1“"
-
-#: builtin/mainmenu/pkgmgr.lua
msgid "Unable to find a valid mod or modpack"
msgstr "无法找到mod或mod包"
@@ -701,6 +767,42 @@ msgstr "å·²ç¦ç”¨å…¬å…±æœåŠ¡å™¨åˆ—è¡¨"
msgid "Try reenabling public serverlist and check your internet connection."
msgstr "请å°è¯•釿–°å¯ç”¨å…¬å…±æœåŠ¡å™¨åˆ—è¡¨å¹¶æ£€æŸ¥æ‚¨çš„ç½‘ç»œè¿žæŽ¥ã€‚"
+#: builtin/mainmenu/tab_about.lua
+msgid "About"
+msgstr "关于"
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Active Contributors"
+msgstr "积æžè´¡çŒ®è€…"
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Active renderer:"
+msgstr "主动渲染器:"
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Core Developers"
+msgstr "核心开å‘者"
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Open User Data Directory"
+msgstr "打开用户数æ®ç›®å½•"
+
+#: builtin/mainmenu/tab_about.lua
+msgid ""
+"Opens the directory that contains user-provided worlds, games, mods,\n"
+"and texture packs in a file manager / explorer."
+msgstr ""
+"在文件(资æº)管ç†å™¨ä¸­æ‰“开嫿œ‰ç”¨æˆ·æä¾›çš„世界,游æˆï¼Œmods\n"
+"和纹ç†åŒ…的目录。"
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Previous Contributors"
+msgstr "å‰è´¡çŒ®è€…"
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Previous Core Developers"
+msgstr "剿 ¸å¿ƒå¼€å‘者"
+
#: builtin/mainmenu/tab_content.lua
msgid "Browse online content"
msgstr "æµè§ˆåœ¨çº¿å†…容"
@@ -741,36 +843,6 @@ msgstr "删除包"
msgid "Use Texture Pack"
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 "Open User Data Directory"
-msgstr "打开用户数æ®ç›®å½•"
-
-#: builtin/mainmenu/tab_credits.lua
-msgid ""
-"Opens the directory that contains user-provided worlds, games, mods,\n"
-"and texture packs in a file manager / explorer."
-msgstr ""
-
-#: builtin/mainmenu/tab_credits.lua
-msgid "Previous Contributors"
-msgstr "å‰è´¡çŒ®è€…"
-
-#: builtin/mainmenu/tab_credits.lua
-msgid "Previous Core Developers"
-msgstr "剿 ¸å¿ƒå¼€å‘者"
-
#: builtin/mainmenu/tab_local.lua
msgid "Announce Server"
msgstr "公开æœåС噍"
@@ -799,7 +871,7 @@ msgstr "建立æœåС噍"
msgid "Install games from ContentDB"
msgstr "从 ContentDB 安装游æˆ"
-#: builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
msgid "Name"
msgstr "åç§°"
@@ -811,7 +883,7 @@ msgstr "新建"
msgid "No world created or selected!"
msgstr "未创建或选择世界!"
-#: builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
msgid "Password"
msgstr "密ç "
@@ -819,13 +891,13 @@ msgstr "密ç "
msgid "Play Game"
msgstr "开始游æˆ"
-#: builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
msgid "Port"
msgstr "端å£"
#: builtin/mainmenu/tab_local.lua
msgid "Select Mods"
-msgstr "选择模组"
+msgstr "选择Mod"
#: builtin/mainmenu/tab_local.lua
msgid "Select World:"
@@ -840,8 +912,12 @@ msgid "Start Game"
msgstr "å¯åŠ¨æ¸¸æˆ"
#: builtin/mainmenu/tab_online.lua
-msgid "Address / Port"
-msgstr "地å€/端å£"
+msgid "Address"
+msgstr "地å€"
+
+#: builtin/mainmenu/tab_online.lua src/client/keycode.cpp
+msgid "Clear"
+msgstr "Clearé”®"
#: builtin/mainmenu/tab_online.lua
msgid "Connect"
@@ -851,34 +927,42 @@ msgstr "连接"
msgid "Creative mode"
msgstr "创造模å¼"
+#. ~ PvP = Player versus Player
#: builtin/mainmenu/tab_online.lua
-msgid "Damage enabled"
-msgstr "伤害已å¯ç”¨"
+msgid "Damage / PvP"
+msgstr "伤害 / PvP"
#: builtin/mainmenu/tab_online.lua
msgid "Del. Favorite"
msgstr "删除收è—项"
#: builtin/mainmenu/tab_online.lua
-msgid "Favorite"
-msgstr "æ”¶è—项"
+msgid "Favorites"
+msgstr "我的收è—"
#: builtin/mainmenu/tab_online.lua
-msgid "Join Game"
-msgstr "加入游æˆ"
+msgid "Incompatible Servers"
+msgstr "ä¸å…¼å®¹çš„æœåŠ¡å™¨"
#: builtin/mainmenu/tab_online.lua
-msgid "Name / Password"
-msgstr "用户å/密ç "
+msgid "Join Game"
+msgstr "加入游æˆ"
#: builtin/mainmenu/tab_online.lua
msgid "Ping"
msgstr "应答速度"
-#. ~ PvP = Player versus Player
#: builtin/mainmenu/tab_online.lua
-msgid "PvP enabled"
-msgstr "å¯ç”¨çŽ©å®¶å¯¹æˆ˜"
+msgid "Public Servers"
+msgstr "公开æœåС噍"
+
+#: builtin/mainmenu/tab_online.lua
+msgid "Refresh"
+msgstr "刷新"
+
+#: builtin/mainmenu/tab_online.lua
+msgid "Server Description"
+msgstr "æœåС噍æè¿°"
#: builtin/mainmenu/tab_settings.lua
msgid "2x"
@@ -920,11 +1004,31 @@ msgstr "更改键ä½è®¾ç½®"
msgid "Connected Glass"
msgstr "连通玻璃"
+#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
+msgid "Dynamic shadows"
+msgstr "动æ€é˜´å½±"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Dynamic shadows: "
+msgstr "动æ€é˜´å½±: "
+
#: builtin/mainmenu/tab_settings.lua
msgid "Fancy Leaves"
msgstr "åŽä¸½æ ‘å¶"
#: builtin/mainmenu/tab_settings.lua
+msgid "High"
+msgstr "高"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Low"
+msgstr "低"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Medium"
+msgstr "中"
+
+#: builtin/mainmenu/tab_settings.lua
msgid "Mipmap"
msgstr "Mip 贴图"
@@ -996,10 +1100,6 @@ msgstr "平滑光照"
msgid "Texturing:"
msgstr "æè´¨:"
-#: builtin/mainmenu/tab_settings.lua
-msgid "To enable shaders the OpenGL driver needs to be used."
-msgstr "å¯ç”¨ç€è‰²å™¨éœ€è¦ä½¿ç”¨OpenGL驱动。"
-
#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
msgid "Tone Mapping"
msgstr "色调映射"
@@ -1013,6 +1113,14 @@ msgid "Trilinear Filter"
msgstr "三线性过滤"
#: builtin/mainmenu/tab_settings.lua
+msgid "Ultra High"
+msgstr "超出高度é™åˆ¶"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Very Low"
+msgstr "过于低"
+
+#: builtin/mainmenu/tab_settings.lua
msgid "Waving Leaves"
msgstr "飘动树å¶"
@@ -1024,7 +1132,7 @@ msgstr "摇动æµä½“"
msgid "Waving Plants"
msgstr "摇摆æ¤ç‰©"
-#: src/client/client.cpp
+#: src/client/client.cpp src/client/game.cpp
msgid "Connection timed out."
msgstr "连接超时。"
@@ -1053,8 +1161,8 @@ msgid "Connection error (timed out?)"
msgstr "连接出错(超时?)"
#: src/client/clientlauncher.cpp
-msgid "Could not find or load game \""
-msgstr "æ— æ³•æ‰¾åˆ°æˆ–è€…è½½å…¥æ¸¸æˆ \""
+msgid "Could not find or load game: "
+msgstr "找ä¸åˆ°å­æ¸¸æˆæˆ–è€…æ— æ³•è½½å…¥å­æ¸¸æˆï¼š "
#: src/client/clientlauncher.cpp
msgid "Invalid gamespec."
@@ -1084,18 +1192,6 @@ msgstr "æä¾›çš„å¯†ç æ–‡ä»¶æ— æ³•打开: "
msgid "Provided world path doesn't exist: "
msgstr "æä¾›çš„世界路径ä¸å­˜åœ¨: "
-#. ~ DO NOT TRANSLATE THIS LITERALLY!
-#. This is a special string. Put either "no" or "yes"
-#. into the translation field (literally).
-#. Choose "yes" if the language requires use of the fallback
-#. font, "no" otherwise.
-#. The fallback font is (normally) required for languages with
-#. non-Latin script, like Chinese.
-#. When in doubt, test your translation.
-#: src/client/fontengine.cpp
-msgid "needs_fallback_font"
-msgstr "yes"
-
#: src/client/game.cpp
msgid ""
"\n"
@@ -1109,14 +1205,6 @@ msgid "- Address: "
msgstr "- 地å€ï¼š "
#: src/client/game.cpp
-msgid "- Creative Mode: "
-msgstr "- 创造模å¼: "
-
-#: src/client/game.cpp
-msgid "- Damage: "
-msgstr "- 伤害: "
-
-#: src/client/game.cpp
msgid "- Mode: "
msgstr "- 模å¼: "
@@ -1138,6 +1226,15 @@ msgid "- Server Name: "
msgstr "- æœåС噍åç§°: "
#: src/client/game.cpp
+msgid "A serialization error occurred:"
+msgstr "åºåˆ—化å‘生了错误:"
+
+#: src/client/game.cpp
+#, c-format
+msgid "Access denied. Reason: %s"
+msgstr "访问被拒ç»ã€‚原因:%s"
+
+#: src/client/game.cpp
msgid "Automatic forward disabled"
msgstr "自动å‰è¿›å·²ç¦ç”¨"
@@ -1146,6 +1243,23 @@ msgid "Automatic forward enabled"
msgstr "自动å‰è¿›å·²å¯ç”¨"
#: src/client/game.cpp
+#, fuzzy
+msgid "Block bounds hidden"
+msgstr "地图å—边界"
+
+#: src/client/game.cpp
+msgid "Block bounds shown for all blocks"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Block bounds shown for current block"
+msgstr ""
+
+#: src/client/game.cpp
+msgid "Block bounds shown for nearby blocks"
+msgstr ""
+
+#: src/client/game.cpp
msgid "Camera update disabled"
msgstr "å·²ç¦ç”¨é•œå¤´æ›´æ–°"
@@ -1154,6 +1268,10 @@ msgid "Camera update enabled"
msgstr "å·²å¯ç”¨é•œå¤´æ›´æ–°"
#: src/client/game.cpp
+msgid "Can't show block bounds (need 'basic_debug' privilege)"
+msgstr ""
+
+#: src/client/game.cpp
msgid "Change Password"
msgstr "更改密ç "
@@ -1166,6 +1284,10 @@ msgid "Cinematic mode enabled"
msgstr "电影模å¼å·²å¯ç”¨"
#: src/client/game.cpp
+msgid "Client disconnected"
+msgstr "与客户端的连接已断开"
+
+#: src/client/game.cpp
msgid "Client side scripting is disabled"
msgstr "客户端脚本已ç¦ç”¨"
@@ -1174,11 +1296,15 @@ msgid "Connecting to server..."
msgstr "正在连接æœåС噍..."
#: src/client/game.cpp
+msgid "Connection failed for unknown reason"
+msgstr "è¿žæŽ¥å¤±è´¥ï¼ŒåŽŸå› ä¸æ˜Ž"
+
+#: src/client/game.cpp
msgid "Continue"
msgstr "ç»§ç»­"
#: src/client/game.cpp
-#, fuzzy, c-format
+#, c-format
msgid ""
"Controls:\n"
"- %s: move forwards\n"
@@ -1200,17 +1326,22 @@ msgstr ""
"- %s:å‘åŽç§»åЍ\n"
"- %s:å‘左移动\n"
"- %s:å‘å³ç§»åЍ\n"
-"- %s:跳/爬\n"
-"- %s:潜行/å‘下\n"
+"- %s:跳/å‘上(攀爬)\n"
+"- %s:挖/打\n"
+"- %s:放/使用\n"
+"- %s:潜行/å‘下(攀爬)\n"
"- %s:丢弃物å“\n"
"- %sï¼šç‰©å“æ¸…å•\n"
"- 鼠标:转身/环顾\n"
-"- 鼠标左键: 挖/打\n"
-"- é¼ æ ‡å³é”®: 放/使用\n"
"- 鼠标滚轮: 选择物å“\n"
"- %s:èŠå¤©\n"
#: src/client/game.cpp
+#, c-format
+msgid "Couldn't resolve address: %s"
+msgstr "åœ°å€æ— æ³•è§£æžï¼š%s"
+
+#: src/client/game.cpp
msgid "Creating client..."
msgstr "正在建立客户端..."
@@ -1339,6 +1470,10 @@ msgid "Minimap currently disabled by game or mod"
msgstr "å°åœ°å›¾è¢«å½“å‰å­æ¸¸æˆæˆ–者 mod ç¦ç”¨"
#: src/client/game.cpp
+msgid "Multiplayer"
+msgstr "多人游æˆ"
+
+#: src/client/game.cpp
msgid "Noclip mode disabled"
msgstr "穿墙模å¼å·²ç¦ç”¨"
@@ -1368,7 +1503,7 @@ msgstr "俯仰移动模å¼å·²ç¦ç”¨"
#: src/client/game.cpp
msgid "Pitch move mode enabled"
-msgstr "俯仰移动模å¼å·²ç¦ç”¨"
+msgstr "俯仰移动模å¼å·²å¯ç”¨"
#: src/client/game.cpp
msgid "Profiler graph shown"
@@ -1412,6 +1547,21 @@ msgstr "已喿¶ˆé™éŸ³"
#: src/client/game.cpp
#, c-format
+msgid "The server is probably running a different version of %s."
+msgstr "æ­¤æœåС噍è¿è¡Œçš„å¯èƒ½æ˜¯åˆ«çš„版本,%s。"
+
+#: src/client/game.cpp
+#, c-format
+msgid "Unable to connect to %s because IPv6 is disabled"
+msgstr "无法连接到 %s,因为 IPv6 å·²ç¦ç”¨"
+
+#: src/client/game.cpp
+#, c-format
+msgid "Unable to listen on %s because IPv6 is disabled"
+msgstr "æ— æ³•ç›‘å¬ %s,因为 IPv6 å·²ç¦ç”¨"
+
+#: src/client/game.cpp
+#, c-format
msgid "Viewing range changed to %d"
msgstr "视野范围已改å˜è‡³%d"
@@ -1480,10 +1630,6 @@ msgid "Caps Lock"
msgstr "大写é”定键"
#: src/client/keycode.cpp
-msgid "Clear"
-msgstr "Clearé”®"
-
-#: src/client/keycode.cpp
msgid "Control"
msgstr "Ctrlé”®"
@@ -1735,19 +1881,27 @@ msgid "Minimap hidden"
msgstr "å°åœ°å›¾å·²éšè—"
#: src/client/minimap.cpp
-#, fuzzy, c-format
+#, c-format
msgid "Minimap in radar mode, Zoom x%d"
-msgstr "é›·è¾¾å°åœ°å›¾ï¼Œæ”¾å¤§è‡³ä¸€å€"
+msgstr "é›·è¾¾å°åœ°å›¾ï¼Œæ”¾å¤§è‡³%då€"
#: src/client/minimap.cpp
-#, fuzzy, c-format
+#, c-format
msgid "Minimap in surface mode, Zoom x%d"
-msgstr "地表模å¼å°åœ°å›¾, 放大至一å€"
+msgstr "地表模å¼å°åœ°å›¾, 放大至%då€"
#: src/client/minimap.cpp
msgid "Minimap in texture mode"
msgstr "æè´¨æ¨¡å¼å°åœ°å›¾"
+#: src/gui/guiChatConsole.cpp
+msgid "Failed to open webpage"
+msgstr "网页打ä¸å¼€"
+
+#: src/gui/guiChatConsole.cpp
+msgid "Opening webpage"
+msgstr "正在打开网页"
+
#: src/gui/guiConfirmRegistration.cpp src/gui/guiPasswordChange.cpp
msgid "Passwords do not match!"
msgstr "密ç ä¸åŒ¹é…ï¼"
@@ -1774,8 +1928,8 @@ msgid "Proceed"
msgstr "ç»§ç»­"
#: src/gui/guiKeyChangeMenu.cpp
-msgid "\"Special\" = climb down"
-msgstr "“特殊†= å‘下爬"
+msgid "\"Aux1\" = climb down"
+msgstr "“Aux1†= å‘下爬"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Autoforward"
@@ -1786,10 +1940,18 @@ msgid "Automatic jumping"
msgstr "自动跳跃"
#: src/gui/guiKeyChangeMenu.cpp
+msgid "Aux1"
+msgstr "Aux1"
+
+#: src/gui/guiKeyChangeMenu.cpp
msgid "Backward"
msgstr "å‘åŽ"
#: src/gui/guiKeyChangeMenu.cpp
+msgid "Block bounds"
+msgstr "地图å—边界"
+
+#: src/gui/guiKeyChangeMenu.cpp
msgid "Change camera"
msgstr "改å˜ç›¸æœº"
@@ -1878,10 +2040,6 @@ msgid "Sneak"
msgstr "潜行"
#: src/gui/guiKeyChangeMenu.cpp
-msgid "Special"
-msgstr "特殊"
-
-#: src/gui/guiKeyChangeMenu.cpp
msgid "Toggle HUD"
msgstr "å¯ç”¨/ç¦ç”¨HUD"
@@ -1942,8 +2100,9 @@ msgid "Muted"
msgstr "é™éŸ³"
#: src/gui/guiVolumeChange.cpp
-msgid "Sound Volume: "
-msgstr "音é‡ï¼š "
+#, c-format
+msgid "Sound Volume: %d%%"
+msgstr "音é‡ï¼š%d%%"
#. ~ Imperative, as in "Enter/type in text".
#. Don't forget the space.
@@ -1968,12 +2127,12 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"(Android) Use virtual joystick to trigger \"aux\" button.\n"
-"If enabled, virtual joystick will also tap \"aux\" button when out of main "
+"(Android) Use virtual joystick to trigger \"Aux1\" button.\n"
+"If enabled, virtual joystick will also tap \"Aux1\" button when out of main "
"circle."
msgstr ""
-"(安å“)使用虚拟æ“纵æ†è§¦å‘\"aux\"按钮。\n"
-"如果å¯ç”¨ï¼Œè™šæ‹Ÿæ“纵æ†åœ¨ä¸»åœ†åœˆå¤–会点击\"aux\"按钮。"
+"(安å“)使用虚拟æ“纵æ†è§¦å‘\"Aux1\"按钮。\n"
+"如果å¯ç”¨ï¼Œè™šæ‹Ÿæ“纵æ†åœ¨ä¸»åœ†åœˆå¤–会点击\"Aux1\"按钮。"
#: src/settings_translation_file.cpp
msgid ""
@@ -2190,6 +2349,11 @@ msgid ""
msgstr "为支æŒ4Kç­‰å±å¹•,调节åƒç´ ç‚¹å¯†åº¦ï¼ˆéž X11/Android çŽ¯å¢ƒæ‰æœ‰æ•ˆï¼‰ã€‚"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Adjust the detected display density, used for scaling UI elements."
+msgstr "调整检测到的显示密度,用æ¥ç¼©æ”¾ UI 元素。"
+
+#: src/settings_translation_file.cpp
#, c-format
msgid ""
"Adjusts the density of the floatland layer.\n"
@@ -2199,10 +2363,10 @@ msgid ""
"to be sure) creates a solid floatland layer."
msgstr ""
"调整悬空岛层的密度。\n"
-"增加值以增加密度。å¯ä»¥æ˜¯æ­£å€¼æˆ–负值。\n"
-"值等于0.0, 容积的50%是floatland。\n"
-"值等于2.0 ,(å¯ä»¥æ›´é«˜ï¼Œå–决于 'mgv7_np_floatland' ,始终测试以确定)\n"
-"创建一个åšå®žçš„æ‚¬ç©ºå²›å±‚。"
+"增加值,就增加密度。å¯ä»¥æ˜¯æ­£å€¼æˆ–负值。\n"
+"值等于 0.0, 容积的 50% 是悬空岛。\n"
+"值等于 2.0,(值å¯ä»¥æ›´é«˜ï¼Œå–决于“mgv7_np_floatlandâ€ï¼Œä½†ä¸€å®šè¦æµ‹è¯•确定)\n"
+"创建一个密实的悬空岛层。"
#: src/settings_translation_file.cpp
msgid "Advanced"
@@ -2322,6 +2486,14 @@ msgid "Autoscaling mode"
msgstr "自动缩放模å¼"
#: src/settings_translation_file.cpp
+msgid "Aux1 key"
+msgstr "Aux1é”®"
+
+#: src/settings_translation_file.cpp
+msgid "Aux1 key for climbing/descending"
+msgstr "用于攀登/é™è½çš„Aux1é”®"
+
+#: src/settings_translation_file.cpp
msgid "Backward key"
msgstr "åŽé€€é”®"
@@ -2366,10 +2538,6 @@ msgid "Biome noise"
msgstr "生物群系噪声"
#: src/settings_translation_file.cpp
-msgid "Bits per pixel (aka color depth) in fullscreen mode."
-msgstr "免屿¨¡å¼ä¸­çš„使¯åƒç´ ï¼ˆåˆç§°è‰²å½©æ·±åº¦ï¼‰ã€‚"
-
-#: src/settings_translation_file.cpp
msgid "Block send optimize distance"
msgstr "最优方å—å‘é€è·ç¦»"
@@ -2391,7 +2559,7 @@ msgstr "粗体等宽字体路径"
#: src/settings_translation_file.cpp
msgid "Build inside player"
-msgstr "在玩家内部æ­å»º"
+msgstr "在玩家站ç€çš„地方æ­å»º"
#: src/settings_translation_file.cpp
msgid "Builtin"
@@ -2474,6 +2642,14 @@ msgstr ""
"0.0为最å°å€¼æ—¶1.0为最大值。"
#: src/settings_translation_file.cpp
+msgid "Chat command time message threshold"
+msgstr "显示èŠå¤©æ¶ˆæ¯æ‰§è¡Œæ—¶é—´çš„阀值(秒)"
+
+#: src/settings_translation_file.cpp
+msgid "Chat commands"
+msgstr "èŠå¤©æŒ‡ä»¤"
+
+#: src/settings_translation_file.cpp
msgid "Chat font size"
msgstr "èŠå¤©å­—体大å°"
@@ -2506,8 +2682,8 @@ msgid "Chat toggle key"
msgstr "èŠå¤©å¯ç”¨/ç¦ç”¨é”®"
#: src/settings_translation_file.cpp
-msgid "Chatcommands"
-msgstr "èŠå¤©å‘½ä»¤"
+msgid "Chat weblinks"
+msgstr "èŠå¤©ç½‘页链接"
#: src/settings_translation_file.cpp
msgid "Chunk size"
@@ -2526,6 +2702,13 @@ msgid "Clean transparent textures"
msgstr "干净逿˜Žæè´¨"
#: src/settings_translation_file.cpp
+msgid ""
+"Clickable weblinks (middle-click or Ctrl+left-click) enabled in chat console "
+"output."
+msgstr ""
+"在èŠå¤©æŽ§åˆ¶å°è¾“出中å¯ç”¨äº†å¯ç‚¹å‡»çš„网页链接(中键å•击或 Ctrl + 左键å•击)。"
+
+#: src/settings_translation_file.cpp
msgid "Client"
msgstr "客户端"
@@ -2570,6 +2753,10 @@ msgid "Colored fog"
msgstr "彩色雾"
#: src/settings_translation_file.cpp
+msgid "Colored shadows"
+msgstr "彩色阴影"
+
+#: src/settings_translation_file.cpp
msgid ""
"Comma-separated list of flags to hide in the content repository.\n"
"\"nonfree\" can be used to hide packages which do not qualify as 'free "
@@ -2607,6 +2794,22 @@ msgid "Command key"
msgstr "命令键"
#: src/settings_translation_file.cpp
+msgid ""
+"Compression level to use when saving mapblocks to disk.\n"
+"-1 - use default compression level\n"
+"0 - least compression, fastest\n"
+"9 - best compression, slowest"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Compression level to use when sending mapblocks to the client.\n"
+"-1 - use default compression level\n"
+"0 - least compression, fastest\n"
+"9 - best compression, slowest"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Connect glass"
msgstr "连接玻璃"
@@ -2706,8 +2909,10 @@ msgstr "å‡†æ˜Ÿé€æ˜Ž"
#, fuzzy
msgid ""
"Crosshair alpha (opaqueness, between 0 and 255).\n"
-"Also controls the object crosshair color"
-msgstr "准星ä¸é€æ˜Žåº¦ï¼ˆ0-255)。"
+"This also applies to the object crosshair."
+msgstr ""
+"准星ä¸é€æ˜Žåº¦ï¼ˆ0-255)。\n"
+"实体准星的ä¸é€æ˜Žåº¦ä¹Ÿä¼šä½¿ç”¨æ­¤å€¼ã€‚"
#: src/settings_translation_file.cpp
msgid "Crosshair color"
@@ -2718,6 +2923,8 @@ msgid ""
"Crosshair color (R,G,B).\n"
"Also controls the object crosshair color"
msgstr ""
+"准星颜色(R,G,B).\n"
+"还控制对象准星颜色"
#: src/settings_translation_file.cpp
msgid "DPI"
@@ -2785,11 +2992,13 @@ msgstr "默认栈大å°"
#: src/settings_translation_file.cpp
msgid ""
-"Default timeout for cURL, stated in milliseconds.\n"
-"Only has an effect if compiled with cURL."
+"Define shadow filtering quality.\n"
+"This simulates the soft shadows effect by applying a PCF or Poisson disk\n"
+"but also uses more resources."
msgstr ""
-"cURL 的默认时é™ï¼Œå•使¯«ç§’。\n"
-"仅使用 cURL 编译时有效果。"
+"设定阴影滤镜的质é‡ã€‚\n"
+"使用 PCF 或 泊æ¾ç›˜ï¼ˆPoisson disk)算法模拟软阴影效果\n"
+"但也会使用更多的硬件资æºã€‚"
#: src/settings_translation_file.cpp
msgid "Defines areas where trees have apples."
@@ -2894,9 +3103,8 @@ msgid "Desynchronize block animation"
msgstr "åŽ»åŒæ­¥å—动画"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Dig key"
-msgstr "峿–¹å‘é”®"
+msgstr "挖掘键"
#: src/settings_translation_file.cpp
msgid "Digging particles"
@@ -2911,6 +3119,10 @@ msgid "Disallow empty passwords"
msgstr "ç¦æ­¢ä½¿ç”¨ç©ºå¯†ç "
#: src/settings_translation_file.cpp
+msgid "Display Density Scaling Factor"
+msgstr "显示密度比例系数"
+
+#: src/settings_translation_file.cpp
msgid "Domain name of server, to be displayed in the serverlist."
msgstr "æœåŠ¡å™¨åŸŸå,将显示在æœåŠ¡å™¨åˆ—è¡¨ã€‚"
@@ -2959,6 +3171,24 @@ msgstr ""
"该功能是实验性的,且API会å˜åŠ¨ã€‚"
#: src/settings_translation_file.cpp
+msgid ""
+"Enable Poisson disk filtering.\n"
+"On true uses Poisson disk to make \"soft shadows\". Otherwise uses PCF "
+"filtering."
+msgstr ""
+"å¯ç”¨æ³Šæ¾ç›˜ï¼ˆPoisson disk)滤镜。\n"
+"使用泊æ¾ç›˜ç®—法æ¥äº§ç”Ÿâ€œè½¯é˜´å½±â€ã€‚ä¸å¯ç”¨çš„è¯å°±ä¼šä½¿ç”¨ PCF 滤镜。"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid ""
+"Enable colored shadows.\n"
+"On true translucent nodes cast colored shadows. This is expensive."
+msgstr ""
+"å¯ç”¨å½©è‰²é˜´å½±ã€‚\n"
+"在åŠé€æ˜ŽèŠ‚ç‚¹ä¸ŠæŠ•å°„å½©è‰²é˜´å½±ã€‚ä¼šæ¶ˆè€—è¶…å¤šçš„èµ„æºã€‚"
+
+#: src/settings_translation_file.cpp
msgid "Enable console window"
msgstr "å¯ç”¨æŽ§åˆ¶å°çª—å£"
@@ -3092,6 +3322,12 @@ msgstr ""
"æ”¹å˜æ­¤è®¾ç½®éœ€è¦é‡å¯ã€‚"
#: src/settings_translation_file.cpp
+msgid ""
+"Enables tradeoffs that reduce CPU load or increase rendering performance\n"
+"at the expense of minor visual glitches that do not impact game playability."
+msgstr "å…许ä¸å½±å“å¯çŽ©æ€§çš„è½»å¾®è§†è§‰é”™è¯¯ï¼Œä»¥æ­¤å‡å°‘ CPU 负载,或æé«˜æ¸²æŸ“性能。"
+
+#: src/settings_translation_file.cpp
msgid "Engine profiling data print interval"
msgstr "打å°å¼•æ“Žæ€§èƒ½åˆ†æžæ•°æ®é—´éš”"
@@ -3135,18 +3371,6 @@ msgid "Fallback font path"
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 "快速键"
@@ -3164,10 +3388,10 @@ msgstr "快速移动"
#: src/settings_translation_file.cpp
msgid ""
-"Fast movement (via the \"special\" key).\n"
+"Fast movement (via the \"Aux1\" key).\n"
"This requires the \"fast\" privilege on the server."
msgstr ""
-"快速移动(通过“特殊â€é”®ï¼‰ã€‚\n"
+"快速移动(通过“Aux1â€é”®ï¼‰ã€‚\n"
"è¿™éœ€è¦æœåŠ¡å™¨çš„â€œfastâ€æƒé™ã€‚"
#: src/settings_translation_file.cpp
@@ -3202,14 +3426,14 @@ 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."
+"which PNG optimizers usually discard, often resulting in dark or\n"
+"light edges to transparent textures. Apply a filter to clean that up\n"
+"at texture load time. This is automatically enabled if mipmapping is enabled."
msgstr ""
"ç»è¿‡æ»¤çš„æè´¨ä¼šä¸Žé‚»è¿‘çš„å…¨é€æ˜Žæè´¨æ··åˆRGB值,\n"
"该值通常会被PNG优化器丢弃,æŸäº›æ—¶å€™ä¼šç»™é€æ˜Žæè´¨äº§ç”Ÿæš—色或\n"
-"亮色的边缘。应用该过滤器将在æè´¨åŠ è½½æ—¶\n"
-"移除该效果。"
+"亮色的边缘。应用该过滤器将在æè´¨åŠ è½½æ—¶ç§»é™¤è¯¥æ•ˆæžœã€‚\n"
+"该过滤器将在å¯ç”¨mipmapping的时候被自动应用。"
#: src/settings_translation_file.cpp
msgid "Filtering"
@@ -3300,15 +3524,17 @@ msgid "Font size"
msgstr "字体大å°"
#: src/settings_translation_file.cpp
-msgid "Font size of the default font in point (pt)."
-msgstr "默认字体大å°ï¼Œå•ä½pt。"
+msgid "Font size divisible by"
+msgstr ""
#: src/settings_translation_file.cpp
-msgid "Font size of the fallback font in point (pt)."
-msgstr "åŽå¤‡å­—体大å°ï¼Œå•ä½pt。"
+#, fuzzy
+msgid "Font size of the default font where 1 unit = 1 pixel at 96 DPI"
+msgstr "默认字体大å°ï¼Œå•ä½pt。"
#: src/settings_translation_file.cpp
-msgid "Font size of the monospace font in point (pt)."
+#, fuzzy
+msgid "Font size of the monospace font where 1 unit = 1 pixel at 96 DPI"
msgstr "等宽字体大å°ï¼Œå•ä½pt。"
#: src/settings_translation_file.cpp
@@ -3321,6 +3547,17 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"For pixel-style fonts that do not scale well, this ensures that font sizes "
+"used\n"
+"with this font will always be divisible by this value, in pixels. For "
+"instance,\n"
+"a pixel font 16 pixels tall should have this set to 16, so it will only ever "
+"be\n"
+"sized 16, 32, 48, etc., so a mod requesting a size of 25 will get 32."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Format of player chat messages. The following strings are valid "
"placeholders:\n"
"@name, @message, @timestamp (optional)"
@@ -3381,10 +3618,6 @@ msgid "Fraction of the visible distance at which fog starts to be rendered"
msgstr "从雾起始点开始雾的å¯è§è·ç¦»åˆ†æ•°"
#: src/settings_translation_file.cpp
-msgid "FreeType fonts"
-msgstr "FreeType 字体"
-
-#: src/settings_translation_file.cpp
msgid ""
"From how far blocks are generated for clients, stated in mapblocks (16 "
"nodes)."
@@ -3414,10 +3647,6 @@ msgid "Full screen"
msgstr "å…¨å±"
#: src/settings_translation_file.cpp
-msgid "Full screen BPP"
-msgstr "å…¨å± BPP"
-
-#: src/settings_translation_file.cpp
msgid "Fullscreen mode."
msgstr "免屿¨¡å¼ã€‚"
@@ -3438,10 +3667,11 @@ msgid "Global callbacks"
msgstr "全局回调"
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
"Global map generation attributes.\n"
"In Mapgen v6 the 'decorations' flag controls all decorations except trees\n"
-"and junglegrass, in all other mapgens this flag controls all decorations."
+"and jungle grass, in all other mapgens this flag controls all decorations."
msgstr ""
"全局地图生æˆå±žæ€§ã€‚\n"
"在地图生æˆå™¨ v6 中‘decorations’标签控制除树木和丛林è‰å¤–所有装饰物。\n"
@@ -3492,7 +3722,6 @@ msgid "HUD toggle key"
msgstr "HUDå¯ç”¨/ç¦ç”¨é”®"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Handling for deprecated Lua API calls:\n"
"- none: Do not log deprecated calls\n"
@@ -3500,9 +3729,9 @@ msgid ""
"- error: abort on usage of deprecated call (suggested for mod developers)."
msgstr ""
"处ç†å·²å¼ƒç”¨çš„ Lua API 调用:\n"
-"- 兼容:(å°è¯•)模拟旧的调用(å‘布版本的默认值)。\n"
-"- 记录:模拟并记录已弃用的调用的回溯(调试的默认值)。\n"
-"- é”™è¯¯ï¼šåœæ­¢ä½¿ç”¨å·²å¼ƒç”¨çš„调用(Mod å¼€å‘人员推è)。"
+"- none:ä¸è®°å½•废弃的调用。\n"
+"- log:模拟并记录已弃用的调用的回溯(调试的默认值)。\n"
+"- errorï¼šåœæ­¢ä½¿ç”¨å·²å¼ƒç”¨çš„调用(Mod å¼€å‘人员推è)。"
#: src/settings_translation_file.cpp
msgid ""
@@ -3526,8 +3755,9 @@ msgid "Heat noise"
msgstr "热噪声"
#: src/settings_translation_file.cpp
-msgid "Height component of the initial window size."
-msgstr "åˆå§‹çª—å£é«˜åº¦ã€‚"
+msgid ""
+"Height component of the initial window size. Ignored in fullscreen mode."
+msgstr "åˆå§‹çª—å£é«˜åº¦ï¼Œå…¨å±æ¨¡å¼ä¸‹å¿½ç•¥è¯¥å€¼ã€‚"
#: src/settings_translation_file.cpp
msgid "Height noise"
@@ -3538,10 +3768,6 @@ msgid "Height select noise"
msgstr "高度选择噪声"
#: src/settings_translation_file.cpp
-msgid "High-precision FPU"
-msgstr "高精度 FPU"
-
-#: src/settings_translation_file.cpp
msgid "Hill steepness"
msgstr "山丘å¡åº¦"
@@ -3785,12 +4011,9 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"If disabled, \"special\" key is used to fly fast if both fly and fast mode "
-"are\n"
+"If disabled, \"Aux1\" key is used to fly fast if both fly and fast mode are\n"
"enabled."
-msgstr ""
-"如果ç¦ç”¨ï¼Œå½“飞行和快速模å¼åŒæ—¶å¯ç”¨æ—¶â€œç‰¹æ®Šâ€é”®ç”¨äºŽå¿«é€Ÿ\n"
-"飞行。"
+msgstr "如果ç¦ç”¨ï¼Œâ€œAux1â€é”®å°†ç”¨äºŽå¿«é€Ÿé£žè¡Œ(飞行和快速模å¼åŒæ—¶å¯ç”¨)。"
#: src/settings_translation_file.cpp
msgid ""
@@ -3816,11 +4039,11 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"If enabled, \"special\" key instead of \"sneak\" key is used for climbing "
-"down and\n"
+"If enabled, \"Aux1\" key instead of \"Sneak\" key is used for climbing down "
+"and\n"
"descending."
msgstr ""
-"如果å¯ç”¨ï¼Œâ€œç‰¹æ®Šâ€é”®å°†ä»£æ›¿æ½œè¡Œé”®çš„å‘下攀爬和\n"
+"如果å¯ç”¨ï¼Œâ€œAux1â€é”®å°†ä»£æ›¿æ½œè¡Œé”®çš„å‘下攀爬和\n"
"下é™ã€‚"
#: src/settings_translation_file.cpp
@@ -3869,7 +4092,15 @@ msgid ""
"to this distance from the player to the node."
msgstr ""
"如果客户端modæ–¹å—范围é™åˆ¶å¯ç”¨ï¼Œé™åˆ¶get_node至玩家\n"
-"到方å—çš„è·ç¦»"
+"到方å—çš„è·ç¦»ã€‚"
+
+#: src/settings_translation_file.cpp
+msgid ""
+"If the execution of a chat command takes longer than this specified time in\n"
+"seconds, add the time information to the chat command message"
+msgstr ""
+"如果èŠå¤©å‘½ä»¤çš„æ‰§è¡Œæ—¶é—´é•¿äºŽæ­¤æŒ‡å®šä»¥ç§’为å•使—¶é—´ï¼Œè¯·å°†æ—¶é—´ä¿¡æ¯æ·»åŠ åˆ°èŠå¤©å‘½ä»¤æ¶ˆ"
+"æ¯ä¸­ã€‚"
#: src/settings_translation_file.cpp
msgid ""
@@ -3924,7 +4155,8 @@ msgstr ""
"é€šå¸¸åªæœ‰æ ¸å¿ƒï¼å†…部构建者需è¦"
#: src/settings_translation_file.cpp
-msgid "Instrument chatcommands on registration."
+#, fuzzy
+msgid "Instrument chat commands on registration."
msgstr "登录时的èŠå¤©å‘½ä»¤ã€‚"
#: src/settings_translation_file.cpp
@@ -4014,7 +4246,8 @@ msgid "Joystick button repetition interval"
msgstr "æ‘‡æ†æŒ‰é’®é‡å¤é—´éš”"
#: src/settings_translation_file.cpp
-msgid "Joystick deadzone"
+#, fuzzy
+msgid "Joystick dead zone"
msgstr "æ‘‡æ†æ— æ•ˆåŒº"
#: src/settings_translation_file.cpp
@@ -5033,10 +5266,6 @@ msgid ""
msgstr "使雾和天空颜色ä¾èµ–于一天中的时间(黎明/傿™šï¼‰å’Œè§†çº¿æ–¹å‘。"
#: src/settings_translation_file.cpp
-msgid "Makes DirectX work with LuaJIT. Disable if it causes troubles."
-msgstr "使DirectXå’ŒLuaJIT一起工作。如果这导致了问题ç¦ç”¨å®ƒã€‚"
-
-#: src/settings_translation_file.cpp
msgid "Makes all liquids opaque"
msgstr "使所有液体ä¸é€æ˜Ž"
@@ -5127,6 +5356,11 @@ msgid "Map save interval"
msgstr "地图ä¿å­˜é—´éš”"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Map shadows update frames"
+msgstr "液体更新时钟间隔"
+
+#: src/settings_translation_file.cpp
msgid "Mapblock limit"
msgstr "地图å—é™åˆ¶"
@@ -5235,6 +5469,10 @@ msgid "Maximum FPS when the window is not focused, or when the game is paused."
msgstr "çª—å£æœªèšç„¦æˆ–æ¸¸æˆæš‚åœæ—¶çš„æœ€å¤§ FPS。"
#: src/settings_translation_file.cpp
+msgid "Maximum distance to render shadows."
+msgstr "最大渲染阴影è·ç¦»ã€‚"
+
+#: src/settings_translation_file.cpp
msgid "Maximum forceloaded blocks"
msgstr "最大强制载入å—"
@@ -5294,6 +5532,8 @@ msgid ""
"be queued.\n"
"This should be lower than curl_parallel_limit."
msgstr ""
+"最大并å‘下载数。 超过此é™åˆ¶çš„下载将排队。 这应该低于 curl_parallel_limit(å·"
+"曲平行é™åˆ¶ï¼‰ã€‚"
#: src/settings_translation_file.cpp
msgid "Maximum number of forceloaded mapblocks."
@@ -5358,10 +5598,19 @@ msgstr ""
"0å–æ¶ˆé˜Ÿåˆ—,-1ä½¿é˜Ÿåˆ—å¤§å°æ— é™ã€‚"
#: src/settings_translation_file.cpp
-msgid "Maximum time in ms a file download (e.g. a mod download) may take."
+#, fuzzy
+msgid ""
+"Maximum time a file download (e.g. a mod download) may take, stated in "
+"milliseconds."
msgstr "å•个文件下载(如mod下载)的最大时间。"
#: src/settings_translation_file.cpp
+msgid ""
+"Maximum time an interactive request (e.g. server list fetch) may take, "
+"stated in milliseconds."
+msgstr "交互å¼è¯·æ±‚(例如æœåŠ¡å™¨åˆ—è¡¨èŽ·å–)å¯èƒ½éœ€è¦çš„æœ€é•¿æ—¶é—´ï¼Œä»¥æ¯«ç§’为å•ä½ã€‚"
+
+#: src/settings_translation_file.cpp
msgid "Maximum users"
msgstr "最大用户数"
@@ -5422,7 +5671,8 @@ msgid "Mod channels"
msgstr "mod频é“"
#: src/settings_translation_file.cpp
-msgid "Modifies the size of the hudbar elements."
+#, fuzzy
+msgid "Modifies the size of the HUD elements."
msgstr "更改hudæ å…ƒç´ å¤§å°ã€‚"
#: src/settings_translation_file.cpp
@@ -5434,6 +5684,11 @@ msgid "Monospace font size"
msgstr "等宽字体大å°"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Monospace font size divisible by"
+msgstr "等宽字体大å°"
+
+#: src/settings_translation_file.cpp
msgid "Mountain height noise"
msgstr "山高度噪声"
@@ -5573,9 +5828,10 @@ msgstr ""
"佳值为'1'。"
#: src/settings_translation_file.cpp
+#, fuzzy
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"
+"This is a trade-off between SQLite transaction overhead and\n"
"memory consumption (4096=100MB, as a rule of thumb)."
msgstr ""
"/clearobjectsæ¯æ¬¡èƒ½åŠ è½½çš„é¢å¤–æ–¹å—æ•°ã€‚\n"
@@ -5597,11 +5853,6 @@ msgstr "默认字体åŽé˜´å½±çš„逿˜Žåº¦ï¼ˆalpha),å–值范围0~255。"
#: src/settings_translation_file.cpp
msgid ""
-"Opaqueness (alpha) of the shadow behind the fallback font, between 0 and 255."
-msgstr "åŽå¤‡å­—体åŽé˜´å½±çš„逿˜Žåº¦ï¼ˆalpha),å–值范围0~255。"
-
-#: src/settings_translation_file.cpp
-msgid ""
"Open the pause menu when the window's focus is lost. Does not pause if a "
"formspec is\n"
"open."
@@ -5610,10 +5861,13 @@ msgstr ""
"åˆ™ä¸æš‚åœã€‚"
#: src/settings_translation_file.cpp
+msgid "Optional override for chat weblink color."
+msgstr "替æ¢èŠå¤©ç½‘页链接的颜色,å¯ç”¨å¯ä¸ç”¨ã€‚"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
-"Path of the fallback font.\n"
-"If “freetype†setting is enabled: Must be a TrueType font.\n"
-"If “freetype†setting is disabled: Must be a bitmap or XML vectors font.\n"
+"Path of the fallback font. Must be a TrueType font.\n"
"This font will be used for certain languages or if the default font is "
"unavailable."
msgstr ""
@@ -5641,10 +5895,9 @@ msgid "Path to texture directory. All textures are first searched from here."
msgstr "æè´¨ç›®å½•路径。所有æè´¨éƒ½é¦–先从此路径æœç´¢ã€‚"
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
-"Path to the default font.\n"
-"If “freetype†setting is enabled: Must be a TrueType font.\n"
-"If “freetype†setting is disabled: Must be a bitmap or XML vectors font.\n"
+"Path to the default font. Must be a TrueType font.\n"
"The fallback font will be used if the font cannot be loaded."
msgstr ""
"默认字体路径。\n"
@@ -5653,10 +5906,9 @@ msgstr ""
"åŽå¤‡å­—体用于ä¸å¯ç”¨é»˜è®¤å­—体的语言。"
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
-"Path to the monospace font.\n"
-"If “freetype†setting is enabled: Must be a TrueType font.\n"
-"If “freetype†setting is disabled: Must be a bitmap or XML vectors font.\n"
+"Path to the monospace font. Must be a TrueType font.\n"
"This font is used for e.g. the console and profiler screen."
msgstr ""
"等宽字体路径。\n"
@@ -5718,6 +5970,11 @@ msgid "Player versus player"
msgstr "玩家对战"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Poisson filtering"
+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."
@@ -5766,11 +6023,12 @@ msgid "Prometheus listener address"
msgstr "Prometheus 监å¬å™¨åœ°å€"
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
"Prometheus listener address.\n"
-"If minetest is compiled with ENABLE_PROMETHEUS option enabled,\n"
+"If Minetest is compiled with ENABLE_PROMETHEUS option enabled,\n"
"enable metrics listener for Prometheus on that address.\n"
-"Metrics can be fetch on http://127.0.0.1:30000/metrics"
+"Metrics can be fetched on http://127.0.0.1:30000/metrics"
msgstr ""
"Prometheus 监å¬å™¨åœ°å€ã€‚\n"
"如果minetest是在å¯ç”¨ENABLE_PROMETHEUS选项的情况下编译的,\n"
@@ -6106,6 +6364,45 @@ msgstr "设定客户端传é€çš„èŠå¤©è®¯æ¯çš„æœ€å¤§å­—符长度。"
#: src/settings_translation_file.cpp
msgid ""
+"Set the shadow strength.\n"
+"Lower value means lighter shadows, higher value means darker shadows."
+msgstr ""
+"设置阴影强度。\n"
+"较低的值表示较亮的阴影,较高的值表示较暗的阴影。"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid ""
+"Set the soft shadow radius size.\n"
+"Lower values mean sharper shadows, bigger values mean softer shadows.\n"
+"Minimum value: 1.0; maximum value: 10.0"
+msgstr ""
+"设置软阴影åŠå¾„大å°ã€‚\n"
+"较低的值æ„å‘³ç€æ›´æ¸…晰的阴影更大的值更柔和。\n"
+"最å°å€¼ 1.0 和最大值 10.0"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid ""
+"Set the tilt of Sun/Moon orbit in degrees.\n"
+"Value of 0 means no tilt / vertical orbit.\n"
+"Minimum value: 0.0; maximum value: 60.0"
+msgstr ""
+"以度为å•ä½è®¾ç½®å¤ªé˜³/月亮轨é“的倾斜度\n"
+"值 0 表示没有倾斜/垂直轨é“。\n"
+"最å°å€¼ 0.0 和最大值 60.0"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid ""
+"Set to true to enable Shadow Mapping.\n"
+"Requires shaders to be enabled."
+msgstr ""
+"设置为真以å¯ç”¨é£˜åŠ¨æ ‘å¶ã€‚\n"
+"需è¦å¯ç”¨ç€è‰²å™¨ã€‚"
+
+#: src/settings_translation_file.cpp
+msgid ""
"Set to true to enable waving leaves.\n"
"Requires shaders to be enabled."
msgstr ""
@@ -6129,6 +6426,16 @@ msgstr ""
"需è¦å¯ç”¨ç€è‰²å™¨ã€‚"
#: src/settings_translation_file.cpp
+msgid ""
+"Sets shadow texture quality to 32 bits.\n"
+"On false, 16 bits texture will be used.\n"
+"This can cause much more artifacts in the shadow."
+msgstr ""
+"将阴影纹ç†è´¨é‡è®¾ç½®ä¸º 32 ä½ã€‚\n"
+"如果为 false(å¦ï¼‰ï¼Œå°†ä½¿ç”¨ 16 ä½çº¹ç†ã€‚\n"
+"è¿™å¯èƒ½ä¼šå¯¼è‡´é˜´å½±ä¸­å‡ºçŽ°æ›´å¤šé˜´å½±ã€‚"
+
+#: src/settings_translation_file.cpp
msgid "Shader path"
msgstr "ç€è‰²å™¨è·¯å¾„"
@@ -6144,16 +6451,32 @@ msgstr ""
"仅用于OpenGL视频åŽç«¯ã€‚"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Shadow filter quality"
+msgstr "截图å“è´¨"
+
+#: src/settings_translation_file.cpp
+msgid "Shadow map max distance in nodes to render shadows"
+msgstr "渲染阴影的节点中的阴影贴图最大è·ç¦»"
+
+#: src/settings_translation_file.cpp
+msgid "Shadow map texture in 32 bits"
+msgstr "32 ä½é˜´å½±è´´å›¾çº¹ç†"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Shadow map texture size"
+msgstr "æœ€å°æè´¨å¤§å°"
+
+#: src/settings_translation_file.cpp
msgid ""
"Shadow offset (in pixels) of the default font. If 0, then shadow will not be "
"drawn."
msgstr "默认字体阴影å移(å•ä½ä¸ºåƒç´ ï¼‰ï¼Œ0 表示ä¸ç»˜åˆ¶é˜´å½±ã€‚"
#: src/settings_translation_file.cpp
-msgid ""
-"Shadow offset (in pixels) of the fallback font. If 0, then shadow will not "
-"be drawn."
-msgstr "åŽå¤‡å­—体阴影å移(å•ä½ä¸ºåƒç´ ï¼‰ï¼Œ0 表示ä¸ç»˜åˆ¶é˜´å½±ã€‚"
+msgid "Shadow strength"
+msgstr "阴影强度"
#: src/settings_translation_file.cpp
msgid "Shape of the minimap. Enabled = round, disabled = square."
@@ -6177,7 +6500,8 @@ msgstr ""
"å˜æ›´åŽé¡»é‡æ–°å¯åŠ¨ã€‚"
#: src/settings_translation_file.cpp
-msgid "Show nametag backgrounds by default"
+#, fuzzy
+msgid "Show name tag backgrounds by default"
msgstr "默认显示å称标签背景"
#: src/settings_translation_file.cpp
@@ -6211,6 +6535,10 @@ msgstr ""
"å‡å°‘抖动。"
#: src/settings_translation_file.cpp
+msgid "Sky Body Orbit Tilt"
+msgstr "天体轨é“倾斜"
+
+#: src/settings_translation_file.cpp
msgid "Slice w"
msgstr "切片 w"
@@ -6267,16 +6595,13 @@ msgid "Sneaking speed, in nodes per second."
msgstr "æ½œè¡Œé€Ÿåº¦ï¼Œä»¥æ–¹å—æ¯ç§’为å•ä½ã€‚"
#: src/settings_translation_file.cpp
-msgid "Sound"
-msgstr "音效"
-
-#: src/settings_translation_file.cpp
-msgid "Special key"
-msgstr "特殊键"
+#, fuzzy
+msgid "Soft shadow radius"
+msgstr "å­—ä½“é˜´å½±é€æ˜Žåº¦"
#: src/settings_translation_file.cpp
-msgid "Special key for climbing/descending"
-msgstr "用于攀登/é™è½çš„特殊键"
+msgid "Sound"
+msgstr "音效"
#: src/settings_translation_file.cpp
msgid ""
@@ -6301,6 +6626,18 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Spread a complete update of shadow map over given amount of frames.\n"
+"Higher values might make shadows laggy, lower values\n"
+"will consume more resources.\n"
+"Minimum value: 1; maximum value: 16"
+msgstr ""
+"把完整地更新一次阴影贴图这项任务分é…给多少帧去完æˆã€‚\n"
+"较高的值å¯èƒ½ä¼šä½¿é˜´å½±æ»žåŽï¼Œè¾ƒä½Žçš„值\n"
+"将消耗更多硬件资æºã€‚\n"
+"最å°å€¼ï¼š1;最大值:16"
+
+#: src/settings_translation_file.cpp
+msgid ""
"Spread of light curve boost range.\n"
"Controls the width of the range to be boosted.\n"
"Standard deviation of the light curve boost Gaussian."
@@ -6429,6 +6766,16 @@ msgstr "æè´¨è·¯å¾„"
#: src/settings_translation_file.cpp
msgid ""
+"Texture size to render the shadow map on.\n"
+"This must be a power of two.\n"
+"Bigger numbers create better shadows but it is also more expensive."
+msgstr ""
+"用于渲染阴影贴图的æè´¨å°ºå¯¸ã€‚\n"
+"数值必须是 2 的幂。\n"
+"数值更大,阴影更好,但è¿ç®—ä¹Ÿæ›´åŠ å¤æ‚。"
+
+#: src/settings_translation_file.cpp
+msgid ""
"Textures on a node may be aligned either to the node or to the world.\n"
"The former mode suits better things like machines, furniture, etc., while\n"
"the latter makes stairs and microblocks fit surroundings better.\n"
@@ -6442,7 +6789,8 @@ msgid "The URL for the content repository"
msgstr "内容存储库的 URL"
#: src/settings_translation_file.cpp
-msgid "The deadzone of the joystick"
+#, fuzzy
+msgid "The dead zone of the joystick"
msgstr "摇æ†çš„æ— æ•ˆåŒº"
#: src/settings_translation_file.cpp
@@ -6452,8 +6800,9 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
msgid "The depth of dirt or other biome filler node."
-msgstr "泥土深度或其他生物群系过滤节点"
+msgstr "泥土深度或其他生物群系过滤节点。"
#: src/settings_translation_file.cpp
msgid ""
@@ -6502,7 +6851,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"The rendering back-end for Irrlicht.\n"
+"The rendering back-end.\n"
"A restart is required after changing this.\n"
"Note: On Android, stick with OGLES1 if unsure! App may fail to start "
"otherwise.\n"
@@ -6513,8 +6862,10 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"The sensitivity of the joystick axes for moving the\n"
-"ingame view frustum around."
+"in-game view frustum around."
msgstr ""
+"摇æ†è½´çµæ•åº¦ï¼ˆç”¨äºŽç§»åŠ¨å­æ¸¸æˆä¸­æ£±å°ä½“形状的\n"
+"å¯è§åŒºåŸŸçš„æ‘‡æ†è½´ï¼‰ã€‚"
#: src/settings_translation_file.cpp
msgid ""
@@ -6613,6 +6964,10 @@ msgid "Touch screen threshold"
msgstr "触å±é˜ˆå€¼"
#: src/settings_translation_file.cpp
+msgid "Tradeoffs for performance"
+msgstr "性能æƒè¡¡"
+
+#: src/settings_translation_file.cpp
msgid "Trees noise"
msgstr "树木噪声"
@@ -6685,7 +7040,7 @@ msgstr "缩放æè´¨æ—¶ä½¿ç”¨åŒçº¿è¿‡æ»¤ã€‚"
#: src/settings_translation_file.cpp
msgid ""
-"Use mip mapping to scale textures. May slightly increase performance,\n"
+"Use mipmapping to scale textures. May slightly increase performance,\n"
"especially when using a high resolution texture pack.\n"
"Gamma correct downscaling is not supported."
msgstr ""
@@ -6800,7 +7155,7 @@ msgid "Viewing range"
msgstr "å¯è§†èŒƒå›´"
#: src/settings_translation_file.cpp
-msgid "Virtual joystick triggers aux button"
+msgid "Virtual joystick triggers Aux1 button"
msgstr ""
#: src/settings_translation_file.cpp
@@ -6875,6 +7230,11 @@ msgid "Waving plants"
msgstr "摇动æ¤ç‰©"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Weblink color"
+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"
@@ -6895,23 +7255,15 @@ msgid ""
"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.\n"
+"memory. Powers of 2 are recommended. This setting is ONLY applied if\n"
+"bilinear/trilinear/anisotropic filtering is enabled.\n"
"This is also used as the base node texture size for world-aligned\n"
"texture autoscaling."
msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Whether FreeType fonts are used, requires FreeType support to be compiled "
-"in.\n"
-"If disabled, bitmap and XML vectors fonts are used instead."
-msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid ""
-"Whether nametag backgrounds should be shown by default.\n"
+"Whether name tag backgrounds should be shown by default.\n"
"Mods may still set a background."
msgstr ""
@@ -6955,7 +7307,8 @@ msgid ""
msgstr "æ˜¯å¦æ˜¾ç¤ºå®¢æˆ·ç«¯è°ƒè¯•ä¿¡æ¯ï¼ˆä¸ŽæŒ‰ F5 的效果相åŒï¼‰ã€‚"
#: src/settings_translation_file.cpp
-msgid "Width component of the initial window size."
+#, fuzzy
+msgid "Width component of the initial window size. Ignored in fullscreen mode."
msgstr "åˆå§‹çª—å£å¤§å°çš„宽度。"
#: src/settings_translation_file.cpp
@@ -7044,34 +7397,23 @@ msgid "Y-level of seabed."
msgstr "海底的Yåæ ‡ã€‚"
#: src/settings_translation_file.cpp
-msgid ""
-"ZLib compression level to use when saving mapblocks to disk.\n"
-"-1 - Zlib's default compression level\n"
-"0 - no compresson, fastest\n"
-"9 - best compression, slowest\n"
-"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)"
-msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid ""
-"ZLib compression level to use when sending mapblocks to the client.\n"
-"-1 - Zlib's default compression level\n"
-"0 - no compresson, fastest\n"
-"9 - best compression, slowest\n"
-"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "cURL file download timeout"
msgstr "cURL 文件下载超时"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "cURL interactive timeout"
+msgstr "cURL è¶…æ—¶"
+
+#: src/settings_translation_file.cpp
msgid "cURL parallel limit"
msgstr "cURL å¹¶å‘é™åˆ¶"
-#: src/settings_translation_file.cpp
-msgid "cURL timeout"
-msgstr "cURL è¶…æ—¶"
+#~ msgid "- Creative Mode: "
+#~ msgstr "- 创造模å¼: "
+
+#~ msgid "- Damage: "
+#~ msgstr "- 伤害: "
#~ msgid ""
#~ "0 = parallax occlusion with slope information (faster).\n"
@@ -7080,6 +7422,9 @@ msgstr "cURL è¶…æ—¶"
#~ "0 = 利用梯度信æ¯è¿›è¡Œè§†å·®é®è”½ (较快).\n"
#~ "1 = 浮雕映射 (较慢, 但准确)."
+#~ msgid "Address / Port"
+#~ msgstr "地å€/端å£"
+
#~ msgid ""
#~ "Adjust the gamma encoding for the light tables. Higher numbers are "
#~ "brighter.\n"
@@ -7094,6 +7439,9 @@ msgstr "cURL è¶…æ—¶"
#~ msgid "Back"
#~ msgstr "åŽé€€"
+#~ msgid "Bits per pixel (aka color depth) in fullscreen mode."
+#~ msgstr "免屿¨¡å¼ä¸­çš„使¯åƒç´ ï¼ˆåˆç§°è‰²å½©æ·±åº¦ï¼‰ã€‚"
+
#~ msgid "Bump Mapping"
#~ msgstr "凹凸贴图"
@@ -7130,14 +7478,27 @@ msgstr "cURL è¶…æ—¶"
#~ msgid "Controls width of tunnels, a smaller value creates wider tunnels."
#~ msgstr "控制隧é“宽度,较å°çš„值创建更宽的隧é“。"
+#~ msgid "Credits"
+#~ msgstr "贡献者"
+
#~ msgid "Crosshair color (R,G,B)."
#~ msgstr "准星颜色(红,绿,è“)。"
+#~ msgid "Damage enabled"
+#~ msgstr "伤害已å¯ç”¨"
+
#, fuzzy
#~ msgid "Darkness sharpness"
#~ msgstr "地图生æˆå™¨å¹³é¢æ¹–å¡åº¦"
#~ msgid ""
+#~ "Default timeout for cURL, stated in milliseconds.\n"
+#~ "Only has an effect if compiled with cURL."
+#~ msgstr ""
+#~ "cURL 的默认时é™ï¼Œå•使¯«ç§’。\n"
+#~ "仅使用 cURL 编译时有效果。"
+
+#~ msgid ""
#~ "Defines areas of floatland smooth terrain.\n"
#~ "Smooth floatlands occur when noise > 0."
#~ msgstr ""
@@ -7194,9 +7555,27 @@ msgstr "cURL è¶…æ—¶"
#~ msgid "FPS in pause menu"
#~ msgstr "æš‚åœèœå• FPS"
+#~ msgid "Fallback font shadow"
+#~ msgstr "åŽå¤‡å­—体阴影"
+
+#~ msgid "Fallback font shadow alpha"
+#~ msgstr "åŽå¤‡å­—ä½“é˜´å½±é€æ˜Žåº¦"
+
+#~ msgid "Fallback font size"
+#~ msgstr "åŽå¤‡å­—体大å°"
+
#~ msgid "Font shadow alpha (opaqueness, between 0 and 255)."
#~ msgstr "字体阴影ä¸é€æ˜Žåº¦ï¼ˆ0-255)。"
+#~ msgid "Font size of the fallback font in point (pt)."
+#~ msgstr "åŽå¤‡å­—体大å°ï¼Œå•ä½pt。"
+
+#~ msgid "FreeType fonts"
+#~ msgstr "FreeType 字体"
+
+#~ msgid "Full screen BPP"
+#~ msgstr "å…¨å± BPP"
+
#~ msgid "Gamma"
#~ msgstr "伽马"
@@ -7206,9 +7585,15 @@ msgstr "cURL è¶…æ—¶"
#~ msgid "Generate normalmaps"
#~ msgstr "生æˆå‘现贴图"
+#~ msgid "High-precision FPU"
+#~ msgstr "高精度 FPU"
+
#~ msgid "IPv6 support."
#~ msgstr "IPv6 支æŒã€‚"
+#~ msgid "Install: file: \"$1\""
+#~ msgstr "安装:文件:â€$1“"
+
#, fuzzy
#~ msgid "Lava depth"
#~ msgstr "巨大洞穴深度"
@@ -7222,6 +7607,9 @@ msgstr "cURL è¶…æ—¶"
#~ msgid "Main menu style"
#~ msgstr "主èœå•æ ·å¼"
+#~ msgid "Makes DirectX work with LuaJIT. Disable if it causes troubles."
+#~ msgstr "使DirectXå’ŒLuaJIT一起工作。如果这导致了问题ç¦ç”¨å®ƒã€‚"
+
#~ msgid "Minimap in radar mode, Zoom x2"
#~ msgstr "é›·è¾¾å°åœ°å›¾ï¼Œæ”¾å¤§è‡³ä¸¤å€"
@@ -7234,6 +7622,9 @@ msgstr "cURL è¶…æ—¶"
#~ msgid "Minimap in surface mode, Zoom x4"
#~ msgstr "地表模å¼å°åœ°å›¾, 放大至四å€"
+#~ msgid "Name / Password"
+#~ msgstr "用户å/密ç "
+
#~ msgid "Name/Password"
#~ msgstr "用户å/密ç "
@@ -7252,6 +7643,11 @@ msgstr "cURL è¶…æ—¶"
#~ msgid "Ok"
#~ msgstr "确定"
+#~ msgid ""
+#~ "Opaqueness (alpha) of the shadow behind the fallback font, between 0 and "
+#~ "255."
+#~ msgstr "åŽå¤‡å­—体åŽé˜´å½±çš„逿˜Žåº¦ï¼ˆalpha),å–值范围0~255。"
+
#~ msgid "Overall bias of parallax occlusion effect, usually scale/2."
#~ msgstr "视差é®è”½æ•ˆæžœçš„æ•´ä½“斜纹,通常为比例/2。"
@@ -7285,16 +7681,40 @@ msgstr "cURL è¶…æ—¶"
#~ msgid "Path to save screenshots at."
#~ msgstr "å±å¹•截图ä¿å­˜è·¯å¾„。"
+#~ msgid "PvP enabled"
+#~ msgstr "å¯ç”¨çŽ©å®¶å¯¹æˆ˜"
+
#~ msgid "Reset singleplayer world"
#~ msgstr "é‡ç½®å•人世界"
#~ msgid "Select Package File:"
#~ msgstr "选择包文件:"
+#~ msgid ""
+#~ "Set the shadow update time.\n"
+#~ "Lower value means shadows and map updates faster, but it consume more "
+#~ "resources.\n"
+#~ "Minimun value 0.001 seconds max value 0.2 seconds"
+#~ msgstr ""
+#~ "设置阴影更新时间。\n"
+#~ "较低的值æ„味ç€é˜´å½±å’Œè´´å›¾æ›´æ–°æ›´å¿«ï¼Œä½†ä¼šæ¶ˆè€—更多资æºã€‚\n"
+#~ "最å°å€¼ 0.001 ç§’ 最大值 0.2 ç§’"
+
#, fuzzy
#~ msgid "Shadow limit"
#~ msgstr "地图å—é™åˆ¶"
+#~ msgid ""
+#~ "Shadow offset (in pixels) of the fallback font. If 0, then shadow will "
+#~ "not be drawn."
+#~ msgstr "åŽå¤‡å­—体阴影å移(å•ä½ä¸ºåƒç´ ï¼‰ï¼Œ0 表示ä¸ç»˜åˆ¶é˜´å½±ã€‚"
+
+#~ msgid "Special"
+#~ msgstr "特殊"
+
+#~ msgid "Special key"
+#~ msgstr "特殊键"
+
#~ msgid "Start Singleplayer"
#~ msgstr "å•人游æˆ"
@@ -7304,6 +7724,9 @@ msgstr "cURL è¶…æ—¶"
#~ msgid "This font will be used for certain languages."
#~ msgstr "用于特定语言的字体。"
+#~ msgid "To enable shaders the OpenGL driver needs to be used."
+#~ msgstr "å¯ç”¨ç€è‰²å™¨éœ€è¦ä½¿ç”¨OpenGL驱动。"
+
#~ msgid "Toggle Cinematic"
#~ msgstr "切æ¢ç”µå½±æ¨¡å¼"
@@ -7322,3 +7745,9 @@ msgstr "cURL è¶…æ—¶"
#~ msgid "Yes"
#~ msgstr "是"
+
+#~ msgid "You died."
+#~ msgstr "æ‚¨å·²ç»æ­»äº¡."
+
+#~ msgid "needs_fallback_font"
+#~ msgstr "yes"
diff --git a/po/zh_TW/minetest.po b/po/zh_TW/minetest.po
index 99332e226..ae10a17ff 100644
--- a/po/zh_TW/minetest.po
+++ b/po/zh_TW/minetest.po
@@ -2,9 +2,9 @@ msgid ""
msgstr ""
"Project-Id-Version: Chinese (Traditional) (Minetest)\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-02-23 19:03+0100\n"
-"PO-Revision-Date: 2020-12-24 05:29+0000\n"
-"Last-Translator: Man Ho Yiu <yiufamily.hh@gmail.com>\n"
+"POT-Creation-Date: 2022-01-25 23:19+0100\n"
+"PO-Revision-Date: 2022-01-16 02:52+0000\n"
+"Last-Translator: Yiu Man Ho <yiufamily.hh@gmail.com>\n"
"Language-Team: Chinese (Traditional) <https://hosted.weblate.org/projects/"
"minetest/minetest/zh_Hant/>\n"
"Language: zh_TW\n"
@@ -12,7 +12,43 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
-"X-Generator: Weblate 4.4.1-dev\n"
+"X-Generator: Weblate 4.10.1\n"
+
+#: builtin/client/chatcommands.lua
+msgid "Clear the out chat queue"
+msgstr "清除èŠå¤©ä½‡åˆ—"
+
+#: builtin/client/chatcommands.lua
+msgid "Empty command."
+msgstr "清空指令。"
+
+#: builtin/client/chatcommands.lua
+msgid "Exit to main menu"
+msgstr "離開並回到é¸å–®"
+
+#: builtin/client/chatcommands.lua
+msgid "Invalid command: "
+msgstr "無效的指令: "
+
+#: builtin/client/chatcommands.lua
+msgid "Issued command: "
+msgstr "發é€çš„æŒ‡ä»¤: "
+
+#: builtin/client/chatcommands.lua
+msgid "List online players"
+msgstr "列出線上玩家"
+
+#: builtin/client/chatcommands.lua
+msgid "Online players: "
+msgstr "線上玩家: "
+
+#: builtin/client/chatcommands.lua
+msgid "The out chat queue is now empty."
+msgstr "å°å¤–èŠå¤©ä½‡åˆ—ç¾åœ¨ç‚ºç©ºã€‚"
+
+#: builtin/client/chatcommands.lua
+msgid "This command is disabled by server."
+msgstr "這個指令被伺æœå™¨åœç”¨ã€‚"
#: builtin/client/death_formspec.lua src/client/game.cpp
msgid "Respawn"
@@ -22,12 +58,40 @@ msgstr "é‡ç”Ÿ"
msgid "You died"
msgstr "您已死亡"
+#: builtin/common/chatcommands.lua
+msgid "Available commands:"
+msgstr "å¯ç”¨çš„æŒ‡ä»¤:"
+
+#: builtin/common/chatcommands.lua
+msgid "Available commands: "
+msgstr "å¯ç”¨çš„æŒ‡ä»¤: "
+
+#: builtin/common/chatcommands.lua
+msgid "Command not available: "
+msgstr "指令無法使用: "
+
+#: builtin/common/chatcommands.lua
+msgid "Get help for commands"
+msgstr "å–得指令的說明"
+
+#: builtin/common/chatcommands.lua
+msgid ""
+"Use '.help <cmd>' to get more information, or '.help all' to list everything."
+msgstr "使用「.help <cmd>ã€ä¾†å–得更多資訊,或使用「.help allã€ä¾†åˆ—出所有指令。"
+
+#: builtin/common/chatcommands.lua
+msgid "[all | <cmd>]"
+msgstr "[all | <cmd>]"
+
#: builtin/fstk/dialog.lua builtin/fstk/ui.lua src/gui/modalMenu.cpp
-#, fuzzy
msgid "OK"
msgstr "OK"
#: builtin/fstk/ui.lua
+msgid "<none available>"
+msgstr "<沒有å¯ç”¨çš„>"
+
+#: builtin/fstk/ui.lua
msgid "An error occurred in a Lua script:"
msgstr "Lua 指令稿發生錯誤:"
@@ -152,62 +216,59 @@ msgstr "已啟用"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "\"$1\" already exists. Would you like to overwrite it?"
-msgstr ""
+msgstr "“$1â€å·²ç¶“存在。您è¦è¦†è“‹å®ƒå—Žï¼Ÿ"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "$1 and $2 dependencies will be installed."
-msgstr ""
+msgstr "$1 和他的 $2 個ä¾è³´å°‡æœƒè¢«å®‰è£ã€‚"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "$1 by $2"
-msgstr ""
+msgstr "$1 作者: $2"
#: builtin/mainmenu/dlg_contentstore.lua
msgid ""
"$1 downloading,\n"
"$2 queued"
msgstr ""
+"$1 個正在下載,\n"
+"$2 個正在等待"
#: builtin/mainmenu/dlg_contentstore.lua
-#, fuzzy
msgid "$1 downloading..."
-msgstr "正在載入..."
+msgstr "正在下載 $1..."
#: builtin/mainmenu/dlg_contentstore.lua
msgid "$1 required dependencies could not be found."
-msgstr ""
+msgstr "找ä¸åˆ° $1 所需的ä¾è³´é …。"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "$1 will be installed, and $2 dependencies will be skipped."
-msgstr ""
+msgstr "å°‡å®‰è£ $1,並且將跳éŽä»–çš„ $2 個ä¾è³´é …。"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "All packages"
msgstr "所有套件"
#: builtin/mainmenu/dlg_contentstore.lua
-#, fuzzy
msgid "Already installed"
-msgstr "已使用此按éµ"
+msgstr "已安è£"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Back to Main Menu"
msgstr "返回主é¸å–®"
#: builtin/mainmenu/dlg_contentstore.lua
-#, fuzzy
msgid "Base Game:"
-msgstr "主æŒéŠæˆ²"
+msgstr "ä¸»éŠæˆ²:"
#: builtin/mainmenu/dlg_contentstore.lua
-#, fuzzy
msgid "ContentDB is not available when Minetest was compiled without cURL"
-msgstr "在沒有cURL的情æ³ä¸‹ç·¨è­¯Minetest時,ContentDBä¸å¯ç”¨"
+msgstr "在沒有 cURL 的情æ³ä¸‹ç·¨è­¯ Minetest 時,ContentDB ä¸å¯ç”¨"
#: builtin/mainmenu/dlg_contentstore.lua
-#, fuzzy
msgid "Downloading..."
-msgstr "正在載入..."
+msgstr "正在下載..."
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Failed to download $1"
@@ -223,19 +284,21 @@ msgid "Install"
msgstr "安è£"
#: builtin/mainmenu/dlg_contentstore.lua
-#, fuzzy
msgid "Install $1"
-msgstr "安è£"
+msgstr "å®‰è£ $1"
#: builtin/mainmenu/dlg_contentstore.lua
-#, fuzzy
msgid "Install missing dependencies"
-msgstr "å¯é¸ç›¸ä¾å…ƒä»¶ï¼š"
+msgstr "安è£ç¼ºå°‘çš„ä¾è³´"
+
+#: builtin/mainmenu/dlg_contentstore.lua
+msgid "Install: Unsupported file type or broken archive"
+msgstr "安è£ï¼šæª”æ¡ˆé¡žåž‹ä¸æ”¯æ´ï¼Œæˆ–是å°å­˜æª”æå£ž"
#: builtin/mainmenu/dlg_contentstore.lua
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Mods"
-msgstr "Mod"
+msgstr "Mods"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "No packages could be retrieved"
@@ -246,25 +309,24 @@ msgid "No results"
msgstr "ç„¡çµæžœ"
#: builtin/mainmenu/dlg_contentstore.lua
-#, fuzzy
msgid "No updates"
-msgstr "æ›´æ–°"
+msgstr "ç„¡æ›´æ–°"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Not found"
-msgstr ""
+msgstr "找ä¸åˆ°"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Overwrite"
-msgstr ""
+msgstr "覆蓋"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Please check that the base game is correct."
-msgstr ""
+msgstr "è«‹æª¢æŸ¥åŸºç¤ŽéŠæˆ²æ˜¯å¦æ­£ç¢ºã€‚"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Queued"
-msgstr ""
+msgstr "已排程"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Texture packs"
@@ -280,20 +342,19 @@ msgstr "æ›´æ–°"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "Update All [$1]"
-msgstr ""
+msgstr "全部更新 [$1]"
#: builtin/mainmenu/dlg_contentstore.lua
msgid "View more information in a web browser"
-msgstr ""
+msgstr "在網絡ç€è¦½å™¨ä¸­æŸ¥çœ‹æ›´å¤šä¿¡æ¯"
#: builtin/mainmenu/dlg_create_world.lua
msgid "A world named \"$1\" already exists"
-msgstr "å為「$1ã€çš„世界已存在"
+msgstr "å為「$1ã€çš„世界已經存在"
#: builtin/mainmenu/dlg_create_world.lua
-#, fuzzy
msgid "Additional terrain"
-msgstr "其他地形"
+msgstr "更多地形"
#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
msgid "Altitude chill"
@@ -315,23 +376,20 @@ msgid "Biomes"
msgstr "生物雜訊"
#: builtin/mainmenu/dlg_create_world.lua
-#, fuzzy
msgid "Caverns"
-msgstr "洞穴雜訊"
+msgstr "大洞穴"
#: builtin/mainmenu/dlg_create_world.lua
-#, fuzzy
msgid "Caves"
-msgstr "å€é »ç¨‹"
+msgstr "æ´žç©´"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Create"
msgstr "建立"
#: builtin/mainmenu/dlg_create_world.lua
-#, fuzzy
msgid "Decorations"
-msgstr "迭代"
+msgstr "è£é£¾ç‰©"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Download a game, such as Minetest Game, from minetest.net"
@@ -342,14 +400,12 @@ msgid "Download one from minetest.net"
msgstr "從 minetest.net 下載一個"
#: builtin/mainmenu/dlg_create_world.lua
-#, fuzzy
msgid "Dungeons"
-msgstr "地城雜訊"
+msgstr "地牢"
#: builtin/mainmenu/dlg_create_world.lua
-#, fuzzy
msgid "Flat terrain"
-msgstr "å¹³å¦ä¸–界"
+msgstr "è¶…å¹³å¦ä¸–界"
#: builtin/mainmenu/dlg_create_world.lua
#, fuzzy
@@ -357,9 +413,8 @@ msgid "Floating landmasses in the sky"
msgstr "浮地山密度"
#: builtin/mainmenu/dlg_create_world.lua
-#, fuzzy
msgid "Floatlands (experimental)"
-msgstr "浮地高度"
+msgstr "空島(實驗性)"
#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
msgid "Game"
@@ -374,12 +429,10 @@ msgid "Hills"
msgstr "å±±"
#: builtin/mainmenu/dlg_create_world.lua
-#, fuzzy
msgid "Humid rivers"
-msgstr "顯示å¡é©…動程å¼"
+msgstr "潮濕的河æµ"
#: builtin/mainmenu/dlg_create_world.lua
-#, fuzzy
msgid "Increases humidity around rivers"
msgstr "增加河æµå‘¨åœçš„æ¿•度"
@@ -388,9 +441,8 @@ msgid "Lakes"
msgstr "æ²³æµ"
#: builtin/mainmenu/dlg_create_world.lua
-#, fuzzy
msgid "Low humidity and high heat causes shallow or dry rivers"
-msgstr "因低濕度和高熱é‡è€Œå°Žè‡´æ²³æµæ·ºæˆ–乾燥"
+msgstr "å› ä½Žæ¿•åº¦å’Œé«˜ç†±åº¦è€Œå°Žè‡´æ²³æµæ·ºæˆ–乾燥"
#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
msgid "Mapgen"
@@ -398,24 +450,21 @@ msgstr "地圖產生器"
#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp
msgid "Mapgen flags"
-msgstr "Mapgen 旗標"
+msgstr "地圖產生器旗標"
#: builtin/mainmenu/dlg_create_world.lua
-#, fuzzy
msgid "Mapgen-specific flags"
-msgstr "Mapgen v5 特別旗標"
+msgstr "v5 地圖產生器特別旗標"
#: builtin/mainmenu/dlg_create_world.lua
-#, fuzzy
msgid "Mountains"
-msgstr "山雜訊"
+msgstr "山脈"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Mud flow"
msgstr "泥石æµ"
#: builtin/mainmenu/dlg_create_world.lua
-#, fuzzy
msgid "Network of tunnels and caves"
msgstr "éš§é“和洞穴網絡"
@@ -425,16 +474,15 @@ msgstr "æœªé¸æ“‡éŠæˆ²"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Reduces heat with altitude"
-msgstr ""
+msgstr "隨海拔é™ä½Žç†±åº¦"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Reduces humidity with altitude"
-msgstr ""
+msgstr "濕度隨海拔å‡é«˜è€Œé™ä½Ž"
#: builtin/mainmenu/dlg_create_world.lua
-#, fuzzy
msgid "Rivers"
-msgstr "æ²³æµå¤§å°"
+msgstr "æ²³æµ"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Sea level rivers"
@@ -443,7 +491,7 @@ msgstr "生æˆåœ¨æµ·å¹³é¢çš„æ²³æµ"
#: builtin/mainmenu/dlg_create_world.lua
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Seed"
-msgstr "種å­"
+msgstr "種å­ç¢¼"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Smooth transition between biomes"
@@ -456,45 +504,40 @@ msgid ""
msgstr "出ç¾åœ¨åœ°å½¢ä¸Šçš„çµæ§‹ï¼ˆå°v6地圖生æˆå™¨å‰µå»ºçš„æ¨¹æœ¨å’Œå¢æž—è‰ç„¡å½±éŸ¿ï¼‰"
#: builtin/mainmenu/dlg_create_world.lua
-#, fuzzy
msgid "Structures appearing on the terrain, typically trees and plants"
-msgstr "出ç¾åœ¨åœ°å½¢ä¸Šçš„çµæ§‹ï¼Œé€šå¸¸æ˜¯æ¨¹æœ¨å’Œæ¤ç‰©"
+msgstr "出ç¾åœ¨ä¸–ç•Œä¸Šçš„çµæ§‹ï¼Œé€šå¸¸æ˜¯æ¨¹æœ¨å’Œæ¤ç‰©"
#: builtin/mainmenu/dlg_create_world.lua
-#, fuzzy
msgid "Temperate, Desert"
msgstr "溫帶沙漠"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Temperate, Desert, Jungle"
-msgstr ""
+msgstr "æº«å¸¶ã€æ²™æ¼ ã€å¢æž—"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Temperate, Desert, Jungle, Tundra, Taiga"
-msgstr ""
+msgstr "æº«å¸¶ï¼Œæ²™æ¼ ï¼Œå¢æž—,苔原,é‡è‘‰æž—"
#: builtin/mainmenu/dlg_create_world.lua
-#, fuzzy
msgid "Terrain surface erosion"
-msgstr "地形基礎高度"
+msgstr "地形表é¢ä¾µè•"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Trees and jungle grass"
-msgstr ""
+msgstr "æ¨¹æœ¨å’Œå¢æž—è‰"
#: builtin/mainmenu/dlg_create_world.lua
-#, fuzzy
msgid "Vary river depth"
-msgstr "æ²³æµæ·±åº¦"
+msgstr "è®ŠåŒ–çš„æ²³æµæ·±åº¦"
#: builtin/mainmenu/dlg_create_world.lua
msgid "Very large caverns deep in the underground"
msgstr "地下深處的巨大洞穴"
#: builtin/mainmenu/dlg_create_world.lua
-#, fuzzy
msgid "Warning: The Development Test is meant for developers."
-msgstr "警告:最å°åŒ–的開發測試僅供開發者使用。"
+msgstr "警告:Development Test 僅供開發者使用。"
#: builtin/mainmenu/dlg_create_world.lua
msgid "World name"
@@ -502,7 +545,7 @@ msgstr "世界å稱"
#: builtin/mainmenu/dlg_create_world.lua
msgid "You have no games installed."
-msgstr "您未安è£éŠæˆ²ã€‚"
+msgstr "您未安è£ä»»ä½•éŠæˆ²ã€‚"
#: builtin/mainmenu/dlg_delete_content.lua
msgid "Are you sure you want to delete \"$1\"?"
@@ -520,11 +563,11 @@ msgstr "pkgmgr:無法刪除「$1ã€"
#: builtin/mainmenu/dlg_delete_content.lua
msgid "pkgmgr: invalid path \"$1\""
-msgstr "pkgmgr:「%1ã€è·¯å¾‘無效"
+msgstr "pkgmgr:「$1ã€è·¯å¾‘無效"
#: builtin/mainmenu/dlg_delete_world.lua
msgid "Delete World \"$1\"?"
-msgstr "刪除「$1ã€ä¸–界?"
+msgstr "刪除世界「$1ã€ï¼Ÿ"
#: builtin/mainmenu/dlg_rename_modpack.lua
msgid "Accept"
@@ -546,7 +589,7 @@ msgstr "(未æä¾›è¨­å®šæè¿°ï¼‰"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "2D Noise"
-msgstr "2D 雜訊值"
+msgstr "二維雜訊值"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "< Back to Settings page"
@@ -556,7 +599,7 @@ msgstr "< 回到設定é é¢"
msgid "Browse"
msgstr "ç€è¦½"
-#: builtin/mainmenu/dlg_settings_advanced.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_settings.lua
msgid "Disabled"
msgstr "å·²åœç”¨"
@@ -569,9 +612,8 @@ msgid "Enabled"
msgstr "已啟用"
#: builtin/mainmenu/dlg_settings_advanced.lua
-#, fuzzy
msgid "Lacunarity"
-msgstr "Lacunarity"
+msgstr "空隙"
#: builtin/mainmenu/dlg_settings_advanced.lua
#, fuzzy
@@ -583,9 +625,8 @@ msgid "Offset"
msgstr "補償"
#: builtin/mainmenu/dlg_settings_advanced.lua
-#, fuzzy
-msgid "Persistance"
-msgstr "暫留"
+msgid "Persistence"
+msgstr "æŒçºŒæ€§"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Please enter a valid integer."
@@ -593,7 +634,7 @@ msgstr "請輸入有效的整數。"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Please enter a valid number."
-msgstr "請輸入有效的數字。"
+msgstr "請輸入一個有效的數字。"
#: builtin/mainmenu/dlg_settings_advanced.lua
msgid "Restore Default"
@@ -603,7 +644,7 @@ msgstr "還原至é è¨­å€¼"
msgid "Scale"
msgstr "è¦æ¨¡"
-#: builtin/mainmenu/dlg_settings_advanced.lua
+#: builtin/mainmenu/dlg_settings_advanced.lua builtin/mainmenu/tab_online.lua
msgid "Search"
msgstr "æœå°‹"
@@ -695,14 +736,6 @@ msgid "Install Mod: Unable to find suitable folder name for modpack $1"
msgstr "å®‰è£ Mod:找ä¸åˆ° $1 Mod 包é©åˆçš„資料夾å稱"
#: builtin/mainmenu/pkgmgr.lua
-msgid "Install: Unsupported file type \"$1\" or broken archive"
-msgstr "安è£ï¼šã€Œ%1ã€æª”æ¡ˆé¡žåž‹ä¸æ”¯æ´ï¼Œæˆ–是å°å­˜æª”æå£ž"
-
-#: builtin/mainmenu/pkgmgr.lua
-msgid "Install: file: \"$1\""
-msgstr "安è£ï¼šæª”案:「$1ã€"
-
-#: builtin/mainmenu/pkgmgr.lua
msgid "Unable to find a valid mod or modpack"
msgstr "找ä¸åˆ°æœ‰æ•ˆçš„ Mod 或 Mod 包"
@@ -727,14 +760,50 @@ msgid "Loading..."
msgstr "正在載入..."
#: builtin/mainmenu/serverlistmgr.lua
-#, fuzzy
msgid "Public server list is disabled"
-msgstr "å·²åœç”¨ç”¨æˆ¶ç«¯æŒ‡ä»¤ç¨¿"
+msgstr "å·²åœç”¨å…¬é–‹ä¼ºæœå™¨åˆ—表"
#: builtin/mainmenu/serverlistmgr.lua
msgid "Try reenabling public serverlist and check your internet connection."
msgstr "è«‹å˜—è©¦é‡æ–°å•Ÿç”¨å…¬å…±ä¼ºæœå™¨æ¸…單並檢查您的網際網路連線。"
+#: builtin/mainmenu/tab_about.lua
+msgid "About"
+msgstr "關於"
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Active Contributors"
+msgstr "æ´»èºçš„è²¢ç»è€…"
+
+#: builtin/mainmenu/tab_about.lua
+#, fuzzy
+msgid "Active renderer:"
+msgstr "活動目標傳é€ç¯„åœ"
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Core Developers"
+msgstr "核心開發者"
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Open User Data Directory"
+msgstr "打開用戶資料目錄"
+
+#: builtin/mainmenu/tab_about.lua
+msgid ""
+"Opens the directory that contains user-provided worlds, games, mods,\n"
+"and texture packs in a file manager / explorer."
+msgstr ""
+"在文件管ç†å™¨/文件ç€è¦½å™¨ä¸­æ‰“開包å«\n"
+"用戶æä¾›çš„世界ã€éŠæˆ²ã€modã€æè³ªåŒ…çš„ç›®éŒ„ã€‚"
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Previous Contributors"
+msgstr "å…ˆå‰çš„è²¢ç»è€…"
+
+#: builtin/mainmenu/tab_about.lua
+msgid "Previous Core Developers"
+msgstr "å…ˆå‰çš„æ ¸å¿ƒé–‹ç™¼è€…"
+
#: builtin/mainmenu/tab_content.lua
msgid "Browse online content"
msgstr "ç€è¦½ç·šä¸Šå…§å®¹"
@@ -775,37 +844,6 @@ msgstr "解除安è£å¥—ä»¶"
msgid "Use Texture Pack"
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
-#, fuzzy
-msgid "Open User Data Directory"
-msgstr "鏿“‡ç›®éŒ„"
-
-#: builtin/mainmenu/tab_credits.lua
-msgid ""
-"Opens the directory that contains user-provided worlds, games, mods,\n"
-"and texture packs in a file manager / explorer."
-msgstr ""
-
-#: builtin/mainmenu/tab_credits.lua
-msgid "Previous Contributors"
-msgstr "å…ˆå‰çš„è²¢ç»è€…"
-
-#: builtin/mainmenu/tab_credits.lua
-msgid "Previous Core Developers"
-msgstr "å…ˆå‰çš„æ ¸å¿ƒé–‹ç™¼è€…"
-
#: builtin/mainmenu/tab_local.lua
msgid "Announce Server"
msgstr "公佈伺æœå™¨"
@@ -831,13 +869,12 @@ msgid "Host Server"
msgstr "主機伺æœå™¨"
#: builtin/mainmenu/tab_local.lua
-#, fuzzy
msgid "Install games from ContentDB"
-msgstr "從ContentDB安è£éŠæˆ²"
+msgstr "從 ContentDB 安è£éŠæˆ²"
-#: builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
msgid "Name"
-msgstr ""
+msgstr "åå­—"
#: builtin/mainmenu/tab_local.lua
msgid "New"
@@ -847,23 +884,21 @@ msgstr "新增"
msgid "No world created or selected!"
msgstr "未建立或é¸å–世界ï¼"
-#: builtin/mainmenu/tab_local.lua
-#, fuzzy
+#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
msgid "Password"
-msgstr "新密碼"
+msgstr "密碼"
#: builtin/mainmenu/tab_local.lua
msgid "Play Game"
msgstr "éŠçŽ©éŠæˆ²"
-#: builtin/mainmenu/tab_local.lua
+#: builtin/mainmenu/tab_local.lua builtin/mainmenu/tab_online.lua
msgid "Port"
msgstr "連線埠"
#: builtin/mainmenu/tab_local.lua
-#, fuzzy
msgid "Select Mods"
-msgstr "é¸å–世界:"
+msgstr "鏿“‡æ¨¡çµ„:"
#: builtin/mainmenu/tab_local.lua
msgid "Select World:"
@@ -878,8 +913,12 @@ msgid "Start Game"
msgstr "é–‹å§‹éŠæˆ²"
#: builtin/mainmenu/tab_online.lua
-msgid "Address / Port"
-msgstr "地å€ï¼é€£ç·šåŸ "
+msgid "Address"
+msgstr "地å€"
+
+#: builtin/mainmenu/tab_online.lua src/client/keycode.cpp
+msgid "Clear"
+msgstr "清除"
#: builtin/mainmenu/tab_online.lua
msgid "Connect"
@@ -889,34 +928,42 @@ msgstr "連線"
msgid "Creative mode"
msgstr "創造模å¼"
+#. ~ PvP = Player versus Player
#: builtin/mainmenu/tab_online.lua
-msgid "Damage enabled"
-msgstr "已啟用傷害"
+msgid "Damage / PvP"
+msgstr "傷害 / PvP"
#: builtin/mainmenu/tab_online.lua
msgid "Del. Favorite"
msgstr "刪除收è—"
#: builtin/mainmenu/tab_online.lua
-msgid "Favorite"
+msgid "Favorites"
msgstr "æ”¶è—"
#: builtin/mainmenu/tab_online.lua
-msgid "Join Game"
-msgstr "åŠ å…¥éŠæˆ²"
+msgid "Incompatible Servers"
+msgstr "ä¸ç›¸å®¹çš„伺æœå™¨"
#: builtin/mainmenu/tab_online.lua
-msgid "Name / Password"
-msgstr "å稱ï¼å¯†ç¢¼"
+msgid "Join Game"
+msgstr "åŠ å…¥éŠæˆ²"
#: builtin/mainmenu/tab_online.lua
msgid "Ping"
msgstr "Ping"
-#. ~ PvP = Player versus Player
#: builtin/mainmenu/tab_online.lua
-msgid "PvP enabled"
-msgstr "已啟用 PvP"
+msgid "Public Servers"
+msgstr "公開伺æœå™¨"
+
+#: builtin/mainmenu/tab_online.lua
+msgid "Refresh"
+msgstr "釿–°æ•´ç†"
+
+#: builtin/mainmenu/tab_online.lua
+msgid "Server Description"
+msgstr "伺æœå™¨æè¿°"
#: builtin/mainmenu/tab_settings.lua
msgid "2x"
@@ -924,7 +971,7 @@ msgstr "2x"
#: builtin/mainmenu/tab_settings.lua
msgid "3D Clouds"
-msgstr "3D 雲朵"
+msgstr "三維雲朵"
#: builtin/mainmenu/tab_settings.lua
msgid "4x"
@@ -958,11 +1005,31 @@ msgstr "變更按éµ"
msgid "Connected Glass"
msgstr "連接玻璃"
+#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
+msgid "Dynamic shadows"
+msgstr "å‹•æ…‹é™°å½±"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Dynamic shadows: "
+msgstr "å‹•æ…‹é™°å½±: "
+
#: builtin/mainmenu/tab_settings.lua
msgid "Fancy Leaves"
msgstr "è¯éº—葉å­"
#: builtin/mainmenu/tab_settings.lua
+msgid "High"
+msgstr "高"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Low"
+msgstr "低"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Medium"
+msgstr "中"
+
+#: builtin/mainmenu/tab_settings.lua
msgid "Mipmap"
msgstr "Mip 貼圖"
@@ -980,11 +1047,11 @@ msgstr "沒有 Mip 貼圖"
#: builtin/mainmenu/tab_settings.lua
msgid "Node Highlighting"
-msgstr "çªé¡¯ç¯€é»ž"
+msgstr "çªé¡¯æ–¹å¡Š"
#: builtin/mainmenu/tab_settings.lua
msgid "Node Outlining"
-msgstr "加入節點外框"
+msgstr "加入方塊外框"
#: builtin/mainmenu/tab_settings.lua
msgid "None"
@@ -1015,9 +1082,8 @@ msgid "Shaders"
msgstr "著色器"
#: builtin/mainmenu/tab_settings.lua
-#, fuzzy
msgid "Shaders (experimental)"
-msgstr "浮地高度"
+msgstr "著色器(實驗性)"
#: builtin/mainmenu/tab_settings.lua
msgid "Shaders (unavailable)"
@@ -1035,10 +1101,6 @@ msgstr "平滑光線"
msgid "Texturing:"
msgstr "ç´‹ç†ï¼š"
-#: builtin/mainmenu/tab_settings.lua
-msgid "To enable shaders the OpenGL driver needs to be used."
-msgstr "è¦å•Ÿç”¨è‘—色器,必須使用 OpenGL 驅動程å¼ã€‚"
-
#: builtin/mainmenu/tab_settings.lua src/settings_translation_file.cpp
msgid "Tone Mapping"
msgstr "色調映射"
@@ -1052,6 +1114,14 @@ msgid "Trilinear Filter"
msgstr "ä¸‰ç·šæ€§éŽæ¿¾å™¨"
#: builtin/mainmenu/tab_settings.lua
+msgid "Ultra High"
+msgstr "超高"
+
+#: builtin/mainmenu/tab_settings.lua
+msgid "Very Low"
+msgstr "很低"
+
+#: builtin/mainmenu/tab_settings.lua
msgid "Waving Leaves"
msgstr "è‘‰å­æ“ºå‹•"
@@ -1063,7 +1133,7 @@ msgstr "擺動液體"
msgid "Waving Plants"
msgstr "æ¤ç‰©æ“ºå‹•"
-#: src/client/client.cpp
+#: src/client/client.cpp src/client/game.cpp
msgid "Connection timed out."
msgstr "連線逾時。"
@@ -1092,8 +1162,8 @@ msgid "Connection error (timed out?)"
msgstr "連線錯誤(逾時?)"
#: src/client/clientlauncher.cpp
-msgid "Could not find or load game \""
-msgstr "找ä¸åˆ°æˆ–ç„¡æ³•è¼‰å…¥éŠæˆ² \""
+msgid "Could not find or load game: "
+msgstr "找ä¸åˆ°æˆ–ç„¡æ³•è¼‰å…¥éŠæˆ²: "
#: src/client/clientlauncher.cpp
msgid "Invalid gamespec."
@@ -1123,18 +1193,6 @@ msgstr "無法開啟æä¾›çš„密碼檔案: "
msgid "Provided world path doesn't exist: "
msgstr "æä¾›çš„世界路徑ä¸å­˜åœ¨ï¼š "
-#. ~ DO NOT TRANSLATE THIS LITERALLY!
-#. This is a special string. Put either "no" or "yes"
-#. into the translation field (literally).
-#. Choose "yes" if the language requires use of the fallback
-#. font, "no" otherwise.
-#. The fallback font is (normally) required for languages with
-#. non-Latin script, like Chinese.
-#. When in doubt, test your translation.
-#: src/client/fontengine.cpp
-msgid "needs_fallback_font"
-msgstr "yes"
-
#: src/client/game.cpp
msgid ""
"\n"
@@ -1148,14 +1206,6 @@ msgid "- Address: "
msgstr "- 地å€ï¼š "
#: src/client/game.cpp
-msgid "- Creative Mode: "
-msgstr "- 創造模å¼ï¼š "
-
-#: src/client/game.cpp
-msgid "- Damage: "
-msgstr "- 傷害: "
-
-#: src/client/game.cpp
msgid "- Mode: "
msgstr "- 模å¼ï¼š "
@@ -1177,6 +1227,15 @@ msgid "- Server Name: "
msgstr "- 伺æœå™¨å稱: "
#: src/client/game.cpp
+msgid "A serialization error occurred:"
+msgstr "åºåˆ—化時發生錯誤:"
+
+#: src/client/game.cpp
+#, c-format
+msgid "Access denied. Reason: %s"
+msgstr "å­˜å–被拒絕。原因︰%s"
+
+#: src/client/game.cpp
msgid "Automatic forward disabled"
msgstr "å·²åœç”¨è‡ªå‹•å‰é€²"
@@ -1185,6 +1244,22 @@ msgid "Automatic forward enabled"
msgstr "已啟用自動å‰é€²"
#: src/client/game.cpp
+msgid "Block bounds hidden"
+msgstr "å€å¡Šé‚Šç•Œéš±è—"
+
+#: src/client/game.cpp
+msgid "Block bounds shown for all blocks"
+msgstr "å€å¡Šé‚Šç•Œé¡¯ç¤ºæ‰€æœ‰å€å¡Š"
+
+#: src/client/game.cpp
+msgid "Block bounds shown for current block"
+msgstr "å€å¡Šé‚Šç•Œé¡¯ç¤ºç›®å‰å€å¡Š"
+
+#: src/client/game.cpp
+msgid "Block bounds shown for nearby blocks"
+msgstr "å€å¡Šé‚Šç•Œé¡¯ç¤ºé„°æŽ¥å€å¡Š"
+
+#: src/client/game.cpp
msgid "Camera update disabled"
msgstr "å·²åœç”¨ç›¸æ©Ÿæ›´æ–°"
@@ -1193,6 +1268,10 @@ msgid "Camera update enabled"
msgstr "已啟用相機更新"
#: src/client/game.cpp
+msgid "Can't show block bounds (need 'basic_debug' privilege)"
+msgstr "ä¸èƒ½é¡¯ç¤ºå€å¡Šé‚Šç•Œ (需è¦ã€Œbasic_debugã€æ¬Šé™)"
+
+#: src/client/game.cpp
msgid "Change Password"
msgstr "變更密碼"
@@ -1205,6 +1284,10 @@ msgid "Cinematic mode enabled"
msgstr "已啟用電影模å¼"
#: src/client/game.cpp
+msgid "Client disconnected"
+msgstr "用戶端已斷線"
+
+#: src/client/game.cpp
msgid "Client side scripting is disabled"
msgstr "å·²åœç”¨ç”¨æˆ¶ç«¯æŒ‡ä»¤ç¨¿"
@@ -1213,11 +1296,15 @@ msgid "Connecting to server..."
msgstr "正在連線至伺æœå™¨..."
#: src/client/game.cpp
+msgid "Connection failed for unknown reason"
+msgstr "é€£ç·šå¤±æ•—ï¼ŒåŽŸå› ä¸æ˜Ž"
+
+#: src/client/game.cpp
msgid "Continue"
msgstr "繼續"
#: src/client/game.cpp
-#, fuzzy, c-format
+#, c-format
msgid ""
"Controls:\n"
"- %s: move forwards\n"
@@ -1239,17 +1326,22 @@ msgstr ""
"- %s:å‘後移動\n"
"- %s:å‘左移動\n"
"- %s:å‘å³ç§»å‹•\n"
-"- %s:跳èºï¼æ”€çˆ¬\n"
-"- %s:潛行ï¼å¾€ä¸‹\n"
+"- %s:跳èºï¼å‘上攀爬\n"
+"- %sï¼šæŒ–ï¼æ‰“\n"
+"- %s:放置ï¼ä½¿ç”¨\n"
+"- %s:潛行ï¼å‘下攀爬\n"
"- %s:丟棄物å“\n"
"- %sï¼šç‰©å“æ¬„\n"
"- 滑鼠:旋轉ï¼è§€çœ‹\n"
-"- 滑鼠左éµï¼šæŒ–ï¼æŽ¨æ“ \n"
-"- 滑鼠å³éµï¼šæ”¾ç½®ï¼ä½¿ç”¨\n"
"- 滑鼠滾輪:é¸å–物å“\n"
"- %s:èŠå¤©\n"
#: src/client/game.cpp
+#, c-format
+msgid "Couldn't resolve address: %s"
+msgstr "無法解æžä½å€ï¸°%s"
+
+#: src/client/game.cpp
msgid "Creating client..."
msgstr "正在建立用戶端..."
@@ -1378,6 +1470,10 @@ msgid "Minimap currently disabled by game or mod"
msgstr "迷你地圖目å‰å·²è¢«éŠæˆ²æˆ– Mod åœç”¨"
#: src/client/game.cpp
+msgid "Multiplayer"
+msgstr "å¤šäººéŠæˆ²"
+
+#: src/client/game.cpp
msgid "Noclip mode disabled"
msgstr "å·²åœç”¨ç©¿ç‰†æ¨¡å¼"
@@ -1438,7 +1534,6 @@ msgid "Sound muted"
msgstr "å·²éœéŸ³"
#: src/client/game.cpp
-#, fuzzy
msgid "Sound system is disabled"
msgstr "è²éŸ³ç³»çµ±å·²è¢«ç¦ç”¨"
@@ -1452,6 +1547,21 @@ msgstr "已喿¶ˆéœéŸ³"
#: src/client/game.cpp
#, c-format
+msgid "The server is probably running a different version of %s."
+msgstr "此伺æœå™¨å¯èƒ½åŸ·è¡Œçš„æ˜¯ä¸åŒç‰ˆæœ¬çš„ %s。"
+
+#: src/client/game.cpp
+#, c-format
+msgid "Unable to connect to %s because IPv6 is disabled"
+msgstr "無法連線至 %s 因為 IPv6 å·²åœç”¨"
+
+#: src/client/game.cpp
+#, c-format
+msgid "Unable to listen on %s because IPv6 is disabled"
+msgstr "無法è½å– %s 因為 IPv6 å·²åœç”¨"
+
+#: src/client/game.cpp
+#, c-format
msgid "Viewing range changed to %d"
msgstr "已調整視野至 %d"
@@ -1520,10 +1630,6 @@ msgid "Caps Lock"
msgstr "大寫鎖定éµ"
#: src/client/keycode.cpp
-msgid "Clear"
-msgstr "清除"
-
-#: src/client/keycode.cpp
msgid "Control"
msgstr "Control"
@@ -1775,19 +1881,26 @@ msgid "Minimap hidden"
msgstr "已隱è—迷你地圖"
#: src/client/minimap.cpp
-#, fuzzy, c-format
+#, c-format
msgid "Minimap in radar mode, Zoom x%d"
-msgstr "雷锿¨¡å¼çš„迷你地圖,放大 1 å€"
+msgstr "雷锿¨¡å¼çš„迷你地圖,放大 %d å€"
#: src/client/minimap.cpp
-#, fuzzy, c-format
+#, c-format
msgid "Minimap in surface mode, Zoom x%d"
-msgstr "è¡¨é¢æ¨¡å¼çš„迷你地圖,放大 1 å€"
+msgstr "è¡¨é¢æ¨¡å¼çš„迷你地圖,放大 %d å€"
#: src/client/minimap.cpp
-#, fuzzy
msgid "Minimap in texture mode"
-msgstr "éŽæ¿¾å™¨çš„æœ€å¤§æè³ªå¤§å°"
+msgstr "æè³ªæ¨¡å¼çš„迷你地圖"
+
+#: src/gui/guiChatConsole.cpp
+msgid "Failed to open webpage"
+msgstr "無法開啟網é "
+
+#: src/gui/guiChatConsole.cpp
+msgid "Opening webpage"
+msgstr "正在開啟網é "
#: src/gui/guiConfirmRegistration.cpp src/gui/guiPasswordChange.cpp
msgid "Passwords do not match!"
@@ -1815,8 +1928,8 @@ msgid "Proceed"
msgstr "繼續"
#: src/gui/guiKeyChangeMenu.cpp
-msgid "\"Special\" = climb down"
-msgstr "\"Special\" = å‘下攀爬"
+msgid "\"Aux1\" = climb down"
+msgstr "\"Aux1\" = å‘下攀爬"
#: src/gui/guiKeyChangeMenu.cpp
msgid "Autoforward"
@@ -1827,10 +1940,18 @@ msgid "Automatic jumping"
msgstr "自動跳èº"
#: src/gui/guiKeyChangeMenu.cpp
+msgid "Aux1"
+msgstr "Aux1"
+
+#: src/gui/guiKeyChangeMenu.cpp
msgid "Backward"
msgstr "後退"
#: src/gui/guiKeyChangeMenu.cpp
+msgid "Block bounds"
+msgstr "å€å¡Šé‚Šç•Œ"
+
+#: src/gui/guiKeyChangeMenu.cpp
msgid "Change camera"
msgstr "變更相機"
@@ -1919,10 +2040,6 @@ msgid "Sneak"
msgstr "潛行"
#: src/gui/guiKeyChangeMenu.cpp
-msgid "Special"
-msgstr "特殊"
-
-#: src/gui/guiKeyChangeMenu.cpp
msgid "Toggle HUD"
msgstr "åˆ‡æ› HUD"
@@ -1983,8 +2100,9 @@ msgid "Muted"
msgstr "å·²éœéŸ³"
#: src/gui/guiVolumeChange.cpp
-msgid "Sound Volume: "
-msgstr "音é‡ï¼š "
+#, c-format
+msgid "Sound Volume: %d%%"
+msgstr "音é‡ï¼š%d%%"
#. ~ Imperative, as in "Enter/type in text".
#. Don't forget the space.
@@ -2008,12 +2126,13 @@ msgstr ""
"如åœç”¨ï¼Œè™›æ“¬æ–桿將會置中於第一個觸碰的ä½ç½®ã€‚"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
-"(Android) Use virtual joystick to trigger \"aux\" button.\n"
-"If enabled, virtual joystick will also tap \"aux\" button when out of main "
+"(Android) Use virtual joystick to trigger \"Aux1\" button.\n"
+"If enabled, virtual joystick will also tap \"Aux1\" button when out of main "
"circle."
-msgstr "(Android) ä½¿ç”¨è™›æ“¬æ–æ¡¿è§¸ç™¼ \"aux\" 按éµã€‚\n"
+msgstr ""
+"(Android) ä½¿ç”¨è™›æ“¬æ–æ¡¿è§¸ç™¼ \"Aux1\" 按éµã€‚\n"
+"å¦‚æžœå•Ÿç”¨ï¼Œè™›æ“¬æ–æ¡¿åœ¨é›¢é–‹ä¸»åœ“圈時也會觸發 \"Aux1\" 按éµã€‚"
#: src/settings_translation_file.cpp
#, fuzzy
@@ -2052,9 +2171,8 @@ msgid "2D noise that controls the shape/size of rolling hills."
msgstr "控制波狀丘陵地之形狀或大å°çš„ 2D 雜訊值。"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "2D noise that controls the shape/size of step mountains."
-msgstr "控制 Step mountains 之形狀或大å°çš„ 2D 雜訊值。"
+msgstr "控制階梯山脈之形狀或大å°çš„ 2D 雜訊值。"
#: src/settings_translation_file.cpp
msgid "2D noise that controls the size/occurrence of ridged mountain ranges."
@@ -2168,7 +2286,7 @@ msgstr "ABM é–“éš”"
#: src/settings_translation_file.cpp
msgid "ABM time budget"
-msgstr ""
+msgstr "ABM 時間é ç®—"
#: src/settings_translation_file.cpp
#, fuzzy
@@ -2220,6 +2338,10 @@ msgid ""
msgstr "調整您螢幕的 DPI 設定(並ä¸åªæœ‰ X11/Android)例如 4K 螢幕。"
#: src/settings_translation_file.cpp
+msgid "Adjust the detected display density, used for scaling UI elements."
+msgstr "èª¿æ•´åµæ¸¬åˆ°çš„顯示密度,用來縮放 UI 元件。"
+
+#: src/settings_translation_file.cpp
#, c-format
msgid ""
"Adjusts the density of the floatland layer.\n"
@@ -2283,16 +2405,16 @@ msgid "Apple trees noise"
msgstr "蘋果樹雜訊"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Arm inertia"
msgstr "慣性手臂"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Arm inertia, gives a more realistic movement of\n"
"the arm when the camera moves."
-msgstr "慣性手臂,當相機移動時æä¾›æ›´åŠ çœŸå¯¦çš„æ‰‹è‡‚é‹å‹•。"
+msgstr ""
+"慣性手臂,當相機移動時æä¾›\n"
+"更加真實的手臂é‹å‹•。"
#: src/settings_translation_file.cpp
msgid "Ask to reconnect after crash"
@@ -2320,16 +2442,14 @@ msgstr ""
"在地圖å€å¡Šä¸­é¡¯ç¤ºï¼ˆ16 個節點)"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Automatic forward key"
-msgstr "å‰é€²éµ"
+msgstr "自動å‰é€²éµ"
#: src/settings_translation_file.cpp
msgid "Automatically jump up single-node obstacles."
-msgstr ""
+msgstr "自動跳éŽå–®å€‹éšœç¤™ç‰©ã€‚"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Automatically report to the serverlist."
msgstr "自動回報到伺æœå™¨åˆ—表。"
@@ -2339,28 +2459,33 @@ msgstr "自動儲存視窗大å°"
#: src/settings_translation_file.cpp
msgid "Autoscaling mode"
-msgstr ""
+msgstr "自動縮放模å¼"
+
+#: src/settings_translation_file.cpp
+msgid "Aux1 key"
+msgstr "Aux1 éµ"
+
+#: src/settings_translation_file.cpp
+msgid "Aux1 key for climbing/descending"
+msgstr "用於攀爬ï¼ä¸‹é™çš„ Aux1 按éµ"
#: src/settings_translation_file.cpp
msgid "Backward key"
msgstr "後退éµ"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Base ground level"
-msgstr "地é¢é«˜åº¦"
+msgstr "基礎地平é¢"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Base terrain height."
-msgstr "基礎地形高度"
+msgstr "基礎地形高度。"
#: src/settings_translation_file.cpp
msgid "Basic"
msgstr "基礎"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Basic privileges"
msgstr "基礎特權"
@@ -2389,33 +2514,24 @@ msgid "Biome noise"
msgstr "生物雜訊"
#: src/settings_translation_file.cpp
-msgid "Bits per pixel (aka color depth) in fullscreen mode."
-msgstr "全螢幕模å¼ä¸­çš„ä½å…ƒï¼åƒç´ ï¼ˆåˆç¨±è‰²å½©æ·±åº¦ï¼‰ã€‚"
-
-#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Block send optimize distance"
msgstr "å€å¡Šå‚³é€æœ€ä½³åŒ–è·é›¢"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Bold and italic font path"
-msgstr "等寬字型路徑"
+msgstr "粗體與斜體字型路徑"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Bold and italic monospace font path"
-msgstr "等寬字型路徑"
+msgstr "粗體與斜體等寬字型路徑"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Bold font path"
-msgstr "字型路徑"
+msgstr "粗體字型路徑"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Bold monospace font path"
-msgstr "等寬字型路徑"
+msgstr "粗體等寬字型路徑"
#: src/settings_translation_file.cpp
msgid "Build inside player"
@@ -2486,9 +2602,8 @@ msgid "Cavern threshold"
msgstr "洞穴閾值"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Cavern upper limit"
-msgstr "洞穴極é™"
+msgstr "洞穴上層極é™"
#: src/settings_translation_file.cpp
msgid ""
@@ -2498,17 +2613,24 @@ msgstr ""
#: src/settings_translation_file.cpp
#, fuzzy
+msgid "Chat command time message threshold"
+msgstr "èŠå¤©è¨Šæ¯è¸¢å‡ºé–¾å€¼"
+
+#: src/settings_translation_file.cpp
+msgid "Chat commands"
+msgstr "èŠå¤©æŒ‡ä»¤"
+
+#: src/settings_translation_file.cpp
msgid "Chat font size"
-msgstr "字型大å°"
+msgstr "èŠå¤©å­—型大å°"
#: src/settings_translation_file.cpp
msgid "Chat key"
msgstr "èŠå¤©æŒ‰éµ"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Chat log level"
-msgstr "除錯記錄等級"
+msgstr "èŠå¤©è¨˜éŒ„等級"
#: src/settings_translation_file.cpp
msgid "Chat message count limit"
@@ -2531,8 +2653,8 @@ msgid "Chat toggle key"
msgstr "èŠå¤©åˆ‡æ›æŒ‰éµ"
#: src/settings_translation_file.cpp
-msgid "Chatcommands"
-msgstr "èŠå¤©æŒ‡ä»¤"
+msgid "Chat weblinks"
+msgstr "顯示網é é€£çµ"
#: src/settings_translation_file.cpp
msgid "Chunk size"
@@ -2551,6 +2673,12 @@ msgid "Clean transparent textures"
msgstr "æ¸…é™¤é€æ˜Žæè³ª"
#: src/settings_translation_file.cpp
+msgid ""
+"Clickable weblinks (middle-click or Ctrl+left-click) enabled in chat console "
+"output."
+msgstr "在èŠå¤©å®¤ä¸»æŽ§å°è¼¸å‡ºä¸­å¯ä»¥é»žé¸ç¶²é é€£çµ (æ»‘é¼ ä¸­éµæˆ– Ctrl+left-單擊)。"
+
+#: src/settings_translation_file.cpp
msgid "Client"
msgstr "用戶端"
@@ -2563,13 +2691,12 @@ msgid "Client modding"
msgstr "用戶端修改"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Client side modding restrictions"
-msgstr "用戶端修改"
+msgstr "用戶端修改é™åˆ¶"
#: src/settings_translation_file.cpp
msgid "Client side node lookup range restriction"
-msgstr ""
+msgstr "用戶端節點查詢範åœé™åˆ¶"
#: src/settings_translation_file.cpp
msgid "Climbing speed"
@@ -2596,6 +2723,10 @@ msgid "Colored fog"
msgstr "彩色迷霧"
#: src/settings_translation_file.cpp
+msgid "Colored shadows"
+msgstr "彩色陰影"
+
+#: src/settings_translation_file.cpp
msgid ""
"Comma-separated list of flags to hide in the content repository.\n"
"\"nonfree\" can be used to hide packages which do not qualify as 'free "
@@ -2627,6 +2758,22 @@ msgid "Command key"
msgstr "指令按éµ"
#: src/settings_translation_file.cpp
+msgid ""
+"Compression level to use when saving mapblocks to disk.\n"
+"-1 - use default compression level\n"
+"0 - least compression, fastest\n"
+"9 - best compression, slowest"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Compression level to use when sending mapblocks to the client.\n"
+"-1 - use default compression level\n"
+"0 - least compression, fastest\n"
+"9 - best compression, slowest"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Connect glass"
msgstr "連接玻璃"
@@ -2652,16 +2799,15 @@ msgstr "終端機高度"
#: src/settings_translation_file.cpp
msgid "ContentDB Flag Blacklist"
-msgstr ""
+msgstr "ContentDB 旗標黑å單列表"
#: src/settings_translation_file.cpp
msgid "ContentDB Max Concurrent Downloads"
-msgstr ""
+msgstr "ContentDB 最大並行下載數"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "ContentDB URL"
-msgstr "繼續"
+msgstr "ContentDB URL"
#: src/settings_translation_file.cpp
msgid "Continuous forward"
@@ -2672,24 +2818,26 @@ msgid ""
"Continuous forward movement, toggled by autoforward key.\n"
"Press the autoforward key again or the backwards movement to disable."
msgstr ""
+"連續å‰é€²ï¼Œé€šéŽè‡ªå‹•å‰é€²éµåˆ‡æ›ã€‚\n"
+"冿¬¡æŒ‰è‡ªå‹•å‰é€²éµæˆ–å‘後移動å³å¯ç¦ç”¨ã€‚"
#: src/settings_translation_file.cpp
msgid "Controls"
msgstr "控制"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Controls length of day/night cycle.\n"
"Examples:\n"
"72 = 20min, 360 = 4min, 1 = 24hour, 0 = day/night/whatever stays unchanged."
msgstr ""
"控制日ï¼å¤œå¾ªç’°çš„長度。\n"
-"範例:72 = 20分é˜ï¼Œ360 = 4分é˜ï¼Œ1 = 24å°æ™‚,0 = æ—¥ï¼å¤œï¼ä¸€åˆ‡ä¿æŒä¸è®Šã€‚"
+"範例:\n"
+"72 = 20分é˜ï¼Œ360 = 4分é˜ï¼Œ1 = 24å°æ™‚,0 = æ—¥ï¼å¤œï¼ä¸€åˆ‡ä¿æŒä¸è®Šã€‚"
#: src/settings_translation_file.cpp
msgid "Controls sinking speed in liquid."
-msgstr ""
+msgstr "控制在液體中的下沉速度。"
#: src/settings_translation_file.cpp
msgid "Controls steepness/depth of lake depressions."
@@ -2705,6 +2853,9 @@ msgid ""
"Value >= 10.0 completely disables generation of tunnels and avoids the\n"
"intensive noise calculations."
msgstr ""
+"控制隧é“的寬度,較å°çš„值將創建較寬的隧é“。\n"
+"數值 > = 10.0 完全ç¦ç”¨äº†éš§é“的生æˆï¼Œä¸¦é¿å…了\n"
+"密集的噪è²è¨ˆç®—。"
#: src/settings_translation_file.cpp
msgid "Crash message"
@@ -2719,11 +2870,12 @@ msgid "Crosshair alpha"
msgstr "åå­— alpha 值"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Crosshair alpha (opaqueness, between 0 and 255).\n"
-"Also controls the object crosshair color"
-msgstr "åå­— alpha 值(ä¸é€æ˜Žï¼Œ0 至 255間)。"
+"This also applies to the object crosshair."
+msgstr ""
+"åå­— alpha 值(ä¸é€æ˜Žï¼Œ0 至 255間)。\n"
+"這也會套用到物件å字。"
#: src/settings_translation_file.cpp
msgid "Crosshair color"
@@ -2734,6 +2886,8 @@ msgid ""
"Crosshair color (R,G,B).\n"
"Also controls the object crosshair color"
msgstr ""
+"å字準線é¡è‰²ï¼ˆR,G,B)。\n"
+"還控制物件的åå­—ç·šé¡è‰²"
#: src/settings_translation_file.cpp
msgid "DPI"
@@ -2748,9 +2902,8 @@ msgid "Debug info toggle key"
msgstr "é™¤éŒ¯è³‡è¨Šåˆ‡æ›æŒ‰éµ"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Debug log file size threshold"
-msgstr "沙漠雜訊閾值"
+msgstr "除錯紀錄檔案大å°é–¾å€¼"
#: src/settings_translation_file.cpp
msgid "Debug log level"
@@ -2762,7 +2915,7 @@ msgstr "éŸ³é‡æ¸›å°‘éµ"
#: src/settings_translation_file.cpp
msgid "Decrease this to increase liquid resistance to movement."
-msgstr ""
+msgstr "減少此值å¯å¢žåŠ æ¶²é«”çš„é‹å‹•阻力。"
#: src/settings_translation_file.cpp
msgid "Dedicated server step"
@@ -2797,17 +2950,15 @@ msgid "Default report format"
msgstr "缺çœå ±å‘Šæ ¼å¼"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Default stack size"
-msgstr "é è¨­éŠæˆ²"
+msgstr "é è¨­å †ç–Šå¤§å°"
#: src/settings_translation_file.cpp
msgid ""
-"Default timeout for cURL, stated in milliseconds.\n"
-"Only has an effect if compiled with cURL."
+"Define shadow filtering quality.\n"
+"This simulates the soft shadows effect by applying a PCF or Poisson disk\n"
+"but also uses more resources."
msgstr ""
-"cURL çš„é è¨­é€¾æ™‚,以毫秒計算。\n"
-"åªæœƒåœ¨èˆ‡ cURL 一åŒç·¨è­¯çš„æƒ…æ³ä¸‹æ‰æœƒæœ‰å½±éŸ¿ã€‚"
#: src/settings_translation_file.cpp
msgid "Defines areas where trees have apples."
@@ -2840,28 +2991,24 @@ msgid "Defines location and terrain of optional hills and lakes."
msgstr "定義å¯é¸çš„山丘與湖泊的ä½ç½®èˆ‡åœ°å½¢ã€‚"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Defines the base ground level."
-msgstr "定義樹木å€èˆ‡æ¨¹æœ¨å¯†åº¦ã€‚"
+msgstr "定義基礎地é¢é«˜åº¦ã€‚"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Defines the depth of the river channel."
-msgstr "定義樹木å€èˆ‡æ¨¹æœ¨å¯†åº¦ã€‚"
+msgstr "定義河é“的深度。"
#: src/settings_translation_file.cpp
msgid "Defines the maximal player transfer distance in blocks (0 = unlimited)."
msgstr "定義玩家最大å¯å‚³é€çš„è·é›¢ï¼Œä»¥æ–¹å¡Šè¨ˆï¼ˆ0 = ä¸é™åˆ¶ï¼‰ã€‚"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Defines the width of the river channel."
-msgstr "定義大型河é“çµæ§‹ã€‚"
+msgstr "定義河é“寬度。"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Defines the width of the river valley."
-msgstr "定義樹上有蘋果的å€åŸŸã€‚"
+msgstr "定義河谷的寬度。"
#: src/settings_translation_file.cpp
msgid "Defines tree areas and tree density."
@@ -2907,22 +3054,20 @@ msgid "Desert noise threshold"
msgstr "沙漠雜訊閾值"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Deserts occur when np_biome exceeds this value.\n"
"When the 'snowbiomes' flag is enabled, this is ignored."
msgstr ""
"ç•¶ np_biome è¶…éŽæ­¤å€¼æ™‚,會產生沙漠。\n"
-"當啟用新的生物群系統時,這個將會被忽略。"
+"當啟用新的生物群系統'snowbiomes'時,這個將會被忽略。"
#: src/settings_translation_file.cpp
msgid "Desynchronize block animation"
msgstr "異步化方塊動畫"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Dig key"
-msgstr "å³éµ"
+msgstr "挖掘éµ"
#: src/settings_translation_file.cpp
msgid "Digging particles"
@@ -2937,6 +3082,10 @@ msgid "Disallow empty passwords"
msgstr "ä¸å…許空密碼"
#: src/settings_translation_file.cpp
+msgid "Display Density Scaling Factor"
+msgstr "顯示密度縮放因å­"
+
+#: src/settings_translation_file.cpp
msgid "Domain name of server, to be displayed in the serverlist."
msgstr "伺æœå™¨çš„域å,將會在伺æœå™¨åˆ—表中顯示。"
@@ -2959,11 +3108,11 @@ msgstr "轉儲 mapgen 的除錯資訊。"
#: src/settings_translation_file.cpp
msgid "Dungeon maximum Y"
-msgstr ""
+msgstr "地城最大 X"
#: src/settings_translation_file.cpp
msgid "Dungeon minimum Y"
-msgstr ""
+msgstr "地城最大 Y"
#: src/settings_translation_file.cpp
msgid "Dungeon noise"
@@ -2974,6 +3123,8 @@ msgid ""
"Enable IPv6 support (for both client and server).\n"
"Required for IPv6 connections to work at all."
msgstr ""
+"啟用 IPv6 支æ´ï¼ˆé‡å°å®¢æˆ¶ç«¯å’Œä¼ºæœå™¨ï¼‰ã€‚\n"
+"IPv6 連線需è¦å®ƒæ‰èƒ½é‹ä½œã€‚"
#: src/settings_translation_file.cpp
msgid ""
@@ -2984,23 +3135,33 @@ msgstr ""
"é€™å€‹æ”¯æ´æ˜¯å¯¦é©—性的,且 API å¯èƒ½æœƒè®Šå‹•。"
#: src/settings_translation_file.cpp
+msgid ""
+"Enable Poisson disk filtering.\n"
+"On true uses Poisson disk to make \"soft shadows\". Otherwise uses PCF "
+"filtering."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Enable colored shadows.\n"
+"On true translucent nodes cast colored shadows. This is expensive."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Enable console window"
msgstr "啟用終端機視窗"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Enable creative mode for all players"
-msgstr "為新建立的地圖啟用創造模å¼ã€‚"
+msgstr "為所有的玩家啟用創造模å¼"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Enable joysticks"
msgstr "å•Ÿç”¨æ–æ¡¿"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid "Enable mod channels support."
-msgstr "啟用 mod 安全性"
+msgstr "啟用 mod 頻铿”¯æ´ã€‚"
#: src/settings_translation_file.cpp
msgid "Enable mod security"
@@ -3016,13 +3177,15 @@ msgstr "啟用隨機使用者輸入(僅供測試使用)。"
#: src/settings_translation_file.cpp
msgid "Enable register confirmation"
-msgstr ""
+msgstr "啟用註冊確èª"
#: src/settings_translation_file.cpp
msgid ""
"Enable register confirmation when connecting to server.\n"
"If disabled, new account will be registered automatically."
msgstr ""
+"連線到伺æœå™¨æ™‚啟用註冊確èªã€‚\n"
+"如果åœç”¨ï¼Œæœƒè‡ªå‹•註冊新的帳號。"
#: src/settings_translation_file.cpp
msgid ""
@@ -3070,15 +3233,14 @@ msgstr ""
"舉例來說:設為 0 就䏿œƒæœ‰è¦–野晃動;1.0 是一般情æ³ï¼›2.0 為雙å€ã€‚"
#: src/settings_translation_file.cpp
-#, fuzzy
msgid ""
"Enable/disable running an IPv6 server.\n"
"Ignored if bind_address is set.\n"
"Needs enable_ipv6 to be enabled."
msgstr ""
-"啟用ï¼åœç”¨åŸ·è¡Œ IPv6 伺æœå™¨ã€‚IPv6 伺æœå™¨å¯èƒ½æœƒé™åˆ¶åªæœ‰\n"
-"IPv6 用戶端æ‰èƒ½é€£ç·šï¼Œå–決於系統設定。\n"
-"當 bind_address 被設定時將會被忽略。"
+"啟用ï¼åœç”¨åŸ·è¡Œ IPv6 伺æœå™¨ã€‚\n"
+"當 bind_address 被設定時將會被忽略。\n"
+"需è¦å•Ÿç”¨ enable_ipv6。"
#: src/settings_translation_file.cpp
msgid ""
@@ -3109,6 +3271,12 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+msgid ""
+"Enables tradeoffs that reduce CPU load or increase rendering performance\n"
+"at the expense of minor visual glitches that do not impact game playability."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Engine profiling data print interval"
msgstr "引擎性能資料å°å‡ºé–“éš”"
@@ -3149,18 +3317,6 @@ msgid "Fallback font path"
msgstr "備用字型"
#: src/settings_translation_file.cpp
-msgid "Fallback font shadow"
-msgstr "後備字型陰影"
-
-#: src/settings_translation_file.cpp
-msgid "Fallback font shadow alpha"
-msgstr "後備字型陰影 alpha 值"
-
-#: src/settings_translation_file.cpp
-msgid "Fallback font size"
-msgstr "後備字型大å°"
-
-#: src/settings_translation_file.cpp
msgid "Fast key"
msgstr "快速按éµ"
@@ -3179,7 +3335,7 @@ msgstr "快速移動"
#: src/settings_translation_file.cpp
#, fuzzy
msgid ""
-"Fast movement (via the \"special\" key).\n"
+"Fast movement (via the \"Aux1\" key).\n"
"This requires the \"fast\" privilege on the server."
msgstr ""
"快速移動(é€éŽä½¿ç”¨éµï¼‰ã€‚\n"
@@ -3219,9 +3375,9 @@ msgstr "電影色調映射"
#, fuzzy
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."
+"which PNG optimizers usually discard, often resulting in dark or\n"
+"light edges to transparent textures. Apply a filter to clean that up\n"
+"at texture load time. This is automatically enabled if mipmapping is enabled."
msgstr ""
"å·²éŽæ¿¾çš„æè³ªæœƒèˆ‡å®Œå…¨é€æ˜Žçš„é„°å±…æ··åˆ RGB 值,\n"
"PNG æœ€ä½³åŒ–å™¨é€šå¸¸æœƒä¸Ÿæ£„ï¼Œæœ‰æ™‚å€™æœƒå°Žè‡´é€æ˜Žæè³ª\n"
@@ -3324,15 +3480,15 @@ msgid "Font size"
msgstr "字型大å°"
#: src/settings_translation_file.cpp
-msgid "Font size of the default font in point (pt)."
+msgid "Font size divisible by"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Font size of the fallback font in point (pt)."
+msgid "Font size of the default font where 1 unit = 1 pixel at 96 DPI"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Font size of the monospace font in point (pt)."
+msgid "Font size of the monospace font where 1 unit = 1 pixel at 96 DPI"
msgstr ""
#: src/settings_translation_file.cpp
@@ -3343,6 +3499,17 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"For pixel-style fonts that do not scale well, this ensures that font sizes "
+"used\n"
+"with this font will always be divisible by this value, in pixels. For "
+"instance,\n"
+"a pixel font 16 pixels tall should have this set to 16, so it will only ever "
+"be\n"
+"sized 16, 32, 48, etc., so a mod requesting a size of 25 will get 32."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Format of player chat messages. The following strings are valid "
"placeholders:\n"
"@name, @message, @timestamp (optional)"
@@ -3407,11 +3574,6 @@ msgid "Fraction of the visible distance at which fog starts to be rendered"
msgstr "開始呈ç¾éœ§æ°£çš„å¯è¦‹è·é›¢åˆ†æ•¸"
#: src/settings_translation_file.cpp
-#, fuzzy
-msgid "FreeType fonts"
-msgstr "Freetype å­—åž‹"
-
-#: src/settings_translation_file.cpp
msgid ""
"From how far blocks are generated for clients, stated in mapblocks (16 "
"nodes)."
@@ -3436,10 +3598,6 @@ msgid "Full screen"
msgstr "全螢幕"
#: src/settings_translation_file.cpp
-msgid "Full screen BPP"
-msgstr "全螢幕 BPP"
-
-#: src/settings_translation_file.cpp
msgid "Fullscreen mode."
msgstr "全螢幕模å¼ã€‚"
@@ -3464,7 +3622,7 @@ msgstr "全域回呼"
msgid ""
"Global map generation attributes.\n"
"In Mapgen v6 the 'decorations' flag controls all decorations except trees\n"
-"and junglegrass, in all other mapgens this flag controls all decorations."
+"and jungle grass, in all other mapgens this flag controls all decorations."
msgstr ""
"全域地圖產生屬性。\n"
"在 Mapgen v6 中,「decorationsã€æ——標控制所有除了樹木\n"
@@ -3548,7 +3706,9 @@ msgid "Heat noise"
msgstr "熱 雜訊"
#: src/settings_translation_file.cpp
-msgid "Height component of the initial window size."
+#, fuzzy
+msgid ""
+"Height component of the initial window size. Ignored in fullscreen mode."
msgstr "åˆå§‹è¦–窗大å°çš„高度組件。"
#: src/settings_translation_file.cpp
@@ -3560,10 +3720,6 @@ msgid "Height select noise"
msgstr "高度 鏿“‡ 雜訊"
#: src/settings_translation_file.cpp
-msgid "High-precision FPU"
-msgstr "高精度 FPU"
-
-#: src/settings_translation_file.cpp
msgid "Hill steepness"
msgstr "山丘å¡åº¦"
@@ -3801,8 +3957,7 @@ msgstr ""
#: src/settings_translation_file.cpp
#, fuzzy
msgid ""
-"If disabled, \"special\" key is used to fly fast if both fly and fast mode "
-"are\n"
+"If disabled, \"Aux1\" key is used to fly fast if both fly and fast mode are\n"
"enabled."
msgstr "è‹¥åœç”¨ï¼Œåœ¨é£›è¡Œèˆ‡å¿«é€Ÿæ¨¡å¼çš†å•Ÿç”¨æ™‚,「使用ã€éµå°‡ç”¨æ–¼å¿«é€Ÿé£›è¡Œã€‚"
@@ -3831,8 +3986,8 @@ msgstr ""
#: src/settings_translation_file.cpp
#, fuzzy
msgid ""
-"If enabled, \"special\" key instead of \"sneak\" key is used for climbing "
-"down and\n"
+"If enabled, \"Aux1\" key instead of \"Sneak\" key is used for climbing down "
+"and\n"
"descending."
msgstr "若啟用,å‘下爬與下é™å°‡ä½¿ç”¨ã€Œä½¿ç”¨ã€éµè€Œéžã€Œæ½›è¡Œã€éµã€‚"
@@ -3884,6 +4039,12 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"If the execution of a chat command takes longer than this specified time in\n"
+"seconds, add the time information to the chat command message"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"If the file size of debug.txt exceeds the number of megabytes specified in\n"
"this setting when it is opened, the file is moved to debug.txt.1,\n"
"deleting an older debug.txt.1 if it exists.\n"
@@ -3931,7 +4092,8 @@ msgstr ""
"這通常僅被核心ï¼å…§å»ºè²¢ç»è€…需è¦"
#: src/settings_translation_file.cpp
-msgid "Instrument chatcommands on registration."
+#, fuzzy
+msgid "Instrument chat commands on registration."
msgstr "分æžç™»éŒ„çš„èŠå¤©æŒ‡ä»¤ã€‚"
#: src/settings_translation_file.cpp
@@ -4020,7 +4182,7 @@ msgstr "æ–æ¡¿æŒ‰éˆ•é‡è¦†é–“éš”"
#: src/settings_translation_file.cpp
#, fuzzy
-msgid "Joystick deadzone"
+msgid "Joystick dead zone"
msgstr "æ–æ¡¿é¡žåž‹"
#: src/settings_translation_file.cpp
@@ -5044,10 +5206,6 @@ msgid ""
msgstr "讓霧與天空的é¡è‰²å–æ±ºæ–¼æ™‚é–“ï¼ˆé»Žæ˜Žï¼æ—¥è½ï¼‰èˆ‡è§€çœ‹æ–¹å‘。"
#: src/settings_translation_file.cpp
-msgid "Makes DirectX work with LuaJIT. Disable if it causes troubles."
-msgstr "讓 DirectX 與 LuaJIT 一åŒé‹ä½œã€‚若其造æˆéº»ç…©å‰‡è«‹åœç”¨ã€‚"
-
-#: src/settings_translation_file.cpp
msgid "Makes all liquids opaque"
msgstr "讓所有的液體ä¸é€æ˜Ž"
@@ -5141,6 +5299,11 @@ msgid "Map save interval"
msgstr "地圖儲存間隔"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Map shadows update frames"
+msgstr "液體更新 tick"
+
+#: src/settings_translation_file.cpp
msgid "Mapblock limit"
msgstr "地圖å€å¡Šé™åˆ¶"
@@ -5264,6 +5427,10 @@ msgid "Maximum FPS when the window is not focused, or when the game is paused."
msgstr "ç•¶éŠæˆ²æš«åœæ™‚的最高 FPS。"
#: src/settings_translation_file.cpp
+msgid "Maximum distance to render shadows."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Maximum forceloaded blocks"
msgstr "強制載入å€å¡Šçš„æœ€å¤§å€¼"
@@ -5383,10 +5550,19 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Maximum time in ms a file download (e.g. a mod download) may take."
+#, fuzzy
+msgid ""
+"Maximum time a file download (e.g. a mod download) may take, stated in "
+"milliseconds."
msgstr "檔案下載(例如下載 mod)å¯èŠ±è²»çš„æœ€å¤§æ™‚é–“ï¼Œä»¥æ¯«ç§’è¨ˆã€‚"
#: src/settings_translation_file.cpp
+msgid ""
+"Maximum time an interactive request (e.g. server list fetch) may take, "
+"stated in milliseconds."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Maximum users"
msgstr "最多使用者"
@@ -5448,7 +5624,8 @@ msgid "Mod channels"
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Modifies the size of the hudbar elements."
+#, fuzzy
+msgid "Modifies the size of the HUD elements."
msgstr "修改 hudbar 元素的大å°ã€‚"
#: src/settings_translation_file.cpp
@@ -5460,6 +5637,11 @@ msgid "Monospace font size"
msgstr "等寬字型大å°"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Monospace font size divisible by"
+msgstr "等寬字型大å°"
+
+#: src/settings_translation_file.cpp
msgid "Mountain height noise"
msgstr "山高度 雜訊"
@@ -5586,9 +5768,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
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"
+"This is a trade-off between SQLite transaction overhead and\n"
"memory consumption (4096=100MB, as a rule of thumb)."
msgstr ""
"å¯è¢« /clearobjects 一次載入的é¡å¤–å€å¡Šæ•¸é‡ã€‚\n"
@@ -5610,21 +5793,18 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Opaqueness (alpha) of the shadow behind the fallback font, between 0 and 255."
-msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid ""
"Open the pause menu when the window's focus is lost. Does not pause if a "
"formspec is\n"
"open."
msgstr ""
#: src/settings_translation_file.cpp
+msgid "Optional override for chat weblink color."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid ""
-"Path of the fallback font.\n"
-"If “freetype†setting is enabled: Must be a TrueType font.\n"
-"If “freetype†setting is disabled: Must be a bitmap or XML vectors font.\n"
+"Path of the fallback font. Must be a TrueType font.\n"
"This font will be used for certain languages or if the default font is "
"unavailable."
msgstr ""
@@ -5647,17 +5827,13 @@ msgstr "æè³ªç›®éŒ„的路徑。所有æè³ªéƒ½æœƒå…ˆå¾žé€™è£¡æœå°‹ã€‚"
#: src/settings_translation_file.cpp
msgid ""
-"Path to the default font.\n"
-"If “freetype†setting is enabled: Must be a TrueType font.\n"
-"If “freetype†setting is disabled: Must be a bitmap or XML vectors font.\n"
+"Path to the default font. Must be a TrueType font.\n"
"The fallback font will be used if the font cannot be loaded."
msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"Path to the monospace font.\n"
-"If “freetype†setting is enabled: Must be a TrueType font.\n"
-"If “freetype†setting is disabled: Must be a bitmap or XML vectors font.\n"
+"Path to the monospace font. Must be a TrueType font.\n"
"This font is used for e.g. the console and profiler screen."
msgstr ""
@@ -5719,6 +5895,11 @@ msgid "Player versus player"
msgstr "玩家å°çީ家"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Poisson filtering"
+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."
@@ -5766,9 +5947,9 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
"Prometheus listener address.\n"
-"If minetest is compiled with ENABLE_PROMETHEUS option enabled,\n"
+"If Minetest is compiled with ENABLE_PROMETHEUS option enabled,\n"
"enable metrics listener for Prometheus on that address.\n"
-"Metrics can be fetch on http://127.0.0.1:30000/metrics"
+"Metrics can be fetched on http://127.0.0.1:30000/metrics"
msgstr ""
#: src/settings_translation_file.cpp
@@ -6099,6 +6280,35 @@ msgid "Set the maximum character length of a chat message sent by clients."
msgstr "設定用戶端傳é€ä¹‹èŠå¤©è¨Šæ¯çš„æœ€å¤§å­—元長度。"
#: src/settings_translation_file.cpp
+msgid ""
+"Set the shadow strength.\n"
+"Lower value means lighter shadows, higher value means darker shadows."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set the soft shadow radius size.\n"
+"Lower values mean sharper shadows, bigger values mean softer shadows.\n"
+"Minimum value: 1.0; maximum value: 10.0"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
+"Set the tilt of Sun/Moon orbit in degrees.\n"
+"Value of 0 means no tilt / vertical orbit.\n"
+"Minimum value: 0.0; maximum value: 60.0"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid ""
+"Set to true to enable Shadow Mapping.\n"
+"Requires shaders to be enabled."
+msgstr ""
+"設定為真以啟用擺動的樹葉。\n"
+"å¿…é ˆåŒæ™‚啟用著色器。"
+
+#: src/settings_translation_file.cpp
#, fuzzy
msgid ""
"Set to true to enable waving leaves.\n"
@@ -6126,6 +6336,13 @@ msgstr ""
"å¿…é ˆåŒæ™‚啟用著色器。"
#: src/settings_translation_file.cpp
+msgid ""
+"Sets shadow texture quality to 32 bits.\n"
+"On false, 16 bits texture will be used.\n"
+"This can cause much more artifacts in the shadow."
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Shader path"
msgstr "著色器路徑"
@@ -6142,17 +6359,32 @@ msgstr ""
#: src/settings_translation_file.cpp
#, fuzzy
+msgid "Shadow filter quality"
+msgstr "螢幕截圖å“質"
+
+#: src/settings_translation_file.cpp
+msgid "Shadow map max distance in nodes to render shadows"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid "Shadow map texture in 32 bits"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Shadow map texture size"
+msgstr "éŽæ¿¾å™¨çš„æœ€å¤§æè³ªå¤§å°"
+
+#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
"Shadow offset (in pixels) of the default font. If 0, then shadow will not be "
"drawn."
msgstr "字型陰影å移,若為 0 則陰影將䏿œƒè¢«ç¹ªè£½ã€‚"
#: src/settings_translation_file.cpp
-#, fuzzy
-msgid ""
-"Shadow offset (in pixels) of the fallback font. If 0, then shadow will not "
-"be drawn."
-msgstr "字型陰影å移,若為 0 則陰影將䏿œƒè¢«ç¹ªè£½ã€‚"
+msgid "Shadow strength"
+msgstr ""
#: src/settings_translation_file.cpp
msgid "Shape of the minimap. Enabled = round, disabled = square."
@@ -6176,7 +6408,7 @@ msgstr ""
"è®Šæ›´å¾Œå¿…é ˆé‡æ–°å•Ÿå‹•以使其生效。"
#: src/settings_translation_file.cpp
-msgid "Show nametag backgrounds by default"
+msgid "Show name tag backgrounds by default"
msgstr ""
#: src/settings_translation_file.cpp
@@ -6204,6 +6436,10 @@ msgstr ""
"而減少抖動。"
#: src/settings_translation_file.cpp
+msgid "Sky Body Orbit Tilt"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Slice w"
msgstr "切片 w"
@@ -6262,18 +6498,13 @@ msgid "Sneaking speed, in nodes per second."
msgstr ""
#: src/settings_translation_file.cpp
-msgid "Sound"
-msgstr "è²éŸ³"
-
-#: src/settings_translation_file.cpp
#, fuzzy
-msgid "Special key"
-msgstr "潛行按éµ"
+msgid "Soft shadow radius"
+msgstr "字型陰影 alpha 值"
#: src/settings_translation_file.cpp
-#, fuzzy
-msgid "Special key for climbing/descending"
-msgstr "用於攀爬ï¼ä¸‹é™çš„æŒ‰éµ"
+msgid "Sound"
+msgstr "è²éŸ³"
#: src/settings_translation_file.cpp
msgid ""
@@ -6296,6 +6527,14 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
+"Spread a complete update of shadow map over given amount of frames.\n"
+"Higher values might make shadows laggy, lower values\n"
+"will consume more resources.\n"
+"Minimum value: 1; maximum value: 16"
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Spread of light curve boost range.\n"
"Controls the width of the range to be boosted.\n"
"Standard deviation of the light curve boost Gaussian."
@@ -6412,6 +6651,13 @@ msgstr "æè³ªè·¯å¾‘"
#: src/settings_translation_file.cpp
msgid ""
+"Texture size to render the shadow map on.\n"
+"This must be a power of two.\n"
+"Bigger numbers create better shadows but it is also more expensive."
+msgstr ""
+
+#: src/settings_translation_file.cpp
+msgid ""
"Textures on a node may be aligned either to the node or to the world.\n"
"The former mode suits better things like machines, furniture, etc., while\n"
"the latter makes stairs and microblocks fit surroundings better.\n"
@@ -6426,7 +6672,7 @@ msgstr ""
#: src/settings_translation_file.cpp
#, fuzzy
-msgid "The deadzone of the joystick"
+msgid "The dead zone of the joystick"
msgstr "è¦ä½¿ç”¨çš„æ–æ¡¿çš„è­˜åˆ¥ç¢¼"
#: src/settings_translation_file.cpp
@@ -6489,7 +6735,7 @@ msgstr ""
#: src/settings_translation_file.cpp
msgid ""
-"The rendering back-end for Irrlicht.\n"
+"The rendering back-end.\n"
"A restart is required after changing this.\n"
"Note: On Android, stick with OGLES1 if unsure! App may fail to start "
"otherwise.\n"
@@ -6498,9 +6744,10 @@ msgid ""
msgstr ""
#: src/settings_translation_file.cpp
+#, fuzzy
msgid ""
"The sensitivity of the joystick axes for moving the\n"
-"ingame view frustum around."
+"in-game view frustum around."
msgstr ""
"åœ¨éŠæˆ²ä¸­ï¼Œè¦–野四處移動時的\n"
"æ–æ¡¿éˆæ•度。"
@@ -6611,6 +6858,10 @@ msgid "Touch screen threshold"
msgstr "æµ·ç˜é›œè¨Šé–¾å€¼"
#: src/settings_translation_file.cpp
+msgid "Tradeoffs for performance"
+msgstr ""
+
+#: src/settings_translation_file.cpp
msgid "Trees noise"
msgstr "樹林雜訊"
@@ -6689,7 +6940,7 @@ msgstr "當縮放æè³ªæ™‚ä½¿ç”¨é›™ç·šæ€§éŽæ¿¾ã€‚"
#: src/settings_translation_file.cpp
msgid ""
-"Use mip mapping to scale textures. May slightly increase performance,\n"
+"Use mipmapping to scale textures. May slightly increase performance,\n"
"especially when using a high resolution texture pack.\n"
"Gamma correct downscaling is not supported."
msgstr ""
@@ -6811,7 +7062,7 @@ msgid "Viewing range"
msgstr "視野"
#: src/settings_translation_file.cpp
-msgid "Virtual joystick triggers aux button"
+msgid "Virtual joystick triggers Aux1 button"
msgstr ""
#: src/settings_translation_file.cpp
@@ -6894,6 +7145,11 @@ msgid "Waving plants"
msgstr "æ¤ç‰©æ“ºå‹•"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "Weblink color"
+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"
@@ -6922,9 +7178,8 @@ msgid ""
"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.\n"
+"memory. Powers of 2 are recommended. This setting is ONLY applied if\n"
+"bilinear/trilinear/anisotropic filtering is enabled.\n"
"This is also used as the base node texture size for world-aligned\n"
"texture autoscaling."
msgstr ""
@@ -6937,16 +7192,8 @@ msgstr ""
"已啟用。"
#: src/settings_translation_file.cpp
-#, fuzzy
-msgid ""
-"Whether FreeType fonts are used, requires FreeType support to be compiled "
-"in.\n"
-"If disabled, bitmap and XML vectors fonts are used instead."
-msgstr "是å¦ä½¿ç”¨ freetype 字型,需è¦å°‡ freetype 支æ´ç·¨è­¯é€²ä¾†ã€‚"
-
-#: src/settings_translation_file.cpp
msgid ""
-"Whether nametag backgrounds should be shown by default.\n"
+"Whether name tag backgrounds should be shown by default.\n"
"Mods may still set a background."
msgstr ""
@@ -6992,7 +7239,8 @@ msgid ""
msgstr "是å¦é¡¯ç¤ºç”¨æˆ¶ç«¯é™¤éŒ¯è³‡è¨Šï¼ˆèˆ‡æŒ‰ä¸‹ F5 æœ‰åŒæ¨£çš„æ•ˆæžœï¼‰ã€‚"
#: src/settings_translation_file.cpp
-msgid "Width component of the initial window size."
+#, fuzzy
+msgid "Width component of the initial window size. Ignored in fullscreen mode."
msgstr "åˆå§‹è¦–窗大å°çš„寬度元素。"
#: src/settings_translation_file.cpp
@@ -7086,34 +7334,23 @@ msgid "Y-level of seabed."
msgstr "海底的 Y 高度。"
#: src/settings_translation_file.cpp
-msgid ""
-"ZLib compression level to use when saving mapblocks to disk.\n"
-"-1 - Zlib's default compression level\n"
-"0 - no compresson, fastest\n"
-"9 - best compression, slowest\n"
-"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)"
-msgstr ""
-
-#: src/settings_translation_file.cpp
-msgid ""
-"ZLib compression level to use when sending mapblocks to the client.\n"
-"-1 - Zlib's default compression level\n"
-"0 - no compresson, fastest\n"
-"9 - best compression, slowest\n"
-"(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)"
-msgstr ""
-
-#: src/settings_translation_file.cpp
msgid "cURL file download timeout"
msgstr "cURL 檔案下載逾時"
#: src/settings_translation_file.cpp
+#, fuzzy
+msgid "cURL interactive timeout"
+msgstr "cURL 逾時"
+
+#: src/settings_translation_file.cpp
msgid "cURL parallel limit"
msgstr "cURL 並行é™åˆ¶"
-#: src/settings_translation_file.cpp
-msgid "cURL timeout"
-msgstr "cURL 逾時"
+#~ msgid "- Creative Mode: "
+#~ msgstr "- 創造模å¼ï¼š "
+
+#~ msgid "- Damage: "
+#~ msgstr "- 傷害: "
#~ msgid ""
#~ "0 = parallax occlusion with slope information (faster).\n"
@@ -7122,6 +7359,9 @@ msgstr "cURL 逾時"
#~ "0 = åŒ…å«æ–œçŽ‡è³‡è¨Šçš„è¦–å·®é®è”½ï¼ˆè¼ƒå¿«ï¼‰ã€‚\n"
#~ "1 = 替æ›è²¼åœ–(較慢,較準確)。"
+#~ msgid "Address / Port"
+#~ msgstr "地å€ï¼é€£ç·šåŸ "
+
#~ msgid ""
#~ "Adjust the gamma encoding for the light tables. Higher numbers are "
#~ "brighter.\n"
@@ -7136,6 +7376,9 @@ msgstr "cURL 逾時"
#~ msgid "Back"
#~ msgstr "返回"
+#~ msgid "Bits per pixel (aka color depth) in fullscreen mode."
+#~ msgstr "全螢幕模å¼ä¸­çš„ä½å…ƒï¼åƒç´ ï¼ˆåˆç¨±è‰²å½©æ·±åº¦ï¼‰ã€‚"
+
#~ msgid "Bump Mapping"
#~ msgstr "映射貼圖"
@@ -7159,14 +7402,27 @@ msgstr "cURL 逾時"
#~ msgid "Controls width of tunnels, a smaller value creates wider tunnels."
#~ msgstr "控制隧é“的寬度,較å°çš„值會創造出較寬的隧é“。"
+#~ msgid "Credits"
+#~ msgstr "感è¬"
+
#~ msgid "Crosshair color (R,G,B)."
#~ msgstr "å字色彩 (R,G,B)。"
+#~ msgid "Damage enabled"
+#~ msgstr "已啟用傷害"
+
#, fuzzy
#~ msgid "Darkness sharpness"
#~ msgstr "湖泊å¡åº¦"
#~ msgid ""
+#~ "Default timeout for cURL, stated in milliseconds.\n"
+#~ "Only has an effect if compiled with cURL."
+#~ msgstr ""
+#~ "cURL çš„é è¨­é€¾æ™‚,以毫秒計算。\n"
+#~ "åªæœƒåœ¨èˆ‡ cURL 一åŒç·¨è­¯çš„æƒ…æ³ä¸‹æ‰æœƒæœ‰å½±éŸ¿ã€‚"
+
+#~ msgid ""
#~ "Defines areas of floatland smooth terrain.\n"
#~ "Smooth floatlands occur when noise > 0."
#~ msgstr ""
@@ -7223,12 +7479,28 @@ msgstr "cURL 逾時"
#~ msgid "FPS in pause menu"
#~ msgstr "在暫åœé¸å–®ä¸­çš„ FPS"
+#~ msgid "Fallback font shadow"
+#~ msgstr "後備字型陰影"
+
+#~ msgid "Fallback font shadow alpha"
+#~ msgstr "後備字型陰影 alpha 值"
+
+#~ msgid "Fallback font size"
+#~ msgstr "後備字型大å°"
+
#~ msgid "Floatland base height noise"
#~ msgstr "浮地基礎高度噪音"
#~ msgid "Font shadow alpha (opaqueness, between 0 and 255)."
#~ msgstr "字型陰影 alpha(ä¸é€æ˜Žåº¦ï¼Œä»‹æ–¼ 0 到 255)。"
+#, fuzzy
+#~ msgid "FreeType fonts"
+#~ msgstr "Freetype å­—åž‹"
+
+#~ msgid "Full screen BPP"
+#~ msgstr "全螢幕 BPP"
+
#~ msgid "Gamma"
#~ msgstr "Gamma"
@@ -7238,9 +7510,15 @@ msgstr "cURL 逾時"
#~ msgid "Generate normalmaps"
#~ msgstr "生æˆä¸€èˆ¬åœ°åœ–"
+#~ msgid "High-precision FPU"
+#~ msgstr "高精度 FPU"
+
#~ msgid "IPv6 support."
#~ msgstr "IPv6 支æ´ã€‚"
+#~ msgid "Install: file: \"$1\""
+#~ msgstr "安è£ï¼šæª”案:「$1ã€"
+
#, fuzzy
#~ msgid "Lava depth"
#~ msgstr "大型洞穴深度"
@@ -7255,6 +7533,9 @@ msgstr "cURL 逾時"
#~ msgid "Main menu style"
#~ msgstr "主é¸å–®æŒ‡ä»¤ç¨¿"
+#~ msgid "Makes DirectX work with LuaJIT. Disable if it causes troubles."
+#~ msgstr "讓 DirectX 與 LuaJIT 一åŒé‹ä½œã€‚若其造æˆéº»ç…©å‰‡è«‹åœç”¨ã€‚"
+
#~ msgid "Minimap in radar mode, Zoom x2"
#~ msgstr "雷锿¨¡å¼çš„迷你地圖,放大 2 å€"
@@ -7267,6 +7548,9 @@ msgstr "cURL 逾時"
#~ msgid "Minimap in surface mode, Zoom x4"
#~ msgstr "è¡¨é¢æ¨¡å¼çš„迷你地圖,放大 4 å€"
+#~ msgid "Name / Password"
+#~ msgstr "å稱ï¼å¯†ç¢¼"
+
#~ msgid "Name/Password"
#~ msgstr "å稱ï¼å¯†ç¢¼"
@@ -7319,6 +7603,9 @@ msgstr "cURL 逾時"
#~ msgid "Path to save screenshots at."
#~ msgstr "儲存螢幕截圖的路徑。"
+#~ msgid "PvP enabled"
+#~ msgstr "å·²å•Ÿç”¨çŽ©å®¶å°æˆ°"
+
#~ msgid "Reset singleplayer world"
#~ msgstr "é‡è¨­å–®äººéŠæˆ²ä¸–界"
@@ -7329,6 +7616,19 @@ msgstr "cURL 逾時"
#~ msgid "Shadow limit"
#~ msgstr "é™°å½±é™åˆ¶"
+#, fuzzy
+#~ msgid ""
+#~ "Shadow offset (in pixels) of the fallback font. If 0, then shadow will "
+#~ "not be drawn."
+#~ msgstr "字型陰影å移,若為 0 則陰影將䏿œƒè¢«ç¹ªè£½ã€‚"
+
+#~ msgid "Special"
+#~ msgstr "特殊"
+
+#, fuzzy
+#~ msgid "Special key"
+#~ msgstr "潛行按éµ"
+
#~ msgid "Start Singleplayer"
#~ msgstr "é–‹å§‹å–®äººéŠæˆ²"
@@ -7338,6 +7638,9 @@ msgstr "cURL 逾時"
#~ msgid "This font will be used for certain languages."
#~ msgstr "這個字型將會被用於特定的語言。"
+#~ msgid "To enable shaders the OpenGL driver needs to be used."
+#~ msgstr "è¦å•Ÿç”¨è‘—色器,必須使用 OpenGL 驅動程å¼ã€‚"
+
#~ msgid "Toggle Cinematic"
#~ msgstr "切æ›éŽå ´å‹•ç•«"
@@ -7359,6 +7662,13 @@ msgstr "cURL 逾時"
#~ msgstr "波動的水"
#, fuzzy
+#~ msgid ""
+#~ "Whether FreeType fonts are used, requires FreeType support to be compiled "
+#~ "in.\n"
+#~ "If disabled, bitmap and XML vectors fonts are used instead."
+#~ msgstr "是å¦ä½¿ç”¨ freetype 字型,需è¦å°‡ freetype 支æ´ç·¨è­¯é€²ä¾†ã€‚"
+
+#, fuzzy
#~ msgid "Y of upper limit of lava in large caves."
#~ msgstr "大型å½éš¨æ©Ÿæ´žç©´çš„ Y 上é™ã€‚"
@@ -7370,3 +7680,10 @@ msgstr "cURL 逾時"
#~ msgid "Yes"
#~ msgstr "是"
+
+#, fuzzy
+#~ msgid "You died."
+#~ msgstr "您已死亡"
+
+#~ msgid "needs_fallback_font"
+#~ msgstr "yes"
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 7bcf8d6c7..7f207244c 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -55,7 +55,7 @@ if(NOT USE_CURL)
endif()
-option(ENABLE_GETTEXT "Use GetText for internationalization" TRUE)
+option(ENABLE_GETTEXT "Use GetText for internationalization" ${BUILD_CLIENT})
set(USE_GETTEXT FALSE)
if(ENABLE_GETTEXT)
@@ -63,14 +63,13 @@ if(ENABLE_GETTEXT)
if(GETTEXTLIB_FOUND)
if(WIN32)
message(STATUS "GetText library: ${GETTEXT_LIBRARY}")
- message(STATUS "GetText DLL: ${GETTEXT_DLL}")
- message(STATUS "GetText iconv DLL: ${GETTEXT_ICONV_DLL}")
+ message(STATUS "GetText DLL(s): ${GETTEXT_DLL}")
endif()
set(USE_GETTEXT TRUE)
message(STATUS "GetText enabled; locales found: ${GETTEXT_AVAILABLE_LOCALES}")
endif(GETTEXTLIB_FOUND)
else()
- mark_as_advanced(GETTEXT_ICONV_DLL GETTEXT_INCLUDE_DIR GETTEXT_LIBRARY GETTEXT_MSGFMT)
+ mark_as_advanced(GETTEXT_INCLUDE_DIR GETTEXT_LIBRARY GETTEXT_MSGFMT)
message(STATUS "GetText disabled.")
endif()
@@ -102,12 +101,18 @@ endif()
option(ENABLE_GLES "Use OpenGL ES instead of OpenGL" FALSE)
mark_as_advanced(ENABLE_GLES)
+
+option(ENABLE_TOUCH "Enable Touchscreen support" FALSE)
+if(ENABLE_TOUCH)
+ add_definitions(-DHAVE_TOUCHSCREENGUI)
+endif()
+
if(BUILD_CLIENT)
- if(ENABLE_GLES)
- find_package(OpenGLES2 REQUIRED)
- else()
- # transitive dependency from Irrlicht (see longer explanation below)
- if(NOT WIN32)
+ # transitive dependency from Irrlicht (see longer explanation below)
+ if(NOT WIN32)
+ if(ENABLE_GLES)
+ find_package(OpenGLES2 REQUIRED)
+ else()
set(OPENGL_GL_PREFERENCE "LEGACY" CACHE STRING
"See CMake Policy CMP0072 for reference. GLVND is broken on some nvidia setups")
set(OpenGL_GL_PREFERENCE ${OPENGL_GL_PREFERENCE})
@@ -117,17 +122,9 @@ if(BUILD_CLIENT)
endif()
endif()
-
-option(ENABLE_FREETYPE "Enable FreeType2 (TrueType fonts and basic unicode support)" TRUE)
-set(USE_FREETYPE FALSE)
-
-if(ENABLE_FREETYPE)
- find_package(Freetype)
- if(FREETYPE_FOUND)
- message(STATUS "Freetype enabled.")
- set(USE_FREETYPE TRUE)
- endif()
-endif(ENABLE_FREETYPE)
+if(BUILD_CLIENT)
+ find_package(Freetype REQUIRED)
+endif()
option(ENABLE_CURSES "Enable ncurses console" TRUE)
set(USE_CURSES FALSE)
@@ -147,7 +144,17 @@ option(ENABLE_POSTGRESQL "Enable PostgreSQL backend" TRUE)
set(USE_POSTGRESQL FALSE)
if(ENABLE_POSTGRESQL)
- find_package("PostgreSQL")
+ if(CMAKE_VERSION VERSION_LESS "3.20")
+ find_package(PostgreSQL QUIET)
+ # Before CMake 3.20 FindPostgreSQL.cmake always looked for server includes
+ # but we don't need them, so continue anyway if only those are missing.
+ if(PostgreSQL_INCLUDE_DIR AND PostgreSQL_LIBRARY)
+ set(PostgreSQL_FOUND TRUE)
+ set(PostgreSQL_INCLUDE_DIRS ${PostgreSQL_INCLUDE_DIR})
+ endif()
+ else()
+ find_package(PostgreSQL)
+ endif()
if(PostgreSQL_FOUND)
set(USE_POSTGRESQL TRUE)
@@ -194,6 +201,7 @@ endif(ENABLE_REDIS)
find_package(SQLite3 REQUIRED)
+
OPTION(ENABLE_PROMETHEUS "Enable prometheus client support" FALSE)
set(USE_PROMETHEUS FALSE)
@@ -230,6 +238,10 @@ if(ENABLE_SPATIAL)
endif(ENABLE_SPATIAL)
+find_package(ZLIB REQUIRED)
+find_package(Zstd REQUIRED)
+
+
if(NOT MSVC)
set(USE_GPROF FALSE CACHE BOOL "Use -pg flag for g++")
endif()
@@ -256,62 +268,34 @@ if(WIN32)
else() # Probably MinGW = GCC
set(PLATFORM_LIBS "")
endif()
- set(PLATFORM_LIBS ws2_32.lib version.lib shlwapi.lib ${PLATFORM_LIBS})
+ set(PLATFORM_LIBS ws2_32.lib version.lib shlwapi.lib winmm.lib ${PLATFORM_LIBS})
- # Zlib stuff
- find_path(ZLIB_INCLUDE_DIR "zlib.h" DOC "Zlib include directory")
- find_library(ZLIB_LIBRARIES "zlib" DOC "Path to zlib library")
+ set(EXTRA_DLL "" CACHE FILEPATH "Optional paths to additional DLLs that should be packaged")
- # Dll's are automatically copied to the output directory by vcpkg when VCPKG_APPLOCAL_DEPS=ON
+ # DLLs are automatically copied to the output directory by vcpkg when VCPKG_APPLOCAL_DEPS=ON
if(NOT VCPKG_APPLOCAL_DEPS)
- find_file(ZLIB_DLL NAMES "zlib.dll" "zlib1.dll" DOC "Path to zlib.dll for installation (optional)")
+ set(ZLIB_DLL "" CACHE FILEPATH "Path to Zlib DLL for installation (optional)")
+ set(ZSTD_DLL "" CACHE FILEPATH "Path to Zstd DLL for installation (optional)")
if(ENABLE_SOUND)
set(OPENAL_DLL "" CACHE FILEPATH "Path to OpenAL32.dll for installation (optional)")
set(OGG_DLL "" CACHE FILEPATH "Path to libogg.dll for installation (optional)")
- set(VORBIS_DLL "" CACHE FILEPATH "Path to libvorbis.dll for installation (optional)")
- set(VORBISFILE_DLL "" CACHE FILEPATH "Path to libvorbisfile.dll for installation (optional)")
+ set(VORBIS_DLL "" CACHE FILEPATH "Path to Vorbis DLLs for installation (optional)")
+ endif()
+ if(USE_GETTEXT)
+ set(GETTEXT_DLL "" CACHE FILEPATH "Path to Intl/Iconv DLLs for installation (optional)")
endif()
if(USE_LUAJIT)
set(LUA_DLL "" CACHE FILEPATH "Path to luajit-5.1.dll for installation (optional)")
endif()
endif()
-
else()
# Unix probably
if(BUILD_CLIENT)
if(NOT HAIKU AND NOT APPLE)
find_package(X11 REQUIRED)
endif(NOT HAIKU AND NOT APPLE)
+ endif()
- ##
- # The following dependencies are transitive dependencies from Irrlicht.
- # Minetest itself does not use them, but we link them so that statically
- # linking Irrlicht works.
- if(NOT HAIKU AND NOT APPLE)
- # 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})
- endif(NOT HAIKU AND NOT APPLE)
-
- find_package(JPEG REQUIRED)
- find_package(BZip2 REQUIRED)
- find_package(PNG REQUIRED)
- if(APPLE)
- find_library(CARBON_LIB Carbon REQUIRED)
- find_library(COCOA_LIB Cocoa REQUIRED)
- find_library(IOKIT_LIB IOKit REQUIRED)
- mark_as_advanced(
- CARBON_LIB
- COCOA_LIB
- IOKIT_LIB
- )
- SET(CLIENT_PLATFORM_LIBS ${CLIENT_PLATFORM_LIBS} ${CARBON_LIB} ${COCOA_LIB} ${IOKIT_LIB})
- endif(APPLE)
- ##
- endif(BUILD_CLIENT)
-
- find_package(ZLIB REQUIRED)
set(PLATFORM_LIBS -lpthread ${CMAKE_DL_LIBS})
if(APPLE)
set(PLATFORM_LIBS "-framework CoreFoundation" ${PLATFORM_LIBS})
@@ -501,15 +485,13 @@ endif()
include_directories(
${PROJECT_BINARY_DIR}
${PROJECT_SOURCE_DIR}
- ${IRRLICHT_INCLUDE_DIR}
${ZLIB_INCLUDE_DIR}
- ${PNG_INCLUDE_DIR}
- ${SOUND_INCLUDE_DIRS}
+ ${ZSTD_INCLUDE_DIR}
${SQLITE3_INCLUDE_DIR}
${LUA_INCLUDE_DIR}
${GMP_INCLUDE_DIR}
${JSON_INCLUDE_DIR}
- ${X11_INCLUDE_DIR}
+ ${LUA_BIT_INCLUDE_DIR}
${PROJECT_SOURCE_DIR}/script
)
@@ -517,8 +499,12 @@ if(USE_GETTEXT)
include_directories(${GETTEXT_INCLUDE_DIR})
endif()
-if(USE_FREETYPE)
- include_directories(${FREETYPE_INCLUDE_DIRS})
+if(BUILD_CLIENT)
+ include_directories(
+ ${FREETYPE_INCLUDE_DIRS}
+ ${SOUND_INCLUDE_DIRS}
+ ${X11_INCLUDE_DIR}
+ )
endif()
if(USE_CURL)
@@ -526,8 +512,11 @@ if(USE_CURL)
endif()
-set(EXECUTABLE_OUTPUT_PATH "${CMAKE_SOURCE_DIR}/bin")
-
+# When cross-compiling assume the user doesn't want to run the executable anyway,
+# otherwise place it in <source dir>/bin/ since Minetest can only run from there.
+if(NOT CMAKE_CROSSCOMPILING)
+ set(EXECUTABLE_OUTPUT_PATH "${CMAKE_SOURCE_DIR}/bin")
+endif()
if(BUILD_CLIENT)
add_executable(${PROJECT_NAME} ${client_SRCS} ${extra_windows_SRCS})
@@ -535,18 +524,17 @@ if(BUILD_CLIENT)
target_link_libraries(
${PROJECT_NAME}
${ZLIB_LIBRARIES}
- ${IRRLICHT_LIBRARY}
- ${JPEG_LIBRARIES}
- ${BZIP2_LIBRARIES}
- ${PNG_LIBRARIES}
+ IrrlichtMt::IrrlichtMt
+ ${ZSTD_LIBRARY}
${X11_LIBRARIES}
${SOUND_LIBRARIES}
${SQLITE3_LIBRARY}
${LUA_LIBRARY}
${GMP_LIBRARY}
${JSON_LIBRARY}
+ ${LUA_BIT_LIBRARY}
+ ${FREETYPE_LIBRARY}
${PLATFORM_LIBS}
- ${CLIENT_PLATFORM_LIBS}
)
if(NOT USE_LUAJIT)
set_target_properties(${PROJECT_NAME} PROPERTIES
@@ -580,17 +568,11 @@ if(BUILD_CLIENT)
${CURL_LIBRARY}
)
endif()
- if(USE_FREETYPE)
- if(FREETYPE_PKGCONFIG_FOUND)
- set_target_properties(${PROJECT_NAME}
- PROPERTIES
- COMPILE_FLAGS "${FREETYPE_CFLAGS_STR}"
- )
- endif()
- target_link_libraries(
- ${PROJECT_NAME}
- ${FREETYPE_LIBRARY}
- )
+ if(FREETYPE_PKGCONFIG_FOUND)
+ set_target_properties(${PROJECT_NAME}
+ PROPERTIES
+ COMPILE_FLAGS "${FREETYPE_CFLAGS_STR}"
+ )
endif()
if (USE_CURSES)
target_link_libraries(${PROJECT_NAME} ${CURSES_LIBRARIES})
@@ -616,12 +598,19 @@ endif(BUILD_CLIENT)
if(BUILD_SERVER)
add_executable(${PROJECT_NAME}server ${server_SRCS} ${extra_windows_SRCS})
add_dependencies(${PROJECT_NAME}server GenerateVersion)
+
+ get_target_property(
+ IRRLICHT_INCLUDES IrrlichtMt::IrrlichtMt INTERFACE_INCLUDE_DIRECTORIES)
+ # Doesn't work without PRIVATE/PUBLIC/INTERFACE mode specified.
+ target_include_directories(${PROJECT_NAME}server PRIVATE ${IRRLICHT_INCLUDES})
target_link_libraries(
${PROJECT_NAME}server
${ZLIB_LIBRARIES}
+ ${ZSTD_LIBRARY}
${SQLITE3_LIBRARY}
${JSON_LIBRARY}
${LUA_LIBRARY}
+ ${LUA_BIT_LIBRARY}
${GMP_LIBRARY}
${PLATFORM_LIBS}
)
@@ -668,13 +657,15 @@ endif(BUILD_SERVER)
# see issue #4638
set(GETTEXT_BLACKLISTED_LOCALES
ar
+ dv
he
- ky
+ hi
+ kn
ms_Arab
th
)
-option(APPLY_LOCALE_BLACKLIST "Use a blacklist to avoid broken locales" TRUE)
+option(APPLY_LOCALE_BLACKLIST "Use a blacklist to avoid known broken locales" TRUE)
if (GETTEXTLIB_FOUND AND APPLY_LOCALE_BLACKLIST)
set(GETTEXT_USED_LOCALES "")
@@ -684,6 +675,8 @@ if (GETTEXTLIB_FOUND AND APPLY_LOCALE_BLACKLIST)
endif()
endforeach()
message(STATUS "Locale blacklist applied; Locales used: ${GETTEXT_USED_LOCALES}")
+elseif (GETTEXTLIB_FOUND)
+ set(GETTEXT_USED_LOCALES ${GETTEXT_AVAILABLE_LOCALES})
endif()
# Set some optimizations and tweaks
@@ -713,7 +706,7 @@ if(MSVC)
# Flags that cannot be shared between cl and clang-cl
# https://clang.llvm.org/docs/UsersManual.html#clang-cl
- if(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
+ if(CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fuse-ld=lld")
# Disable pragma-pack warning
@@ -731,7 +724,7 @@ else()
else()
set(RELEASE_WARNING_FLAGS "")
endif()
- if(CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
+ if(CMAKE_CXX_COMPILER_ID MATCHES "(Apple)?Clang")
set(WARNING_FLAGS "${WARNING_FLAGS} -Wsign-compare")
endif()
@@ -742,7 +735,16 @@ else()
check_c_source_compiles("#ifndef __aarch64__\n#error\n#endif\nint main(){}" IS_AARCH64)
if(IS_AARCH64)
# Move text segment below LuaJIT's 47-bit limit (see issue #9367)
- SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,-Ttext-segment=0x200000000")
+ if(CMAKE_SYSTEM_NAME MATCHES "FreeBSD")
+ # FreeBSD uses lld, and lld does not support -Ttext-segment, suggesting
+ # --image-base instead. Not sure if it's equivalent change for the purpose
+ # but at least if fixes build on FreeBSD/aarch64
+ # XXX: the condition should also be changed to check for lld regardless of
+ # os, bit CMake doesn't have anything like CMAKE_LINKER_IS_LLD yet
+ SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--image-base=0x200000000")
+ else()
+ SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,-Ttext-segment=0x200000000")
+ endif()
endif()
endif()
@@ -756,6 +758,16 @@ else()
# - we don't deal with Inf/NaN or signed zero
set(MATH_FLAGS "-fno-math-errno -fno-trapping-math -ffinite-math-only -fno-signed-zeros")
+ # Enable SSE for floating point math on 32-bit x86 by default
+ # reasoning see minetest issue #11810 and https://gcc.gnu.org/wiki/FloatingPointMath
+ if(CMAKE_SIZEOF_VOID_P EQUAL 4)
+ check_c_source_compiles("#ifndef __i686__\n#error\n#endif\nint main(){}" IS_I686)
+ if(IS_I686)
+ message(STATUS "Detected Intel x86: using SSE instead of x87 FPU")
+ set(OTHER_FLAGS "${OTHER_FLAGS} -mfpmath=sse -msse")
+ endif()
+ endif()
+
set(CMAKE_CXX_FLAGS_RELEASE "-DNDEBUG ${RELEASE_WARNING_FLAGS} ${WARNING_FLAGS} ${OTHER_FLAGS} -Wall -pipe -funroll-loops")
if(CMAKE_SYSTEM_NAME MATCHES "(Darwin|BSD|DragonFly)")
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -Os")
@@ -768,7 +780,7 @@ else()
else()
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} ${MATH_FLAGS}")
endif()
- endif(CMAKE_SYSTEM_NAME MATCHES "(Darwin|BSD|DragonFly)")
+ endif()
set(CMAKE_CXX_FLAGS_SEMIDEBUG "-g -O1 -Wall ${WARNING_FLAGS} ${OTHER_FLAGS}")
set(CMAKE_CXX_FLAGS_DEBUG "-g -O0 -Wall ${WARNING_FLAGS} ${OTHER_FLAGS}")
@@ -785,6 +797,9 @@ endif()
# Installation
if(WIN32)
+ if(EXTRA_DLL)
+ install(FILES ${EXTRA_DLL} DESTINATION ${BINDIR})
+ endif()
if(VCPKG_APPLOCAL_DEPS)
# Collect the dll's from the output path
install(DIRECTORY ${EXECUTABLE_OUTPUT_PATH}/Release/
@@ -805,7 +820,7 @@ if(WIN32)
FILES_MATCHING PATTERN "*.dll")
else()
# Use the old-style way to install dll's
- if(USE_SOUND)
+ if(BUILD_CLIENT AND USE_SOUND)
if(OPENAL_DLL)
install(FILES ${OPENAL_DLL} DESTINATION ${BINDIR})
endif()
@@ -815,9 +830,6 @@ if(WIN32)
if(VORBIS_DLL)
install(FILES ${VORBIS_DLL} DESTINATION ${BINDIR})
endif()
- if(VORBISFILE_DLL)
- install(FILES ${VORBISFILE_DLL} DESTINATION ${BINDIR})
- endif()
endif()
if(CURL_DLL)
install(FILES ${CURL_DLL} DESTINATION ${BINDIR})
@@ -825,7 +837,10 @@ if(WIN32)
if(ZLIB_DLL)
install(FILES ${ZLIB_DLL} DESTINATION ${BINDIR})
endif()
- if(FREETYPE_DLL)
+ if(ZSTD_DLL)
+ install(FILES ${ZSTD_DLL} DESTINATION ${BINDIR})
+ endif()
+ if(BUILD_CLIENT AND FREETYPE_DLL)
install(FILES ${FREETYPE_DLL} DESTINATION ${BINDIR})
endif()
if(SQLITE3_DLL)
@@ -837,6 +852,12 @@ if(WIN32)
if(LUA_DLL)
install(FILES ${LUA_DLL} DESTINATION ${BINDIR})
endif()
+ if(BUILD_CLIENT AND IRRLICHT_DLL)
+ install(FILES ${IRRLICHT_DLL} DESTINATION ${BINDIR})
+ endif()
+ if(BUILD_CLIENT AND USE_GETTEXT AND GETTEXT_DLL)
+ install(FILES ${GETTEXT_DLL} DESTINATION ${BINDIR})
+ endif()
endif()
endif()
@@ -864,29 +885,8 @@ if(BUILD_CLIENT)
endforeach()
endif()
- if(USE_FREETYPE)
- install(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/../fonts" DESTINATION "${SHAREDIR}"
- FILES_MATCHING PATTERN "*.ttf" PATTERN "*.txt")
- else()
- install(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/../fonts" DESTINATION "${SHAREDIR}"
- FILES_MATCHING PATTERN "*.png" PATTERN "*.xml")
- endif()
-
- if(WIN32)
- if(NOT VCPKG_APPLOCAL_DEPS)
- if(DEFINED IRRLICHT_DLL)
- install(FILES ${IRRLICHT_DLL} DESTINATION ${BINDIR})
- endif()
- if(USE_GETTEXT)
- if(DEFINED GETTEXT_DLL)
- install(FILES ${GETTEXT_DLL} DESTINATION ${BINDIR})
- endif()
- if(DEFINED GETTEXT_ICONV_DLL)
- install(FILES ${GETTEXT_ICONV_DLL} DESTINATION ${BINDIR})
- endif()
- endif()
- endif()
- endif()
+ install(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/../fonts" DESTINATION "${SHAREDIR}"
+ FILES_MATCHING PATTERN "*.ttf" PATTERN "*.txt")
endif(BUILD_CLIENT)
if(BUILD_SERVER)
diff --git a/src/chat.cpp b/src/chat.cpp
index c9317a079..92df038e8 100644
--- a/src/chat.cpp
+++ b/src/chat.cpp
@@ -35,10 +35,23 @@ ChatBuffer::ChatBuffer(u32 scrollback):
if (m_scrollback == 0)
m_scrollback = 1;
m_empty_formatted_line.first = true;
+
+ m_cache_clickable_chat_weblinks = false;
+ // Curses mode cannot access g_settings here
+ if (g_settings != nullptr) {
+ m_cache_clickable_chat_weblinks = g_settings->getBool("clickable_chat_weblinks");
+ if (m_cache_clickable_chat_weblinks) {
+ std::string colorval = g_settings->get("chat_weblink_color");
+ parseColorString(colorval, m_cache_chat_weblink_color, false, 255);
+ m_cache_chat_weblink_color.setAlpha(255);
+ }
+ }
}
void ChatBuffer::addLine(const std::wstring &name, const std::wstring &text)
{
+ m_lines_modified = true;
+
ChatLine line(name, text);
m_unformatted.push_back(line);
@@ -61,6 +74,7 @@ void ChatBuffer::clear()
m_unformatted.clear();
m_formatted.clear();
m_scroll = 0;
+ m_lines_modified = true;
}
u32 ChatBuffer::getLineCount() const
@@ -88,14 +102,11 @@ void ChatBuffer::deleteOldest(u32 count)
u32 del_unformatted = 0;
u32 del_formatted = 0;
- while (count > 0 && del_unformatted < m_unformatted.size())
- {
+ while (count > 0 && del_unformatted < m_unformatted.size()) {
++del_unformatted;
// keep m_formatted in sync
- if (del_formatted < m_formatted.size())
- {
-
+ if (del_formatted < m_formatted.size()) {
sanity_check(m_formatted[del_formatted].first);
++del_formatted;
while (del_formatted < m_formatted.size() &&
@@ -109,6 +120,9 @@ void ChatBuffer::deleteOldest(u32 count)
m_unformatted.erase(m_unformatted.begin(), m_unformatted.begin() + del_unformatted);
m_formatted.erase(m_formatted.begin(), m_formatted.begin() + del_formatted);
+ if (del_unformatted > 0)
+ m_lines_modified = true;
+
if (at_bottom)
m_scroll = getBottomScrollPos();
else
@@ -128,11 +142,6 @@ u32 ChatBuffer::getRows() const
return m_rows;
}
-void ChatBuffer::scrollTop()
-{
- m_scroll = getTopScrollPos();
-}
-
void ChatBuffer::reformat(u32 cols, u32 rows)
{
if (cols == 0 || rows == 0)
@@ -263,78 +272,144 @@ u32 ChatBuffer::formatChatLine(const ChatLine& line, u32 cols,
//EnrichedString line_text(line.text);
next_line.first = true;
- bool text_processing = false;
+ // Set/use forced newline after the last frag in each line
+ bool mark_newline = false;
// Produce fragments and layout them into lines
- while (!next_frags.empty() || in_pos < line.text.size())
- {
+ while (!next_frags.empty() || in_pos < line.text.size()) {
+ mark_newline = false; // now using this to USE line-end frag
+
// Layout fragments into lines
- while (!next_frags.empty())
- {
+ while (!next_frags.empty()) {
ChatFormattedFragment& frag = next_frags[0];
- if (frag.text.size() <= cols - out_column)
- {
+
+ // Force newline after this frag, if marked
+ if (frag.column == INT_MAX)
+ mark_newline = true;
+
+ if (frag.text.size() <= cols - out_column) {
// Fragment fits into current line
frag.column = out_column;
next_line.fragments.push_back(frag);
out_column += frag.text.size();
next_frags.erase(next_frags.begin());
- }
- else
- {
+ } else {
// Fragment does not fit into current line
// So split it up
temp_frag.text = frag.text.substr(0, cols - out_column);
temp_frag.column = out_column;
- //temp_frag.bold = frag.bold;
+ temp_frag.weblink = frag.weblink;
+
next_line.fragments.push_back(temp_frag);
frag.text = frag.text.substr(cols - out_column);
+ frag.column = 0;
out_column = cols;
}
- if (out_column == cols || text_processing)
- {
+
+ if (out_column == cols || mark_newline) {
// End the current line
destination.push_back(next_line);
num_added++;
next_line.fragments.clear();
next_line.first = false;
- out_column = text_processing ? hanging_indentation : 0;
+ out_column = hanging_indentation;
+ mark_newline = false;
}
}
- // Produce fragment
- if (in_pos < line.text.size())
- {
- u32 remaining_in_input = line.text.size() - in_pos;
- u32 remaining_in_output = cols - out_column;
+ // Produce fragment(s) for next formatted line
+ if (!(in_pos < line.text.size()))
+ continue;
+
+ const std::wstring &linestring = line.text.getString();
+ u32 remaining_in_output = cols - out_column;
+ size_t http_pos = std::wstring::npos;
+ mark_newline = false; // now using this to SET line-end frag
+ // Construct all frags for next output line
+ while (!mark_newline) {
// Determine a fragment length <= the minimum of
// remaining_in_{in,out}put. Try to end the fragment
// on a word boundary.
- u32 frag_length = 1, space_pos = 0;
+ u32 frag_length = 0, space_pos = 0;
+ u32 remaining_in_input = line.text.size() - in_pos;
+
+ if (m_cache_clickable_chat_weblinks) {
+ // Note: unsigned(-1) on fail
+ http_pos = linestring.find(L"https://", in_pos);
+ if (http_pos == std::wstring::npos)
+ http_pos = linestring.find(L"http://", in_pos);
+ if (http_pos != std::wstring::npos)
+ http_pos -= in_pos;
+ }
+
while (frag_length < remaining_in_input &&
- frag_length < remaining_in_output)
- {
- if (iswspace(line.text.getString()[in_pos + frag_length]))
+ frag_length < remaining_in_output) {
+ if (iswspace(linestring[in_pos + frag_length]))
space_pos = frag_length;
++frag_length;
}
+
+ if (http_pos >= remaining_in_output) {
+ // Http not in range, grab until space or EOL, halt as normal.
+ // Note this works because (http_pos = npos) is unsigned(-1)
+
+ mark_newline = true;
+ } else if (http_pos == 0) {
+ // At http, grab ALL until FIRST whitespace or end marker. loop.
+ // If at end of string, next loop will be empty string to mark end of weblink.
+
+ frag_length = 6; // Frag is at least "http://"
+
+ // Chars to mark end of weblink
+ // TODO? replace this with a safer (slower) regex whitelist?
+ static const std::wstring delim_chars = L"\'\";,";
+ wchar_t tempchar = linestring[in_pos+frag_length];
+ while (frag_length < remaining_in_input &&
+ !iswspace(tempchar) &&
+ delim_chars.find(tempchar) == std::wstring::npos) {
+ ++frag_length;
+ tempchar = linestring[in_pos+frag_length];
+ }
+
+ space_pos = frag_length - 1;
+ // This frag may need to be force-split. That's ok, urls aren't "words"
+ if (frag_length >= remaining_in_output) {
+ mark_newline = true;
+ }
+ } else {
+ // Http in range, grab until http, loop
+
+ space_pos = http_pos - 1;
+ frag_length = http_pos;
+ }
+
+ // Include trailing space in current frag
if (space_pos != 0 && frag_length < remaining_in_input)
frag_length = space_pos + 1;
temp_frag.text = line.text.substr(in_pos, frag_length);
- temp_frag.column = 0;
- //temp_frag.bold = 0;
+ // A hack so this frag remembers mark_newline for the layout phase
+ temp_frag.column = mark_newline ? INT_MAX : 0;
+
+ if (http_pos == 0) {
+ // Discard color stuff from the source frag
+ temp_frag.text = EnrichedString(temp_frag.text.getString());
+ temp_frag.text.setDefaultColor(m_cache_chat_weblink_color);
+ // Set weblink in the frag meta
+ temp_frag.weblink = wide_to_utf8(temp_frag.text.getString());
+ } else {
+ temp_frag.weblink.clear();
+ }
next_frags.push_back(temp_frag);
in_pos += frag_length;
- text_processing = true;
+ remaining_in_output -= std::min(frag_length, remaining_in_output);
}
}
// End the last line
- if (num_added == 0 || !next_line.fragments.empty())
- {
+ if (num_added == 0 || !next_line.fragments.empty()) {
destination.push_back(next_line);
num_added++;
}
diff --git a/src/chat.h b/src/chat.h
index 0b98e4d3c..fc080f64b 100644
--- a/src/chat.h
+++ b/src/chat.h
@@ -57,6 +57,8 @@ struct ChatFormattedFragment
EnrichedString text;
// starting column
u32 column;
+ // web link is empty for most frags
+ std::string weblink;
// formatting
//u8 bold:1;
};
@@ -108,8 +110,13 @@ public:
void scrollAbsolute(s32 scroll);
// Scroll to bottom of buffer (newest)
void scrollBottom();
- // Scroll to top of buffer (oldest)
- void scrollTop();
+
+ // Functions for keeping track of whether the lines were modified by any
+ // preceding operations
+ // If they were not changed, getLineCount() and getLine() output the same as
+ // before
+ bool getLinesModified() const { return m_lines_modified; }
+ void resetLinesModified() { m_lines_modified = false; }
// Format a chat line for the given number of columns.
// Appends the formatted lines to the destination array and
@@ -118,6 +125,7 @@ public:
std::vector<ChatFormattedLine>& destination) const;
void resize(u32 scrollback);
+
protected:
s32 getTopScrollPos() const;
s32 getBottomScrollPos() const;
@@ -138,6 +146,16 @@ private:
std::vector<ChatFormattedLine> m_formatted;
// Empty formatted line, for error returns
ChatFormattedLine m_empty_formatted_line;
+
+ // Enable clickable chat weblinks
+ bool m_cache_clickable_chat_weblinks;
+ // Color of clickable chat weblinks
+ irr::video::SColor m_cache_chat_weblink_color;
+
+ // Whether the lines were modified since last markLinesUnchanged()
+ // Is always set to true when m_unformatted is modified, because that's what
+ // determines the output of getLineCount() and getLine()
+ bool m_lines_modified = true;
};
class ChatPrompt
diff --git a/src/client/CMakeLists.txt b/src/client/CMakeLists.txt
index 140814911..8d058852a 100644
--- a/src/client/CMakeLists.txt
+++ b/src/client/CMakeLists.txt
@@ -58,5 +58,9 @@ set(client_SRCS
${CMAKE_CURRENT_SOURCE_DIR}/sky.cpp
${CMAKE_CURRENT_SOURCE_DIR}/tile.cpp
${CMAKE_CURRENT_SOURCE_DIR}/wieldmesh.cpp
+ ${CMAKE_CURRENT_SOURCE_DIR}/shadows/dynamicshadows.cpp
+ ${CMAKE_CURRENT_SOURCE_DIR}/shadows/dynamicshadowsrender.cpp
+ ${CMAKE_CURRENT_SOURCE_DIR}/shadows/shadowsshadercallbacks.cpp
+ ${CMAKE_CURRENT_SOURCE_DIR}/shadows/shadowsScreenQuad.cpp
PARENT_SCOPE
)
diff --git a/src/client/camera.cpp b/src/client/camera.cpp
index 350b685e1..d1f19adb3 100644
--- a/src/client/camera.cpp
+++ b/src/client/camera.cpp
@@ -26,6 +26,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "player.h"
#include <cmath>
#include "client/renderingengine.h"
+#include "client/content_cao.h"
#include "settings.h"
#include "wieldmesh.h"
#include "noise.h" // easeCurve
@@ -36,6 +37,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "constants.h"
#include "fontengine.h"
#include "script/scripting_client.h"
+#include "gettext.h"
#define CAMERA_OFFSET_STEP 200
#define WIELDMESH_OFFSET_X 55.0f
@@ -43,11 +45,11 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#define WIELDMESH_AMPLITUDE_X 7.0f
#define WIELDMESH_AMPLITUDE_Y 10.0f
-Camera::Camera(MapDrawControl &draw_control, Client *client):
+Camera::Camera(MapDrawControl &draw_control, Client *client, RenderingEngine *rendering_engine):
m_draw_control(draw_control),
m_client(client)
{
- scene::ISceneManager *smgr = RenderingEngine::get_scene_manager();
+ auto smgr = rendering_engine->get_scene_manager();
// note: making the camera node a child of the player node
// would lead to unexpected behaviour, so we don't do that.
m_playernode = smgr->addEmptySceneNode(smgr->getRootSceneNode());
@@ -132,28 +134,6 @@ void Camera::notifyFovChange()
}
}
-bool Camera::successfullyCreated(std::string &error_message)
-{
- if (!m_playernode) {
- error_message = "Failed to create the player scene node";
- } else if (!m_headnode) {
- error_message = "Failed to create the head scene node";
- } else if (!m_cameranode) {
- error_message = "Failed to create the camera scene node";
- } else if (!m_wieldmgr) {
- error_message = "Failed to create the wielded item scene manager";
- } else if (!m_wieldnode) {
- error_message = "Failed to create the wielded item scene node";
- } else {
- error_message.clear();
- }
-
- if (m_client->modsLoaded())
- m_client->getScript()->on_camera_ready(this);
-
- return error_message.empty();
-}
-
// Returns the fractional part of x
inline f32 my_modf(f32 x)
{
@@ -186,9 +166,7 @@ void Camera::step(f32 dtime)
m_view_bobbing_anim -= offset;
} else if (m_view_bobbing_anim > 0.75) {
m_view_bobbing_anim += offset;
- }
-
- if (m_view_bobbing_anim < 0.5) {
+ } else if (m_view_bobbing_anim < 0.5) {
m_view_bobbing_anim += offset;
if (m_view_bobbing_anim > 0.5)
m_view_bobbing_anim = 0.5;
@@ -330,7 +308,7 @@ void Camera::addArmInertia(f32 player_yaw)
}
}
-void Camera::update(LocalPlayer* player, f32 frametime, f32 busytime, f32 tool_reload_ratio)
+void Camera::update(LocalPlayer* player, f32 frametime, f32 tool_reload_ratio)
{
// Get player position
// Smooth the movement when walking up stairs
@@ -343,13 +321,16 @@ void Camera::update(LocalPlayer* player, f32 frametime, f32 busytime, f32 tool_r
if (player->getParent())
player_position = player->getParent()->getPosition();
- // Smooth the camera movement when the player instantly moves upward due to stepheight.
- // To smooth the 'not touching_ground' stepheight, smoothing is necessary when jumping
- // or swimming (for when moving from liquid to land).
- // Disable smoothing if climbing or flying, to avoid upwards offset of player model
- // when seen in 3rd person view.
- bool flying = g_settings->getBool("free_move") && m_client->checkLocalPrivilege("fly");
- if (player_position.Y > old_player_position.Y && !player->is_climbing && !flying) {
+ // Smooth the camera movement after the player instantly moves upward due to stepheight.
+ // The smoothing usually continues until the camera position reaches the player position.
+ float player_stepheight = player->getCAO() ? player->getCAO()->getStepHeight() : HUGE_VALF;
+ float upward_movement = player_position.Y - old_player_position.Y;
+ if (upward_movement < 0.01f || upward_movement > player_stepheight) {
+ m_stepheight_smooth_active = false;
+ } else if (player->touching_ground) {
+ m_stepheight_smooth_active = true;
+ }
+ if (m_stepheight_smooth_active) {
f32 oldy = old_player_position.Y;
f32 newy = player_position.Y;
f32 t = std::exp(-23 * frametime);
@@ -378,7 +359,8 @@ void Camera::update(LocalPlayer* player, f32 frametime, f32 busytime, f32 tool_r
// Smoothen and invert the above
fall_bobbing = sin(fall_bobbing * 0.5 * M_PI) * -1;
// Amplify according to the intensity of the impact
- fall_bobbing *= (1 - rangelim(50 / player->camera_impact, 0, 1)) * 5;
+ if (player->camera_impact > 0.0f)
+ fall_bobbing *= (1 - rangelim(50 / player->camera_impact, 0, 1)) * 5;
fall_bobbing *= m_cache_fall_bobbing_amount;
}
@@ -409,41 +391,17 @@ void Camera::update(LocalPlayer* player, f32 frametime, f32 busytime, f32 tool_r
f32 bobfrac = my_modf(m_view_bobbing_anim * 2);
f32 bobdir = (m_view_bobbing_anim < 0.5) ? 1.0 : -1.0;
- #if 1
f32 bobknob = 1.2;
f32 bobtmp = sin(pow(bobfrac, bobknob) * M_PI);
- //f32 bobtmp2 = cos(pow(bobfrac, bobknob) * M_PI);
v3f bobvec = v3f(
0.3 * bobdir * sin(bobfrac * M_PI),
-0.28 * bobtmp * bobtmp,
0.);
- //rel_cam_pos += 0.2 * bobvec;
- //rel_cam_target += 0.03 * bobvec;
- //rel_cam_up.rotateXYBy(0.02 * bobdir * bobtmp * M_PI);
- float f = 1.0;
- f *= m_cache_view_bobbing_amount;
- rel_cam_pos += bobvec * f;
- //rel_cam_target += 0.995 * bobvec * f;
- rel_cam_target += bobvec * f;
- rel_cam_target.Z -= 0.005 * bobvec.Z * f;
- //rel_cam_target.X -= 0.005 * bobvec.X * f;
- //rel_cam_target.Y -= 0.005 * bobvec.Y * f;
- rel_cam_up.rotateXYBy(-0.03 * bobdir * bobtmp * M_PI * f);
- #else
- f32 angle_deg = 1 * bobdir * sin(bobfrac * M_PI);
- f32 angle_rad = angle_deg * M_PI / 180;
- f32 r = 0.05;
- v3f off = v3f(
- r * sin(angle_rad),
- r * (cos(angle_rad) - 1),
- 0);
- rel_cam_pos += off;
- //rel_cam_target += off;
- rel_cam_up.rotateXYBy(angle_deg);
- #endif
-
+ rel_cam_pos += bobvec * m_cache_view_bobbing_amount;
+ rel_cam_target += bobvec * m_cache_view_bobbing_amount;
+ rel_cam_up.rotateXYBy(-0.03 * bobdir * bobtmp * M_PI * m_cache_view_bobbing_amount);
}
// Compute absolute camera position and target
@@ -541,7 +499,7 @@ void Camera::update(LocalPlayer* player, f32 frametime, f32 busytime, f32 tool_r
m_curr_fov_degrees = rangelim(m_curr_fov_degrees, 1.0f, 160.0f);
// FOV and aspect ratio
- const v2u32 &window_size = RenderingEngine::get_instance()->getWindowSize();
+ const v2u32 &window_size = RenderingEngine::getWindowSize();
m_aspect = (f32) window_size.X / (f32) window_size.Y;
m_fov_y = m_curr_fov_degrees * M_PI / 180.0;
// Increase vertical FOV on lower aspect ratios (<16:10)
@@ -612,6 +570,8 @@ void Camera::update(LocalPlayer* player, f32 frametime, f32 busytime, f32 tool_r
const bool walking = movement_XZ && player->touching_ground;
const bool swimming = (movement_XZ || player->swimming_vertical) && player->in_liquid;
const bool climbing = movement_Y && player->is_climbing;
+ const bool flying = g_settings->getBool("free_move")
+ && m_client->checkLocalPrivilege("fly");
if ((walking || swimming || climbing) && !flying) {
// Start animation
m_view_bobbing_state = 1;
@@ -664,7 +624,7 @@ void Camera::wield(const ItemStack &item)
void Camera::drawWieldedTool(irr::core::matrix4* translation)
{
// Clear Z buffer so that the wielded tool stays in front of world geometry
- m_wieldmgr->getVideoDriver()->clearZBuffer();
+ m_wieldmgr->getVideoDriver()->clearBuffers(video::ECBF_DEPTH);
// Draw the wielded node (in a separate scene manager)
scene::ICameraSceneNode* cam = m_wieldmgr->getActiveCamera();
diff --git a/src/client/camera.h b/src/client/camera.h
index 6fd8d9aa7..403d6024c 100644
--- a/src/client/camera.h
+++ b/src/client/camera.h
@@ -30,6 +30,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
class LocalPlayer;
struct MapDrawControl;
class Client;
+class RenderingEngine;
class WieldMeshSceneNode;
struct Nametag
@@ -78,7 +79,7 @@ enum CameraMode {CAMERA_MODE_FIRST, CAMERA_MODE_THIRD, CAMERA_MODE_THIRD_FRONT};
class Camera
{
public:
- Camera(MapDrawControl &draw_control, Client *client);
+ Camera(MapDrawControl &draw_control, Client *client, RenderingEngine *rendering_engine);
~Camera();
// Get camera scene node.
@@ -135,16 +136,11 @@ public:
// Notify about new server-sent FOV and initialize smooth FOV transition
void notifyFovChange();
- // Checks if the constructor was able to create the scene nodes
- bool successfullyCreated(std::string &error_message);
-
// Step the camera: updates the viewing range and view bobbing.
void step(f32 dtime);
// Update the camera from the local player's position.
- // busytime is used to adjust the viewing range.
- void update(LocalPlayer* player, f32 frametime, f32 busytime,
- f32 tool_reload_ratio);
+ void update(LocalPlayer* player, f32 frametime, f32 tool_reload_ratio);
// Update render distance
void updateViewingRange();
@@ -217,6 +213,8 @@ private:
// Camera offset
v3s16 m_camera_offset;
+ bool m_stepheight_smooth_active = false;
+
// Server-sent FOV variables
bool m_server_sent_fov = false;
f32 m_curr_fov_degrees, m_old_fov_degrees, m_target_fov_degrees;
diff --git a/src/client/client.cpp b/src/client/client.cpp
index ef4a3cdfc..935a82653 100644
--- a/src/client/client.cpp
+++ b/src/client/client.cpp
@@ -50,6 +50,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "clientmap.h"
#include "clientmedia.h"
#include "version.h"
+#include "database/database-files.h"
#include "database/database-sqlite3.h"
#include "serialization.h"
#include "guiscalingfilter.h"
@@ -97,6 +98,7 @@ Client::Client(
NodeDefManager *nodedef,
ISoundManager *sound,
MtEventManager *event,
+ RenderingEngine *rendering_engine,
bool ipv6,
GameUI *game_ui
):
@@ -106,9 +108,10 @@ Client::Client(
m_nodedef(nodedef),
m_sound(sound),
m_event(event),
+ m_rendering_engine(rendering_engine),
m_mesh_update_thread(this),
m_env(
- new ClientMap(this, control, 666),
+ new ClientMap(this, rendering_engine, control, 666),
tsrc, this
),
m_particle_manager(&m_env),
@@ -126,6 +129,11 @@ Client::Client(
// Add local player
m_env.setLocalPlayer(new LocalPlayer(this, playername));
+ // Make the mod storage database and begin the save for later
+ m_mod_storage_database =
+ new ModMetadataDatabaseSQLite3(porting::path_user + DIR_DELIM + "client");
+ m_mod_storage_database->beginSave();
+
if (g_settings->getBool("enable_minimap")) {
m_minimap = new Minimap(this);
}
@@ -133,6 +141,33 @@ Client::Client(
m_cache_save_interval = g_settings->getU16("server_map_save_interval");
}
+void Client::migrateModStorage()
+{
+ std::string mod_storage_dir = porting::path_user + DIR_DELIM + "client";
+ std::string old_mod_storage = mod_storage_dir + DIR_DELIM + "mod_storage";
+ if (fs::IsDir(old_mod_storage)) {
+ infostream << "Migrating client mod storage to SQLite3 database" << std::endl;
+ {
+ ModMetadataDatabaseFiles files_db(mod_storage_dir);
+ std::vector<std::string> mod_list;
+ files_db.listMods(&mod_list);
+ for (const std::string &modname : mod_list) {
+ infostream << "Migrating client mod storage for mod " << modname << std::endl;
+ StringMap meta;
+ files_db.getModEntries(modname, &meta);
+ for (const auto &pair : meta) {
+ m_mod_storage_database->setModEntry(modname, pair.first, pair.second);
+ }
+ }
+ }
+ if (!fs::Rename(old_mod_storage, old_mod_storage + ".bak")) {
+ // Execution cannot move forward if the migration does not complete.
+ throw BaseException("Could not finish migrating client mod storage");
+ }
+ infostream << "Finished migration of client mod storage" << std::endl;
+ }
+}
+
void Client::loadMods()
{
// Don't load mods twice.
@@ -175,11 +210,7 @@ void Client::loadMods()
// Load "mod" scripts
for (const ModSpec &mod : m_mods) {
- if (!string_allowed(mod.name, MODNAME_ALLOWED_CHARS)) {
- throw ModError("Error loading mod \"" + mod.name +
- "\": Mod name does not follow naming conventions: "
- "Only characters [a-z0-9_] are allowed.");
- }
+ mod.checkAndLog();
scanModIntoMemory(mod.name, mod.path);
}
@@ -208,6 +239,9 @@ void Client::scanModSubfolder(const std::string &mod_name, const std::string &mo
std::string full_path = mod_path + DIR_DELIM + mod_subpath;
std::vector<fs::DirListNode> mod = fs::GetDirListing(full_path);
for (const fs::DirListNode &j : mod) {
+ if (j.name[0] == '.')
+ continue;
+
if (j.dir) {
scanModSubfolder(mod_name, mod_path, mod_subpath + j.name + DIR_DELIM);
continue;
@@ -298,17 +332,17 @@ Client::~Client()
}
// cleanup 3d model meshes on client shutdown
- while (RenderingEngine::get_mesh_cache()->getMeshCount() != 0) {
- scene::IAnimatedMesh *mesh = RenderingEngine::get_mesh_cache()->getMeshByIndex(0);
-
- if (mesh)
- RenderingEngine::get_mesh_cache()->removeMesh(mesh);
- }
+ m_rendering_engine->cleanupMeshCache();
delete m_minimap;
m_minimap = nullptr;
delete m_media_downloader;
+
+ // Write the changes and delete
+ if (m_mod_storage_database)
+ m_mod_storage_database->endSave();
+ delete m_mod_storage_database;
}
void Client::connect(Address address, bool is_local_server)
@@ -559,6 +593,29 @@ void Client::step(float dtime)
m_media_downloader = NULL;
}
}
+ {
+ // Acknowledge dynamic media downloads to server
+ std::vector<u32> done;
+ for (auto it = m_pending_media_downloads.begin();
+ it != m_pending_media_downloads.end();) {
+ assert(it->second->isStarted());
+ it->second->step(this);
+ if (it->second->isDone()) {
+ done.emplace_back(it->first);
+
+ it = m_pending_media_downloads.erase(it);
+ } else {
+ it++;
+ }
+
+ if (done.size() == 255) { // maximum in one packet
+ sendHaveMedia(done);
+ done.clear();
+ }
+ }
+ if (!done.empty())
+ sendHaveMedia(done);
+ }
/*
If the server didn't update the inventory in a while, revert
@@ -622,19 +679,12 @@ void Client::step(float dtime)
}
}
+ // Write changes to the mod storage
m_mod_storage_save_timer -= dtime;
if (m_mod_storage_save_timer <= 0.0f) {
m_mod_storage_save_timer = g_settings->getFloat("server_map_save_interval");
- int n = 0;
- for (std::unordered_map<std::string, ModMetadata *>::const_iterator
- it = m_mod_storages.begin(); it != m_mod_storages.end(); ++it) {
- if (it->second->isModified()) {
- it->second->save(getModStoragePath());
- n++;
- }
- }
- if (n > 0)
- infostream << "Saved " << n << " modified mod storages." << std::endl;
+ m_mod_storage_database->endSave();
+ m_mod_storage_database->beginSave();
}
// Write server map
@@ -660,15 +710,11 @@ bool Client::loadMedia(const std::string &data, const std::string &filename,
TRACESTREAM(<< "Client: Attempting to load image "
<< "file \"" << filename << "\"" << std::endl);
- io::IFileSystem *irrfs = RenderingEngine::get_filesystem();
- video::IVideoDriver *vdrv = RenderingEngine::get_video_driver();
-
- // Silly irrlicht's const-incorrectness
- Buffer<char> data_rw(data.c_str(), data.size());
+ io::IFileSystem *irrfs = m_rendering_engine->get_filesystem();
+ video::IVideoDriver *vdrv = m_rendering_engine->get_video_driver();
- // Create an irrlicht memory file
io::IReadFile *rfile = irrfs->createMemoryReadFile(
- *data_rw, data_rw.getSize(), "_tempreadfile");
+ data.c_str(), data.size(), "_tempreadfile");
FATAL_ERROR_IF(!rfile, "Could not create irrlicht memory file.");
@@ -778,7 +824,8 @@ void Client::request_media(const std::vector<std::string> &file_requests)
Send(&pkt);
infostream << "Client: Sending media request list to server ("
- << file_requests.size() << " files. packet size)" << std::endl;
+ << file_requests.size() << " files, packet size "
+ << pkt.getSize() << ")" << std::endl;
}
void Client::initLocalMapSaving(const Address &address,
@@ -861,7 +908,7 @@ void Client::ProcessData(NetworkPacket *pkt)
*/
if(sender_peer_id != PEER_ID_SERVER) {
infostream << "Client::ProcessData(): Discarding data not "
- "coming from server: peer_id=" << sender_peer_id
+ "coming from server: peer_id=" << sender_peer_id << " command=" << pkt->getCommand()
<< std::endl;
return;
}
@@ -912,7 +959,7 @@ void writePlayerPos(LocalPlayer *myplayer, ClientMap *clientMap, NetworkPacket *
v3f sf = myplayer->getSpeed() * 100;
s32 pitch = myplayer->getPitch() * 100;
s32 yaw = myplayer->getYaw() * 100;
- u32 keyPressed = myplayer->keyPressed;
+ u32 keyPressed = myplayer->control.getKeysPressed();
// scaled by 80, so that pi can fit into a u8
u8 fov = clientMap->getCameraFov() * 80;
u8 wanted_range = MYMIN(255,
@@ -1268,22 +1315,24 @@ void Client::sendPlayerPos()
if (!player)
return;
- ClientMap &map = m_env.getClientMap();
- u8 camera_fov = map.getCameraFov();
- u8 wanted_range = map.getControl().wanted_range;
-
// Save bandwidth by only updating position when
// player is not dead and something changed
if (m_activeobjects_received && player->isDead())
return;
+ ClientMap &map = m_env.getClientMap();
+ u8 camera_fov = map.getCameraFov();
+ u8 wanted_range = map.getControl().wanted_range;
+
+ u32 keyPressed = player->control.getKeysPressed();
+
if (
player->last_position == player->getPosition() &&
player->last_speed == player->getSpeed() &&
player->last_pitch == player->getPitch() &&
player->last_yaw == player->getYaw() &&
- player->last_keyPressed == player->keyPressed &&
+ player->last_keyPressed == keyPressed &&
player->last_camera_fov == camera_fov &&
player->last_wanted_range == wanted_range)
return;
@@ -1292,7 +1341,7 @@ void Client::sendPlayerPos()
player->last_speed = player->getSpeed();
player->last_pitch = player->getPitch();
player->last_yaw = player->getYaw();
- player->last_keyPressed = player->keyPressed;
+ player->last_keyPressed = keyPressed;
player->last_camera_fov = camera_fov;
player->last_wanted_range = wanted_range;
@@ -1303,6 +1352,19 @@ void Client::sendPlayerPos()
Send(&pkt);
}
+void Client::sendHaveMedia(const std::vector<u32> &tokens)
+{
+ NetworkPacket pkt(TOSERVER_HAVE_MEDIA, 1 + tokens.size() * 4);
+
+ sanity_check(tokens.size() < 256);
+
+ pkt << static_cast<u8>(tokens.size());
+ for (u32 token : tokens)
+ pkt << token;
+
+ Send(&pkt);
+}
+
void Client::removeNode(v3s16 p)
{
std::map<v3s16, MapBlock*> modified_blocks;
@@ -1416,6 +1478,11 @@ bool Client::updateWieldedItem()
return true;
}
+scene::ISceneManager* Client::getSceneManager()
+{
+ return m_rendering_engine->get_scene_manager();
+}
+
Inventory* Client::getInventory(const InventoryLocation &loc)
{
switch(loc.type){
@@ -1577,20 +1644,7 @@ void Client::addUpdateMeshTask(v3s16 p, bool ack_to_server, bool urgent)
void Client::addUpdateMeshTaskWithEdge(v3s16 blockpos, bool ack_to_server, bool urgent)
{
- try{
- addUpdateMeshTask(blockpos, ack_to_server, urgent);
- }
- catch(InvalidPositionException &e){}
-
- // Leading edge
- for (int i=0;i<6;i++)
- {
- try{
- v3s16 p = blockpos + g_6dirs[i];
- addUpdateMeshTask(p, false, urgent);
- }
- catch(InvalidPositionException &e){}
- }
+ m_mesh_update_thread.updateBlock(&m_env.getMap(), blockpos, ack_to_server, urgent, true);
}
void Client::addUpdateMeshTaskForNode(v3s16 nodepos, bool ack_to_server, bool urgent)
@@ -1602,38 +1656,16 @@ void Client::addUpdateMeshTaskForNode(v3s16 nodepos, bool ack_to_server, bool ur
<<std::endl;
}
- v3s16 blockpos = getNodeBlockPos(nodepos);
+ v3s16 blockpos = getNodeBlockPos(nodepos);
v3s16 blockpos_relative = blockpos * MAP_BLOCKSIZE;
-
- try{
- addUpdateMeshTask(blockpos, ack_to_server, urgent);
- }
- catch(InvalidPositionException &e) {}
-
+ m_mesh_update_thread.updateBlock(&m_env.getMap(), blockpos, ack_to_server, urgent, false);
// Leading edge
- if(nodepos.X == blockpos_relative.X){
- try{
- v3s16 p = blockpos + v3s16(-1,0,0);
- addUpdateMeshTask(p, false, urgent);
- }
- catch(InvalidPositionException &e){}
- }
-
- if(nodepos.Y == blockpos_relative.Y){
- try{
- v3s16 p = blockpos + v3s16(0,-1,0);
- addUpdateMeshTask(p, false, urgent);
- }
- catch(InvalidPositionException &e){}
- }
-
- if(nodepos.Z == blockpos_relative.Z){
- try{
- v3s16 p = blockpos + v3s16(0,0,-1);
- addUpdateMeshTask(p, false, urgent);
- }
- catch(InvalidPositionException &e){}
- }
+ if (nodepos.X == blockpos_relative.X)
+ addUpdateMeshTask(blockpos + v3s16(-1, 0, 0), false, urgent);
+ if (nodepos.Y == blockpos_relative.Y)
+ addUpdateMeshTask(blockpos + v3s16(0, -1, 0), false, urgent);
+ if (nodepos.Z == blockpos_relative.Z)
+ addUpdateMeshTask(blockpos + v3s16(0, 0, -1), false, urgent);
}
ClientEvent *Client::getClientEvent()
@@ -1659,15 +1691,15 @@ float Client::mediaReceiveProgress()
return 1.0; // downloader only exists when not yet done
}
-typedef struct TextureUpdateArgs {
+struct TextureUpdateArgs {
gui::IGUIEnvironment *guienv;
u64 last_time_ms;
u16 last_percent;
const wchar_t* text_base;
ITextureSource *tsrc;
-} TextureUpdateArgs;
+};
-void texture_update_progress(void *args, u32 progress, u32 max_progress)
+void Client::showUpdateProgressTexture(void *args, u32 progress, u32 max_progress)
{
TextureUpdateArgs* targs = (TextureUpdateArgs*) args;
u16 cur_percent = ceil(progress / (double) max_progress * 100.);
@@ -1684,9 +1716,9 @@ void texture_update_progress(void *args, u32 progress, u32 max_progress)
if (do_draw) {
targs->last_time_ms = time_ms;
- std::basic_stringstream<wchar_t> strm;
- strm << targs->text_base << " " << targs->last_percent << "%...";
- RenderingEngine::draw_load_screen(strm.str(), targs->guienv, targs->tsrc, 0,
+ std::wostringstream strm;
+ strm << targs->text_base << L" " << targs->last_percent << L"%...";
+ m_rendering_engine->draw_load_screen(strm.str(), targs->guienv, targs->tsrc, 0,
72 + (u16) ((18. / 100.) * (double) targs->last_percent), true);
}
}
@@ -1707,21 +1739,21 @@ void Client::afterContentReceived()
// Rebuild inherited images and recreate textures
infostream<<"- Rebuilding images and textures"<<std::endl;
- RenderingEngine::draw_load_screen(text, guienv, m_tsrc, 0, 70);
+ m_rendering_engine->draw_load_screen(text, guienv, m_tsrc, 0, 70);
m_tsrc->rebuildImagesAndTextures();
delete[] text;
// Rebuild shaders
infostream<<"- Rebuilding shaders"<<std::endl;
text = wgettext("Rebuilding shaders...");
- RenderingEngine::draw_load_screen(text, guienv, m_tsrc, 0, 71);
+ m_rendering_engine->draw_load_screen(text, guienv, m_tsrc, 0, 71);
m_shsrc->rebuildShaders();
delete[] text;
// Update node aliases
infostream<<"- Updating node aliases"<<std::endl;
text = wgettext("Initializing nodes...");
- RenderingEngine::draw_load_screen(text, guienv, m_tsrc, 0, 72);
+ m_rendering_engine->draw_load_screen(text, guienv, m_tsrc, 0, 72);
m_nodedef->updateAliases(m_itemdef);
for (const auto &path : getTextureDirs()) {
TextureOverrideSource override_source(path + DIR_DELIM + "override.txt");
@@ -1738,9 +1770,9 @@ void Client::afterContentReceived()
tu_args.guienv = guienv;
tu_args.last_time_ms = porting::getTimeMs();
tu_args.last_percent = 0;
- tu_args.text_base = wgettext("Initializing nodes");
+ tu_args.text_base = wgettext("Initializing nodes");
tu_args.tsrc = m_tsrc;
- m_nodedef->updateTextures(this, texture_update_progress, &tu_args);
+ m_nodedef->updateTextures(this, &tu_args);
delete[] tu_args.text_base;
// Start mesh update thread after setting up content definitions
@@ -1754,7 +1786,7 @@ void Client::afterContentReceived()
m_script->on_client_ready(m_env.getLocalPlayer());
text = wgettext("Done!");
- RenderingEngine::draw_load_screen(text, guienv, m_tsrc, 0, 100);
+ m_rendering_engine->draw_load_screen(text, guienv, m_tsrc, 0, 100);
infostream<<"Client::afterContentReceived() done"<<std::endl;
delete[] text;
}
@@ -1772,7 +1804,7 @@ float Client::getCurRate()
void Client::makeScreenshot()
{
- irr::video::IVideoDriver *driver = RenderingEngine::get_video_driver();
+ irr::video::IVideoDriver *driver = m_rendering_engine->get_video_driver();
irr::video::IImage* const raw_image = driver->createScreenShot();
if (!raw_image)
@@ -1914,16 +1946,17 @@ scene::IAnimatedMesh* Client::getMesh(const std::string &filename, bool cache)
// Create the mesh, remove it from cache and return it
// This allows unique vertex colors and other properties for each instance
- Buffer<char> data_rw(data.c_str(), data.size()); // Const-incorrect Irrlicht
- io::IReadFile *rfile = RenderingEngine::get_filesystem()->createMemoryReadFile(
- *data_rw, data_rw.getSize(), filename.c_str());
+ io::IReadFile *rfile = m_rendering_engine->get_filesystem()->createMemoryReadFile(
+ data.c_str(), data.size(), filename.c_str());
FATAL_ERROR_IF(!rfile, "Could not create/open RAM file");
- scene::IAnimatedMesh *mesh = RenderingEngine::get_scene_manager()->getMesh(rfile);
+ scene::IAnimatedMesh *mesh = m_rendering_engine->get_scene_manager()->getMesh(rfile);
rfile->drop();
+ if (!mesh)
+ return nullptr;
mesh->grab();
if (!cache)
- RenderingEngine::get_mesh_cache()->removeMesh(mesh);
+ m_rendering_engine->removeMesh(mesh);
return mesh;
}
@@ -1960,16 +1993,8 @@ void Client::unregisterModStorage(const std::string &name)
{
std::unordered_map<std::string, ModMetadata *>::const_iterator it =
m_mod_storages.find(name);
- if (it != m_mod_storages.end()) {
- // Save unconditionaly on unregistration
- it->second->save(getModStoragePath());
+ if (it != m_mod_storages.end())
m_mod_storages.erase(name);
- }
-}
-
-std::string Client::getModStoragePath() const
-{
- return porting::path_user + DIR_DELIM + "client" + DIR_DELIM + "mod_storage";
}
/*
diff --git a/src/client/client.h b/src/client/client.h
index 2dba1506e..84c85471d 100644
--- a/src/client/client.h
+++ b/src/client/client.h
@@ -45,6 +45,7 @@ struct ClientEvent;
struct MeshMakeData;
struct ChatMessage;
class MapBlockMesh;
+class RenderingEngine;
class IWritableTextureSource;
class IWritableShaderSource;
class IWritableItemDefManager;
@@ -52,6 +53,7 @@ class ISoundManager;
class NodeDefManager;
//class IWritableCraftDefManager;
class ClientMediaDownloader;
+class SingleMediaDownloader;
struct MapDrawControl;
class ModChannelMgr;
class MtEventManager;
@@ -123,6 +125,7 @@ public:
NodeDefManager *nodedef,
ISoundManager *sound,
MtEventManager *event,
+ RenderingEngine *rendering_engine,
bool ipv6,
GameUI *game_ui
);
@@ -243,6 +246,7 @@ public:
void sendDamage(u16 damage);
void sendRespawn();
void sendReady();
+ void sendHaveMedia(const std::vector<u32> &tokens);
ClientEnvironment& getEnv() { return m_env; }
ITextureSource *tsrc() { return getTextureSource(); }
@@ -321,18 +325,22 @@ public:
m_access_denied = true;
m_access_denied_reason = reason;
}
+ inline void setFatalError(const LuaError &e)
+ {
+ setFatalError(std::string("Lua: ") + e.what());
+ }
// Renaming accessDeniedReason to better name could be good as it's used to
// disconnect client when CSM failed.
const std::string &accessDeniedReason() const { return m_access_denied_reason; }
- const bool itemdefReceived() const
+ bool itemdefReceived() const
{ return m_itemdef_received; }
- const bool nodedefReceived() const
+ bool nodedefReceived() const
{ return m_nodedef_received; }
- const bool mediaReceived() const
+ bool mediaReceived() const
{ return !m_media_downloader; }
- const bool activeObjectsReceived() const
+ bool activeObjectsReceived() const
{ return m_activeobjects_received; }
u16 getProtoVersion()
@@ -345,6 +353,7 @@ public:
float mediaReceiveProgress();
void afterContentReceived();
+ void showUpdateProgressTexture(void *args, u32 progress, u32 max_progress);
float getRTT();
float getCurRate();
@@ -353,6 +362,7 @@ public:
void setCamera(Camera* camera) { m_camera = camera; }
Camera* getCamera () { return m_camera; }
+ scene::ISceneManager *getSceneManager();
bool shouldShowMinimap() const;
@@ -370,15 +380,19 @@ public:
{ return checkPrivilege(priv); }
virtual scene::IAnimatedMesh* getMesh(const std::string &filename, bool cache = false);
const std::string* getModFile(std::string filename);
+ ModMetadataDatabase *getModStorageDatabase() override { return m_mod_storage_database; }
- std::string getModStoragePath() const override;
bool registerModStorage(ModMetadata *meta) override;
void unregisterModStorage(const std::string &name) override;
+ // Migrates away old files-based mod storage if necessary
+ void migrateModStorage();
+
// The following set of functions is used by ClientMediaDownloader
// Insert a media file appropriately into the appropriate manager
bool loadMedia(const std::string &data, const std::string &filename,
bool from_media_push = false);
+
// Send a request for conventional media transfer
void request_media(const std::vector<std::string> &file_requests);
@@ -469,6 +483,7 @@ private:
NodeDefManager *m_nodedef;
ISoundManager *m_sound;
MtEventManager *m_event;
+ RenderingEngine *m_rendering_engine;
MeshUpdateThread m_mesh_update_thread;
@@ -530,9 +545,13 @@ private:
bool m_activeobjects_received = false;
bool m_mods_loaded = false;
+ std::vector<std::string> m_remote_media_servers;
+ // Media downloader, only exists during init
ClientMediaDownloader *m_media_downloader;
// Set of media filenames pushed by server at runtime
std::unordered_set<std::string> m_media_pushed_files;
+ // Pending downloads of dynamic media (key: token)
+ std::vector<std::pair<u32, std::shared_ptr<SingleMediaDownloader>>> m_pending_media_downloads;
// time_of_day speed approximation for old protocol
bool m_time_of_day_set = false;
@@ -574,6 +593,7 @@ private:
// Client modding
ClientScripting *m_script = nullptr;
std::unordered_map<std::string, ModMetadata *> m_mod_storages;
+ ModMetadataDatabase *m_mod_storage_database = nullptr;
float m_mod_storage_save_timer = 10.0f;
std::vector<ModSpec> m_mods;
StringMap m_mod_vfs;
diff --git a/src/client/clientenvironment.cpp b/src/client/clientenvironment.cpp
index fc7cbe254..448af36c6 100644
--- a/src/client/clientenvironment.cpp
+++ b/src/client/clientenvironment.cpp
@@ -194,32 +194,41 @@ void ClientEnvironment::step(float dtime)
lplayer->applyControl(dtime_part, this);
// Apply physics
- if (!free_move && !is_climbing) {
+ if (!free_move) {
// Gravity
v3f speed = lplayer->getSpeed();
- if (!lplayer->in_liquid)
+ if (!is_climbing && !lplayer->in_liquid)
speed.Y -= lplayer->movement_gravity *
lplayer->physics_override_gravity * dtime_part * 2.0f;
// Liquid floating / sinking
- if (lplayer->in_liquid && !lplayer->swimming_vertical &&
+ if (!is_climbing && lplayer->in_liquid &&
+ !lplayer->swimming_vertical &&
!lplayer->swimming_pitch)
speed.Y -= lplayer->movement_liquid_sink * dtime_part * 2.0f;
- // Liquid resistance
- if (lplayer->in_liquid_stable || lplayer->in_liquid) {
- // How much the node's viscosity blocks movement, ranges
- // between 0 and 1. Should match the scale at which viscosity
+ // Movement resistance
+ if (lplayer->move_resistance > 0) {
+ // How much the node's move_resistance blocks movement, ranges
+ // between 0 and 1. Should match the scale at which liquid_viscosity
// increase affects other liquid attributes.
- static const f32 viscosity_factor = 0.3f;
-
- v3f d_wanted = -speed / lplayer->movement_liquid_fluidity;
+ static const f32 resistance_factor = 0.3f;
+
+ v3f d_wanted;
+ bool in_liquid_stable = lplayer->in_liquid_stable || lplayer->in_liquid;
+ if (in_liquid_stable) {
+ d_wanted = -speed / lplayer->movement_liquid_fluidity;
+ } else {
+ d_wanted = -speed / BS;
+ }
f32 dl = d_wanted.getLength();
- if (dl > lplayer->movement_liquid_fluidity_smooth)
- dl = lplayer->movement_liquid_fluidity_smooth;
+ if (in_liquid_stable) {
+ if (dl > lplayer->movement_liquid_fluidity_smooth)
+ dl = lplayer->movement_liquid_fluidity_smooth;
+ }
- dl *= (lplayer->liquid_viscosity * viscosity_factor) +
- (1 - viscosity_factor);
+ dl *= (lplayer->move_resistance * resistance_factor) +
+ (1 - resistance_factor);
v3f d = d_wanted.normalize() * (dl * dtime_part * 100.0f);
speed += d;
}
@@ -235,7 +244,16 @@ void ClientEnvironment::step(float dtime)
&player_collisions);
}
- bool player_immortal = lplayer->getCAO() && lplayer->getCAO()->isImmortal();
+ bool player_immortal = false;
+ f32 player_fall_factor = 1.0f;
+ GenericCAO *playercao = lplayer->getCAO();
+ if (playercao) {
+ player_immortal = playercao->isImmortal();
+ int addp_p = itemgroup_get(playercao->getGroups(),
+ "fall_damage_add_percent");
+ // convert armor group into an usable fall damage factor
+ player_fall_factor = 1.0f + (float)addp_p / 100.0f;
+ }
for (const CollisionInfo &info : player_collisions) {
v3f speed_diff = info.new_speed - info.old_speed;;
@@ -248,17 +266,20 @@ void ClientEnvironment::step(float dtime)
speed_diff.Z = 0;
f32 pre_factor = 1; // 1 hp per node/s
f32 tolerance = BS*14; // 5 without damage
- f32 post_factor = 1; // 1 hp per node/s
if (info.type == COLLISION_NODE) {
const ContentFeatures &f = m_client->ndef()->
get(m_map->getNode(info.node_p));
- // Determine fall damage multiplier
- int addp = itemgroup_get(f.groups, "fall_damage_add_percent");
- pre_factor = 1.0f + (float)addp / 100.0f;
+ // Determine fall damage modifier
+ int addp_n = itemgroup_get(f.groups, "fall_damage_add_percent");
+ // convert node group to an usable fall damage factor
+ f32 node_fall_factor = 1.0f + (float)addp_n / 100.0f;
+ // combine both player fall damage modifiers
+ pre_factor = node_fall_factor * player_fall_factor;
}
float speed = pre_factor * speed_diff.getLength();
- if (speed > tolerance && !player_immortal) {
- f32 damage_f = (speed - tolerance) / BS * post_factor;
+
+ if (speed > tolerance && !player_immortal && pre_factor > 0.0f) {
+ f32 damage_f = (speed - tolerance) / BS;
u16 damage = (u16)MYMIN(damage_f + 0.5, U16_MAX);
if (damage != 0) {
damageLocalPlayer(damage, true);
@@ -340,7 +361,7 @@ u16 ClientEnvironment::addActiveObject(ClientActiveObject *object)
if (!m_ao_manager.registerObject(object))
return 0;
- object->addToScene(m_texturesource);
+ object->addToScene(m_texturesource, m_client->getSceneManager());
// Update lighting immediately
object->updateLight(getDayNightRatio());
diff --git a/src/client/clientevent.h b/src/client/clientevent.h
index 9bd31efce..17d3aedd6 100644
--- a/src/client/clientevent.h
+++ b/src/client/clientevent.h
@@ -52,6 +52,31 @@ enum ClientEventType : u8
CLIENTEVENT_MAX,
};
+struct ClientEventHudAdd
+{
+ u32 server_id;
+ u8 type;
+ v2f pos, scale;
+ std::string name;
+ std::string text, text2;
+ u32 number, item, dir, style;
+ v2f align, offset;
+ v3f world_pos;
+ v2s32 size;
+ s16 z_index;
+};
+
+struct ClientEventHudChange
+{
+ u32 id;
+ HudElementStat stat;
+ v2f v2fdata;
+ std::string sdata;
+ u32 data;
+ v3f v3fdata;
+ v2s32 v2s32data;
+};
+
struct ClientEvent
{
ClientEventType type;
@@ -93,38 +118,12 @@ struct ClientEvent
{
u32 id;
} delete_particlespawner;
- struct
- {
- u32 server_id;
- u8 type;
- v2f *pos;
- std::string *name;
- v2f *scale;
- std::string *text;
- u32 number;
- u32 item;
- u32 dir;
- v2f *align;
- v2f *offset;
- v3f *world_pos;
- v2s32 *size;
- s16 z_index;
- std::string *text2;
- } hudadd;
+ ClientEventHudAdd *hudadd;
struct
{
u32 id;
} hudrm;
- struct
- {
- u32 id;
- HudElementStat stat;
- v2f *v2fdata;
- std::string *sdata;
- u32 data;
- v3f *v3fdata;
- v2s32 *v2s32data;
- } hudchange;
+ ClientEventHudChange *hudchange;
SkyboxParams *set_sky;
struct
{
diff --git a/src/client/clientlauncher.cpp b/src/client/clientlauncher.cpp
index 2bb0bc385..063154316 100644
--- a/src/client/clientlauncher.cpp
+++ b/src/client/clientlauncher.cpp
@@ -38,9 +38,6 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#if USE_SOUND
#include "sound_openal.h"
#endif
-#ifdef __ANDROID__
- #include "porting.h"
-#endif
/* mainmenumanager.h
*/
@@ -73,14 +70,14 @@ static void dump_start_data(const GameStartData &data)
ClientLauncher::~ClientLauncher()
{
- delete receiver;
-
delete input;
+ delete receiver;
+
delete g_fontengine;
delete g_gamecallback;
- delete RenderingEngine::get_instance();
+ delete m_rendering_engine;
#if USE_SOUND
g_sound_manager_singleton.reset();
@@ -99,10 +96,6 @@ bool ClientLauncher::run(GameStartData &start_data, const Settings &cmd_args)
init_args(start_data, cmd_args);
- // List video modes if requested
- if (list_video_modes)
- return RenderingEngine::print_video_modes();
-
#if USE_SOUND
if (g_settings->getBool("enable_sound"))
g_sound_manager_singleton = createSoundManagerSingleton();
@@ -120,12 +113,12 @@ bool ClientLauncher::run(GameStartData &start_data, const Settings &cmd_args)
return true;
}
- if (RenderingEngine::get_video_driver() == NULL) {
+ if (m_rendering_engine->get_video_driver() == NULL) {
errorstream << "Could not initialize video driver." << std::endl;
return false;
}
- RenderingEngine::get_instance()->setupTopLevelWindow(PROJECT_NAME_C);
+ m_rendering_engine->setupTopLevelWindow(PROJECT_NAME_C);
/*
This changes the minimum allowed number of vertices in a VBO.
@@ -136,23 +129,23 @@ bool ClientLauncher::run(GameStartData &start_data, const Settings &cmd_args)
// Create game callback for menus
g_gamecallback = new MainGameCallback();
- RenderingEngine::get_instance()->setResizable(true);
+ m_rendering_engine->setResizable(true);
init_input();
- RenderingEngine::get_scene_manager()->getParameters()->
+ m_rendering_engine->get_scene_manager()->getParameters()->
setAttribute(scene::ALLOW_ZWRITE_ON_TRANSPARENT, true);
- guienv = RenderingEngine::get_gui_env();
- skin = RenderingEngine::get_gui_env()->getSkin();
+ guienv = m_rendering_engine->get_gui_env();
+ skin = guienv->getSkin();
skin->setColor(gui::EGDC_BUTTON_TEXT, video::SColor(255, 255, 255, 255));
skin->setColor(gui::EGDC_3D_LIGHT, video::SColor(0, 0, 0, 0));
skin->setColor(gui::EGDC_3D_HIGH_LIGHT, video::SColor(255, 30, 30, 30));
skin->setColor(gui::EGDC_3D_SHADOW, video::SColor(255, 0, 0, 0));
skin->setColor(gui::EGDC_HIGH_LIGHT, video::SColor(255, 70, 120, 50));
skin->setColor(gui::EGDC_HIGH_LIGHT_TEXT, video::SColor(255, 255, 255, 255));
-#ifdef __ANDROID__
- float density = porting::getDisplayDensity();
+#ifdef HAVE_TOUCHSCREENGUI
+ float density = RenderingEngine::getDisplayDensity();
skin->setSize(gui::EGDS_CHECK_BOX_WIDTH, (s32)(17.0f * density));
skin->setSize(gui::EGDS_SCROLLBAR_SIZE, (s32)(14.0f * density));
skin->setSize(gui::EGDS_WINDOW_BUTTON_WIDTH, (s32)(15.0f * density));
@@ -166,7 +159,7 @@ bool ClientLauncher::run(GameStartData &start_data, const Settings &cmd_args)
sprite_path.append("checkbox_16.png");
// Texture dimensions should be a power of 2
gui::IGUISpriteBank *sprites = skin->getSpriteBank();
- video::IVideoDriver *driver = RenderingEngine::get_video_driver();
+ video::IVideoDriver *driver = m_rendering_engine->get_video_driver();
video::ITexture *sprite_texture = driver->getTexture(sprite_path.c_str());
if (sprite_texture) {
s32 sprite_id = sprites->addTextureAsSprite(sprite_texture);
@@ -178,15 +171,13 @@ bool ClientLauncher::run(GameStartData &start_data, const Settings &cmd_args)
g_fontengine = new FontEngine(guienv);
FATAL_ERROR_IF(g_fontengine == NULL, "Font engine creation failed.");
-#if (IRRLICHT_VERSION_MAJOR >= 1 && IRRLICHT_VERSION_MINOR >= 8) || IRRLICHT_VERSION_MAJOR >= 2
// Irrlicht 1.8 input colours
skin->setColor(gui::EGDC_EDITABLE, video::SColor(255, 128, 128, 128));
skin->setColor(gui::EGDC_FOCUSED_EDITABLE, video::SColor(255, 96, 134, 49));
-#endif
// Create the menu clouds
if (!g_menucloudsmgr)
- g_menucloudsmgr = RenderingEngine::get_scene_manager()->createNewSceneManager();
+ g_menucloudsmgr = m_rendering_engine->get_scene_manager()->createNewSceneManager();
if (!g_menuclouds)
g_menuclouds = new Clouds(g_menucloudsmgr, -1, rand());
g_menuclouds->setHeight(100.0f);
@@ -214,11 +205,11 @@ bool ClientLauncher::run(GameStartData &start_data, const Settings &cmd_args)
bool retval = true;
bool *kill = porting::signal_handler_killstatus();
- while (RenderingEngine::run() && !*kill &&
+ while (m_rendering_engine->run() && !*kill &&
!g_gamecallback->shutdown_requested) {
// Set the window caption
const wchar_t *text = wgettext("Main Menu");
- RenderingEngine::get_raw_device()->
+ m_rendering_engine->get_raw_device()->
setWindowCaption((utf8_to_wide(PROJECT_NAME_C) +
L" " + utf8_to_wide(g_version_hash) +
L" [" + text + L"]").c_str());
@@ -226,14 +217,14 @@ bool ClientLauncher::run(GameStartData &start_data, const Settings &cmd_args)
try { // This is used for catching disconnects
- RenderingEngine::get_gui_env()->clear();
+ m_rendering_engine->get_gui_env()->clear();
/*
We need some kind of a root node to be able to add
custom gui elements directly on the screen.
Otherwise they won't be automatically drawn.
*/
- guiroot = RenderingEngine::get_gui_env()->addStaticText(L"",
+ guiroot = m_rendering_engine->get_gui_env()->addStaticText(L"",
core::rect<s32>(0, 0, 10000, 10000));
bool game_has_run = launch_game(error_message, reconnect_requested,
@@ -256,36 +247,29 @@ bool ClientLauncher::run(GameStartData &start_data, const Settings &cmd_args)
}
// Break out of menu-game loop to shut down cleanly
- if (!RenderingEngine::get_raw_device()->run() || *kill) {
+ if (!m_rendering_engine->run() || *kill) {
if (!g_settings_path.empty())
g_settings->updateConfigFile(g_settings_path.c_str());
break;
}
- RenderingEngine::get_video_driver()->setTextureCreationFlag(
+ m_rendering_engine->get_video_driver()->setTextureCreationFlag(
video::ETCF_CREATE_MIP_MAPS, g_settings->getBool("mip_map"));
#ifdef HAVE_TOUCHSCREENGUI
- receiver->m_touchscreengui = new TouchScreenGUI(RenderingEngine::get_raw_device(), receiver);
+ receiver->m_touchscreengui = new TouchScreenGUI(m_rendering_engine->get_raw_device(), receiver);
g_touchscreengui = receiver->m_touchscreengui;
#endif
the_game(
kill,
input,
+ m_rendering_engine,
start_data,
error_message,
chat_backend,
&reconnect_requested
);
- RenderingEngine::get_scene_manager()->clear();
-
-#ifdef HAVE_TOUCHSCREENGUI
- delete g_touchscreengui;
- g_touchscreengui = NULL;
- receiver->m_touchscreengui = NULL;
-#endif
-
} //try
catch (con::PeerNotFoundException &e) {
error_message = gettext("Connection error (timed out?)");
@@ -301,6 +285,14 @@ bool ClientLauncher::run(GameStartData &start_data, const Settings &cmd_args)
}
#endif
+ m_rendering_engine->get_scene_manager()->clear();
+
+#ifdef HAVE_TOUCHSCREENGUI
+ delete g_touchscreengui;
+ g_touchscreengui = NULL;
+ receiver->m_touchscreengui = NULL;
+#endif
+
// If no main menu, show error and exit
if (skip_main_menu) {
if (!error_message.empty()) {
@@ -337,8 +329,6 @@ void ClientLauncher::init_args(GameStartData &start_data, const Settings &cmd_ar
if (cmd_args.exists("name"))
start_data.name = cmd_args.get("name");
- list_video_modes = cmd_args.getFlag("videomodes");
-
random_input = g_settings->getBool("random_input")
|| cmd_args.getFlag("random-input");
}
@@ -346,8 +336,8 @@ void ClientLauncher::init_args(GameStartData &start_data, const Settings &cmd_ar
bool ClientLauncher::init_engine()
{
receiver = new MyEventReceiver();
- new RenderingEngine(receiver);
- return RenderingEngine::get_raw_device() != nullptr;
+ m_rendering_engine = new RenderingEngine(receiver);
+ return m_rendering_engine->get_raw_device() != nullptr;
}
void ClientLauncher::init_input()
@@ -364,7 +354,7 @@ void ClientLauncher::init_input()
// Make sure this is called maximum once per
// irrlicht device, otherwise it will give you
// multiple events for the same joystick.
- if (RenderingEngine::get_raw_device()->activateJoysticks(infos)) {
+ if (m_rendering_engine->get_raw_device()->activateJoysticks(infos)) {
infostream << "Joystick support enabled" << std::endl;
joystick_infos.reserve(infos.size());
for (u32 i = 0; i < infos.size(); i++) {
@@ -471,7 +461,7 @@ bool ClientLauncher::launch_game(std::string &error_message,
start_data.address.empty() && !start_data.name.empty();
}
- if (!RenderingEngine::run())
+ if (!m_rendering_engine->run())
return false;
if (!start_data.isSinglePlayer() && start_data.name.empty()) {
@@ -519,8 +509,8 @@ bool ClientLauncher::launch_game(std::string &error_message,
// Load gamespec for required game
start_data.game_spec = findWorldSubgame(worldspec.path);
if (!start_data.game_spec.isValid()) {
- error_message = gettext("Could not find or load game \"")
- + worldspec.gameid + "\"";
+ error_message = gettext("Could not find or load game: ")
+ + worldspec.gameid;
errorstream << error_message << std::endl;
return false;
}
@@ -543,14 +533,14 @@ bool ClientLauncher::launch_game(std::string &error_message,
void ClientLauncher::main_menu(MainMenuData *menudata)
{
bool *kill = porting::signal_handler_killstatus();
- video::IVideoDriver *driver = RenderingEngine::get_video_driver();
+ video::IVideoDriver *driver = m_rendering_engine->get_video_driver();
infostream << "Waiting for other menus" << std::endl;
- while (RenderingEngine::get_raw_device()->run() && !*kill) {
+ while (m_rendering_engine->run() && !*kill) {
if (!isMenuActive())
break;
driver->beginScene(true, true, video::SColor(255, 128, 128, 128));
- RenderingEngine::get_gui_env()->drawAll();
+ m_rendering_engine->get_gui_env()->drawAll();
driver->endScene();
// On some computers framerate doesn't seem to be automatically limited
sleep_ms(25);
@@ -559,14 +549,14 @@ void ClientLauncher::main_menu(MainMenuData *menudata)
// Cursor can be non-visible when coming from the game
#ifndef ANDROID
- RenderingEngine::get_raw_device()->getCursorControl()->setVisible(true);
+ m_rendering_engine->get_raw_device()->getCursorControl()->setVisible(true);
#endif
/* show main menu */
- GUIEngine mymenu(&input->joystick, guiroot, &g_menumgr, menudata, *kill);
+ GUIEngine mymenu(&input->joystick, guiroot, m_rendering_engine, &g_menumgr, menudata, *kill);
/* leave scene manager in a clean state */
- RenderingEngine::get_scene_manager()->clear();
+ m_rendering_engine->get_scene_manager()->clear();
}
void ClientLauncher::speed_tests()
diff --git a/src/client/clientlauncher.h b/src/client/clientlauncher.h
index b280d8e6b..d1fd9a258 100644
--- a/src/client/clientlauncher.h
+++ b/src/client/clientlauncher.h
@@ -46,9 +46,9 @@ private:
void speed_tests();
- bool list_video_modes = false;
bool skip_main_menu = false;
bool random_input = false;
+ RenderingEngine *m_rendering_engine = nullptr;
InputHandler *input = nullptr;
MyEventReceiver *receiver = nullptr;
gui::IGUISkin *skin = nullptr;
diff --git a/src/client/clientmap.cpp b/src/client/clientmap.cpp
index 8e02fea63..1a024e464 100644
--- a/src/client/clientmap.cpp
+++ b/src/client/clientmap.cpp
@@ -64,15 +64,24 @@ void MeshBufListList::add(scene::IMeshBuffer *buf, v3s16 position, u8 layer)
ClientMap::ClientMap(
Client *client,
+ RenderingEngine *rendering_engine,
MapDrawControl &control,
s32 id
):
Map(client),
- scene::ISceneNode(RenderingEngine::get_scene_manager()->getRootSceneNode(),
- RenderingEngine::get_scene_manager(), id),
+ scene::ISceneNode(rendering_engine->get_scene_manager()->getRootSceneNode(),
+ rendering_engine->get_scene_manager(), id),
m_client(client),
- m_control(control)
+ m_rendering_engine(rendering_engine),
+ m_control(control),
+ m_drawlist(MapBlockComparer(v3s16(0,0,0)))
{
+
+ /*
+ * @Liso: Sadly C++ doesn't have introspection, so the only way we have to know
+ * the class is whith a name ;) Name property cames from ISceneNode base class.
+ */
+ Name = "ClientMap";
m_box = aabb3f(-BS*1000000,-BS*1000000,-BS*1000000,
BS*1000000,BS*1000000,BS*1000000);
@@ -114,12 +123,21 @@ void ClientMap::OnRegisterSceneNode()
}
ISceneNode::OnRegisterSceneNode();
+
+ if (!m_added_to_shadow_renderer) {
+ m_added_to_shadow_renderer = true;
+ if (auto shadows = m_rendering_engine->get_shadow_renderer())
+ shadows->addNodeToShadowList(this);
+ }
}
void ClientMap::getBlocksInViewRange(v3s16 cam_pos_nodes,
- v3s16 *p_blocks_min, v3s16 *p_blocks_max)
+ v3s16 *p_blocks_min, v3s16 *p_blocks_max, float range)
{
- v3s16 box_nodes_d = m_control.wanted_range * v3s16(1, 1, 1);
+ if (range <= 0.0f)
+ range = m_control.wanted_range;
+
+ v3s16 box_nodes_d = range * v3s16(1, 1, 1);
// Define p_nodes_min/max as v3s32 because 'cam_pos_nodes -/+ box_nodes_d'
// can exceed the range of v3s16 when a large view range is used near the
// world edges.
@@ -147,6 +165,8 @@ void ClientMap::updateDrawList()
{
ScopeProfiler sp(g_profiler, "CM::updateDrawList()", SPT_AVG);
+ m_needs_update_drawlist = false;
+
for (auto &i : m_drawlist) {
MapBlock *block = i.second;
block->refDrop();
@@ -161,10 +181,14 @@ void ClientMap::updateDrawList()
const f32 camera_fov = m_camera_fov * 1.1f;
v3s16 cam_pos_nodes = floatToInt(camera_position, BS);
+
v3s16 p_blocks_min;
v3s16 p_blocks_max;
getBlocksInViewRange(cam_pos_nodes, &p_blocks_min, &p_blocks_max);
+ // Read the vision range, unless unlimited range is enabled.
+ float range = m_control.range_all ? 1e7 : m_control.wanted_range;
+
// Number of blocks currently loaded by the client
u32 blocks_loaded = 0;
// Number of blocks with mesh in rendering range
@@ -182,6 +206,9 @@ void ClientMap::updateDrawList()
occlusion_culling_enabled = false;
}
+ v3s16 camera_block = getContainerPos(cam_pos_nodes, MAP_BLOCKSIZE);
+ m_drawlist = std::map<v3s16, MapBlock*, MapBlockComparer>(MapBlockComparer(camera_block));
+
// Uncomment to debug occluded blocks in the wireframe mode
// TODO: Include this as a flag for an extended debugging setting
//if (occlusion_culling_enabled && m_control.show_wireframe)
@@ -218,32 +245,34 @@ void ClientMap::updateDrawList()
continue;
}
- float range = 100000 * BS;
- if (!m_control.range_all)
- range = m_control.wanted_range * BS;
+ v3s16 block_coord = block->getPos();
+ v3s16 block_position = block->getPosRelative() + MAP_BLOCKSIZE / 2;
- float d = 0.0;
- if (!isBlockInSight(block->getPos(), camera_position,
- camera_direction, camera_fov, range, &d))
- continue;
+ // First, perform a simple distance check, with a padding of one extra block.
+ if (!m_control.range_all &&
+ block_position.getDistanceFrom(cam_pos_nodes) > range + MAP_BLOCKSIZE)
+ continue; // Out of range, skip.
+ // Keep the block alive as long as it is in range.
+ block->resetUsageTimer();
blocks_in_range_with_mesh++;
- /*
- Occlusion culling
- */
+ // Frustum culling
+ float d = 0.0;
+ if (!isBlockInSight(block_coord, camera_position,
+ camera_direction, camera_fov, range * BS, &d))
+ continue;
+
+ // Occlusion culling
if ((!m_control.range_all && d > m_control.wanted_range * BS) ||
(occlusion_culling_enabled && isBlockOccluded(block, cam_pos_nodes))) {
blocks_occlusion_culled++;
continue;
}
- // This block is in range. Reset usage timer.
- block->resetUsageTimer();
-
// Add to set
block->refGrab();
- m_drawlist[block->getPos()] = block;
+ m_drawlist[block_coord] = block;
sector_blocks_drawn++;
} // foreach sectorblocks
@@ -282,8 +311,6 @@ void ClientMap::renderMap(video::IVideoDriver* driver, s32 pass)
const u32 daynight_ratio = m_client->getEnv().getDayNightRatio();
const v3f camera_position = m_camera_position;
- const v3f camera_direction = m_camera_direction;
- const f32 camera_fov = m_camera_fov;
/*
Get all blocks and draw all visible ones
@@ -300,7 +327,20 @@ void ClientMap::renderMap(video::IVideoDriver* driver, s32 pass)
Draw the selected MapBlocks
*/
- MeshBufListList drawbufs;
+ MeshBufListList grouped_buffers;
+
+ struct DrawDescriptor {
+ v3s16 m_pos;
+ scene::IMeshBuffer *m_buffer;
+ bool m_reuse_material;
+
+ DrawDescriptor(const v3s16 &pos, scene::IMeshBuffer *buffer, bool reuse_material) :
+ m_pos(pos), m_buffer(buffer), m_reuse_material(reuse_material)
+ {}
+ };
+
+ std::vector<DrawDescriptor> draw_order;
+ video::SMaterial previous_material;
for (auto &i : m_drawlist) {
v3s16 block_pos = i.first;
@@ -310,14 +350,12 @@ void ClientMap::renderMap(video::IVideoDriver* driver, s32 pass)
if (!block->mesh)
continue;
- float d = 0.0;
- if (!isBlockInSight(block->getPos(), camera_position,
- camera_direction, camera_fov, 100000 * BS, &d))
- continue;
+ v3f block_pos_r = intToFloat(block->getPosRelative() + MAP_BLOCKSIZE / 2, BS);
+ float d = camera_position.getDistanceFrom(block_pos_r);
+ d = MYMAX(0,d - BLOCK_MAX_RADIUS);
// Mesh animation
if (pass == scene::ESNRP_SOLID) {
- //MutexAutoLock lock(block->mesh_mutex);
MapBlockMesh *mapBlockMesh = block->mesh;
assert(mapBlockMesh);
// Pretty random but this should work somewhat nicely
@@ -338,8 +376,6 @@ void ClientMap::renderMap(video::IVideoDriver* driver, s32 pass)
Get the meshbuffers of the block
*/
{
- //MutexAutoLock lock(block->mesh_mutex);
-
MapBlockMesh *mapBlockMesh = block->mesh;
assert(mapBlockMesh);
@@ -369,42 +405,79 @@ void ClientMap::renderMap(video::IVideoDriver* driver, s32 pass)
material.setFlag(video::EMF_WIREFRAME,
m_control.show_wireframe);
- drawbufs.add(buf, block_pos, layer);
+ if (is_transparent_pass) {
+ // Same comparison as in MeshBufListList
+ bool new_material = material.getTexture(0) != previous_material.getTexture(0) ||
+ material != previous_material;
+
+ draw_order.emplace_back(block_pos, buf, !new_material);
+
+ if (new_material)
+ previous_material = material;
+ }
+ else {
+ grouped_buffers.add(buf, block_pos, layer);
+ }
}
}
}
}
}
+ // Capture draw order for all solid meshes
+ for (auto &lists : grouped_buffers.lists) {
+ for (MeshBufList &list : lists) {
+ // iterate in reverse to draw closest blocks first
+ for (auto it = list.bufs.rbegin(); it != list.bufs.rend(); ++it) {
+ draw_order.emplace_back(it->first, it->second, it != list.bufs.rbegin());
+ }
+ }
+ }
+
TimeTaker draw("Drawing mesh buffers");
core::matrix4 m; // Model matrix
v3f offset = intToFloat(m_camera_offset, BS);
+ u32 material_swaps = 0;
- // Render all layers in order
- for (auto &lists : drawbufs.lists) {
- for (MeshBufList &list : lists) {
- // Check and abort if the machine is swapping a lot
- if (draw.getTimerTime() > 2000) {
- infostream << "ClientMap::renderMap(): Rendering took >2s, " <<
- "returning." << std::endl;
- return;
- }
- driver->setMaterial(list.m);
-
- drawcall_count += list.bufs.size();
- for (auto &pair : list.bufs) {
- scene::IMeshBuffer *buf = pair.second;
+ // Render all mesh buffers in order
+ drawcall_count += draw_order.size();
+ for (auto &descriptor : draw_order) {
+ scene::IMeshBuffer *buf = descriptor.m_buffer;
- v3f block_wpos = intToFloat(pair.first * MAP_BLOCKSIZE, BS);
- m.setTranslation(block_wpos - offset);
+ // Check and abort if the machine is swapping a lot
+ if (draw.getTimerTime() > 2000) {
+ infostream << "ClientMap::renderMap(): Rendering took >2s, " <<
+ "returning." << std::endl;
+ return;
+ }
- driver->setTransform(video::ETS_WORLD, m);
- driver->drawMeshBuffer(buf);
- vertex_count += buf->getVertexCount();
+ if (!descriptor.m_reuse_material) {
+ auto &material = buf->getMaterial();
+ // pass the shadow map texture to the buffer texture
+ ShadowRenderer *shadow = m_rendering_engine->get_shadow_renderer();
+ if (shadow && shadow->is_active()) {
+ auto &layer = material.TextureLayer[3];
+ layer.Texture = shadow->get_texture();
+ layer.TextureWrapU = video::E_TEXTURE_CLAMP::ETC_CLAMP_TO_EDGE;
+ layer.TextureWrapV = video::E_TEXTURE_CLAMP::ETC_CLAMP_TO_EDGE;
+ // Do not enable filter on shadow texture to avoid visual artifacts
+ // with colored shadows.
+ // Filtering is done in shader code anyway
+ layer.TrilinearFilter = false;
}
+ driver->setMaterial(material);
+ ++material_swaps;
}
+
+ v3f block_wpos = intToFloat(descriptor.m_pos * MAP_BLOCKSIZE, BS);
+ m.setTranslation(block_wpos - offset);
+
+ driver->setTransform(video::ETS_WORLD, m);
+ driver->drawMeshBuffer(buf);
+ vertex_count += buf->getVertexCount();
}
+
g_profiler->avg(prefix + "draw meshes [ms]", draw.stop(true));
// Log only on solid pass because values are the same
@@ -412,8 +485,13 @@ void ClientMap::renderMap(video::IVideoDriver* driver, s32 pass)
g_profiler->avg("renderMap(): animated meshes [#]", mesh_animate_count);
}
+ if (pass == scene::ESNRP_TRANSPARENT) {
+ g_profiler->avg("renderMap(): transparent buffers [#]", draw_order.size());
+ }
+
g_profiler->avg(prefix + "vertices drawn [#]", vertex_count);
g_profiler->avg(prefix + "drawcalls [#]", drawcall_count);
+ g_profiler->avg(prefix + "material swaps [#]", material_swaps);
}
static bool getVisibleBrightness(Map *map, const v3f &p0, v3f dir, float step,
@@ -606,3 +684,210 @@ void ClientMap::PrintInfo(std::ostream &out)
{
out<<"ClientMap: ";
}
+
+void ClientMap::renderMapShadows(video::IVideoDriver *driver,
+ const video::SMaterial &material, s32 pass, int frame, int total_frames)
+{
+ bool is_transparent_pass = pass != scene::ESNRP_SOLID;
+ std::string prefix;
+ if (is_transparent_pass)
+ prefix = "renderMap(SHADOW TRANS): ";
+ else
+ prefix = "renderMap(SHADOW SOLID): ";
+
+ u32 drawcall_count = 0;
+ u32 vertex_count = 0;
+
+ MeshBufListList drawbufs;
+
+ int count = 0;
+ int low_bound = is_transparent_pass ? 0 : m_drawlist_shadow.size() / total_frames * frame;
+ int high_bound = is_transparent_pass ? m_drawlist_shadow.size() : m_drawlist_shadow.size() / total_frames * (frame + 1);
+
+ // transparent pass should be rendered in one go
+ if (is_transparent_pass && frame != total_frames - 1) {
+ return;
+ }
+
+ for (auto &i : m_drawlist_shadow) {
+ // only process specific part of the list & break early
+ ++count;
+ if (count <= low_bound)
+ continue;
+ if (count > high_bound)
+ break;
+
+ v3s16 block_pos = i.first;
+ MapBlock *block = i.second;
+
+ // If the mesh of the block happened to get deleted, ignore it
+ if (!block->mesh)
+ continue;
+
+ /*
+ Get the meshbuffers of the block
+ */
+ {
+ MapBlockMesh *mapBlockMesh = block->mesh;
+ assert(mapBlockMesh);
+
+ for (int layer = 0; layer < MAX_TILE_LAYERS; layer++) {
+ scene::IMesh *mesh = mapBlockMesh->getMesh(layer);
+ assert(mesh);
+
+ u32 c = mesh->getMeshBufferCount();
+ for (u32 i = 0; i < c; i++) {
+ scene::IMeshBuffer *buf = mesh->getMeshBuffer(i);
+
+ video::SMaterial &mat = buf->getMaterial();
+ auto rnd = driver->getMaterialRenderer(mat.MaterialType);
+ bool transparent = rnd && rnd->isTransparent();
+ if (transparent == is_transparent_pass)
+ drawbufs.add(buf, block_pos, layer);
+ }
+ }
+ }
+ }
+
+ TimeTaker draw("Drawing shadow mesh buffers");
+
+ core::matrix4 m; // Model matrix
+ v3f offset = intToFloat(m_camera_offset, BS);
+
+ // Render all layers in order
+ for (auto &lists : drawbufs.lists) {
+ for (MeshBufList &list : lists) {
+ // Check and abort if the machine is swapping a lot
+ if (draw.getTimerTime() > 1000) {
+ infostream << "ClientMap::renderMapShadows(): Rendering "
+ "took >1s, returning." << std::endl;
+ break;
+ }
+ for (auto &pair : list.bufs) {
+ scene::IMeshBuffer *buf = pair.second;
+
+ // override some material properties
+ video::SMaterial local_material = buf->getMaterial();
+ local_material.MaterialType = material.MaterialType;
+ local_material.BackfaceCulling = material.BackfaceCulling;
+ local_material.FrontfaceCulling = material.FrontfaceCulling;
+ local_material.BlendOperation = material.BlendOperation;
+ local_material.Lighting = false;
+ driver->setMaterial(local_material);
+
+ v3f block_wpos = intToFloat(pair.first * MAP_BLOCKSIZE, BS);
+ m.setTranslation(block_wpos - offset);
+
+ driver->setTransform(video::ETS_WORLD, m);
+ driver->drawMeshBuffer(buf);
+ vertex_count += buf->getVertexCount();
+ }
+
+ drawcall_count += list.bufs.size();
+ }
+ }
+
+ // restore the driver material state
+ video::SMaterial clean;
+ clean.BlendOperation = video::EBO_ADD;
+ driver->setMaterial(clean); // reset material to defaults
+ driver->draw3DLine(v3f(), v3f(), video::SColor(0));
+
+ g_profiler->avg(prefix + "draw meshes [ms]", draw.stop(true));
+ g_profiler->avg(prefix + "vertices drawn [#]", vertex_count);
+ g_profiler->avg(prefix + "drawcalls [#]", drawcall_count);
+}
+
+/*
+ Custom update draw list for the pov of shadow light.
+*/
+void ClientMap::updateDrawListShadow(const v3f &shadow_light_pos, const v3f &shadow_light_dir, float shadow_range)
+{
+ ScopeProfiler sp(g_profiler, "CM::updateDrawListShadow()", SPT_AVG);
+
+ const v3f camera_position = shadow_light_pos;
+ const v3f camera_direction = shadow_light_dir;
+ // I "fake" fov just to avoid creating a new function to handle orthographic
+ // projection.
+ const f32 camera_fov = m_camera_fov * 1.9f;
+
+ v3s16 cam_pos_nodes = floatToInt(camera_position, BS);
+ v3s16 p_blocks_min;
+ v3s16 p_blocks_max;
+ getBlocksInViewRange(cam_pos_nodes, &p_blocks_min, &p_blocks_max, shadow_range);
+
+ std::vector<v2s16> blocks_in_range;
+
+ for (auto &i : m_drawlist_shadow) {
+ MapBlock *block = i.second;
+ block->refDrop();
+ }
+ m_drawlist_shadow.clear();
+
+ // We need to append the blocks from the camera POV because sometimes
+ // they are not inside the light frustum and it creates glitches.
+ // FIXME: This could be removed if we figure out why they are missing
+ // from the light frustum.
+ for (auto &i : m_drawlist) {
+ i.second->refGrab();
+ m_drawlist_shadow[i.first] = i.second;
+ }
+
+ // Number of blocks currently loaded by the client
+ u32 blocks_loaded = 0;
+ // Number of blocks with mesh in rendering range
+ u32 blocks_in_range_with_mesh = 0;
+ // Number of blocks occlusion culled
+ u32 blocks_occlusion_culled = 0;
+
+ for (auto &sector_it : m_sectors) {
+ MapSector *sector = sector_it.second;
+ if (!sector)
+ continue;
+ blocks_loaded += sector->size();
+
+ MapBlockVect sectorblocks;
+ sector->getBlocks(sectorblocks);
+
+ /*
+ Loop through blocks in sector
+ */
+ for (MapBlock *block : sectorblocks) {
+ if (!block->mesh) {
+ // Ignore if mesh doesn't exist
+ continue;
+ }
+
+ float range = shadow_range;
+
+ float d = 0.0;
+ if (!isBlockInSight(block->getPos(), camera_position,
+ camera_direction, camera_fov, range, &d))
+ continue;
+
+ blocks_in_range_with_mesh++;
+
+ /*
+ Occlusion culling
+ */
+ if (isBlockOccluded(block, cam_pos_nodes)) {
+ blocks_occlusion_culled++;
+ continue;
+ }
+
+ // This block is in range. Reset usage timer.
+ block->resetUsageTimer();
+
+ // Add to set
+ if (m_drawlist_shadow.find(block->getPos()) == m_drawlist_shadow.end()) {
+ block->refGrab();
+ m_drawlist_shadow[block->getPos()] = block;
+ }
+ }
+ }
+
+ g_profiler->avg("SHADOW MapBlock meshes in range [#]", blocks_in_range_with_mesh);
+ g_profiler->avg("SHADOW MapBlocks occlusion culled [#]", blocks_occlusion_culled);
+ g_profiler->avg("SHADOW MapBlocks drawn [#]", m_drawlist_shadow.size());
+ g_profiler->avg("SHADOW MapBlocks loaded [#]", blocks_loaded);
+}
diff --git a/src/client/clientmap.h b/src/client/clientmap.h
index 57cc4427e..b4dc42395 100644
--- a/src/client/clientmap.h
+++ b/src/client/clientmap.h
@@ -68,6 +68,7 @@ class ClientMap : public Map, public scene::ISceneNode
public:
ClientMap(
Client *client,
+ RenderingEngine *rendering_engine,
MapDrawControl &control,
s32 id
);
@@ -86,10 +87,18 @@ public:
void updateCamera(const v3f &pos, const v3f &dir, f32 fov, const v3s16 &offset)
{
+ v3s16 previous_block = getContainerPos(floatToInt(m_camera_position, BS) + m_camera_offset, MAP_BLOCKSIZE);
+
m_camera_position = pos;
m_camera_direction = dir;
m_camera_fov = fov;
m_camera_offset = offset;
+
+ v3s16 current_block = getContainerPos(floatToInt(m_camera_position, BS) + m_camera_offset, MAP_BLOCKSIZE);
+
+ // reorder the blocks when camera crosses block boundary
+ if (previous_block != current_block)
+ m_needs_update_drawlist = true;
}
/*
@@ -118,10 +127,16 @@ public:
}
void getBlocksInViewRange(v3s16 cam_pos_nodes,
- v3s16 *p_blocks_min, v3s16 *p_blocks_max);
+ v3s16 *p_blocks_min, v3s16 *p_blocks_max, float range=-1.0f);
void updateDrawList();
+ void updateDrawListShadow(const v3f &shadow_light_pos, const v3f &shadow_light_dir, float shadow_range);
+ // Returns true if draw list needs updating before drawing the next frame.
+ bool needsUpdateDrawList() { return m_needs_update_drawlist; }
void renderMap(video::IVideoDriver* driver, s32 pass);
+ void renderMapShadows(video::IVideoDriver *driver,
+ const video::SMaterial &material, s32 pass, int frame, int total_frames);
+
int getBackgroundBrightness(float max_d, u32 daylight_factor,
int oldvalue, bool *sunlight_seen_result);
@@ -131,9 +146,29 @@ public:
virtual void PrintInfo(std::ostream &out);
const MapDrawControl & getControl() const { return m_control; }
+ f32 getWantedRange() const { return m_control.wanted_range; }
f32 getCameraFov() const { return m_camera_fov; }
+
private:
+ // Orders blocks by distance to the camera
+ class MapBlockComparer
+ {
+ public:
+ MapBlockComparer(const v3s16 &camera_block) : m_camera_block(camera_block) {}
+
+ bool operator() (const v3s16 &left, const v3s16 &right) const
+ {
+ auto distance_left = left.getDistanceFromSQ(m_camera_block);
+ auto distance_right = right.getDistanceFromSQ(m_camera_block);
+ return distance_left > distance_right || (distance_left == distance_right && left > right);
+ }
+
+ private:
+ v3s16 m_camera_block;
+ };
+
Client *m_client;
+ RenderingEngine *m_rendering_engine;
aabb3f m_box = aabb3f(-BS * 1000000, -BS * 1000000, -BS * 1000000,
BS * 1000000, BS * 1000000, BS * 1000000);
@@ -145,11 +180,14 @@ private:
f32 m_camera_fov = M_PI;
v3s16 m_camera_offset;
- std::map<v3s16, MapBlock*> m_drawlist;
+ std::map<v3s16, MapBlock*, MapBlockComparer> m_drawlist;
+ std::map<v3s16, MapBlock*> m_drawlist_shadow;
+ bool m_needs_update_drawlist;
std::set<v2s16> m_last_drawn_sectors;
bool m_cache_trilinear_filter;
bool m_cache_bilinear_filter;
bool m_cache_anistropic_filter;
+ bool m_added_to_shadow_renderer{false};
};
diff --git a/src/client/clientmedia.cpp b/src/client/clientmedia.cpp
index c4c08c05d..6c5d4a8bf 100644
--- a/src/client/clientmedia.cpp
+++ b/src/client/clientmedia.cpp
@@ -49,7 +49,6 @@ bool clientMediaUpdateCache(const std::string &raw_hash, const std::string &file
*/
ClientMediaDownloader::ClientMediaDownloader():
- m_media_cache(getMediaCacheDir()),
m_httpfetch_caller(HTTPFETCH_DISCARD)
{
}
@@ -66,6 +65,12 @@ ClientMediaDownloader::~ClientMediaDownloader()
delete remote;
}
+bool ClientMediaDownloader::loadMedia(Client *client, const std::string &data,
+ const std::string &name)
+{
+ return client->loadMedia(data, name);
+}
+
void ClientMediaDownloader::addFile(const std::string &name, const std::string &sha1)
{
assert(!m_initial_step_done); // pre-condition
@@ -105,7 +110,7 @@ void ClientMediaDownloader::addRemoteServer(const std::string &baseurl)
{
assert(!m_initial_step_done); // pre-condition
- #ifdef USE_CURL
+#ifdef USE_CURL
if (g_settings->getBool("enable_remote_media_server")) {
infostream << "Client: Adding remote server \""
@@ -117,13 +122,13 @@ void ClientMediaDownloader::addRemoteServer(const std::string &baseurl)
m_remotes.push_back(remote);
}
- #else
+#else
infostream << "Client: Ignoring remote server \""
<< baseurl << "\" because cURL support is not compiled in"
<< std::endl;
- #endif
+#endif
}
void ClientMediaDownloader::step(Client *client)
@@ -172,36 +177,21 @@ void ClientMediaDownloader::initialStep(Client *client)
// Check media cache
m_uncached_count = m_files.size();
for (auto &file_it : m_files) {
- std::string name = file_it.first;
+ const std::string &name = file_it.first;
FileStatus *filestatus = file_it.second;
const std::string &sha1 = filestatus->sha1;
- std::ostringstream tmp_os(std::ios_base::binary);
- bool found_in_cache = m_media_cache.load(hex_encode(sha1), tmp_os);
-
- // If found in cache, try to load it from there
- if (found_in_cache) {
- bool success = checkAndLoad(name, sha1,
- tmp_os.str(), true, client);
- if (success) {
- filestatus->received = true;
- m_uncached_count--;
- }
+ if (tryLoadFromCache(name, sha1, client)) {
+ filestatus->received = true;
+ m_uncached_count--;
}
}
assert(m_uncached_received_count == 0);
// Create the media cache dir if we are likely to write to it
- if (m_uncached_count != 0) {
- bool did = fs::CreateAllDirs(getMediaCacheDir());
- if (!did) {
- errorstream << "Client: "
- << "Could not create media cache directory: "
- << getMediaCacheDir()
- << std::endl;
- }
- }
+ if (m_uncached_count != 0)
+ createCacheDirs();
// If we found all files in the cache, report this fact to the server.
// If the server reported no remote servers, immediately start
@@ -216,7 +206,6 @@ void ClientMediaDownloader::initialStep(Client *client)
// This is the first time we use httpfetch, so alloc a caller ID
m_httpfetch_caller = httpfetch_caller_alloc();
- m_httpfetch_timeout = g_settings->getS32("curl_timeout");
// Set the active fetch limit to curl_parallel_limit or 84,
// whichever is greater. This gives us some leeway so that
@@ -258,8 +247,6 @@ void ClientMediaDownloader::initialStep(Client *client)
remote->baseurl + MTHASHSET_FILE_NAME;
fetch_request.caller = m_httpfetch_caller;
fetch_request.request_id = m_httpfetch_next_id; // == i
- fetch_request.timeout = m_httpfetch_timeout;
- fetch_request.connect_timeout = m_httpfetch_timeout;
fetch_request.method = HTTP_POST;
fetch_request.raw_data = required_hash_set;
fetch_request.extra_headers.emplace_back(
@@ -304,8 +291,7 @@ void ClientMediaDownloader::remoteHashSetReceived(
// available on this server, add this server
// to the available_remotes array
- for(std::map<std::string, FileStatus*>::iterator
- it = m_files.upper_bound(m_name_bound);
+ for(auto it = m_files.upper_bound(m_name_bound);
it != m_files.end(); ++it) {
FileStatus *f = it->second;
if (!f->received && sha1_set.count(f->sha1))
@@ -331,8 +317,7 @@ void ClientMediaDownloader::remoteMediaReceived(
std::string name;
{
- std::unordered_map<unsigned long, std::string>::iterator it =
- m_remote_file_transfers.find(fetch_result.request_id);
+ auto it = m_remote_file_transfers.find(fetch_result.request_id);
assert(it != m_remote_file_transfers.end());
name = it->second;
m_remote_file_transfers.erase(it);
@@ -401,8 +386,7 @@ void ClientMediaDownloader::startRemoteMediaTransfers()
{
bool changing_name_bound = true;
- for (std::map<std::string, FileStatus*>::iterator
- files_iter = m_files.upper_bound(m_name_bound);
+ for (auto files_iter = m_files.upper_bound(m_name_bound);
files_iter != m_files.end(); ++files_iter) {
// Abort if active fetch limit is exceeded
@@ -432,9 +416,8 @@ void ClientMediaDownloader::startRemoteMediaTransfers()
fetch_request.url = url;
fetch_request.caller = m_httpfetch_caller;
fetch_request.request_id = m_httpfetch_next_id;
- fetch_request.timeout = 0; // no data timeout!
- fetch_request.connect_timeout =
- m_httpfetch_timeout;
+ fetch_request.timeout =
+ g_settings->getS32("curl_file_download_timeout");
httpfetch_async(fetch_request);
m_remote_file_transfers.insert(std::make_pair(
@@ -481,19 +464,18 @@ void ClientMediaDownloader::startConventionalTransfers(Client *client)
}
}
-void ClientMediaDownloader::conventionalTransferDone(
+bool ClientMediaDownloader::conventionalTransferDone(
const std::string &name,
const std::string &data,
Client *client)
{
// Check that file was announced
- std::map<std::string, FileStatus*>::iterator
- file_iter = m_files.find(name);
+ auto file_iter = m_files.find(name);
if (file_iter == m_files.end()) {
errorstream << "Client: server sent media file that was"
<< "not announced, ignoring it: \"" << name << "\""
<< std::endl;
- return;
+ return false;
}
FileStatus *filestatus = file_iter->second;
assert(filestatus != NULL);
@@ -503,7 +485,7 @@ void ClientMediaDownloader::conventionalTransferDone(
errorstream << "Client: server sent media file that we already"
<< "received, ignoring it: \"" << name << "\""
<< std::endl;
- return;
+ return true;
}
// Mark file as received, regardless of whether loading it works and
@@ -516,9 +498,45 @@ void ClientMediaDownloader::conventionalTransferDone(
// Check that received file matches announced checksum
// If so, load it
checkAndLoad(name, filestatus->sha1, data, false, client);
+
+ return true;
+}
+
+/*
+ IClientMediaDownloader
+*/
+
+IClientMediaDownloader::IClientMediaDownloader():
+ m_media_cache(getMediaCacheDir()), m_write_to_cache(true)
+{
}
-bool ClientMediaDownloader::checkAndLoad(
+void IClientMediaDownloader::createCacheDirs()
+{
+ if (!m_write_to_cache)
+ return;
+
+ std::string path = getMediaCacheDir();
+ if (!fs::CreateAllDirs(path)) {
+ errorstream << "Client: Could not create media cache directory: "
+ << path << std::endl;
+ }
+}
+
+bool IClientMediaDownloader::tryLoadFromCache(const std::string &name,
+ const std::string &sha1, Client *client)
+{
+ std::ostringstream tmp_os(std::ios_base::binary);
+ bool found_in_cache = m_media_cache.load(hex_encode(sha1), tmp_os);
+
+ // If found in cache, try to load it from there
+ if (found_in_cache)
+ return checkAndLoad(name, sha1, tmp_os.str(), true, client);
+
+ return false;
+}
+
+bool IClientMediaDownloader::checkAndLoad(
const std::string &name, const std::string &sha1,
const std::string &data, bool is_from_cache, Client *client)
{
@@ -548,7 +566,7 @@ bool ClientMediaDownloader::checkAndLoad(
}
// Checksum is ok, try loading the file
- bool success = client->loadMedia(data, name);
+ bool success = loadMedia(client, data, name);
if (!success) {
infostream << "Client: "
<< "Failed to load " << cached_or_received << " media: "
@@ -563,7 +581,7 @@ bool ClientMediaDownloader::checkAndLoad(
<< std::endl;
// Update cache (unless we just loaded the file from the cache)
- if (!is_from_cache)
+ if (!is_from_cache && m_write_to_cache)
m_media_cache.update(sha1_hex, data);
return true;
@@ -591,12 +609,10 @@ std::string ClientMediaDownloader::serializeRequiredHashSet()
// Write list of hashes of files that have not been
// received (found in cache) yet
- for (std::map<std::string, FileStatus*>::iterator
- it = m_files.begin();
- it != m_files.end(); ++it) {
- if (!it->second->received) {
- FATAL_ERROR_IF(it->second->sha1.size() != 20, "Invalid SHA1 size");
- os << it->second->sha1;
+ for (const auto &it : m_files) {
+ if (!it.second->received) {
+ FATAL_ERROR_IF(it.second->sha1.size() != 20, "Invalid SHA1 size");
+ os << it.second->sha1;
}
}
@@ -632,3 +648,145 @@ void ClientMediaDownloader::deSerializeHashSet(const std::string &data,
result.insert(data.substr(pos, 20));
}
}
+
+/*
+ SingleMediaDownloader
+*/
+
+SingleMediaDownloader::SingleMediaDownloader(bool write_to_cache):
+ m_httpfetch_caller(HTTPFETCH_DISCARD)
+{
+ m_write_to_cache = write_to_cache;
+}
+
+SingleMediaDownloader::~SingleMediaDownloader()
+{
+ if (m_httpfetch_caller != HTTPFETCH_DISCARD)
+ httpfetch_caller_free(m_httpfetch_caller);
+}
+
+bool SingleMediaDownloader::loadMedia(Client *client, const std::string &data,
+ const std::string &name)
+{
+ return client->loadMedia(data, name, true);
+}
+
+void SingleMediaDownloader::addFile(const std::string &name, const std::string &sha1)
+{
+ assert(m_stage == STAGE_INIT); // pre-condition
+
+ assert(!name.empty());
+ assert(sha1.size() == 20);
+
+ FATAL_ERROR_IF(!m_file_name.empty(), "Cannot add a second file");
+ m_file_name = name;
+ m_file_sha1 = sha1;
+}
+
+void SingleMediaDownloader::addRemoteServer(const std::string &baseurl)
+{
+ assert(m_stage == STAGE_INIT); // pre-condition
+
+ if (g_settings->getBool("enable_remote_media_server"))
+ m_remotes.emplace_back(baseurl);
+}
+
+void SingleMediaDownloader::step(Client *client)
+{
+ if (m_stage == STAGE_INIT) {
+ m_stage = STAGE_CACHE_CHECKED;
+ initialStep(client);
+ }
+
+ // Remote media: check for completion of fetches
+ if (m_httpfetch_caller != HTTPFETCH_DISCARD) {
+ HTTPFetchResult fetch_result;
+ while (httpfetch_async_get(m_httpfetch_caller, fetch_result)) {
+ remoteMediaReceived(fetch_result, client);
+ }
+ }
+}
+
+bool SingleMediaDownloader::conventionalTransferDone(const std::string &name,
+ const std::string &data, Client *client)
+{
+ if (name != m_file_name)
+ return false;
+
+ // Mark file as received unconditionally and try to load it
+ m_stage = STAGE_DONE;
+ checkAndLoad(name, m_file_sha1, data, false, client);
+ return true;
+}
+
+void SingleMediaDownloader::initialStep(Client *client)
+{
+ if (tryLoadFromCache(m_file_name, m_file_sha1, client))
+ m_stage = STAGE_DONE;
+ if (isDone())
+ return;
+
+ createCacheDirs();
+
+ // If the server reported no remote servers, immediately fall back to
+ // conventional transfer.
+ if (!USE_CURL || m_remotes.empty()) {
+ startConventionalTransfer(client);
+ } else {
+ // Otherwise start by requesting the file from the first remote media server
+ m_httpfetch_caller = httpfetch_caller_alloc();
+ m_current_remote = 0;
+ startRemoteMediaTransfer();
+ }
+}
+
+void SingleMediaDownloader::remoteMediaReceived(
+ const HTTPFetchResult &fetch_result, Client *client)
+{
+ sanity_check(!isDone());
+ sanity_check(m_current_remote >= 0);
+
+ // If fetch succeeded, try to load it
+ if (fetch_result.succeeded) {
+ bool success = checkAndLoad(m_file_name, m_file_sha1,
+ fetch_result.data, false, client);
+ if (success) {
+ m_stage = STAGE_DONE;
+ return;
+ }
+ }
+
+ // Otherwise try the next remote server or fall back to conventional transfer
+ m_current_remote++;
+ if (m_current_remote >= (int)m_remotes.size()) {
+ infostream << "Client: Failed to remote-fetch \"" << m_file_name
+ << "\". Requesting it the usual way." << std::endl;
+ m_current_remote = -1;
+ startConventionalTransfer(client);
+ } else {
+ startRemoteMediaTransfer();
+ }
+}
+
+void SingleMediaDownloader::startRemoteMediaTransfer()
+{
+ std::string url = m_remotes.at(m_current_remote) + hex_encode(m_file_sha1);
+ verbosestream << "Client: Requesting remote media file "
+ << "\"" << m_file_name << "\" " << "\"" << url << "\"" << std::endl;
+
+ HTTPFetchRequest fetch_request;
+ fetch_request.url = url;
+ fetch_request.caller = m_httpfetch_caller;
+ fetch_request.request_id = m_httpfetch_next_id;
+ fetch_request.timeout = g_settings->getS32("curl_file_download_timeout");
+ httpfetch_async(fetch_request);
+
+ m_httpfetch_next_id++;
+}
+
+void SingleMediaDownloader::startConventionalTransfer(Client *client)
+{
+ std::vector<std::string> requests;
+ requests.emplace_back(m_file_name);
+ client->request_media(requests);
+}
diff --git a/src/client/clientmedia.h b/src/client/clientmedia.h
index 5a918535b..c297d737f 100644
--- a/src/client/clientmedia.h
+++ b/src/client/clientmedia.h
@@ -21,6 +21,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "irrlichttypes.h"
#include "filecache.h"
+#include "util/basic_macros.h"
#include <ostream>
#include <map>
#include <set>
@@ -38,7 +39,62 @@ struct HTTPFetchResult;
bool clientMediaUpdateCache(const std::string &raw_hash,
const std::string &filedata);
-class ClientMediaDownloader
+// more of a base class than an interface but this name was most convenient...
+class IClientMediaDownloader
+{
+public:
+ DISABLE_CLASS_COPY(IClientMediaDownloader)
+
+ virtual bool isStarted() const = 0;
+
+ // If this returns true, the downloader is done and can be deleted
+ virtual bool isDone() const = 0;
+
+ // Add a file to the list of required file (but don't fetch it yet)
+ virtual void addFile(const std::string &name, const std::string &sha1) = 0;
+
+ // Add a remote server to the list; ignored if not built with cURL
+ virtual void addRemoteServer(const std::string &baseurl) = 0;
+
+ // Steps the media downloader:
+ // - May load media into client by calling client->loadMedia()
+ // - May check media cache for files
+ // - May add files to media cache
+ // - May start remote transfers by calling httpfetch_async
+ // - May check for completion of current remote transfers
+ // - May start conventional transfers by calling client->request_media()
+ // - May inform server that all media has been loaded
+ // by calling client->received_media()
+ // After step has been called once, don't call addFile/addRemoteServer.
+ virtual void step(Client *client) = 0;
+
+ // Must be called for each file received through TOCLIENT_MEDIA
+ // returns true if this file belongs to this downloader
+ virtual bool conventionalTransferDone(const std::string &name,
+ const std::string &data, Client *client) = 0;
+
+protected:
+ IClientMediaDownloader();
+ virtual ~IClientMediaDownloader() = default;
+
+ // Forwards the call to the appropriate Client method
+ virtual bool loadMedia(Client *client, const std::string &data,
+ const std::string &name) = 0;
+
+ void createCacheDirs();
+
+ bool tryLoadFromCache(const std::string &name, const std::string &sha1,
+ Client *client);
+
+ bool checkAndLoad(const std::string &name, const std::string &sha1,
+ const std::string &data, bool is_from_cache, Client *client);
+
+ // Filesystem-based media cache
+ FileCache m_media_cache;
+ bool m_write_to_cache;
+};
+
+class ClientMediaDownloader : public IClientMediaDownloader
{
public:
ClientMediaDownloader();
@@ -52,39 +108,29 @@ public:
return 0.0f;
}
- bool isStarted() const {
+ bool isStarted() const override {
return m_initial_step_done;
}
- // If this returns true, the downloader is done and can be deleted
- bool isDone() const {
+ bool isDone() const override {
return m_initial_step_done &&
m_uncached_received_count == m_uncached_count;
}
- // Add a file to the list of required file (but don't fetch it yet)
- void addFile(const std::string &name, const std::string &sha1);
+ void addFile(const std::string &name, const std::string &sha1) override;
- // Add a remote server to the list; ignored if not built with cURL
- void addRemoteServer(const std::string &baseurl);
+ void addRemoteServer(const std::string &baseurl) override;
- // Steps the media downloader:
- // - May load media into client by calling client->loadMedia()
- // - May check media cache for files
- // - May add files to media cache
- // - May start remote transfers by calling httpfetch_async
- // - May check for completion of current remote transfers
- // - May start conventional transfers by calling client->request_media()
- // - May inform server that all media has been loaded
- // by calling client->received_media()
- // After step has been called once, don't call addFile/addRemoteServer.
- void step(Client *client);
+ void step(Client *client) override;
- // Must be called for each file received through TOCLIENT_MEDIA
- void conventionalTransferDone(
+ bool conventionalTransferDone(
const std::string &name,
const std::string &data,
- Client *client);
+ Client *client) override;
+
+protected:
+ bool loadMedia(Client *client, const std::string &data,
+ const std::string &name) override;
private:
struct FileStatus {
@@ -107,13 +153,9 @@ private:
void startRemoteMediaTransfers();
void startConventionalTransfers(Client *client);
- bool checkAndLoad(const std::string &name, const std::string &sha1,
- const std::string &data, bool is_from_cache,
- Client *client);
-
- std::string serializeRequiredHashSet();
static void deSerializeHashSet(const std::string &data,
std::set<std::string> &result);
+ std::string serializeRequiredHashSet();
// Maps filename to file status
std::map<std::string, FileStatus*> m_files;
@@ -121,9 +163,6 @@ private:
// Array of remote media servers
std::vector<RemoteServerStatus*> m_remotes;
- // Filesystem-based media cache
- FileCache m_media_cache;
-
// Has an attempt been made to load media files from the file cache?
// Have hash sets been requested from remote servers?
bool m_initial_step_done = false;
@@ -135,13 +174,12 @@ private:
s32 m_uncached_received_count = 0;
// Status of remote transfers
- unsigned long m_httpfetch_caller;
- unsigned long m_httpfetch_next_id = 0;
- long m_httpfetch_timeout = 0;
+ u64 m_httpfetch_caller;
+ u64 m_httpfetch_next_id = 0;
s32 m_httpfetch_active = 0;
s32 m_httpfetch_active_limit = 0;
s32 m_outstanding_hash_sets = 0;
- std::unordered_map<unsigned long, std::string> m_remote_file_transfers;
+ std::unordered_map<u64, std::string> m_remote_file_transfers;
// All files up to this name have either been received from a
// remote server or failed on all remote servers, so those files
@@ -150,3 +188,63 @@ private:
std::string m_name_bound = "";
};
+
+// A media downloader that only downloads a single file.
+// It does/doesn't do several things the normal downloader does:
+// - won't fetch hash sets from remote servers
+// - will mark loaded media as coming from file push
+// - writing to file cache is optional
+class SingleMediaDownloader : public IClientMediaDownloader
+{
+public:
+ SingleMediaDownloader(bool write_to_cache);
+ ~SingleMediaDownloader();
+
+ bool isStarted() const override {
+ return m_stage > STAGE_INIT;
+ }
+
+ bool isDone() const override {
+ return m_stage >= STAGE_DONE;
+ }
+
+ void addFile(const std::string &name, const std::string &sha1) override;
+
+ void addRemoteServer(const std::string &baseurl) override;
+
+ void step(Client *client) override;
+
+ bool conventionalTransferDone(const std::string &name,
+ const std::string &data, Client *client) override;
+
+protected:
+ bool loadMedia(Client *client, const std::string &data,
+ const std::string &name) override;
+
+private:
+ void initialStep(Client *client);
+ void remoteMediaReceived(const HTTPFetchResult &fetch_result, Client *client);
+ void startRemoteMediaTransfer();
+ void startConventionalTransfer(Client *client);
+
+ enum Stage {
+ STAGE_INIT,
+ STAGE_CACHE_CHECKED, // we have tried to load the file from cache
+ STAGE_DONE
+ };
+
+ // Information about the one file we want to fetch
+ std::string m_file_name;
+ std::string m_file_sha1;
+ s32 m_current_remote;
+
+ // Array of remote media servers
+ std::vector<std::string> m_remotes;
+
+ enum Stage m_stage = STAGE_INIT;
+
+ // Status of remote transfers
+ unsigned long m_httpfetch_caller;
+ unsigned long m_httpfetch_next_id = 0;
+
+};
diff --git a/src/client/clientobject.h b/src/client/clientobject.h
index ecd8059ef..b192f0dcd 100644
--- a/src/client/clientobject.h
+++ b/src/client/clientobject.h
@@ -39,7 +39,7 @@ public:
ClientActiveObject(u16 id, Client *client, ClientEnvironment *env);
virtual ~ClientActiveObject();
- virtual void addToScene(ITextureSource *tsrc) {}
+ virtual void addToScene(ITextureSource *tsrc, scene::ISceneManager *smgr) = 0;
virtual void removeFromScene(bool permanent) {}
virtual void updateLight(u32 day_night_ratio) {}
diff --git a/src/client/clouds.cpp b/src/client/clouds.cpp
index 5a075aaf0..383a1d799 100644
--- a/src/client/clouds.cpp
+++ b/src/client/clouds.cpp
@@ -30,7 +30,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
// Menu clouds are created later
class Clouds;
Clouds *g_menuclouds = NULL;
-irr::scene::ISceneManager *g_menucloudsmgr = NULL;
+scene::ISceneManager *g_menucloudsmgr = NULL;
// Constant for now
static constexpr const float cloud_size = BS * 64.0f;
@@ -352,7 +352,7 @@ void Clouds::update(const v3f &camera_p, const video::SColorf &color_diffuse)
// is the camera inside the cloud mesh?
m_camera_inside_cloud = false; // default
if (m_enable_3d) {
- float camera_height = camera_p.Y;
+ float camera_height = camera_p.Y - BS * m_camera_offset.Y;
if (camera_height >= m_box.MinEdge.Y &&
camera_height <= m_box.MaxEdge.Y) {
v2f camera_in_noise;
diff --git a/src/client/clouds.h b/src/client/clouds.h
index a4d810faa..6db88d93c 100644
--- a/src/client/clouds.h
+++ b/src/client/clouds.h
@@ -22,15 +22,14 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "irrlichttypes_extrabloated.h"
#include <iostream>
#include "constants.h"
-#include "cloudparams.h"
+#include "skyparams.h"
// Menu clouds
class Clouds;
extern Clouds *g_menuclouds;
// Scene manager used for menu clouds
-namespace irr{namespace scene{class ISceneManager;}}
-extern irr::scene::ISceneManager *g_menucloudsmgr;
+extern scene::ISceneManager *g_menucloudsmgr;
class Clouds : public scene::ISceneNode
{
diff --git a/src/client/content_cao.cpp b/src/client/content_cao.cpp
index 97ae9afc4..1d4636a08 100644
--- a/src/client/content_cao.cpp
+++ b/src/client/content_cao.cpp
@@ -20,7 +20,6 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "content_cao.h"
#include <IBillboardSceneNode.h>
#include <ICameraSceneNode.h>
-#include <ITextSceneNode.h>
#include <IMeshManipulator.h>
#include <IAnimatedMeshSceneNode.h>
#include "client/client.h"
@@ -28,7 +27,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "client/sound.h"
#include "client/tile.h"
#include "util/basic_macros.h"
-#include "util/numeric.h" // For IntervalLimiter & setPitchYawRoll
+#include "util/numeric.h"
#include "util/serialize.h"
#include "camera.h" // CameraModes
#include "collision.h"
@@ -172,6 +171,20 @@ static void updatePositionRecursive(scene::ISceneNode *node)
node->updateAbsolutePosition();
}
+static bool logOnce(const std::ostringstream &from, std::ostream &log_to)
+{
+ thread_local std::vector<u64> logged;
+
+ std::string message = from.str();
+ u64 hash = murmur_hash_64_ua(message.data(), message.length(), 0xBADBABE);
+
+ if (std::find(logged.begin(), logged.end(), hash) != logged.end())
+ return false;
+ logged.push_back(hash);
+ log_to << message << std::endl;
+ return true;
+}
+
/*
TestCAO
*/
@@ -189,7 +202,7 @@ public:
static ClientActiveObject* create(Client *client, ClientEnvironment *env);
- void addToScene(ITextureSource *tsrc);
+ void addToScene(ITextureSource *tsrc, scene::ISceneManager *smgr);
void removeFromScene(bool permanent);
void updateLight(u32 day_night_ratio);
void updateNodePos();
@@ -220,7 +233,7 @@ ClientActiveObject* TestCAO::create(Client *client, ClientEnvironment *env)
return new TestCAO(client, env);
}
-void TestCAO::addToScene(ITextureSource *tsrc)
+void TestCAO::addToScene(ITextureSource *tsrc, scene::ISceneManager *smgr)
{
if(m_node != NULL)
return;
@@ -249,7 +262,7 @@ void TestCAO::addToScene(ITextureSource *tsrc)
// Add to mesh
mesh->addMeshBuffer(buf);
buf->drop();
- m_node = RenderingEngine::get_scene_manager()->addMeshSceneNode(mesh, NULL);
+ m_node = smgr->addMeshSceneNode(mesh, NULL);
mesh->drop();
updateNodePos();
}
@@ -347,18 +360,6 @@ void GenericCAO::initialize(const std::string &data)
infostream<<"GenericCAO: Got init data"<<std::endl;
processInitData(data);
- if (m_is_player) {
- // Check if it's the current player
- LocalPlayer *player = m_env->getLocalPlayer();
- if (player && strcmp(player->getName(), m_name.c_str()) == 0) {
- m_is_local_player = true;
- m_is_visible = false;
- player->setCAO(this);
-
- m_prop.show_on_minimap = false;
- }
- }
-
m_enable_shaders = g_settings->getBool("enable_shaders");
}
@@ -381,6 +382,16 @@ void GenericCAO::processInitData(const std::string &data)
m_rotation = readV3F32(is);
m_hp = readU16(is);
+ if (m_is_player) {
+ // Check if it's the current player
+ LocalPlayer *player = m_env->getLocalPlayer();
+ if (player && strcmp(player->getName(), m_name.c_str()) == 0) {
+ m_is_local_player = true;
+ m_is_visible = false;
+ player->setCAO(this);
+ }
+ }
+
const u8 num_messages = readU8(is);
for (int i = 0; i < num_messages; i++) {
@@ -558,6 +569,9 @@ void GenericCAO::removeFromScene(bool permanent)
clearParentAttachment();
}
+ if (auto shadow = RenderingEngine::get_shadow_renderer())
+ shadow->removeNodeFromShadowList(getSceneNode());
+
if (m_meshnode) {
m_meshnode->remove();
m_meshnode->drop();
@@ -591,9 +605,9 @@ void GenericCAO::removeFromScene(bool permanent)
m_client->getMinimap()->removeMarker(&m_marker);
}
-void GenericCAO::addToScene(ITextureSource *tsrc)
+void GenericCAO::addToScene(ITextureSource *tsrc, scene::ISceneManager *smgr)
{
- m_smgr = RenderingEngine::get_scene_manager();
+ m_smgr = smgr;
if (getSceneNode() != NULL) {
return;
@@ -625,8 +639,7 @@ void GenericCAO::addToScene(ITextureSource *tsrc)
}
auto grabMatrixNode = [this] {
- m_matrixnode = RenderingEngine::get_scene_manager()->
- addDummyTransformationSceneNode();
+ m_matrixnode = m_smgr->addDummyTransformationSceneNode();
m_matrixnode->grab();
};
@@ -644,11 +657,11 @@ void GenericCAO::addToScene(ITextureSource *tsrc)
if (m_prop.visual == "sprite") {
grabMatrixNode();
- m_spritenode = RenderingEngine::get_scene_manager()->addBillboardSceneNode(
+ m_spritenode = m_smgr->addBillboardSceneNode(
m_matrixnode, v2f(1, 1), v3f(0,0,0), -1);
m_spritenode->grab();
m_spritenode->setMaterialTexture(0,
- tsrc->getTextureForMesh("unknown_node.png"));
+ tsrc->getTextureForMesh("no_texture.png"));
setSceneNodeMaterial(m_spritenode);
@@ -729,8 +742,7 @@ void GenericCAO::addToScene(ITextureSource *tsrc)
mesh->addMeshBuffer(buf);
buf->drop();
}
- m_meshnode = RenderingEngine::get_scene_manager()->
- addMeshSceneNode(mesh, m_matrixnode);
+ m_meshnode = m_smgr->addMeshSceneNode(mesh, m_matrixnode);
m_meshnode->grab();
mesh->drop();
// Set it to use the materials of the meshbuffers directly.
@@ -739,8 +751,7 @@ void GenericCAO::addToScene(ITextureSource *tsrc)
} else if (m_prop.visual == "cube") {
grabMatrixNode();
scene::IMesh *mesh = createCubeMesh(v3f(BS,BS,BS));
- m_meshnode = RenderingEngine::get_scene_manager()->
- addMeshSceneNode(mesh, m_matrixnode);
+ m_meshnode = m_smgr->addMeshSceneNode(mesh, m_matrixnode);
m_meshnode->grab();
mesh->drop();
@@ -753,11 +764,6 @@ void GenericCAO::addToScene(ITextureSource *tsrc)
grabMatrixNode();
scene::IAnimatedMesh *mesh = m_client->getMesh(m_prop.mesh, true);
if (mesh) {
- m_animated_meshnode = RenderingEngine::get_scene_manager()->
- addAnimatedMeshSceneNode(mesh, m_matrixnode);
- m_animated_meshnode->grab();
- mesh->drop(); // The scene node took hold of it
-
if (!checkMeshNormals(mesh)) {
infostream << "GenericCAO: recalculating normals for mesh "
<< m_prop.mesh << std::endl;
@@ -765,6 +771,9 @@ void GenericCAO::addToScene(ITextureSource *tsrc)
recalculateNormals(mesh, true, false);
}
+ m_animated_meshnode = m_smgr->addAnimatedMeshSceneNode(mesh, m_matrixnode);
+ m_animated_meshnode->grab();
+ mesh->drop(); // The scene node took hold of it
m_animated_meshnode->animateJoints(); // Needed for some animations
m_animated_meshnode->setScale(m_prop.visual_size);
@@ -795,8 +804,7 @@ void GenericCAO::addToScene(ITextureSource *tsrc)
infostream << "serialized form: " << m_prop.wield_item << std::endl;
item.deSerialize(m_prop.wield_item, m_client->idef());
}
- m_wield_meshnode = new WieldMeshSceneNode(
- RenderingEngine::get_scene_manager(), -1);
+ m_wield_meshnode = new WieldMeshSceneNode(m_smgr, -1);
m_wield_meshnode->setItem(item, m_client,
(m_prop.visual == "wielditem"));
@@ -811,10 +819,13 @@ void GenericCAO::addToScene(ITextureSource *tsrc)
if (m_reset_textures_timer < 0)
updateTextures(m_current_texture_modifier);
- scene::ISceneNode *node = getSceneNode();
+ if (scene::ISceneNode *node = getSceneNode()) {
+ if (m_matrixnode)
+ node->setParent(m_matrixnode);
- if (node && m_matrixnode)
- node->setParent(m_matrixnode);
+ if (auto shadow = RenderingEngine::get_shadow_renderer())
+ shadow->addNodeToShadowList(node);
+ }
updateNametag();
updateMarker();
@@ -824,6 +835,28 @@ void GenericCAO::addToScene(ITextureSource *tsrc)
updateAttachments();
setNodeLight(m_last_light);
updateMeshCulling();
+
+ if (m_animated_meshnode) {
+ u32 mat_count = m_animated_meshnode->getMaterialCount();
+ if (mat_count == 0 || m_prop.textures.empty()) {
+ // nothing
+ } else if (mat_count > m_prop.textures.size()) {
+ std::ostringstream oss;
+ oss << "GenericCAO::addToScene(): Model "
+ << m_prop.mesh << " loaded with " << mat_count
+ << " mesh buffers but only " << m_prop.textures.size()
+ << " texture(s) specifed, this is deprecated.";
+ logOnce(oss, warningstream);
+
+ video::ITexture *last = m_animated_meshnode->getMaterial(0).TextureLayer[0].Texture;
+ for (u32 i = 1; i < mat_count; i++) {
+ auto &layer = m_animated_meshnode->getMaterial(i).TextureLayer[0];
+ if (!layer.Texture)
+ layer.Texture = last;
+ last = layer.Texture;
+ }
+ }
+ }
}
void GenericCAO::updateLight(u32 day_night_ratio)
@@ -998,14 +1031,14 @@ void GenericCAO::step(float dtime, ClientEnvironment *env)
m_velocity = v3f(0,0,0);
m_acceleration = v3f(0,0,0);
const PlayerControl &controls = player->getPlayerControl();
+ f32 new_speed = player->local_animation_speed;
bool walking = false;
- if (controls.up || controls.down || controls.left || controls.right ||
- controls.forw_move_joystick_axis != 0.f ||
- controls.sidew_move_joystick_axis != 0.f)
+ if (controls.movement_speed > 0.001f) {
+ new_speed *= controls.movement_speed;
walking = true;
+ }
- f32 new_speed = player->local_animation_speed;
v2s32 new_anim = v2s32(0,0);
bool allow_update = false;
@@ -1017,7 +1050,7 @@ void GenericCAO::step(float dtime, ClientEnvironment *env)
g_settings->getBool("free_move") &&
m_client->checkLocalPrivilege("fly"))))
new_speed *= 1.5;
- // slowdown speed if sneeking
+ // slowdown speed if sneaking
if (controls.sneak && walking)
new_speed /= 2;
@@ -1074,7 +1107,7 @@ void GenericCAO::step(float dtime, ClientEnvironment *env)
}
removeFromScene(false);
- addToScene(m_client->tsrc());
+ addToScene(m_client->tsrc(), m_smgr);
// Attachments, part 2: Now that the parent has been refreshed, put its attachments back
for (u16 cao_id : m_attachment_child_ids) {
@@ -1291,7 +1324,7 @@ void GenericCAO::updateTextures(std::string mod)
if (m_spritenode) {
if (m_prop.visual == "sprite") {
- std::string texturestring = "unknown_node.png";
+ std::string texturestring = "no_texture.png";
if (!m_prop.textures.empty())
texturestring = m_prop.textures[0];
texturestring += mod;
@@ -1370,7 +1403,7 @@ void GenericCAO::updateTextures(std::string mod)
{
for (u32 i = 0; i < 6; ++i)
{
- std::string texturestring = "unknown_node.png";
+ std::string texturestring = "no_texture.png";
if(m_prop.textures.size() > i)
texturestring = m_prop.textures[i];
texturestring += mod;
@@ -1403,7 +1436,7 @@ void GenericCAO::updateTextures(std::string mod)
} else if (m_prop.visual == "upright_sprite") {
scene::IMesh *mesh = m_meshnode->getMesh();
{
- std::string tname = "unknown_object.png";
+ std::string tname = "no_texture.png";
if (!m_prop.textures.empty())
tname = m_prop.textures[0];
tname += mod;
@@ -1425,7 +1458,7 @@ void GenericCAO::updateTextures(std::string mod)
buf->getMaterial().setFlag(video::EMF_ANISOTROPIC_FILTER, use_anisotropic_filter);
}
{
- std::string tname = "unknown_object.png";
+ std::string tname = "no_texture.png";
if (m_prop.textures.size() >= 2)
tname = m_prop.textures[1];
else if (!m_prop.textures.empty())
@@ -1473,11 +1506,8 @@ void GenericCAO::updateAnimation()
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::updateAnimationSpeed()
@@ -1493,10 +1523,10 @@ void GenericCAO::updateBonePosition()
if (m_bone_position.empty() || !m_animated_meshnode)
return;
- m_animated_meshnode->setJointMode(irr::scene::EJUOR_CONTROL); // To write positions to the mesh on render
+ m_animated_meshnode->setJointMode(scene::EJUOR_CONTROL); // To write positions to the mesh on render
for (auto &it : m_bone_position) {
std::string bone_name = it.first;
- irr::scene::IBoneSceneNode* bone = m_animated_meshnode->getJointNode(bone_name.c_str());
+ scene::IBoneSceneNode* bone = m_animated_meshnode->getJointNode(bone_name.c_str());
if (bone) {
bone->setPosition(it.second.X);
bone->setRotation(it.second.Y);
@@ -1505,7 +1535,7 @@ void GenericCAO::updateBonePosition()
// search through bones to find mistakenly rotated bones due to bug in Irrlicht
for (u32 i = 0; i < m_animated_meshnode->getJointCount(); ++i) {
- irr::scene::IBoneSceneNode *bone = m_animated_meshnode->getJointNode(i);
+ scene::IBoneSceneNode *bone = m_animated_meshnode->getJointNode(i);
if (!bone)
continue;
@@ -1727,6 +1757,7 @@ void GenericCAO::processMessage(const std::string &data)
m_tx_basepos = p;
m_anim_num_frames = num_frames;
+ m_anim_frame = 0;
m_anim_framelength = framelength;
m_tx_select_horiz_by_yawpitch = select_horiz_by_yawpitch;
@@ -1784,6 +1815,7 @@ void GenericCAO::processMessage(const std::string &data)
{
updateAnimation();
}
+ // FIXME: ^ This code is trash. It's also broken.
}
} else if (cmd == AO_CMD_SET_ANIMATION_SPEED) {
m_animation_speed = readF32(is);
@@ -1828,6 +1860,8 @@ void GenericCAO::processMessage(const std::string &data)
m_reset_textures_timer = 0.05;
if(damage >= 2)
m_reset_textures_timer += 0.05 * damage;
+ // Cap damage overlay to 1 second
+ m_reset_textures_timer = std::min(m_reset_textures_timer, 1.0f);
updateTextures(m_current_texture_modifier + m_prop.damage_texture_modifier);
}
}
@@ -1875,7 +1909,8 @@ bool GenericCAO::directReportPunch(v3f dir, const ItemStack *punchitem,
m_armor_groups,
toolcap,
punchitem,
- time_from_last_punch);
+ time_from_last_punch,
+ punchitem->wear);
if(result.did_punch && result.damage != 0)
{
@@ -1895,6 +1930,8 @@ bool GenericCAO::directReportPunch(v3f dir, const ItemStack *punchitem,
m_reset_textures_timer = 0.05;
if (result.damage >= 2)
m_reset_textures_timer += 0.05 * result.damage;
+ // Cap damage overlay to 1 second
+ m_reset_textures_timer = std::min(m_reset_textures_timer, 1.0f);
updateTextures(m_current_texture_modifier + m_prop.damage_texture_modifier);
}
}
@@ -1933,7 +1970,7 @@ void GenericCAO::updateMeshCulling()
return;
}
- irr::scene::ISceneNode *node = getSceneNode();
+ scene::ISceneNode *node = getSceneNode();
if (!node)
return;
diff --git a/src/client/content_cao.h b/src/client/content_cao.h
index 7c134fb48..4bbba9134 100644
--- a/src/client/content_cao.h
+++ b/src/client/content_cao.h
@@ -174,6 +174,8 @@ public:
const bool isImmortal();
+ inline const ObjectProperties &getProperties() const { return m_prop; }
+
scene::ISceneNode *getSceneNode() const;
scene::IAnimatedMeshSceneNode *getAnimatedMeshSceneNode() const;
@@ -234,7 +236,7 @@ public:
void removeFromScene(bool permanent);
- void addToScene(ITextureSource *tsrc);
+ void addToScene(ITextureSource *tsrc, scene::ISceneManager *smgr);
inline void expireVisuals()
{
diff --git a/src/client/content_mapblock.cpp b/src/client/content_mapblock.cpp
index 90284ecce..bb2d6398f 100644
--- a/src/client/content_mapblock.cpp
+++ b/src/client/content_mapblock.cpp
@@ -60,18 +60,16 @@ static constexpr u16 quad_indices[] = {0, 1, 2, 2, 3, 0};
const std::string MapblockMeshGenerator::raillike_groupname = "connect_to_raillike";
-MapblockMeshGenerator::MapblockMeshGenerator(MeshMakeData *input, MeshCollector *output)
+MapblockMeshGenerator::MapblockMeshGenerator(MeshMakeData *input, MeshCollector *output,
+ scene::IMeshManipulator *mm):
+ data(input),
+ collector(output),
+ nodedef(data->m_client->ndef()),
+ meshmanip(mm),
+ blockpos_nodes(data->m_blockpos * MAP_BLOCKSIZE)
{
- data = input;
- collector = output;
-
- nodedef = data->m_client->ndef();
- meshmanip = RenderingEngine::get_scene_manager()->getMeshManipulator();
-
enable_mesh_cache = g_settings->getBool("enable_mesh_cache") &&
!data->m_smooth_lighting; // Mesh cache is not supported with smooth lighting
-
- blockpos_nodes = data->m_blockpos * MAP_BLOCKSIZE;
}
void MapblockMeshGenerator::useTile(int index, u8 set_flags, u8 reset_flags, bool special)
@@ -960,15 +958,43 @@ void MapblockMeshGenerator::drawPlantlikeQuad(float rotation, float quad_offset,
vertex.rotateXZBy(rotation + rotate_degree);
vertex += offset;
}
+
+ u8 wall = n.getWallMounted(nodedef);
+ if (wall != DWM_YN) {
+ for (v3f &vertex : vertices) {
+ switch (wall) {
+ case DWM_YP:
+ vertex.rotateYZBy(180);
+ vertex.rotateXZBy(180);
+ break;
+ case DWM_XP:
+ vertex.rotateXYBy(90);
+ break;
+ case DWM_XN:
+ vertex.rotateXYBy(-90);
+ vertex.rotateYZBy(180);
+ break;
+ case DWM_ZP:
+ vertex.rotateYZBy(-90);
+ vertex.rotateXYBy(90);
+ break;
+ case DWM_ZN:
+ vertex.rotateYZBy(90);
+ vertex.rotateXYBy(90);
+ break;
+ }
+ }
+ }
+
drawQuad(vertices, v3s16(0, 0, 0), plant_height);
}
-void MapblockMeshGenerator::drawPlantlike()
+void MapblockMeshGenerator::drawPlantlike(bool is_rooted)
{
draw_style = PLANT_STYLE_CROSS;
scale = BS / 2 * f->visual_scale;
offset = v3f(0, 0, 0);
- rotate_degree = 0;
+ rotate_degree = 0.0f;
random_offset_Y = false;
face_num = 0;
plant_height = 1.0;
@@ -988,7 +1014,8 @@ void MapblockMeshGenerator::drawPlantlike()
break;
case CPT2_DEGROTATE:
- rotate_degree = n.param2 * 2;
+ case CPT2_COLORED_DEGROTATE:
+ rotate_degree = 1.5f * n.getDegRotate(nodedef);
break;
case CPT2_LEVELED:
@@ -999,6 +1026,22 @@ void MapblockMeshGenerator::drawPlantlike()
break;
}
+ if (is_rooted) {
+ u8 wall = n.getWallMounted(nodedef);
+ switch (wall) {
+ case DWM_YP:
+ offset.Y += BS*2;
+ break;
+ case DWM_XN:
+ case DWM_XP:
+ case DWM_ZN:
+ case DWM_ZP:
+ offset.X += -BS;
+ offset.Y += BS;
+ break;
+ }
+ }
+
switch (draw_style) {
case PLANT_STYLE_CROSS:
drawPlantlikeQuad(46);
@@ -1049,7 +1092,7 @@ void MapblockMeshGenerator::drawPlantlikeRootedNode()
MapNode ntop = data->m_vmanip.getNodeNoEx(blockpos_nodes + p);
light = LightPair(getInteriorLight(ntop, 1, nodedef));
}
- drawPlantlike();
+ drawPlantlike(true);
p.Y--;
}
@@ -1343,6 +1386,7 @@ void MapblockMeshGenerator::drawMeshNode()
u8 facedir = 0;
scene::IMesh* mesh;
bool private_mesh; // as a grab/drop pair is not thread-safe
+ int degrotate = 0;
if (f->param_type_2 == CPT2_FACEDIR ||
f->param_type_2 == CPT2_COLORED_FACEDIR) {
@@ -1354,9 +1398,12 @@ void MapblockMeshGenerator::drawMeshNode()
facedir = n.getWallMounted(nodedef);
if (!enable_mesh_cache)
facedir = wallmounted_to_facedir[facedir];
+ } else if (f->param_type_2 == CPT2_DEGROTATE ||
+ f->param_type_2 == CPT2_COLORED_DEGROTATE) {
+ degrotate = n.getDegRotate(nodedef);
}
- if (!data->m_smooth_lighting && f->mesh_ptr[facedir]) {
+ if (!data->m_smooth_lighting && f->mesh_ptr[facedir] && !degrotate) {
// use cached meshes
private_mesh = false;
mesh = f->mesh_ptr[facedir];
@@ -1364,7 +1411,10 @@ void MapblockMeshGenerator::drawMeshNode()
// no cache, clone and rotate mesh
private_mesh = true;
mesh = cloneMesh(f->mesh_ptr[0]);
- rotateMeshBy6dFacedir(mesh, facedir);
+ if (facedir)
+ rotateMeshBy6dFacedir(mesh, facedir);
+ else if (degrotate)
+ rotateMeshXZby(mesh, 1.5f * degrotate);
recalculateBoundingBox(mesh);
meshmanip->recalculateNormals(mesh, true, false);
} else
diff --git a/src/client/content_mapblock.h b/src/client/content_mapblock.h
index 487d84a07..7344f05ee 100644
--- a/src/client/content_mapblock.h
+++ b/src/client/content_mapblock.h
@@ -139,14 +139,14 @@ public:
// plantlike-specific
PlantlikeStyle draw_style;
v3f offset;
- int rotate_degree;
+ float rotate_degree;
bool random_offset_Y;
int face_num;
float plant_height;
void drawPlantlikeQuad(float rotation, float quad_offset = 0,
bool offset_top_only = false);
- void drawPlantlike();
+ void drawPlantlike(bool is_rooted = false);
// firelike-specific
void drawFirelikeQuad(float rotation, float opening_angle,
@@ -172,7 +172,8 @@ public:
void drawNode();
public:
- MapblockMeshGenerator(MeshMakeData *input, MeshCollector *output);
+ MapblockMeshGenerator(MeshMakeData *input, MeshCollector *output,
+ scene::IMeshManipulator *mm);
void generate();
void renderSingle(content_t node, u8 param2 = 0x00);
};
diff --git a/src/client/fontengine.cpp b/src/client/fontengine.cpp
index 47218c0d9..ad8305b45 100644
--- a/src/client/fontengine.cpp
+++ b/src/client/fontengine.cpp
@@ -24,10 +24,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "porting.h"
#include "filesys.h"
#include "gettext.h"
-
-#if USE_FREETYPE
#include "irrlicht_changes/CGUITTFont.h"
-#endif
/** maximum size distance for getting a "similar" font size */
#define MAX_FONT_SIZE_OFFSET 10
@@ -45,9 +42,8 @@ static void font_setting_changed(const std::string &name, void *userdata)
FontEngine::FontEngine(gui::IGUIEnvironment* env) :
m_env(env)
{
-
for (u32 &i : m_default_size) {
- i = (FontMode) FONT_SIZE_UNSPECIFIED;
+ i = FONT_SIZE_UNSPECIFIED;
}
assert(g_settings != NULL); // pre-condition
@@ -56,28 +52,19 @@ FontEngine::FontEngine(gui::IGUIEnvironment* env) :
readSettings();
- if (m_currentMode == FM_Standard) {
- g_settings->registerChangedCallback("font_size", font_setting_changed, NULL);
- g_settings->registerChangedCallback("font_bold", font_setting_changed, NULL);
- g_settings->registerChangedCallback("font_italic", font_setting_changed, NULL);
- g_settings->registerChangedCallback("font_path", font_setting_changed, NULL);
- g_settings->registerChangedCallback("font_path_bold", font_setting_changed, NULL);
- g_settings->registerChangedCallback("font_path_italic", font_setting_changed, NULL);
- g_settings->registerChangedCallback("font_path_bolditalic", font_setting_changed, NULL);
- g_settings->registerChangedCallback("font_shadow", font_setting_changed, NULL);
- g_settings->registerChangedCallback("font_shadow_alpha", font_setting_changed, NULL);
- }
- else if (m_currentMode == FM_Fallback) {
- g_settings->registerChangedCallback("fallback_font_size", font_setting_changed, NULL);
- g_settings->registerChangedCallback("fallback_font_path", font_setting_changed, NULL);
- g_settings->registerChangedCallback("fallback_font_shadow", font_setting_changed, NULL);
- g_settings->registerChangedCallback("fallback_font_shadow_alpha", font_setting_changed, NULL);
- }
+ const char *settings[] = {
+ "font_size", "font_bold", "font_italic", "font_size_divisible_by",
+ "mono_font_size", "mono_font_size_divisible_by",
+ "font_shadow", "font_shadow_alpha",
+ "font_path", "font_path_bold", "font_path_italic", "font_path_bold_italic",
+ "mono_font_path", "mono_font_path_bold", "mono_font_path_italic",
+ "mono_font_path_bold_italic",
+ "fallback_font_path",
+ "screen_dpi", "gui_scaling",
+ };
- g_settings->registerChangedCallback("mono_font_path", font_setting_changed, NULL);
- g_settings->registerChangedCallback("mono_font_size", font_setting_changed, NULL);
- g_settings->registerChangedCallback("screen_dpi", font_setting_changed, NULL);
- g_settings->registerChangedCallback("gui_scaling", font_setting_changed, NULL);
+ for (auto name : settings)
+ g_settings->registerChangedCallback(name, font_setting_changed, NULL);
}
/******************************************************************************/
@@ -89,11 +76,13 @@ FontEngine::~FontEngine()
/******************************************************************************/
void FontEngine::cleanCache()
{
+ RecursiveMutexAutoLock l(m_font_mutex);
+
for (auto &font_cache_it : m_font_cache) {
for (auto &font_it : font_cache_it) {
font_it.second->drop();
- font_it.second = NULL;
+ font_it.second = nullptr;
}
font_cache_it.clear();
}
@@ -102,14 +91,15 @@ void FontEngine::cleanCache()
/******************************************************************************/
irr::gui::IGUIFont *FontEngine::getFont(FontSpec spec)
{
+ return getFont(spec, false);
+}
+
+irr::gui::IGUIFont *FontEngine::getFont(FontSpec spec, bool may_fail)
+{
if (spec.mode == FM_Unspecified) {
spec.mode = m_currentMode;
- } else if (m_currentMode == FM_Simple) {
- // Freetype disabled -> Force simple mode
- spec.mode = (spec.mode == FM_Mono ||
- spec.mode == FM_SimpleMono) ?
- FM_SimpleMono : FM_Simple;
- // Support for those could be added, but who cares?
+ } else if (spec.mode == _FM_Fallback) {
+ // Fallback font doesn't support these
spec.bold = false;
spec.italic = false;
}
@@ -118,17 +108,22 @@ irr::gui::IGUIFont *FontEngine::getFont(FontSpec spec)
if (spec.size == FONT_SIZE_UNSPECIFIED)
spec.size = m_default_size[spec.mode];
+ RecursiveMutexAutoLock l(m_font_mutex);
+
const auto &cache = m_font_cache[spec.getHash()];
auto it = cache.find(spec.size);
if (it != cache.end())
return it->second;
// Font does not yet exist
- gui::IGUIFont *font = nullptr;
- if (spec.mode == FM_Simple || spec.mode == FM_SimpleMono)
- font = initSimpleFont(spec);
- else
- font = initFont(spec);
+ gui::IGUIFont *font = initFont(spec);
+
+ if (!font && !may_fail) {
+ errorstream << "Minetest cannot continue without a valid font. "
+ "Please correct the 'font_path' setting or install the font "
+ "file in the proper location." << std::endl;
+ abort();
+ }
m_font_cache[spec.getHash()][spec.size] = font;
@@ -138,13 +133,7 @@ irr::gui::IGUIFont *FontEngine::getFont(FontSpec spec)
/******************************************************************************/
unsigned int FontEngine::getTextHeight(const FontSpec &spec)
{
- irr::gui::IGUIFont *font = getFont(spec);
-
- // use current skin font as fallback
- if (font == NULL) {
- font = m_env->getSkin()->getFont();
- }
- FATAL_ERROR_IF(font == NULL, "Could not get skin font");
+ gui::IGUIFont *font = getFont(spec);
return font->getDimension(L"Some unimportant example String").Height;
}
@@ -152,28 +141,15 @@ unsigned int FontEngine::getTextHeight(const FontSpec &spec)
/******************************************************************************/
unsigned int FontEngine::getTextWidth(const std::wstring &text, const FontSpec &spec)
{
- irr::gui::IGUIFont *font = getFont(spec);
-
- // use current skin font as fallback
- if (font == NULL) {
- font = m_env->getSkin()->getFont();
- }
- FATAL_ERROR_IF(font == NULL, "Could not get font");
+ gui::IGUIFont *font = getFont(spec);
return font->getDimension(text.c_str()).Width;
}
-
/** get line height for a specific font (including empty room between lines) */
unsigned int FontEngine::getLineHeight(const FontSpec &spec)
{
- irr::gui::IGUIFont *font = getFont(spec);
-
- // use current skin font as fallback
- if (font == NULL) {
- font = m_env->getSkin()->getFont();
- }
- FATAL_ERROR_IF(font == NULL, "Could not get font");
+ gui::IGUIFont *font = getFont(spec);
return font->getDimension(L"Some unimportant example String").Height
+ font->getKerningHeight();
@@ -187,13 +163,6 @@ unsigned int FontEngine::getDefaultFontSize()
unsigned int FontEngine::getFontSize(FontMode mode)
{
- if (m_currentMode == FM_Simple) {
- if (mode == FM_Mono || mode == FM_SimpleMono)
- return m_default_size[FM_SimpleMono];
- else
- return m_default_size[FM_Simple];
- }
-
if (mode == FM_Unspecified)
return m_default_size[FM_Standard];
@@ -203,31 +172,12 @@ unsigned int FontEngine::getFontSize(FontMode mode)
/******************************************************************************/
void FontEngine::readSettings()
{
- if (USE_FREETYPE && g_settings->getBool("freetype")) {
- m_default_size[FM_Standard] = g_settings->getU16("font_size");
- m_default_size[FM_Fallback] = g_settings->getU16("fallback_font_size");
- m_default_size[FM_Mono] = g_settings->getU16("mono_font_size");
-
- /*~ DO NOT TRANSLATE THIS LITERALLY!
- This is a special string. Put either "no" or "yes"
- into the translation field (literally).
- Choose "yes" if the language requires use of the fallback
- font, "no" otherwise.
- The fallback font is (normally) required for languages with
- non-Latin script, like Chinese.
- When in doubt, test your translation. */
- m_currentMode = is_yes(gettext("needs_fallback_font")) ?
- FM_Fallback : FM_Standard;
-
- m_default_bold = g_settings->getBool("font_bold");
- m_default_italic = g_settings->getBool("font_italic");
-
- } else {
- m_currentMode = FM_Simple;
- }
+ m_default_size[FM_Standard] = g_settings->getU16("font_size");
+ m_default_size[_FM_Fallback] = g_settings->getU16("font_size");
+ m_default_size[FM_Mono] = g_settings->getU16("mono_font_size");
- m_default_size[FM_Simple] = g_settings->getU16("font_size");
- m_default_size[FM_SimpleMono] = g_settings->getU16("mono_font_size");
+ m_default_bold = g_settings->getBool("font_bold");
+ m_default_italic = g_settings->getBool("font_italic");
cleanCache();
updateFontCache();
@@ -238,22 +188,9 @@ void FontEngine::readSettings()
void FontEngine::updateSkin()
{
gui::IGUIFont *font = getFont();
+ assert(font);
- if (font)
- m_env->getSkin()->setFont(font);
- else
- errorstream << "FontEngine: Default font file: " <<
- "\n\t\"" << g_settings->get("font_path") << "\"" <<
- "\n\trequired for current screen configuration was not found" <<
- " or was invalid file format." <<
- "\n\tUsing irrlicht default font." << std::endl;
-
- // If we did fail to create a font our own make irrlicht find a default one
- font = m_env->getSkin()->getFont();
- FATAL_ERROR_IF(font == NULL, "Could not create/get font");
-
- u32 text_height = font->getDimension(L"Hello, world!").Height;
- infostream << "FontEngine: measured text_height=" << text_height << std::endl;
+ m_env->getSkin()->setFont(font);
}
/******************************************************************************/
@@ -271,18 +208,8 @@ gui::IGUIFont *FontEngine::initFont(const FontSpec &spec)
assert(spec.size != FONT_SIZE_UNSPECIFIED);
std::string setting_prefix = "";
-
- switch (spec.mode) {
- case FM_Fallback:
- setting_prefix = "fallback_";
- break;
- case FM_Mono:
- case FM_SimpleMono:
- setting_prefix = "mono_";
- break;
- default:
- break;
- }
+ if (spec.mode == FM_Mono)
+ setting_prefix = "mono_";
std::string setting_suffix = "";
if (spec.bold)
@@ -290,121 +217,52 @@ gui::IGUIFont *FontEngine::initFont(const FontSpec &spec)
if (spec.italic)
setting_suffix.append("_italic");
- u32 size = std::floor(RenderingEngine::getDisplayDensity() *
- g_settings->getFloat("gui_scaling") * spec.size);
+ u32 size = std::max<u32>(spec.size * RenderingEngine::getDisplayDensity() *
+ g_settings->getFloat("gui_scaling"), 1);
- if (size == 0) {
- errorstream << "FontEngine: attempt to use font size 0" << std::endl;
- errorstream << " display density: " << RenderingEngine::getDisplayDensity() << std::endl;
- abort();
+ // Constrain the font size to a certain multiple, if necessary
+ u16 divisible_by = g_settings->getU16(setting_prefix + "font_size_divisible_by");
+ if (divisible_by > 1) {
+ size = std::max<u32>(
+ std::round((double)size / divisible_by) * divisible_by, divisible_by);
}
+ sanity_check(size != 0);
+
u16 font_shadow = 0;
u16 font_shadow_alpha = 0;
g_settings->getU16NoEx(setting_prefix + "font_shadow", font_shadow);
g_settings->getU16NoEx(setting_prefix + "font_shadow_alpha",
font_shadow_alpha);
- std::string wanted_font_path;
- wanted_font_path = g_settings->get(setting_prefix + "font_path" + setting_suffix);
+ std::string path_setting;
+ if (spec.mode == _FM_Fallback)
+ path_setting = "fallback_font_path";
+ else
+ path_setting = setting_prefix + "font_path" + setting_suffix;
std::string fallback_settings[] = {
- wanted_font_path,
- g_settings->get("fallback_font_path"),
- Settings::getLayer(SL_DEFAULTS)->get(setting_prefix + "font_path")
+ g_settings->get(path_setting),
+ Settings::getLayer(SL_DEFAULTS)->get(path_setting)
};
-#if USE_FREETYPE
for (const std::string &font_path : fallback_settings) {
- irr::gui::IGUIFont *font = gui::CGUITTFont::createTTFont(m_env,
+ gui::CGUITTFont *font = gui::CGUITTFont::createTTFont(m_env,
font_path.c_str(), size, true, true, font_shadow,
font_shadow_alpha);
- if (font)
- return font;
-
- errorstream << "FontEngine: Cannot load '" << font_path <<
+ if (!font) {
+ errorstream << "FontEngine: Cannot load '" << font_path <<
"'. Trying to fall back to another path." << std::endl;
- }
-
-
- // give up
- errorstream << "minetest can not continue without a valid font. "
- "Please correct the 'font_path' setting or install the font "
- "file in the proper location" << std::endl;
-#else
- errorstream << "FontEngine: Tried to load freetype fonts but Minetest was"
- " not compiled with that library." << std::endl;
-#endif
- abort();
-}
-
-/** initialize a font without freetype */
-gui::IGUIFont *FontEngine::initSimpleFont(const FontSpec &spec)
-{
- assert(spec.mode == FM_Simple || spec.mode == FM_SimpleMono);
- assert(spec.size != FONT_SIZE_UNSPECIFIED);
-
- const std::string &font_path = g_settings->get(
- (spec.mode == FM_SimpleMono) ? "mono_font_path" : "font_path");
-
- size_t pos_dot = font_path.find_last_of('.');
- std::string basename = font_path;
- std::string ending = lowercase(font_path.substr(pos_dot));
-
- if (ending == ".ttf") {
- errorstream << "FontEngine: Found font \"" << font_path
- << "\" but freetype is not available." << std::endl;
- return nullptr;
- }
-
- if (ending == ".xml" || ending == ".png")
- basename = font_path.substr(0, pos_dot);
-
- u32 size = std::floor(
- RenderingEngine::getDisplayDensity() *
- g_settings->getFloat("gui_scaling") *
- spec.size);
-
- irr::gui::IGUIFont *font = nullptr;
- std::string font_extensions[] = { ".png", ".xml" };
-
- // Find nearest matching font scale
- // Does a "zig-zag motion" (positibe/negative), from 0 to MAX_FONT_SIZE_OFFSET
- for (s32 zoffset = 0; zoffset < MAX_FONT_SIZE_OFFSET * 2; zoffset++) {
- std::stringstream path;
-
- // LSB to sign
- s32 sign = (zoffset & 1) ? -1 : 1;
- s32 offset = zoffset >> 1;
-
- for (const std::string &ext : font_extensions) {
- path.str(""); // Clear
- path << basename << "_" << (size + offset * sign) << ext;
-
- if (!fs::PathExists(path.str()))
- continue;
-
- font = m_env->getFont(path.str().c_str());
-
- if (font) {
- verbosestream << "FontEngine: found font: " << path.str() << std::endl;
- break;
- }
+ continue;
}
- if (font)
- break;
- }
-
- // try name direct
- if (font == NULL) {
- if (fs::PathExists(font_path)) {
- font = m_env->getFont(font_path.c_str());
- if (font)
- verbosestream << "FontEngine: found font: " << font_path << std::endl;
+ if (spec.mode != _FM_Fallback) {
+ FontSpec spec2(spec);
+ spec2.mode = _FM_Fallback;
+ font->setFallback(getFont(spec2, true));
}
+ return font;
}
-
- return font;
+ return nullptr;
}
diff --git a/src/client/fontengine.h b/src/client/fontengine.h
index e27ef60e9..78608e517 100644
--- a/src/client/fontengine.h
+++ b/src/client/fontengine.h
@@ -20,22 +20,20 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#pragma once
#include <map>
-#include <vector>
#include "util/basic_macros.h"
#include "irrlichttypes.h"
#include <IGUIFont.h>
#include <IGUISkin.h>
#include <IGUIEnvironment.h>
#include "settings.h"
+#include "threading/mutex_auto_lock.h"
#define FONT_SIZE_UNSPECIFIED 0xFFFFFFFF
enum FontMode : u8 {
FM_Standard = 0,
FM_Mono,
- FM_Fallback,
- FM_Simple,
- FM_SimpleMono,
+ _FM_Fallback, // do not use directly
FM_MaxMode,
FM_Unspecified
};
@@ -47,7 +45,7 @@ struct FontSpec {
bold(bold),
italic(italic) {}
- u16 getHash()
+ u16 getHash() const
{
return (mode << 2) | (static_cast<u8>(bold) << 1) | static_cast<u8>(italic);
}
@@ -132,15 +130,14 @@ public:
void readSettings();
private:
+ irr::gui::IGUIFont *getFont(FontSpec spec, bool may_fail);
+
/** update content of font cache in case of a setting change made it invalid */
void updateFontCache();
- /** initialize a new font */
+ /** initialize a new TTF font */
gui::IGUIFont *initFont(const FontSpec &spec);
- /** initialize a font without freetype */
- gui::IGUIFont *initSimpleFont(const FontSpec &spec);
-
/** update current minetest skin with font changes */
void updateSkin();
@@ -150,6 +147,9 @@ private:
/** pointer to irrlicht gui environment */
gui::IGUIEnvironment* m_env = nullptr;
+ /** mutex used to protect font init and cache */
+ std::recursive_mutex m_font_mutex;
+
/** internal storage for caching fonts of different size */
std::map<unsigned int, irr::gui::IGUIFont*> m_font_cache[FM_MaxMode << 2];
@@ -160,8 +160,8 @@ private:
bool m_default_bold = false;
bool m_default_italic = false;
- /** current font engine mode */
- FontMode m_currentMode = FM_Standard;
+ /** default font engine mode (fixed) */
+ static const FontMode m_currentMode = FM_Standard;
DISABLE_CLASS_COPY(FontEngine);
};
diff --git a/src/client/game.cpp b/src/client/game.cpp
index a88972d53..4337d308e 100644
--- a/src/client/game.cpp
+++ b/src/client/game.cpp
@@ -68,6 +68,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "util/pointedthing.h"
#include "util/quicktune_shortcutter.h"
#include "irrlicht_changes/static_text.h"
+#include "irr_ptr.h"
#include "version.h"
#include "script/scripting_client.h"
#include "hud.h"
@@ -399,12 +400,7 @@ public:
};
-// before 1.8 there isn't a "integer interface", only float
-#if (IRRLICHT_VERSION_MAJOR == 1 && IRRLICHT_VERSION_MINOR < 8)
-typedef f32 SamplerLayer_t;
-#else
typedef s32 SamplerLayer_t;
-#endif
class GameGlobalShaderConstantSetter : public IShaderConstantSetter
@@ -512,38 +508,20 @@ public:
float eye_position_array[3];
v3f epos = m_client->getEnv().getLocalPlayer()->getEyePosition();
-#if (IRRLICHT_VERSION_MAJOR == 1 && IRRLICHT_VERSION_MINOR < 8)
- eye_position_array[0] = epos.X;
- eye_position_array[1] = epos.Y;
- eye_position_array[2] = epos.Z;
-#else
epos.getAs3Values(eye_position_array);
-#endif
m_eye_position_pixel.set(eye_position_array, services);
m_eye_position_vertex.set(eye_position_array, services);
if (m_client->getMinimap()) {
float minimap_yaw_array[3];
v3f minimap_yaw = m_client->getMinimap()->getYawVec();
-#if (IRRLICHT_VERSION_MAJOR == 1 && IRRLICHT_VERSION_MINOR < 8)
- minimap_yaw_array[0] = minimap_yaw.X;
- minimap_yaw_array[1] = minimap_yaw.Y;
- minimap_yaw_array[2] = minimap_yaw.Z;
-#else
minimap_yaw.getAs3Values(minimap_yaw_array);
-#endif
m_minimap_yaw.set(minimap_yaw_array, services);
}
float camera_offset_array[3];
v3f offset = intToFloat(m_client->getCamera()->getOffset(), BS);
-#if (IRRLICHT_VERSION_MAJOR == 1 && IRRLICHT_VERSION_MINOR < 8)
- camera_offset_array[0] = offset.X;
- camera_offset_array[1] = offset.Y;
- camera_offset_array[2] = offset.Z;
-#else
offset.getAs3Values(camera_offset_array);
-#endif
m_camera_offset_pixel.set(camera_offset_array, services);
m_camera_offset_vertex.set(camera_offset_array, services);
@@ -588,7 +566,7 @@ public:
}
};
-#ifdef __ANDROID__
+#ifdef HAVE_TOUCHSCREENGUI
#define SIZE_TAG "size[11,5.5]"
#else
#define SIZE_TAG "size[11,5.5,true]" // Fixed size on desktop
@@ -597,10 +575,19 @@ public:
/****************************************************************************
****************************************************************************/
-const float object_hit_delay = 0.2;
+const static float object_hit_delay = 0.2;
struct FpsControl {
- u32 last_time, busy_time, sleep_time;
+ FpsControl() : last_time(0), busy_time(0), sleep_time(0) {}
+
+ void reset();
+
+ void limit(IrrlichtDevice *device, f32 *dtime);
+
+ u32 getBusyMs() const { return busy_time / 1000; }
+
+ // all values in microseconds (us)
+ u64 last_time, busy_time, sleep_time;
};
@@ -650,6 +637,8 @@ struct ClientEventHandler
THE GAME
****************************************************************************/
+using PausedNodesList = std::vector<std::pair<irr_ptr<scene::IAnimatedMeshSceneNode>, float>>;
+
/* This is not intended to be a public class. If a public class becomes
* desirable then it may be better to create another 'wrapper' class that
* hides most of the stuff in this class (nothing in this class is required
@@ -662,6 +651,7 @@ public:
bool startup(bool *kill,
InputHandler *input,
+ RenderingEngine *rendering_engine,
const GameStartData &game_params,
std::string &error_message,
bool *reconnect,
@@ -672,8 +662,6 @@ public:
protected:
- void extendedResourceCleanup();
-
// Basic initialisation
bool init(const std::string &map_dir, const std::string &address,
u16 port, const SubgameSpec &gamespec);
@@ -697,6 +685,7 @@ protected:
bool handleCallbacks();
void processQueues();
void updateProfilers(const RunStats &stats, const FpsControl &draw_times, f32 dtime);
+ void updateDebugState();
void updateStats(RunStats *stats, const FpsControl &draw_times, f32 dtime);
void updateProfilerGraphs(ProfilerGraph *graph);
@@ -714,6 +703,7 @@ protected:
void toggleFast();
void toggleNoClip();
void toggleCinematic();
+ void toggleBlockBounds();
void toggleAutoforward();
void toggleMinimap(bool shift_pressed);
@@ -731,7 +721,7 @@ protected:
void updatePlayerControl(const CameraOrientation &cam);
void step(f32 *dtime);
void processClientEvents(CameraOrientation *cam);
- void updateCamera(u32 busy_time, f32 dtime);
+ void updateCamera(f32 dtime);
void updateSound(f32 dtime);
void processPlayerInteraction(f32 dtime, bool show_hud, bool show_debug);
/*!
@@ -759,10 +749,9 @@ protected:
const ItemStack &selected_item, const ItemStack &hand_item, f32 dtime);
void updateFrame(ProfilerGraph *graph, RunStats *stats, f32 dtime,
const CameraOrientation &cam);
+ void updateShadows();
// Misc
- void limitFps(FpsControl *fps_timings, f32 *dtime);
-
void showOverlayMessage(const char *msg, float dtime, int percent,
bool draw_clouds = true);
@@ -799,6 +788,9 @@ private:
void showDeathFormspec();
void showPauseMenu();
+ void pauseAnimation();
+ void resumeAnimation();
+
// ClientEvent handlers
void handleClientEvent_None(ClientEvent *event, CameraOrientation *cam);
void handleClientEvent_PlayerDamage(ClientEvent *event, CameraOrientation *cam);
@@ -819,13 +811,15 @@ private:
CameraOrientation *cam);
void handleClientEvent_CloudParams(ClientEvent *event, CameraOrientation *cam);
- void updateChat(f32 dtime, const v2u32 &screensize);
+ void updateChat(f32 dtime);
bool nodePlacement(const ItemDefinition &selected_def, const ItemStack &selected_item,
const v3s16 &nodepos, const v3s16 &neighbourpos, const PointedThing &pointed,
const NodeMetadata *meta);
static const ClientEventHandler clientEventHandler[CLIENTEVENT_MAX];
+ f32 getSensitivityScaleFactor() const;
+
InputHandler *input = nullptr;
Client *client = nullptr;
@@ -870,12 +864,14 @@ private:
these items (e.g. device)
*/
IrrlichtDevice *device;
+ RenderingEngine *m_rendering_engine;
video::IVideoDriver *driver;
scene::ISceneManager *smgr;
bool *kill;
std::string *error_message;
bool *reconnect_requested;
scene::ISceneNode *skybox;
+ PausedNodesList paused_animated_nodes;
bool simple_singleplayer_mode;
/* End 'cache' */
@@ -912,8 +908,10 @@ private:
bool m_does_lost_focus_pause_game = false;
int m_reset_HW_buffer_counter = 0;
-#ifdef __ANDROID__
+#ifdef HAVE_TOUCHSCREENGUI
bool m_cache_hold_aux1;
+#endif
+#ifdef __ANDROID__
bool m_android_chat_open;
#endif
};
@@ -951,7 +949,7 @@ Game::Game() :
readSettings();
-#ifdef __ANDROID__
+#ifdef HAVE_TOUCHSCREENGUI
m_cache_hold_aux1 = false; // This is initialised properly later
#endif
@@ -982,7 +980,7 @@ Game::~Game()
delete itemdef_manager;
delete draw_control;
- extendedResourceCleanup();
+ clearTextureNameCache();
g_settings->deregisterChangedCallback("doubletap_jump",
&settingChangedCallback, this);
@@ -1010,6 +1008,7 @@ Game::~Game()
bool Game::startup(bool *kill,
InputHandler *input,
+ RenderingEngine *rendering_engine,
const GameStartData &start_data,
std::string &error_message,
bool *reconnect,
@@ -1017,21 +1016,21 @@ bool Game::startup(bool *kill,
{
// "cache"
- this->device = RenderingEngine::get_raw_device();
+ m_rendering_engine = rendering_engine;
+ device = m_rendering_engine->get_raw_device();
this->kill = kill;
this->error_message = &error_message;
- this->reconnect_requested = reconnect;
+ reconnect_requested = reconnect;
this->input = input;
this->chat_backend = chat_backend;
- this->simple_singleplayer_mode = start_data.isSinglePlayer();
+ simple_singleplayer_mode = start_data.isSinglePlayer();
input->keycache.populate();
driver = device->getVideoDriver();
- smgr = RenderingEngine::get_scene_manager();
+ smgr = m_rendering_engine->get_scene_manager();
- RenderingEngine::get_scene_manager()->getParameters()->
- setAttribute(scene::OBJ_LOADER_IGNORE_MATERIAL_FILES, true);
+ smgr->getParameters()->setAttribute(scene::OBJ_LOADER_IGNORE_MATERIAL_FILES, true);
// Reinit runData
runData = GameRunData();
@@ -1052,7 +1051,7 @@ bool Game::startup(bool *kill,
if (!createClient(start_data))
return false;
- RenderingEngine::initialize(client, hud);
+ m_rendering_engine->initialize(client, hud);
return true;
}
@@ -1064,18 +1063,18 @@ void Game::run()
RunStats stats = { 0 };
CameraOrientation cam_view_target = { 0 };
CameraOrientation cam_view = { 0 };
- FpsControl draw_times = { 0 };
+ FpsControl draw_times;
f32 dtime; // in seconds
/* Clear the profiler */
Profiler::GraphValues dummyvalues;
g_profiler->graphGet(dummyvalues);
- draw_times.last_time = RenderingEngine::get_timer_time();
+ draw_times.reset();
set_light_table(g_settings->getFloat("display_gamma"));
-#ifdef __ANDROID__
+#ifdef HAVE_TOUCHSCREENGUI
m_cache_hold_aux1 = g_settings->getBool("fast_move")
&& client->checkPrivilege("fast");
#endif
@@ -1083,12 +1082,12 @@ void Game::run()
irr::core::dimension2d<u32> previous_screen_size(g_settings->getU16("screen_w"),
g_settings->getU16("screen_h"));
- while (RenderingEngine::run()
+ while (m_rendering_engine->run()
&& !(*kill || g_gamecallback->shutdown_requested
|| (server && server->isShutdownRequested()))) {
const irr::core::dimension2d<u32> &current_screen_size =
- RenderingEngine::get_video_driver()->getScreenSize();
+ m_rendering_engine->get_video_driver()->getScreenSize();
// Verify if window size has changed and save it if it's the case
// Ensure evaluating settings->getBool after verifying screensize
// First condition is cheaper
@@ -1101,9 +1100,9 @@ void Game::run()
}
// Calculate dtime =
- // RenderingEngine::run() from this iteration
+ // m_rendering_engine->run() from this iteration
// + Sleep time until the wanted FPS are reached
- limitFps(&draw_times, &dtime);
+ draw_times.limit(device, &dtime);
// Prepare render data for next iteration
@@ -1120,6 +1119,7 @@ void Game::run()
m_game_ui->clearInfoText();
hud->resizeHotbar();
+
updateProfilers(stats, draw_times, dtime);
processUserInput(dtime);
// Update camera before player movement to avoid camera lag of one frame
@@ -1131,10 +1131,11 @@ void Game::run()
updatePlayerControl(cam_view);
step(&dtime);
processClientEvents(&cam_view_target);
- updateCamera(draw_times.busy_time, dtime);
+ updateDebugState();
+ updateCamera(dtime);
updateSound(dtime);
processPlayerInteraction(dtime, m_game_ui->m_flags.show_hud,
- m_game_ui->m_flags.show_debug);
+ m_game_ui->m_flags.show_basic_debug);
updateFrame(&graph, &stats, dtime, cam_view);
updateProfilerGraphs(&graph);
@@ -1150,7 +1151,7 @@ void Game::run()
void Game::shutdown()
{
- RenderingEngine::finalize();
+ m_rendering_engine->finalize();
#if IRRLICHT_VERSION_MAJOR == 1 && IRRLICHT_VERSION_MINOR <= 8
if (g_settings->get("3d_mode") == "pageflip") {
driver->setRenderTarget(irr::video::ERT_STEREO_BOTH_BUFFERS);
@@ -1288,9 +1289,8 @@ bool Game::createSingleplayerServer(const std::string &map_dir,
}
if (bind_addr.isIPv6() && !g_settings->getBool("enable_ipv6")) {
- *error_message = "Unable to listen on " +
- bind_addr.serializeString() +
- " because IPv6 is disabled";
+ *error_message = fmtgettext("Unable to listen on %s because IPv6 is disabled",
+ bind_addr.serializeString().c_str());
errorstream << *error_message << std::endl;
return false;
}
@@ -1306,7 +1306,7 @@ bool Game::createClient(const GameStartData &start_data)
{
showOverlayMessage(N_("Creating client..."), 0, 10);
- draw_control = new MapDrawControl;
+ draw_control = new MapDrawControl();
if (!draw_control)
return false;
@@ -1323,7 +1323,7 @@ bool Game::createClient(const GameStartData &start_data)
if (!could_connect) {
if (error_message->empty() && !connect_aborted) {
// Should not happen if error messages are set properly
- *error_message = "Connection failed for unknown reason";
+ *error_message = gettext("Connection failed for unknown reason");
errorstream << *error_message << std::endl;
}
return false;
@@ -1332,7 +1332,7 @@ bool Game::createClient(const GameStartData &start_data)
if (!getServerContent(&connect_aborted)) {
if (error_message->empty() && !connect_aborted) {
// Should not happen if error messages are set properly
- *error_message = "Connection failed for unknown reason";
+ *error_message = gettext("Connection failed for unknown reason");
errorstream << *error_message << std::endl;
}
return false;
@@ -1347,9 +1347,9 @@ bool Game::createClient(const GameStartData &start_data)
/* Camera
*/
- camera = new Camera(*draw_control, client);
- if (!camera->successfullyCreated(*error_message))
- return false;
+ camera = new Camera(*draw_control, client, m_rendering_engine);
+ if (client->modsLoaded())
+ client->getScript()->on_camera_ready(camera);
client->setCamera(camera);
/* Clouds
@@ -1359,7 +1359,7 @@ bool Game::createClient(const GameStartData &start_data)
/* Skybox
*/
- sky = new Sky(-1, texture_src, shader_src);
+ sky = new Sky(-1, m_rendering_engine, texture_src, shader_src);
scsf->setSky(sky);
skybox = NULL; // This is used/set later on in the main run loop
@@ -1381,16 +1381,28 @@ bool Game::createClient(const GameStartData &start_data)
std::wstring str = utf8_to_wide(PROJECT_NAME_C);
str += L" ";
str += utf8_to_wide(g_version_hash);
+ {
+ const wchar_t *text = nullptr;
+ if (simple_singleplayer_mode)
+ text = wgettext("Singleplayer");
+ else
+ text = wgettext("Multiplayer");
+ str += L" [";
+ str += text;
+ str += L"]";
+ delete[] text;
+ }
str += L" [";
str += driver->getName();
str += L"]";
+
device->setWindowCaption(str.c_str());
LocalPlayer *player = client->getEnv().getLocalPlayer();
player->hurt_tilt_timer = 0;
player->hurt_tilt_strength = 0;
- hud = new Hud(guienv, client, player, &player->inventory);
+ hud = new Hud(client, player, &player->inventory);
mapper = client->getMinimap();
@@ -1439,7 +1451,6 @@ bool Game::connectToServer(const GameStartData &start_data,
connect_address.Resolve(start_data.address.c_str());
if (connect_address.isZero()) { // i.e. INADDR_ANY, IN6ADDR_ANY
- //connect_address.Resolve("localhost");
if (connect_address.isIPv6()) {
IPv6AddressBytes addr_bytes;
addr_bytes.bytes[15] = 1;
@@ -1450,24 +1461,30 @@ bool Game::connectToServer(const GameStartData &start_data,
local_server_mode = true;
}
} catch (ResolveError &e) {
- *error_message = std::string("Couldn't resolve address: ") + e.what();
+ *error_message = fmtgettext("Couldn't resolve address: %s", e.what());
+
errorstream << *error_message << std::endl;
return false;
}
if (connect_address.isIPv6() && !g_settings->getBool("enable_ipv6")) {
- *error_message = "Unable to connect to " +
- connect_address.serializeString() +
- " because IPv6 is disabled";
+ *error_message = fmtgettext("Unable to connect to %s because IPv6 is disabled", connect_address.serializeString().c_str());
errorstream << *error_message << std::endl;
return false;
}
- client = new Client(start_data.name.c_str(),
- start_data.password, start_data.address,
- *draw_control, texture_src, shader_src,
- itemdef_manager, nodedef_manager, sound, eventmgr,
- connect_address.isIPv6(), m_game_ui.get());
+ try {
+ client = new Client(start_data.name.c_str(),
+ start_data.password, start_data.address,
+ *draw_control, texture_src, shader_src,
+ itemdef_manager, nodedef_manager, sound, eventmgr,
+ m_rendering_engine, connect_address.isIPv6(), m_game_ui.get());
+ client->migrateModStorage();
+ } catch (const BaseException &e) {
+ *error_message = fmtgettext("Error creating client: %s", e.what());
+ errorstream << *error_message << std::endl;
+ return false;
+ }
client->m_simple_singleplayer_mode = simple_singleplayer_mode;
@@ -1485,15 +1502,15 @@ bool Game::connectToServer(const GameStartData &start_data,
try {
input->clear();
- FpsControl fps_control = { 0 };
+ FpsControl fps_control;
f32 dtime;
f32 wait_time = 0; // in seconds
- fps_control.last_time = RenderingEngine::get_timer_time();
+ fps_control.reset();
- while (RenderingEngine::run()) {
+ while (m_rendering_engine->run()) {
- limitFps(&fps_control, &dtime);
+ fps_control.limit(device, &dtime);
// Update client and server
client->step(dtime);
@@ -1512,8 +1529,7 @@ bool Game::connectToServer(const GameStartData &start_data,
break;
if (client->accessDenied()) {
- *error_message = "Access denied. Reason: "
- + client->accessDeniedReason();
+ *error_message = fmtgettext("Access denied. Reason: %s", client->accessDeniedReason().c_str());
*reconnect_requested = client->reconnectRequested();
errorstream << *error_message << std::endl;
break;
@@ -1528,7 +1544,7 @@ bool Game::connectToServer(const GameStartData &start_data,
if (client->m_is_registration_confirmation_state) {
if (registration_confirmation_shown) {
// Keep drawing the GUI
- RenderingEngine::draw_menu_scene(guienv, dtime, true);
+ m_rendering_engine->draw_menu_scene(guienv, dtime, true);
} else {
registration_confirmation_shown = true;
(new GUIConfirmRegistration(guienv, guienv->getRootGUIElement(), -1,
@@ -1539,7 +1555,7 @@ bool Game::connectToServer(const GameStartData &start_data,
wait_time += dtime;
// Only time out if we aren't waiting for the server we started
if (!start_data.address.empty() && wait_time > 10) {
- *error_message = "Connection timed out.";
+ *error_message = gettext("Connection timed out.");
errorstream << *error_message << std::endl;
break;
}
@@ -1561,14 +1577,14 @@ bool Game::getServerContent(bool *aborted)
{
input->clear();
- FpsControl fps_control = { 0 };
+ FpsControl fps_control;
f32 dtime; // in seconds
- fps_control.last_time = RenderingEngine::get_timer_time();
+ fps_control.reset();
- while (RenderingEngine::run()) {
+ while (m_rendering_engine->run()) {
- limitFps(&fps_control, &dtime);
+ fps_control.limit(device, &dtime);
// Update client and server
client->step(dtime);
@@ -1587,7 +1603,7 @@ bool Game::getServerContent(bool *aborted)
return false;
if (client->getState() < LC_Init) {
- *error_message = "Client disconnected";
+ *error_message = gettext("Client disconnected");
errorstream << *error_message << std::endl;
return false;
}
@@ -1604,17 +1620,17 @@ bool Game::getServerContent(bool *aborted)
if (!client->itemdefReceived()) {
const wchar_t *text = wgettext("Item definitions...");
progress = 25;
- RenderingEngine::draw_load_screen(text, guienv, texture_src,
+ m_rendering_engine->draw_load_screen(text, guienv, texture_src,
dtime, progress);
delete[] text;
} else if (!client->nodedefReceived()) {
const wchar_t *text = wgettext("Node definitions...");
progress = 30;
- RenderingEngine::draw_load_screen(text, guienv, texture_src,
+ m_rendering_engine->draw_load_screen(text, guienv, texture_src,
dtime, progress);
delete[] text;
} else {
- std::stringstream message;
+ std::ostringstream message;
std::fixed(message);
message.precision(0);
float receive = client->mediaReceiveProgress() * 100;
@@ -1637,7 +1653,7 @@ bool Game::getServerContent(bool *aborted)
}
progress = 30 + client->mediaReceiveProgress() * 35 + 0.5;
- RenderingEngine::draw_load_screen(utf8_to_wide(message.str()), guienv,
+ m_rendering_engine->draw_load_screen(utf8_to_wide(message.str()), guienv,
texture_src, dtime, progress);
}
}
@@ -1669,8 +1685,7 @@ inline void Game::updateInteractTimers(f32 dtime)
inline bool Game::checkConnection()
{
if (client->accessDenied()) {
- *error_message = "Access denied. Reason: "
- + client->accessDeniedReason();
+ *error_message = fmtgettext("Access denied. Reason: %s", client->accessDeniedReason().c_str());
*reconnect_requested = client->reconnectRequested();
errorstream << *error_message << std::endl;
return false;
@@ -1723,6 +1738,25 @@ void Game::processQueues()
shader_src->processQueue();
}
+void Game::updateDebugState()
+{
+ const bool has_basic_debug = true;
+ bool has_debug = client->checkPrivilege("debug");
+
+ if (m_game_ui->m_flags.show_basic_debug) {
+ if (!has_basic_debug) {
+ m_game_ui->m_flags.show_basic_debug = false;
+ }
+ } else if (m_game_ui->m_flags.show_minimal_debug) {
+ if (has_basic_debug) {
+ m_game_ui->m_flags.show_basic_debug = true;
+ }
+ }
+ if (!has_basic_debug)
+ hud->disableBlockBounds();
+ if (!has_debug)
+ draw_control->show_wireframe = false;
+}
void Game::updateProfilers(const RunStats &stats, const FpsControl &draw_times,
f32 dtime)
@@ -1747,10 +1781,10 @@ void Game::updateProfilers(const RunStats &stats, const FpsControl &draw_times,
}
// Update update graphs
- g_profiler->graphAdd("Time non-rendering [ms]",
+ g_profiler->graphAdd("Time non-rendering [us]",
draw_times.busy_time - stats.drawtime);
- g_profiler->graphAdd("Sleep [ms]", draw_times.sleep_time);
+ g_profiler->graphAdd("Sleep [us]", draw_times.sleep_time);
g_profiler->graphAdd("FPS", 1.0f / dtime);
}
@@ -1783,9 +1817,9 @@ void Game::updateStats(RunStats *stats, const FpsControl &draw_times,
/* Busytime average and jitter calculation
*/
jp = &stats->busy_time_jitter;
- jp->avg = jp->avg + draw_times.busy_time * 0.02;
+ jp->avg = jp->avg + draw_times.getBusyMs() * 0.02;
- jitter = draw_times.busy_time - jp->avg;
+ jitter = draw_times.getBusyMs() - jp->avg;
if (jitter > jp->max)
jp->max = jitter;
@@ -1822,6 +1856,7 @@ void Game::processUserInput(f32 dtime)
else if (g_touchscreengui) {
/* on touchscreengui step may generate own input events which ain't
* what we want in case we just did clear them */
+ g_touchscreengui->show();
g_touchscreengui->step(dtime);
}
#endif
@@ -1904,24 +1939,18 @@ void Game::processKeyInput()
} else if (wasKeyDown(KeyType::INC_VOLUME)) {
if (g_settings->getBool("enable_sound")) {
float new_volume = rangelim(g_settings->getFloat("sound_volume") + 0.1f, 0.0f, 1.0f);
- wchar_t buf[100];
g_settings->setFloat("sound_volume", new_volume);
- const wchar_t *str = wgettext("Volume changed to %d%%");
- swprintf(buf, sizeof(buf) / sizeof(wchar_t), str, myround(new_volume * 100));
- delete[] str;
- m_game_ui->showStatusText(buf);
+ std::wstring msg = fwgettext("Volume changed to %d%%", myround(new_volume * 100));
+ m_game_ui->showStatusText(msg);
} else {
m_game_ui->showTranslatedStatusText("Sound system is disabled");
}
} else if (wasKeyDown(KeyType::DEC_VOLUME)) {
if (g_settings->getBool("enable_sound")) {
float new_volume = rangelim(g_settings->getFloat("sound_volume") - 0.1f, 0.0f, 1.0f);
- wchar_t buf[100];
g_settings->setFloat("sound_volume", new_volume);
- const wchar_t *str = wgettext("Volume changed to %d%%");
- swprintf(buf, sizeof(buf) / sizeof(wchar_t), str, myround(new_volume * 100));
- delete[] str;
- m_game_ui->showStatusText(buf);
+ std::wstring msg = fwgettext("Volume changed to %d%%", myround(new_volume * 100));
+ m_game_ui->showStatusText(msg);
} else {
m_game_ui->showTranslatedStatusText("Sound system is disabled");
}
@@ -1934,6 +1963,8 @@ void Game::processKeyInput()
toggleCinematic();
} else if (wasKeyDown(KeyType::SCREENSHOT)) {
client->makeScreenshot();
+ } else if (wasKeyDown(KeyType::TOGGLE_BLOCK_BOUNDS)) {
+ toggleBlockBounds();
} else if (wasKeyDown(KeyType::TOGGLE_HUD)) {
m_game_ui->toggleHud();
} else if (wasKeyDown(KeyType::MINIMAP)) {
@@ -2042,15 +2073,22 @@ void Game::openInventory()
InventoryLocation inventoryloc;
inventoryloc.setCurrentPlayer();
- if (!client->modsLoaded()
- || !client->getScript()->on_inventory_open(fs_src->m_client->getInventory(inventoryloc))) {
- TextDest *txt_dst = new TextDestPlayerInventory(client);
- auto *&formspec = m_game_ui->updateFormspec("");
- GUIFormSpecMenu::create(formspec, client, &input->joystick, fs_src,
- txt_dst, client->getFormspecPrepend(), sound);
+ if (client->modsLoaded() && client->getScript()->on_inventory_open(fs_src->m_client->getInventory(inventoryloc))) {
+ delete fs_src;
+ return;
+ }
- formspec->setFormSpec(fs_src->getForm(), inventoryloc);
+ if (fs_src->getForm().empty()) {
+ delete fs_src;
+ return;
}
+
+ TextDest *txt_dst = new TextDestPlayerInventory(client);
+ auto *&formspec = m_game_ui->updateFormspec("");
+ GUIFormSpecMenu::create(formspec, client, m_rendering_engine->get_gui_env(),
+ &input->joystick, fs_src, txt_dst, client->getFormspecPrepend(), sound);
+
+ formspec->setFormSpec(fs_src->getForm(), inventoryloc);
}
@@ -2138,7 +2176,7 @@ void Game::toggleFast()
m_game_ui->showTranslatedStatusText("Fast mode disabled");
}
-#ifdef __ANDROID__
+#ifdef HAVE_TOUCHSCREENGUI
m_cache_hold_aux1 = fast_move && has_fast_privs;
#endif
}
@@ -2171,6 +2209,32 @@ void Game::toggleCinematic()
m_game_ui->showTranslatedStatusText("Cinematic mode disabled");
}
+void Game::toggleBlockBounds()
+{
+ if (true /* basic_debug */) {
+ enum Hud::BlockBoundsMode newmode = hud->toggleBlockBounds();
+ switch (newmode) {
+ case Hud::BLOCK_BOUNDS_OFF:
+ m_game_ui->showTranslatedStatusText("Block bounds hidden");
+ break;
+ case Hud::BLOCK_BOUNDS_CURRENT:
+ m_game_ui->showTranslatedStatusText("Block bounds shown for current block");
+ break;
+ case Hud::BLOCK_BOUNDS_NEAR:
+ m_game_ui->showTranslatedStatusText("Block bounds shown for nearby blocks");
+ break;
+ case Hud::BLOCK_BOUNDS_MAX:
+ m_game_ui->showTranslatedStatusText("Block bounds shown for all blocks");
+ break;
+ default:
+ break;
+ }
+
+ } else {
+ m_game_ui->showTranslatedStatusText("Can't show block bounds (need 'basic_debug' privilege)");
+ }
+}
+
// Autoforward by toggling continuous forward.
void Game::toggleAutoforward()
{
@@ -2234,24 +2298,39 @@ void Game::toggleFog()
void Game::toggleDebug()
{
- // Initial / 4x toggle: Chat only
- // 1x toggle: Debug text with chat
+ // Initial: No debug info
+ // 1x toggle: Debug text
// 2x toggle: Debug text with profiler graph
- // 3x toggle: Debug text and wireframe
- if (!m_game_ui->m_flags.show_debug) {
- m_game_ui->m_flags.show_debug = true;
+ // 3x toggle: Debug text and wireframe (needs "debug" priv)
+ // Next toggle: Back to initial
+ //
+ // The debug text can be in 2 modes: minimal and basic.
+ // * Minimal: Only technical client info that not gameplay-relevant
+ // * Basic: Info that might give gameplay advantage, e.g. pos, angle
+ // Basic mode is always used.
+
+ const bool has_basic_debug = true;
+ if (!m_game_ui->m_flags.show_minimal_debug) {
+ m_game_ui->m_flags.show_minimal_debug = true;
+ if (has_basic_debug)
+ m_game_ui->m_flags.show_basic_debug = true;
m_game_ui->m_flags.show_profiler_graph = false;
draw_control->show_wireframe = false;
m_game_ui->showTranslatedStatusText("Debug info shown");
} else if (!m_game_ui->m_flags.show_profiler_graph && !draw_control->show_wireframe) {
+ if (has_basic_debug)
+ m_game_ui->m_flags.show_basic_debug = true;
m_game_ui->m_flags.show_profiler_graph = true;
m_game_ui->showTranslatedStatusText("Profiler graph shown");
} else if (!draw_control->show_wireframe && client->checkPrivilege("debug")) {
+ if (has_basic_debug)
+ m_game_ui->m_flags.show_basic_debug = true;
m_game_ui->m_flags.show_profiler_graph = false;
draw_control->show_wireframe = true;
m_game_ui->showTranslatedStatusText("Wireframe shown");
} else {
- m_game_ui->m_flags.show_debug = false;
+ m_game_ui->m_flags.show_minimal_debug = false;
+ m_game_ui->m_flags.show_basic_debug = false;
m_game_ui->m_flags.show_profiler_graph = false;
draw_control->show_wireframe = false;
if (client->checkPrivilege("debug")) {
@@ -2278,20 +2357,13 @@ void Game::increaseViewRange()
s16 range = g_settings->getS16("viewing_range");
s16 range_new = range + 10;
- wchar_t buf[255];
- const wchar_t *str;
if (range_new > 4000) {
range_new = 4000;
- str = wgettext("Viewing range is at maximum: %d");
- swprintf(buf, sizeof(buf) / sizeof(wchar_t), str, range_new);
- delete[] str;
- m_game_ui->showStatusText(buf);
-
+ std::wstring msg = fwgettext("Viewing range is at maximum: %d", range_new);
+ m_game_ui->showStatusText(msg);
} else {
- str = wgettext("Viewing range changed to %d");
- swprintf(buf, sizeof(buf) / sizeof(wchar_t), str, range_new);
- delete[] str;
- m_game_ui->showStatusText(buf);
+ std::wstring msg = fwgettext("Viewing range changed to %d", range_new);
+ m_game_ui->showStatusText(msg);
}
g_settings->set("viewing_range", itos(range_new));
}
@@ -2302,19 +2374,13 @@ void Game::decreaseViewRange()
s16 range = g_settings->getS16("viewing_range");
s16 range_new = range - 10;
- wchar_t buf[255];
- const wchar_t *str;
if (range_new < 20) {
range_new = 20;
- str = wgettext("Viewing range is at minimum: %d");
- swprintf(buf, sizeof(buf) / sizeof(wchar_t), str, range_new);
- delete[] str;
- m_game_ui->showStatusText(buf);
+ std::wstring msg = fwgettext("Viewing range is at minimum: %d", range_new);
+ m_game_ui->showStatusText(msg);
} else {
- str = wgettext("Viewing range changed to %d");
- swprintf(buf, sizeof(buf) / sizeof(wchar_t), str, range_new);
- delete[] str;
- m_game_ui->showStatusText(buf);
+ std::wstring msg = fwgettext("Viewing range changed to %d", range_new);
+ m_game_ui->showStatusText(msg);
}
g_settings->set("viewing_range", itos(range_new));
}
@@ -2337,7 +2403,6 @@ void Game::checkZoomEnabled()
m_game_ui->showTranslatedStatusText("Zoom currently disabled by game or mod");
}
-
void Game::updateCameraDirection(CameraOrientation *cam, float dtime)
{
if ((device->isWindowActive() && device->isWindowFocused()
@@ -2373,6 +2438,18 @@ void Game::updateCameraDirection(CameraOrientation *cam, float dtime)
}
}
+// Get the factor to multiply with sensitivity to get the same mouse/joystick
+// responsiveness independently of FOV.
+f32 Game::getSensitivityScaleFactor() const
+{
+ f32 fov_y = client->getCamera()->getFovY();
+
+ // Multiply by a constant such that it becomes 1.0 at 72 degree FOV and
+ // 16:9 aspect ratio to minimize disruption of existing sensitivity
+ // settings.
+ return tan(fov_y / 2.0f) * 1.3763818698f;
+}
+
void Game::updateCameraOrientation(CameraOrientation *cam, float dtime)
{
#ifdef HAVE_TOUCHSCREENGUI
@@ -2388,8 +2465,9 @@ void Game::updateCameraOrientation(CameraOrientation *cam, float dtime)
dist.Y = -dist.Y;
}
- cam->camera_yaw -= dist.X * m_cache_mouse_sensitivity;
- cam->camera_pitch += dist.Y * m_cache_mouse_sensitivity;
+ f32 sens_scale = getSensitivityScaleFactor();
+ cam->camera_yaw -= dist.X * m_cache_mouse_sensitivity * sens_scale;
+ cam->camera_pitch += dist.Y * m_cache_mouse_sensitivity * sens_scale;
if (dist.X != 0 || dist.Y != 0)
input->setMousePos(center.X, center.Y);
@@ -2398,7 +2476,8 @@ void Game::updateCameraOrientation(CameraOrientation *cam, float dtime)
#endif
if (m_cache_enable_joysticks) {
- f32 c = m_cache_joystick_frustum_sensitivity * (1.f / 32767.f) * dtime;
+ f32 sens_scale = getSensitivityScaleFactor();
+ f32 c = m_cache_joystick_frustum_sensitivity * dtime * sens_scale;
cam->camera_yaw -= input->joystick.getAxisWithoutDead(JA_FRUSTUM_HORIZONTAL) * c;
cam->camera_pitch += input->joystick.getAxisWithoutDead(JA_FRUSTUM_VERTICAL) * c;
}
@@ -2409,71 +2488,46 @@ void Game::updateCameraOrientation(CameraOrientation *cam, float dtime)
void Game::updatePlayerControl(const CameraOrientation &cam)
{
- //TimeTaker tt("update player control", NULL, PRECISION_NANO);
+ LocalPlayer *player = client->getEnv().getLocalPlayer();
- // DO NOT use the isKeyDown method for the forward, backward, left, right
- // buttons, as the code that uses the controls needs to be able to
- // distinguish between the two in order to know when to use joysticks.
+ //TimeTaker tt("update player control", NULL, PRECISION_NANO);
PlayerControl control(
- input->isKeyDown(KeyType::FORWARD),
- input->isKeyDown(KeyType::BACKWARD),
- input->isKeyDown(KeyType::LEFT),
- input->isKeyDown(KeyType::RIGHT),
- isKeyDown(KeyType::JUMP),
- isKeyDown(KeyType::SPECIAL1),
+ isKeyDown(KeyType::FORWARD),
+ isKeyDown(KeyType::BACKWARD),
+ isKeyDown(KeyType::LEFT),
+ isKeyDown(KeyType::RIGHT),
+ isKeyDown(KeyType::JUMP) || player->getAutojump(),
+ isKeyDown(KeyType::AUX1),
isKeyDown(KeyType::SNEAK),
isKeyDown(KeyType::ZOOM),
isKeyDown(KeyType::DIG),
isKeyDown(KeyType::PLACE),
cam.camera_pitch,
cam.camera_yaw,
- input->joystick.getAxisWithoutDead(JA_SIDEWARD_MOVE),
- input->joystick.getAxisWithoutDead(JA_FORWARD_MOVE)
+ input->getMovementSpeed(),
+ input->getMovementDirection()
);
- u32 keypress_bits = (
- ( (u32)(isKeyDown(KeyType::FORWARD) & 0x1) << 0) |
- ( (u32)(isKeyDown(KeyType::BACKWARD) & 0x1) << 1) |
- ( (u32)(isKeyDown(KeyType::LEFT) & 0x1) << 2) |
- ( (u32)(isKeyDown(KeyType::RIGHT) & 0x1) << 3) |
- ( (u32)(isKeyDown(KeyType::JUMP) & 0x1) << 4) |
- ( (u32)(isKeyDown(KeyType::SPECIAL1) & 0x1) << 5) |
- ( (u32)(isKeyDown(KeyType::SNEAK) & 0x1) << 6) |
- ( (u32)(isKeyDown(KeyType::DIG) & 0x1) << 7) |
- ( (u32)(isKeyDown(KeyType::PLACE) & 0x1) << 8) |
- ( (u32)(isKeyDown(KeyType::ZOOM) & 0x1) << 9)
- );
+ // autoforward if set: move towards pointed position at maximum speed
+ if (player->getPlayerSettings().continuous_forward &&
+ client->activeObjectsReceived() && !player->isDead()) {
+ control.movement_speed = 1.0f;
+ control.movement_direction = 0.0f;
+ }
-#ifdef ANDROID
- /* For Android, simulate holding down AUX1 (fast move) if the user has
+#ifdef HAVE_TOUCHSCREENGUI
+ /* For touch, simulate holding down AUX1 (fast move) if the user has
* the fast_move setting toggled on. If there is an aux1 key defined for
- * Android then its meaning is inverted (i.e. holding aux1 means walk and
+ * touch then its meaning is inverted (i.e. holding aux1 means walk and
* not fast)
*/
if (m_cache_hold_aux1) {
control.aux1 = control.aux1 ^ true;
- keypress_bits ^= ((u32)(1U << 5));
}
#endif
- LocalPlayer *player = client->getEnv().getLocalPlayer();
-
- // autojump if set: simulate "jump" key
- if (player->getAutojump()) {
- control.jump = true;
- keypress_bits |= 1U << 4;
- }
-
- // autoforward if set: simulate "up" key
- if (player->getPlayerSettings().continuous_forward &&
- client->activeObjectsReceived() && !player->isDead()) {
- control.up = true;
- keypress_bits |= 1U << 0;
- }
-
client->setPlayerControl(control);
- player->keyPressed = keypress_bits;
//tt.stop();
}
@@ -2487,6 +2541,9 @@ inline void Game::step(f32 *dtime)
if (can_be_and_is_paused) { // This is for a singleplayer server
*dtime = 0; // No time passes
} else {
+ if (simple_singleplayer_mode && !paused_animated_nodes.empty())
+ resumeAnimation();
+
if (server)
server->step(*dtime);
@@ -2494,6 +2551,33 @@ inline void Game::step(f32 *dtime)
}
}
+static void pauseNodeAnimation(PausedNodesList &paused, scene::ISceneNode *node) {
+ if (!node)
+ return;
+ for (auto &&child: node->getChildren())
+ pauseNodeAnimation(paused, child);
+ if (node->getType() != scene::ESNT_ANIMATED_MESH)
+ return;
+ auto animated_node = static_cast<scene::IAnimatedMeshSceneNode *>(node);
+ float speed = animated_node->getAnimationSpeed();
+ if (!speed)
+ return;
+ paused.push_back({grab(animated_node), speed});
+ animated_node->setAnimationSpeed(0.0f);
+}
+
+void Game::pauseAnimation()
+{
+ pauseNodeAnimation(paused_animated_nodes, smgr->getRootSceneNode());
+}
+
+void Game::resumeAnimation()
+{
+ for (auto &&pair: paused_animated_nodes)
+ pair.first->setAnimationSpeed(pair.second);
+ paused_animated_nodes.clear();
+}
+
const ClientEventHandler Game::clientEventHandler[CLIENTEVENT_MAX] = {
{&Game::handleClientEvent_None},
{&Game::handleClientEvent_PlayerDamage},
@@ -2527,14 +2611,18 @@ void Game::handleClientEvent_PlayerDamage(ClientEvent *event, CameraOrientation
// Damage flash and hurt tilt are not used at death
if (client->getHP() > 0) {
- runData.damage_flash += 95.0f + 3.2f * event->player_damage.amount;
- runData.damage_flash = MYMIN(runData.damage_flash, 127.0f);
-
LocalPlayer *player = client->getEnv().getLocalPlayer();
+ f32 hp_max = player->getCAO() ?
+ player->getCAO()->getProperties().hp_max : PLAYER_MAX_HP_DEFAULT;
+ f32 damage_ratio = event->player_damage.amount / hp_max;
+
+ runData.damage_flash += 95.0f + 64.f * damage_ratio;
+ runData.damage_flash = MYMIN(runData.damage_flash, 127.0f);
+
player->hurt_tilt_timer = 1.5f;
player->hurt_tilt_strength =
- rangelim(event->player_damage.amount / 4.0f, 1.0f, 4.0f);
+ rangelim(damage_ratio * 5.0f, 1.0f, 4.0f);
}
// Play damage sound
@@ -2578,8 +2666,8 @@ void Game::handleClientEvent_ShowFormSpec(ClientEvent *event, CameraOrientation
new TextDestPlayerInventory(client, *(event->show_formspec.formname));
auto *&formspec = m_game_ui->updateFormspec(*(event->show_formspec.formname));
- GUIFormSpecMenu::create(formspec, client, &input->joystick,
- fs_src, txt_dst, client->getFormspecPrepend(), sound);
+ GUIFormSpecMenu::create(formspec, client, m_rendering_engine->get_gui_env(),
+ &input->joystick, fs_src, txt_dst, client->getFormspecPrepend(), sound);
}
delete event->show_formspec.formspec;
@@ -2591,8 +2679,8 @@ void Game::handleClientEvent_ShowLocalFormSpec(ClientEvent *event, CameraOrienta
FormspecFormSource *fs_src = new FormspecFormSource(*event->show_formspec.formspec);
LocalFormspecHandler *txt_dst =
new LocalFormspecHandler(*event->show_formspec.formname, client);
- GUIFormSpecMenu::create(m_game_ui->getFormspecGUI(), client, &input->joystick,
- fs_src, txt_dst, client->getFormspecPrepend(), sound);
+ GUIFormSpecMenu::create(m_game_ui->getFormspecGUI(), client, m_rendering_engine->get_gui_env(),
+ &input->joystick, fs_src, txt_dst, client->getFormspecPrepend(), sound);
delete event->show_formspec.formspec;
delete event->show_formspec.formname;
@@ -2609,48 +2697,33 @@ void Game::handleClientEvent_HudAdd(ClientEvent *event, CameraOrientation *cam)
{
LocalPlayer *player = client->getEnv().getLocalPlayer();
- u32 server_id = event->hudadd.server_id;
+ u32 server_id = event->hudadd->server_id;
// ignore if we already have a HUD with that ID
auto i = m_hud_server_to_client.find(server_id);
if (i != m_hud_server_to_client.end()) {
- delete event->hudadd.pos;
- delete event->hudadd.name;
- delete event->hudadd.scale;
- delete event->hudadd.text;
- delete event->hudadd.align;
- delete event->hudadd.offset;
- delete event->hudadd.world_pos;
- delete event->hudadd.size;
- delete event->hudadd.text2;
+ delete event->hudadd;
return;
}
HudElement *e = new HudElement;
- e->type = (HudElementType)event->hudadd.type;
- e->pos = *event->hudadd.pos;
- e->name = *event->hudadd.name;
- e->scale = *event->hudadd.scale;
- e->text = *event->hudadd.text;
- e->number = event->hudadd.number;
- e->item = event->hudadd.item;
- e->dir = event->hudadd.dir;
- e->align = *event->hudadd.align;
- e->offset = *event->hudadd.offset;
- e->world_pos = *event->hudadd.world_pos;
- e->size = *event->hudadd.size;
- e->z_index = event->hudadd.z_index;
- e->text2 = *event->hudadd.text2;
+ e->type = static_cast<HudElementType>(event->hudadd->type);
+ e->pos = event->hudadd->pos;
+ e->name = event->hudadd->name;
+ e->scale = event->hudadd->scale;
+ e->text = event->hudadd->text;
+ e->number = event->hudadd->number;
+ e->item = event->hudadd->item;
+ e->dir = event->hudadd->dir;
+ e->align = event->hudadd->align;
+ e->offset = event->hudadd->offset;
+ e->world_pos = event->hudadd->world_pos;
+ e->size = event->hudadd->size;
+ e->z_index = event->hudadd->z_index;
+ e->text2 = event->hudadd->text2;
+ e->style = event->hudadd->style;
m_hud_server_to_client[server_id] = player->addHud(e);
- delete event->hudadd.pos;
- delete event->hudadd.name;
- delete event->hudadd.scale;
- delete event->hudadd.text;
- delete event->hudadd.align;
- delete event->hudadd.offset;
- delete event->hudadd.world_pos;
- delete event->hudadd.size;
- delete event->hudadd.text2;
+ delete event->hudadd;
}
void Game::handleClientEvent_HudRemove(ClientEvent *event, CameraOrientation *cam)
@@ -2672,77 +2745,54 @@ void Game::handleClientEvent_HudChange(ClientEvent *event, CameraOrientation *ca
HudElement *e = nullptr;
- auto i = m_hud_server_to_client.find(event->hudchange.id);
+ auto i = m_hud_server_to_client.find(event->hudchange->id);
if (i != m_hud_server_to_client.end()) {
e = player->getHud(i->second);
}
if (e == nullptr) {
- delete event->hudchange.v3fdata;
- delete event->hudchange.v2fdata;
- delete event->hudchange.sdata;
- delete event->hudchange.v2s32data;
+ delete event->hudchange;
return;
}
- switch (event->hudchange.stat) {
- case HUD_STAT_POS:
- e->pos = *event->hudchange.v2fdata;
- break;
+#define CASE_SET(statval, prop, dataprop) \
+ case statval: \
+ e->prop = event->hudchange->dataprop; \
+ break
- case HUD_STAT_NAME:
- e->name = *event->hudchange.sdata;
- break;
+ switch (event->hudchange->stat) {
+ CASE_SET(HUD_STAT_POS, pos, v2fdata);
- case HUD_STAT_SCALE:
- e->scale = *event->hudchange.v2fdata;
- break;
+ CASE_SET(HUD_STAT_NAME, name, sdata);
- case HUD_STAT_TEXT:
- e->text = *event->hudchange.sdata;
- break;
+ CASE_SET(HUD_STAT_SCALE, scale, v2fdata);
- case HUD_STAT_NUMBER:
- e->number = event->hudchange.data;
- break;
+ CASE_SET(HUD_STAT_TEXT, text, sdata);
- case HUD_STAT_ITEM:
- e->item = event->hudchange.data;
- break;
+ CASE_SET(HUD_STAT_NUMBER, number, data);
- case HUD_STAT_DIR:
- e->dir = event->hudchange.data;
- break;
+ CASE_SET(HUD_STAT_ITEM, item, data);
- case HUD_STAT_ALIGN:
- e->align = *event->hudchange.v2fdata;
- break;
+ CASE_SET(HUD_STAT_DIR, dir, data);
- case HUD_STAT_OFFSET:
- e->offset = *event->hudchange.v2fdata;
- break;
+ CASE_SET(HUD_STAT_ALIGN, align, v2fdata);
- case HUD_STAT_WORLD_POS:
- e->world_pos = *event->hudchange.v3fdata;
- break;
+ CASE_SET(HUD_STAT_OFFSET, offset, v2fdata);
- case HUD_STAT_SIZE:
- e->size = *event->hudchange.v2s32data;
- break;
+ CASE_SET(HUD_STAT_WORLD_POS, world_pos, v3fdata);
- case HUD_STAT_Z_INDEX:
- e->z_index = event->hudchange.data;
- break;
+ CASE_SET(HUD_STAT_SIZE, size, v2s32data);
- case HUD_STAT_TEXT2:
- e->text2 = *event->hudchange.sdata;
- break;
+ CASE_SET(HUD_STAT_Z_INDEX, z_index, data);
+
+ CASE_SET(HUD_STAT_TEXT2, text2, sdata);
+
+ CASE_SET(HUD_STAT_STYLE, style, data);
}
- delete event->hudchange.v3fdata;
- delete event->hudchange.v2fdata;
- delete event->hudchange.sdata;
- delete event->hudchange.v2s32data;
+#undef CASE_SET
+
+ delete event->hudchange;
}
void Game::handleClientEvent_SetSky(ClientEvent *event, CameraOrientation *cam)
@@ -2797,6 +2847,7 @@ void Game::handleClientEvent_SetSky(ClientEvent *event, CameraOrientation *cam)
"custom"
);
}
+
delete event->set_sky;
}
@@ -2823,7 +2874,7 @@ void Game::handleClientEvent_SetMoon(ClientEvent *event, CameraOrientation *cam)
void Game::handleClientEvent_SetStars(ClientEvent *event, CameraOrientation *cam)
{
sky->setStarsVisible(event->star_params->visible);
- sky->setStarCount(event->star_params->count, false);
+ sky->setStarCount(event->star_params->count);
sky->setStarColor(event->star_params->starcolor);
sky->setStarScale(event->star_params->scale);
delete event->star_params;
@@ -2860,7 +2911,7 @@ void Game::processClientEvents(CameraOrientation *cam)
}
}
-void Game::updateChat(f32 dtime, const v2u32 &screensize)
+void Game::updateChat(f32 dtime)
{
// Get new messages from error log buffer
while (!m_chat_log_buf.empty())
@@ -2876,11 +2927,17 @@ void Game::updateChat(f32 dtime, const v2u32 &screensize)
chat_backend->step(dtime);
// Display all messages in a static text element
- m_game_ui->setChatText(chat_backend->getRecentChat(),
- chat_backend->getRecentBuffer().getLineCount());
+ auto &buf = chat_backend->getRecentBuffer();
+ if (buf.getLinesModified()) {
+ buf.resetLinesModified();
+ m_game_ui->setChatText(chat_backend->getRecentChat(), buf.getLineCount());
+ }
+
+ // Make sure that the size is still correct
+ m_game_ui->updateChatSize();
}
-void Game::updateCamera(u32 busy_time, f32 dtime)
+void Game::updateCamera(f32 dtime)
{
LocalPlayer *player = client->getEnv().getLocalPlayer();
@@ -2919,7 +2976,7 @@ void Game::updateCamera(u32 busy_time, f32 dtime)
float tool_reload_ratio = runData.time_from_last_punch / full_punch_interval;
tool_reload_ratio = MYMIN(tool_reload_ratio, 1.0);
- camera->update(player, dtime, busy_time / 1000.0f, tool_reload_ratio);
+ camera->update(player, dtime, tool_reload_ratio);
camera->step(dtime);
v3f camera_position = camera->getPosition();
@@ -3260,9 +3317,8 @@ void Game::handlePointingAtNode(const PointedThing &pointed,
} else {
MapNode n = map.getNode(nodepos);
- if (nodedef_manager->get(n).tiledef[0].name == "unknown_node.png") {
- m_game_ui->setInfoText(L"Unknown node: " +
- utf8_to_wide(nodedef_manager->get(n).name));
+ if (nodedef_manager->get(n).name == "unknown") {
+ m_game_ui->setInfoText(L"Unknown node");
}
}
@@ -3294,7 +3350,8 @@ bool Game::nodePlacement(const ItemDefinition &selected_def,
const ItemStack &selected_item, const v3s16 &nodepos, const v3s16 &neighbourpos,
const PointedThing &pointed, const NodeMetadata *meta)
{
- std::string prediction = selected_def.node_placement_prediction;
+ const auto &prediction = selected_def.node_placement_prediction;
+
const NodeDefManager *nodedef = client->ndef();
ClientMap &map = client->getEnv().getClientMap();
MapNode node;
@@ -3323,8 +3380,8 @@ bool Game::nodePlacement(const ItemDefinition &selected_def,
TextDest *txt_dst = new TextDestNodeMetadata(nodepos, client);
auto *&formspec = m_game_ui->updateFormspec("");
- GUIFormSpecMenu::create(formspec, client, &input->joystick, fs_src,
- txt_dst, client->getFormspecPrepend(), sound);
+ GUIFormSpecMenu::create(formspec, client, m_rendering_engine->get_gui_env(),
+ &input->joystick, fs_src, txt_dst, client->getFormspecPrepend(), sound);
formspec->setFormSpec(meta->getString("formspec"), inventoryloc);
return false;
@@ -3364,8 +3421,7 @@ bool Game::nodePlacement(const ItemDefinition &selected_def,
if (!found) {
errorstream << "Node placement prediction failed for "
- << selected_def.name << " (places "
- << prediction
+ << selected_def.name << " (places " << prediction
<< ") - Name not known" << std::endl;
// Handle this as if prediction was empty
// Report to server
@@ -3376,9 +3432,14 @@ bool Game::nodePlacement(const ItemDefinition &selected_def,
const ContentFeatures &predicted_f = nodedef->get(id);
// Predict param2 for facedir and wallmounted nodes
+ // Compare core.item_place_node() for what the server does
u8 param2 = 0;
- if (predicted_f.param_type_2 == CPT2_WALLMOUNTED ||
+ const u8 place_param2 = selected_def.place_param2;
+
+ if (place_param2) {
+ param2 = place_param2;
+ } else if (predicted_f.param_type_2 == CPT2_WALLMOUNTED ||
predicted_f.param_type_2 == CPT2_COLORED_WALLMOUNTED) {
v3s16 dir = nodepos - neighbourpos;
@@ -3389,9 +3450,7 @@ bool Game::nodePlacement(const ItemDefinition &selected_def,
} else {
param2 = dir.Z < 0 ? 5 : 4;
}
- }
-
- if (predicted_f.param_type_2 == CPT2_FACEDIR ||
+ } else if (predicted_f.param_type_2 == CPT2_FACEDIR ||
predicted_f.param_type_2 == CPT2_COLORED_FACEDIR) {
v3s16 dir = nodepos - floatToInt(client->getEnv().getLocalPlayer()->getPosition(), BS);
@@ -3402,11 +3461,9 @@ bool Game::nodePlacement(const ItemDefinition &selected_def,
}
}
- assert(param2 <= 5);
-
- //Check attachment if node is in group attached_node
- if (((ItemGroupList) predicted_f.groups)["attached_node"] != 0) {
- static v3s16 wallmounted_dirs[8] = {
+ // Check attachment if node is in group attached_node
+ if (itemgroup_get(predicted_f.groups, "attached_node") != 0) {
+ const static v3s16 wallmounted_dirs[8] = {
v3s16(0, 1, 0),
v3s16(0, -1, 0),
v3s16(1, 0, 0),
@@ -3431,11 +3488,11 @@ bool Game::nodePlacement(const ItemDefinition &selected_def,
}
// Apply color
- if ((predicted_f.param_type_2 == CPT2_COLOR
+ if (!place_param2 && (predicted_f.param_type_2 == CPT2_COLOR
|| predicted_f.param_type_2 == CPT2_COLORED_FACEDIR
|| predicted_f.param_type_2 == CPT2_COLORED_WALLMOUNTED)) {
- const std::string &indexstr = selected_item.metadata.getString(
- "palette_index", 0);
+ const auto &indexstr = selected_item.metadata.
+ getString("palette_index", 0);
if (!indexstr.empty()) {
s32 index = mystoi(indexstr);
if (predicted_f.param_type_2 == CPT2_COLOR) {
@@ -3475,11 +3532,10 @@ bool Game::nodePlacement(const ItemDefinition &selected_def,
soundmaker->m_player_rightpunch_sound = selected_def.sound_place_failed;
return false;
}
- } catch (InvalidPositionException &e) {
+ } catch (const InvalidPositionException &e) {
errorstream << "Node placement prediction failed for "
<< selected_def.name << " (places "
- << prediction
- << ") - Position not loaded" << std::endl;
+ << prediction << ") - Position not loaded" << std::endl;
soundmaker->m_player_rightpunch_sound = selected_def.sound_place_failed;
return false;
}
@@ -3549,7 +3605,8 @@ void Game::handleDigging(const PointedThing &pointed, const v3s16 &nodepos,
// cheat detection.
// Get digging parameters
DigParams params = getDigParams(nodedef_manager->get(n).groups,
- &selected_item.getToolCapabilities(itemdef_manager));
+ &selected_item.getToolCapabilities(itemdef_manager),
+ selected_item.wear);
// If can't dig, try hand
if (!params.diggable) {
@@ -3796,12 +3853,28 @@ void Game::updateFrame(ProfilerGraph *graph, RunStats *stats, f32 dtime,
}
/*
- Get chat messages from client
+ Damage camera tilt
*/
+ if (player->hurt_tilt_timer > 0.0f) {
+ player->hurt_tilt_timer -= dtime * 6.0f;
- v2u32 screensize = driver->getScreenSize();
+ if (player->hurt_tilt_timer < 0.0f)
+ player->hurt_tilt_strength = 0.0f;
+ }
+
+ /*
+ Update minimap pos and rotation
+ */
+ if (mapper && m_game_ui->m_flags.show_hud) {
+ mapper->setPos(floatToInt(player->getPosition(), BS));
+ mapper->setAngle(player->getYaw());
+ }
- updateChat(dtime, screensize);
+ /*
+ Get chat messages from client
+ */
+
+ updateChat(dtime);
/*
Inventory
@@ -3823,15 +3896,22 @@ void Game::updateFrame(ProfilerGraph *graph, RunStats *stats, f32 dtime,
*/
runData.update_draw_list_timer += dtime;
+ float update_draw_list_delta = 0.2f;
+
v3f camera_direction = camera->getDirection();
- if (runData.update_draw_list_timer >= 0.2
+ if (runData.update_draw_list_timer >= update_draw_list_delta
|| runData.update_draw_list_last_cam_dir.getDistanceFrom(camera_direction) > 0.2
- || m_camera_offset_changed) {
+ || m_camera_offset_changed
+ || client->getEnv().getClientMap().needsUpdateDrawList()) {
runData.update_draw_list_timer = 0;
client->getEnv().getClientMap().updateDrawList();
runData.update_draw_list_last_cam_dir = camera_direction;
}
+ if (RenderingEngine::get_shadow_renderer()) {
+ updateShadows();
+ }
+
m_game_ui->update(*stats, client, draw_control, cam, runData.pointed_old, gui_chat_console, dtime);
/*
@@ -3863,11 +3943,11 @@ void Game::updateFrame(ProfilerGraph *graph, RunStats *stats, f32 dtime,
} while (false);
/*
- Drawing begins
+ ==================== Drawing begins ====================
*/
- const video::SColor &skycolor = sky->getSkyColor();
+ const video::SColor skycolor = sky->getSkyColor();
- TimeTaker tt_draw("Draw scene");
+ TimeTaker tt_draw("Draw scene", nullptr, PRECISION_MICRO);
driver->beginScene(true, true, skycolor);
bool draw_wield_tool = (m_game_ui->m_flags.show_hud &&
@@ -3882,12 +3962,14 @@ void Game::updateFrame(ProfilerGraph *graph, RunStats *stats, f32 dtime,
} catch (SettingNotFoundException) {
}
#endif
- RenderingEngine::draw_scene(skycolor, m_game_ui->m_flags.show_hud,
+ m_rendering_engine->draw_scene(skycolor, m_game_ui->m_flags.show_hud,
m_game_ui->m_flags.show_minimap, draw_wield_tool, draw_crosshair);
/*
Profiler graph
*/
+ v2u32 screensize = driver->getScreenSize();
+
if (m_game_ui->m_flags.show_profiler_graph)
graph->draw(10, screensize.Y - 10, driver, g_fontengine->getFont());
@@ -3904,25 +3986,7 @@ void Game::updateFrame(ProfilerGraph *graph, RunStats *stats, f32 dtime,
}
/*
- Damage camera tilt
- */
- if (player->hurt_tilt_timer > 0.0f) {
- player->hurt_tilt_timer -= dtime * 6.0f;
-
- if (player->hurt_tilt_timer < 0.0f)
- player->hurt_tilt_strength = 0.0f;
- }
-
- /*
- Update minimap pos and rotation
- */
- if (mapper && m_game_ui->m_flags.show_hud) {
- mapper->setPos(floatToInt(player->getPosition(), BS));
- mapper->setAngle(player->getYaw());
- }
-
- /*
- End scene
+ ==================== End scene ====================
*/
if (++m_reset_HW_buffer_counter > 500) {
/*
@@ -3945,11 +4009,12 @@ void Game::updateFrame(ProfilerGraph *graph, RunStats *stats, f32 dtime,
driver->removeAllHardwareBuffers();
m_reset_HW_buffer_counter = 0;
}
+
driver->endScene();
stats->drawtime = tt_draw.stop(true);
- g_profiler->avg("Game::updateFrame(): draw scene [ms]", stats->drawtime);
- g_profiler->graphAdd("Update frame [ms]", tt_update.stop(true));
+ g_profiler->graphAdd("Draw scene [us]", stats->drawtime);
+ g_profiler->avg("Game::updateFrame(): update frame [ms]", tt_update.stop(true));
}
/* Log times and stuff for visualization */
@@ -3960,59 +4025,85 @@ inline void Game::updateProfilerGraphs(ProfilerGraph *graph)
graph->put(values);
}
+/****************************************************************************
+ * Shadows
+ *****************************************************************************/
+void Game::updateShadows()
+{
+ ShadowRenderer *shadow = RenderingEngine::get_shadow_renderer();
+ if (!shadow)
+ return;
+
+ float in_timeofday = fmod(runData.time_of_day_smooth, 1.0f);
+
+ float timeoftheday = fmod(getWickedTimeOfDay(in_timeofday) + 0.75f, 0.5f) + 0.25f;
+ const float offset_constant = 10000.0f;
+
+ v3f light(0.0f, 0.0f, -1.0f);
+ light.rotateXZBy(90);
+ light.rotateXYBy(timeoftheday * 360 - 90);
+ light.rotateYZBy(sky->getSkyBodyOrbitTilt());
+ v3f sun_pos = light * offset_constant;
+
+ if (shadow->getDirectionalLightCount() == 0)
+ shadow->addDirectionalLight();
+ shadow->getDirectionalLight().setDirection(sun_pos);
+ shadow->setTimeOfDay(in_timeofday);
+
+ shadow->getDirectionalLight().update_frustum(camera, client, m_camera_offset_changed);
+}
/****************************************************************************
Misc
****************************************************************************/
-/* On some computers framerate doesn't seem to be automatically limited
- */
-inline void Game::limitFps(FpsControl *fps_timings, f32 *dtime)
+void FpsControl::reset()
{
- // not using getRealTime is necessary for wine
- device->getTimer()->tick(); // Maker sure device time is up-to-date
- u32 time = device->getTimer()->getTime();
- u32 last_time = fps_timings->last_time;
-
- if (time > last_time) // Make sure time hasn't overflowed
- fps_timings->busy_time = time - last_time;
- else
- fps_timings->busy_time = 0;
+ last_time = porting::getTimeUs();
+}
- u32 frametime_min = 1000 / (
+/*
+ * On some computers framerate doesn't seem to be automatically limited
+ */
+void FpsControl::limit(IrrlichtDevice *device, f32 *dtime)
+{
+ const u64 frametime_min = 1000000.0f / (
device->isWindowFocused() && !g_menumgr.pausesGame()
? g_settings->getFloat("fps_max")
: g_settings->getFloat("fps_max_unfocused"));
- if (fps_timings->busy_time < frametime_min) {
- fps_timings->sleep_time = frametime_min - fps_timings->busy_time;
- device->sleep(fps_timings->sleep_time);
+ u64 time = porting::getTimeUs();
+
+ if (time > last_time) // Make sure time hasn't overflowed
+ busy_time = time - last_time;
+ else
+ busy_time = 0;
+
+ if (busy_time < frametime_min) {
+ sleep_time = frametime_min - busy_time;
+ if (sleep_time > 1000)
+ sleep_ms(sleep_time / 1000);
} else {
- fps_timings->sleep_time = 0;
+ sleep_time = 0;
}
- /* Get the new value of the device timer. Note that device->sleep() may
- * not sleep for the entire requested time as sleep may be interrupted and
- * therefore it is arguably more accurate to get the new time from the
- * device rather than calculating it by adding sleep_time to time.
- */
-
- device->getTimer()->tick(); // Update device timer
- time = device->getTimer()->getTime();
+ // Read the timer again to accurately determine how long we actually slept,
+ // rather than calculating it by adding sleep_time to time.
+ time = porting::getTimeUs();
- if (time > last_time) // Make sure last_time hasn't overflowed
- *dtime = (time - last_time) / 1000.0;
+ if (time > last_time) // Make sure last_time hasn't overflowed
+ *dtime = (time - last_time) / 1000000.0f;
else
*dtime = 0;
- fps_timings->last_time = time;
+ last_time = time;
}
void Game::showOverlayMessage(const char *msg, float dtime, int percent, bool draw_clouds)
{
const wchar_t *wmsg = wgettext(msg);
- RenderingEngine::draw_load_screen(wmsg, guienv, texture_src, dtime, percent,
+ m_rendering_engine->draw_load_screen(wmsg, guienv, texture_src, dtime, percent,
draw_clouds);
delete[] wmsg;
}
@@ -4057,27 +4148,6 @@ void Game::readSettings()
****************************************************************************/
/****************************************************************************/
-void Game::extendedResourceCleanup()
-{
- // Extended resource accounting
- infostream << "Irrlicht resources after cleanup:" << std::endl;
- infostream << "\tRemaining meshes : "
- << RenderingEngine::get_mesh_cache()->getMeshCount() << std::endl;
- infostream << "\tRemaining textures : "
- << driver->getTextureCount() << std::endl;
-
- for (unsigned int i = 0; i < driver->getTextureCount(); i++) {
- irr::video::ITexture *texture = driver->getTextureByIndex(i);
- infostream << "\t\t" << i << ":" << texture->getName().getPath().c_str()
- << std::endl;
- }
-
- clearTextureNameCache();
- infostream << "\tRemaining materials: "
- << driver-> getMaterialRendererCount()
- << " (note: irrlicht doesn't support removing renderers)" << std::endl;
-}
-
void Game::showDeathFormspec()
{
static std::string formspec_str =
@@ -4095,15 +4165,15 @@ void Game::showDeathFormspec()
LocalFormspecHandler *txt_dst = new LocalFormspecHandler("MT_DEATH_SCREEN", client);
auto *&formspec = m_game_ui->getFormspecGUI();
- GUIFormSpecMenu::create(formspec, client, &input->joystick,
- fs_src, txt_dst, client->getFormspecPrepend(), sound);
+ GUIFormSpecMenu::create(formspec, client, m_rendering_engine->get_gui_env(),
+ &input->joystick, fs_src, txt_dst, client->getFormspecPrepend(), sound);
formspec->setFocus("btn_respawn");
}
#define GET_KEY_NAME(KEY) gettext(getKeySetting(#KEY).name())
void Game::showPauseMenu()
{
-#ifdef __ANDROID__
+#ifdef HAVE_TOUCHSCREENGUI
static const std::string control_text = strgettext("Default Controls:\n"
"No menu visible:\n"
"- single tap: button activate\n"
@@ -4203,16 +4273,18 @@ void Game::showPauseMenu()
if (simple_singleplayer_mode || address.empty()) {
static const std::string on = strgettext("On");
static const std::string off = strgettext("Off");
- const std::string &damage = g_settings->getBool("enable_damage") ? on : off;
- const std::string &creative = g_settings->getBool("creative_mode") ? on : off;
+ // Note: Status of enable_damage and creative_mode settings is intentionally
+ // NOT shown here because the game might roll its own damage system and/or do
+ // a per-player Creative Mode, in which case writing it here would mislead.
+ bool damage = g_settings->getBool("enable_damage");
const std::string &announced = g_settings->getBool("server_announce") ? on : off;
- os << strgettext("- Damage: ") << damage << "\n"
- << strgettext("- Creative Mode: ") << creative << "\n";
if (!simple_singleplayer_mode) {
- const std::string &pvp = g_settings->getBool("enable_pvp") ? on : off;
- //~ PvP = Player versus Player
- os << strgettext("- PvP: ") << pvp << "\n"
- << strgettext("- Public: ") << announced << "\n";
+ if (damage) {
+ const std::string &pvp = g_settings->getBool("enable_pvp") ? on : off;
+ //~ PvP = Player versus Player
+ os << strgettext("- PvP: ") << pvp << "\n";
+ }
+ os << strgettext("- Public: ") << announced << "\n";
std::string server_name = g_settings->get("server_name");
str_formspec_escape(server_name);
if (announced == on && !server_name.empty())
@@ -4229,10 +4301,13 @@ void Game::showPauseMenu()
LocalFormspecHandler *txt_dst = new LocalFormspecHandler("MT_PAUSE_MENU");
auto *&formspec = m_game_ui->getFormspecGUI();
- GUIFormSpecMenu::create(formspec, client, &input->joystick,
- fs_src, txt_dst, client->getFormspecPrepend(), sound);
+ GUIFormSpecMenu::create(formspec, client, m_rendering_engine->get_gui_env(),
+ &input->joystick, fs_src, txt_dst, client->getFormspecPrepend(), sound);
formspec->setFocus("btn_continue");
formspec->doPause = true;
+
+ if (simple_singleplayer_mode)
+ pauseAnimation();
}
/****************************************************************************/
@@ -4243,6 +4318,7 @@ void Game::showPauseMenu()
void the_game(bool *kill,
InputHandler *input,
+ RenderingEngine *rendering_engine,
const GameStartData &start_data,
std::string &error_message,
ChatBackend &chat_backend,
@@ -4257,20 +4333,21 @@ void the_game(bool *kill,
try {
- if (game.startup(kill, input, start_data, error_message,
- reconnect_requested, &chat_backend)) {
+ if (game.startup(kill, input, rendering_engine, start_data,
+ error_message, reconnect_requested, &chat_backend)) {
game.run();
}
} catch (SerializationError &e) {
- error_message = std::string("A serialization error occurred:\n")
- + e.what() + "\n\nThe server is probably "
- " running a different version of " PROJECT_NAME_C ".";
+ const std::string ver_err = fmtgettext("The server is probably running a different version of %s.", PROJECT_NAME_C);
+ error_message = strgettext("A serialization error occurred:") +"\n"
+ + e.what() + "\n\n" + ver_err;
errorstream << error_message << std::endl;
} catch (ServerError &e) {
error_message = e.what();
errorstream << "ServerError: " << error_message << std::endl;
} catch (ModError &e) {
+ // DO NOT TRANSLATE the `ModError`, it's used by ui.lua
error_message = std::string("ModError: ") + e.what() +
strgettext("\nCheck debug.txt for details.");
errorstream << error_message << std::endl;
diff --git a/src/client/game.h b/src/client/game.h
index d04153271..d87e747c5 100644
--- a/src/client/game.h
+++ b/src/client/game.h
@@ -23,7 +23,8 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include <string>
class InputHandler;
-class ChatBackend; /* to avoid having to include chat.h */
+class ChatBackend;
+class RenderingEngine;
struct SubgameSpec;
struct GameStartData;
@@ -32,7 +33,7 @@ struct Jitter {
};
struct RunStats {
- u32 drawtime;
+ u64 drawtime; // (us)
Jitter dtime_jitter, busy_time_jitter;
};
@@ -45,6 +46,7 @@ struct CameraOrientation {
void the_game(bool *kill,
InputHandler *input,
+ RenderingEngine *rendering_engine,
const GameStartData &start_data,
std::string &error_message,
ChatBackend &chat_backend,
diff --git a/src/client/gameui.cpp b/src/client/gameui.cpp
index 0c08efeb5..8505ea3ae 100644
--- a/src/client/gameui.cpp
+++ b/src/client/gameui.cpp
@@ -71,11 +71,14 @@ void GameUI::init()
chat_font_size, FM_Unspecified));
}
- // At the middle of the screen
- // Object infos are shown in this
+
+ // Infotext of nodes and objects.
+ // If in debug mode, object debug infos shown here, too.
+ // Located on the left on the screen, below chat.
u32 chat_font_height = m_guitext_chat->getActiveFont()->getDimension(L"Ay").Height;
m_guitext_info = gui::StaticText::add(guienv, L"",
- core::rect<s32>(0, 0, 400, g_fontengine->getTextHeight() * 5 + 5) +
+ // Size is limited; text will be truncated after 6 lines.
+ core::rect<s32>(0, 0, 400, g_fontengine->getTextHeight() * 6) +
v2s32(100, chat_font_height *
(g_settings->getU16("recent_chat_messages") + 3)),
false, true, guiroot);
@@ -97,19 +100,20 @@ void GameUI::update(const RunStats &stats, Client *client, MapDrawControl *draw_
const CameraOrientation &cam, const PointedThing &pointed_old,
const GUIChatConsole *chat_console, float dtime)
{
- v2u32 screensize = RenderingEngine::get_instance()->getWindowSize();
+ v2u32 screensize = RenderingEngine::getWindowSize();
- if (m_flags.show_debug) {
- static float drawtime_avg = 0;
- drawtime_avg = drawtime_avg * 0.95 + stats.drawtime * 0.05;
- u16 fps = 1.0 / stats.dtime_jitter.avg;
+ // Minimal debug text must only contain info that can't give a gameplay advantage
+ if (m_flags.show_minimal_debug) {
+ const u16 fps = 1.0 / stats.dtime_jitter.avg;
+ m_drawtime_avg *= 0.95f;
+ m_drawtime_avg += 0.05f * (stats.drawtime / 1000);
std::ostringstream os(std::ios_base::binary);
os << std::fixed
<< PROJECT_NAME_C " " << g_version_hash
<< " | FPS: " << fps
<< std::setprecision(0)
- << " | drawtime: " << drawtime_avg << "ms"
+ << " | drawtime: " << m_drawtime_avg << "ms"
<< std::setprecision(1)
<< " | dtime jitter: "
<< (stats.dtime_jitter.max_fraction * 100.0) << "%"
@@ -125,9 +129,10 @@ void GameUI::update(const RunStats &stats, Client *client, MapDrawControl *draw_
}
// Finally set the guitext visible depending on the flag
- m_guitext->setVisible(m_flags.show_debug);
+ m_guitext->setVisible(m_flags.show_minimal_debug);
- if (m_flags.show_debug) {
+ // Basic debug text also shows info that might give a gameplay advantage
+ if (m_flags.show_basic_debug) {
LocalPlayer *player = client->getEnv().getLocalPlayer();
v3f player_position = player->getPosition();
@@ -160,7 +165,7 @@ void GameUI::update(const RunStats &stats, Client *client, MapDrawControl *draw_
));
}
- m_guitext2->setVisible(m_flags.show_debug);
+ m_guitext2->setVisible(m_flags.show_basic_debug);
setStaticText(m_guitext_info, m_infotext.c_str());
m_guitext_info->setVisible(m_flags.show_hud && g_menumgr.menuCount() == 0);
@@ -204,7 +209,7 @@ void GameUI::update(const RunStats &stats, Client *client, MapDrawControl *draw_
void GameUI::initFlags()
{
m_flags = GameUI::Flags();
- m_flags.show_debug = g_settings->getBool("show_debug");
+ m_flags.show_minimal_debug = g_settings->getBool("show_debug");
}
void GameUI::showMinimap(bool show)
@@ -221,24 +226,32 @@ void GameUI::showTranslatedStatusText(const char *str)
void GameUI::setChatText(const EnrichedString &chat_text, u32 recent_chat_count)
{
+ setStaticText(m_guitext_chat, chat_text);
+
+ m_recent_chat_count = recent_chat_count;
+}
+void GameUI::updateChatSize()
+{
// Update gui element size and position
s32 chat_y = 5;
- if (m_flags.show_debug)
- chat_y += 2 * g_fontengine->getLineHeight();
+ if (m_flags.show_minimal_debug)
+ chat_y += g_fontengine->getLineHeight();
+ if (m_flags.show_basic_debug)
+ chat_y += g_fontengine->getLineHeight();
- const v2u32 &window_size = RenderingEngine::get_instance()->getWindowSize();
+ const v2u32 &window_size = RenderingEngine::getWindowSize();
- core::rect<s32> chat_size(10, chat_y,
- window_size.X - 20, 0);
+ core::rect<s32> chat_size(10, chat_y, window_size.X - 20, 0);
chat_size.LowerRightCorner.Y = std::min((s32)window_size.Y,
- m_guitext_chat->getTextHeight() + chat_y);
+ m_guitext_chat->getTextHeight() + chat_y);
- m_guitext_chat->setRelativePosition(chat_size);
- setStaticText(m_guitext_chat, chat_text);
+ if (chat_size == m_current_chat_size)
+ return;
+ m_current_chat_size = chat_size;
- m_recent_chat_count = recent_chat_count;
+ m_guitext_chat->setRelativePosition(chat_size);
}
void GameUI::updateProfiler()
@@ -260,7 +273,7 @@ void GameUI::updateProfiler()
core::position2di upper_left(6, 50);
core::position2di lower_right = upper_left;
lower_right.X += size.Width + 10;
- lower_right.Y += size.Height;
+ lower_right.Y += size.Height;
m_guitext_profiler->setRelativePosition(core::rect<s32>(upper_left, lower_right));
}
@@ -294,12 +307,9 @@ void GameUI::toggleProfiler()
updateProfiler();
if (m_profiler_current_page != 0) {
- wchar_t buf[255];
- const wchar_t* str = wgettext("Profiler shown (page %d of %d)");
- swprintf(buf, sizeof(buf) / sizeof(wchar_t), str,
- m_profiler_current_page, m_profiler_max_page);
- delete[] str;
- showStatusText(buf);
+ std::wstring msg = fwgettext("Profiler shown (page %d of %d)",
+ m_profiler_current_page, m_profiler_max_page);
+ showStatusText(msg);
} else {
showTranslatedStatusText("Profiler hidden");
}
diff --git a/src/client/gameui.h b/src/client/gameui.h
index b6c8a224d..cc9377bdc 100644
--- a/src/client/gameui.h
+++ b/src/client/gameui.h
@@ -58,7 +58,8 @@ public:
bool show_chat = true;
bool show_hud = true;
bool show_minimap = false;
- bool show_debug = true;
+ bool show_minimal_debug = false;
+ bool show_basic_debug = false;
bool show_profiler_graph = false;
};
@@ -83,11 +84,12 @@ public:
void showTranslatedStatusText(const char *str);
inline void clearStatusText() { m_statustext.clear(); }
- const bool isChatVisible()
+ bool isChatVisible()
{
return m_flags.show_chat && m_recent_chat_count != 0 && m_profiler_current_page == 0;
}
void setChatText(const EnrichedString &chat_text, u32 recent_chat_count);
+ void updateChatSize();
void updateProfiler();
@@ -108,6 +110,8 @@ public:
private:
Flags m_flags;
+ float m_drawtime_avg = 0;
+
gui::IGUIStaticText *m_guitext = nullptr; // First line of debug text
gui::IGUIStaticText *m_guitext2 = nullptr; // Second line of debug text
@@ -121,6 +125,7 @@ private:
gui::IGUIStaticText *m_guitext_chat = nullptr; // Chat text
u32 m_recent_chat_count = 0;
+ core::rect<s32> m_current_chat_size{0, 0, 0, 0};
gui::IGUIStaticText *m_guitext_profiler = nullptr; // Profiler text
u8 m_profiler_current_page = 0;
diff --git a/src/client/guiscalingfilter.cpp b/src/client/guiscalingfilter.cpp
index 406c096e6..232219237 100644
--- a/src/client/guiscalingfilter.cpp
+++ b/src/client/guiscalingfilter.cpp
@@ -23,7 +23,6 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "util/numeric.h"
#include <cstdio>
#include "client/renderingengine.h"
-#include "client/tile.h" // hasNPotSupport()
/* Maintain a static cache to store the images that correspond to textures
* in a format that's manipulable by code. Some platforms exhibit issues
@@ -102,7 +101,7 @@ video::ITexture *guiScalingResizeCached(video::IVideoDriver *driver,
if (!g_settings->getBool("gui_scaling_filter_txr2img"))
return src;
srcimg = driver->createImageFromData(src->getColorFormat(),
- src->getSize(), src->lock(), false);
+ src->getSize(), src->lock(video::ETLM_READ_ONLY), false);
src->unlock();
g_imgCache[origname] = srcimg;
}
@@ -117,7 +116,7 @@ video::ITexture *guiScalingResizeCached(video::IVideoDriver *driver,
#if ENABLE_GLES
// Some platforms are picky about textures being powers of 2, so expand
// the image dimensions to the next power of 2, if necessary.
- if (!hasNPotSupport()) {
+ if (!driver->queryFeature(video::EVDF_TEXTURE_NPOT)) {
video::IImage *po2img = driver->createImage(src->getColorFormat(),
core::dimension2d<u32>(npot2((u32)destrect.getWidth()),
npot2((u32)destrect.getHeight())));
@@ -129,7 +128,7 @@ video::ITexture *guiScalingResizeCached(video::IVideoDriver *driver,
#endif
// Convert the scaled image back into a texture.
- scaled = driver->addTexture(scalename, destimg, NULL);
+ scaled = driver->addTexture(scalename, destimg);
destimg->drop();
g_txrCache[scalename] = scaled;
diff --git a/src/client/hud.cpp b/src/client/hud.cpp
index 3de116c06..6011a8cff 100644
--- a/src/client/hud.cpp
+++ b/src/client/hud.cpp
@@ -20,6 +20,8 @@ with this program; if not, write to the Free Software Foundation, Inc.,
*/
#include "client/hud.h"
+#include <string>
+#include <iostream>
#include <cmath>
#include "settings.h"
#include "util/numeric.h"
@@ -45,11 +47,10 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#define OBJECT_CROSSHAIR_LINE_SIZE 8
#define CROSSHAIR_LINE_SIZE 10
-Hud::Hud(gui::IGUIEnvironment *guienv, Client *client, LocalPlayer *player,
+Hud::Hud(Client *client, LocalPlayer *player,
Inventory *inventory)
{
driver = RenderingEngine::get_video_driver();
- this->guienv = guienv;
this->client = client;
this->player = player;
this->inventory = inventory;
@@ -223,6 +224,7 @@ void Hud::drawItem(const ItemStack &item, const core::rect<s32>& rect,
}
//NOTE: selectitem = 0 -> no selected; selectitem 1-based
+// mainlist can be NULL, but draw the frame anyway.
void Hud::drawItems(v2s32 upperleftpos, v2s32 screen_offset, s32 itemcount,
s32 inv_offset, InventoryList *mainlist, u16 selectitem, u16 direction)
{
@@ -270,7 +272,8 @@ void Hud::drawItems(v2s32 upperleftpos, v2s32 screen_offset, s32 itemcount,
// Draw items
core::rect<s32> imgrect(0, 0, m_hotbar_imagesize, m_hotbar_imagesize);
- for (s32 i = inv_offset; i < itemcount && (size_t)i < mainlist->getSize(); i++) {
+ const s32 list_size = mainlist ? mainlist->getSize() : 0;
+ for (s32 i = inv_offset; i < itemcount && i < list_size; i++) {
s32 fullimglen = m_hotbar_imagesize + m_padding * 2;
v2s32 steppos;
@@ -315,7 +318,7 @@ bool Hud::calculateScreenPos(const v3s16 &camera_offset, HudElement *e, v2s32 *p
{
v3f w_pos = e->world_pos * BS;
scene::ICameraSceneNode* camera =
- RenderingEngine::get_scene_manager()->getActiveCamera();
+ client->getSceneManager()->getActiveCamera();
w_pos -= intToFloat(camera_offset, BS);
core::matrix4 trans = camera->getProjectionMatrix();
trans *= camera->getViewMatrix();
@@ -332,8 +335,8 @@ bool Hud::calculateScreenPos(const v3s16 &camera_offset, HudElement *e, v2s32 *p
void Hud::drawLuaElements(const v3s16 &camera_offset)
{
- u32 text_height = g_fontengine->getTextHeight();
- irr::gui::IGUIFont* font = g_fontengine->getFont();
+ const u32 text_height = g_fontengine->getTextHeight();
+ gui::IGUIFont *const font = g_fontengine->getFont();
// Reorder elements by z_index
std::vector<HudElement*> elems;
@@ -357,40 +360,40 @@ void Hud::drawLuaElements(const v3s16 &camera_offset)
floor(e->pos.Y * (float) m_screensize.Y + 0.5));
switch (e->type) {
case HUD_ELEM_TEXT: {
- irr::gui::IGUIFont *textfont = font;
unsigned int font_size = g_fontengine->getDefaultFontSize();
if (e->size.X > 0)
font_size *= e->size.X;
- if (font_size != g_fontengine->getDefaultFontSize())
- textfont = g_fontengine->getFont(font_size);
+#ifdef __ANDROID__
+ // The text size on Android is not proportional with the actual scaling
+ // FIXME: why do we have such a weird unportable hack??
+ if (font_size > 3 && e->offset.X < -20)
+ font_size -= 3;
+#endif
+ auto textfont = g_fontengine->getFont(FontSpec(font_size,
+ (e->style & HUD_STYLE_MONO) ? FM_Mono : FM_Unspecified,
+ e->style & HUD_STYLE_BOLD, e->style & HUD_STYLE_ITALIC));
video::SColor color(255, (e->number >> 16) & 0xFF,
(e->number >> 8) & 0xFF,
(e->number >> 0) & 0xFF);
std::wstring text = unescape_translate(utf8_to_wide(e->text));
core::dimension2d<u32> textsize = textfont->getDimension(text.c_str());
-#ifdef __ANDROID__
- // The text size on Android is not proportional with the actual scaling
- irr::gui::IGUIFont *font_scaled = font_size <= 3 ?
- textfont : g_fontengine->getFont(font_size - 3);
- if (e->offset.X < -20)
- textsize = font_scaled->getDimension(text.c_str());
-#endif
- v2s32 offset((e->align.X - 1.0) * (textsize.Width / 2),
- (e->align.Y - 1.0) * (textsize.Height / 2));
+
+ v2s32 offset(0, (e->align.Y - 1.0) * (textsize.Height / 2));
core::rect<s32> size(0, 0, e->scale.X * m_scale_factor,
- text_height * e->scale.Y * m_scale_factor);
+ text_height * e->scale.Y * m_scale_factor);
v2s32 offs(e->offset.X * m_scale_factor,
- e->offset.Y * m_scale_factor);
-#ifdef __ANDROID__
- if (e->offset.X < -20)
- font_scaled->draw(text.c_str(), size + pos + offset + offs, color);
- else
-#endif
+ e->offset.Y * m_scale_factor);
+ std::wstringstream wss(text);
+ std::wstring line;
+ while (std::getline(wss, line, L'\n'))
{
- textfont->draw(text.c_str(), size + pos + offset + offs, color);
+ core::dimension2d<u32> linesize = textfont->getDimension(line.c_str());
+ v2s32 line_offset((e->align.X - 1.0) * (linesize.Width / 2), 0);
+ textfont->draw(line.c_str(), size + pos + offset + offs + line_offset, color);
+ offset.Y += linesize.Height;
}
break; }
case HUD_ELEM_STATBAR: {
@@ -400,6 +403,8 @@ void Hud::drawLuaElements(const v3s16 &camera_offset)
break; }
case HUD_ELEM_INVENTORY: {
InventoryList *inv = inventory->getList(e->text);
+ if (!inv)
+ warningstream << "HUD: Unknown inventory list. name=" << e->text << std::endl;
drawItems(pos, v2s32(e->offset.X, e->offset.Y), e->number, 0,
inv, e->item, e->dir);
break; }
@@ -475,7 +480,7 @@ void Hud::drawLuaElements(const v3s16 &camera_offset)
// Angle according to camera view
v3f fore(0.f, 0.f, 1.f);
- scene::ICameraSceneNode *cam = RenderingEngine::get_scene_manager()->getActiveCamera();
+ scene::ICameraSceneNode *cam = client->getSceneManager()->getActiveCamera();
cam->getAbsoluteTransformation().rotateVect(fore);
int angle = - fore.getHorizontalAngle().Y;
@@ -747,7 +752,7 @@ void Hud::drawHotbar(u16 playeritem) {
s32 width = hotbar_itemcount * (m_hotbar_imagesize + m_padding * 2);
v2s32 pos = centerlowerpos - v2s32(width / 2, m_hotbar_imagesize + m_padding * 3);
- const v2u32 &window_size = RenderingEngine::get_instance()->getWindowSize();
+ const v2u32 &window_size = RenderingEngine::getWindowSize();
if ((float) width / (float) window_size.X <=
g_settings->getFloat("hud_hotbar_max_width")) {
if (player->hud_flags & HUD_FLAG_HOTBAR_VISIBLE) {
@@ -862,6 +867,60 @@ void Hud::drawSelectionMesh()
}
}
+enum Hud::BlockBoundsMode Hud::toggleBlockBounds()
+{
+ m_block_bounds_mode = static_cast<BlockBoundsMode>(m_block_bounds_mode + 1);
+
+ if (m_block_bounds_mode >= BLOCK_BOUNDS_MAX) {
+ m_block_bounds_mode = BLOCK_BOUNDS_OFF;
+ }
+ return m_block_bounds_mode;
+}
+
+void Hud::disableBlockBounds()
+{
+ m_block_bounds_mode = BLOCK_BOUNDS_OFF;
+}
+
+void Hud::drawBlockBounds()
+{
+ if (m_block_bounds_mode == BLOCK_BOUNDS_OFF) {
+ return;
+ }
+
+ video::SMaterial old_material = driver->getMaterial2D();
+ driver->setMaterial(m_selection_material);
+
+ v3s16 pos = player->getStandingNodePos();
+
+ v3s16 blockPos(
+ floorf((float) pos.X / MAP_BLOCKSIZE),
+ floorf((float) pos.Y / MAP_BLOCKSIZE),
+ floorf((float) pos.Z / MAP_BLOCKSIZE)
+ );
+
+ v3f offset = intToFloat(client->getCamera()->getOffset(), BS);
+
+ s8 radius = m_block_bounds_mode == BLOCK_BOUNDS_NEAR ? 2 : 0;
+
+ v3f halfNode = v3f(BS, BS, BS) / 2.0f;
+
+ for (s8 x = -radius; x <= radius; x++)
+ for (s8 y = -radius; y <= radius; y++)
+ for (s8 z = -radius; z <= radius; z++) {
+ v3s16 blockOffset(x, y, z);
+
+ aabb3f box(
+ intToFloat((blockPos + blockOffset) * MAP_BLOCKSIZE, BS) - offset - halfNode,
+ intToFloat(((blockPos + blockOffset) * MAP_BLOCKSIZE) + (MAP_BLOCKSIZE - 1), BS) - offset + halfNode
+ );
+
+ driver->draw3DBox(box, video::SColor(255, 255, 0, 0));
+ }
+
+ driver->setMaterial(old_material);
+}
+
void Hud::updateSelectionMesh(const v3s16 &camera_offset)
{
m_camera_offset = camera_offset;
@@ -908,7 +967,7 @@ void Hud::updateSelectionMesh(const v3s16 &camera_offset)
}
void Hud::resizeHotbar() {
- const v2u32 &window_size = RenderingEngine::get_instance()->getWindowSize();
+ const v2u32 &window_size = RenderingEngine::getWindowSize();
if (m_screensize != window_size) {
m_hotbar_imagesize = floor(HOTBAR_IMAGE_SIZE *
@@ -945,12 +1004,24 @@ void drawItemStack(
return;
}
+ const static thread_local bool enable_animations =
+ g_settings->getBool("inventory_items_animations");
+
const ItemDefinition &def = item.getDefinition(client->idef());
- ItemMesh *imesh = client->idef()->getWieldMesh(def.name, client);
- if (imesh && imesh->mesh) {
+ bool draw_overlay = false;
+
+ bool has_mesh = false;
+ ItemMesh *imesh;
+
+ // Render as mesh if animated or no inventory image
+ if ((enable_animations && rotation_kind < IT_ROT_NONE) || def.inventory_image.empty()) {
+ imesh = client->idef()->getWieldMesh(def.name, client);
+ has_mesh = imesh && imesh->mesh;
+ }
+ if (has_mesh) {
scene::IMesh *mesh = imesh->mesh;
- driver->clearZBuffer();
+ driver->clearBuffers(video::ECBF_DEPTH);
s32 delta = 0;
if (rotation_kind < IT_ROT_NONE) {
MeshTimeInfo &ti = rotation_time_infos[rotation_kind];
@@ -992,9 +1063,6 @@ void drawItemStack(
core::matrix4 matrix;
matrix.makeIdentity();
- static thread_local bool enable_animations =
- g_settings->getBool("inventory_items_animations");
-
if (enable_animations) {
float timer_f = (float) delta / 5000.f;
matrix.setRotationDegrees(v3f(
@@ -1040,15 +1108,36 @@ void drawItemStack(
driver->setTransform(video::ETS_PROJECTION, oldProjMat);
driver->setViewPort(oldViewPort);
- // draw the inventory_overlay
- if (def.type == ITEM_NODE && def.inventory_image.empty() &&
- !def.inventory_overlay.empty()) {
+ draw_overlay = def.type == ITEM_NODE && def.inventory_image.empty();
+ } else { // Otherwise just draw as 2D
+ video::ITexture *texture = client->idef()->getInventoryTexture(def.name, client);
+ video::SColor color;
+ if (texture) {
+ color = client->idef()->getItemstackColor(item, client);
+ } else {
+ color = video::SColor(255, 255, 255, 255);
ITextureSource *tsrc = client->getTextureSource();
- video::ITexture *overlay_texture = tsrc->getTexture(def.inventory_overlay);
- core::dimension2d<u32> dimens = overlay_texture->getOriginalSize();
- core::rect<s32> srcrect(0, 0, dimens.Width, dimens.Height);
- draw2DImageFilterScaled(driver, overlay_texture, rect, srcrect, clip, 0, true);
+ texture = tsrc->getTexture("no_texture.png");
+ if (!texture)
+ return;
}
+
+ const video::SColor colors[] = { color, color, color, color };
+
+ draw2DImageFilterScaled(driver, texture, rect,
+ core::rect<s32>({0, 0}, core::dimension2di(texture->getOriginalSize())),
+ clip, colors, true);
+
+ draw_overlay = true;
+ }
+
+ // draw the inventory_overlay
+ if (!def.inventory_overlay.empty() && draw_overlay) {
+ ITextureSource *tsrc = client->getTextureSource();
+ video::ITexture *overlay_texture = tsrc->getTexture(def.inventory_overlay);
+ core::dimension2d<u32> dimens = overlay_texture->getOriginalSize();
+ core::rect<s32> srcrect(0, 0, dimens.Width, dimens.Height);
+ draw2DImageFilterScaled(driver, overlay_texture, rect, srcrect, clip, 0, true);
}
if (def.type == ITEM_TOOL && item.wear != 0) {
diff --git a/src/client/hud.h b/src/client/hud.h
index d46545d71..fd79183a0 100644
--- a/src/client/hud.h
+++ b/src/client/hud.h
@@ -35,13 +35,13 @@ struct ItemStack;
class Hud
{
public:
- video::IVideoDriver *driver;
- scene::ISceneManager *smgr;
- gui::IGUIEnvironment *guienv;
- Client *client;
- LocalPlayer *player;
- Inventory *inventory;
- ITextureSource *tsrc;
+ enum BlockBoundsMode
+ {
+ BLOCK_BOUNDS_OFF,
+ BLOCK_BOUNDS_CURRENT,
+ BLOCK_BOUNDS_NEAR,
+ BLOCK_BOUNDS_MAX
+ } m_block_bounds_mode = BLOCK_BOUNDS_OFF;
video::SColor crosshair_argb;
video::SColor selectionbox_argb;
@@ -55,10 +55,14 @@ public:
bool pointing_at_object = false;
- Hud(gui::IGUIEnvironment *guienv, Client *client, LocalPlayer *player,
+ Hud(Client *client, LocalPlayer *player,
Inventory *inventory);
~Hud();
+ enum BlockBoundsMode toggleBlockBounds();
+ void disableBlockBounds();
+ void drawBlockBounds();
+
void drawHotbar(u16 playeritem);
void resizeHotbar();
void drawCrosshair();
@@ -103,6 +107,12 @@ private:
void drawCompassRotate(HudElement *e, video::ITexture *texture,
const core::rect<s32> &rect, int way);
+ Client *client = nullptr;
+ video::IVideoDriver *driver = nullptr;
+ LocalPlayer *player = nullptr;
+ Inventory *inventory = nullptr;
+ ITextureSource *tsrc = nullptr;
+
float m_hud_scaling; // cached minetest setting
float m_scale_factor;
v3s16 m_camera_offset;
diff --git a/src/client/imagefilters.cpp b/src/client/imagefilters.cpp
index 0fa501410..b62e336f7 100644
--- a/src/client/imagefilters.cpp
+++ b/src/client/imagefilters.cpp
@@ -19,63 +19,140 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "imagefilters.h"
#include "util/numeric.h"
#include <cmath>
+#include <cassert>
+#include <vector>
+#include <algorithm>
+
+// Simple 2D bitmap class with just the functionality needed here
+class Bitmap {
+ u32 linesize, lines;
+ std::vector<u8> data;
+
+ static inline u32 bytepos(u32 index) { return index >> 3; }
+ static inline u8 bitpos(u32 index) { return index & 7; }
+
+public:
+ Bitmap(u32 width, u32 height) : linesize(width), lines(height),
+ data(bytepos(width * height) + 1) {}
+
+ inline bool get(u32 x, u32 y) const {
+ u32 index = y * linesize + x;
+ return data[bytepos(index)] & (1 << bitpos(index));
+ }
+
+ inline void set(u32 x, u32 y) {
+ u32 index = y * linesize + x;
+ data[bytepos(index)] |= 1 << bitpos(index);
+ }
+
+ inline bool all() const {
+ for (u32 i = 0; i < data.size() - 1; i++) {
+ if (data[i] != 0xff)
+ return false;
+ }
+ // last byte not entirely filled
+ for (u8 i = 0; i < bitpos(linesize * lines); i++) {
+ bool value_of_bit = data.back() & (1 << i);
+ if (!value_of_bit)
+ return false;
+ }
+ return true;
+ }
+
+ inline void copy(Bitmap &to) const {
+ assert(to.linesize == linesize && to.lines == lines);
+ to.data = data;
+ }
+};
/* Fill in RGB values for transparent pixels, to correct for odd colors
* appearing at borders when blending. This is because many PNG optimizers
* like to discard RGB values of transparent pixels, but when blending then
- * with non-transparent neighbors, their RGB values will shpw up nonetheless.
+ * with non-transparent neighbors, their RGB values will show up nonetheless.
*
* This function modifies the original image in-place.
*
* Parameter "threshold" is the alpha level below which pixels are considered
- * transparent. Should be 127 for 3d where alpha is threshold, but 0 for
- * 2d where alpha is blended.
+ * transparent. Should be 127 when the texture is used with ALPHA_CHANNEL_REF,
+ * 0 when alpha blending is used.
*/
void imageCleanTransparent(video::IImage *src, u32 threshold)
{
core::dimension2d<u32> dim = src->getDimension();
- // Walk each pixel looking for fully transparent ones.
+ Bitmap bitmap(dim.Width, dim.Height);
+
+ // First pass: Mark all opaque pixels
// Note: loop y around x for better cache locality.
for (u32 ctry = 0; ctry < dim.Height; ctry++)
for (u32 ctrx = 0; ctrx < dim.Width; ctrx++) {
+ if (src->getPixel(ctrx, ctry).getAlpha() > threshold)
+ bitmap.set(ctrx, ctry);
+ }
+
+ // Exit early if all pixels opaque
+ if (bitmap.all())
+ return;
+
+ Bitmap newmap = bitmap;
+
+ // Cap iterations to keep runtime reasonable, for higher-res textures we can
+ // get away with filling less pixels.
+ int iter_max = 11 - std::max(dim.Width, dim.Height) / 16;
+ iter_max = std::max(iter_max, 2);
- // Ignore opaque pixels.
- irr::video::SColor c = src->getPixel(ctrx, ctry);
- if (c.getAlpha() > threshold)
+ // Then repeatedly look for transparent pixels, filling them in until
+ // we're finished.
+ for (int iter = 0; iter < iter_max; iter++) {
+
+ for (u32 ctry = 0; ctry < dim.Height; ctry++)
+ for (u32 ctrx = 0; ctrx < dim.Width; ctrx++) {
+ // Skip pixels we have already processed
+ if (bitmap.get(ctrx, ctry))
continue;
- // Sample size and total weighted r, g, b values.
+ video::SColor c = src->getPixel(ctrx, ctry);
+
+ // Sample size and total weighted r, g, b values
u32 ss = 0, sr = 0, sg = 0, sb = 0;
- // Walk each neighbor pixel (clipped to image bounds).
+ // Walk each neighbor pixel (clipped to image bounds)
for (u32 sy = (ctry < 1) ? 0 : (ctry - 1);
sy <= (ctry + 1) && sy < dim.Height; sy++)
for (u32 sx = (ctrx < 1) ? 0 : (ctrx - 1);
sx <= (ctrx + 1) && sx < dim.Width; sx++) {
-
- // Ignore transparent pixels.
- irr::video::SColor d = src->getPixel(sx, sy);
- if (d.getAlpha() <= threshold)
+ // Ignore pixels we haven't processed
+ if (!bitmap.get(sx, sy))
continue;
-
- // Add RGB values weighted by alpha.
- u32 a = d.getAlpha();
+
+ // Add RGB values weighted by alpha IF the pixel is opaque, otherwise
+ // use full weight since we want to propagate colors.
+ video::SColor d = src->getPixel(sx, sy);
+ u32 a = d.getAlpha() <= threshold ? 255 : d.getAlpha();
ss += a;
sr += a * d.getRed();
sg += a * d.getGreen();
sb += a * d.getBlue();
}
- // If we found any neighbor RGB data, set pixel to average
- // weighted by alpha.
+ // Set pixel to average weighted by alpha
if (ss > 0) {
c.setRed(sr / ss);
c.setGreen(sg / ss);
c.setBlue(sb / ss);
src->setPixel(ctrx, ctry, c);
+ newmap.set(ctrx, ctry);
}
}
+
+ if (newmap.all())
+ return;
+
+ // Apply changes to bitmap for next run. This is done so we don't introduce
+ // a bias in color propagation in the direction pixels are processed.
+ newmap.copy(bitmap);
+
+ }
}
/* Scale a region of an image into another image, using nearest-neighbor with
diff --git a/src/client/imagefilters.h b/src/client/imagefilters.h
index 5676faf85..c9bdefbb6 100644
--- a/src/client/imagefilters.h
+++ b/src/client/imagefilters.h
@@ -23,13 +23,13 @@ with this program; if not, write to the Free Software Foundation, Inc.,
/* Fill in RGB values for transparent pixels, to correct for odd colors
* appearing at borders when blending. This is because many PNG optimizers
* like to discard RGB values of transparent pixels, but when blending then
- * with non-transparent neighbors, their RGB values will shpw up nonetheless.
+ * with non-transparent neighbors, their RGB values will show up nonetheless.
*
* This function modifies the original image in-place.
*
* Parameter "threshold" is the alpha level below which pixels are considered
- * transparent. Should be 127 for 3d where alpha is threshold, but 0 for
- * 2d where alpha is blended.
+ * transparent. Should be 127 when the texture is used with ALPHA_CHANNEL_REF,
+ * 0 when alpha blending is used.
*/
void imageCleanTransparent(video::IImage *src, u32 threshold);
diff --git a/src/client/inputhandler.cpp b/src/client/inputhandler.cpp
index 978baa320..a6ba87e8d 100644
--- a/src/client/inputhandler.cpp
+++ b/src/client/inputhandler.cpp
@@ -35,7 +35,7 @@ void KeyCache::populate()
key[KeyType::LEFT] = getKeySetting("keymap_left");
key[KeyType::RIGHT] = getKeySetting("keymap_right");
key[KeyType::JUMP] = getKeySetting("keymap_jump");
- key[KeyType::SPECIAL1] = getKeySetting("keymap_special1");
+ key[KeyType::AUX1] = getKeySetting("keymap_aux1");
key[KeyType::SNEAK] = getKeySetting("keymap_sneak");
key[KeyType::DIG] = getKeySetting("keymap_dig");
key[KeyType::PLACE] = getKeySetting("keymap_place");
@@ -60,6 +60,7 @@ void KeyCache::populate()
key[KeyType::DEC_VOLUME] = getKeySetting("keymap_decrease_volume");
key[KeyType::CINEMATIC] = getKeySetting("keymap_cinematic");
key[KeyType::SCREENSHOT] = getKeySetting("keymap_screenshot");
+ key[KeyType::TOGGLE_BLOCK_BOUNDS] = getKeySetting("keymap_toggle_block_bounds");
key[KeyType::TOGGLE_HUD] = getKeySetting("keymap_toggle_hud");
key[KeyType::TOGGLE_CHAT] = getKeySetting("keymap_toggle_chat");
key[KeyType::TOGGLE_FOG] = getKeySetting("keymap_toggle_fog");
@@ -137,11 +138,8 @@ bool MyEventReceiver::OnEvent(const SEvent &event)
#endif
} else if (event.EventType == irr::EET_JOYSTICK_INPUT_EVENT) {
- /* TODO add a check like:
- if (event.JoystickEvent != joystick_we_listen_for)
- return false;
- */
- return joystick->handleEvent(event.JoystickEvent);
+ // joystick may be nullptr if game is launched with '--random-input' parameter
+ return joystick && joystick->handleEvent(event.JoystickEvent);
} else if (event.EventType == irr::EET_MOUSE_INPUT_EVENT) {
// Handle mouse events
KeyPress key;
@@ -219,7 +217,7 @@ void RandomInputHandler::step(float dtime)
{
static RandomInputHandlerSimData rnd_data[] = {
{ "keymap_jump", 0.0f, 40 },
- { "keymap_special1", 0.0f, 40 },
+ { "keymap_aux1", 0.0f, 40 },
{ "keymap_forward", 0.0f, 40 },
{ "keymap_left", 0.0f, 40 },
{ "keymap_dig", 0.0f, 30 },
@@ -242,4 +240,39 @@ void RandomInputHandler::step(float dtime)
}
}
mousepos += mousespeed;
+ static bool useJoystick = false;
+ {
+ static float counterUseJoystick = 0;
+ counterUseJoystick -= dtime;
+ if (counterUseJoystick < 0.0) {
+ counterUseJoystick = 5.0; // switch between joystick and keyboard direction input
+ useJoystick = !useJoystick;
+ }
+ }
+ if (useJoystick) {
+ static float counterMovement = 0;
+ counterMovement -= dtime;
+ if (counterMovement < 0.0) {
+ counterMovement = 0.1 * Rand(1, 40);
+ movementSpeed = Rand(0,100)*0.01;
+ movementDirection = Rand(-100, 100)*0.01 * M_PI;
+ }
+ } else {
+ bool f = keydown[keycache.key[KeyType::FORWARD]],
+ l = keydown[keycache.key[KeyType::LEFT]];
+ if (f || l) {
+ movementSpeed = 1.0f;
+ if (f && !l)
+ movementDirection = 0.0;
+ else if (!f && l)
+ movementDirection = -M_PI_2;
+ else if (f && l)
+ movementDirection = -M_PI_4;
+ else
+ movementDirection = 0.0;
+ } else {
+ movementSpeed = 0.0;
+ movementDirection = 0.0;
+ }
+ }
}
diff --git a/src/client/inputhandler.h b/src/client/inputhandler.h
index 1fb4cf0ec..3db105c51 100644
--- a/src/client/inputhandler.h
+++ b/src/client/inputhandler.h
@@ -152,8 +152,14 @@ public:
// in the subsequent iteration of Game::processPlayerInteraction
bool WasKeyReleased(const KeyPress &keycode) const { return keyWasReleased[keycode]; }
- void listenForKey(const KeyPress &keyCode) { keysListenedFor.set(keyCode); }
- void dontListenForKeys() { keysListenedFor.clear(); }
+ void listenForKey(const KeyPress &keyCode)
+ {
+ keysListenedFor.set(keyCode);
+ }
+ void dontListenForKeys()
+ {
+ keysListenedFor.clear();
+ }
s32 getMouseWheel()
{
@@ -189,8 +195,6 @@ public:
#endif
}
- s32 mouse_wheel = 0;
-
JoystickController *joystick = nullptr;
#ifdef HAVE_TOUCHSCREENGUI
@@ -198,6 +202,8 @@ public:
#endif
private:
+ s32 mouse_wheel = 0;
+
// The current state of keys
KeyList keyIsDown;
@@ -240,6 +246,9 @@ public:
virtual bool wasKeyReleased(GameKeyType k) = 0;
virtual bool cancelPressed() = 0;
+ virtual float getMovementSpeed() = 0;
+ virtual float getMovementDirection() = 0;
+
virtual void clearWasKeyPressed() {}
virtual void clearWasKeyReleased() {}
@@ -269,6 +278,12 @@ public:
{
m_receiver->joystick = &joystick;
}
+
+ virtual ~RealInputHandler()
+ {
+ m_receiver->joystick = nullptr;
+ }
+
virtual bool isKeyDown(GameKeyType k)
{
return m_receiver->IsKeyDown(keycache.key[k]) || joystick.isKeyDown(k);
@@ -285,10 +300,52 @@ public:
{
return m_receiver->WasKeyReleased(keycache.key[k]) || joystick.wasKeyReleased(k);
}
+
+ virtual float getMovementSpeed()
+ {
+ bool f = m_receiver->IsKeyDown(keycache.key[KeyType::FORWARD]),
+ b = m_receiver->IsKeyDown(keycache.key[KeyType::BACKWARD]),
+ l = m_receiver->IsKeyDown(keycache.key[KeyType::LEFT]),
+ r = m_receiver->IsKeyDown(keycache.key[KeyType::RIGHT]);
+ if (f || b || l || r)
+ {
+ // if contradictory keys pressed, stay still
+ if (f && b && l && r)
+ return 0.0f;
+ else if (f && b && !l && !r)
+ return 0.0f;
+ else if (!f && !b && l && r)
+ return 0.0f;
+ return 1.0f; // If there is a keyboard event, assume maximum speed
+ }
+ return joystick.getMovementSpeed();
+ }
+
+ virtual float getMovementDirection()
+ {
+ float x = 0, z = 0;
+
+ /* Check keyboard for input */
+ if (m_receiver->IsKeyDown(keycache.key[KeyType::FORWARD]))
+ z += 1;
+ if (m_receiver->IsKeyDown(keycache.key[KeyType::BACKWARD]))
+ z -= 1;
+ if (m_receiver->IsKeyDown(keycache.key[KeyType::RIGHT]))
+ x += 1;
+ if (m_receiver->IsKeyDown(keycache.key[KeyType::LEFT]))
+ x -= 1;
+
+ if (x != 0 || z != 0) /* If there is a keyboard event, it takes priority */
+ return atan2(x, z);
+ else
+ return joystick.getMovementDirection();
+ }
+
virtual bool cancelPressed()
{
return wasKeyDown(KeyType::ESC) || m_receiver->WasKeyDown(CancelKey);
}
+
virtual void clearWasKeyPressed()
{
m_receiver->clearWasKeyPressed();
@@ -297,17 +354,21 @@ public:
{
m_receiver->clearWasKeyReleased();
}
+
virtual void listenForKey(const KeyPress &keyCode)
{
m_receiver->listenForKey(keyCode);
}
- virtual void dontListenForKeys() { m_receiver->dontListenForKeys(); }
+ virtual void dontListenForKeys()
+ {
+ m_receiver->dontListenForKeys();
+ }
+
virtual v2s32 getMousePos()
{
- if (RenderingEngine::get_raw_device()->getCursorControl()) {
- return RenderingEngine::get_raw_device()
- ->getCursorControl()
- ->getPosition();
+ auto control = RenderingEngine::get_raw_device()->getCursorControl();
+ if (control) {
+ return control->getPosition();
}
return m_mousepos;
@@ -315,16 +376,18 @@ public:
virtual void setMousePos(s32 x, s32 y)
{
- if (RenderingEngine::get_raw_device()->getCursorControl()) {
- RenderingEngine::get_raw_device()
- ->getCursorControl()
- ->setPosition(x, y);
+ auto control = RenderingEngine::get_raw_device()->getCursorControl();
+ if (control) {
+ control->setPosition(x, y);
} else {
m_mousepos = v2s32(x, y);
}
}
- virtual s32 getMouseWheel() { return m_receiver->getMouseWheel(); }
+ virtual s32 getMouseWheel()
+ {
+ return m_receiver->getMouseWheel();
+ }
void clear()
{
@@ -352,6 +415,8 @@ public:
virtual bool wasKeyPressed(GameKeyType k) { return false; }
virtual bool wasKeyReleased(GameKeyType k) { return false; }
virtual bool cancelPressed() { return false; }
+ virtual float getMovementSpeed() { return movementSpeed; }
+ virtual float getMovementDirection() { return movementDirection; }
virtual v2s32 getMousePos() { return mousepos; }
virtual void setMousePos(s32 x, s32 y) { mousepos = v2s32(x, y); }
@@ -365,4 +430,6 @@ private:
KeyList keydown;
v2s32 mousepos;
v2s32 mousespeed;
+ float movementSpeed;
+ float movementDirection;
};
diff --git a/src/client/joystick_controller.cpp b/src/client/joystick_controller.cpp
index f61ae4ae6..aae73c62d 100644
--- a/src/client/joystick_controller.cpp
+++ b/src/client/joystick_controller.cpp
@@ -79,7 +79,7 @@ JoystickLayout create_default_layout()
// Accessible without any modifier pressed
JLO_B_PB(KeyType::JUMP, bm | 1 << 0, 1 << 0);
- JLO_B_PB(KeyType::SPECIAL1, bm | 1 << 1, 1 << 1);
+ JLO_B_PB(KeyType::AUX1, bm | 1 << 1, 1 << 1);
// Accessible with start button not pressed, but four pressed
// TODO find usage for button 0
@@ -126,11 +126,11 @@ JoystickLayout create_xbox_layout()
// 4 Buttons
JLO_B_PB(KeyType::JUMP, 1 << 0, 1 << 0); // A/green
JLO_B_PB(KeyType::ESC, 1 << 1, 1 << 1); // B/red
- JLO_B_PB(KeyType::SPECIAL1, 1 << 2, 1 << 2); // X/blue
+ JLO_B_PB(KeyType::AUX1, 1 << 2, 1 << 2); // X/blue
JLO_B_PB(KeyType::INVENTORY, 1 << 3, 1 << 3); // Y/yellow
// Analog Sticks
- JLO_B_PB(KeyType::SPECIAL1, 1 << 11, 1 << 11); // left
+ JLO_B_PB(KeyType::AUX1, 1 << 11, 1 << 11); // left
JLO_B_PB(KeyType::SNEAK, 1 << 12, 1 << 12); // right
// Triggers
@@ -154,12 +154,61 @@ JoystickLayout create_xbox_layout()
return jlo;
}
+JoystickLayout create_dragonrise_gamecube_layout()
+{
+ JoystickLayout jlo;
+
+ jlo.axes_deadzone = 7000;
+
+ const JoystickAxisLayout axes[JA_COUNT] = {
+ // Control Stick
+ {0, 1}, // JA_SIDEWARD_MOVE
+ {1, 1}, // JA_FORWARD_MOVE
+
+ // C-Stick
+ {3, 1}, // JA_FRUSTUM_HORIZONTAL
+ {4, 1}, // JA_FRUSTUM_VERTICAL
+ };
+ memcpy(jlo.axes, axes, sizeof(jlo.axes));
+
+ // The center button
+ JLO_B_PB(KeyType::ESC, 1 << 9, 1 << 9); // Start/Pause Button
+
+ // Front right buttons
+ JLO_B_PB(KeyType::JUMP, 1 << 2, 1 << 2); // A Button
+ JLO_B_PB(KeyType::SNEAK, 1 << 3, 1 << 3); // B Button
+ JLO_B_PB(KeyType::DROP, 1 << 0, 1 << 0); // Y Button
+ JLO_B_PB(KeyType::AUX1, 1 << 1, 1 << 1); // X Button
+
+ // Triggers
+ JLO_B_PB(KeyType::DIG, 1 << 4, 1 << 4); // L Trigger
+ JLO_B_PB(KeyType::PLACE, 1 << 5, 1 << 5); // R Trigger
+ JLO_B_PB(KeyType::INVENTORY, 1 << 6, 1 << 6); // Z Button
+
+ // D-Pad
+ JLO_A_PB(KeyType::HOTBAR_PREV, 5, 1, jlo.axes_deadzone); // left
+ JLO_A_PB(KeyType::HOTBAR_NEXT, 5, -1, jlo.axes_deadzone); // right
+ // Axis are hard to actuate independantly, best to leave up and down unused.
+ //JLO_A_PB(0, 6, 1, jlo.axes_deadzone); // up
+ //JLO_A_PB(0, 6, -1, jlo.axes_deadzone); // down
+
+ // Movements tied to Control Stick, important for vessels
+ JLO_A_PB(KeyType::LEFT, 0, 1, jlo.axes_deadzone);
+ JLO_A_PB(KeyType::RIGHT, 0, -1, jlo.axes_deadzone);
+ JLO_A_PB(KeyType::FORWARD, 1, 1, jlo.axes_deadzone);
+ JLO_A_PB(KeyType::BACKWARD, 1, -1, jlo.axes_deadzone);
+
+ return jlo;
+}
+
+
JoystickController::JoystickController() :
doubling_dtime(g_settings->getFloat("repeat_joystick_button_time"))
{
for (float &i : m_past_pressed_time) {
i = 0;
}
+ m_layout.axes_deadzone = 0;
clear();
}
@@ -187,6 +236,8 @@ void JoystickController::setLayoutFromControllerName(const std::string &name)
{
if (lowercase(name).find("xbox") != std::string::npos) {
m_layout = create_xbox_layout();
+ } else if (lowercase(name).find("dragonrise_gamecube") != std::string::npos) {
+ m_layout = create_dragonrise_gamecube_layout();
} else {
m_layout = create_default_layout();
}
@@ -251,10 +302,27 @@ void JoystickController::clear()
memset(m_axes_vals, 0, sizeof(m_axes_vals));
}
-s16 JoystickController::getAxisWithoutDead(JoystickAxis axis)
+float JoystickController::getAxisWithoutDead(JoystickAxis axis)
{
s16 v = m_axes_vals[axis];
+
if (abs(v) < m_layout.axes_deadzone)
- return 0;
- return v;
+ return 0.0f;
+
+ v += (v < 0 ? m_layout.axes_deadzone : -m_layout.axes_deadzone);
+
+ return (float)v / ((float)(INT16_MAX - m_layout.axes_deadzone));
+}
+
+float JoystickController::getMovementDirection()
+{
+ return atan2(getAxisWithoutDead(JA_SIDEWARD_MOVE), -getAxisWithoutDead(JA_FORWARD_MOVE));
+}
+
+float JoystickController::getMovementSpeed()
+{
+ float speed = sqrt(pow(getAxisWithoutDead(JA_FORWARD_MOVE), 2) + pow(getAxisWithoutDead(JA_SIDEWARD_MOVE), 2));
+ if (speed > 1.0f)
+ speed = 1.0f;
+ return speed;
}
diff --git a/src/client/joystick_controller.h b/src/client/joystick_controller.h
index 3f361e4ef..cbc60886c 100644
--- a/src/client/joystick_controller.h
+++ b/src/client/joystick_controller.h
@@ -144,7 +144,10 @@ public:
return m_axes_vals[axis];
}
- s16 getAxisWithoutDead(JoystickAxis axis);
+ float getAxisWithoutDead(JoystickAxis axis);
+
+ float getMovementDirection();
+ float getMovementSpeed();
f32 doubling_dtime;
diff --git a/src/client/keycode.cpp b/src/client/keycode.cpp
index ce5214f54..fac077f0f 100644
--- a/src/client/keycode.cpp
+++ b/src/client/keycode.cpp
@@ -197,7 +197,6 @@ static const struct table_key table[] = {
DEFINEKEY1(KEY_MODECHANGE, N_("IME Mode Change"))
DEFINEKEY1(KEY_APPS, N_("Apps"))
DEFINEKEY1(KEY_SLEEP, N_("Sleep"))
-#if !(IRRLICHT_VERSION_MAJOR <= 1 && IRRLICHT_VERSION_MINOR <= 7 && IRRLICHT_VERSION_REVISION < 3)
DEFINEKEY1(KEY_OEM_1, "OEM 1") // KEY_OEM_[0-9] and KEY_OEM_102 are assigned to multiple
DEFINEKEY1(KEY_OEM_2, "OEM 2") // different chars (on different platforms too) and thus w/o char
DEFINEKEY1(KEY_OEM_3, "OEM 3")
@@ -208,7 +207,6 @@ static const struct table_key table[] = {
DEFINEKEY1(KEY_OEM_8, "OEM 8")
DEFINEKEY1(KEY_OEM_AX, "OEM AX")
DEFINEKEY1(KEY_OEM_102, "OEM 102")
-#endif
DEFINEKEY1(KEY_ATTN, "Attn")
DEFINEKEY1(KEY_CRSEL, "CrSel")
DEFINEKEY1(KEY_EXSEL, "ExSel")
diff --git a/src/client/keys.h b/src/client/keys.h
index 60a7a3c45..e120a2d92 100644
--- a/src/client/keys.h
+++ b/src/client/keys.h
@@ -32,7 +32,7 @@ public:
LEFT,
RIGHT,
JUMP,
- SPECIAL1,
+ AUX1,
SNEAK,
AUTOFORWARD,
DIG,
@@ -59,6 +59,7 @@ public:
DEC_VOLUME,
CINEMATIC,
SCREENSHOT,
+ TOGGLE_BLOCK_BOUNDS,
TOGGLE_HUD,
TOGGLE_CHAT,
TOGGLE_FOG,
diff --git a/src/client/localplayer.cpp b/src/client/localplayer.cpp
index f3eb1a2dd..4f1ea7bda 100644
--- a/src/client/localplayer.cpp
+++ b/src/client/localplayer.cpp
@@ -227,8 +227,9 @@ void LocalPlayer::move(f32 dtime, Environment *env, f32 pos_max_d,
pp = floatToInt(position + v3f(0.0f, BS * 0.1f, 0.0f), BS);
node = map->getNode(pp, &is_valid_position);
if (is_valid_position) {
- in_liquid = nodemgr->get(node.getContent()).isLiquid();
- liquid_viscosity = nodemgr->get(node.getContent()).liquid_viscosity;
+ const ContentFeatures &cf = nodemgr->get(node.getContent());
+ in_liquid = cf.liquid_move_physics;
+ move_resistance = cf.move_resistance;
} else {
in_liquid = false;
}
@@ -238,8 +239,9 @@ void LocalPlayer::move(f32 dtime, Environment *env, f32 pos_max_d,
pp = floatToInt(position + v3f(0.0f, BS * 0.5f, 0.0f), BS);
node = map->getNode(pp, &is_valid_position);
if (is_valid_position) {
- in_liquid = nodemgr->get(node.getContent()).isLiquid();
- liquid_viscosity = nodemgr->get(node.getContent()).liquid_viscosity;
+ const ContentFeatures &cf = nodemgr->get(node.getContent());
+ in_liquid = cf.liquid_move_physics;
+ move_resistance = cf.move_resistance;
} else {
in_liquid = false;
}
@@ -252,7 +254,7 @@ void LocalPlayer::move(f32 dtime, Environment *env, f32 pos_max_d,
pp = floatToInt(position + v3f(0.0f), BS);
node = map->getNode(pp, &is_valid_position);
if (is_valid_position) {
- in_liquid_stable = nodemgr->get(node.getContent()).isLiquid();
+ in_liquid_stable = nodemgr->get(node.getContent()).liquid_move_physics;
} else {
in_liquid_stable = false;
}
@@ -566,23 +568,7 @@ void LocalPlayer::applyControl(float dtime, Environment *env)
}
}
- if (control.up)
- speedH += v3f(0.0f, 0.0f, 1.0f);
-
- if (control.down)
- speedH -= v3f(0.0f, 0.0f, 1.0f);
-
- if (!control.up && !control.down)
- speedH -= v3f(0.0f, 0.0f, 1.0f) * (control.forw_move_joystick_axis / 32767.f);
-
- if (control.left)
- speedH += v3f(-1.0f, 0.0f, 0.0f);
-
- if (control.right)
- speedH += v3f(1.0f, 0.0f, 0.0f);
-
- if (!control.left && !control.right)
- speedH += v3f(1.0f, 0.0f, 0.0f) * (control.sidew_move_joystick_axis / 32767.f);
+ speedH = v3f(sin(control.movement_direction), 0.0f, cos(control.movement_direction));
if (m_autojump) {
// release autojump after a given time
@@ -639,6 +625,8 @@ void LocalPlayer::applyControl(float dtime, Environment *env)
else
speedH = speedH.normalize() * movement_speed_walk;
+ speedH *= control.movement_speed; /* Apply analog input */
+
// Acceleration increase
f32 incH = 0.0f; // Horizontal (X, Z)
f32 incV = 0.0f; // Vertical (Y)
@@ -814,8 +802,9 @@ void LocalPlayer::old_move(f32 dtime, Environment *env, f32 pos_max_d,
pp = floatToInt(position + v3f(0.0f, BS * 0.1f, 0.0f), BS);
node = map->getNode(pp, &is_valid_position);
if (is_valid_position) {
- in_liquid = nodemgr->get(node.getContent()).isLiquid();
- liquid_viscosity = nodemgr->get(node.getContent()).liquid_viscosity;
+ const ContentFeatures &cf = nodemgr->get(node.getContent());
+ in_liquid = cf.liquid_move_physics;
+ move_resistance = cf.move_resistance;
} else {
in_liquid = false;
}
@@ -824,8 +813,9 @@ void LocalPlayer::old_move(f32 dtime, Environment *env, f32 pos_max_d,
pp = floatToInt(position + v3f(0.0f, BS * 0.5f, 0.0f), BS);
node = map->getNode(pp, &is_valid_position);
if (is_valid_position) {
- in_liquid = nodemgr->get(node.getContent()).isLiquid();
- liquid_viscosity = nodemgr->get(node.getContent()).liquid_viscosity;
+ const ContentFeatures &cf = nodemgr->get(node.getContent());
+ in_liquid = cf.liquid_move_physics;
+ move_resistance = cf.move_resistance;
} else {
in_liquid = false;
}
@@ -837,7 +827,7 @@ void LocalPlayer::old_move(f32 dtime, Environment *env, f32 pos_max_d,
pp = floatToInt(position + v3f(0.0f), BS);
node = map->getNode(pp, &is_valid_position);
if (is_valid_position)
- in_liquid_stable = nodemgr->get(node.getContent()).isLiquid();
+ in_liquid_stable = nodemgr->get(node.getContent()).liquid_move_physics;
else
in_liquid_stable = false;
@@ -1106,12 +1096,8 @@ void LocalPlayer::handleAutojump(f32 dtime, Environment *env,
if (m_autojump)
return;
- bool control_forward = control.up ||
- (!control.up && !control.down &&
- control.forw_move_joystick_axis < -0.05f);
-
bool could_autojump =
- m_can_jump && !control.jump && !control.sneak && control_forward;
+ m_can_jump && !control.jump && !control.sneak && control.isMoving();
if (!could_autojump)
return;
diff --git a/src/client/localplayer.h b/src/client/localplayer.h
index 345aec9d9..577be2803 100644
--- a/src/client/localplayer.h
+++ b/src/client/localplayer.h
@@ -55,8 +55,8 @@ public:
bool in_liquid = false;
// This is more stable and defines the maximum speed of the player
bool in_liquid_stable = false;
- // Gets the viscosity of water to calculate friction
- u8 liquid_viscosity = 0;
+ // Slows down the player when moving through
+ u8 move_resistance = 0;
bool is_climbing = false;
bool swimming_vertical = false;
bool swimming_pitch = false;
@@ -86,7 +86,7 @@ public:
v3f last_speed;
float last_pitch = 0.0f;
float last_yaw = 0.0f;
- unsigned int last_keyPressed = 0;
+ u32 last_keyPressed = 0;
u8 last_camera_fov = 0;
u8 last_wanted_range = 0;
diff --git a/src/client/mapblock_mesh.cpp b/src/client/mapblock_mesh.cpp
index 167e1e3ec..249a56087 100644
--- a/src/client/mapblock_mesh.cpp
+++ b/src/client/mapblock_mesh.cpp
@@ -407,20 +407,20 @@ static void getNodeTextureCoords(v3f base, const v3f &scale, const v3s16 &dir, f
if (dir.X > 0 || dir.Y != 0 || dir.Z < 0)
base -= scale;
if (dir == v3s16(0,0,1)) {
- *u = -base.X - 1;
- *v = -base.Y - 1;
+ *u = -base.X;
+ *v = -base.Y;
} else if (dir == v3s16(0,0,-1)) {
*u = base.X + 1;
- *v = -base.Y - 2;
+ *v = -base.Y - 1;
} else if (dir == v3s16(1,0,0)) {
*u = base.Z + 1;
- *v = -base.Y - 2;
- } else if (dir == v3s16(-1,0,0)) {
- *u = -base.Z - 1;
*v = -base.Y - 1;
+ } else if (dir == v3s16(-1,0,0)) {
+ *u = -base.Z;
+ *v = -base.Y;
} else if (dir == v3s16(0,1,0)) {
*u = base.X + 1;
- *v = -base.Z - 2;
+ *v = -base.Z - 1;
} else if (dir == v3s16(0,-1,0)) {
*u = base.X + 1;
*v = base.Z + 1;
@@ -860,6 +860,9 @@ static void updateFastFaceRow(
g_settings->getBool("enable_shaders") &&
g_settings->getBool("enable_waving_water");
+ static thread_local const bool force_not_tiling =
+ false && g_settings->getBool("enable_dynamic_shadows");
+
v3s16 p = startpos;
u16 continuous_tiles_count = 1;
@@ -898,7 +901,8 @@ static void updateFastFaceRow(
waving,
next_tile);
- if (next_makes_face == makes_face
+ if (!force_not_tiling
+ && next_makes_face == makes_face
&& next_p_corrected == p_corrected + translate_dir
&& next_face_dir_corrected == face_dir_corrected
&& memcmp(next_lights, lights, sizeof(lights)) == 0
@@ -1072,8 +1076,8 @@ MapBlockMesh::MapBlockMesh(MeshMakeData *data, v3s16 camera_offset):
*/
{
- MapblockMeshGenerator generator(data, &collector);
- generator.generate();
+ MapblockMeshGenerator(data, &collector,
+ data->m_client->getSceneManager()->getMeshManipulator()).generate();
}
/*
diff --git a/src/client/mesh.cpp b/src/client/mesh.cpp
index 2400a374c..c56eba2e2 100644
--- a/src/client/mesh.cpp
+++ b/src/client/mesh.cpp
@@ -27,14 +27,6 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include <SAnimatedMesh.h>
#include <IAnimatedMeshSceneNode.h>
-// In Irrlicht 1.8 the signature of ITexture::lock was changed from
-// (bool, u32) to (E_TEXTURE_LOCK_MODE, u32).
-#if IRRLICHT_VERSION_MAJOR == 1 && IRRLICHT_VERSION_MINOR <= 7
-#define MY_ETLM_READ_ONLY true
-#else
-#define MY_ETLM_READ_ONLY video::ETLM_READ_ONLY
-#endif
-
inline static void applyShadeFactor(video::SColor& color, float factor)
{
color.setRed(core::clamp(core::round32(color.getRed()*factor), 0, 255));
@@ -506,592 +498,3 @@ scene::IMesh* convertNodeboxesToMesh(const std::vector<aabb3f> &boxes,
}
return dst_mesh;
}
-
-struct vcache
-{
- core::array<u32> tris;
- float score;
- s16 cachepos;
- u16 NumActiveTris;
-};
-
-struct tcache
-{
- u16 ind[3];
- float score;
- bool drawn;
-};
-
-const u16 cachesize = 32;
-
-float FindVertexScore(vcache *v)
-{
- const float CacheDecayPower = 1.5f;
- const float LastTriScore = 0.75f;
- const float ValenceBoostScale = 2.0f;
- const float ValenceBoostPower = 0.5f;
- const float MaxSizeVertexCache = 32.0f;
-
- if (v->NumActiveTris == 0)
- {
- // No tri needs this vertex!
- return -1.0f;
- }
-
- float Score = 0.0f;
- int CachePosition = v->cachepos;
- if (CachePosition < 0)
- {
- // Vertex is not in FIFO cache - no score.
- }
- else
- {
- if (CachePosition < 3)
- {
- // This vertex was used in the last triangle,
- // so it has a fixed score.
- Score = LastTriScore;
- }
- else
- {
- // Points for being high in the cache.
- const float Scaler = 1.0f / (MaxSizeVertexCache - 3);
- Score = 1.0f - (CachePosition - 3) * Scaler;
- Score = powf(Score, CacheDecayPower);
- }
- }
-
- // Bonus points for having a low number of tris still to
- // use the vert, so we get rid of lone verts quickly.
- float ValenceBoost = powf(v->NumActiveTris,
- -ValenceBoostPower);
- Score += ValenceBoostScale * ValenceBoost;
-
- return Score;
-}
-
-/*
- A specialized LRU cache for the Forsyth algorithm.
-*/
-
-class f_lru
-{
-
-public:
- f_lru(vcache *v, tcache *t): vc(v), tc(t)
- {
- for (int &i : cache) {
- i = -1;
- }
- }
-
- // Adds this vertex index and returns the highest-scoring triangle index
- u32 add(u16 vert, bool updatetris = false)
- {
- bool found = false;
-
- // Mark existing pos as empty
- for (u16 i = 0; i < cachesize; i++)
- {
- if (cache[i] == vert)
- {
- // Move everything down
- for (u16 j = i; j; j--)
- {
- cache[j] = cache[j - 1];
- }
-
- found = true;
- break;
- }
- }
-
- if (!found)
- {
- if (cache[cachesize-1] != -1)
- vc[cache[cachesize-1]].cachepos = -1;
-
- // Move everything down
- for (u16 i = cachesize - 1; i; i--)
- {
- cache[i] = cache[i - 1];
- }
- }
-
- cache[0] = vert;
-
- u32 highest = 0;
- float hiscore = 0;
-
- if (updatetris)
- {
- // Update cache positions
- for (u16 i = 0; i < cachesize; i++)
- {
- if (cache[i] == -1)
- break;
-
- vc[cache[i]].cachepos = i;
- vc[cache[i]].score = FindVertexScore(&vc[cache[i]]);
- }
-
- // Update triangle scores
- for (int i : cache) {
- if (i == -1)
- break;
-
- const u16 trisize = vc[i].tris.size();
- for (u16 t = 0; t < trisize; t++)
- {
- tcache *tri = &tc[vc[i].tris[t]];
-
- tri->score =
- vc[tri->ind[0]].score +
- vc[tri->ind[1]].score +
- vc[tri->ind[2]].score;
-
- if (tri->score > hiscore)
- {
- hiscore = tri->score;
- highest = vc[i].tris[t];
- }
- }
- }
- }
-
- return highest;
- }
-
-private:
- s32 cache[cachesize];
- vcache *vc;
- tcache *tc;
-};
-
-/**
-Vertex cache optimization according to the Forsyth paper:
-http://home.comcast.net/~tom_forsyth/papers/fast_vert_cache_opt.html
-
-The function is thread-safe (read: you can optimize several meshes in different threads)
-
-\param mesh Source mesh for the operation. */
-scene::IMesh* createForsythOptimizedMesh(const scene::IMesh *mesh)
-{
- if (!mesh)
- return 0;
-
- scene::SMesh *newmesh = new scene::SMesh();
- newmesh->BoundingBox = mesh->getBoundingBox();
-
- const u32 mbcount = mesh->getMeshBufferCount();
-
- for (u32 b = 0; b < mbcount; ++b)
- {
- const scene::IMeshBuffer *mb = mesh->getMeshBuffer(b);
-
- if (mb->getIndexType() != video::EIT_16BIT)
- {
- //os::Printer::log("Cannot optimize a mesh with 32bit indices", ELL_ERROR);
- newmesh->drop();
- return 0;
- }
-
- const u32 icount = mb->getIndexCount();
- const u32 tcount = icount / 3;
- const u32 vcount = mb->getVertexCount();
- const u16 *ind = mb->getIndices();
-
- vcache *vc = new vcache[vcount];
- tcache *tc = new tcache[tcount];
-
- f_lru lru(vc, tc);
-
- // init
- for (u16 i = 0; i < vcount; i++)
- {
- vc[i].score = 0;
- vc[i].cachepos = -1;
- vc[i].NumActiveTris = 0;
- }
-
- // First pass: count how many times a vert is used
- for (u32 i = 0; i < icount; i += 3)
- {
- vc[ind[i]].NumActiveTris++;
- vc[ind[i + 1]].NumActiveTris++;
- vc[ind[i + 2]].NumActiveTris++;
-
- const u32 tri_ind = i/3;
- tc[tri_ind].ind[0] = ind[i];
- tc[tri_ind].ind[1] = ind[i + 1];
- tc[tri_ind].ind[2] = ind[i + 2];
- }
-
- // Second pass: list of each triangle
- for (u32 i = 0; i < tcount; i++)
- {
- vc[tc[i].ind[0]].tris.push_back(i);
- vc[tc[i].ind[1]].tris.push_back(i);
- vc[tc[i].ind[2]].tris.push_back(i);
-
- tc[i].drawn = false;
- }
-
- // Give initial scores
- for (u16 i = 0; i < vcount; i++)
- {
- vc[i].score = FindVertexScore(&vc[i]);
- }
- for (u32 i = 0; i < tcount; i++)
- {
- tc[i].score =
- vc[tc[i].ind[0]].score +
- vc[tc[i].ind[1]].score +
- vc[tc[i].ind[2]].score;
- }
-
- switch(mb->getVertexType())
- {
- case video::EVT_STANDARD:
- {
- video::S3DVertex *v = (video::S3DVertex *) mb->getVertices();
-
- scene::SMeshBuffer *buf = new scene::SMeshBuffer();
- buf->Material = mb->getMaterial();
-
- buf->Vertices.reallocate(vcount);
- buf->Indices.reallocate(icount);
-
- core::map<const video::S3DVertex, const u16> sind; // search index for fast operation
- typedef core::map<const video::S3DVertex, const u16>::Node snode;
-
- // Main algorithm
- u32 highest = 0;
- u32 drawcalls = 0;
- for (;;)
- {
- if (tc[highest].drawn)
- {
- bool found = false;
- float hiscore = 0;
- for (u32 t = 0; t < tcount; t++)
- {
- if (!tc[t].drawn)
- {
- if (tc[t].score > hiscore)
- {
- highest = t;
- hiscore = tc[t].score;
- found = true;
- }
- }
- }
- if (!found)
- break;
- }
-
- // Output the best triangle
- u16 newind = buf->Vertices.size();
-
- snode *s = sind.find(v[tc[highest].ind[0]]);
-
- if (!s)
- {
- buf->Vertices.push_back(v[tc[highest].ind[0]]);
- buf->Indices.push_back(newind);
- sind.insert(v[tc[highest].ind[0]], newind);
- newind++;
- }
- else
- {
- buf->Indices.push_back(s->getValue());
- }
-
- s = sind.find(v[tc[highest].ind[1]]);
-
- if (!s)
- {
- buf->Vertices.push_back(v[tc[highest].ind[1]]);
- buf->Indices.push_back(newind);
- sind.insert(v[tc[highest].ind[1]], newind);
- newind++;
- }
- else
- {
- buf->Indices.push_back(s->getValue());
- }
-
- s = sind.find(v[tc[highest].ind[2]]);
-
- if (!s)
- {
- buf->Vertices.push_back(v[tc[highest].ind[2]]);
- buf->Indices.push_back(newind);
- sind.insert(v[tc[highest].ind[2]], newind);
- }
- else
- {
- buf->Indices.push_back(s->getValue());
- }
-
- vc[tc[highest].ind[0]].NumActiveTris--;
- vc[tc[highest].ind[1]].NumActiveTris--;
- vc[tc[highest].ind[2]].NumActiveTris--;
-
- tc[highest].drawn = true;
-
- for (u16 j : tc[highest].ind) {
- vcache *vert = &vc[j];
- for (u16 t = 0; t < vert->tris.size(); t++)
- {
- if (highest == vert->tris[t])
- {
- vert->tris.erase(t);
- break;
- }
- }
- }
-
- lru.add(tc[highest].ind[0]);
- lru.add(tc[highest].ind[1]);
- highest = lru.add(tc[highest].ind[2], true);
- drawcalls++;
- }
-
- buf->setBoundingBox(mb->getBoundingBox());
- newmesh->addMeshBuffer(buf);
- buf->drop();
- }
- break;
- case video::EVT_2TCOORDS:
- {
- video::S3DVertex2TCoords *v = (video::S3DVertex2TCoords *) mb->getVertices();
-
- scene::SMeshBufferLightMap *buf = new scene::SMeshBufferLightMap();
- buf->Material = mb->getMaterial();
-
- buf->Vertices.reallocate(vcount);
- buf->Indices.reallocate(icount);
-
- core::map<const video::S3DVertex2TCoords, const u16> sind; // search index for fast operation
- typedef core::map<const video::S3DVertex2TCoords, const u16>::Node snode;
-
- // Main algorithm
- u32 highest = 0;
- u32 drawcalls = 0;
- for (;;)
- {
- if (tc[highest].drawn)
- {
- bool found = false;
- float hiscore = 0;
- for (u32 t = 0; t < tcount; t++)
- {
- if (!tc[t].drawn)
- {
- if (tc[t].score > hiscore)
- {
- highest = t;
- hiscore = tc[t].score;
- found = true;
- }
- }
- }
- if (!found)
- break;
- }
-
- // Output the best triangle
- u16 newind = buf->Vertices.size();
-
- snode *s = sind.find(v[tc[highest].ind[0]]);
-
- if (!s)
- {
- buf->Vertices.push_back(v[tc[highest].ind[0]]);
- buf->Indices.push_back(newind);
- sind.insert(v[tc[highest].ind[0]], newind);
- newind++;
- }
- else
- {
- buf->Indices.push_back(s->getValue());
- }
-
- s = sind.find(v[tc[highest].ind[1]]);
-
- if (!s)
- {
- buf->Vertices.push_back(v[tc[highest].ind[1]]);
- buf->Indices.push_back(newind);
- sind.insert(v[tc[highest].ind[1]], newind);
- newind++;
- }
- else
- {
- buf->Indices.push_back(s->getValue());
- }
-
- s = sind.find(v[tc[highest].ind[2]]);
-
- if (!s)
- {
- buf->Vertices.push_back(v[tc[highest].ind[2]]);
- buf->Indices.push_back(newind);
- sind.insert(v[tc[highest].ind[2]], newind);
- }
- else
- {
- buf->Indices.push_back(s->getValue());
- }
-
- vc[tc[highest].ind[0]].NumActiveTris--;
- vc[tc[highest].ind[1]].NumActiveTris--;
- vc[tc[highest].ind[2]].NumActiveTris--;
-
- tc[highest].drawn = true;
-
- for (u16 j : tc[highest].ind) {
- vcache *vert = &vc[j];
- for (u16 t = 0; t < vert->tris.size(); t++)
- {
- if (highest == vert->tris[t])
- {
- vert->tris.erase(t);
- break;
- }
- }
- }
-
- lru.add(tc[highest].ind[0]);
- lru.add(tc[highest].ind[1]);
- highest = lru.add(tc[highest].ind[2]);
- drawcalls++;
- }
-
- buf->setBoundingBox(mb->getBoundingBox());
- newmesh->addMeshBuffer(buf);
- buf->drop();
-
- }
- break;
- case video::EVT_TANGENTS:
- {
- video::S3DVertexTangents *v = (video::S3DVertexTangents *) mb->getVertices();
-
- scene::SMeshBufferTangents *buf = new scene::SMeshBufferTangents();
- buf->Material = mb->getMaterial();
-
- buf->Vertices.reallocate(vcount);
- buf->Indices.reallocate(icount);
-
- core::map<const video::S3DVertexTangents, const u16> sind; // search index for fast operation
- typedef core::map<const video::S3DVertexTangents, const u16>::Node snode;
-
- // Main algorithm
- u32 highest = 0;
- u32 drawcalls = 0;
- for (;;)
- {
- if (tc[highest].drawn)
- {
- bool found = false;
- float hiscore = 0;
- for (u32 t = 0; t < tcount; t++)
- {
- if (!tc[t].drawn)
- {
- if (tc[t].score > hiscore)
- {
- highest = t;
- hiscore = tc[t].score;
- found = true;
- }
- }
- }
- if (!found)
- break;
- }
-
- // Output the best triangle
- u16 newind = buf->Vertices.size();
-
- snode *s = sind.find(v[tc[highest].ind[0]]);
-
- if (!s)
- {
- buf->Vertices.push_back(v[tc[highest].ind[0]]);
- buf->Indices.push_back(newind);
- sind.insert(v[tc[highest].ind[0]], newind);
- newind++;
- }
- else
- {
- buf->Indices.push_back(s->getValue());
- }
-
- s = sind.find(v[tc[highest].ind[1]]);
-
- if (!s)
- {
- buf->Vertices.push_back(v[tc[highest].ind[1]]);
- buf->Indices.push_back(newind);
- sind.insert(v[tc[highest].ind[1]], newind);
- newind++;
- }
- else
- {
- buf->Indices.push_back(s->getValue());
- }
-
- s = sind.find(v[tc[highest].ind[2]]);
-
- if (!s)
- {
- buf->Vertices.push_back(v[tc[highest].ind[2]]);
- buf->Indices.push_back(newind);
- sind.insert(v[tc[highest].ind[2]], newind);
- }
- else
- {
- buf->Indices.push_back(s->getValue());
- }
-
- vc[tc[highest].ind[0]].NumActiveTris--;
- vc[tc[highest].ind[1]].NumActiveTris--;
- vc[tc[highest].ind[2]].NumActiveTris--;
-
- tc[highest].drawn = true;
-
- for (u16 j : tc[highest].ind) {
- vcache *vert = &vc[j];
- for (u16 t = 0; t < vert->tris.size(); t++)
- {
- if (highest == vert->tris[t])
- {
- vert->tris.erase(t);
- break;
- }
- }
- }
-
- lru.add(tc[highest].ind[0]);
- lru.add(tc[highest].ind[1]);
- highest = lru.add(tc[highest].ind[2]);
- drawcalls++;
- }
-
- buf->setBoundingBox(mb->getBoundingBox());
- newmesh->addMeshBuffer(buf);
- buf->drop();
- }
- break;
- }
-
- delete [] vc;
- delete [] tc;
-
- } // for each meshbuffer
-
- return newmesh;
-}
diff --git a/src/client/mesh.h b/src/client/mesh.h
index dbc091a06..1ed753c01 100644
--- a/src/client/mesh.h
+++ b/src/client/mesh.h
@@ -133,10 +133,3 @@ void recalculateBoundingBox(scene::IMesh *src_mesh);
We assume normal to be valid when it's 0 < length < Inf. and not NaN
*/
bool checkMeshNormals(scene::IMesh *mesh);
-
-/*
- Vertex cache optimization according to the Forsyth paper:
- http://home.comcast.net/~tom_forsyth/papers/fast_vert_cache_opt.html
- Ported from irrlicht 1.8
-*/
-scene::IMesh* createForsythOptimizedMesh(const scene::IMesh *mesh);
diff --git a/src/client/mesh_generator_thread.cpp b/src/client/mesh_generator_thread.cpp
index c8d1cba26..5c3f4180b 100644
--- a/src/client/mesh_generator_thread.cpp
+++ b/src/client/mesh_generator_thread.cpp
@@ -23,6 +23,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "client.h"
#include "mapblock.h"
#include "map.h"
+#include "util/directiontables.h"
/*
CachedMapBlockData
@@ -69,7 +70,7 @@ MeshUpdateQueue::~MeshUpdateQueue()
}
}
-void MeshUpdateQueue::addBlock(Map *map, v3s16 p, bool ack_block_to_server, bool urgent)
+bool MeshUpdateQueue::addBlock(Map *map, v3s16 p, bool ack_block_to_server, bool urgent)
{
MutexAutoLock lock(m_mutex);
@@ -81,20 +82,15 @@ void MeshUpdateQueue::addBlock(Map *map, v3s16 p, bool ack_block_to_server, bool
*/
std::vector<CachedMapBlockData*> cached_blocks;
size_t cache_hit_counter = 0;
+ CachedMapBlockData *cached_block = cacheBlock(map, p, FORCE_UPDATE);
+ if (!cached_block->data)
+ return false; // nothing to update
cached_blocks.reserve(3*3*3);
- v3s16 dp;
- for (dp.X = -1; dp.X <= 1; dp.X++)
- for (dp.Y = -1; dp.Y <= 1; dp.Y++)
- for (dp.Z = -1; dp.Z <= 1; dp.Z++) {
- v3s16 p1 = p + dp;
- CachedMapBlockData *cached_block;
- if (dp == v3s16(0, 0, 0))
- cached_block = cacheBlock(map, p1, FORCE_UPDATE);
- else
- cached_block = cacheBlock(map, p1, SKIP_UPDATE_IF_ALREADY_CACHED,
- &cache_hit_counter);
- cached_blocks.push_back(cached_block);
- }
+ cached_blocks.push_back(cached_block);
+ for (v3s16 dp : g_26dirs)
+ cached_blocks.push_back(cacheBlock(map, p + dp,
+ SKIP_UPDATE_IF_ALREADY_CACHED,
+ &cache_hit_counter));
g_profiler->avg("MeshUpdateQueue: MapBlocks from cache [%]",
100.0f * cache_hit_counter / cached_blocks.size());
@@ -116,7 +112,7 @@ void MeshUpdateQueue::addBlock(Map *map, v3s16 p, bool ack_block_to_server, bool
q->ack_block_to_server = true;
q->crack_level = m_client->getCrackLevel();
q->crack_pos = m_client->getCrackPos();
- return;
+ return true;
}
}
@@ -134,6 +130,7 @@ void MeshUpdateQueue::addBlock(Map *map, v3s16 p, bool ack_block_to_server, bool
for (CachedMapBlockData *cached_block : cached_blocks) {
cached_block->refcount_from_queue++;
}
+ return true;
}
// Returned pointer must be deleted
@@ -212,10 +209,7 @@ void MeshUpdateQueue::fillDataFromMapBlockCache(QueuedMeshUpdate *q)
std::time_t t_now = std::time(0);
// Collect data for 3*3*3 blocks from cache
- v3s16 dp;
- for (dp.X = -1; dp.X <= 1; dp.X++)
- for (dp.Y = -1; dp.Y <= 1; dp.Y++)
- for (dp.Z = -1; dp.Z <= 1; dp.Z++) {
+ for (v3s16 dp : g_27dirs) {
v3s16 p = q->p + dp;
CachedMapBlockData *cached_block = getCachedBlock(p);
if (cached_block) {
@@ -272,10 +266,25 @@ MeshUpdateThread::MeshUpdateThread(Client *client):
}
void MeshUpdateThread::updateBlock(Map *map, v3s16 p, bool ack_block_to_server,
- bool urgent)
+ bool urgent, bool update_neighbors)
{
- // Allow the MeshUpdateQueue to do whatever it wants
- m_queue_in.addBlock(map, p, ack_block_to_server, urgent);
+ static thread_local const bool many_neighbors =
+ g_settings->getBool("smooth_lighting")
+ && !g_settings->getFlag("performance_tradeoffs");
+ if (!m_queue_in.addBlock(map, p, ack_block_to_server, urgent)) {
+ warningstream << "Update requested for non-existent block at ("
+ << p.X << ", " << p.Y << ", " << p.Z << ")" << std::endl;
+ return;
+ }
+ if (update_neighbors) {
+ if (many_neighbors) {
+ for (v3s16 dp : g_26dirs)
+ m_queue_in.addBlock(map, p + dp, false, urgent);
+ } else {
+ for (v3s16 dp : g_6dirs)
+ m_queue_in.addBlock(map, p + dp, false, urgent);
+ }
+ }
deferUpdate();
}
diff --git a/src/client/mesh_generator_thread.h b/src/client/mesh_generator_thread.h
index 4371b8390..1b734bc06 100644
--- a/src/client/mesh_generator_thread.h
+++ b/src/client/mesh_generator_thread.h
@@ -66,7 +66,7 @@ public:
// Caches the block at p and its neighbors (if needed) and queues a mesh
// update for the block at p
- void addBlock(Map *map, v3s16 p, bool ack_block_to_server, bool urgent);
+ bool addBlock(Map *map, v3s16 p, bool ack_block_to_server, bool urgent);
// Returned pointer must be deleted
// Returns NULL if queue is empty
@@ -113,7 +113,8 @@ public:
// Caches the block at p and its neighbors (if needed) and queues a mesh
// update for the block at p
- void updateBlock(Map *map, v3s16 p, bool ack_block_to_server, bool urgent);
+ void updateBlock(Map *map, v3s16 p, bool ack_block_to_server, bool urgent,
+ bool update_neighbors = false);
v3s16 m_camera_offset;
MutexedQueue<MeshUpdateResult> m_queue_out;
diff --git a/src/client/minimap.cpp b/src/client/minimap.cpp
index dd810ee0a..f26aa1c70 100644
--- a/src/client/minimap.cpp
+++ b/src/client/minimap.cpp
@@ -491,7 +491,8 @@ video::ITexture *Minimap::getMinimapTexture()
// Want to use texture source, to : 1 find texture, 2 cache it
video::ITexture* texture = m_tsrc->getTexture(data->mode.texture);
video::IImage* image = driver->createImageFromData(
- texture->getColorFormat(), texture->getSize(), texture->lock(), true, false);
+ texture->getColorFormat(), texture->getSize(),
+ texture->lock(video::ETLM_READ_ONLY), true, false);
texture->unlock();
auto dim = image->getDimension();
@@ -576,7 +577,7 @@ scene::SMeshBuffer *Minimap::getMinimapMeshBuffer()
void Minimap::drawMinimap()
{
// Non hud managed minimap drawing (legacy minimap)
- v2u32 screensize = RenderingEngine::get_instance()->getWindowSize();
+ v2u32 screensize = RenderingEngine::getWindowSize();
const u32 size = 0.25 * screensize.Y;
drawMinimap(core::rect<s32>(
diff --git a/src/client/particles.cpp b/src/client/particles.cpp
index 7acd996dc..288826a5f 100644
--- a/src/client/particles.cpp
+++ b/src/client/particles.cpp
@@ -64,8 +64,8 @@ Particle::Particle(
v2f texsize,
video::SColor color
):
- scene::ISceneNode(RenderingEngine::get_scene_manager()->getRootSceneNode(),
- RenderingEngine::get_scene_manager())
+ scene::ISceneNode(((Client *)gamedef)->getSceneManager()->getRootSceneNode(),
+ ((Client *)gamedef)->getSceneManager())
{
// Misc
m_gamedef = gamedef;
diff --git a/src/client/render/anaglyph.cpp b/src/client/render/anaglyph.cpp
index 9ba4464a2..2571f7333 100644
--- a/src/client/render/anaglyph.cpp
+++ b/src/client/render/anaglyph.cpp
@@ -30,6 +30,7 @@ void RenderingCoreAnaglyph::drawAll()
void RenderingCoreAnaglyph::setupMaterial(int color_mask)
{
video::SOverrideMaterial &mat = driver->getOverrideMaterial();
+ mat.reset();
mat.Material.ColorMask = color_mask;
mat.EnableFlags = video::EMF_COLOR_MASK;
mat.EnablePasses = scene::ESNRP_SKY_BOX | scene::ESNRP_SOLID |
@@ -40,7 +41,7 @@ void RenderingCoreAnaglyph::setupMaterial(int color_mask)
void RenderingCoreAnaglyph::useEye(bool right)
{
RenderingCoreStereo::useEye(right);
- driver->clearZBuffer();
+ driver->clearBuffers(video::ECBF_DEPTH);
setupMaterial(right ? video::ECP_GREEN | video::ECP_BLUE : video::ECP_RED);
}
diff --git a/src/client/render/core.cpp b/src/client/render/core.cpp
index 92a7137ea..44ef1c98c 100644
--- a/src/client/render/core.cpp
+++ b/src/client/render/core.cpp
@@ -24,25 +24,35 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "client/clientmap.h"
#include "client/hud.h"
#include "client/minimap.h"
+#include "client/shadows/dynamicshadowsrender.h"
RenderingCore::RenderingCore(IrrlichtDevice *_device, Client *_client, Hud *_hud)
: device(_device), driver(device->getVideoDriver()), smgr(device->getSceneManager()),
guienv(device->getGUIEnvironment()), client(_client), camera(client->getCamera()),
- mapper(client->getMinimap()), hud(_hud)
+ mapper(client->getMinimap()), hud(_hud),
+ shadow_renderer(nullptr)
{
screensize = driver->getScreenSize();
virtual_size = screensize;
+
+ if (g_settings->getBool("enable_shaders") &&
+ false && g_settings->getBool("enable_dynamic_shadows")) {
+ shadow_renderer = new ShadowRenderer(device, client);
+ }
}
RenderingCore::~RenderingCore()
{
clearTextures();
+ delete shadow_renderer;
}
void RenderingCore::initialize()
{
// have to be called late as the VMT is not ready in the constructor:
initTextures();
+ if (shadow_renderer)
+ shadow_renderer->initialize();
}
void RenderingCore::updateScreenSize()
@@ -66,6 +76,9 @@ void RenderingCore::draw(video::SColor _skycolor, bool _show_hud, bool _show_min
draw_wield_tool = _draw_wield_tool;
draw_crosshair = _draw_crosshair;
+ if (shadow_renderer)
+ shadow_renderer->update();
+
beforeDraw();
drawAll();
}
@@ -73,9 +86,13 @@ void RenderingCore::draw(video::SColor _skycolor, bool _show_hud, bool _show_min
void RenderingCore::draw3D()
{
smgr->drawAll();
+ if (shadow_renderer)
+ shadow_renderer->drawDebug();
+
driver->setTransform(video::ETS_WORLD, core::IdentityMatrix);
if (!show_hud)
return;
+ hud->drawBlockBounds();
hud->drawSelectionMesh();
if (draw_wield_tool)
camera->drawWieldedTool();
diff --git a/src/client/render/core.h b/src/client/render/core.h
index 52ea8f99f..cabfbbfad 100644
--- a/src/client/render/core.h
+++ b/src/client/render/core.h
@@ -21,6 +21,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#pragma once
#include "irrlichttypes_extrabloated.h"
+class ShadowRenderer;
class Camera;
class Client;
class Hud;
@@ -47,6 +48,8 @@ protected:
Minimap *mapper;
Hud *hud;
+ ShadowRenderer *shadow_renderer;
+
void updateScreenSize();
virtual void initTextures() {}
virtual void clearTextures() {}
@@ -72,4 +75,6 @@ public:
bool _draw_wield_tool, bool _draw_crosshair);
inline v2u32 getVirtualSize() const { return virtual_size; }
+
+ ShadowRenderer *get_shadow_renderer() { return shadow_renderer; };
};
diff --git a/src/client/render/interlaced.cpp b/src/client/render/interlaced.cpp
index ce8e92f21..3f79a8eb5 100644
--- a/src/client/render/interlaced.cpp
+++ b/src/client/render/interlaced.cpp
@@ -35,7 +35,11 @@ void RenderingCoreInterlaced::initMaterial()
IShaderSource *s = client->getShaderSource();
mat.UseMipMaps = false;
mat.ZBuffer = false;
+#if IRRLICHT_VERSION_MAJOR == 1 && IRRLICHT_VERSION_MINOR > 8
+ mat.ZWriteEnable = video::EZW_OFF;
+#else
mat.ZWriteEnable = false;
+#endif
u32 shader = s->getShader("3d_interlaced_merge", TILE_MATERIAL_BASIC);
mat.MaterialType = s->getShaderInfo(shader).material;
for (int k = 0; k < 3; ++k) {
diff --git a/src/client/renderingengine.cpp b/src/client/renderingengine.cpp
index 99ff8c1ee..723865db4 100644
--- a/src/client/renderingengine.cpp
+++ b/src/client/renderingengine.cpp
@@ -19,7 +19,6 @@ with this program; if not, write to the Free Software Foundation, Inc.,
*/
#include <IrrlichtDevice.h>
-#include <irrlicht.h>
#include "fontengine.h"
#include "client.h"
#include "clouds.h"
@@ -92,7 +91,6 @@ RenderingEngine::RenderingEngine(IEventReceiver *receiver)
// bpp, fsaa, vsync
bool vsync = g_settings->getBool("vsync");
- u16 bits = g_settings->getU16("fullscreen_bpp");
u16 fsaa = g_settings->getU16("fsaa");
// stereo buffer required for pageflip stereo
@@ -106,7 +104,7 @@ RenderingEngine::RenderingEngine(IEventReceiver *receiver)
u32 i;
for (i = 0; i != drivers.size(); i++) {
if (!strcasecmp(driverstring.c_str(),
- RenderingEngine::getVideoDriverName(drivers[i]))) {
+ RenderingEngine::getVideoDriverInfo(drivers[i]).name.c_str())) {
driverType = drivers[i];
break;
}
@@ -118,17 +116,17 @@ RenderingEngine::RenderingEngine(IEventReceiver *receiver)
}
SIrrlichtCreationParameters params = SIrrlichtCreationParameters();
+ if (g_logger.getTraceEnabled())
+ params.LoggingLevel = irr::ELL_DEBUG;
params.DriverType = driverType;
params.WindowSize = core::dimension2d<u32>(screen_w, screen_h);
- params.Bits = bits;
params.AntiAlias = fsaa;
params.Fullscreen = fullscreen;
params.Stencilbuffer = false;
params.Stereobuffer = stereo_buffer;
params.Vsync = vsync;
params.EventReceiver = receiver;
- params.HighPrecisionFPU = g_settings->getBool("high_precision_fpu");
- params.ZBufferBits = 24;
+ params.HighPrecisionFPU = true;
#ifdef __ANDROID__
params.PrivateData = porting::app_global;
#endif
@@ -157,7 +155,7 @@ RenderingEngine::~RenderingEngine()
s_singleton = nullptr;
}
-v2u32 RenderingEngine::getWindowSize() const
+v2u32 RenderingEngine::_getWindowSize() const
{
if (core)
return core->getVirtualSize();
@@ -169,58 +167,18 @@ void RenderingEngine::setResizable(bool resize)
m_device->setResizable(resize);
}
-bool RenderingEngine::print_video_modes()
+void RenderingEngine::removeMesh(const scene::IMesh* mesh)
{
- IrrlichtDevice *nulldevice;
-
- bool vsync = g_settings->getBool("vsync");
- u16 fsaa = g_settings->getU16("fsaa");
- MyEventReceiver *receiver = new MyEventReceiver();
-
- SIrrlichtCreationParameters params = SIrrlichtCreationParameters();
- params.DriverType = video::EDT_NULL;
- params.WindowSize = core::dimension2d<u32>(640, 480);
- params.Bits = 24;
- params.AntiAlias = fsaa;
- params.Fullscreen = false;
- params.Stencilbuffer = false;
- params.Vsync = vsync;
- params.EventReceiver = receiver;
- params.HighPrecisionFPU = g_settings->getBool("high_precision_fpu");
-
- nulldevice = createDeviceEx(params);
-
- if (!nulldevice) {
- delete receiver;
- return false;
- }
-
- std::cout << _("Available video modes (WxHxD):") << std::endl;
-
- video::IVideoModeList *videomode_list = nulldevice->getVideoModeList();
-
- if (videomode_list != NULL) {
- s32 videomode_count = videomode_list->getVideoModeCount();
- core::dimension2d<u32> videomode_res;
- s32 videomode_depth;
- for (s32 i = 0; i < videomode_count; ++i) {
- videomode_res = videomode_list->getVideoModeResolution(i);
- videomode_depth = videomode_list->getVideoModeDepth(i);
- std::cout << videomode_res.Width << "x" << videomode_res.Height
- << "x" << videomode_depth << std::endl;
- }
+ m_device->getSceneManager()->getMeshCache()->removeMesh(mesh);
+}
- std::cout << _("Active video mode (WxHxD):") << std::endl;
- videomode_res = videomode_list->getDesktopResolution();
- videomode_depth = videomode_list->getDesktopDepth();
- std::cout << videomode_res.Width << "x" << videomode_res.Height << "x"
- << videomode_depth << std::endl;
+void RenderingEngine::cleanupMeshCache()
+{
+ auto mesh_cache = m_device->getSceneManager()->getMeshCache();
+ while (mesh_cache->getMeshCount() != 0) {
+ if (scene::IAnimatedMesh *mesh = mesh_cache->getMeshByIndex(0))
+ mesh_cache->removeMesh(mesh);
}
-
- nulldevice->drop();
- delete receiver;
-
- return videomode_list != NULL;
}
bool RenderingEngine::setupTopLevelWindow(const std::string &name)
@@ -294,7 +252,7 @@ void RenderingEngine::setupTopLevelXorgWindow(const std::string &name)
// force a shutdown of an application if it doesn't respond to the destroy
// window message.
- verbosestream << "Client: Setting Xorg _NET_WM_PID extened window manager property"
+ verbosestream << "Client: Setting Xorg _NET_WM_PID extended window manager property"
<< std::endl;
Atom NET_WM_PID = XInternAtom(x11_dpl, "_NET_WM_PID", false);
@@ -325,12 +283,10 @@ static bool getWindowHandle(irr::video::IVideoDriver *driver, HWND &hWnd)
const video::SExposedVideoData exposedData = driver->getExposedVideoData();
switch (driver->getDriverType()) {
- case video::EDT_DIRECT3D8:
- hWnd = reinterpret_cast<HWND>(exposedData.D3D8.HWnd);
- break;
- case video::EDT_DIRECT3D9:
- hWnd = reinterpret_cast<HWND>(exposedData.D3D9.HWnd);
- break;
+#if ENABLE_GLES
+ case video::EDT_OGLES1:
+ case video::EDT_OGLES2:
+#endif
case video::EDT_OPENGL:
hWnd = reinterpret_cast<HWND>(exposedData.OpenGLWin32.HWnd);
break;
@@ -471,11 +427,11 @@ bool RenderingEngine::setXorgWindowIconFromPath(const std::string &icon_file)
Text will be removed when the screen is drawn the next time.
Additionally, a progressbar can be drawn when percent is set between 0 and 100.
*/
-void RenderingEngine::_draw_load_screen(const std::wstring &text,
+void RenderingEngine::draw_load_screen(const std::wstring &text,
gui::IGUIEnvironment *guienv, ITextureSource *tsrc, float dtime,
int percent, bool clouds)
{
- v2u32 screensize = RenderingEngine::get_instance()->getWindowSize();
+ v2u32 screensize = getWindowSize();
v2s32 textsize(g_fontengine->getTextWidth(text), g_fontengine->getLineHeight());
v2s32 center(screensize.X / 2, screensize.Y / 2);
@@ -543,7 +499,7 @@ void RenderingEngine::_draw_load_screen(const std::wstring &text,
/*
Draws the menu scene including (optional) cloud background.
*/
-void RenderingEngine::_draw_menu_scene(gui::IGUIEnvironment *guienv,
+void RenderingEngine::draw_menu_scene(gui::IGUIEnvironment *guienv,
float dtime, bool clouds)
{
bool cloud_menu_background = clouds && g_settings->getBool("menu_clouds");
@@ -560,85 +516,53 @@ void RenderingEngine::_draw_menu_scene(gui::IGUIEnvironment *guienv,
get_video_driver()->endScene();
}
-std::vector<core::vector3d<u32>> RenderingEngine::getSupportedVideoModes()
-{
- IrrlichtDevice *nulldevice = createDevice(video::EDT_NULL);
- sanity_check(nulldevice);
-
- std::vector<core::vector3d<u32>> mlist;
- video::IVideoModeList *modelist = nulldevice->getVideoModeList();
-
- s32 num_modes = modelist->getVideoModeCount();
- for (s32 i = 0; i != num_modes; i++) {
- core::dimension2d<u32> mode_res = modelist->getVideoModeResolution(i);
- u32 mode_depth = (u32)modelist->getVideoModeDepth(i);
- mlist.emplace_back(mode_res.Width, mode_res.Height, mode_depth);
- }
-
- nulldevice->drop();
- return mlist;
-}
-
std::vector<irr::video::E_DRIVER_TYPE> RenderingEngine::getSupportedVideoDrivers()
{
+ // Only check these drivers.
+ // We do not support software and D3D in any capacity.
+ static const irr::video::E_DRIVER_TYPE glDrivers[4] = {
+ irr::video::EDT_NULL,
+ irr::video::EDT_OPENGL,
+ irr::video::EDT_OGLES1,
+ irr::video::EDT_OGLES2,
+ };
std::vector<irr::video::E_DRIVER_TYPE> drivers;
- for (int i = 0; i != irr::video::EDT_COUNT; i++) {
- if (irr::IrrlichtDevice::isDriverSupported((irr::video::E_DRIVER_TYPE)i))
- drivers.push_back((irr::video::E_DRIVER_TYPE)i);
+ for (int i = 0; i < 4; i++) {
+ if (irr::IrrlichtDevice::isDriverSupported(glDrivers[i]))
+ drivers.push_back(glDrivers[i]);
}
return drivers;
}
-void RenderingEngine::_initialize(Client *client, Hud *hud)
+void RenderingEngine::initialize(Client *client, Hud *hud)
{
const std::string &draw_mode = g_settings->get("3d_mode");
core.reset(createRenderingCore(draw_mode, m_device, client, hud));
core->initialize();
}
-void RenderingEngine::_finalize()
+void RenderingEngine::finalize()
{
core.reset();
}
-void RenderingEngine::_draw_scene(video::SColor skycolor, bool show_hud,
+void RenderingEngine::draw_scene(video::SColor skycolor, bool show_hud,
bool show_minimap, bool draw_wield_tool, bool draw_crosshair)
{
core->draw(skycolor, show_hud, show_minimap, draw_wield_tool, draw_crosshair);
}
-const char *RenderingEngine::getVideoDriverName(irr::video::E_DRIVER_TYPE type)
-{
- static const char *driver_ids[] = {
- "null",
- "software",
- "burningsvideo",
- "direct3d8",
- "direct3d9",
- "opengl",
- "ogles1",
- "ogles2",
- };
-
- return driver_ids[type];
-}
-
-const char *RenderingEngine::getVideoDriverFriendlyName(irr::video::E_DRIVER_TYPE type)
+const VideoDriverInfo &RenderingEngine::getVideoDriverInfo(irr::video::E_DRIVER_TYPE type)
{
- static const char *driver_names[] = {
- "NULL Driver",
- "Software Renderer",
- "Burning's Video",
- "Direct3D 8",
- "Direct3D 9",
- "OpenGL",
- "OpenGL ES1",
- "OpenGL ES2",
+ static const std::unordered_map<int, VideoDriverInfo> driver_info_map = {
+ {(int)video::EDT_NULL, {"null", "NULL Driver"}},
+ {(int)video::EDT_OPENGL, {"opengl", "OpenGL"}},
+ {(int)video::EDT_OGLES1, {"ogles1", "OpenGL ES1"}},
+ {(int)video::EDT_OGLES2, {"ogles2", "OpenGL ES2"}},
};
-
- return driver_names[type];
+ return driver_info_map.at((int)type);
}
#ifndef __ANDROID__
@@ -674,7 +598,7 @@ static float calcDisplayDensity()
float RenderingEngine::getDisplayDensity()
{
static float cached_display_density = calcDisplayDensity();
- return cached_display_density;
+ return cached_display_density * g_settings->getFloat("display_density_factor");
}
#elif defined(_WIN32)
@@ -702,14 +626,14 @@ float RenderingEngine::getDisplayDensity()
display_density = calcDisplayDensity(get_video_driver());
cached = true;
}
- return display_density;
+ return display_density * g_settings->getFloat("display_density_factor");
}
#else
float RenderingEngine::getDisplayDensity()
{
- return g_settings->getFloat("screen_dpi") / 96.0;
+ return (g_settings->getFloat("screen_dpi") / 96.0) * g_settings->getFloat("display_density_factor");
}
#endif
diff --git a/src/client/renderingengine.h b/src/client/renderingengine.h
index 34cc60630..a0ddb0d9a 100644
--- a/src/client/renderingengine.h
+++ b/src/client/renderingengine.h
@@ -25,6 +25,14 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include <string>
#include "irrlichttypes_extrabloated.h"
#include "debug.h"
+#include "client/render/core.h"
+// include the shadow mapper classes too
+#include "client/shadows/dynamicshadowsrender.h"
+
+struct VideoDriverInfo {
+ std::string name;
+ std::string friendly_name;
+};
class ITextureSource;
class Camera;
@@ -41,13 +49,11 @@ public:
RenderingEngine(IEventReceiver *eventReceiver);
~RenderingEngine();
- v2u32 getWindowSize() const;
void setResizable(bool resize);
video::IVideoDriver *getVideoDriver() { return driver; }
- static const char *getVideoDriverName(irr::video::E_DRIVER_TYPE type);
- static const char *getVideoDriverFriendlyName(irr::video::E_DRIVER_TYPE type);
+ static const VideoDriverInfo &getVideoDriverInfo(irr::video::E_DRIVER_TYPE type);
static float getDisplayDensity();
static v2u32 getDisplaySize();
@@ -56,31 +62,30 @@ public:
bool setWindowIcon();
bool setXorgWindowIconFromPath(const std::string &icon_file);
static bool print_video_modes();
+ void cleanupMeshCache();
- static RenderingEngine *get_instance() { return s_singleton; }
+ void removeMesh(const scene::IMesh* mesh);
- static io::IFileSystem *get_filesystem()
+ static v2u32 getWindowSize()
{
- sanity_check(s_singleton && s_singleton->m_device);
- return s_singleton->m_device->getFileSystem();
+ sanity_check(s_singleton);
+ return s_singleton->_getWindowSize();
}
- static video::IVideoDriver *get_video_driver()
+ io::IFileSystem *get_filesystem()
{
- sanity_check(s_singleton && s_singleton->m_device);
- return s_singleton->m_device->getVideoDriver();
+ return m_device->getFileSystem();
}
- static scene::IMeshCache *get_mesh_cache()
+ static video::IVideoDriver *get_video_driver()
{
sanity_check(s_singleton && s_singleton->m_device);
- return s_singleton->m_device->getSceneManager()->getMeshCache();
+ return s_singleton->m_device->getVideoDriver();
}
- static scene::ISceneManager *get_scene_manager()
+ scene::ISceneManager *get_scene_manager()
{
- sanity_check(s_singleton && s_singleton->m_device);
- return s_singleton->m_device->getSceneManager();
+ return m_device->getSceneManager();
}
static irr::IrrlichtDevice *get_raw_device()
@@ -89,70 +94,43 @@ public:
return s_singleton->m_device;
}
- static u32 get_timer_time()
+ u32 get_timer_time()
{
- sanity_check(s_singleton && s_singleton->m_device &&
- s_singleton->m_device->getTimer());
- return s_singleton->m_device->getTimer()->getTime();
+ return m_device->getTimer()->getTime();
}
- static gui::IGUIEnvironment *get_gui_env()
+ gui::IGUIEnvironment *get_gui_env()
{
- sanity_check(s_singleton && s_singleton->m_device);
- return s_singleton->m_device->getGUIEnvironment();
+ return m_device->getGUIEnvironment();
}
- inline static void draw_load_screen(const std::wstring &text,
+ void draw_load_screen(const std::wstring &text,
gui::IGUIEnvironment *guienv, ITextureSource *tsrc,
- float dtime = 0, int percent = 0, bool clouds = true)
- {
- s_singleton->_draw_load_screen(
- text, guienv, tsrc, dtime, percent, clouds);
- }
+ float dtime = 0, int percent = 0, bool clouds = true);
- inline static void draw_menu_scene(
- gui::IGUIEnvironment *guienv, float dtime, bool clouds)
- {
- s_singleton->_draw_menu_scene(guienv, dtime, clouds);
- }
+ void draw_menu_scene(gui::IGUIEnvironment *guienv, float dtime, bool clouds);
+ void draw_scene(video::SColor skycolor, bool show_hud,
+ bool show_minimap, bool draw_wield_tool, bool draw_crosshair);
- inline static void draw_scene(video::SColor skycolor, bool show_hud,
- bool show_minimap, bool draw_wield_tool, bool draw_crosshair)
- {
- s_singleton->_draw_scene(skycolor, show_hud, show_minimap,
- draw_wield_tool, draw_crosshair);
- }
+ void initialize(Client *client, Hud *hud);
+ void finalize();
- inline static void initialize(Client *client, Hud *hud)
+ bool run()
{
- s_singleton->_initialize(client, hud);
+ return m_device->run();
}
- inline static void finalize() { s_singleton->_finalize(); }
-
- static bool run()
+ // FIXME: this is still global when it shouldn't be
+ static ShadowRenderer *get_shadow_renderer()
{
- sanity_check(s_singleton && s_singleton->m_device);
- return s_singleton->m_device->run();
+ //if (s_singleton && s_singleton->core)
+ // return s_singleton->core->get_shadow_renderer();
+ return nullptr;
}
-
- static std::vector<core::vector3d<u32>> getSupportedVideoModes();
static std::vector<irr::video::E_DRIVER_TYPE> getSupportedVideoDrivers();
private:
- void _draw_load_screen(const std::wstring &text, gui::IGUIEnvironment *guienv,
- ITextureSource *tsrc, float dtime = 0, int percent = 0,
- bool clouds = true);
-
- void _draw_menu_scene(gui::IGUIEnvironment *guienv, float dtime = 0,
- bool clouds = true);
-
- void _draw_scene(video::SColor skycolor, bool show_hud, bool show_minimap,
- bool draw_wield_tool, bool draw_crosshair);
-
- void _initialize(Client *client, Hud *hud);
-
- void _finalize();
+ v2u32 _getWindowSize() const;
std::unique_ptr<RenderingCore> core;
irr::IrrlichtDevice *m_device = nullptr;
diff --git a/src/client/shader.cpp b/src/client/shader.cpp
index b3e4911f4..c04a25862 100644
--- a/src/client/shader.cpp
+++ b/src/client/shader.cpp
@@ -225,6 +225,16 @@ class MainShaderConstantSetter : public IShaderConstantSetter
{
CachedVertexShaderSetting<float, 16> m_world_view_proj;
CachedVertexShaderSetting<float, 16> m_world;
+
+ // Shadow-related
+ CachedPixelShaderSetting<float, 16> m_shadow_view_proj;
+ CachedPixelShaderSetting<float, 3> m_light_direction;
+ CachedPixelShaderSetting<float> m_texture_res;
+ CachedPixelShaderSetting<float> m_shadow_strength;
+ CachedPixelShaderSetting<float> m_time_of_day;
+ CachedPixelShaderSetting<float> m_shadowfar;
+ CachedPixelShaderSetting<s32> m_shadow_texture;
+
#if ENABLE_GLES
// Modelview matrix
CachedVertexShaderSetting<float, 16> m_world_view;
@@ -243,6 +253,13 @@ public:
, m_texture("mTexture")
, m_normal("mNormal")
#endif
+ , m_shadow_view_proj("m_ShadowViewProj")
+ , m_light_direction("v_LightDirection")
+ , m_texture_res("f_textureresolution")
+ , m_shadow_strength("f_shadow_strength")
+ , m_time_of_day("f_timeofday")
+ , m_shadowfar("f_shadowfar")
+ , m_shadow_texture("ShadowMapSampler")
{}
~MainShaderConstantSetter() = default;
@@ -280,6 +297,36 @@ public:
};
m_normal.set(m, services);
#endif
+
+ // Set uniforms for Shadow shader
+ if (ShadowRenderer *shadow = RenderingEngine::get_shadow_renderer()) {
+ const auto &light = shadow->getDirectionalLight();
+
+ core::matrix4 shadowViewProj = light.getProjectionMatrix();
+ shadowViewProj *= light.getViewMatrix();
+ m_shadow_view_proj.set(shadowViewProj.pointer(), services);
+
+ float v_LightDirection[3];
+ light.getDirection().getAs3Values(v_LightDirection);
+ m_light_direction.set(v_LightDirection, services);
+
+ float TextureResolution = light.getMapResolution();
+ m_texture_res.set(&TextureResolution, services);
+
+ float ShadowStrength = shadow->getShadowStrength();
+ m_shadow_strength.set(&ShadowStrength, services);
+
+ float timeOfDay = shadow->getTimeOfDay();
+ m_time_of_day.set(&timeOfDay, services);
+
+ float shadowFar = shadow->getMaxShadowFar();
+ m_shadowfar.set(&shadowFar, services);
+
+ // I dont like using this hardcoded value. maybe something like
+ // MAX_TEXTURE - 1 or somthing like that??
+ s32 TextureLayerID = 3;
+ m_shadow_texture.set(&TextureLayerID, services);
+ }
}
};
@@ -579,8 +626,10 @@ ShaderInfo ShaderSource::generateShader(const std::string &name,
if (use_gles) {
shaders_header << R"(
#version 100
- )";
+ )";
vertex_header = R"(
+ precision mediump float;
+
uniform highp mat4 mWorldView;
uniform highp mat4 mWorldViewProj;
uniform mediump mat4 mTexture;
@@ -592,17 +641,17 @@ ShaderInfo ShaderSource::generateShader(const std::string &name,
attribute mediump vec3 inVertexNormal;
attribute mediump vec4 inVertexTangent;
attribute mediump vec4 inVertexBinormal;
- )";
+ )";
fragment_header = R"(
precision mediump float;
- )";
+ )";
} else {
shaders_header << R"(
#version 120
#define lowp
#define mediump
#define highp
- )";
+ )";
vertex_header = R"(
#define mWorldView gl_ModelViewMatrix
#define mWorldViewProj gl_ModelViewProjectionMatrix
@@ -615,7 +664,7 @@ ShaderInfo ShaderSource::generateShader(const std::string &name,
#define inVertexNormal gl_Normal
#define inVertexTangent gl_MultiTexCoord1
#define inVertexBinormal gl_MultiTexCoord2
- )";
+ )";
}
bool use_discard = use_gles;
@@ -625,8 +674,12 @@ ShaderInfo ShaderSource::generateShader(const std::string &name,
if (strstr(gl_renderer, "GC7000"))
use_discard = true;
#endif
- if (use_discard && shaderinfo.base_material != video::EMT_SOLID)
- shaders_header << "#define USE_DISCARD 1\n";
+ if (use_discard) {
+ if (shaderinfo.base_material == video::EMT_TRANSPARENT_ALPHA_CHANNEL)
+ shaders_header << "#define USE_DISCARD 1\n";
+ else if (shaderinfo.base_material == video::EMT_TRANSPARENT_ALPHA_CHANNEL_REF)
+ shaders_header << "#define USE_DISCARD_REF 1\n";
+ }
#define PROVIDE(constant) shaders_header << "#define " #constant " " << (int)constant << "\n"
@@ -680,6 +733,23 @@ ShaderInfo ShaderSource::generateShader(const std::string &name,
shaders_header << "#define FOG_START " << core::clamp(g_settings->getFloat("fog_start"), 0.0f, 0.99f) << "\n";
+ if (false && g_settings->getBool("enable_dynamic_shadows")) {
+ shaders_header << "#define ENABLE_DYNAMIC_SHADOWS 1\n";
+ if (g_settings->getBool("shadow_map_color"))
+ shaders_header << "#define COLORED_SHADOWS 1\n";
+
+ if (g_settings->getBool("shadow_poisson_filter"))
+ shaders_header << "#define POISSON_FILTER 1\n";
+
+ s32 shadow_filter = g_settings->getS32("shadow_filters");
+ shaders_header << "#define SHADOW_FILTER " << shadow_filter << "\n";
+
+ float shadow_soft_radius = g_settings->getFloat("shadow_soft_radius");
+ if (shadow_soft_radius < 1.0f)
+ shadow_soft_radius = 1.0f;
+ shaders_header << "#define SOFTSHADOWRADIUS " << shadow_soft_radius << "\n";
+ }
+
std::string common_header = shaders_header.str();
std::string vertex_shader = m_sourcecache.getOrLoad(name, "opengl_vertex.glsl");
diff --git a/src/client/shader.h b/src/client/shader.h
index 38ab76704..49a563115 100644
--- a/src/client/shader.h
+++ b/src/client/shader.h
@@ -96,9 +96,10 @@ public:
if (has_been_set && std::equal(m_sent, m_sent + count, value))
return;
if (is_pixel)
- services->setPixelShaderConstant(m_name, value, count);
+ services->setPixelShaderConstant(services->getPixelShaderConstantID(m_name), value, count);
else
- services->setVertexShaderConstant(m_name, value, count);
+ services->setVertexShaderConstant(services->getVertexShaderConstantID(m_name), value, count);
+
std::copy(value, value + count, m_sent);
has_been_set = true;
}
diff --git a/src/client/shadows/dynamicshadows.cpp b/src/client/shadows/dynamicshadows.cpp
new file mode 100644
index 000000000..6ef5a4f1d
--- /dev/null
+++ b/src/client/shadows/dynamicshadows.cpp
@@ -0,0 +1,165 @@
+/*
+Minetest
+Copyright (C) 2021 Liso <anlismon@gmail.com>
+
+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
+(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 <cmath>
+
+#include "client/shadows/dynamicshadows.h"
+#include "client/client.h"
+#include "client/clientenvironment.h"
+#include "client/clientmap.h"
+#include "client/camera.h"
+
+using m4f = core::matrix4;
+
+void DirectionalLight::createSplitMatrices(const Camera *cam)
+{
+ float radius;
+ v3f newCenter;
+ v3f look = cam->getDirection();
+
+ // camera view tangents
+ float tanFovY = tanf(cam->getFovY() * 0.5f);
+ float tanFovX = tanf(cam->getFovX() * 0.5f);
+
+ // adjusted frustum boundaries
+ float sfNear = future_frustum.zNear;
+ float sfFar = adjustDist(future_frustum.zFar, cam->getFovY());
+
+ // adjusted camera positions
+ v3f camPos2 = cam->getPosition();
+ v3f camPos = v3f(camPos2.X - cam->getOffset().X * BS,
+ camPos2.Y - cam->getOffset().Y * BS,
+ camPos2.Z - cam->getOffset().Z * BS);
+ camPos += look * sfNear;
+ camPos2 += look * sfNear;
+
+ // center point of light frustum
+ float end = sfNear + sfFar;
+ newCenter = camPos + look * (sfNear + 0.05f * end);
+ v3f world_center = camPos2 + look * (sfNear + 0.05f * end);
+
+ // Create a vector to the frustum far corner
+ const v3f &viewUp = cam->getCameraNode()->getUpVector();
+ v3f viewRight = look.crossProduct(viewUp);
+
+ v3f farCorner = look + viewRight * tanFovX + viewUp * tanFovY;
+ // Compute the frustumBoundingSphere radius
+ v3f boundVec = (camPos + farCorner * sfFar) - newCenter;
+ radius = boundVec.getLength() * 2.0f;
+ // boundVec.getLength();
+ float vvolume = radius * 2.0f;
+
+ v3f frustumCenter = newCenter;
+ // probar radius multipliacdor en funcion del I, a menor I mas multiplicador
+ v3f eye_displacement = direction * vvolume;
+
+ // we must compute the viewmat with the position - the camera offset
+ // but the future_frustum position must be the actual world position
+ v3f eye = frustumCenter - eye_displacement;
+ future_frustum.position = world_center - eye_displacement;
+ future_frustum.length = vvolume;
+ future_frustum.ViewMat.buildCameraLookAtMatrixLH(eye, frustumCenter, v3f(0.0f, 1.0f, 0.0f));
+ future_frustum.ProjOrthMat.buildProjectionMatrixOrthoLH(future_frustum.length,
+ future_frustum.length, -future_frustum.length,
+ future_frustum.length,false);
+ future_frustum.camera_offset = cam->getOffset();
+}
+
+DirectionalLight::DirectionalLight(const u32 shadowMapResolution,
+ const v3f &position, video::SColorf lightColor,
+ f32 farValue) :
+ diffuseColor(lightColor),
+ farPlane(farValue), mapRes(shadowMapResolution), pos(position)
+{}
+
+void DirectionalLight::update_frustum(const Camera *cam, Client *client, bool force)
+{
+ if (dirty && !force)
+ return;
+
+ float zNear = cam->getCameraNode()->getNearValue();
+ float zFar = getMaxFarValue();
+
+ ///////////////////////////////////
+ // update splits near and fars
+ future_frustum.zNear = zNear;
+ future_frustum.zFar = zFar;
+
+ // update shadow frustum
+ createSplitMatrices(cam);
+ // get the draw list for shadows
+ client->getEnv().getClientMap().updateDrawListShadow(
+ getPosition(), getDirection(), future_frustum.length);
+ should_update_map_shadow = true;
+ dirty = true;
+
+ // when camera offset changes, adjust the current frustum view matrix to avoid flicker
+ v3s16 cam_offset = cam->getOffset();
+ if (cam_offset != shadow_frustum.camera_offset) {
+ v3f rotated_offset;
+ shadow_frustum.ViewMat.rotateVect(rotated_offset, intToFloat(cam_offset - shadow_frustum.camera_offset, BS));
+ shadow_frustum.ViewMat.setTranslation(shadow_frustum.ViewMat.getTranslation() + rotated_offset);
+ shadow_frustum.camera_offset = cam_offset;
+ }
+}
+
+void DirectionalLight::commitFrustum()
+{
+ if (!dirty)
+ return;
+
+ shadow_frustum = future_frustum;
+ dirty = false;
+}
+
+void DirectionalLight::setDirection(v3f dir)
+{
+ direction = -dir;
+ direction.normalize();
+}
+
+v3f DirectionalLight::getPosition() const
+{
+ return shadow_frustum.position;
+}
+
+const m4f &DirectionalLight::getViewMatrix() const
+{
+ return shadow_frustum.ViewMat;
+}
+
+const m4f &DirectionalLight::getProjectionMatrix() const
+{
+ return shadow_frustum.ProjOrthMat;
+}
+
+const m4f &DirectionalLight::getFutureViewMatrix() const
+{
+ return future_frustum.ViewMat;
+}
+
+const m4f &DirectionalLight::getFutureProjectionMatrix() const
+{
+ return future_frustum.ProjOrthMat;
+}
+
+m4f DirectionalLight::getViewProjMatrix()
+{
+ return shadow_frustum.ProjOrthMat * shadow_frustum.ViewMat;
+}
diff --git a/src/client/shadows/dynamicshadows.h b/src/client/shadows/dynamicshadows.h
new file mode 100644
index 000000000..d8be66be8
--- /dev/null
+++ b/src/client/shadows/dynamicshadows.h
@@ -0,0 +1,109 @@
+/*
+Minetest
+Copyright (C) 2021 Liso <anlismon@gmail.com>
+
+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
+(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.
+*/
+
+#pragma once
+
+#include "irrlichttypes_bloated.h"
+#include <matrix4.h>
+#include "util/basic_macros.h"
+
+class Camera;
+class Client;
+
+struct shadowFrustum
+{
+ float zNear{0.0f};
+ float zFar{0.0f};
+ float length{0.0f};
+ core::matrix4 ProjOrthMat;
+ core::matrix4 ViewMat;
+ v3f position;
+ v3s16 camera_offset;
+};
+
+class DirectionalLight
+{
+public:
+ DirectionalLight(const u32 shadowMapResolution,
+ const v3f &position,
+ video::SColorf lightColor = video::SColor(0xffffffff),
+ f32 farValue = 100.0f);
+ ~DirectionalLight() = default;
+
+ //DISABLE_CLASS_COPY(DirectionalLight)
+
+ void update_frustum(const Camera *cam, Client *client, bool force = false);
+
+ // when set direction is updated to negative normalized(direction)
+ void setDirection(v3f dir);
+ v3f getDirection() const{
+ return direction;
+ };
+ v3f getPosition() const;
+
+ /// Gets the light's matrices.
+ const core::matrix4 &getViewMatrix() const;
+ const core::matrix4 &getProjectionMatrix() const;
+ const core::matrix4 &getFutureViewMatrix() const;
+ const core::matrix4 &getFutureProjectionMatrix() const;
+ core::matrix4 getViewProjMatrix();
+
+ /// Gets the light's far value.
+ f32 getMaxFarValue() const
+ {
+ return farPlane;
+ }
+
+
+ /// Gets the light's color.
+ const video::SColorf &getLightColor() const
+ {
+ return diffuseColor;
+ }
+
+ /// Sets the light's color.
+ void setLightColor(const video::SColorf &lightColor)
+ {
+ diffuseColor = lightColor;
+ }
+
+ /// Gets the shadow map resolution for this light.
+ u32 getMapResolution() const
+ {
+ return mapRes;
+ }
+
+ bool should_update_map_shadow{true};
+
+ void commitFrustum();
+
+private:
+ void createSplitMatrices(const Camera *cam);
+
+ video::SColorf diffuseColor;
+
+ f32 farPlane;
+ u32 mapRes;
+
+ v3f pos;
+ v3f direction{0};
+ shadowFrustum shadow_frustum;
+ shadowFrustum future_frustum;
+ bool dirty{false};
+};
diff --git a/src/client/shadows/dynamicshadowsrender.cpp b/src/client/shadows/dynamicshadowsrender.cpp
new file mode 100644
index 000000000..a913a9290
--- /dev/null
+++ b/src/client/shadows/dynamicshadowsrender.cpp
@@ -0,0 +1,630 @@
+/*
+Minetest
+Copyright (C) 2021 Liso <anlismon@gmail.com>
+
+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
+(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 <cstring>
+#include "client/shadows/dynamicshadowsrender.h"
+#include "client/shadows/shadowsScreenQuad.h"
+#include "client/shadows/shadowsshadercallbacks.h"
+#include "settings.h"
+#include "filesys.h"
+#include "util/string.h"
+#include "client/shader.h"
+#include "client/client.h"
+#include "client/clientmap.h"
+#include "profiler.h"
+
+ShadowRenderer::ShadowRenderer(IrrlichtDevice *device, Client *client) :
+ m_device(device), m_smgr(device->getSceneManager()),
+ m_driver(device->getVideoDriver()), m_client(client), m_current_frame(0)
+{
+ m_shadows_enabled = true;
+
+ m_shadow_strength = g_settings->getFloat("shadow_strength");
+
+ m_shadow_map_max_distance = g_settings->getFloat("shadow_map_max_distance");
+
+ m_shadow_map_texture_size = g_settings->getFloat("shadow_map_texture_size");
+
+ m_shadow_map_texture_32bit = g_settings->getBool("shadow_map_texture_32bit");
+ m_shadow_map_colored = g_settings->getBool("shadow_map_color");
+ m_shadow_samples = g_settings->getS32("shadow_filters");
+ m_map_shadow_update_frames = g_settings->getS16("shadow_update_frames");
+}
+
+ShadowRenderer::~ShadowRenderer()
+{
+ if (m_shadow_depth_cb)
+ delete m_shadow_depth_cb;
+ if (m_shadow_mix_cb)
+ delete m_shadow_mix_cb;
+ m_shadow_node_array.clear();
+ m_light_list.clear();
+
+ if (shadowMapTextureDynamicObjects)
+ m_driver->removeTexture(shadowMapTextureDynamicObjects);
+
+ if (shadowMapTextureFinal)
+ m_driver->removeTexture(shadowMapTextureFinal);
+
+ if (shadowMapTextureColors)
+ m_driver->removeTexture(shadowMapTextureColors);
+
+ if (shadowMapClientMap)
+ m_driver->removeTexture(shadowMapClientMap);
+
+ if (shadowMapClientMapFuture)
+ m_driver->removeTexture(shadowMapClientMapFuture);
+}
+
+void ShadowRenderer::initialize()
+{
+ auto *gpu = m_driver->getGPUProgrammingServices();
+
+ // we need glsl
+ if (m_shadows_enabled && gpu && m_driver->queryFeature(video::EVDF_ARB_GLSL)) {
+ createShaders();
+ } else {
+ m_shadows_enabled = false;
+
+ warningstream << "Shadows: GLSL Shader not supported on this system."
+ << std::endl;
+ return;
+ }
+
+ m_texture_format = m_shadow_map_texture_32bit
+ ? video::ECOLOR_FORMAT::ECF_R32F
+ : video::ECOLOR_FORMAT::ECF_R16F;
+
+ m_texture_format_color = m_shadow_map_texture_32bit
+ ? video::ECOLOR_FORMAT::ECF_G32R32F
+ : video::ECOLOR_FORMAT::ECF_G16R16F;
+}
+
+
+size_t ShadowRenderer::addDirectionalLight()
+{
+ m_light_list.emplace_back(m_shadow_map_texture_size,
+ v3f(0.f, 0.f, 0.f),
+ video::SColor(255, 255, 255, 255), m_shadow_map_max_distance);
+ return m_light_list.size() - 1;
+}
+
+DirectionalLight &ShadowRenderer::getDirectionalLight(u32 index)
+{
+ return m_light_list[index];
+}
+
+size_t ShadowRenderer::getDirectionalLightCount() const
+{
+ return m_light_list.size();
+}
+
+f32 ShadowRenderer::getMaxShadowFar() const
+{
+ if (!m_light_list.empty()) {
+ float wanted_range = m_client->getEnv().getClientMap().getWantedRange();
+
+ float zMax = m_light_list[0].getMaxFarValue() > wanted_range
+ ? wanted_range
+ : m_light_list[0].getMaxFarValue();
+ return zMax * MAP_BLOCKSIZE;
+ }
+ return 0.0f;
+}
+
+void ShadowRenderer::addNodeToShadowList(
+ scene::ISceneNode *node, E_SHADOW_MODE shadowMode)
+{
+ m_shadow_node_array.emplace_back(NodeToApply(node, shadowMode));
+}
+
+void ShadowRenderer::removeNodeFromShadowList(scene::ISceneNode *node)
+{
+ for (auto it = m_shadow_node_array.begin(); it != m_shadow_node_array.end();) {
+ if (it->node == node) {
+ it = m_shadow_node_array.erase(it);
+ break;
+ } else {
+ ++it;
+ }
+ }
+}
+
+void ShadowRenderer::updateSMTextures()
+{
+ if (!m_shadows_enabled || m_smgr->getActiveCamera() == nullptr) {
+ return;
+ }
+
+ if (!shadowMapTextureDynamicObjects) {
+
+ shadowMapTextureDynamicObjects = getSMTexture(
+ std::string("shadow_dynamic_") + itos(m_shadow_map_texture_size),
+ m_texture_format, true);
+ }
+
+ if (!shadowMapClientMap) {
+
+ shadowMapClientMap = getSMTexture(
+ std::string("shadow_clientmap_") + itos(m_shadow_map_texture_size),
+ m_shadow_map_colored ? m_texture_format_color : m_texture_format,
+ true);
+ }
+
+ if (!shadowMapClientMapFuture && m_map_shadow_update_frames > 1) {
+ shadowMapClientMapFuture = getSMTexture(
+ std::string("shadow_clientmap_bb_") + itos(m_shadow_map_texture_size),
+ m_shadow_map_colored ? m_texture_format_color : m_texture_format,
+ true);
+ }
+
+ if (m_shadow_map_colored && !shadowMapTextureColors) {
+ shadowMapTextureColors = getSMTexture(
+ std::string("shadow_colored_") + itos(m_shadow_map_texture_size),
+ m_shadow_map_colored ? m_texture_format_color : m_texture_format,
+ true);
+ }
+
+ // The merge all shadowmaps texture
+ if (!shadowMapTextureFinal) {
+ video::ECOLOR_FORMAT frt;
+ if (m_shadow_map_texture_32bit) {
+ if (m_shadow_map_colored)
+ frt = video::ECOLOR_FORMAT::ECF_A32B32G32R32F;
+ else
+ frt = video::ECOLOR_FORMAT::ECF_R32F;
+ } else {
+ if (m_shadow_map_colored)
+ frt = video::ECOLOR_FORMAT::ECF_A16B16G16R16F;
+ else
+ frt = video::ECOLOR_FORMAT::ECF_R16F;
+ }
+ shadowMapTextureFinal = getSMTexture(
+ std::string("shadowmap_final_") + itos(m_shadow_map_texture_size),
+ frt, true);
+ }
+
+ if (!m_shadow_node_array.empty() && !m_light_list.empty()) {
+ bool reset_sm_texture = false;
+
+ // detect if SM should be regenerated
+ for (DirectionalLight &light : m_light_list) {
+ if (light.should_update_map_shadow) {
+ light.should_update_map_shadow = false;
+ m_current_frame = 0;
+ reset_sm_texture = true;
+ }
+ }
+
+ video::ITexture* shadowMapTargetTexture = shadowMapClientMapFuture;
+ if (shadowMapTargetTexture == nullptr)
+ shadowMapTargetTexture = shadowMapClientMap;
+
+ // Update SM incrementally:
+ for (DirectionalLight &light : m_light_list) {
+ // Static shader values.
+ m_shadow_depth_cb->MapRes = (f32)m_shadow_map_texture_size;
+ m_shadow_depth_cb->MaxFar = (f32)m_shadow_map_max_distance * BS;
+
+ // set the Render Target
+ // right now we can only render in usual RTT, not
+ // Depth texture is available in irrlicth maybe we
+ // should put some gl* fn here
+
+
+ if (m_current_frame < m_map_shadow_update_frames) {
+ m_driver->setRenderTarget(shadowMapTargetTexture, reset_sm_texture, true,
+ video::SColor(255, 255, 255, 255));
+ renderShadowMap(shadowMapTargetTexture, light);
+
+ // Render transparent part in one pass.
+ // This is also handled in ClientMap.
+ if (m_current_frame == m_map_shadow_update_frames - 1) {
+ if (m_shadow_map_colored) {
+ m_driver->setRenderTarget(0, false, false);
+ m_driver->setRenderTarget(shadowMapTextureColors,
+ true, false, video::SColor(255, 255, 255, 255));
+ }
+ renderShadowMap(shadowMapTextureColors, light,
+ scene::ESNRP_TRANSPARENT);
+ }
+ m_driver->setRenderTarget(0, false, false);
+ }
+
+ reset_sm_texture = false;
+ } // end for lights
+
+ // move to the next section
+ if (m_current_frame <= m_map_shadow_update_frames)
+ ++m_current_frame;
+
+ // pass finished, swap textures and commit light changes
+ if (m_current_frame == m_map_shadow_update_frames) {
+ if (shadowMapClientMapFuture != nullptr)
+ std::swap(shadowMapClientMapFuture, shadowMapClientMap);
+
+ // Let all lights know that maps are updated
+ for (DirectionalLight &light : m_light_list)
+ light.commitFrustum();
+ }
+ }
+}
+
+void ShadowRenderer::update(video::ITexture *outputTarget)
+{
+ if (!m_shadows_enabled || m_smgr->getActiveCamera() == nullptr) {
+ return;
+ }
+
+ updateSMTextures();
+
+ if (!m_shadow_node_array.empty() && !m_light_list.empty()) {
+
+ for (DirectionalLight &light : m_light_list) {
+ // Static shader values.
+ m_shadow_depth_cb->MapRes = (f32)m_shadow_map_texture_size;
+ m_shadow_depth_cb->MaxFar = (f32)m_shadow_map_max_distance * BS;
+
+ // render shadows for the n0n-map objects.
+ m_driver->setRenderTarget(shadowMapTextureDynamicObjects, true,
+ true, video::SColor(255, 255, 255, 255));
+ renderShadowObjects(shadowMapTextureDynamicObjects, light);
+ // clear the Render Target
+ m_driver->setRenderTarget(0, false, false);
+
+ // in order to avoid too many map shadow renders,
+ // we should make a second pass to mix clientmap shadows and
+ // entities shadows :(
+ m_screen_quad->getMaterial().setTexture(0, shadowMapClientMap);
+ // dynamic objs shadow texture.
+ if (m_shadow_map_colored)
+ m_screen_quad->getMaterial().setTexture(1, shadowMapTextureColors);
+ m_screen_quad->getMaterial().setTexture(2, shadowMapTextureDynamicObjects);
+
+ m_driver->setRenderTarget(shadowMapTextureFinal, false, false,
+ video::SColor(255, 255, 255, 255));
+ m_screen_quad->render(m_driver);
+ m_driver->setRenderTarget(0, false, false);
+
+ } // end for lights
+ }
+}
+
+void ShadowRenderer::drawDebug()
+{
+ /* this code just shows shadows textures in screen and in ONLY for debugging*/
+ #if 0
+ // this is debug, ignore for now.
+ m_driver->draw2DImage(shadowMapTextureFinal,
+ core::rect<s32>(0, 50, 128, 128 + 50),
+ core::rect<s32>({0, 0}, shadowMapTextureFinal->getSize()));
+
+ m_driver->draw2DImage(shadowMapClientMap,
+ core::rect<s32>(0, 50 + 128, 128, 128 + 50 + 128),
+ core::rect<s32>({0, 0}, shadowMapTextureFinal->getSize()));
+ m_driver->draw2DImage(shadowMapTextureDynamicObjects,
+ core::rect<s32>(0, 128 + 50 + 128, 128,
+ 128 + 50 + 128 + 128),
+ core::rect<s32>({0, 0}, shadowMapTextureDynamicObjects->getSize()));
+
+ if (m_shadow_map_colored) {
+
+ m_driver->draw2DImage(shadowMapTextureColors,
+ core::rect<s32>(128,128 + 50 + 128 + 128,
+ 128 + 128, 128 + 50 + 128 + 128 + 128),
+ core::rect<s32>({0, 0}, shadowMapTextureColors->getSize()));
+ }
+ #endif
+}
+
+
+video::ITexture *ShadowRenderer::getSMTexture(const std::string &shadow_map_name,
+ video::ECOLOR_FORMAT texture_format, bool force_creation)
+{
+ if (force_creation) {
+ return m_driver->addRenderTargetTexture(
+ core::dimension2du(m_shadow_map_texture_size,
+ m_shadow_map_texture_size),
+ shadow_map_name.c_str(), texture_format);
+ }
+
+ return m_driver->getTexture(shadow_map_name.c_str());
+}
+
+void ShadowRenderer::renderShadowMap(video::ITexture *target,
+ DirectionalLight &light, scene::E_SCENE_NODE_RENDER_PASS pass)
+{
+ m_driver->setTransform(video::ETS_VIEW, light.getFutureViewMatrix());
+ m_driver->setTransform(video::ETS_PROJECTION, light.getFutureProjectionMatrix());
+
+ // Operate on the client map
+ for (const auto &shadow_node : m_shadow_node_array) {
+ if (strcmp(shadow_node.node->getName(), "ClientMap") != 0)
+ continue;
+
+ ClientMap *map_node = static_cast<ClientMap *>(shadow_node.node);
+
+ video::SMaterial material;
+ if (map_node->getMaterialCount() > 0) {
+ // we only want the first material, which is the one with the albedo info
+ material = map_node->getMaterial(0);
+ }
+
+ material.BackfaceCulling = false;
+ material.FrontfaceCulling = true;
+ material.PolygonOffsetFactor = 4.0f;
+ material.PolygonOffsetDirection = video::EPO_BACK;
+ //material.PolygonOffsetDepthBias = 1.0f/4.0f;
+ //material.PolygonOffsetSlopeScale = -1.f;
+
+ if (m_shadow_map_colored && pass != scene::ESNRP_SOLID) {
+ material.MaterialType = (video::E_MATERIAL_TYPE) depth_shader_trans;
+ }
+ else {
+ material.MaterialType = (video::E_MATERIAL_TYPE) depth_shader;
+ material.BlendOperation = video::EBO_MIN;
+ }
+
+ // FIXME: I don't think this is needed here
+ map_node->OnAnimate(m_device->getTimer()->getTime());
+
+ m_driver->setTransform(video::ETS_WORLD,
+ map_node->getAbsoluteTransformation());
+
+ map_node->renderMapShadows(m_driver, material, pass, m_current_frame, m_map_shadow_update_frames);
+ break;
+ }
+}
+
+void ShadowRenderer::renderShadowObjects(
+ video::ITexture *target, DirectionalLight &light)
+{
+ m_driver->setTransform(video::ETS_VIEW, light.getViewMatrix());
+ m_driver->setTransform(video::ETS_PROJECTION, light.getProjectionMatrix());
+
+ for (const auto &shadow_node : m_shadow_node_array) {
+ // we only take care of the shadow casters
+ if (shadow_node.shadowMode == ESM_RECEIVE ||
+ strcmp(shadow_node.node->getName(), "ClientMap") == 0)
+ continue;
+
+ // render other objects
+ u32 n_node_materials = shadow_node.node->getMaterialCount();
+ std::vector<s32> BufferMaterialList;
+ std::vector<std::pair<bool, bool>> BufferMaterialCullingList;
+ std::vector<video::E_BLEND_OPERATION> BufferBlendOperationList;
+ BufferMaterialList.reserve(n_node_materials);
+ BufferMaterialCullingList.reserve(n_node_materials);
+ BufferBlendOperationList.reserve(n_node_materials);
+
+ // backup materialtype for each material
+ // (aka shader)
+ // and replace it by our "depth" shader
+ for (u32 m = 0; m < n_node_materials; m++) {
+ auto &current_mat = shadow_node.node->getMaterial(m);
+
+ BufferMaterialList.push_back(current_mat.MaterialType);
+ current_mat.MaterialType =
+ (video::E_MATERIAL_TYPE)depth_shader_entities;
+
+ BufferMaterialCullingList.emplace_back(
+ (bool)current_mat.BackfaceCulling, (bool)current_mat.FrontfaceCulling);
+ BufferBlendOperationList.push_back(current_mat.BlendOperation);
+
+ current_mat.BackfaceCulling = true;
+ current_mat.FrontfaceCulling = false;
+ current_mat.PolygonOffsetFactor = 1.0f/2048.0f;
+ current_mat.PolygonOffsetDirection = video::EPO_BACK;
+ //current_mat.PolygonOffsetDepthBias = 1.0 * 2.8e-6;
+ //current_mat.PolygonOffsetSlopeScale = -1.f;
+ }
+
+ m_driver->setTransform(video::ETS_WORLD,
+ shadow_node.node->getAbsoluteTransformation());
+ shadow_node.node->render();
+
+ // restore the material.
+
+ for (u32 m = 0; m < n_node_materials; m++) {
+ auto &current_mat = shadow_node.node->getMaterial(m);
+
+ current_mat.MaterialType = (video::E_MATERIAL_TYPE) BufferMaterialList[m];
+
+ current_mat.BackfaceCulling = BufferMaterialCullingList[m].first;
+ current_mat.FrontfaceCulling = BufferMaterialCullingList[m].second;
+ current_mat.BlendOperation = BufferBlendOperationList[m];
+ }
+
+ } // end for caster shadow nodes
+}
+
+void ShadowRenderer::mixShadowsQuad()
+{
+}
+
+/*
+ * @Liso's disclaimer ;) This function loads the Shadow Mapping Shaders.
+ * I used a custom loader because I couldn't figure out how to use the base
+ * Shaders system with custom IShaderConstantSetCallBack without messing up the
+ * code too much. If anyone knows how to integrate this with the standard MT
+ * shaders, please feel free to change it.
+ */
+
+void ShadowRenderer::createShaders()
+{
+ video::IGPUProgrammingServices *gpu = m_driver->getGPUProgrammingServices();
+
+ if (depth_shader == -1) {
+ std::string depth_shader_vs = getShaderPath("shadow_shaders", "pass1_vertex.glsl");
+ if (depth_shader_vs.empty()) {
+ m_shadows_enabled = false;
+ errorstream << "Error shadow mapping vs shader not found." << std::endl;
+ return;
+ }
+ std::string depth_shader_fs = getShaderPath("shadow_shaders", "pass1_fragment.glsl");
+ if (depth_shader_fs.empty()) {
+ m_shadows_enabled = false;
+ errorstream << "Error shadow mapping fs shader not found." << std::endl;
+ return;
+ }
+ m_shadow_depth_cb = new ShadowDepthShaderCB();
+
+ depth_shader = gpu->addHighLevelShaderMaterial(
+ readShaderFile(depth_shader_vs).c_str(), "vertexMain",
+ video::EVST_VS_1_1,
+ readShaderFile(depth_shader_fs).c_str(), "pixelMain",
+ video::EPST_PS_1_2, m_shadow_depth_cb, video::EMT_ONETEXTURE_BLEND);
+
+ if (depth_shader == -1) {
+ // upsi, something went wrong loading shader.
+ delete m_shadow_depth_cb;
+ m_shadows_enabled = false;
+ errorstream << "Error compiling shadow mapping shader." << std::endl;
+ return;
+ }
+
+ // HACK, TODO: investigate this better
+ // Grab the material renderer once more so minetest doesn't crash
+ // on exit
+ m_driver->getMaterialRenderer(depth_shader)->grab();
+ }
+
+ // This creates a clone of depth_shader with base material set to EMT_SOLID,
+ // because entities won't render shadows with base material EMP_ONETEXTURE_BLEND
+ if (depth_shader_entities == -1) {
+ std::string depth_shader_vs = getShaderPath("shadow_shaders", "pass1_vertex.glsl");
+ if (depth_shader_vs.empty()) {
+ m_shadows_enabled = false;
+ errorstream << "Error shadow mapping vs shader not found." << std::endl;
+ return;
+ }
+ std::string depth_shader_fs = getShaderPath("shadow_shaders", "pass1_fragment.glsl");
+ if (depth_shader_fs.empty()) {
+ m_shadows_enabled = false;
+ errorstream << "Error shadow mapping fs shader not found." << std::endl;
+ return;
+ }
+
+ depth_shader_entities = gpu->addHighLevelShaderMaterial(
+ readShaderFile(depth_shader_vs).c_str(), "vertexMain",
+ video::EVST_VS_1_1,
+ readShaderFile(depth_shader_fs).c_str(), "pixelMain",
+ video::EPST_PS_1_2, m_shadow_depth_cb);
+
+ if (depth_shader_entities == -1) {
+ // upsi, something went wrong loading shader.
+ m_shadows_enabled = false;
+ errorstream << "Error compiling shadow mapping shader (dynamic)." << std::endl;
+ return;
+ }
+
+ // HACK, TODO: investigate this better
+ // Grab the material renderer once more so minetest doesn't crash
+ // on exit
+ m_driver->getMaterialRenderer(depth_shader_entities)->grab();
+ }
+
+ if (mixcsm_shader == -1) {
+ std::string depth_shader_vs = getShaderPath("shadow_shaders", "pass2_vertex.glsl");
+ if (depth_shader_vs.empty()) {
+ m_shadows_enabled = false;
+ errorstream << "Error cascade shadow mapping fs shader not found." << std::endl;
+ return;
+ }
+
+ std::string depth_shader_fs = getShaderPath("shadow_shaders", "pass2_fragment.glsl");
+ if (depth_shader_fs.empty()) {
+ m_shadows_enabled = false;
+ errorstream << "Error cascade shadow mapping fs shader not found." << std::endl;
+ return;
+ }
+ m_shadow_mix_cb = new shadowScreenQuadCB();
+ m_screen_quad = new shadowScreenQuad();
+ mixcsm_shader = gpu->addHighLevelShaderMaterial(
+ readShaderFile(depth_shader_vs).c_str(), "vertexMain",
+ video::EVST_VS_1_1,
+ readShaderFile(depth_shader_fs).c_str(), "pixelMain",
+ video::EPST_PS_1_2, m_shadow_mix_cb);
+
+ m_screen_quad->getMaterial().MaterialType =
+ (video::E_MATERIAL_TYPE)mixcsm_shader;
+
+ if (mixcsm_shader == -1) {
+ // upsi, something went wrong loading shader.
+ delete m_shadow_mix_cb;
+ delete m_screen_quad;
+ m_shadows_enabled = false;
+ errorstream << "Error compiling cascade shadow mapping shader." << std::endl;
+ return;
+ }
+
+ // HACK, TODO: investigate this better
+ // Grab the material renderer once more so minetest doesn't crash
+ // on exit
+ m_driver->getMaterialRenderer(mixcsm_shader)->grab();
+ }
+
+ if (m_shadow_map_colored && depth_shader_trans == -1) {
+ std::string depth_shader_vs = getShaderPath("shadow_shaders", "pass1_trans_vertex.glsl");
+ if (depth_shader_vs.empty()) {
+ m_shadows_enabled = false;
+ errorstream << "Error shadow mapping vs shader not found." << std::endl;
+ return;
+ }
+ std::string depth_shader_fs = getShaderPath("shadow_shaders", "pass1_trans_fragment.glsl");
+ if (depth_shader_fs.empty()) {
+ m_shadows_enabled = false;
+ errorstream << "Error shadow mapping fs shader not found." << std::endl;
+ return;
+ }
+ m_shadow_depth_trans_cb = new ShadowDepthShaderCB();
+
+ depth_shader_trans = gpu->addHighLevelShaderMaterial(
+ readShaderFile(depth_shader_vs).c_str(), "vertexMain",
+ video::EVST_VS_1_1,
+ readShaderFile(depth_shader_fs).c_str(), "pixelMain",
+ video::EPST_PS_1_2, m_shadow_depth_trans_cb);
+
+ if (depth_shader_trans == -1) {
+ // upsi, something went wrong loading shader.
+ delete m_shadow_depth_trans_cb;
+ m_shadow_map_colored = false;
+ m_shadows_enabled = false;
+ errorstream << "Error compiling colored shadow mapping shader." << std::endl;
+ return;
+ }
+
+ // HACK, TODO: investigate this better
+ // Grab the material renderer once more so minetest doesn't crash
+ // on exit
+ m_driver->getMaterialRenderer(depth_shader_trans)->grab();
+ }
+}
+
+std::string ShadowRenderer::readShaderFile(const std::string &path)
+{
+ std::string prefix;
+ if (m_shadow_map_colored)
+ prefix.append("#define COLORED_SHADOWS 1\n");
+
+ std::string content;
+ fs::ReadFile(path, content);
+
+ return prefix + content;
+}
diff --git a/src/client/shadows/dynamicshadowsrender.h b/src/client/shadows/dynamicshadowsrender.h
new file mode 100644
index 000000000..e4b3c3e22
--- /dev/null
+++ b/src/client/shadows/dynamicshadowsrender.h
@@ -0,0 +1,147 @@
+/*
+Minetest
+Copyright (C) 2021 Liso <anlismon@gmail.com>
+
+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
+(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.
+*/
+
+#pragma once
+
+#include <string>
+#include <vector>
+#include "irrlichttypes_extrabloated.h"
+#include "client/shadows/dynamicshadows.h"
+
+class ShadowDepthShaderCB;
+class shadowScreenQuad;
+class shadowScreenQuadCB;
+
+enum E_SHADOW_MODE : u8
+{
+ ESM_RECEIVE = 0,
+ ESM_BOTH,
+};
+
+struct NodeToApply
+{
+ NodeToApply(scene::ISceneNode *n,
+ E_SHADOW_MODE m = E_SHADOW_MODE::ESM_BOTH) :
+ node(n),
+ shadowMode(m){};
+ bool operator<(const NodeToApply &other) const { return node < other.node; };
+
+ scene::ISceneNode *node;
+
+ E_SHADOW_MODE shadowMode{E_SHADOW_MODE::ESM_BOTH};
+ bool dirty{false};
+};
+
+class ShadowRenderer
+{
+public:
+ ShadowRenderer(IrrlichtDevice *device, Client *client);
+
+ ~ShadowRenderer();
+
+ void initialize();
+
+ /// Adds a directional light shadow map (Usually just one (the sun) except in
+ /// Tattoine ).
+ size_t addDirectionalLight();
+ DirectionalLight &getDirectionalLight(u32 index = 0);
+ size_t getDirectionalLightCount() const;
+ f32 getMaxShadowFar() const;
+
+ /// Adds a shadow to the scene node.
+ /// The shadow mode can be ESM_BOTH, or ESM_RECEIVE.
+ /// ESM_BOTH casts and receives shadows
+ /// ESM_RECEIVE only receives but does not cast shadows.
+ ///
+ void addNodeToShadowList(scene::ISceneNode *node,
+ E_SHADOW_MODE shadowMode = ESM_BOTH);
+ void removeNodeFromShadowList(scene::ISceneNode *node);
+
+ void update(video::ITexture *outputTarget = nullptr);
+ void drawDebug();
+
+ video::ITexture *get_texture()
+ {
+ return shadowMapTextureFinal;
+ }
+
+
+ bool is_active() const { return m_shadows_enabled; }
+ void setTimeOfDay(float isDay) { m_time_day = isDay; };
+
+ s32 getShadowSamples() const { return m_shadow_samples; }
+ float getShadowStrength() const { return m_shadow_strength; }
+ float getTimeOfDay() const { return m_time_day; }
+
+private:
+ video::ITexture *getSMTexture(const std::string &shadow_map_name,
+ video::ECOLOR_FORMAT texture_format,
+ bool force_creation = false);
+
+ void renderShadowMap(video::ITexture *target, DirectionalLight &light,
+ scene::E_SCENE_NODE_RENDER_PASS pass =
+ scene::ESNRP_SOLID);
+ void renderShadowObjects(video::ITexture *target, DirectionalLight &light);
+ void mixShadowsQuad();
+ void updateSMTextures();
+
+ // a bunch of variables
+ IrrlichtDevice *m_device{nullptr};
+ scene::ISceneManager *m_smgr{nullptr};
+ video::IVideoDriver *m_driver{nullptr};
+ Client *m_client{nullptr};
+ video::ITexture *shadowMapClientMap{nullptr};
+ video::ITexture *shadowMapClientMapFuture{nullptr};
+ video::ITexture *shadowMapTextureFinal{nullptr};
+ video::ITexture *shadowMapTextureDynamicObjects{nullptr};
+ video::ITexture *shadowMapTextureColors{nullptr};
+
+ std::vector<DirectionalLight> m_light_list;
+ std::vector<NodeToApply> m_shadow_node_array;
+
+ float m_shadow_strength;
+ float m_shadow_map_max_distance;
+ float m_shadow_map_texture_size;
+ float m_time_day{0.0f};
+ int m_shadow_samples;
+ bool m_shadow_map_texture_32bit;
+ bool m_shadows_enabled;
+ bool m_shadow_map_colored;
+ u8 m_map_shadow_update_frames; /* Use this number of frames to update map shaodw */
+ u8 m_current_frame{0}; /* Current frame */
+
+ video::ECOLOR_FORMAT m_texture_format{video::ECOLOR_FORMAT::ECF_R16F};
+ video::ECOLOR_FORMAT m_texture_format_color{video::ECOLOR_FORMAT::ECF_R16G16};
+
+ // Shadow Shader stuff
+
+ void createShaders();
+ std::string readShaderFile(const std::string &path);
+
+ s32 depth_shader{-1};
+ s32 depth_shader_entities{-1};
+ s32 depth_shader_trans{-1};
+ s32 mixcsm_shader{-1};
+
+ ShadowDepthShaderCB *m_shadow_depth_cb{nullptr};
+ ShadowDepthShaderCB *m_shadow_depth_trans_cb{nullptr};
+
+ shadowScreenQuad *m_screen_quad{nullptr};
+ shadowScreenQuadCB *m_shadow_mix_cb{nullptr};
+};
diff --git a/src/client/shadows/shadowsScreenQuad.cpp b/src/client/shadows/shadowsScreenQuad.cpp
new file mode 100644
index 000000000..5f6d38157
--- /dev/null
+++ b/src/client/shadows/shadowsScreenQuad.cpp
@@ -0,0 +1,61 @@
+/*
+Minetest
+Copyright (C) 2021 Liso <anlismon@gmail.com>
+
+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
+(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 "shadowsScreenQuad.h"
+
+shadowScreenQuad::shadowScreenQuad()
+{
+ Material.Wireframe = false;
+ Material.Lighting = false;
+
+ video::SColor color(0x0);
+ Vertices[0] = video::S3DVertex(
+ -1.0f, -1.0f, 0.0f, 0, 0, 1, color, 0.0f, 1.0f);
+ Vertices[1] = video::S3DVertex(
+ -1.0f, 1.0f, 0.0f, 0, 0, 1, color, 0.0f, 0.0f);
+ Vertices[2] = video::S3DVertex(
+ 1.0f, 1.0f, 0.0f, 0, 0, 1, color, 1.0f, 0.0f);
+ Vertices[3] = video::S3DVertex(
+ 1.0f, -1.0f, 0.0f, 0, 0, 1, color, 1.0f, 1.0f);
+ Vertices[4] = video::S3DVertex(
+ -1.0f, -1.0f, 0.0f, 0, 0, 1, color, 0.0f, 1.0f);
+ Vertices[5] = video::S3DVertex(
+ 1.0f, 1.0f, 0.0f, 0, 0, 1, color, 1.0f, 0.0f);
+}
+
+void shadowScreenQuad::render(video::IVideoDriver *driver)
+{
+ u16 indices[6] = {0, 1, 2, 3, 4, 5};
+ driver->setMaterial(Material);
+ driver->setTransform(video::ETS_WORLD, core::matrix4());
+ driver->drawIndexedTriangleList(&Vertices[0], 6, &indices[0], 2);
+}
+
+void shadowScreenQuadCB::OnSetConstants(
+ video::IMaterialRendererServices *services, s32 userData)
+{
+ s32 TextureId = 0;
+ m_sm_client_map_setting.set(&TextureId, services);
+
+ TextureId = 1;
+ m_sm_client_map_trans_setting.set(&TextureId, services);
+
+ TextureId = 2;
+ m_sm_dynamic_sampler_setting.set(&TextureId, services);
+}
diff --git a/src/client/shadows/shadowsScreenQuad.h b/src/client/shadows/shadowsScreenQuad.h
new file mode 100644
index 000000000..c18be9a2b
--- /dev/null
+++ b/src/client/shadows/shadowsScreenQuad.h
@@ -0,0 +1,54 @@
+/*
+Minetest
+Copyright (C) 2021 Liso <anlismon@gmail.com>
+
+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
+(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.
+*/
+
+#pragma once
+#include "irrlichttypes_extrabloated.h"
+#include <IMaterialRendererServices.h>
+#include <IShaderConstantSetCallBack.h>
+#include "client/shader.h"
+
+class shadowScreenQuad
+{
+public:
+ shadowScreenQuad();
+
+ void render(video::IVideoDriver *driver);
+ video::SMaterial &getMaterial() { return Material; }
+
+private:
+ video::S3DVertex Vertices[6];
+ video::SMaterial Material;
+};
+
+class shadowScreenQuadCB : public video::IShaderConstantSetCallBack
+{
+public:
+ shadowScreenQuadCB() :
+ m_sm_client_map_setting("ShadowMapClientMap"),
+ m_sm_client_map_trans_setting("ShadowMapClientMapTraslucent"),
+ m_sm_dynamic_sampler_setting("ShadowMapSamplerdynamic")
+ {}
+
+ virtual void OnSetConstants(video::IMaterialRendererServices *services,
+ s32 userData);
+private:
+ CachedPixelShaderSetting<s32> m_sm_client_map_setting;
+ CachedPixelShaderSetting<s32> m_sm_client_map_trans_setting;
+ CachedPixelShaderSetting<s32> m_sm_dynamic_sampler_setting;
+};
diff --git a/src/unittest/test_player.cpp b/src/client/shadows/shadowsshadercallbacks.cpp
index 6990b4016..65a63f49c 100644
--- a/src/unittest/test_player.cpp
+++ b/src/client/shadows/shadowsshadercallbacks.cpp
@@ -1,6 +1,6 @@
/*
Minetest
-Copyright (C) 2010-2016 nerzhul, Loic Blot <loic.blot@unix-experience.fr>
+Copyright (C) 2021 Liso <anlismon@gmail.com>
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,23 +17,20 @@ 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 "client/shadows/shadowsshadercallbacks.h"
-#include "exceptions.h"
-#include "remoteplayer.h"
-#include "server.h"
-
-class TestPlayer : public TestBase
+void ShadowDepthShaderCB::OnSetConstants(
+ video::IMaterialRendererServices *services, s32 userData)
{
-public:
- TestPlayer() { TestManager::registerTestModule(this); }
- const char *getName() { return "TestPlayer"; }
-
- void runTests(IGameDef *gamedef);
-};
+ video::IVideoDriver *driver = services->getVideoDriver();
-static TestPlayer g_test_instance;
+ core::matrix4 lightMVP = driver->getTransform(video::ETS_PROJECTION);
+ lightMVP *= driver->getTransform(video::ETS_VIEW);
+ lightMVP *= driver->getTransform(video::ETS_WORLD);
-void TestPlayer::runTests(IGameDef *gamedef)
-{
+ m_light_mvp_setting.set(lightMVP.pointer(), services);
+ m_map_resolution_setting.set(&MapRes, services);
+ m_max_far_setting.set(&MaxFar, services);
+ s32 TextureId = 0;
+ m_color_map_sampler_setting.set(&TextureId, services);
}
diff --git a/src/client/shadows/shadowsshadercallbacks.h b/src/client/shadows/shadowsshadercallbacks.h
new file mode 100644
index 000000000..3549567c3
--- /dev/null
+++ b/src/client/shadows/shadowsshadercallbacks.h
@@ -0,0 +1,48 @@
+/*
+Minetest
+Copyright (C) 2021 Liso <anlismon@gmail.com>
+
+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
+(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.
+*/
+
+#pragma once
+#include "irrlichttypes_extrabloated.h"
+#include <IMaterialRendererServices.h>
+#include <IShaderConstantSetCallBack.h>
+#include "client/shader.h"
+
+class ShadowDepthShaderCB : public video::IShaderConstantSetCallBack
+{
+public:
+ ShadowDepthShaderCB() :
+ m_light_mvp_setting("LightMVP"),
+ m_map_resolution_setting("MapResolution"),
+ m_max_far_setting("MaxFar"),
+ m_color_map_sampler_setting("ColorMapSampler")
+ {}
+
+ void OnSetMaterial(const video::SMaterial &material) override {}
+
+ void OnSetConstants(video::IMaterialRendererServices *services,
+ s32 userData) override;
+
+ f32 MaxFar{2048.0f}, MapRes{1024.0f};
+
+private:
+ CachedVertexShaderSetting<f32, 16> m_light_mvp_setting;
+ CachedVertexShaderSetting<f32> m_map_resolution_setting;
+ CachedVertexShaderSetting<f32> m_max_far_setting;
+ CachedPixelShaderSetting<s32> m_color_map_sampler_setting;
+};
diff --git a/src/client/sky.cpp b/src/client/sky.cpp
index 2512a0e23..7fe90c6cd 100644
--- a/src/client/sky.cpp
+++ b/src/client/sky.cpp
@@ -18,50 +18,65 @@ with this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
+#include <cmath>
#include "sky.h"
-#include "ITexture.h"
-#include "IVideoDriver.h"
-#include "ISceneManager.h"
-#include "ICameraSceneNode.h"
-#include "S3DVertex.h"
+#include <ITexture.h>
+#include <IVideoDriver.h>
+#include <ISceneManager.h>
+#include <ICameraSceneNode.h>
+#include <S3DVertex.h>
#include "client/tile.h"
#include "noise.h" // easeCurve
#include "profiler.h"
#include "util/numeric.h"
-#include <cmath>
#include "client/renderingengine.h"
#include "settings.h"
#include "camera.h" // CameraModes
-#include "config.h"
+
using namespace irr::core;
static video::SMaterial baseMaterial()
{
video::SMaterial mat;
mat.Lighting = false;
-#if ENABLE_GLES
+#if IRRLICHT_VERSION_MAJOR == 1 && IRRLICHT_VERSION_MINOR > 8
mat.ZBuffer = video::ECFN_DISABLED;
+ mat.ZWriteEnable = video::EZW_OFF;
#else
+ mat.ZWriteEnable = false;
mat.ZBuffer = video::ECFN_NEVER;
#endif
- mat.ZWriteEnable = false;
mat.AntiAliasing = 0;
mat.TextureLayer[0].TextureWrapU = video::ETC_CLAMP_TO_EDGE;
mat.TextureLayer[0].TextureWrapV = video::ETC_CLAMP_TO_EDGE;
mat.BackfaceCulling = false;
return mat;
-};
+}
-Sky::Sky(s32 id, ITextureSource *tsrc, IShaderSource *ssrc) :
- scene::ISceneNode(RenderingEngine::get_scene_manager()->getRootSceneNode(),
- RenderingEngine::get_scene_manager(), id)
+static inline void disableTextureFiltering(video::SMaterial &mat)
{
+ mat.setFlag(video::E_MATERIAL_FLAG::EMF_BILINEAR_FILTER, false);
+ mat.setFlag(video::E_MATERIAL_FLAG::EMF_TRILINEAR_FILTER, false);
+ mat.setFlag(video::E_MATERIAL_FLAG::EMF_ANISOTROPIC_FILTER, false);
+}
+
+Sky::Sky(s32 id, RenderingEngine *rendering_engine, ITextureSource *tsrc, IShaderSource *ssrc) :
+ scene::ISceneNode(rendering_engine->get_scene_manager()->getRootSceneNode(),
+ rendering_engine->get_scene_manager(), id)
+{
+ m_seed = (u64)myrand() << 32 | myrand();
+
setAutomaticCulling(scene::EAC_OFF);
m_box.MaxEdge.set(0, 0, 0);
m_box.MinEdge.set(0, 0, 0);
m_enable_shaders = g_settings->getBool("enable_shaders");
+ m_sky_params = SkyboxDefaults::getSkyDefaults();
+ m_sun_params = SkyboxDefaults::getSunDefaults();
+ m_moon_params = SkyboxDefaults::getMoonDefaults();
+ m_star_params = SkyboxDefaults::getStarDefaults();
+
// Create materials
m_materials[0] = baseMaterial();
@@ -70,57 +85,30 @@ Sky::Sky(s32 id, ITextureSource *tsrc, IShaderSource *ssrc) :
m_materials[0].ColorMaterial = video::ECM_NONE;
m_materials[1] = baseMaterial();
- //m_materials[1].MaterialType = video::EMT_TRANSPARENT_VERTEX_ALPHA;
m_materials[1].MaterialType = video::EMT_TRANSPARENT_ALPHA_CHANNEL;
m_materials[2] = baseMaterial();
m_materials[2].setTexture(0, tsrc->getTextureForMesh("sunrisebg.png"));
m_materials[2].MaterialType = video::EMT_TRANSPARENT_ALPHA_CHANNEL;
- //m_materials[2].MaterialType = video::EMT_TRANSPARENT_ADD_COLOR;
-
- // Ensures that sun and moon textures and tonemaps are correct.
- setSkyDefaults();
- m_sun_texture = tsrc->isKnownSourceImage(m_sun_params.texture) ?
- tsrc->getTextureForMesh(m_sun_params.texture) : nullptr;
- m_moon_texture = tsrc->isKnownSourceImage(m_moon_params.texture) ?
- tsrc->getTextureForMesh(m_moon_params.texture) : nullptr;
- m_sun_tonemap = tsrc->isKnownSourceImage(m_sun_params.tonemap) ?
- tsrc->getTexture(m_sun_params.tonemap) : nullptr;
- m_moon_tonemap = tsrc->isKnownSourceImage(m_moon_params.tonemap) ?
- tsrc->getTexture(m_moon_params.tonemap) : nullptr;
- if (m_sun_texture) {
- m_materials[3] = baseMaterial();
- m_materials[3].setTexture(0, m_sun_texture);
- m_materials[3].MaterialType = video::EMT_TRANSPARENT_ALPHA_CHANNEL;
- // Disables texture filtering
- m_materials[3].setFlag(video::E_MATERIAL_FLAG::EMF_BILINEAR_FILTER, false);
- m_materials[3].setFlag(video::E_MATERIAL_FLAG::EMF_TRILINEAR_FILTER, false);
- m_materials[3].setFlag(video::E_MATERIAL_FLAG::EMF_ANISOTROPIC_FILTER, false);
- // Use tonemaps if available
- if (m_sun_tonemap)
- m_materials[3].Lighting = true;
- }
- if (m_moon_texture) {
- m_materials[4] = baseMaterial();
- m_materials[4].setTexture(0, m_moon_texture);
- m_materials[4].MaterialType = video::EMT_TRANSPARENT_ALPHA_CHANNEL;
- // Disables texture filtering
- m_materials[4].setFlag(video::E_MATERIAL_FLAG::EMF_BILINEAR_FILTER, false);
- m_materials[4].setFlag(video::E_MATERIAL_FLAG::EMF_TRILINEAR_FILTER, false);
- m_materials[4].setFlag(video::E_MATERIAL_FLAG::EMF_ANISOTROPIC_FILTER, false);
- // Use tonemaps if available
- if (m_moon_tonemap)
- m_materials[4].Lighting = true;
- }
+ setSunTexture(m_sun_params.texture, m_sun_params.tonemap, tsrc);
+
+ setMoonTexture(m_moon_params.texture, m_moon_params.tonemap, tsrc);
for (int i = 5; i < 11; i++) {
m_materials[i] = baseMaterial();
m_materials[i].Lighting = true;
m_materials[i].MaterialType = video::EMT_SOLID;
}
+
m_directional_colored_fog = g_settings->getBool("directional_colored_fog");
- setStarCount(1000, true);
+
+ if (false && g_settings->getBool("enable_dynamic_shadows")) {
+ float val = g_settings->getFloat("shadow_sky_body_orbit_tilt");
+ m_sky_body_orbit_tilt = rangelim(val, 0.0f, 60.0f);
+ }
+
+ setStarCount(1000);
}
void Sky::OnRegisterSceneNode()
@@ -172,17 +160,7 @@ void Sky::render()
video::SColorf mooncolor_f(0.50, 0.57, 0.65, 1);
video::SColorf mooncolor2_f(0.85, 0.875, 0.9, 1);
- float nightlength = 0.415;
- float wn = nightlength / 2;
- float wicked_time_of_day = 0;
- if (m_time_of_day > wn && m_time_of_day < 1.0 - wn)
- wicked_time_of_day = (m_time_of_day - wn) / (1.0 - wn * 2) * 0.5 + 0.25;
- else if (m_time_of_day < 0.5)
- wicked_time_of_day = m_time_of_day / wn * 0.25;
- else
- wicked_time_of_day = 1.0 - ((1.0 - m_time_of_day) / wn * 0.25);
- /*std::cerr<<"time_of_day="<<m_time_of_day<<" -> "
- <<"wicked_time_of_day="<<wicked_time_of_day<<std::endl;*/
+ float wicked_time_of_day = getWickedTimeOfDay(m_time_of_day);
video::SColor suncolor = suncolor_f.toSColor();
video::SColor suncolor2 = suncolor2_f.toSColor();
@@ -386,20 +364,6 @@ void Sky::update(float time_of_day, float time_brightness,
bool is_dawn = (time_brightness >= 0.20 && time_brightness < 0.35);
- /*
- Development colours
-
- video::SColorf bgcolor_bright_normal_f(170. / 255, 200. / 255, 230. / 255, 1.0);
- video::SColorf bgcolor_bright_dawn_f(0.666, 200. / 255 * 0.7, 230. / 255 * 0.5, 1.0);
- video::SColorf bgcolor_bright_dawn_f(0.666, 0.549, 0.220, 1.0);
- video::SColorf bgcolor_bright_dawn_f(0.666 * 1.2, 0.549 * 1.0, 0.220 * 1.0, 1.0);
- video::SColorf bgcolor_bright_dawn_f(0.666 * 1.2, 0.549 * 1.0, 0.220 * 1.2, 1.0);
-
- video::SColorf cloudcolor_bright_dawn_f(1.0, 0.591, 0.4);
- video::SColorf cloudcolor_bright_dawn_f(1.0, 0.65, 0.44);
- video::SColorf cloudcolor_bright_dawn_f(1.0, 0.7, 0.5);
- */
-
video::SColorf bgcolor_bright_normal_f = m_sky_params.sky_color.day_horizon;
video::SColorf bgcolor_bright_indoor_f = m_sky_params.sky_color.indoors;
video::SColorf bgcolor_bright_dawn_f = m_sky_params.sky_color.dawn_horizon;
@@ -736,10 +700,15 @@ void Sky::place_sky_body(
* day_position: turn the body around the Z axis, to place it depending of the time of the day
*/
{
+ v3f centrum(0, 0, -1);
+ centrum.rotateXZBy(horizon_position);
+ centrum.rotateXYBy(day_position);
+ centrum.rotateYZBy(m_sky_body_orbit_tilt);
for (video::S3DVertex &vertex : vertices) {
// Body is directed to -Z (south) by default
vertex.Pos.rotateXZBy(horizon_position);
vertex.Pos.rotateXYBy(day_position);
+ vertex.Pos.Z += centrum.Z;
}
}
@@ -749,33 +718,29 @@ void Sky::setSunTexture(const std::string &sun_texture,
// Ignore matching textures (with modifiers) entirely,
// but lets at least update the tonemap before hand.
m_sun_params.tonemap = sun_tonemap;
- m_sun_tonemap = tsrc->isKnownSourceImage(m_sun_params.tonemap) ?
- tsrc->getTexture(m_sun_params.tonemap) : nullptr;
+ m_sun_tonemap = tsrc->isKnownSourceImage(sun_tonemap) ?
+ tsrc->getTexture(sun_tonemap) : nullptr;
m_materials[3].Lighting = !!m_sun_tonemap;
- if (m_sun_params.texture == sun_texture)
+ if (m_sun_params.texture == sun_texture && !m_first_update)
return;
m_sun_params.texture = sun_texture;
- if (sun_texture != "") {
- // We want to ensure the texture exists first.
- m_sun_texture = tsrc->getTextureForMesh(m_sun_params.texture);
-
- if (m_sun_texture) {
- m_materials[3] = baseMaterial();
- m_materials[3].setTexture(0, m_sun_texture);
- m_materials[3].MaterialType = video::
- EMT_TRANSPARENT_ALPHA_CHANNEL;
- // Disables texture filtering
- m_materials[3].setFlag(
- video::E_MATERIAL_FLAG::EMF_BILINEAR_FILTER, false);
- m_materials[3].setFlag(
- video::E_MATERIAL_FLAG::EMF_TRILINEAR_FILTER, false);
- m_materials[3].setFlag(
- video::E_MATERIAL_FLAG::EMF_ANISOTROPIC_FILTER, false);
- }
- } else {
- m_sun_texture = nullptr;
+ m_sun_texture = nullptr;
+ if (sun_texture == "sun.png") {
+ // Dumb compatibility fix: sun.png transparently falls back to no texture
+ m_sun_texture = tsrc->isKnownSourceImage(sun_texture) ?
+ tsrc->getTexture(sun_texture) : nullptr;
+ } else if (!sun_texture.empty()) {
+ m_sun_texture = tsrc->getTextureForMesh(sun_texture);
+ }
+
+ if (m_sun_texture) {
+ m_materials[3] = baseMaterial();
+ m_materials[3].setTexture(0, m_sun_texture);
+ m_materials[3].MaterialType = video::EMT_TRANSPARENT_ALPHA_CHANNEL;
+ disableTextureFiltering(m_materials[3]);
+ m_materials[3].Lighting = !!m_sun_tonemap;
}
}
@@ -797,42 +762,37 @@ void Sky::setMoonTexture(const std::string &moon_texture,
// Ignore matching textures (with modifiers) entirely,
// but lets at least update the tonemap before hand.
m_moon_params.tonemap = moon_tonemap;
- m_moon_tonemap = tsrc->isKnownSourceImage(m_moon_params.tonemap) ?
- tsrc->getTexture(m_moon_params.tonemap) : nullptr;
+ m_moon_tonemap = tsrc->isKnownSourceImage(moon_tonemap) ?
+ tsrc->getTexture(moon_tonemap) : nullptr;
m_materials[4].Lighting = !!m_moon_tonemap;
- if (m_moon_params.texture == moon_texture)
+ if (m_moon_params.texture == moon_texture && !m_first_update)
return;
m_moon_params.texture = moon_texture;
- if (moon_texture != "") {
- // We want to ensure the texture exists first.
- m_moon_texture = tsrc->getTextureForMesh(m_moon_params.texture);
-
- if (m_moon_texture) {
- m_materials[4] = baseMaterial();
- m_materials[4].setTexture(0, m_moon_texture);
- m_materials[4].MaterialType = video::
- EMT_TRANSPARENT_ALPHA_CHANNEL;
- // Disables texture filtering
- m_materials[4].setFlag(
- video::E_MATERIAL_FLAG::EMF_BILINEAR_FILTER, false);
- m_materials[4].setFlag(
- video::E_MATERIAL_FLAG::EMF_TRILINEAR_FILTER, false);
- m_materials[4].setFlag(
- video::E_MATERIAL_FLAG::EMF_ANISOTROPIC_FILTER, false);
- }
- } else {
- m_moon_texture = nullptr;
+ m_moon_texture = nullptr;
+ if (moon_texture == "moon.png") {
+ // Dumb compatibility fix: moon.png transparently falls back to no texture
+ m_moon_texture = tsrc->isKnownSourceImage(moon_texture) ?
+ tsrc->getTexture(moon_texture) : nullptr;
+ } else if (!moon_texture.empty()) {
+ m_moon_texture = tsrc->getTextureForMesh(moon_texture);
+ }
+
+ if (m_moon_texture) {
+ m_materials[4] = baseMaterial();
+ m_materials[4].setTexture(0, m_moon_texture);
+ m_materials[4].MaterialType = video::EMT_TRANSPARENT_ALPHA_CHANNEL;
+ disableTextureFiltering(m_materials[4]);
+ m_materials[4].Lighting = !!m_moon_tonemap;
}
}
-void Sky::setStarCount(u16 star_count, bool force_update)
+void Sky::setStarCount(u16 star_count)
{
// Allow force updating star count at game init.
- if (m_star_params.count != star_count || force_update) {
+ if (m_star_params.count != star_count || m_first_update) {
m_star_params.count = star_count;
- m_seed = (u64)myrand() << 32 | myrand();
updateStars();
}
}
@@ -920,12 +880,16 @@ void Sky::addTextureToSkybox(const std::string &texture, int material_id,
m_materials[material_id+5].MaterialType = video::EMT_SOLID;
}
-// To be called once at game init to setup default values.
-void Sky::setSkyDefaults()
+float getWickedTimeOfDay(float time_of_day)
{
- SkyboxDefaults sky_defaults;
- m_sky_params.sky_color = sky_defaults.getSkyColorDefaults();
- m_sun_params = sky_defaults.getSunDefaults();
- m_moon_params = sky_defaults.getMoonDefaults();
- m_star_params = sky_defaults.getStarDefaults();
+ float nightlength = 0.415f;
+ float wn = nightlength / 2;
+ float wicked_time_of_day = 0;
+ if (time_of_day > wn && time_of_day < 1.0f - wn)
+ wicked_time_of_day = (time_of_day - wn) / (1.0f - wn * 2) * 0.5f + 0.25f;
+ else if (time_of_day < 0.5f)
+ wicked_time_of_day = time_of_day / wn * 0.25f;
+ else
+ wicked_time_of_day = 1.0f - ((1.0f - time_of_day) / wn * 0.25f);
+ return wicked_time_of_day;
}
diff --git a/src/client/sky.h b/src/client/sky.h
index dc7da5021..3dc057b70 100644
--- a/src/client/sky.h
+++ b/src/client/sky.h
@@ -17,6 +17,8 @@ with this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
+#pragma once
+
#include "irrlichttypes_extrabloated.h"
#include <ISceneNode.h>
#include <array>
@@ -25,8 +27,6 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "shader.h"
#include "skyparams.h"
-#pragma once
-
#define SKY_MATERIAL_COUNT 12
class ITextureSource;
@@ -36,7 +36,7 @@ class Sky : public scene::ISceneNode
{
public:
//! constructor
- Sky(s32 id, ITextureSource *tsrc, IShaderSource *ssrc);
+ Sky(s32 id, RenderingEngine *rendering_engine, ITextureSource *tsrc, IShaderSource *ssrc);
virtual void OnRegisterSceneNode();
@@ -77,7 +77,7 @@ public:
void setMoonScale(f32 moon_scale) { m_moon_params.scale = moon_scale; }
void setStarsVisible(bool stars_visible) { m_star_params.visible = stars_visible; }
- void setStarCount(u16 star_count, bool force_update);
+ void setStarCount(u16 star_count);
void setStarColor(video::SColor star_color) { m_star_params.starcolor = star_color; }
void setStarScale(f32 star_scale) { m_star_params.scale = star_scale; updateStars(); }
@@ -105,6 +105,8 @@ public:
ITextureSource *tsrc);
const video::SColorf &getCurrentStarColor() const { return m_star_color; }
+ float getSkyBodyOrbitTilt() const { return m_sky_body_orbit_tilt; }
+
private:
aabb3f m_box;
video::SMaterial m_materials[SKY_MATERIAL_COUNT];
@@ -148,7 +150,7 @@ private:
bool m_visible = true;
// Used when m_visible=false
video::SColor m_fallback_bg_color = video::SColor(255, 255, 255, 255);
- bool m_first_update = true;
+ bool m_first_update = true; // Set before the sky is updated for the first time
float m_time_of_day;
float m_time_brightness;
bool m_sunlight_seen;
@@ -159,6 +161,7 @@ private:
bool m_directional_colored_fog;
bool m_in_clouds = true; // Prevent duplicating bools to remember old values
bool m_enable_shaders = false;
+ float m_sky_body_orbit_tilt = 0.0f;
video::SColorf m_bgcolor_bright_f = video::SColorf(1.0f, 1.0f, 1.0f, 1.0f);
video::SColorf m_skycolor_bright_f = video::SColorf(1.0f, 1.0f, 1.0f, 1.0f);
@@ -203,5 +206,8 @@ private:
void draw_stars(video::IVideoDriver *driver, float wicked_time_of_day);
void place_sky_body(std::array<video::S3DVertex, 4> &vertices,
float horizon_position, float day_position);
- void setSkyDefaults();
};
+
+// calculates value for sky body positions for the given observed time of day
+// this is used to draw both Sun/Moon and shadows
+float getWickedTimeOfDay(float time_of_day);
diff --git a/src/client/sound_openal.cpp b/src/client/sound_openal.cpp
index f4e61f93e..0eda8842b 100644
--- a/src/client/sound_openal.cpp
+++ b/src/client/sound_openal.cpp
@@ -362,6 +362,14 @@ public:
for (auto &buffer : m_buffers) {
for (SoundBuffer *sb : buffer.second) {
+ alDeleteBuffers(1, &sb->buffer_id);
+
+ ALenum error = alGetError();
+ if (error != AL_NO_ERROR) {
+ warningstream << "Audio: Failed to free stream for "
+ << buffer.first << ": " << alErrorString(error) << std::endl;
+ }
+
delete sb;
}
buffer.second.clear();
@@ -671,8 +679,8 @@ public:
alSourcei(sound->source_id, AL_SOURCE_RELATIVE, false);
alSource3f(sound->source_id, AL_POSITION, pos.X, pos.Y, pos.Z);
- alSource3f(sound->source_id, AL_VELOCITY, 0, 0, 0);
- alSourcef(sound->source_id, AL_REFERENCE_DISTANCE, 30.0);
+ alSource3f(sound->source_id, AL_VELOCITY, 0.0f, 0.0f, 0.0f);
+ alSourcef(sound->source_id, AL_REFERENCE_DISTANCE, 10.0f);
}
bool updateSoundGain(int id, float gain)
diff --git a/src/client/tile.cpp b/src/client/tile.cpp
index f2639757e..da03ff5c8 100644
--- a/src/client/tile.cpp
+++ b/src/client/tile.cpp
@@ -33,15 +33,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "imagefilters.h"
#include "guiscalingfilter.h"
#include "renderingengine.h"
-
-
-#if ENABLE_GLES
-#ifdef _IRR_COMPILE_WITH_OGLES1_
-#include <GLES/gl.h>
-#else
-#include <GLES2/gl2.h>
-#endif
-#endif
+#include "util/base64.h"
/*
A cache from texture name to texture path
@@ -90,12 +82,8 @@ static bool replace_ext(std::string &path, const char *ext)
std::string getImagePath(std::string path)
{
// A NULL-ended list of possible image extensions
- const char *extensions[] = {
- "png", "jpg", "bmp", "tga",
- "pcx", "ppm", "psd", "wal", "rgb",
- NULL
- };
- // If there is no extension, add one
+ const char *extensions[] = { "png", "jpg", "bmp", "tga", NULL };
+ // If there is no extension, assume PNG
if (removeStringEnd(path, extensions).empty())
path = path + ".png";
// Check paths until something is found to exist
@@ -427,6 +415,7 @@ private:
std::unordered_map<std::string, Palette> m_palettes;
// Cached settings needed for making textures from meshes
+ bool m_setting_mipmap;
bool m_setting_trilinear_filter;
bool m_setting_bilinear_filter;
};
@@ -447,6 +436,7 @@ TextureSource::TextureSource()
// Cache some settings
// Note: Since this is only done once, the game must be restarted
// for these settings to take effect
+ m_setting_mipmap = g_settings->getBool("mip_map");
m_setting_trilinear_filter = g_settings->getBool("trilinear_filter");
m_setting_bilinear_filter = g_settings->getBool("bilinear_filter");
}
@@ -667,7 +657,7 @@ video::ITexture* TextureSource::getTexture(const std::string &name, u32 *id)
video::ITexture* TextureSource::getTextureForMesh(const std::string &name, u32 *id)
{
static thread_local bool filter_needed =
- g_settings->getBool("texture_clean_transparent") ||
+ g_settings->getBool("texture_clean_transparent") || m_setting_mipmap ||
((m_setting_trilinear_filter || m_setting_bilinear_filter) &&
g_settings->getS32("texture_min_size") > 1);
// Avoid duplicating texture if it won't actually change
@@ -773,6 +763,9 @@ void TextureSource::rebuildImagesAndTextures()
// Recreate textures
for (TextureInfo &ti : m_textureinfo_cache) {
+ if (ti.name.empty())
+ continue; // Skip dummy entry
+
video::IImage *img = generateImage(ti.name);
#if ENABLE_GLES
img = Align2Npot2(img, driver);
@@ -837,17 +830,16 @@ static video::IImage *createInventoryCubeImage(
image = scaled;
}
sanity_check(image->getPitch() == 4 * size);
- return reinterpret_cast<u32 *>(image->lock());
+ return reinterpret_cast<u32 *>(image->getData());
};
auto free_image = [] (video::IImage *image) -> void {
- image->unlock();
image->drop();
};
video::IImage *result = driver->createImage(video::ECF_A8R8G8B8, {cube_size, cube_size});
sanity_check(result->getPitch() == 4 * cube_size);
result->fill(video::SColor(0x00000000u));
- u32 *target = reinterpret_cast<u32 *>(result->lock());
+ u32 *target = reinterpret_cast<u32 *>(result->getData());
// Draws single cube face
// `shade_factor` is face brightness, in range [0.0, 1.0]
@@ -906,7 +898,6 @@ static video::IImage *createInventoryCubeImage(
{0, 5}, {1, 5},
});
- result->unlock();
return result;
}
@@ -1013,42 +1004,19 @@ video::IImage* TextureSource::generateImage(const std::string &name)
#if ENABLE_GLES
-
-static inline u16 get_GL_major_version()
-{
- const GLubyte *gl_version = glGetString(GL_VERSION);
- return (u16) (gl_version[0] - '0');
-}
-
-/**
- * Check if hardware requires npot2 aligned textures
- * @return true if alignment NOT(!) requires, false otherwise
- */
-
-bool hasNPotSupport()
-{
- // Only GLES2 is trusted to correctly report npot support
- // Note: we cache the boolean result, the GL context will never change.
- static const bool supported = get_GL_major_version() > 1 &&
- glGetString(GL_EXTENSIONS) &&
- strstr((char *)glGetString(GL_EXTENSIONS), "GL_OES_texture_npot");
- return supported;
-}
-
/**
* Check and align image to npot2 if required by hardware
* @param image image to check for npot2 alignment
* @param driver driver to use for image operations
* @return image or copy of image aligned to npot2
*/
-
-video::IImage * Align2Npot2(video::IImage * image,
- video::IVideoDriver* driver)
+video::IImage *Align2Npot2(video::IImage *image,
+ video::IVideoDriver *driver)
{
if (image == NULL)
return image;
- if (hasNPotSupport())
+ if (driver->queryFeature(video::EVDF_TEXTURE_NPOT))
return image;
core::dimension2d<u32> dim = image->getDimension();
@@ -1092,6 +1060,45 @@ static std::string unescape_string(const std::string &str, const char esc = '\\'
return out;
}
+void blitBaseImage(video::IImage* &src, video::IImage* &dst)
+{
+ //infostream<<"Blitting "<<part_of_name<<" on base"<<std::endl;
+ // Size of the copied area
+ core::dimension2d<u32> dim = src->getDimension();
+ //core::dimension2d<u32> dim(16,16);
+ // Position to copy the blitted to in the base image
+ core::position2d<s32> pos_to(0,0);
+ // Position to copy the blitted from in the blitted image
+ core::position2d<s32> pos_from(0,0);
+ // Blit
+ /*image->copyToWithAlpha(baseimg, pos_to,
+ core::rect<s32>(pos_from, dim),
+ video::SColor(255,255,255,255),
+ NULL);*/
+
+ core::dimension2d<u32> dim_dst = dst->getDimension();
+ if (dim == dim_dst) {
+ blit_with_alpha(src, dst, pos_from, pos_to, dim);
+ } else if (dim.Width * dim.Height < dim_dst.Width * dim_dst.Height) {
+ // Upscale overlying image
+ video::IImage *scaled_image = RenderingEngine::get_video_driver()->
+ createImage(video::ECF_A8R8G8B8, dim_dst);
+ src->copyToScaling(scaled_image);
+
+ blit_with_alpha(scaled_image, dst, pos_from, pos_to, dim_dst);
+ scaled_image->drop();
+ } else {
+ // Upscale base image
+ video::IImage *scaled_base = RenderingEngine::get_video_driver()->
+ createImage(video::ECF_A8R8G8B8, dim);
+ dst->copyToScaling(scaled_base);
+ dst->drop();
+ dst = scaled_base;
+
+ blit_with_alpha(src, dst, pos_from, pos_to, dim);
+ }
+}
+
bool TextureSource::generateImagePart(std::string part_of_name,
video::IImage *& baseimg)
{
@@ -1155,41 +1162,7 @@ bool TextureSource::generateImagePart(std::string part_of_name,
// Else blit on base.
else
{
- //infostream<<"Blitting "<<part_of_name<<" on base"<<std::endl;
- // Size of the copied area
- core::dimension2d<u32> dim = image->getDimension();
- //core::dimension2d<u32> dim(16,16);
- // Position to copy the blitted to in the base image
- core::position2d<s32> pos_to(0,0);
- // Position to copy the blitted from in the blitted image
- core::position2d<s32> pos_from(0,0);
- // Blit
- /*image->copyToWithAlpha(baseimg, pos_to,
- core::rect<s32>(pos_from, dim),
- video::SColor(255,255,255,255),
- NULL);*/
-
- core::dimension2d<u32> dim_dst = baseimg->getDimension();
- if (dim == dim_dst) {
- blit_with_alpha(image, baseimg, pos_from, pos_to, dim);
- } else if (dim.Width * dim.Height < dim_dst.Width * dim_dst.Height) {
- // Upscale overlying image
- video::IImage *scaled_image = RenderingEngine::get_video_driver()->
- createImage(video::ECF_A8R8G8B8, dim_dst);
- image->copyToScaling(scaled_image);
-
- blit_with_alpha(scaled_image, baseimg, pos_from, pos_to, dim_dst);
- scaled_image->drop();
- } else {
- // Upscale base image
- video::IImage *scaled_base = RenderingEngine::get_video_driver()->
- createImage(video::ECF_A8R8G8B8, dim);
- baseimg->copyToScaling(scaled_base);
- baseimg->drop();
- baseimg = scaled_base;
-
- blit_with_alpha(image, baseimg, pos_from, pos_to, dim);
- }
+ blitBaseImage(image, baseimg);
}
//cleanup
image->drop();
@@ -1638,8 +1611,8 @@ bool TextureSource::generateImagePart(std::string part_of_name,
return false;
}
- // Apply the "clean transparent" filter, if configured.
- if (g_settings->getBool("texture_clean_transparent"))
+ // Apply the "clean transparent" filter, if needed
+ if (m_setting_mipmap || g_settings->getBool("texture_clean_transparent"))
imageCleanTransparent(baseimg, 127);
/* Upscale textures to user's requested minimum size. This is a trick to make
@@ -1817,6 +1790,43 @@ bool TextureSource::generateImagePart(std::string part_of_name,
baseimg->drop();
baseimg = img;
}
+ /*
+ [png:base64
+ Decodes a PNG image in base64 form.
+ Use minetest.encode_png and minetest.encode_base64
+ to produce a valid string.
+ */
+ else if (str_starts_with(part_of_name, "[png:")) {
+ Strfnd sf(part_of_name);
+ sf.next(":");
+ std::string png;
+ {
+ std::string blob = sf.next("");
+ if (!base64_is_valid(blob)) {
+ errorstream << "generateImagePart(): "
+ << "malformed base64 in '[png'"
+ << std::endl;
+ return false;
+ }
+ png = base64_decode(blob);
+ }
+
+ auto *device = RenderingEngine::get_raw_device();
+ auto *fs = device->getFileSystem();
+ auto *vd = device->getVideoDriver();
+ auto *memfile = fs->createMemoryReadFile(png.data(), png.size(), "__temp_png");
+ video::IImage* pngimg = vd->createImageFromFile(memfile);
+ memfile->drop();
+
+ if (baseimg) {
+ blitBaseImage(pngimg, baseimg);
+ } else {
+ core::dimension2d<u32> dim = pngimg->getDimension();
+ baseimg = driver->createImage(video::ECF_A8R8G8B8, dim);
+ pngimg->copyTo(baseimg);
+ }
+ pngimg->drop();
+ }
else
{
errorstream << "generateImagePart(): Invalid "
@@ -2219,6 +2229,48 @@ video::ITexture* TextureSource::getNormalTexture(const std::string &name)
return NULL;
}
+namespace {
+ // For more colourspace transformations, see for example
+ // https://github.com/tobspr/GLSL-Color-Spaces/blob/master/ColorSpaces.inc.glsl
+
+ inline float linear_to_srgb_component(float v)
+ {
+ if (v > 0.0031308f)
+ return 1.055f * powf(v, 1.0f / 2.4f) - 0.055f;
+ return 12.92f * v;
+ }
+ inline float srgb_to_linear_component(float v)
+ {
+ if (v > 0.04045f)
+ return powf((v + 0.055f) / 1.055f, 2.4f);
+ return v / 12.92f;
+ }
+
+ v3f srgb_to_linear(const video::SColor &col_srgb)
+ {
+ v3f col(col_srgb.getRed(), col_srgb.getGreen(), col_srgb.getBlue());
+ col /= 255.0f;
+ col.X = srgb_to_linear_component(col.X);
+ col.Y = srgb_to_linear_component(col.Y);
+ col.Z = srgb_to_linear_component(col.Z);
+ return col;
+ }
+
+ video::SColor linear_to_srgb(const v3f &col_linear)
+ {
+ v3f col;
+ col.X = linear_to_srgb_component(col_linear.X);
+ col.Y = linear_to_srgb_component(col_linear.Y);
+ col.Z = linear_to_srgb_component(col_linear.Z);
+ col *= 255.0f;
+ col.X = core::clamp<float>(col.X, 0.0f, 255.0f);
+ col.Y = core::clamp<float>(col.Y, 0.0f, 255.0f);
+ col.Z = core::clamp<float>(col.Z, 0.0f, 255.0f);
+ return video::SColor(0xff, myround(col.X), myround(col.Y),
+ myround(col.Z));
+ }
+}
+
video::SColor TextureSource::getTextureAverageColor(const std::string &name)
{
video::IVideoDriver *driver = RenderingEngine::get_video_driver();
@@ -2233,9 +2285,7 @@ video::SColor TextureSource::getTextureAverageColor(const std::string &name)
return c;
u32 total = 0;
- u32 tR = 0;
- u32 tG = 0;
- u32 tB = 0;
+ v3f col_acc(0, 0, 0);
core::dimension2d<u32> dim = image->getDimension();
u16 step = 1;
if (dim.Width > 16)
@@ -2245,17 +2295,14 @@ video::SColor TextureSource::getTextureAverageColor(const std::string &name)
c = image->getPixel(x,y);
if (c.getAlpha() > 0) {
total++;
- tR += c.getRed();
- tG += c.getGreen();
- tB += c.getBlue();
+ col_acc += srgb_to_linear(c);
}
}
}
image->drop();
if (total > 0) {
- c.setRed(tR / total);
- c.setGreen(tG / total);
- c.setBlue(tB / total);
+ col_acc /= total;
+ c = linear_to_srgb(col_acc);
}
c.setAlpha(255);
return c;
diff --git a/src/client/tile.h b/src/client/tile.h
index 49c46f749..fcdc46460 100644
--- a/src/client/tile.h
+++ b/src/client/tile.h
@@ -134,8 +134,7 @@ public:
IWritableTextureSource *createTextureSource();
#if ENABLE_GLES
-bool hasNPotSupport();
-video::IImage * Align2Npot2(video::IImage * image, irr::video::IVideoDriver* driver);
+video::IImage *Align2Npot2(video::IImage *image, video::IVideoDriver *driver);
#endif
enum MaterialType{
diff --git a/src/client/wieldmesh.cpp b/src/client/wieldmesh.cpp
index ad583210a..0a4cb3b86 100644
--- a/src/client/wieldmesh.cpp
+++ b/src/client/wieldmesh.cpp
@@ -33,6 +33,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "util/numeric.h"
#include <map>
#include <IMeshManipulator.h>
+#include "client/renderingengine.h"
#define WIELD_SCALE_FACTOR 30.0
#define WIELD_SCALE_FACTOR_EXTRUDED 40.0
@@ -220,11 +221,18 @@ WieldMeshSceneNode::WieldMeshSceneNode(scene::ISceneManager *mgr, s32 id, bool l
m_meshnode->setReadOnlyMaterials(false);
m_meshnode->setVisible(false);
dummymesh->drop(); // m_meshnode grabbed it
+
+ m_shadow = RenderingEngine::get_shadow_renderer();
}
WieldMeshSceneNode::~WieldMeshSceneNode()
{
sanity_check(g_extrusion_mesh_cache);
+
+ // Remove node from shadow casters. m_shadow might be an invalid pointer!
+ if (auto shadow = RenderingEngine::get_shadow_renderer())
+ shadow->removeNodeFromShadowList(m_meshnode);
+
if (g_extrusion_mesh_cache->drop())
g_extrusion_mesh_cache = nullptr;
}
@@ -294,32 +302,36 @@ void WieldMeshSceneNode::setExtruded(const std::string &imagename,
}
material.setFlag(video::EMF_ANISOTROPIC_FILTER, m_anisotropic_filter);
// mipmaps cause "thin black line" artifacts
-#if (IRRLICHT_VERSION_MAJOR >= 1 && IRRLICHT_VERSION_MINOR >= 8) || IRRLICHT_VERSION_MAJOR >= 2
material.setFlag(video::EMF_USE_MIP_MAPS, false);
-#endif
if (m_enable_shaders) {
material.setTexture(2, tsrc->getShaderFlagsTexture(false));
}
}
}
-scene::SMesh *createSpecialNodeMesh(Client *client, content_t id, std::vector<ItemPartColor> *colors, const ContentFeatures &f)
+static scene::SMesh *createSpecialNodeMesh(Client *client, MapNode n,
+ std::vector<ItemPartColor> *colors, const ContentFeatures &f)
{
MeshMakeData mesh_make_data(client, false);
MeshCollector collector;
mesh_make_data.setSmoothLighting(false);
- MapblockMeshGenerator gen(&mesh_make_data, &collector);
- u8 param2 = 0;
- if (f.param_type_2 == CPT2_WALLMOUNTED ||
+ MapblockMeshGenerator gen(&mesh_make_data, &collector,
+ client->getSceneManager()->getMeshManipulator());
+
+ if (n.getParam2()) {
+ // keep it
+ } else if (f.param_type_2 == CPT2_WALLMOUNTED ||
f.param_type_2 == CPT2_COLORED_WALLMOUNTED) {
- if (f.drawtype == NDT_TORCHLIKE)
- param2 = 1;
- else if (f.drawtype == NDT_SIGNLIKE ||
+ if (f.drawtype == NDT_TORCHLIKE ||
+ f.drawtype == NDT_SIGNLIKE ||
f.drawtype == NDT_NODEBOX ||
- f.drawtype == NDT_MESH)
- param2 = 4;
+ f.drawtype == NDT_MESH) {
+ n.setParam2(4);
+ }
+ } else if (f.drawtype == NDT_SIGNLIKE || f.drawtype == NDT_TORCHLIKE) {
+ n.setParam2(1);
}
- gen.renderSingle(id, param2);
+ gen.renderSingle(n.getContent(), n.getParam2());
colors->clear();
scene::SMesh *mesh = new scene::SMesh();
@@ -392,7 +404,6 @@ void WieldMeshSceneNode::setItem(const ItemStack &item, Client *client, bool che
case NDT_TORCHLIKE:
case NDT_RAILLIKE:
case NDT_PLANTLIKE:
- case NDT_PLANTLIKE_ROOTED:
case NDT_FLOWINGLIQUID: {
v3f wscale = def.wield_scale;
if (f.drawtype == NDT_FLOWINGLIQUID)
@@ -408,14 +419,26 @@ void WieldMeshSceneNode::setItem(const ItemStack &item, Client *client, bool che
m_colors.emplace_back(l1.has_color, l1.color);
break;
}
+ case NDT_PLANTLIKE_ROOTED: {
+ setExtruded(tsrc->getTextureName(f.special_tiles[0].layers[0].texture_id),
+ "", def.wield_scale, tsrc,
+ f.special_tiles[0].layers[0].animation_frame_count);
+ // Add color
+ const TileLayer &l0 = f.special_tiles[0].layers[0];
+ m_colors.emplace_back(l0.has_color, l0.color);
+ break;
+ }
case NDT_NORMAL:
case NDT_ALLFACES:
case NDT_LIQUID:
setCube(f, def.wield_scale);
break;
- default:
+ default: {
// Render non-trivial drawtypes like the actual node
- mesh = createSpecialNodeMesh(client, id, &m_colors, f);
+ MapNode n(id);
+ n.setParam2(def.place_param2);
+
+ mesh = createSpecialNodeMesh(client, n, &m_colors, f);
changeToMesh(mesh);
mesh->drop();
m_meshnode->setScale(
@@ -423,6 +446,7 @@ void WieldMeshSceneNode::setItem(const ItemStack &item, Client *client, bool che
/ (BS * f.visual_scale));
break;
}
+ }
u32 material_count = m_meshnode->getMaterialCount();
for (u32 i = 0; i < material_count; ++i) {
@@ -434,9 +458,14 @@ void WieldMeshSceneNode::setItem(const ItemStack &item, Client *client, bool che
material.setFlag(video::EMF_TRILINEAR_FILTER, m_trilinear_filter);
}
return;
- } else if (!def.inventory_image.empty()) {
- setExtruded(def.inventory_image, def.inventory_overlay, def.wield_scale,
- tsrc, 1);
+ } else {
+ if (!def.inventory_image.empty()) {
+ setExtruded(def.inventory_image, def.inventory_overlay, def.wield_scale,
+ tsrc, 1);
+ } else {
+ setExtruded("no_texture.png", "", def.wield_scale, tsrc, 1);
+ }
+
m_colors.emplace_back();
// overlay is white, if present
m_colors.emplace_back(true, video::SColor(0xFFFFFFFF));
@@ -511,6 +540,10 @@ void WieldMeshSceneNode::changeToMesh(scene::IMesh *mesh)
// need to normalize normals when lighting is enabled (because of setScale())
m_meshnode->setMaterialFlag(video::EMF_NORMALIZE_NORMALS, m_lighting);
m_meshnode->setVisible(true);
+
+ // Add mesh to shadow caster
+ if (m_shadow)
+ m_shadow->addNodeToShadowList(m_meshnode);
}
void getItemMesh(Client *client, const ItemStack &item, ItemMesh *result)
@@ -523,7 +556,7 @@ void getItemMesh(Client *client, const ItemStack &item, ItemMesh *result)
content_t id = ndef->getId(def.name);
FATAL_ERROR_IF(!g_extrusion_mesh_cache, "Extrusion mesh cache is not yet initialized");
-
+
scene::SMesh *mesh = nullptr;
// Shading is on by default
@@ -585,12 +618,16 @@ void getItemMesh(Client *client, const ItemStack &item, ItemMesh *result)
result->buffer_colors.emplace_back(l0.has_color, l0.color);
break;
}
- default:
+ default: {
// Render non-trivial drawtypes like the actual node
- mesh = createSpecialNodeMesh(client, id, &result->buffer_colors, f);
+ MapNode n(id);
+ n.setParam2(def.place_param2);
+
+ mesh = createSpecialNodeMesh(client, n, &result->buffer_colors, f);
scaleMesh(mesh, v3f(0.12, 0.12, 0.12));
break;
}
+ }
u32 mc = mesh->getMeshBufferCount();
for (u32 i = 0; i < mc; ++i) {
diff --git a/src/client/wieldmesh.h b/src/client/wieldmesh.h
index 933097230..d1eeb64f5 100644
--- a/src/client/wieldmesh.h
+++ b/src/client/wieldmesh.h
@@ -27,6 +27,7 @@ struct ItemStack;
class Client;
class ITextureSource;
struct ContentFeatures;
+class ShadowRenderer;
/*!
* Holds color information of an item mesh's buffer.
@@ -124,6 +125,8 @@ private:
// so this variable is just required so we can implement
// getBoundingBox() and is set to an empty box.
aabb3f m_bounding_box;
+
+ ShadowRenderer *m_shadow;
};
void getItemMesh(Client *client, const ItemStack &item, ItemMesh *result);
diff --git a/src/clientiface.cpp b/src/clientiface.cpp
index f35dcd0eb..a1c3e1187 100644
--- a/src/clientiface.cpp
+++ b/src/clientiface.cpp
@@ -714,31 +714,6 @@ void ClientInterface::sendToAll(NetworkPacket *pkt)
}
}
-void ClientInterface::sendToAllCompat(NetworkPacket *pkt, NetworkPacket *legacypkt,
- u16 min_proto_ver)
-{
- RecursiveMutexAutoLock clientslock(m_clients_mutex);
- for (auto &client_it : m_clients) {
- RemoteClient *client = client_it.second;
- NetworkPacket *pkt_to_send = nullptr;
-
- if (client->net_proto_version >= min_proto_ver) {
- pkt_to_send = pkt;
- } else if (client->net_proto_version != 0) {
- pkt_to_send = legacypkt;
- } else {
- warningstream << "Client with unhandled version to handle: '"
- << client->net_proto_version << "'";
- continue;
- }
-
- m_con->Send(client->peer_id,
- clientCommandFactoryTable[pkt_to_send->getCommand()].channel,
- pkt_to_send,
- clientCommandFactoryTable[pkt_to_send->getCommand()].reliable);
- }
-}
-
RemoteClient* ClientInterface::getClientNoEx(session_t peer_id, ClientState state_min)
{
RecursiveMutexAutoLock clientslock(m_clients_mutex);
diff --git a/src/clientiface.h b/src/clientiface.h
index cc5292b71..b1591ddb0 100644
--- a/src/clientiface.h
+++ b/src/clientiface.h
@@ -31,6 +31,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include <list>
#include <vector>
#include <set>
+#include <memory>
#include <mutex>
class MapBlock;
@@ -464,7 +465,6 @@ public:
/* send to all clients */
void sendToAll(NetworkPacket *pkt);
- void sendToAllCompat(NetworkPacket *pkt, NetworkPacket *legacypkt, u16 min_proto_ver);
/* delete a client */
void DeleteClient(session_t peer_id);
diff --git a/src/cmake_config.h.in b/src/cmake_config.h.in
index cfcee4b58..cf436d6dc 100644
--- a/src/cmake_config.h.in
+++ b/src/cmake_config.h.in
@@ -18,7 +18,6 @@
#cmakedefine01 USE_GETTEXT
#cmakedefine01 USE_CURL
#cmakedefine01 USE_SOUND
-#cmakedefine01 USE_FREETYPE
#cmakedefine01 USE_CURSES
#cmakedefine01 USE_LEVELDB
#cmakedefine01 USE_LUAJIT
diff --git a/src/constants.h b/src/constants.h
index 3cc3af094..b9d4f8d70 100644
--- a/src/constants.h
+++ b/src/constants.h
@@ -64,7 +64,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
// I really don't want to make every algorithm to check if it's going near
// the limit or not, so this is lower.
// This is the maximum value the setting map_generation_limit can be
-#define MAX_MAP_GENERATION_LIMIT (31000)
+#define MAX_MAP_GENERATION_LIMIT (31007)
// Size of node in floating-point units
// The original idea behind this is to disallow plain casts between
@@ -111,4 +111,3 @@ with this program; if not, write to the Free Software Foundation, Inc.,
*/
#define TTF_DEFAULT_FONT_SIZE (16)
-#define DEFAULT_FONT_SIZE (10)
diff --git a/src/content/mods.cpp b/src/content/mods.cpp
index 95ab0290a..455506967 100644
--- a/src/content/mods.cpp
+++ b/src/content/mods.cpp
@@ -22,12 +22,37 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include <json/json.h>
#include <algorithm>
#include "content/mods.h"
+#include "database/database.h"
#include "filesys.h"
#include "log.h"
#include "content/subgames.h"
#include "settings.h"
#include "porting.h"
#include "convert_json.h"
+#include "script/common/c_internal.h"
+
+void ModSpec::checkAndLog() const
+{
+ if (!string_allowed(name, MODNAME_ALLOWED_CHARS)) {
+ throw ModError("Error loading mod \"" + name +
+ "\": Mod name does not follow naming conventions: "
+ "Only characters [a-z0-9_] are allowed.");
+ }
+
+ // Log deprecation messages
+ auto handling_mode = get_deprecated_handling_mode();
+ if (!deprecation_msgs.empty() && handling_mode != DeprecatedHandlingMode::Ignore) {
+ std::ostringstream os;
+ os << "Mod " << name << " at " << path << ":" << std::endl;
+ for (auto msg : deprecation_msgs)
+ os << "\t" << msg << std::endl;
+
+ if (handling_mode == DeprecatedHandlingMode::Error)
+ throw ModError(os.str());
+ else
+ warningstream << os.str();
+ }
+}
bool parseDependsString(std::string &dep, std::unordered_set<char> &symbols)
{
@@ -47,17 +72,6 @@ bool parseDependsString(std::string &dep, std::unordered_set<char> &symbols)
void parseModContents(ModSpec &spec)
{
// NOTE: this function works in mutual recursion with getModsInPath
- Settings info;
- info.readConfigFile((spec.path + DIR_DELIM + "mod.conf").c_str());
-
- if (info.exists("name"))
- spec.name = info.get("name");
-
- if (info.exists("author"))
- spec.author = info.get("author");
-
- if (info.exists("release"))
- spec.release = info.getS32("release");
spec.depends.clear();
spec.optdepends.clear();
@@ -78,6 +92,20 @@ void parseModContents(ModSpec &spec)
spec.modpack_content = getModsInPath(spec.path, true);
} else {
+ Settings info;
+ info.readConfigFile((spec.path + DIR_DELIM + "mod.conf").c_str());
+
+ if (info.exists("name"))
+ spec.name = info.get("name");
+ else
+ spec.deprecation_msgs.push_back("Mods not having a mod.conf file with the name is deprecated.");
+
+ if (info.exists("author"))
+ spec.author = info.get("author");
+
+ if (info.exists("release"))
+ spec.release = info.getS32("release");
+
// Attempt to load dependencies from mod.conf
bool mod_conf_has_depends = false;
if (info.exists("depends")) {
@@ -109,6 +137,10 @@ void parseModContents(ModSpec &spec)
std::vector<std::string> dependencies;
std::ifstream is((spec.path + DIR_DELIM + "depends.txt").c_str());
+
+ if (is.good())
+ spec.deprecation_msgs.push_back("depends.txt is deprecated, please use mod.conf instead.");
+
while (is.good()) {
std::string dep;
std::getline(is, dep);
@@ -127,14 +159,10 @@ void parseModContents(ModSpec &spec)
}
}
- if (info.exists("description")) {
+ if (info.exists("description"))
spec.desc = info.get("description");
- } else {
- std::ifstream is((spec.path + DIR_DELIM + "description.txt")
- .c_str());
- spec.desc = std::string((std::istreambuf_iterator<char>(is)),
- std::istreambuf_iterator<char>());
- }
+ else if (fs::ReadFile(spec.path + DIR_DELIM + "description.txt", spec.desc))
+ spec.deprecation_msgs.push_back("description.txt is deprecated, please use mod.conf instead.");
}
}
@@ -395,83 +423,29 @@ ClientModConfiguration::ClientModConfiguration(const std::string &path) :
}
#endif
-ModMetadata::ModMetadata(const std::string &mod_name) : m_mod_name(mod_name)
+ModMetadata::ModMetadata(const std::string &mod_name, ModMetadataDatabase *database):
+ m_mod_name(mod_name), m_database(database)
{
+ m_database->getModEntries(m_mod_name, &m_stringvars);
}
void ModMetadata::clear()
{
+ for (const auto &pair : m_stringvars) {
+ m_database->removeModEntry(m_mod_name, pair.first);
+ }
Metadata::clear();
- m_modified = true;
}
-bool ModMetadata::save(const std::string &root_path)
+bool ModMetadata::setString(const std::string &name, const std::string &var)
{
- Json::Value json;
- for (StringMap::const_iterator it = m_stringvars.begin();
- it != m_stringvars.end(); ++it) {
- json[it->first] = it->second;
- }
-
- if (!fs::PathExists(root_path)) {
- if (!fs::CreateAllDirs(root_path)) {
- errorstream << "ModMetadata[" << m_mod_name
- << "]: Unable to save. '" << root_path
- << "' tree cannot be created." << std::endl;
- return false;
+ if (Metadata::setString(name, var)) {
+ if (var.empty()) {
+ m_database->removeModEntry(m_mod_name, name);
+ } else {
+ m_database->setModEntry(m_mod_name, name, var);
}
- } else if (!fs::IsDir(root_path)) {
- errorstream << "ModMetadata[" << m_mod_name << "]: Unable to save. '"
- << root_path << "' is not a directory." << std::endl;
- return false;
+ return true;
}
-
- bool w_ok = fs::safeWriteToFile(
- root_path + DIR_DELIM + m_mod_name, fastWriteJson(json));
-
- if (w_ok) {
- m_modified = false;
- } else {
- errorstream << "ModMetadata[" << m_mod_name << "]: failed write file."
- << std::endl;
- }
- return w_ok;
-}
-
-bool ModMetadata::load(const std::string &root_path)
-{
- m_stringvars.clear();
-
- std::ifstream is((root_path + DIR_DELIM + m_mod_name).c_str(),
- std::ios_base::binary);
- if (!is.good()) {
- return false;
- }
-
- Json::Value root;
- Json::CharReaderBuilder builder;
- builder.settings_["collectComments"] = false;
- std::string errs;
-
- if (!Json::parseFromStream(builder, is, &root, &errs)) {
- errorstream << "ModMetadata[" << m_mod_name
- << "]: failed read data "
- "(Json decoding failure). Message: "
- << errs << std::endl;
- return false;
- }
-
- const Json::Value::Members attr_list = root.getMemberNames();
- for (const auto &it : attr_list) {
- Json::Value attr_value = root[it];
- m_stringvars[it] = attr_value.asString();
- }
-
- return true;
-}
-
-bool ModMetadata::setString(const std::string &name, const std::string &var)
-{
- m_modified = Metadata::setString(name, var);
- return m_modified;
+ return false;
}
diff --git a/src/content/mods.h b/src/content/mods.h
index b3500fbc8..dd3b6e0e6 100644
--- a/src/content/mods.h
+++ b/src/content/mods.h
@@ -31,6 +31,8 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "config.h"
#include "metadata.h"
+class ModMetadataDatabase;
+
#define MODNAME_ALLOWED_CHARS "abcdefghijklmnopqrstuvwxyz0123456789_"
struct ModSpec
@@ -49,6 +51,9 @@ struct ModSpec
bool part_of_modpack = false;
bool is_modpack = false;
+ // For logging purposes
+ std::vector<const char *> deprecation_msgs;
+
// if modpack:
std::map<std::string, ModSpec> modpack_content;
ModSpec(const std::string &name = "", const std::string &path = "") :
@@ -59,6 +64,8 @@ struct ModSpec
name(name), path(path), part_of_modpack(part_of_modpack)
{
}
+
+ void checkAndLog() const;
};
// Retrieves depends, optdepends, is_modpack and modpack_content
@@ -144,20 +151,16 @@ class ModMetadata : public Metadata
{
public:
ModMetadata() = delete;
- ModMetadata(const std::string &mod_name);
+ ModMetadata(const std::string &mod_name, ModMetadataDatabase *database);
~ModMetadata() = default;
virtual void clear();
- bool save(const std::string &root_path);
- bool load(const std::string &root_path);
-
- bool isModified() const { return m_modified; }
const std::string &getModName() const { return m_mod_name; }
virtual bool setString(const std::string &name, const std::string &var);
private:
std::string m_mod_name;
- bool m_modified = false;
+ ModMetadataDatabase *m_database;
};
diff --git a/src/content/subgames.cpp b/src/content/subgames.cpp
index e9dc609b0..62e82e0e4 100644
--- a/src/content/subgames.cpp
+++ b/src/content/subgames.cpp
@@ -24,7 +24,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "log.h"
#include "util/strfnd.h"
#include "defaultsettings.h" // for set_default_settings
-#include "mapgen/mapgen.h" // for MapgenParams
+#include "map_settings_manager.h"
#include "util/string.h"
#ifndef SERVER
@@ -113,6 +113,10 @@ SubgameSpec findSubgame(const std::string &id)
if (user != share || user_game)
mods_paths.insert(user + DIR_DELIM + "mods");
+ for (const std::string &mod_path : getEnvModPaths()) {
+ mods_paths.insert(mod_path);
+ }
+
// Get meta
std::string conf_path = game_path + DIR_DELIM + "game.conf";
Settings conf;
@@ -354,6 +358,7 @@ void loadGameConfAndInitWorld(const std::string &path, const std::string &name,
conf.set("backend", "sqlite3");
conf.set("player_backend", "sqlite3");
conf.set("auth_backend", "sqlite3");
+ conf.set("mod_storage_backend", "sqlite3");
conf.setBool("creative_mode", g_settings->getBool("creative_mode"));
conf.setBool("enable_damage", g_settings->getBool("enable_damage"));
@@ -365,22 +370,25 @@ void loadGameConfAndInitWorld(const std::string &path, const std::string &name,
// Create map_meta.txt if does not already exist
std::string map_meta_path = final_path + DIR_DELIM + "map_meta.txt";
if (!fs::PathExists(map_meta_path)) {
- verbosestream << "Creating map_meta.txt (" << map_meta_path << ")"
- << std::endl;
- std::ostringstream oss(std::ios_base::binary);
-
- Settings conf;
- MapgenParams params;
+ MapSettingsManager mgr(map_meta_path);
- params.readParams(g_settings);
- params.writeParams(&conf);
- conf.writeLines(oss);
- oss << "[end_of_params]\n";
+ mgr.setMapSetting("seed", g_settings->get("fixed_map_seed"));
- fs::safeWriteToFile(map_meta_path, oss.str());
+ mgr.makeMapgenParams();
+ mgr.saveMapMeta();
}
// The Settings object is no longer needed for created worlds
if (new_game_settings)
delete game_settings;
}
+
+std::vector<std::string> getEnvModPaths()
+{
+ const char *c_mod_path = getenv("MINETEST_MOD_PATH");
+ std::vector<std::string> paths;
+ Strfnd search_paths(c_mod_path ? c_mod_path : "");
+ while (!search_paths.at_end())
+ paths.push_back(search_paths.next(PATH_DELIM));
+ return paths;
+}
diff --git a/src/content/subgames.h b/src/content/subgames.h
index 60392639b..4a50803e8 100644
--- a/src/content/subgames.h
+++ b/src/content/subgames.h
@@ -58,6 +58,8 @@ SubgameSpec findWorldSubgame(const std::string &world_path);
std::set<std::string> getAvailableGameIds();
std::vector<SubgameSpec> getAvailableGames();
+// Get the list of paths to mods in the environment variable $MINETEST_MOD_PATH
+std::vector<std::string> getEnvModPaths();
bool getWorldExists(const std::string &world_path);
//! Try to get the displayed name of a world
diff --git a/src/convert_json.cpp b/src/convert_json.cpp
index c774aa002..686113fa8 100644
--- a/src/convert_json.cpp
+++ b/src/convert_json.cpp
@@ -17,63 +17,23 @@ with this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
-#include <vector>
#include <iostream>
#include <sstream>
+#include <memory>
#include "convert_json.h"
-#include "content/mods.h"
-#include "config.h"
-#include "log.h"
-#include "settings.h"
-#include "httpfetch.h"
-#include "porting.h"
-Json::Value fetchJsonValue(const std::string &url,
- std::vector<std::string> *extra_headers)
+void fastWriteJson(const Json::Value &value, std::ostream &to)
{
- HTTPFetchRequest fetch_request;
- HTTPFetchResult fetch_result;
- fetch_request.url = url;
- fetch_request.caller = HTTPFETCH_SYNC;
-
- if (extra_headers != NULL)
- fetch_request.extra_headers = *extra_headers;
-
- httpfetch_sync(fetch_request, fetch_result);
-
- if (!fetch_result.succeeded) {
- return Json::Value();
- }
- Json::Value root;
- std::istringstream stream(fetch_result.data);
-
- Json::CharReaderBuilder builder;
- builder.settings_["collectComments"] = false;
- std::string errs;
-
- if (!Json::parseFromStream(builder, stream, &root, &errs)) {
- errorstream << "URL: " << url << std::endl;
- errorstream << "Failed to parse json data " << errs << std::endl;
- if (fetch_result.data.size() > 100) {
- errorstream << "Data (" << fetch_result.data.size()
- << " bytes) printed to warningstream." << std::endl;
- warningstream << "data: \"" << fetch_result.data << "\"" << std::endl;
- } else {
- errorstream << "data: \"" << fetch_result.data << "\"" << std::endl;
- }
- return Json::Value();
- }
-
- return root;
+ Json::StreamWriterBuilder builder;
+ builder["indentation"] = "";
+ std::unique_ptr<Json::StreamWriter> writer(builder.newStreamWriter());
+ writer->write(value, &to);
}
std::string fastWriteJson(const Json::Value &value)
{
std::ostringstream oss;
- Json::StreamWriterBuilder builder;
- builder["indentation"] = "";
- std::unique_ptr<Json::StreamWriter> writer(builder.newStreamWriter());
- writer->write(value, &oss);
+ fastWriteJson(value, oss);
return oss.str();
}
diff --git a/src/convert_json.h b/src/convert_json.h
index d8825acdc..d1d487e77 100644
--- a/src/convert_json.h
+++ b/src/convert_json.h
@@ -20,8 +20,8 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#pragma once
#include <json/json.h>
+#include <ostream>
-Json::Value fetchJsonValue(const std::string &url,
- std::vector<std::string> *extra_headers);
+void fastWriteJson(const Json::Value &value, std::ostream &to);
std::string fastWriteJson(const Json::Value &value);
diff --git a/src/database/database-dummy.cpp b/src/database/database-dummy.cpp
index b56f341c5..629b2fb04 100644
--- a/src/database/database-dummy.cpp
+++ b/src/database/database-dummy.cpp
@@ -80,3 +80,41 @@ void Database_Dummy::listPlayers(std::vector<std::string> &res)
res.emplace_back(player);
}
}
+
+bool Database_Dummy::getModEntries(const std::string &modname, StringMap *storage)
+{
+ const auto mod_pair = m_mod_meta_database.find(modname);
+ if (mod_pair != m_mod_meta_database.cend()) {
+ for (const auto &pair : mod_pair->second) {
+ (*storage)[pair.first] = pair.second;
+ }
+ }
+ return true;
+}
+
+bool Database_Dummy::setModEntry(const std::string &modname,
+ const std::string &key, const std::string &value)
+{
+ auto mod_pair = m_mod_meta_database.find(modname);
+ if (mod_pair == m_mod_meta_database.end()) {
+ m_mod_meta_database[modname] = StringMap({{key, value}});
+ } else {
+ mod_pair->second[key] = value;
+ }
+ return true;
+}
+
+bool Database_Dummy::removeModEntry(const std::string &modname, const std::string &key)
+{
+ auto mod_pair = m_mod_meta_database.find(modname);
+ if (mod_pair != m_mod_meta_database.end())
+ return mod_pair->second.erase(key) > 0;
+ return false;
+}
+
+void Database_Dummy::listMods(std::vector<std::string> *res)
+{
+ for (const auto &pair : m_mod_meta_database) {
+ res->push_back(pair.first);
+ }
+}
diff --git a/src/database/database-dummy.h b/src/database/database-dummy.h
index b69919f84..44b9e8d68 100644
--- a/src/database/database-dummy.h
+++ b/src/database/database-dummy.h
@@ -24,7 +24,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "database.h"
#include "irrlichttypes.h"
-class Database_Dummy : public MapDatabase, public PlayerDatabase
+class Database_Dummy : public MapDatabase, public PlayerDatabase, public ModMetadataDatabase
{
public:
bool saveBlock(const v3s16 &pos, const std::string &data);
@@ -37,10 +37,17 @@ public:
bool removePlayer(const std::string &name);
void listPlayers(std::vector<std::string> &res);
+ bool getModEntries(const std::string &modname, StringMap *storage);
+ bool setModEntry(const std::string &modname,
+ const std::string &key, const std::string &value);
+ bool removeModEntry(const std::string &modname, const std::string &key);
+ void listMods(std::vector<std::string> *res);
+
void beginSave() {}
void endSave() {}
private:
std::map<s64, std::string> m_database;
std::set<std::string> m_player_database;
+ std::unordered_map<std::string, StringMap> m_mod_meta_database;
};
diff --git a/src/database/database-files.cpp b/src/database/database-files.cpp
index d9d113b4e..7c0dbac28 100644
--- a/src/database/database-files.cpp
+++ b/src/database/database-files.cpp
@@ -18,7 +18,6 @@ with this program; if not, write to the Free Software Foundation, Inc.,
*/
#include <cassert>
-#include <json/json.h>
#include "convert_json.h"
#include "database-files.h"
#include "remoteplayer.h"
@@ -376,3 +375,127 @@ bool AuthDatabaseFiles::writeAuthFile()
}
return true;
}
+
+ModMetadataDatabaseFiles::ModMetadataDatabaseFiles(const std::string &savedir):
+ m_storage_dir(savedir + DIR_DELIM + "mod_storage")
+{
+}
+
+bool ModMetadataDatabaseFiles::getModEntries(const std::string &modname, StringMap *storage)
+{
+ Json::Value *meta = getOrCreateJson(modname);
+ if (!meta)
+ return false;
+
+ const Json::Value::Members attr_list = meta->getMemberNames();
+ for (const auto &it : attr_list) {
+ Json::Value attr_value = (*meta)[it];
+ (*storage)[it] = attr_value.asString();
+ }
+
+ return true;
+}
+
+bool ModMetadataDatabaseFiles::setModEntry(const std::string &modname,
+ const std::string &key, const std::string &value)
+{
+ Json::Value *meta = getOrCreateJson(modname);
+ if (!meta)
+ return false;
+
+ (*meta)[key] = Json::Value(value);
+ m_modified.insert(modname);
+
+ return true;
+}
+
+bool ModMetadataDatabaseFiles::removeModEntry(const std::string &modname,
+ const std::string &key)
+{
+ Json::Value *meta = getOrCreateJson(modname);
+ if (!meta)
+ return false;
+
+ Json::Value removed;
+ if (meta->removeMember(key, &removed)) {
+ m_modified.insert(modname);
+ return true;
+ }
+ return false;
+}
+
+void ModMetadataDatabaseFiles::beginSave()
+{
+}
+
+void ModMetadataDatabaseFiles::endSave()
+{
+ if (m_modified.empty())
+ return;
+
+ if (!fs::CreateAllDirs(m_storage_dir)) {
+ errorstream << "ModMetadataDatabaseFiles: Unable to save. '"
+ << m_storage_dir << "' cannot be created." << std::endl;
+ return;
+ }
+ if (!fs::IsDir(m_storage_dir)) {
+ errorstream << "ModMetadataDatabaseFiles: Unable to save. '"
+ << m_storage_dir << "' is not a directory." << std::endl;
+ return;
+ }
+
+ for (auto it = m_modified.begin(); it != m_modified.end();) {
+ const std::string &modname = *it;
+
+ const Json::Value &json = m_mod_meta[modname];
+
+ if (!fs::safeWriteToFile(m_storage_dir + DIR_DELIM + modname, fastWriteJson(json))) {
+ errorstream << "ModMetadataDatabaseFiles[" << modname
+ << "]: failed to write file." << std::endl;
+ ++it;
+ continue;
+ }
+
+ it = m_modified.erase(it);
+ }
+}
+
+void ModMetadataDatabaseFiles::listMods(std::vector<std::string> *res)
+{
+ // List in-memory metadata first.
+ for (const auto &pair : m_mod_meta) {
+ res->push_back(pair.first);
+ }
+
+ // List other metadata present in the filesystem.
+ for (const auto &entry : fs::GetDirListing(m_storage_dir)) {
+ if (!entry.dir && m_mod_meta.count(entry.name) == 0)
+ res->push_back(entry.name);
+ }
+}
+
+Json::Value *ModMetadataDatabaseFiles::getOrCreateJson(const std::string &modname)
+{
+ auto found = m_mod_meta.find(modname);
+ if (found != m_mod_meta.end())
+ return &found->second;
+
+ Json::Value meta(Json::objectValue);
+
+ std::string path = m_storage_dir + DIR_DELIM + modname;
+ if (fs::PathExists(path)) {
+ std::ifstream is(path.c_str(), std::ios_base::binary);
+
+ Json::CharReaderBuilder builder;
+ builder.settings_["collectComments"] = false;
+ std::string errs;
+
+ if (!Json::parseFromStream(builder, is, &meta, &errs)) {
+ errorstream << "ModMetadataDatabaseFiles[" << modname
+ << "]: failed to decode data: " << errs << std::endl;
+ return nullptr;
+ }
+ }
+
+ return &(m_mod_meta[modname] = meta);
+}
diff --git a/src/database/database-files.h b/src/database/database-files.h
index e647a2e24..962e4d7bb 100644
--- a/src/database/database-files.h
+++ b/src/database/database-files.h
@@ -25,6 +25,8 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "database.h"
#include <unordered_map>
+#include <unordered_set>
+#include <json/json.h>
class PlayerDatabaseFiles : public PlayerDatabase
{
@@ -69,3 +71,27 @@ private:
bool readAuthFile();
bool writeAuthFile();
};
+
+class ModMetadataDatabaseFiles : public ModMetadataDatabase
+{
+public:
+ ModMetadataDatabaseFiles(const std::string &savedir);
+ virtual ~ModMetadataDatabaseFiles() = default;
+
+ virtual bool getModEntries(const std::string &modname, StringMap *storage);
+ virtual bool setModEntry(const std::string &modname,
+ const std::string &key, const std::string &value);
+ virtual bool removeModEntry(const std::string &modname, const std::string &key);
+ virtual void listMods(std::vector<std::string> *res);
+
+ virtual void beginSave();
+ virtual void endSave();
+
+private:
+ Json::Value *getOrCreateJson(const std::string &modname);
+ bool writeJson(const std::string &modname, const Json::Value &json);
+
+ std::string m_storage_dir;
+ std::unordered_map<std::string, Json::Value> m_mod_meta;
+ std::unordered_set<std::string> m_modified;
+};
diff --git a/src/database/database-leveldb.cpp b/src/database/database-leveldb.cpp
index 73cd63f6d..39f4c8442 100644
--- a/src/database/database-leveldb.cpp
+++ b/src/database/database-leveldb.cpp
@@ -70,11 +70,11 @@ bool Database_LevelDB::saveBlock(const v3s16 &pos, const std::string &data)
void Database_LevelDB::loadBlock(const v3s16 &pos, std::string *block)
{
- std::string datastr;
leveldb::Status status = m_database->Get(leveldb::ReadOptions(),
- i64tos(getBlockAsInteger(pos)), &datastr);
+ i64tos(getBlockAsInteger(pos)), block);
- *block = (status.ok()) ? datastr : "";
+ if (!status.ok())
+ block->clear();
}
bool Database_LevelDB::deleteBlock(const v3s16 &pos)
@@ -131,7 +131,7 @@ void PlayerDatabaseLevelDB::savePlayer(RemotePlayer *player)
std::string (long) serialized_inventory
*/
- std::ostringstream os;
+ std::ostringstream os(std::ios_base::binary);
writeU8(os, 1);
PlayerSAO *sao = player->getPlayerSAO();
@@ -142,7 +142,7 @@ void PlayerDatabaseLevelDB::savePlayer(RemotePlayer *player)
writeF32(os, sao->getRotation().Y);
writeU16(os, sao->getBreath());
- StringMap stringvars = sao->getMeta().getStrings();
+ const auto &stringvars = sao->getMeta().getStrings();
writeU32(os, stringvars.size());
for (const auto &it : stringvars) {
os << serializeString16(it.first);
@@ -170,7 +170,7 @@ bool PlayerDatabaseLevelDB::loadPlayer(RemotePlayer *player, PlayerSAO *sao)
player->getName(), &raw);
if (!s.ok())
return false;
- std::istringstream is(raw);
+ std::istringstream is(raw, std::ios_base::binary);
if (readU8(is) > 1)
return false;
@@ -230,7 +230,7 @@ bool AuthDatabaseLevelDB::getAuth(const std::string &name, AuthEntry &res)
leveldb::Status s = m_database->Get(leveldb::ReadOptions(), name, &raw);
if (!s.ok())
return false;
- std::istringstream is(raw);
+ std::istringstream is(raw, std::ios_base::binary);
/*
u8 version = 1
@@ -262,7 +262,7 @@ bool AuthDatabaseLevelDB::getAuth(const std::string &name, AuthEntry &res)
bool AuthDatabaseLevelDB::saveAuth(const AuthEntry &authEntry)
{
- std::ostringstream os;
+ std::ostringstream os(std::ios_base::binary);
writeU8(os, 1);
os << serializeString16(authEntry.password);
diff --git a/src/database/database-postgresql.cpp b/src/database/database-postgresql.cpp
index e1bb39928..3469f4242 100644
--- a/src/database/database-postgresql.cpp
+++ b/src/database/database-postgresql.cpp
@@ -39,20 +39,24 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "remoteplayer.h"
#include "server/player_sao.h"
-Database_PostgreSQL::Database_PostgreSQL(const std::string &connect_string) :
+Database_PostgreSQL::Database_PostgreSQL(const std::string &connect_string,
+ const char *type) :
m_connect_string(connect_string)
{
if (m_connect_string.empty()) {
- throw SettingNotFoundException(
- "Set pgsql_connection string in world.mt to "
+ // Use given type to reference the exact setting in the error message
+ std::string s = type;
+ std::string msg =
+ "Set pgsql" + s + "_connection string in world.mt to "
"use the postgresql backend\n"
"Notes:\n"
- "pgsql_connection has the following form: \n"
- "\tpgsql_connection = host=127.0.0.1 port=5432 user=mt_user "
- "password=mt_password dbname=minetest_world\n"
+ "pgsql" + s + "_connection has the following form: \n"
+ "\tpgsql" + s + "_connection = host=127.0.0.1 port=5432 "
+ "user=mt_user password=mt_password dbname=minetest" + s + "\n"
"mt_user should have CREATE TABLE, INSERT, SELECT, UPDATE and "
- "DELETE rights on the database.\n"
- "Don't create mt_user as a SUPERUSER!");
+ "DELETE rights on the database. "
+ "Don't create mt_user as a SUPERUSER!";
+ throw SettingNotFoundException(msg);
}
}
@@ -166,7 +170,7 @@ void Database_PostgreSQL::rollback()
}
MapDatabasePostgreSQL::MapDatabasePostgreSQL(const std::string &connect_string):
- Database_PostgreSQL(connect_string),
+ Database_PostgreSQL(connect_string, ""),
MapDatabase()
{
connectToDatabase();
@@ -270,10 +274,10 @@ void MapDatabasePostgreSQL::loadBlock(const v3s16 &pos, std::string *block)
PGresult *results = execPrepared("read_block", ARRLEN(args), args,
argLen, argFmt, false);
- *block = "";
-
if (PQntuples(results))
- *block = std::string(PQgetvalue(results, 0, 0), PQgetlength(results, 0, 0));
+ block->assign(PQgetvalue(results, 0, 0), PQgetlength(results, 0, 0));
+ else
+ block->clear();
PQclear(results);
}
@@ -315,7 +319,7 @@ void MapDatabasePostgreSQL::listAllLoadableBlocks(std::vector<v3s16> &dst)
* Player Database
*/
PlayerDatabasePostgreSQL::PlayerDatabasePostgreSQL(const std::string &connect_string):
- Database_PostgreSQL(connect_string),
+ Database_PostgreSQL(connect_string, "_player"),
PlayerDatabase()
{
connectToDatabase();
@@ -492,6 +496,7 @@ void PlayerDatabasePostgreSQL::savePlayer(RemotePlayer *player)
execPrepared("remove_player_inventory_items", 1, rmvalues);
std::vector<const InventoryList*> inventory_lists = sao->getInventory()->getLists();
+ std::ostringstream oss;
for (u16 i = 0; i < inventory_lists.size(); i++) {
const InventoryList* list = inventory_lists[i];
const std::string &name = list->getName();
@@ -508,9 +513,10 @@ void PlayerDatabasePostgreSQL::savePlayer(RemotePlayer *player)
execPrepared("add_player_inventory", 5, inv_values);
for (u32 j = 0; j < list->getSize(); j++) {
- std::ostringstream os;
- list->getItem(j).serialize(os);
- std::string itemStr = os.str(), slotId = itos(j);
+ oss.str("");
+ oss.clear();
+ list->getItem(j).serialize(oss);
+ std::string itemStr = oss.str(), slotId = itos(j);
const char* invitem_values[] = {
player->getName(),
@@ -637,7 +643,8 @@ void PlayerDatabasePostgreSQL::listPlayers(std::vector<std::string> &res)
}
AuthDatabasePostgreSQL::AuthDatabasePostgreSQL(const std::string &connect_string) :
- Database_PostgreSQL(connect_string), AuthDatabase()
+ Database_PostgreSQL(connect_string, "_auth"),
+ AuthDatabase()
{
connectToDatabase();
}
diff --git a/src/database/database-postgresql.h b/src/database/database-postgresql.h
index f47deda33..81b4a2b10 100644
--- a/src/database/database-postgresql.h
+++ b/src/database/database-postgresql.h
@@ -29,7 +29,7 @@ class Settings;
class Database_PostgreSQL: public Database
{
public:
- Database_PostgreSQL(const std::string &connect_string);
+ Database_PostgreSQL(const std::string &connect_string, const char *type);
~Database_PostgreSQL();
void beginSave();
diff --git a/src/database/database-redis.cpp b/src/database/database-redis.cpp
index 096ea504d..5ffff67b7 100644
--- a/src/database/database-redis.cpp
+++ b/src/database/database-redis.cpp
@@ -127,8 +127,7 @@ void Database_Redis::loadBlock(const v3s16 &pos, std::string *block)
switch (reply->type) {
case REDIS_REPLY_STRING: {
- *block = std::string(reply->str, reply->len);
- // std::string copies the memory so this won't cause any problems
+ block->assign(reply->str, reply->len);
freeReplyObject(reply);
return;
}
@@ -141,8 +140,7 @@ void Database_Redis::loadBlock(const v3s16 &pos, std::string *block)
"Redis command 'HGET %s %s' errored: ") + errstr);
}
case REDIS_REPLY_NIL: {
- *block = "";
- // block not found in database
+ block->clear();
freeReplyObject(reply);
return;
}
diff --git a/src/database/database-sqlite3.cpp b/src/database/database-sqlite3.cpp
index 4560743b9..1e63ae9d8 100644
--- a/src/database/database-sqlite3.cpp
+++ b/src/database/database-sqlite3.cpp
@@ -228,11 +228,7 @@ void MapDatabaseSQLite3::createDatabase()
void MapDatabaseSQLite3::initStatements()
{
PREPARE_STATEMENT(read, "SELECT `data` FROM `blocks` WHERE `pos` = ? LIMIT 1");
-#ifdef __ANDROID__
- PREPARE_STATEMENT(write, "INSERT INTO `blocks` (`pos`, `data`) VALUES (?, ?)");
-#else
PREPARE_STATEMENT(write, "REPLACE INTO `blocks` (`pos`, `data`) VALUES (?, ?)");
-#endif
PREPARE_STATEMENT(delete, "DELETE FROM `blocks` WHERE `pos` = ?");
PREPARE_STATEMENT(list, "SELECT `pos` FROM `blocks`");
@@ -265,19 +261,6 @@ bool MapDatabaseSQLite3::saveBlock(const v3s16 &pos, const std::string &data)
{
verifyDatabase();
-#ifdef __ANDROID__
- /**
- * Note: For some unknown reason SQLite3 fails to REPLACE blocks on Android,
- * deleting them and then inserting works.
- */
- bindPos(m_stmt_read, pos);
-
- if (sqlite3_step(m_stmt_read) == SQLITE_ROW) {
- deleteBlock(pos);
- }
- sqlite3_reset(m_stmt_read);
-#endif
-
bindPos(m_stmt_write, pos);
SQLOK(sqlite3_bind_blob(m_stmt_write, 2, data.data(), data.size(), NULL),
"Internal error: failed to bind query at " __FILE__ ":" TOSTRING(__LINE__));
@@ -302,7 +285,10 @@ void MapDatabaseSQLite3::loadBlock(const v3s16 &pos, std::string *block)
const char *data = (const char *) sqlite3_column_blob(m_stmt_read, 0);
size_t len = sqlite3_column_bytes(m_stmt_read, 0);
- *block = (data) ? std::string(data, len) : "";
+ if (data)
+ block->assign(data, len);
+ else
+ block->clear();
sqlite3_step(m_stmt_read);
// We should never get more than 1 row, so ok to reset
@@ -491,6 +477,7 @@ void PlayerDatabaseSQLite3::savePlayer(RemotePlayer *player)
sqlite3_reset(m_stmt_player_remove_inventory_items);
std::vector<const InventoryList*> inventory_lists = sao->getInventory()->getLists();
+ std::ostringstream oss;
for (u16 i = 0; i < inventory_lists.size(); i++) {
const InventoryList* list = inventory_lists[i];
@@ -503,9 +490,10 @@ void PlayerDatabaseSQLite3::savePlayer(RemotePlayer *player)
sqlite3_reset(m_stmt_player_add_inventory);
for (u32 j = 0; j < list->getSize(); j++) {
- std::ostringstream os;
- list->getItem(j).serialize(os);
- std::string itemStr = os.str();
+ oss.str("");
+ oss.clear();
+ list->getItem(j).serialize(oss);
+ std::string itemStr = oss.str();
str_to_sqlite(m_stmt_player_add_inventory_items, 1, player->getName());
int_to_sqlite(m_stmt_player_add_inventory_items, 2, i);
@@ -774,3 +762,108 @@ void AuthDatabaseSQLite3::writePrivileges(const AuthEntry &authEntry)
sqlite3_reset(m_stmt_write_privs);
}
}
+
+ModMetadataDatabaseSQLite3::ModMetadataDatabaseSQLite3(const std::string &savedir):
+ Database_SQLite3(savedir, "mod_storage"), ModMetadataDatabase()
+{
+}
+
+ModMetadataDatabaseSQLite3::~ModMetadataDatabaseSQLite3()
+{
+ FINALIZE_STATEMENT(m_stmt_remove)
+ FINALIZE_STATEMENT(m_stmt_set)
+ FINALIZE_STATEMENT(m_stmt_get)
+}
+
+void ModMetadataDatabaseSQLite3::createDatabase()
+{
+ assert(m_database); // Pre-condition
+
+ SQLOK(sqlite3_exec(m_database,
+ "CREATE TABLE IF NOT EXISTS `entries` (\n"
+ " `modname` TEXT NOT NULL,\n"
+ " `key` BLOB NOT NULL,\n"
+ " `value` BLOB NOT NULL,\n"
+ " PRIMARY KEY (`modname`, `key`)\n"
+ ");\n",
+ NULL, NULL, NULL),
+ "Failed to create database table");
+}
+
+void ModMetadataDatabaseSQLite3::initStatements()
+{
+ PREPARE_STATEMENT(get, "SELECT `key`, `value` FROM `entries` WHERE `modname` = ?");
+ PREPARE_STATEMENT(set,
+ "REPLACE INTO `entries` (`modname`, `key`, `value`) VALUES (?, ?, ?)");
+ PREPARE_STATEMENT(remove, "DELETE FROM `entries` WHERE `modname` = ? AND `key` = ?");
+}
+
+bool ModMetadataDatabaseSQLite3::getModEntries(const std::string &modname, StringMap *storage)
+{
+ verifyDatabase();
+
+ str_to_sqlite(m_stmt_get, 1, modname);
+ while (sqlite3_step(m_stmt_get) == SQLITE_ROW) {
+ const char *key_data = (const char *) sqlite3_column_blob(m_stmt_get, 0);
+ size_t key_len = sqlite3_column_bytes(m_stmt_get, 0);
+ const char *value_data = (const char *) sqlite3_column_blob(m_stmt_get, 1);
+ size_t value_len = sqlite3_column_bytes(m_stmt_get, 1);
+ (*storage)[std::string(key_data, key_len)] = std::string(value_data, value_len);
+ }
+ sqlite3_vrfy(sqlite3_errcode(m_database), SQLITE_DONE);
+
+ sqlite3_reset(m_stmt_get);
+
+ return true;
+}
+
+bool ModMetadataDatabaseSQLite3::setModEntry(const std::string &modname,
+ const std::string &key, const std::string &value)
+{
+ verifyDatabase();
+
+ str_to_sqlite(m_stmt_set, 1, modname);
+ SQLOK(sqlite3_bind_blob(m_stmt_set, 2, key.data(), key.size(), NULL),
+ "Internal error: failed to bind query at " __FILE__ ":" TOSTRING(__LINE__));
+ SQLOK(sqlite3_bind_blob(m_stmt_set, 3, value.data(), value.size(), NULL),
+ "Internal error: failed to bind query at " __FILE__ ":" TOSTRING(__LINE__));
+ SQLRES(sqlite3_step(m_stmt_set), SQLITE_DONE, "Failed to set mod entry")
+
+ sqlite3_reset(m_stmt_set);
+
+ return true;
+}
+
+bool ModMetadataDatabaseSQLite3::removeModEntry(const std::string &modname,
+ const std::string &key)
+{
+ verifyDatabase();
+
+ str_to_sqlite(m_stmt_remove, 1, modname);
+ SQLOK(sqlite3_bind_blob(m_stmt_remove, 2, key.data(), key.size(), NULL),
+ "Internal error: failed to bind query at " __FILE__ ":" TOSTRING(__LINE__));
+ sqlite3_vrfy(sqlite3_step(m_stmt_remove), SQLITE_DONE);
+ int changes = sqlite3_changes(m_database);
+
+ sqlite3_reset(m_stmt_remove);
+
+ return changes > 0;
+}
+
+void ModMetadataDatabaseSQLite3::listMods(std::vector<std::string> *res)
+{
+ verifyDatabase();
+
+ char *errmsg;
+ int status = sqlite3_exec(m_database,
+ "SELECT `modname` FROM `entries` GROUP BY `modname`;",
+ [](void *res_vp, int n_col, char **cols, char **col_names) -> int {
+ ((decltype(res)) res_vp)->emplace_back(cols[0]);
+ return 0;
+ }, (void *) res, &errmsg);
+ if (status != SQLITE_OK) {
+ DatabaseException e(std::string("Error trying to list mods with metadata: ") + errmsg);
+ sqlite3_free(errmsg);
+ throw e;
+ }
+}
diff --git a/src/database/database-sqlite3.h b/src/database/database-sqlite3.h
index d7202a918..5e3d7c96c 100644
--- a/src/database/database-sqlite3.h
+++ b/src/database/database-sqlite3.h
@@ -232,3 +232,28 @@ private:
sqlite3_stmt *m_stmt_delete_privs = nullptr;
sqlite3_stmt *m_stmt_last_insert_rowid = nullptr;
};
+
+class ModMetadataDatabaseSQLite3 : private Database_SQLite3, public ModMetadataDatabase
+{
+public:
+ ModMetadataDatabaseSQLite3(const std::string &savedir);
+ virtual ~ModMetadataDatabaseSQLite3();
+
+ virtual bool getModEntries(const std::string &modname, StringMap *storage);
+ virtual bool setModEntry(const std::string &modname,
+ const std::string &key, const std::string &value);
+ virtual bool removeModEntry(const std::string &modname, const std::string &key);
+ virtual void listMods(std::vector<std::string> *res);
+
+ virtual void beginSave() { Database_SQLite3::beginSave(); }
+ virtual void endSave() { Database_SQLite3::endSave(); }
+
+protected:
+ virtual void createDatabase();
+ virtual void initStatements();
+
+private:
+ sqlite3_stmt *m_stmt_get = nullptr;
+ sqlite3_stmt *m_stmt_set = nullptr;
+ sqlite3_stmt *m_stmt_remove = nullptr;
+};
diff --git a/src/database/database.h b/src/database/database.h
index b7d551935..fbb5befea 100644
--- a/src/database/database.h
+++ b/src/database/database.h
@@ -25,6 +25,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "irr_v3d.h"
#include "irrlichttypes.h"
#include "util/basic_macros.h"
+#include "util/string.h"
class Database
{
@@ -84,3 +85,15 @@ public:
virtual void listNames(std::vector<std::string> &res) = 0;
virtual void reload() = 0;
};
+
+class ModMetadataDatabase : public Database
+{
+public:
+ virtual ~ModMetadataDatabase() = default;
+
+ virtual bool getModEntries(const std::string &modname, StringMap *storage) = 0;
+ virtual bool setModEntry(const std::string &modname,
+ const std::string &key, const std::string &value) = 0;
+ virtual bool removeModEntry(const std::string &modname, const std::string &key) = 0;
+ virtual void listMods(std::vector<std::string> *res) = 0;
+};
diff --git a/src/defaultsettings.cpp b/src/defaultsettings.cpp
index cda953082..600fc65f3 100644
--- a/src/defaultsettings.cpp
+++ b/src/defaultsettings.cpp
@@ -56,7 +56,7 @@ void set_default_settings()
settings->setDefault("client_unload_unused_data_timeout", "600");
settings->setDefault("client_mapblock_limit", "7500");
settings->setDefault("enable_build_where_you_stand", "false");
- settings->setDefault("curl_timeout", "5000");
+ settings->setDefault("curl_timeout", "20000");
settings->setDefault("curl_parallel_limit", "8");
settings->setDefault("curl_file_download_timeout", "300000");
settings->setDefault("curl_verify_cert", "true");
@@ -65,6 +65,8 @@ void set_default_settings()
settings->setDefault("max_out_chat_queue_size", "20");
settings->setDefault("pause_on_lost_focus", "false");
settings->setDefault("enable_register_confirmation", "true");
+ settings->setDefault("clickable_chat_weblinks", "false");
+ settings->setDefault("chat_weblink_color", "#8888FF");
// Keymap
settings->setDefault("remote_port", "30000");
@@ -80,7 +82,7 @@ void set_default_settings()
settings->setDefault("keymap_drop", "KEY_KEY_Q");
settings->setDefault("keymap_zoom", "KEY_KEY_Z");
settings->setDefault("keymap_inventory", "KEY_KEY_I");
- settings->setDefault("keymap_special1", "KEY_KEY_E");
+ settings->setDefault("keymap_aux1", "KEY_KEY_E");
settings->setDefault("keymap_chat", "KEY_KEY_T");
settings->setDefault("keymap_cmd", "/");
settings->setDefault("keymap_cmd_local", ".");
@@ -97,6 +99,7 @@ void set_default_settings()
settings->setDefault("keymap_increase_volume", "");
settings->setDefault("keymap_decrease_volume", "");
settings->setDefault("keymap_cinematic", "");
+ settings->setDefault("keymap_toggle_block_bounds", "");
settings->setDefault("keymap_toggle_hud", "KEY_F1");
settings->setDefault("keymap_toggle_chat", "KEY_F2");
settings->setDefault("keymap_toggle_fog", "KEY_F3");
@@ -176,12 +179,12 @@ void set_default_settings()
settings->setDefault("screen_h", "600");
settings->setDefault("autosave_screensize", "true");
settings->setDefault("fullscreen", "false");
- settings->setDefault("fullscreen_bpp", "24");
settings->setDefault("vsync", "false");
settings->setDefault("fov", "72");
settings->setDefault("leaves_style", "fancy");
settings->setDefault("connected_glass", "false");
settings->setDefault("smooth_lighting", "true");
+ settings->setDefault("performance_tradeoffs", "false");
settings->setDefault("lighting_alpha", "0.0");
settings->setDefault("lighting_beta", "1.5");
settings->setDefault("display_gamma", "1.0");
@@ -261,6 +264,18 @@ void set_default_settings()
settings->setDefault("enable_waving_leaves", "false");
settings->setDefault("enable_waving_plants", "false");
+ // Effects Shadows
+ settings->setDefault("enable_dynamic_shadows", "false");
+ settings->setDefault("shadow_strength", "0.2");
+ settings->setDefault("shadow_map_max_distance", "200.0");
+ settings->setDefault("shadow_map_texture_size", "2048");
+ settings->setDefault("shadow_map_texture_32bit", "true");
+ settings->setDefault("shadow_map_color", "false");
+ settings->setDefault("shadow_filters", "1");
+ settings->setDefault("shadow_poisson_filter", "true");
+ settings->setDefault("shadow_update_frames", "8");
+ settings->setDefault("shadow_soft_radius", "1.0");
+ settings->setDefault("shadow_sky_body_orbit_tilt", "0.0");
// Input
settings->setDefault("invert_mouse", "false");
@@ -271,7 +286,7 @@ void set_default_settings()
settings->setDefault("aux1_descends", "false");
settings->setDefault("doubletap_jump", "false");
settings->setDefault("always_fly_fast", "true");
-#ifdef __ANDROID__
+#ifdef HAVE_TOUCHSCREENGUI
settings->setDefault("autojump", "true");
#else
settings->setDefault("autojump", "false");
@@ -288,8 +303,7 @@ void set_default_settings()
settings->setDefault("main_menu_path", "");
settings->setDefault("serverlist_file", "favoriteservers.json");
-#if USE_FREETYPE
- settings->setDefault("freetype", "true");
+ // General font settings
settings->setDefault("font_path", porting::getDataPath("fonts" DIR_DELIM "Arimo-Regular.ttf"));
settings->setDefault("font_path_italic", porting::getDataPath("fonts" DIR_DELIM "Arimo-Italic.ttf"));
settings->setDefault("font_path_bold", porting::getDataPath("fonts" DIR_DELIM "Arimo-Bold.ttf"));
@@ -298,26 +312,15 @@ void set_default_settings()
settings->setDefault("font_italic", "false");
settings->setDefault("font_shadow", "1");
settings->setDefault("font_shadow_alpha", "127");
+ settings->setDefault("font_size_divisible_by", "1");
settings->setDefault("mono_font_path", porting::getDataPath("fonts" DIR_DELIM "Cousine-Regular.ttf"));
settings->setDefault("mono_font_path_italic", porting::getDataPath("fonts" DIR_DELIM "Cousine-Italic.ttf"));
settings->setDefault("mono_font_path_bold", porting::getDataPath("fonts" DIR_DELIM "Cousine-Bold.ttf"));
settings->setDefault("mono_font_path_bold_italic", porting::getDataPath("fonts" DIR_DELIM "Cousine-BoldItalic.ttf"));
+ settings->setDefault("mono_font_size_divisible_by", "1");
settings->setDefault("fallback_font_path", porting::getDataPath("fonts" DIR_DELIM "DroidSansFallbackFull.ttf"));
- settings->setDefault("fallback_font_shadow", "1");
- settings->setDefault("fallback_font_shadow_alpha", "128");
-
std::string font_size_str = std::to_string(TTF_DEFAULT_FONT_SIZE);
-
- settings->setDefault("fallback_font_size", font_size_str);
-#else
- settings->setDefault("freetype", "false");
- settings->setDefault("font_path", porting::getDataPath("fonts" DIR_DELIM "mono_dejavu_sans"));
- settings->setDefault("mono_font_path", porting::getDataPath("fonts" DIR_DELIM "mono_dejavu_sans"));
-
- std::string font_size_str = std::to_string(DEFAULT_FONT_SIZE);
-#endif
- // General font settings
settings->setDefault("font_size", font_size_str);
settings->setDefault("mono_font_size", font_size_str);
settings->setDefault("chat_font_size", "0"); // Default "font_size"
@@ -389,7 +392,7 @@ void set_default_settings()
settings->setDefault("chat_message_limit_per_10sec", "8.0");
settings->setDefault("chat_message_limit_trigger_kick", "50");
settings->setDefault("sqlite_synchronous", "2");
- settings->setDefault("map_compression_level_disk", "3");
+ settings->setDefault("map_compression_level_disk", "-1");
settings->setDefault("map_compression_level_net", "-1");
settings->setDefault("full_block_send_enable_min_time_from_building", "2.0");
settings->setDefault("dedicated_server_step", "0.09");
@@ -432,7 +435,7 @@ void set_default_settings()
// Mapgen
settings->setDefault("mg_name", "v7");
settings->setDefault("water_level", "1");
- settings->setDefault("mapgen_limit", "31000");
+ settings->setDefault("mapgen_limit", "31007");
settings->setDefault("chunksize", "5");
settings->setDefault("fixed_map_seed", "");
settings->setDefault("max_block_generate_distance", "10");
@@ -446,9 +449,9 @@ void set_default_settings()
settings->setDefault("server_name", "");
settings->setDefault("server_description", "");
- settings->setDefault("high_precision_fpu", "true");
settings->setDefault("enable_console", "false");
settings->setDefault("screen_dpi", "72");
+ settings->setDefault("display_density_factor", "1");
// Altered settings for macOS
#if defined(__MACH__) && defined(__APPLE__)
@@ -456,16 +459,19 @@ void set_default_settings()
settings->setDefault("fps_max", "0");
#endif
+#ifdef HAVE_TOUCHSCREENGUI
+ settings->setDefault("touchtarget", "true");
+ settings->setDefault("touchscreen_threshold","20");
+ settings->setDefault("fixed_virtual_joystick", "false");
+ settings->setDefault("virtual_joystick_triggers_aux1", "false");
+#endif
// Altered settings for Android
#ifdef __ANDROID__
settings->setDefault("screen_w", "0");
settings->setDefault("screen_h", "0");
settings->setDefault("fullscreen", "true");
- settings->setDefault("touchtarget", "true");
- settings->setDefault("touchscreen_threshold","20");
- settings->setDefault("fixed_virtual_joystick", "false");
- settings->setDefault("virtual_joystick_triggers_aux", "false");
settings->setDefault("smooth_lighting", "false");
+ settings->setDefault("performance_tradeoffs", "true");
settings->setDefault("max_simultaneous_block_sends_per_client", "10");
settings->setDefault("emergequeue_limit_diskonly", "16");
settings->setDefault("emergequeue_limit_generate", "16");
@@ -476,7 +482,7 @@ void set_default_settings()
settings->setDefault("max_objects_per_block", "20");
settings->setDefault("sqlite_synchronous", "1");
settings->setDefault("map_compression_level_disk", "-1");
- settings->setDefault("map_compression_level_net", "3");
+ settings->setDefault("map_compression_level_net", "-1");
settings->setDefault("server_map_save_interval", "15");
settings->setDefault("client_mapblock_limit", "1000");
settings->setDefault("active_block_range", "2");
diff --git a/src/emerge.cpp b/src/emerge.cpp
index e0dc5628e..55ae99caf 100644
--- a/src/emerge.cpp
+++ b/src/emerge.cpp
@@ -113,13 +113,15 @@ EmergeParams::~EmergeParams()
{
infostream << "EmergeParams: destroying " << this << std::endl;
// Delete everything that was cloned on creation of EmergeParams
+ delete biomegen;
delete biomemgr;
delete oremgr;
delete decomgr;
delete schemmgr;
}
-EmergeParams::EmergeParams(EmergeManager *parent, const BiomeManager *biomemgr,
+EmergeParams::EmergeParams(EmergeManager *parent, const BiomeGen *biomegen,
+ const BiomeManager *biomemgr,
const OreManager *oremgr, const DecorationManager *decomgr,
const SchematicManager *schemmgr) :
ndef(parent->ndef),
@@ -129,6 +131,7 @@ EmergeParams::EmergeParams(EmergeManager *parent, const BiomeManager *biomemgr,
biomemgr(biomemgr->clone()), oremgr(oremgr->clone()),
decomgr(decomgr->clone()), schemmgr(schemmgr->clone())
{
+ this->biomegen = biomegen->clone(this->biomemgr);
}
////
@@ -143,6 +146,10 @@ EmergeManager::EmergeManager(Server *server)
this->decomgr = new DecorationManager(server);
this->schemmgr = new SchematicManager(server);
+ // initialized later
+ this->mgparams = nullptr;
+ this->biomegen = nullptr;
+
// Note that accesses to this variable are not synchronized.
// This is because the *only* thread ever starting or stopping
// EmergeThreads should be the ServerThread.
@@ -158,20 +165,17 @@ EmergeManager::EmergeManager(Server *server)
if (nthreads < 1)
nthreads = 1;
- m_qlimit_total = g_settings->getU16("emergequeue_limit_total");
+ m_qlimit_total = g_settings->getU32("emergequeue_limit_total");
// FIXME: these fallback values are probably not good
- if (!g_settings->getU16NoEx("emergequeue_limit_diskonly", m_qlimit_diskonly))
+ if (!g_settings->getU32NoEx("emergequeue_limit_diskonly", m_qlimit_diskonly))
m_qlimit_diskonly = nthreads * 5 + 1;
- if (!g_settings->getU16NoEx("emergequeue_limit_generate", m_qlimit_generate))
+ if (!g_settings->getU32NoEx("emergequeue_limit_generate", m_qlimit_generate))
m_qlimit_generate = nthreads + 1;
// don't trust user input for something very important like this
- 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;
+ m_qlimit_total = rangelim(m_qlimit_total, 1, 1000000);
+ m_qlimit_diskonly = rangelim(m_qlimit_diskonly, 1, 1000000);
+ m_qlimit_generate = rangelim(m_qlimit_generate, 1, 1000000);
for (s16 i = 0; i < nthreads; i++)
m_threads.push_back(new EmergeThread(server, i));
@@ -240,9 +244,12 @@ void EmergeManager::initMapgens(MapgenParams *params)
mgparams = params;
+ v3s16 csize = v3s16(1, 1, 1) * (params->chunksize * MAP_BLOCKSIZE);
+ biomegen = biomemgr->createBiomeGen(BIOMEGEN_ORIGINAL, params->bparams, csize);
+
for (u32 i = 0; i != m_threads.size(); i++) {
- EmergeParams *p = new EmergeParams(
- this, biomemgr, oremgr, decomgr, schemmgr);
+ EmergeParams *p = new EmergeParams(this, biomegen,
+ biomemgr, oremgr, decomgr, schemmgr);
infostream << "EmergeManager: Created params " << p
<< " for thread " << i << std::endl;
m_mapgens.push_back(Mapgen::createMapgen(params->mgtype, params, p));
@@ -348,18 +355,19 @@ bool EmergeManager::enqueueBlockEmergeEx(
}
+bool EmergeManager::isBlockInQueue(v3s16 pos)
+{
+ MutexAutoLock queuelock(m_queue_mutex);
+ return m_blocks_enqueued.find(pos) != m_blocks_enqueued.end();
+}
+
+
//
// Mapgen-related helper functions
//
// TODO(hmmmm): Move this to ServerMap
-v3s16 EmergeManager::getContainingChunk(v3s16 blockpos)
-{
- return getContainingChunk(blockpos, mgparams->chunksize);
-}
-
-// TODO(hmmmm): Move this to ServerMap
v3s16 EmergeManager::getContainingChunk(v3s16 blockpos, s16 chunksize)
{
s16 coff = -chunksize / 2;
@@ -382,17 +390,6 @@ int EmergeManager::getSpawnLevelAtPoint(v2s16 p)
}
-int EmergeManager::getGroundLevelAtPoint(v2s16 p)
-{
- if (m_mapgens.empty() || !m_mapgens[0]) {
- errorstream << "EmergeManager: getGroundLevelAtPoint() called"
- " before mapgen init" << std::endl;
- return 0;
- }
-
- return m_mapgens[0]->getGroundLevelAtPoint(p);
-}
-
// TODO(hmmmm): Move this to ServerMap
bool EmergeManager::isBlockUnderground(v3s16 blockpos)
{
@@ -408,14 +405,14 @@ bool EmergeManager::pushBlockEmergeData(
void *callback_param,
bool *entry_already_exists)
{
- u16 &count_peer = m_peer_queue_count[peer_requested];
+ u32 &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) ?
+ u32 qlimit_peer = (flags & BLOCK_EMERGE_ALLOW_GEN) ?
m_qlimit_generate : m_qlimit_diskonly;
if (count_peer >= qlimit_peer)
return false;
@@ -450,20 +447,18 @@ bool EmergeManager::pushBlockEmergeData(
bool EmergeManager::popBlockEmergeData(v3s16 pos, BlockEmergeData *bedata)
{
- std::map<v3s16, BlockEmergeData>::iterator it;
- std::unordered_map<u16, u16>::iterator it2;
-
- it = m_blocks_enqueued.find(pos);
+ auto it = m_blocks_enqueued.find(pos);
if (it == m_blocks_enqueued.end())
return false;
*bedata = it->second;
- it2 = m_peer_queue_count.find(bedata->peer_requested);
+ auto it2 = m_peer_queue_count.find(bedata->peer_requested);
if (it2 == m_peer_queue_count.end())
return false;
- u16 &count_peer = it2->second;
+ u32 &count_peer = it2->second;
+
assert(count_peer != 0);
count_peer--;
@@ -635,15 +630,17 @@ MapBlock *EmergeThread::finishGen(v3s16 pos, BlockMakeData *bmdata,
m_server->getScriptIface()->environment_OnGenerated(
minp, maxp, m_mapgen->blockseed);
} catch (LuaError &e) {
- m_server->setAsyncFatalError("Lua: finishGen" + std::string(e.what()));
+ m_server->setAsyncFatalError(e);
}
+ EMERGE_DBG_OUT("ended up with: " << analyze_block(block));
+
/*
- Clear generate notifier events
+ Clear mapgen state
*/
+ assert(!m_mapgen->generating);
m_mapgen->gennotify.clearEvents();
-
- EMERGE_DBG_OUT("ended up with: " << analyze_block(block));
+ m_mapgen->vm = nullptr;
/*
Activate the block
@@ -659,19 +656,19 @@ void *EmergeThread::run()
BEGIN_DEBUG_EXCEPTION_HANDLER
v3s16 pos;
+ std::map<v3s16, MapBlock *> modified_blocks;
- m_map = (ServerMap *)&(m_server->m_env->getMap());
+ m_map = &m_server->m_env->getServerMap();
m_emerge = m_server->m_emerge;
m_mapgen = m_emerge->m_mapgens[id];
enable_mapgen_debug_info = m_emerge->enable_mapgen_debug_info;
try {
while (!stopRequested()) {
- std::map<v3s16, MapBlock *> modified_blocks;
BlockEmergeData bedata;
BlockMakeData bmdata;
EmergeAction action;
- MapBlock *block;
+ MapBlock *block = nullptr;
if (!popBlockEmerge(&pos, &bedata)) {
m_queue_event.wait();
@@ -694,6 +691,8 @@ void *EmergeThread::run()
}
block = finishGen(pos, &bmdata, &modified_blocks);
+ if (!block)
+ action = EMERGE_ERRORED;
}
runCompletionCallbacks(pos, action, bedata.callbacks);
@@ -703,6 +702,7 @@ void *EmergeThread::run()
if (!modified_blocks.empty())
m_server->SetBlocksNotSent(modified_blocks);
+ modified_blocks.clear();
}
} catch (VersionMismatchException &e) {
std::ostringstream err;
@@ -724,6 +724,8 @@ void *EmergeThread::run()
m_server->setAsyncFatalError(err.str());
}
+ cancelPendingItems();
+
END_DEBUG_EXCEPTION_HANDLER
return NULL;
}
diff --git a/src/emerge.h b/src/emerge.h
index da845e243..61e7bda63 100644
--- a/src/emerge.h
+++ b/src/emerge.h
@@ -99,13 +99,15 @@ public:
u32 gen_notify_on;
const std::set<u32> *gen_notify_on_deco_ids; // shared
+ BiomeGen *biomegen;
BiomeManager *biomemgr;
OreManager *oremgr;
DecorationManager *decomgr;
SchematicManager *schemmgr;
private:
- EmergeParams(EmergeManager *parent, const BiomeManager *biomemgr,
+ EmergeParams(EmergeManager *parent, const BiomeGen *biomegen,
+ const BiomeManager *biomemgr,
const OreManager *oremgr, const DecorationManager *decomgr,
const SchematicManager *schemmgr);
};
@@ -140,6 +142,8 @@ public:
~EmergeManager();
DISABLE_CLASS_COPY(EmergeManager);
+ const BiomeGen *getBiomeGen() const { return biomegen; }
+
// no usage restrictions
const BiomeManager *getBiomeManager() const { return biomemgr; }
const OreManager *getOreManager() const { return oremgr; }
@@ -170,13 +174,12 @@ public:
EmergeCompletionCallback callback,
void *callback_param);
- v3s16 getContainingChunk(v3s16 blockpos);
+ bool isBlockInQueue(v3s16 pos);
Mapgen *getCurrentMapgen();
// Mapgen helpers methods
int getSpawnLevelAtPoint(v2s16 p);
- int getGroundLevelAtPoint(v2s16 p);
bool isBlockUnderground(v3s16 blockpos);
static v3s16 getContainingChunk(v3s16 blockpos, s16 chunksize);
@@ -188,14 +191,15 @@ private:
std::mutex m_queue_mutex;
std::map<v3s16, BlockEmergeData> m_blocks_enqueued;
- std::unordered_map<u16, u16> m_peer_queue_count;
+ std::unordered_map<u16, u32> m_peer_queue_count;
- u16 m_qlimit_total;
- u16 m_qlimit_diskonly;
- u16 m_qlimit_generate;
+ u32 m_qlimit_total;
+ u32 m_qlimit_diskonly;
+ u32 m_qlimit_generate;
// Managers of various map generation-related components
// Note that each Mapgen gets a copy(!) of these to work with
+ BiomeGen *biomegen;
BiomeManager *biomemgr;
OreManager *oremgr;
DecorationManager *decomgr;
diff --git a/src/environment.cpp b/src/environment.cpp
index 06f2b8bf9..b04f77557 100644
--- a/src/environment.cpp
+++ b/src/environment.cpp
@@ -169,6 +169,12 @@ void Environment::continueRaycast(RaycastState *state, PointedThing *result)
new_nodes.MaxEdge.Z = new_nodes.MinEdge.Z;
}
+ if (new_nodes.MaxEdge.X == S16_MAX ||
+ new_nodes.MaxEdge.Y == S16_MAX ||
+ new_nodes.MaxEdge.Z == S16_MAX) {
+ break; // About to go out of bounds
+ }
+
// For each untested node
for (s16 x = new_nodes.MinEdge.X; x <= new_nodes.MaxEdge.X; x++)
for (s16 y = new_nodes.MinEdge.Y; y <= new_nodes.MaxEdge.Y; y++)
diff --git a/src/filesys.cpp b/src/filesys.cpp
index 5ffb4506e..ea00def6a 100644
--- a/src/filesys.cpp
+++ b/src/filesys.cpp
@@ -21,21 +21,33 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "util/string.h"
#include <iostream>
#include <cstdio>
+#include <cstdlib>
#include <cstring>
#include <cerrno>
#include <fstream>
#include "log.h"
#include "config.h"
#include "porting.h"
+#ifndef SERVER
+#include "irr_ptr.h"
+#endif
namespace fs
{
-#ifdef _WIN32 // WINDOWS
+#ifdef _WIN32
+
+/***********
+ * Windows *
+ ***********/
+#ifndef _WIN32_WINNT
#define _WIN32_WINNT 0x0501
+#endif
#include <windows.h>
#include <shlwapi.h>
+#include <io.h>
+#include <direct.h>
std::vector<DirListNode> GetDirListing(const std::string &pathstring)
{
@@ -176,16 +188,34 @@ std::string TempPath()
errorstream<<"GetTempPath failed, error = "<<GetLastError()<<std::endl;
return "";
}
- std::vector<char> buf(bufsize);
+ std::string buf;
+ buf.resize(bufsize);
DWORD len = GetTempPath(bufsize, &buf[0]);
if(len == 0 || len > bufsize){
errorstream<<"GetTempPath failed, error = "<<GetLastError()<<std::endl;
return "";
}
- return std::string(buf.begin(), buf.begin() + len);
+ buf.resize(len);
+ return buf;
+}
+
+std::string CreateTempFile()
+{
+ std::string path = TempPath() + DIR_DELIM "MT_XXXXXX";
+ _mktemp_s(&path[0], path.size() + 1); // modifies path
+ HANDLE file = CreateFile(path.c_str(), GENERIC_WRITE, 0, nullptr,
+ CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, nullptr);
+ if (file == INVALID_HANDLE_VALUE)
+ return "";
+ CloseHandle(file);
+ return path;
}
-#else // POSIX
+#else
+
+/*********
+ * POSIX *
+ *********/
#include <sys/types.h>
#include <dirent.h>
@@ -364,8 +394,22 @@ std::string TempPath()
#endif
}
+std::string CreateTempFile()
+{
+ std::string path = TempPath() + DIR_DELIM "MT_XXXXXX";
+ int fd = mkstemp(&path[0]); // modifies path
+ if (fd == -1)
+ return "";
+ close(fd);
+ return path;
+}
+
#endif
+/****************************
+ * portable implementations *
+ ****************************/
+
void GetRecursiveDirs(std::vector<std::string> &dirs, const std::string &dir)
{
static const std::set<char> chars_to_ignore = { '_', '.' };
@@ -517,6 +561,30 @@ bool CopyDir(const std::string &source, const std::string &target)
return false;
}
+bool MoveDir(const std::string &source, const std::string &target)
+{
+ infostream << "Moving \"" << source << "\" to \"" << target << "\"" << std::endl;
+
+ // If target exists as empty folder delete, otherwise error
+ if (fs::PathExists(target)) {
+ if (rmdir(target.c_str()) != 0) {
+ errorstream << "MoveDir: target \"" << target
+ << "\" exists as file or non-empty folder" << std::endl;
+ return false;
+ }
+ }
+
+ // Try renaming first which is instant
+ if (fs::Rename(source, target))
+ return true;
+
+ infostream << "MoveDir: rename not possible, will copy instead" << std::endl;
+ bool retval = fs::CopyDir(source, target);
+ if (retval)
+ retval &= fs::RecursiveDelete(source);
+ return retval;
+}
+
bool PathStartsWith(const std::string &path, const std::string &prefix)
{
size_t pathsize = path.size();
@@ -727,6 +795,67 @@ bool safeWriteToFile(const std::string &path, const std::string &content)
return true;
}
+#ifndef SERVER
+bool extractZipFile(io::IFileSystem *fs, const char *filename, const std::string &destination)
+{
+ // Be careful here not to touch the global file hierarchy in Irrlicht
+ // since this function needs to be thread-safe!
+
+ io::IArchiveLoader *zip_loader = nullptr;
+ for (u32 i = 0; i < fs->getArchiveLoaderCount(); i++) {
+ if (fs->getArchiveLoader(i)->isALoadableFileFormat(io::EFAT_ZIP)) {
+ zip_loader = fs->getArchiveLoader(i);
+ break;
+ }
+ }
+ if (!zip_loader) {
+ warningstream << "fs::extractZipFile(): Irrlicht said it doesn't support ZIPs." << std::endl;
+ return false;
+ }
+
+ irr_ptr<io::IFileArchive> opened_zip(zip_loader->createArchive(filename, false, false));
+ const io::IFileList* files_in_zip = opened_zip->getFileList();
+
+ for (u32 i = 0; i < files_in_zip->getFileCount(); i++) {
+ std::string fullpath = destination + DIR_DELIM;
+ fullpath += files_in_zip->getFullFileName(i).c_str();
+ std::string fullpath_dir = fs::RemoveLastPathComponent(fullpath);
+
+ if (files_in_zip->isDirectory(i))
+ continue; // ignore, we create dirs as necessary
+
+ if (!fs::PathExists(fullpath_dir) && !fs::CreateAllDirs(fullpath_dir))
+ return false;
+
+ irr_ptr<io::IReadFile> toread(opened_zip->createAndOpenFile(i));
+
+ std::ofstream os(fullpath.c_str(), std::ios::binary);
+ if (!os.good())
+ return false;
+
+ char buffer[4096];
+ long total_read = 0;
+
+ while (total_read < toread->getSize()) {
+ long bytes_read = toread->read(buffer, sizeof(buffer));
+ bool error = true;
+ if (bytes_read != 0) {
+ os.write(buffer, bytes_read);
+ error = os.fail();
+ }
+ if (error) {
+ os.close();
+ remove(fullpath.c_str());
+ return false;
+ }
+ total_read += bytes_read;
+ }
+ }
+
+ return true;
+}
+#endif
+
bool ReadFile(const std::string &path, std::string &out)
{
std::ifstream is(path, std::ios::binary | std::ios::ate);
@@ -739,7 +868,7 @@ bool ReadFile(const std::string &path, std::string &out)
is.seekg(0);
is.read(&out[0], size);
- return true;
+ return !is.fail();
}
bool Rename(const std::string &from, const std::string &to)
diff --git a/src/filesys.h b/src/filesys.h
index cfbfa02bf..3fa2524c3 100644
--- a/src/filesys.h
+++ b/src/filesys.h
@@ -24,18 +24,22 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include <vector>
#include "exceptions.h"
-#ifdef _WIN32 // WINDOWS
+#ifdef _WIN32
#define DIR_DELIM "\\"
#define DIR_DELIM_CHAR '\\'
#define FILESYS_CASE_INSENSITIVE true
#define PATH_DELIM ";"
-#else // POSIX
+#else
#define DIR_DELIM "/"
#define DIR_DELIM_CHAR '/'
#define FILESYS_CASE_INSENSITIVE false
#define PATH_DELIM ":"
#endif
+namespace irr { namespace io {
+class IFileSystem;
+}}
+
namespace fs
{
@@ -67,6 +71,10 @@ bool DeleteSingleFileOrEmptyDirectory(const std::string &path);
// Returns path to temp directory, can return "" on error
std::string TempPath();
+// Returns path to securely-created temporary file (will already exist when this function returns)
+// can return "" on error
+std::string CreateTempFile();
+
/* Returns a list of subdirectories, including the path itself, but excluding
hidden directories (whose names start with . or _)
*/
@@ -98,6 +106,10 @@ bool CopyFileContents(const std::string &source, const std::string &target);
// Omits files and subdirectories that start with a period
bool CopyDir(const std::string &source, const std::string &target);
+// Move directory and all subdirectories
+// Behavior with files/subdirs that start with a period is undefined
+bool MoveDir(const std::string &source, const std::string &target);
+
// Check if one path is prefix of another
// For example, "/tmp" is a prefix of "/tmp" and "/tmp/file" but not "/tmp2"
// Ignores case differences and '/' vs. '\\' on Windows
@@ -125,6 +137,10 @@ const char *GetFilenameFromPath(const char *path);
bool safeWriteToFile(const std::string &path, const std::string &content);
+#ifndef SERVER
+bool extractZipFile(irr::io::IFileSystem *fs, const char *filename, const std::string &destination);
+#endif
+
bool ReadFile(const std::string &path, std::string &out);
bool Rename(const std::string &from, const std::string &to);
diff --git a/src/gamedef.h b/src/gamedef.h
index bc0ee14c3..8a9246da2 100644
--- a/src/gamedef.h
+++ b/src/gamedef.h
@@ -33,6 +33,7 @@ class EmergeManager;
class Camera;
class ModChannel;
class ModMetadata;
+class ModMetadataDatabase;
namespace irr { namespace scene {
class IAnimatedMesh;
@@ -70,9 +71,9 @@ public:
virtual const std::vector<ModSpec> &getMods() const = 0;
virtual const ModSpec* getModSpec(const std::string &modname) const = 0;
virtual std::string getWorldPath() const { return ""; }
- virtual std::string getModStoragePath() const = 0;
virtual bool registerModStorage(ModMetadata *storage) = 0;
virtual void unregisterModStorage(const std::string &name) = 0;
+ virtual ModMetadataDatabase *getModStorageDatabase() = 0;
virtual bool joinModChannel(const std::string &channel) = 0;
virtual bool leaveModChannel(const std::string &channel) = 0;
diff --git a/src/gettext.cpp b/src/gettext.cpp
index 6818004df..de042cf35 100644
--- a/src/gettext.cpp
+++ b/src/gettext.cpp
@@ -127,6 +127,10 @@ void init_gettext(const char *path, const std::string &configured_language,
// Add user specified locale to environment
setenv("LANGUAGE", configured_language.c_str(), 1);
+#ifdef __ANDROID__
+ setenv("LANG", configured_language.c_str(), 1);
+#endif
+
// Reload locale with changed environment
setlocale(LC_ALL, "");
#elif defined(_MSC_VER)
diff --git a/src/gettext.h b/src/gettext.h
index 42b375d86..6225fef93 100644
--- a/src/gettext.h
+++ b/src/gettext.h
@@ -21,6 +21,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "config.h" // for USE_GETTEXT
#include <string>
+#include "porting.h"
#if USE_GETTEXT
#include <libintl.h>
@@ -47,8 +48,7 @@ void init_gettext(const char *path, const std::string &configured_language,
extern wchar_t *utf8_to_wide_c(const char *str);
-// You must free the returned string!
-// The returned string is allocated using new
+// The returned string must be freed using delete[]
inline const wchar_t *wgettext(const char *str)
{
// We must check here that is not an empty string to avoid trying to translate it
@@ -59,3 +59,49 @@ inline std::string strgettext(const std::string &text)
{
return text.empty() ? "" : gettext(text.c_str());
}
+
+/**
+ * Returns translated string with format args applied
+ *
+ * @tparam Args Template parameter for format args
+ * @param src Translation source string
+ * @param args Variable format args
+ * @return translated string
+ */
+template <typename ...Args>
+inline std::wstring fwgettext(const char *src, Args&&... args)
+{
+ wchar_t buf[255];
+ const wchar_t* str = wgettext(src);
+ swprintf(buf, sizeof(buf) / sizeof(wchar_t), str, std::forward<Args>(args)...);
+ delete[] str;
+ return std::wstring(buf);
+}
+
+/**
+ * Returns translated string with format args applied
+ *
+ * @tparam Args Template parameter for format args
+ * @param format Translation source string
+ * @param args Variable format args
+ * @return translated string.
+ */
+template <typename ...Args>
+inline std::string fmtgettext(const char *format, Args&&... args)
+{
+ std::string buf;
+ std::size_t buf_size = 256;
+ buf.resize(buf_size);
+
+ format = gettext(format);
+
+ int len = porting::mt_snprintf(&buf[0], buf_size, format, std::forward<Args>(args)...);
+ if (len <= 0) throw std::runtime_error("gettext format error: " + std::string(format));
+ if ((size_t)len >= buf.size()) {
+ buf.resize(len+1); // extra null byte
+ porting::mt_snprintf(&buf[0], buf.size(), format, std::forward<Args>(args)...);
+ }
+ buf.resize(len); // remove null bytes
+
+ return buf;
+}
diff --git a/src/gui/CMakeLists.txt b/src/gui/CMakeLists.txt
index fdd36914a..513b13e8e 100644
--- a/src/gui/CMakeLists.txt
+++ b/src/gui/CMakeLists.txt
@@ -1,3 +1,8 @@
+set(extra_gui_SRCS "")
+if(ENABLE_TOUCH)
+ set(extra_gui_SRCS ${CMAKE_CURRENT_SOURCE_DIR}/touchscreengui.cpp)
+endif()
+
set(gui_SRCS
${CMAKE_CURRENT_SOURCE_DIR}/guiAnimatedImage.cpp
${CMAKE_CURRENT_SOURCE_DIR}/guiBackgroundImage.cpp
@@ -23,8 +28,8 @@ set(gui_SRCS
${CMAKE_CURRENT_SOURCE_DIR}/guiTable.cpp
${CMAKE_CURRENT_SOURCE_DIR}/guiHyperText.cpp
${CMAKE_CURRENT_SOURCE_DIR}/guiVolumeChange.cpp
- ${CMAKE_CURRENT_SOURCE_DIR}/intlGUIEditBox.cpp
${CMAKE_CURRENT_SOURCE_DIR}/modalMenu.cpp
${CMAKE_CURRENT_SOURCE_DIR}/profilergraph.cpp
+ ${extra_gui_SRCS}
PARENT_SCOPE
)
diff --git a/src/gui/guiButton.cpp b/src/gui/guiButton.cpp
index b98e5de82..ba95b81c3 100644
--- a/src/gui/guiButton.cpp
+++ b/src/gui/guiButton.cpp
@@ -506,6 +506,13 @@ video::SColor GUIButton::getOverrideColor() const
return OverrideColor;
}
+#if IRRLICHT_VERSION_MAJOR == 1 && IRRLICHT_VERSION_MINOR > 8
+video::SColor GUIButton::getActiveColor() const
+{
+ return video::SColor(0,0,0,0); // unused?
+}
+#endif
+
void GUIButton::enableOverrideColor(bool enable)
{
OverrideColorEnabled = enable;
@@ -625,85 +632,6 @@ bool GUIButton::isDrawingBorder() const
}
-//! Writes attributes of the element.
-void GUIButton::serializeAttributes(io::IAttributes* out, io::SAttributeReadWriteOptions* options=0) const
-{
- IGUIButton::serializeAttributes(out,options);
-
- out->addBool ("PushButton", IsPushButton );
- if (IsPushButton)
- out->addBool("Pressed", Pressed);
-
- for ( u32 i=0; i<(u32)EGBIS_COUNT; ++i )
- {
- if ( ButtonImages[i].Texture )
- {
- core::stringc name( GUIButtonImageStateNames[i] );
- out->addTexture(name.c_str(), ButtonImages[i].Texture);
- name += "Rect";
- out->addRect(name.c_str(), ButtonImages[i].SourceRect);
- }
- }
-
- out->addBool ("UseAlphaChannel", UseAlphaChannel);
- out->addBool ("Border", DrawBorder);
- out->addBool ("ScaleImage", ScaleImage);
-
- for ( u32 i=0; i<(u32)EGBS_COUNT; ++i )
- {
- if ( ButtonSprites[i].Index >= 0 )
- {
- core::stringc nameIndex( GUIButtonStateNames[i] );
- nameIndex += "Index";
- out->addInt(nameIndex.c_str(), ButtonSprites[i].Index );
-
- core::stringc nameColor( GUIButtonStateNames[i] );
- nameColor += "Color";
- out->addColor(nameColor.c_str(), ButtonSprites[i].Color );
-
- core::stringc nameLoop( GUIButtonStateNames[i] );
- nameLoop += "Loop";
- out->addBool(nameLoop.c_str(), ButtonSprites[i].Loop );
-
- core::stringc nameScale( GUIButtonStateNames[i] );
- nameScale += "Scale";
- out->addBool(nameScale.c_str(), ButtonSprites[i].Scale );
- }
- }
-
- // out->addString ("OverrideFont", OverrideFont);
-}
-
-
-//! Reads attributes of the element
-void GUIButton::deserializeAttributes(io::IAttributes* in, io::SAttributeReadWriteOptions* options=0)
-{
- IGUIButton::deserializeAttributes(in,options);
-
- IsPushButton = in->getAttributeAsBool("PushButton");
- Pressed = IsPushButton ? in->getAttributeAsBool("Pressed") : false;
-
- core::rect<s32> rec = in->getAttributeAsRect("ImageRect");
- if (rec.isValid())
- setImage( in->getAttributeAsTexture("Image"), rec);
- else
- setImage( in->getAttributeAsTexture("Image") );
-
- rec = in->getAttributeAsRect("PressedImageRect");
- if (rec.isValid())
- setPressedImage( in->getAttributeAsTexture("PressedImage"), rec);
- else
- setPressedImage( in->getAttributeAsTexture("PressedImage") );
-
- setDrawBorder(in->getAttributeAsBool("Border"));
- setUseAlphaChannel(in->getAttributeAsBool("UseAlphaChannel"));
- setScaleImage(in->getAttributeAsBool("ScaleImage"));
-
- // setOverrideFont(in->getAttributeAsString("OverrideFont"));
-
- updateAbsolutePosition();
-}
-
// PATCH
GUIButton* GUIButton::addButton(IGUIEnvironment *environment,
const core::rect<s32>& rectangle, ISimpleTextureSource *tsrc,
diff --git a/src/gui/guiButton.h b/src/gui/guiButton.h
index 4e1b04aac..ee9bb6f21 100644
--- a/src/gui/guiButton.h
+++ b/src/gui/guiButton.h
@@ -69,6 +69,12 @@ using namespace irr;
class ISimpleTextureSource;
+#if (IRRLICHT_VERSION_MAJOR == 1 && IRRLICHT_VERSION_MINOR <= 8)
+#define OVERRIDE_19
+#else
+#define OVERRIDE_19 override
+#endif
+
class GUIButton : public gui::IGUIButton
{
public:
@@ -97,22 +103,27 @@ public:
virtual gui::IGUIFont* getActiveFont() const override;
//! Sets another color for the button text.
- virtual void setOverrideColor(video::SColor color);
+ virtual void setOverrideColor(video::SColor color) OVERRIDE_19;
//! Gets the override color
- virtual video::SColor getOverrideColor(void) const;
+ virtual video::SColor getOverrideColor(void) const OVERRIDE_19;
+
+ #if IRRLICHT_VERSION_MAJOR == 1 && IRRLICHT_VERSION_MINOR > 8
+ //! Gets the currently used text color
+ virtual video::SColor getActiveColor() const override;
+ #endif
//! Sets if the button text should use the override color or the color in the gui skin.
- virtual void enableOverrideColor(bool enable);
+ virtual void enableOverrideColor(bool enable) OVERRIDE_19;
//! Checks if an override color is enabled
- virtual bool isOverrideColorEnabled(void) const;
+ virtual bool isOverrideColorEnabled(void) const OVERRIDE_19;
// PATCH
//! Sets an image which should be displayed on the button when it is in the given state.
virtual void setImage(gui::EGUI_BUTTON_IMAGE_STATE state,
video::ITexture* image=nullptr,
- const core::rect<s32>& sourceRect=core::rect<s32>(0,0,0,0));
+ const core::rect<s32>& sourceRect=core::rect<s32>(0,0,0,0)) OVERRIDE_19;
//! Sets an image which should be displayed on the button when it is in normal state.
virtual void setImage(video::ITexture* image=nullptr) override;
@@ -141,7 +152,7 @@ public:
*/
virtual void setSprite(gui::EGUI_BUTTON_STATE state, s32 index,
video::SColor color=video::SColor(255,255,255,255),
- bool loop=false, bool scale=false);
+ bool loop=false, bool scale=false) OVERRIDE_19;
#if (IRRLICHT_VERSION_MAJOR == 1 && IRRLICHT_VERSION_MINOR <= 8)
void setSprite(gui::EGUI_BUTTON_STATE state, s32 index, video::SColor color, bool loop) override {
@@ -150,16 +161,16 @@ public:
#endif
//! Get the sprite-index for the given state or -1 when no sprite is set
- virtual s32 getSpriteIndex(gui::EGUI_BUTTON_STATE state) const;
+ virtual s32 getSpriteIndex(gui::EGUI_BUTTON_STATE state) const OVERRIDE_19;
//! Get the sprite color for the given state. Color is only used when a sprite is set.
- virtual video::SColor getSpriteColor(gui::EGUI_BUTTON_STATE state) const;
+ virtual video::SColor getSpriteColor(gui::EGUI_BUTTON_STATE state) const OVERRIDE_19;
//! Returns if the sprite in the given state does loop
- virtual bool getSpriteLoop(gui::EGUI_BUTTON_STATE state) const;
+ virtual bool getSpriteLoop(gui::EGUI_BUTTON_STATE state) const OVERRIDE_19;
//! Returns if the sprite in the given state is scaled
- virtual bool getSpriteScale(gui::EGUI_BUTTON_STATE state) const;
+ virtual bool getSpriteScale(gui::EGUI_BUTTON_STATE state) const OVERRIDE_19;
//! Sets if the button should behave like a push button. Which means it
//! can be in two states: Normal or Pressed. With a click on the button,
@@ -199,25 +210,17 @@ public:
virtual bool isScalingImage() const override;
//! Get if the shift key was pressed in last EGET_BUTTON_CLICKED event
- virtual bool getClickShiftState() const
+ virtual bool getClickShiftState() const OVERRIDE_19
{
return ClickShiftState;
}
//! Get if the control key was pressed in last EGET_BUTTON_CLICKED event
- virtual bool getClickControlState() const
+ virtual bool getClickControlState() const OVERRIDE_19
{
return ClickControlState;
}
- //! Writes attributes of the element.
- virtual void serializeAttributes(io::IAttributes* out, io::SAttributeReadWriteOptions* options) const override;
-
- //! Reads attributes of the element
- virtual void deserializeAttributes(io::IAttributes* in, io::SAttributeReadWriteOptions* options) override;
-
-
-
void setColor(video::SColor color);
// PATCH
//! Set element properties from a StyleSpec corresponding to the button state
diff --git a/src/gui/guiChatConsole.cpp b/src/gui/guiChatConsole.cpp
index ef471106d..01e10ea2e 100644
--- a/src/gui/guiChatConsole.cpp
+++ b/src/gui/guiChatConsole.cpp
@@ -17,6 +17,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
+#include "IrrCompileConfig.h"
#include "guiChatConsole.h"
#include "chat.h"
#include "client/client.h"
@@ -29,17 +30,18 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "client/fontengine.h"
#include "log.h"
#include "gettext.h"
+#include "irrlicht_changes/CGUITTFont.h"
#include <string>
-#if USE_FREETYPE
- #include "irrlicht_changes/CGUITTFont.h"
-#endif
-
inline u32 clamp_u8(s32 value)
{
return (u32) MYMIN(MYMAX(value, 0), 255);
}
+inline bool isInCtrlKeys(const irr::EKEY_CODE& kc)
+{
+ return kc == KEY_LCONTROL || kc == KEY_RCONTROL || kc == KEY_CONTROL;
+}
GUIChatConsole::GUIChatConsole(
gui::IGUIEnvironment* env,
@@ -90,6 +92,10 @@ GUIChatConsole::GUIChatConsole(
// set default cursor options
setCursor(true, true, 2.0, 0.1);
+
+ // track ctrl keys for mouse event
+ m_is_ctrl_down = false;
+ m_cache_clickable_chat_weblinks = g_settings->getBool("clickable_chat_weblinks");
}
GUIChatConsole::~GUIChatConsole()
@@ -319,20 +325,16 @@ void GUIChatConsole::drawText()
core::rect<s32> destrect(
x, y, x + m_fontsize.X * fragment.text.size(), y + m_fontsize.Y);
-#if USE_FREETYPE
if (m_font->getType() == irr::gui::EGFT_CUSTOM) {
- // Draw colored text if FreeType is enabled
- irr::gui::CGUITTFont *tmp = dynamic_cast<irr::gui::CGUITTFont *>(m_font);
+ // Draw colored text if possible
+ gui::CGUITTFont *tmp = static_cast<gui::CGUITTFont*>(m_font);
tmp->draw(
fragment.text,
destrect,
- video::SColor(255, 255, 255, 255),
false,
false,
&AbsoluteClippingRect);
- } else
-#endif
- {
+ } else {
// Otherwise use standard text
m_font->draw(
fragment.text.c_str(),
@@ -405,8 +407,21 @@ bool GUIChatConsole::OnEvent(const SEvent& event)
ChatPrompt &prompt = m_chat_backend->getPrompt();
- if(event.EventType == EET_KEY_INPUT_EVENT && event.KeyInput.PressedDown)
+ if (event.EventType == EET_KEY_INPUT_EVENT && !event.KeyInput.PressedDown)
+ {
+ // CTRL up
+ if (isInCtrlKeys(event.KeyInput.Key))
+ {
+ m_is_ctrl_down = false;
+ }
+ }
+ else if(event.EventType == EET_KEY_INPUT_EVENT && event.KeyInput.PressedDown)
{
+ // CTRL down
+ if (isInCtrlKeys(event.KeyInput.Key)) {
+ m_is_ctrl_down = true;
+ }
+
// Key input
if (KeyPress(event.KeyInput) == getKeySetting("keymap_console")) {
closeConsole();
@@ -559,8 +574,7 @@ bool GUIChatConsole::OnEvent(const SEvent& event)
const c8 *text = os_operator->getTextFromClipboard();
if (!text)
return true;
- std::basic_string<unsigned char> str((const unsigned char*)text);
- prompt.input(std::wstring(str.begin(), str.end()));
+ prompt.input(utf8_to_wide(text));
return true;
}
else if(event.KeyInput.Key == KEY_KEY_X && event.KeyInput.Control)
@@ -607,24 +621,38 @@ bool GUIChatConsole::OnEvent(const SEvent& event)
prompt.nickCompletion(names, backwards);
return true;
} else if (!iswcntrl(event.KeyInput.Char) && !event.KeyInput.Control) {
- #if defined(__linux__) && (IRRLICHT_VERSION_MAJOR == 1 && IRRLICHT_VERSION_MINOR < 9)
- wchar_t wc = L'_';
- mbtowc( &wc, (char *) &event.KeyInput.Char, sizeof(event.KeyInput.Char) );
- prompt.input(wc);
- #else
- prompt.input(event.KeyInput.Char);
- #endif
+ prompt.input(event.KeyInput.Char);
return true;
}
}
else if(event.EventType == EET_MOUSE_INPUT_EVENT)
{
- if(event.MouseInput.Event == EMIE_MOUSE_WHEEL)
+ if (event.MouseInput.Event == EMIE_MOUSE_WHEEL)
{
s32 rows = myround(-3.0 * event.MouseInput.Wheel);
m_chat_backend->scroll(rows);
}
+ // Middle click or ctrl-click opens weblink, if enabled in config
+ else if(m_cache_clickable_chat_weblinks && (
+ event.MouseInput.Event == EMIE_MMOUSE_PRESSED_DOWN ||
+ (event.MouseInput.Event == EMIE_LMOUSE_PRESSED_DOWN && m_is_ctrl_down)
+ ))
+ {
+ // If clicked within console output region
+ if (event.MouseInput.Y / m_fontsize.Y < (m_height / m_fontsize.Y) - 1 )
+ {
+ // Translate pixel position to font position
+ middleClick(event.MouseInput.X / m_fontsize.X, event.MouseInput.Y / m_fontsize.Y);
+ }
+ }
}
+#if (IRRLICHT_VERSION_MT_REVISION >= 2)
+ else if(event.EventType == EET_STRING_INPUT_EVENT)
+ {
+ prompt.input(std::wstring(event.StringInput.Str->c_str()));
+ return true;
+ }
+#endif
return Parent ? Parent->OnEvent(event) : false;
}
@@ -639,3 +667,62 @@ void GUIChatConsole::setVisible(bool visible)
}
}
+void GUIChatConsole::middleClick(s32 col, s32 row)
+{
+ // Prevent accidental rapid clicking
+ static u64 s_oldtime = 0;
+ u64 newtime = porting::getTimeMs();
+
+ // 0.6 seconds should suffice
+ if (newtime - s_oldtime < 600)
+ return;
+ s_oldtime = newtime;
+
+ const std::vector<ChatFormattedFragment> &
+ frags = m_chat_backend->getConsoleBuffer().getFormattedLine(row).fragments;
+ std::string weblink = ""; // from frag meta
+
+ // Identify targetted fragment, if exists
+ int indx = frags.size() - 1;
+ if (indx < 0) {
+ // Invalid row, frags is empty
+ return;
+ }
+ // Scan from right to left, offset by 1 font space because left margin
+ while (indx > -1 && (u32)col < frags[indx].column + 1) {
+ --indx;
+ }
+ if (indx > -1) {
+ weblink = frags[indx].weblink;
+ // Note if(indx < 0) then a frag somehow had a corrupt column field
+ }
+
+ /*
+ // Debug help. Please keep this in case adjustments are made later.
+ std::string ws;
+ ws = "Middleclick: (" + std::to_string(col) + ',' + std::to_string(row) + ')' + " frags:";
+ // show all frags <position>(<length>) for the clicked row
+ for (u32 i=0;i<frags.size();++i) {
+ if (indx == int(i))
+ // tag the actual clicked frag
+ ws += '*';
+ ws += std::to_string(frags.at(i).column) + '('
+ + std::to_string(frags.at(i).text.size()) + "),";
+ }
+ actionstream << ws << std::endl;
+ */
+
+ // User notification
+ if (weblink.size() != 0) {
+ std::ostringstream msg;
+ msg << " * ";
+ if (porting::open_url(weblink)) {
+ msg << gettext("Opening webpage");
+ }
+ else {
+ msg << gettext("Failed to open webpage");
+ }
+ msg << " '" << weblink << "'";
+ m_chat_backend->addUnparsedMessage(utf8_to_wide(msg.str()));
+ }
+}
diff --git a/src/gui/guiChatConsole.h b/src/gui/guiChatConsole.h
index 896342ab0..32628f0d8 100644
--- a/src/gui/guiChatConsole.h
+++ b/src/gui/guiChatConsole.h
@@ -72,6 +72,8 @@ public:
virtual void setVisible(bool visible);
+ virtual bool acceptsIME() { return true; }
+
private:
void reformatConsole();
void recalculateConsolePosition();
@@ -82,6 +84,9 @@ private:
void drawText();
void drawPrompt();
+ // If clicked fragment has a web url, send it to the system default web browser
+ void middleClick(s32 col, s32 row);
+
private:
ChatBackend* m_chat_backend;
Client* m_client;
@@ -124,4 +129,9 @@ private:
// font
gui::IGUIFont *m_font = nullptr;
v2u32 m_fontsize;
+
+ // Enable clickable chat weblinks
+ bool m_cache_clickable_chat_weblinks;
+ // Track if a ctrl key is currently held down
+ bool m_is_ctrl_down;
};
diff --git a/src/gui/guiConfirmRegistration.cpp b/src/gui/guiConfirmRegistration.cpp
index 4a798c39b..b8887a4af 100644
--- a/src/gui/guiConfirmRegistration.cpp
+++ b/src/gui/guiConfirmRegistration.cpp
@@ -25,9 +25,13 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include <IGUIButton.h>
#include <IGUIStaticText.h>
#include <IGUIFont.h>
-#include "intlGUIEditBox.h"
+#include "guiEditBoxWithScrollbar.h"
#include "porting.h"
+#ifdef HAVE_TOUCHSCREENGUI
+ #include "client/renderingengine.h"
+#endif
+
#include "gettext.h"
// Continuing from guiPasswordChange.cpp
@@ -45,7 +49,7 @@ GUIConfirmRegistration::GUIConfirmRegistration(gui::IGUIEnvironment *env,
m_client(client), m_playername(playername), m_password(password),
m_aborted(aborted), m_tsrc(tsrc)
{
-#ifdef __ANDROID__
+#ifdef HAVE_TOUCHSCREENGUI
m_touchscreen_visible = false;
#endif
}
@@ -73,8 +77,8 @@ void GUIConfirmRegistration::regenerateGui(v2u32 screensize)
/*
Calculate new sizes and positions
*/
-#ifdef __ANDROID__
- const float s = m_gui_scale * porting::getDisplayDensity() / 2;
+#ifdef HAVE_TOUCHSCREENGUI
+ const float s = m_gui_scale * RenderingEngine::getDisplayDensity() / 2;
#else
const float s = m_gui_scale;
#endif
@@ -109,10 +113,9 @@ void GUIConfirmRegistration::regenerateGui(v2u32 screensize)
porting::mt_snprintf(info_text_buf, sizeof(info_text_buf),
info_text_template.c_str(), m_playername.c_str());
- wchar_t *info_text_buf_wide = utf8_to_wide_c(info_text_buf);
- gui::IGUIEditBox *e = new gui::intlGUIEditBox(info_text_buf_wide, true,
- Environment, this, ID_intotext, rect2, false, true);
- delete[] info_text_buf_wide;
+ std::wstring info_text_w = utf8_to_wide(info_text_buf);
+ gui::IGUIEditBox *e = new GUIEditBoxWithScrollBar(info_text_w.c_str(),
+ true, Environment, this, ID_intotext, rect2, false, true);
e->drop();
e->setMultiLine(true);
e->setWordWrap(true);
diff --git a/src/gui/guiEditBox.cpp b/src/gui/guiEditBox.cpp
index 79979dbc3..4a0f5013d 100644
--- a/src/gui/guiEditBox.cpp
+++ b/src/gui/guiEditBox.cpp
@@ -19,11 +19,13 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "guiEditBox.h"
+#include "IrrCompileConfig.h"
#include "IGUISkin.h"
#include "IGUIEnvironment.h"
#include "IGUIFont.h"
#include "porting.h"
+#include "util/string.h"
GUIEditBox::~GUIEditBox()
{
@@ -208,35 +210,19 @@ bool GUIEditBox::OnEvent(const SEvent &event)
}
}
break;
- case EET_KEY_INPUT_EVENT: {
-#if (defined(__linux__) || defined(__FreeBSD__)) || defined(__DragonFly__)
- // ################################################################
- // 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
+ case EET_KEY_INPUT_EVENT:
if (processKey(event))
return true;
-#endif // defined(linux)
-
break;
- }
case EET_MOUSE_INPUT_EVENT:
if (processMouse(event))
return true;
break;
+#if (IRRLICHT_VERSION_MT_REVISION >= 2)
+ case EET_STRING_INPUT_EVENT:
+ inputString(*event.StringInput.Str);
+ return true;
+#endif
default:
break;
}
@@ -247,10 +233,6 @@ bool GUIEditBox::OnEvent(const SEvent &event)
bool GUIEditBox::processKey(const SEvent &event)
{
- if (!m_writable) {
- return false;
- }
-
if (!event.KeyInput.PressedDown)
return false;
@@ -536,8 +518,7 @@ void GUIEditBox::onKeyControlC(const SEvent &event)
const s32 realmbgn = m_mark_begin < m_mark_end ? m_mark_begin : m_mark_end;
const s32 realmend = m_mark_begin < m_mark_end ? m_mark_end : m_mark_begin;
- core::stringc s;
- s = Text.subString(realmbgn, realmend - realmbgn).c_str();
+ std::string s = stringw_to_utf8(Text.subString(realmbgn, realmend - realmbgn));
m_operator->copyToClipboard(s.c_str());
}
@@ -546,6 +527,9 @@ bool GUIEditBox::onKeyControlX(const SEvent &event, s32 &mark_begin, s32 &mark_e
// First copy to clipboard
onKeyControlC(event);
+ if (!m_writable)
+ return false;
+
if (m_passwordbox || !m_operator || m_mark_begin == m_mark_end)
return false;
@@ -571,7 +555,7 @@ bool GUIEditBox::onKeyControlX(const SEvent &event, s32 &mark_begin, s32 &mark_e
bool GUIEditBox::onKeyControlV(const SEvent &event, s32 &mark_begin, s32 &mark_end)
{
- if (!isEnabled())
+ if (!isEnabled() || !m_writable)
return false;
// paste from the clipboard
@@ -583,29 +567,28 @@ bool GUIEditBox::onKeyControlV(const SEvent &event, s32 &mark_begin, s32 &mark_e
// add new character
if (const c8 *p = m_operator->getTextFromClipboard()) {
+ core::stringw inserted_text = utf8_to_stringw(p);
if (m_mark_begin == m_mark_end) {
// insert text
core::stringw s = Text.subString(0, m_cursor_pos);
- s.append(p);
+ s.append(inserted_text);
s.append(Text.subString(
m_cursor_pos, Text.size() - m_cursor_pos));
if (!m_max || s.size() <= m_max) {
Text = s;
- s = p;
- m_cursor_pos += s.size();
+ m_cursor_pos += inserted_text.size();
}
} else {
// replace text
core::stringw s = Text.subString(0, realmbgn);
- s.append(p);
+ s.append(inserted_text);
s.append(Text.subString(realmend, Text.size() - realmend));
if (!m_max || s.size() <= m_max) {
Text = s;
- s = p;
- m_cursor_pos = realmbgn + s.size();
+ m_cursor_pos = realmbgn + inserted_text.size();
}
}
}
@@ -617,7 +600,7 @@ bool GUIEditBox::onKeyControlV(const SEvent &event, s32 &mark_begin, s32 &mark_e
bool GUIEditBox::onKeyBack(const SEvent &event, s32 &mark_begin, s32 &mark_end)
{
- if (!isEnabled() || Text.empty())
+ if (!isEnabled() || Text.empty() || !m_writable)
return false;
core::stringw s;
@@ -655,7 +638,7 @@ bool GUIEditBox::onKeyBack(const SEvent &event, s32 &mark_begin, s32 &mark_end)
bool GUIEditBox::onKeyDelete(const SEvent &event, s32 &mark_begin, s32 &mark_end)
{
- if (!isEnabled() || Text.empty())
+ if (!isEnabled() || Text.empty() || !m_writable)
return false;
core::stringw s;
@@ -691,39 +674,44 @@ bool GUIEditBox::onKeyDelete(const SEvent &event, s32 &mark_begin, s32 &mark_end
void GUIEditBox::inputChar(wchar_t c)
{
- if (!isEnabled() || !m_writable)
+ if (c == 0)
return;
+ core::stringw s(&c, 1);
+ inputString(s);
+}
- if (c != 0) {
- if (Text.size() < m_max || m_max == 0) {
- core::stringw s;
-
- if (m_mark_begin != m_mark_end) {
- // clang-format off
- // replace marked text
- s32 real_begin = m_mark_begin < m_mark_end ? m_mark_begin : m_mark_end;
- s32 real_end = m_mark_begin < m_mark_end ? m_mark_end : m_mark_begin;
-
- s = Text.subString(0, real_begin);
- s.append(c);
- s.append(Text.subString(real_end, Text.size() - real_end));
- Text = s;
- m_cursor_pos = real_begin + 1;
- // clang-format on
- } else {
- // add new character
- s = Text.subString(0, m_cursor_pos);
- s.append(c);
- s.append(Text.subString(m_cursor_pos,
- Text.size() - m_cursor_pos));
- Text = s;
- ++m_cursor_pos;
- }
+void GUIEditBox::inputString(const core::stringw &str)
+{
+ if (!isEnabled() || !m_writable)
+ return;
- m_blink_start_time = porting::getTimeMs();
- setTextMarkers(0, 0);
+ u32 len = str.size();
+ if (Text.size()+len <= m_max || m_max == 0) {
+ core::stringw s;
+ if (m_mark_begin != m_mark_end) {
+ // replace marked text
+ s32 real_begin = m_mark_begin < m_mark_end ? m_mark_begin : m_mark_end;
+ s32 real_end = m_mark_begin < m_mark_end ? m_mark_end : m_mark_begin;
+
+ s = Text.subString(0, real_begin);
+ s.append(str);
+ s.append(Text.subString(real_end, Text.size() - real_end));
+ Text = s;
+ m_cursor_pos = real_begin + len;
+ } else {
+ // append string
+ s = Text.subString(0, m_cursor_pos);
+ s.append(str);
+ s.append(Text.subString(m_cursor_pos,
+ Text.size() - m_cursor_pos));
+ Text = s;
+ m_cursor_pos += len;
}
+
+ m_blink_start_time = porting::getTimeMs();
+ setTextMarkers(0, 0);
}
+
breakText();
sendGuiEvent(EGET_EDITBOX_CHANGED);
calculateScrollPos();
@@ -858,54 +846,3 @@ void GUIEditBox::updateVScrollBar()
}
}
}
-
-void GUIEditBox::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.empty())
- setPasswordBox(in->getAttributeAsBool("PasswordBox"));
- else
- setPasswordBox(in->getAttributeAsBool("PasswordBox"), ch[0]);
-
- setTextAlignment((EGUI_ALIGNMENT)in->getAttributeAsEnumeration(
- "HTextAlign", GUIAlignmentNames),
- (EGUI_ALIGNMENT)in->getAttributeAsEnumeration(
- "VTextAlign", GUIAlignmentNames));
-
- setWritable(in->getAttributeAsBool("Writable"));
- // setOverrideFont(in->getAttributeAsFont("OverrideFont"));
-}
-
-//! Writes attributes of the element.
-void GUIEditBox::serializeAttributes(
- io::IAttributes *out, io::SAttributeReadWriteOptions *options = 0) const
-{
- // IGUIEditBox::serializeAttributes(out,options);
-
- out->addBool("OverrideColorEnabled", m_override_color_enabled);
- out->addColor("OverrideColor", m_override_color);
- // out->addFont("OverrideFont",m_override_font);
- out->addInt("MaxChars", m_max);
- out->addBool("WordWrap", m_word_wrap);
- out->addBool("MultiLine", m_multiline);
- out->addBool("AutoScroll", m_autoscroll);
- out->addBool("PasswordBox", m_passwordbox);
- core::stringw ch = L" ";
- ch[0] = m_passwordchar;
- out->addString("PasswordChar", ch.c_str());
- out->addEnum("HTextAlign", m_halign, GUIAlignmentNames);
- out->addEnum("VTextAlign", m_valign, GUIAlignmentNames);
- out->addBool("Writable", m_writable);
-
- IGUIEditBox::serializeAttributes(out, options);
-}
diff --git a/src/gui/guiEditBox.h b/src/gui/guiEditBox.h
index c616d75d1..4c7413f54 100644
--- a/src/gui/guiEditBox.h
+++ b/src/gui/guiEditBox.h
@@ -130,13 +130,7 @@ public:
//! called if an event happened.
virtual bool OnEvent(const SEvent &event);
- //! 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);
+ virtual bool acceptsIME() { return isEnabled() && m_writable; };
protected:
virtual void breakText() = 0;
@@ -156,6 +150,7 @@ protected:
virtual s32 getCursorPos(s32 x, s32 y) = 0;
bool processKey(const SEvent &event);
+ virtual void inputString(const core::stringw &str);
virtual void inputChar(wchar_t c);
//! returns the line number that the cursor is on
diff --git a/src/gui/guiEditBoxWithScrollbar.cpp b/src/gui/guiEditBoxWithScrollbar.cpp
index c72070787..1b7f7832a 100644
--- a/src/gui/guiEditBoxWithScrollbar.cpp
+++ b/src/gui/guiEditBoxWithScrollbar.cpp
@@ -620,6 +620,17 @@ void GUIEditBoxWithScrollBar::createVScrollBar()
if (Environment)
skin = Environment->getSkin();
+ s32 fontHeight = 1;
+
+ if (m_override_font) {
+ fontHeight = m_override_font->getDimension(L"Ay").Height;
+ } else {
+ IGUIFont *font;
+ if (skin && (font = skin->getFont())) {
+ fontHeight = font->getDimension(L"Ay").Height;
+ }
+ }
+
m_scrollbar_width = skin ? skin->getSize(gui::EGDS_SCROLLBAR_SIZE) : 16;
irr::core::rect<s32> scrollbarrect = m_frame_rect;
@@ -628,8 +639,8 @@ void GUIEditBoxWithScrollBar::createVScrollBar()
scrollbarrect, false, true);
m_vscrollbar->setVisible(false);
- m_vscrollbar->setSmallStep(1);
- m_vscrollbar->setLargeStep(1);
+ m_vscrollbar->setSmallStep(3 * fontHeight);
+ m_vscrollbar->setLargeStep(10 * fontHeight);
}
@@ -641,26 +652,6 @@ void GUIEditBoxWithScrollBar::setBackgroundColor(const video::SColor &bg_color)
m_bg_color_used = true;
}
-//! Writes attributes of the element.
-void GUIEditBoxWithScrollBar::serializeAttributes(io::IAttributes* out, io::SAttributeReadWriteOptions* options = 0) const
-{
- out->addBool("Border", m_border);
- out->addBool("Background", m_background);
- // out->addFont("OverrideFont", OverrideFont);
-
- GUIEditBox::serializeAttributes(out, options);
-}
-
-
-//! Reads attributes of the element
-void GUIEditBoxWithScrollBar::deserializeAttributes(io::IAttributes* in, io::SAttributeReadWriteOptions* options = 0)
-{
- GUIEditBox::deserializeAttributes(in, options);
-
- setDrawBorder(in->getAttributeAsBool("Border"));
- setDrawBackground(in->getAttributeAsBool("Background"));
-}
-
bool GUIEditBoxWithScrollBar::isDrawBackgroundEnabled() const { return false; }
bool GUIEditBoxWithScrollBar::isDrawBorderEnabled() const { return false; }
void GUIEditBoxWithScrollBar::setCursorChar(const wchar_t cursorChar) { }
diff --git a/src/gui/guiEditBoxWithScrollbar.h b/src/gui/guiEditBoxWithScrollbar.h
index 3f7450dcb..cea482fc2 100644
--- a/src/gui/guiEditBoxWithScrollbar.h
+++ b/src/gui/guiEditBoxWithScrollbar.h
@@ -31,12 +31,6 @@ public:
//! Change the background color
virtual void setBackgroundColor(const video::SColor &bg_color);
- //! 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);
-
virtual bool isDrawBackgroundEnabled() const;
virtual bool isDrawBorderEnabled() const;
virtual void setCursorChar(const wchar_t cursorChar);
diff --git a/src/gui/guiEngine.cpp b/src/gui/guiEngine.cpp
index 93463ad70..b65b31304 100644
--- a/src/gui/guiEngine.cpp
+++ b/src/gui/guiEngine.cpp
@@ -104,16 +104,22 @@ void MenuMusicFetcher::fetchSounds(const std::string &name,
if(m_fetched.count(name))
return;
m_fetched.insert(name);
- std::string base;
- base = porting::path_share + DIR_DELIM + "sounds";
- dst_paths.insert(base + DIR_DELIM + name + ".ogg");
- int i;
- for(i=0; i<10; i++)
- dst_paths.insert(base + DIR_DELIM + name + "."+itos(i)+".ogg");
- base = porting::path_user + DIR_DELIM + "sounds";
- dst_paths.insert(base + DIR_DELIM + name + ".ogg");
- for(i=0; i<10; i++)
- dst_paths.insert(base + DIR_DELIM + name + "."+itos(i)+".ogg");
+ std::vector<fs::DirListNode> list;
+ // Reusable local function
+ auto add_paths = [&dst_paths](const std::string name, const std::string base = "") {
+ dst_paths.insert(base + name + ".ogg");
+ for (int i = 0; i < 10; i++)
+ dst_paths.insert(base + name + "." + itos(i) + ".ogg");
+ };
+ // Allow full paths
+ if (name.find(DIR_DELIM_CHAR) != std::string::npos) {
+ add_paths(name);
+ } else {
+ std::string share_prefix = porting::path_share + DIR_DELIM;
+ add_paths(name, share_prefix + "sounds" + DIR_DELIM);
+ std::string user_prefix = porting::path_user + DIR_DELIM;
+ add_paths(name, user_prefix + "sounds" + DIR_DELIM);
+ }
}
/******************************************************************************/
@@ -121,12 +127,14 @@ void MenuMusicFetcher::fetchSounds(const std::string &name,
/******************************************************************************/
GUIEngine::GUIEngine(JoystickController *joystick,
gui::IGUIElement *parent,
+ RenderingEngine *rendering_engine,
IMenuManager *menumgr,
MainMenuData *data,
bool &kill) :
+ m_rendering_engine(rendering_engine),
m_parent(parent),
m_menumanager(menumgr),
- m_smgr(RenderingEngine::get_scene_manager()),
+ m_smgr(rendering_engine->get_scene_manager()),
m_data(data),
m_kill(kill)
{
@@ -138,7 +146,7 @@ GUIEngine::GUIEngine(JoystickController *joystick,
m_buttonhandler = new TextDestGuiEngine(this);
//create texture source
- m_texture_source = new MenuTextureSource(RenderingEngine::get_video_driver());
+ m_texture_source = new MenuTextureSource(rendering_engine->get_video_driver());
//create soundmanager
MenuMusicFetcher soundfetcher;
@@ -156,7 +164,7 @@ GUIEngine::GUIEngine(JoystickController *joystick,
g_fontengine->getTextHeight());
rect += v2s32(4, 0);
- m_irr_toplefttext = gui::StaticText::add(RenderingEngine::get_gui_env(),
+ m_irr_toplefttext = gui::StaticText::add(rendering_engine->get_gui_env(),
m_toplefttext, rect, false, true, 0, -1);
//create formspecsource
@@ -168,6 +176,7 @@ GUIEngine::GUIEngine(JoystickController *joystick,
-1,
m_menumanager,
NULL /* &client */,
+ m_rendering_engine->get_gui_env(),
m_texture_source,
m_sound_manager,
m_formspecgui,
@@ -232,7 +241,7 @@ void GUIEngine::run()
{
// Always create clouds because they may or may not be
// needed based on the game selected
- video::IVideoDriver *driver = RenderingEngine::get_video_driver();
+ video::IVideoDriver *driver = m_rendering_engine->get_video_driver();
cloudInit();
@@ -259,10 +268,10 @@ void GUIEngine::run()
fog_pixelfog, fog_rangefog);
}
- while (RenderingEngine::run() && (!m_startgame) && (!m_kill)) {
+ while (m_rendering_engine->run() && (!m_startgame) && (!m_kill)) {
const irr::core::dimension2d<u32> &current_screen_size =
- RenderingEngine::get_video_driver()->getScreenSize();
+ m_rendering_engine->get_video_driver()->getScreenSize();
// Verify if window size has changed and save it if it's the case
// Ensure evaluating settings->getBool after verifying screensize
// First condition is cheaper
@@ -293,11 +302,11 @@ void GUIEngine::run()
drawHeader(driver);
drawFooter(driver);
- RenderingEngine::get_gui_env()->drawAll();
+ m_rendering_engine->get_gui_env()->drawAll();
driver->endScene();
- IrrlichtDevice *device = RenderingEngine::get_raw_device();
+ IrrlichtDevice *device = m_rendering_engine->get_raw_device();
u32 frametime_min = 1000 / (device->isWindowFocused()
? g_settings->getFloat("fps_max")
: g_settings->getFloat("fps_max_unfocused"));
@@ -330,7 +339,7 @@ GUIEngine::~GUIEngine()
//clean up texture pointers
for (image_definition &texture : m_textures) {
if (texture.texture)
- RenderingEngine::get_video_driver()->removeTexture(texture.texture);
+ m_rendering_engine->get_video_driver()->removeTexture(texture.texture);
}
delete m_texture_source;
@@ -350,13 +359,13 @@ void GUIEngine::cloudInit()
v3f(0,0,0), v3f(0, 60, 100));
m_cloud.camera->setFarValue(10000);
- m_cloud.lasttime = RenderingEngine::get_timer_time();
+ m_cloud.lasttime = m_rendering_engine->get_timer_time();
}
/******************************************************************************/
void GUIEngine::cloudPreProcess()
{
- u32 time = RenderingEngine::get_timer_time();
+ u32 time = m_rendering_engine->get_timer_time();
if(time > m_cloud.lasttime)
m_cloud.dtime = (time - m_cloud.lasttime) / 1000.0;
@@ -377,7 +386,7 @@ void GUIEngine::cloudPostProcess(u32 frametime_min, IrrlichtDevice *device)
u32 busytime_u32;
// not using getRealTime is necessary for wine
- u32 time = RenderingEngine::get_timer_time();
+ u32 time = m_rendering_engine->get_timer_time();
if(time > m_cloud.lasttime)
busytime_u32 = time - m_cloud.lasttime;
else
@@ -434,9 +443,22 @@ void GUIEngine::drawBackground(video::IVideoDriver *driver)
return;
}
+ // Chop background image to the smaller screen dimension
+ v2u32 bg_size = screensize;
+ v2f32 scale(
+ (f32) bg_size.X / sourcesize.X,
+ (f32) bg_size.Y / sourcesize.Y);
+ if (scale.X < scale.Y)
+ bg_size.X = (int) (scale.Y * sourcesize.X);
+ else
+ bg_size.Y = (int) (scale.X * sourcesize.Y);
+ v2s32 offset = v2s32(
+ (s32) screensize.X - (s32) bg_size.X,
+ (s32) screensize.Y - (s32) bg_size.Y
+ ) / 2;
/* Draw background texture */
draw2DImageFilterScaled(driver, texture,
- core::rect<s32>(0, 0, screensize.X, screensize.Y),
+ core::rect<s32>(offset.X, offset.Y, bg_size.X + offset.X, bg_size.Y + offset.Y),
core::rect<s32>(0, 0, sourcesize.X, sourcesize.Y),
NULL, NULL, true);
}
@@ -528,7 +550,7 @@ void GUIEngine::drawFooter(video::IVideoDriver *driver)
bool GUIEngine::setTexture(texture_layer layer, const std::string &texturepath,
bool tile_image, unsigned int minsize)
{
- video::IVideoDriver *driver = RenderingEngine::get_video_driver();
+ video::IVideoDriver *driver = m_rendering_engine->get_video_driver();
if (m_textures[layer].texture) {
driver->removeTexture(m_textures[layer].texture);
@@ -595,7 +617,7 @@ void GUIEngine::updateTopLeftTextSize()
rect += v2s32(4, 0);
m_irr_toplefttext->remove();
- m_irr_toplefttext = gui::StaticText::add(RenderingEngine::get_gui_env(),
+ m_irr_toplefttext = gui::StaticText::add(m_rendering_engine->get_gui_env(),
m_toplefttext, rect, false, true, 0, -1);
}
@@ -611,10 +633,3 @@ void GUIEngine::stopSound(s32 handle)
{
m_sound_manager->stopSound(handle);
}
-
-/******************************************************************************/
-unsigned int GUIEngine::queueAsync(const std::string &serialized_func,
- const std::string &serialized_params)
-{
- return m_script->queueAsync(serialized_func, serialized_params);
-}
diff --git a/src/gui/guiEngine.h b/src/gui/guiEngine.h
index eef1ad8aa..d7e6485ef 100644
--- a/src/gui/guiEngine.h
+++ b/src/gui/guiEngine.h
@@ -50,6 +50,7 @@ struct image_definition {
/* forward declarations */
/******************************************************************************/
class GUIEngine;
+class RenderingEngine;
class MainMenuScripting;
class Clouds;
struct MainMenuData;
@@ -150,6 +151,7 @@ public:
*/
GUIEngine(JoystickController *joystick,
gui::IGUIElement *parent,
+ RenderingEngine *rendering_engine,
IMenuManager *menumgr,
MainMenuData *data,
bool &kill);
@@ -173,10 +175,6 @@ public:
return m_scriptdir;
}
- /** pass async callback to scriptengine **/
- unsigned int queueAsync(const std::string &serialized_fct,
- const std::string &serialized_params);
-
private:
/** find and run the main menu script */
@@ -188,6 +186,7 @@ private:
/** update size of topleftext element */
void updateTopLeftTextSize();
+ RenderingEngine *m_rendering_engine = nullptr;
/** parent gui element */
gui::IGUIElement *m_parent = nullptr;
/** manager to add menus to */
diff --git a/src/gui/guiFormSpecMenu.cpp b/src/gui/guiFormSpecMenu.cpp
index 5aa6dc9ae..85bd04900 100644
--- a/src/gui/guiFormSpecMenu.cpp
+++ b/src/gui/guiFormSpecMenu.cpp
@@ -65,7 +65,6 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "guiInventoryList.h"
#include "guiItemImage.h"
#include "guiScrollContainer.h"
-#include "intlGUIEditBox.h"
#include "guiHyperText.h"
#include "guiScene.h"
@@ -82,6 +81,13 @@ with this program; if not, write to the Free Software Foundation, Inc.,
" specified: \"" << parts[b] << "\"" << std::endl; \
return; \
}
+
+#define MY_CHECKCLIENT(a) \
+ if (!m_client) { \
+ errorstream << "Attempted to use element " << a << " with m_client == nullptr." << std::endl; \
+ return; \
+ }
+
/*
GUIFormSpecMenu
*/
@@ -97,10 +103,10 @@ inline u32 clamp_u8(s32 value)
GUIFormSpecMenu::GUIFormSpecMenu(JoystickController *joystick,
gui::IGUIElement *parent, s32 id, IMenuManager *menumgr,
- Client *client, ISimpleTextureSource *tsrc, ISoundManager *sound_manager,
- IFormSource *fsrc, TextDest *tdst,
+ Client *client, gui::IGUIEnvironment *guienv, ISimpleTextureSource *tsrc,
+ ISoundManager *sound_manager, IFormSource *fsrc, TextDest *tdst,
const std::string &formspecPrepend, bool remap_dbl_click):
- GUIModalMenu(RenderingEngine::get_gui_env(), parent, id, menumgr, remap_dbl_click),
+ GUIModalMenu(guienv, parent, id, menumgr, remap_dbl_click),
m_invmgr(client),
m_tsrc(tsrc),
m_sound_manager(sound_manager),
@@ -146,12 +152,12 @@ GUIFormSpecMenu::~GUIFormSpecMenu()
}
void GUIFormSpecMenu::create(GUIFormSpecMenu *&cur_formspec, Client *client,
- JoystickController *joystick, IFormSource *fs_src, TextDest *txt_dest,
- const std::string &formspecPrepend, ISoundManager *sound_manager)
+ gui::IGUIEnvironment *guienv, JoystickController *joystick, IFormSource *fs_src,
+ TextDest *txt_dest, const std::string &formspecPrepend, ISoundManager *sound_manager)
{
if (cur_formspec == nullptr) {
cur_formspec = new GUIFormSpecMenu(joystick, guiroot, -1, &g_menumgr,
- client, client->getTextureSource(), sound_manager, fs_src,
+ client, guienv, client->getTextureSource(), sound_manager, fs_src,
txt_dest, formspecPrepend);
cur_formspec->doPause = false;
@@ -295,8 +301,20 @@ v2s32 GUIFormSpecMenu::getRealCoordinateGeometry(const std::vector<std::string>
return v2s32(stof(v_geom[0]) * imgsize.X, stof(v_geom[1]) * imgsize.Y);
}
+bool GUIFormSpecMenu::precheckElement(const std::string &name, const std::string &element,
+ size_t args_min, size_t args_max, std::vector<std::string> &parts)
+{
+ parts = split(element, ';');
+ if (parts.size() >= args_min && (parts.size() <= args_max || m_formspec_version > FORMSPEC_API_VERSION))
+ return true;
+
+ errorstream << "Invalid " << name << " element(" << parts.size() << "): '" << element << "'" << std::endl;
+ return false;
+}
+
void GUIFormSpecMenu::parseSize(parserData* data, const std::string &element)
{
+ // Note: do not use precheckElement due to "," separator.
std::vector<std::string> parts = split(element,',');
if (((parts.size() == 2) || parts.size() == 3) ||
@@ -309,7 +327,7 @@ void GUIFormSpecMenu::parseSize(parserData* data, const std::string &element)
data->invsize.Y = MYMAX(0, stof(parts[1]));
lockSize(false);
-#ifndef __ANDROID__
+#ifndef HAVE_TOUCHSCREENGUI
if (parts.size() == 3) {
if (parts[2] == "true") {
lockSize(true,v2u32(800,600));
@@ -350,14 +368,9 @@ void GUIFormSpecMenu::parseContainerEnd(parserData* data)
void GUIFormSpecMenu::parseScrollContainer(parserData *data, const std::string &element)
{
- std::vector<std::string> parts = split(element, ';');
-
- if (parts.size() < 4 ||
- (parts.size() > 5 && m_formspec_version <= FORMSPEC_API_VERSION)) {
- errorstream << "Invalid scroll_container start element (" << parts.size()
- << "): '" << element << "'" << std::endl;
+ std::vector<std::string> parts;
+ if (!precheckElement("scroll_container start", element, 4, 5, parts))
return;
- }
std::vector<std::string> v_pos = split(parts[0], ',');
std::vector<std::string> v_geom = split(parts[1], ',');
@@ -446,105 +459,95 @@ void GUIFormSpecMenu::parseScrollContainerEnd(parserData *data)
void GUIFormSpecMenu::parseList(parserData *data, const std::string &element)
{
- if (m_client == 0) {
- warningstream<<"invalid use of 'list' with m_client==0"<<std::endl;
- return;
- }
+ MY_CHECKCLIENT("list");
- std::vector<std::string> parts = split(element,';');
+ std::vector<std::string> parts;
+ if (!precheckElement("list", element, 4, 5, parts))
+ return;
- if (((parts.size() == 4) || (parts.size() == 5)) ||
- ((parts.size() > 5) && (m_formspec_version > FORMSPEC_API_VERSION)))
- {
- std::string location = parts[0];
- std::string listname = parts[1];
- std::vector<std::string> v_pos = split(parts[2],',');
- std::vector<std::string> v_geom = split(parts[3],',');
- std::string startindex;
- if (parts.size() == 5)
- startindex = parts[4];
+ std::string location = parts[0];
+ std::string listname = parts[1];
+ std::vector<std::string> v_pos = split(parts[2],',');
+ std::vector<std::string> v_geom = split(parts[3],',');
+ std::string startindex;
+ if (parts.size() == 5)
+ startindex = parts[4];
- MY_CHECKPOS("list",2);
- MY_CHECKGEOM("list",3);
+ MY_CHECKPOS("list",2);
+ MY_CHECKGEOM("list",3);
- InventoryLocation loc;
+ InventoryLocation loc;
- if (location == "context" || location == "current_name")
- loc = m_current_inventory_location;
- else
- loc.deSerialize(location);
+ if (location == "context" || location == "current_name")
+ loc = m_current_inventory_location;
+ else
+ loc.deSerialize(location);
- v2s32 geom;
- geom.X = stoi(v_geom[0]);
- geom.Y = stoi(v_geom[1]);
+ v2s32 geom;
+ geom.X = stoi(v_geom[0]);
+ geom.Y = stoi(v_geom[1]);
- s32 start_i = 0;
- if (!startindex.empty())
- start_i = stoi(startindex);
+ s32 start_i = 0;
+ if (!startindex.empty())
+ start_i = stoi(startindex);
- if (geom.X < 0 || geom.Y < 0 || start_i < 0) {
- errorstream << "Invalid list element: '" << element << "'" << std::endl;
- return;
- }
+ if (geom.X < 0 || geom.Y < 0 || start_i < 0) {
+ errorstream << "Invalid list element: '" << element << "'" << std::endl;
+ return;
+ }
- if (!data->explicit_size)
- warningstream << "invalid use of list without a size[] element" << std::endl;
+ if (!data->explicit_size)
+ warningstream << "invalid use of list without a size[] element" << std::endl;
- FieldSpec spec(
- "",
- L"",
- L"",
- 258 + m_fields.size(),
- 3
- );
+ FieldSpec spec(
+ "",
+ L"",
+ L"",
+ 258 + m_fields.size(),
+ 3
+ );
- auto style = getDefaultStyleForElement("list", spec.fname);
+ auto style = getDefaultStyleForElement("list", spec.fname);
- v2f32 slot_scale = style.getVector2f(StyleSpec::SIZE, v2f32(0, 0));
- v2f32 slot_size(
- slot_scale.X <= 0 ? imgsize.X : std::max<f32>(slot_scale.X * imgsize.X, 1),
- slot_scale.Y <= 0 ? imgsize.Y : std::max<f32>(slot_scale.Y * imgsize.Y, 1)
- );
+ v2f32 slot_scale = style.getVector2f(StyleSpec::SIZE, v2f32(0, 0));
+ v2f32 slot_size(
+ slot_scale.X <= 0 ? imgsize.X : std::max<f32>(slot_scale.X * imgsize.X, 1),
+ slot_scale.Y <= 0 ? imgsize.Y : std::max<f32>(slot_scale.Y * imgsize.Y, 1)
+ );
- v2f32 slot_spacing = style.getVector2f(StyleSpec::SPACING, v2f32(-1, -1));
- v2f32 default_spacing = data->real_coordinates ?
- v2f32(imgsize.X * 0.25f, imgsize.Y * 0.25f) :
- v2f32(spacing.X - imgsize.X, spacing.Y - imgsize.Y);
+ v2f32 slot_spacing = style.getVector2f(StyleSpec::SPACING, v2f32(-1, -1));
+ v2f32 default_spacing = data->real_coordinates ?
+ v2f32(imgsize.X * 0.25f, imgsize.Y * 0.25f) :
+ v2f32(spacing.X - imgsize.X, spacing.Y - imgsize.Y);
- slot_spacing.X = slot_spacing.X < 0 ? default_spacing.X :
- imgsize.X * slot_spacing.X;
- slot_spacing.Y = slot_spacing.Y < 0 ? default_spacing.Y :
- imgsize.Y * slot_spacing.Y;
+ slot_spacing.X = slot_spacing.X < 0 ? default_spacing.X :
+ imgsize.X * slot_spacing.X;
+ slot_spacing.Y = slot_spacing.Y < 0 ? default_spacing.Y :
+ imgsize.Y * slot_spacing.Y;
- slot_spacing += slot_size;
+ slot_spacing += slot_size;
- v2s32 pos = data->real_coordinates ? getRealCoordinateBasePos(v_pos) :
- getElementBasePos(&v_pos);
+ v2s32 pos = data->real_coordinates ? getRealCoordinateBasePos(v_pos) :
+ getElementBasePos(&v_pos);
- core::rect<s32> rect = core::rect<s32>(pos.X, pos.Y,
- pos.X + (geom.X - 1) * slot_spacing.X + slot_size.X,
- pos.Y + (geom.Y - 1) * slot_spacing.Y + slot_size.Y);
+ core::rect<s32> rect = core::rect<s32>(pos.X, pos.Y,
+ pos.X + (geom.X - 1) * slot_spacing.X + slot_size.X,
+ pos.Y + (geom.Y - 1) * slot_spacing.Y + slot_size.Y);
- GUIInventoryList *e = new GUIInventoryList(Environment, data->current_parent,
- spec.fid, rect, m_invmgr, loc, listname, geom, start_i,
- v2s32(slot_size.X, slot_size.Y), slot_spacing, this,
- data->inventorylist_options, m_font);
+ GUIInventoryList *e = new GUIInventoryList(Environment, data->current_parent,
+ spec.fid, rect, m_invmgr, loc, listname, geom, start_i,
+ v2s32(slot_size.X, slot_size.Y), slot_spacing, this,
+ data->inventorylist_options, m_font);
- e->setNotClipped(style.getBool(StyleSpec::NOCLIP, false));
+ e->setNotClipped(style.getBool(StyleSpec::NOCLIP, false));
- m_inventorylists.push_back(e);
- m_fields.push_back(spec);
- return;
- }
- errorstream<< "Invalid list element(" << parts.size() << "): '" << element << "'" << std::endl;
+ m_inventorylists.push_back(e);
+ m_fields.push_back(spec);
}
void GUIFormSpecMenu::parseListRing(parserData *data, const std::string &element)
{
- if (m_client == 0) {
- errorstream << "WARNING: invalid use of 'listring' with m_client==0" << std::endl;
- return;
- }
+ MY_CHECKCLIENT("listring");
std::vector<std::string> parts = split(element, ';');
@@ -579,157 +582,150 @@ void GUIFormSpecMenu::parseListRing(parserData *data, const std::string &element
void GUIFormSpecMenu::parseCheckbox(parserData* data, const std::string &element)
{
- std::vector<std::string> parts = split(element,';');
-
- if (((parts.size() >= 3) && (parts.size() <= 4)) ||
- ((parts.size() > 4) && (m_formspec_version > FORMSPEC_API_VERSION)))
- {
- std::vector<std::string> v_pos = split(parts[0],',');
- std::string name = parts[1];
- std::string label = parts[2];
- std::string selected;
+ std::vector<std::string> parts;
+ if (!precheckElement("checkbox", element, 3, 4, parts))
+ return;
- if (parts.size() >= 4)
- selected = parts[3];
+ std::vector<std::string> v_pos = split(parts[0],',');
+ std::string name = parts[1];
+ std::string label = parts[2];
+ std::string selected;
- MY_CHECKPOS("checkbox",0);
+ if (parts.size() >= 4)
+ selected = parts[3];
- bool fselected = false;
+ MY_CHECKPOS("checkbox",0);
- if (selected == "true")
- fselected = true;
+ bool fselected = false;
- std::wstring wlabel = translate_string(utf8_to_wide(unescape_string(label)));
- const core::dimension2d<u32> label_size = m_font->getDimension(wlabel.c_str());
- s32 cb_size = Environment->getSkin()->getSize(gui::EGDS_CHECK_BOX_WIDTH);
- s32 y_center = (std::max(label_size.Height, (u32)cb_size) + 1) / 2;
+ if (selected == "true")
+ fselected = true;
- v2s32 pos;
- core::rect<s32> rect;
+ std::wstring wlabel = translate_string(utf8_to_wide(unescape_string(label)));
+ const core::dimension2d<u32> label_size = m_font->getDimension(wlabel.c_str());
+ s32 cb_size = Environment->getSkin()->getSize(gui::EGDS_CHECK_BOX_WIDTH);
+ s32 y_center = (std::max(label_size.Height, (u32)cb_size) + 1) / 2;
- if (data->real_coordinates) {
- pos = getRealCoordinateBasePos(v_pos);
+ v2s32 pos;
+ core::rect<s32> rect;
- rect = core::rect<s32>(
- pos.X,
- pos.Y - y_center,
- pos.X + label_size.Width + cb_size + 7,
- pos.Y + y_center
- );
- } else {
- pos = getElementBasePos(&v_pos);
- rect = core::rect<s32>(
- pos.X,
- pos.Y + imgsize.Y / 2 - y_center,
- pos.X + label_size.Width + cb_size + 7,
- pos.Y + imgsize.Y / 2 + y_center
- );
- }
+ if (data->real_coordinates) {
+ pos = getRealCoordinateBasePos(v_pos);
- FieldSpec spec(
- name,
- wlabel, //Needed for displaying text on MSVC
- wlabel,
- 258+m_fields.size()
+ rect = core::rect<s32>(
+ pos.X,
+ pos.Y - y_center,
+ pos.X + label_size.Width + cb_size + 7,
+ pos.Y + y_center
+ );
+ } else {
+ pos = getElementBasePos(&v_pos);
+ rect = core::rect<s32>(
+ pos.X,
+ pos.Y + imgsize.Y / 2 - y_center,
+ pos.X + label_size.Width + cb_size + 7,
+ pos.Y + imgsize.Y / 2 + y_center
);
+ }
- spec.ftype = f_CheckBox;
+ FieldSpec spec(
+ name,
+ wlabel, //Needed for displaying text on MSVC
+ wlabel,
+ 258+m_fields.size()
+ );
- gui::IGUICheckBox *e = Environment->addCheckBox(fselected, rect,
- data->current_parent, spec.fid, spec.flabel.c_str());
+ spec.ftype = f_CheckBox;
- auto style = getDefaultStyleForElement("checkbox", name);
+ gui::IGUICheckBox *e = Environment->addCheckBox(fselected, rect,
+ data->current_parent, spec.fid, spec.flabel.c_str());
- spec.sound = style.get(StyleSpec::Property::SOUND, "");
+ auto style = getDefaultStyleForElement("checkbox", name);
- e->setNotClipped(style.getBool(StyleSpec::NOCLIP, false));
+ spec.sound = style.get(StyleSpec::Property::SOUND, "");
- if (spec.fname == m_focused_element) {
- Environment->setFocus(e);
- }
+ e->setNotClipped(style.getBool(StyleSpec::NOCLIP, false));
- e->grab();
- m_checkboxes.emplace_back(spec, e);
- m_fields.push_back(spec);
- return;
+ if (spec.fname == m_focused_element) {
+ Environment->setFocus(e);
}
- errorstream<< "Invalid checkbox element(" << parts.size() << "): '" << element << "'" << std::endl;
+
+ e->grab();
+ m_checkboxes.emplace_back(spec, e);
+ m_fields.push_back(spec);
}
void GUIFormSpecMenu::parseScrollBar(parserData* data, const std::string &element)
{
- std::vector<std::string> parts = split(element,';');
+ std::vector<std::string> parts;
+ if (!precheckElement("scrollbar", element, 5, 5, parts))
+ return;
- if (parts.size() >= 5) {
- std::vector<std::string> v_pos = split(parts[0],',');
- std::vector<std::string> v_geom = split(parts[1],',');
- std::string name = parts[3];
- std::string value = parts[4];
+ std::vector<std::string> v_pos = split(parts[0],',');
+ std::vector<std::string> v_geom = split(parts[1],',');
+ std::string name = parts[3];
+ std::string value = parts[4];
- MY_CHECKPOS("scrollbar",0);
- MY_CHECKGEOM("scrollbar",1);
+ MY_CHECKPOS("scrollbar",0);
+ MY_CHECKGEOM("scrollbar",1);
- v2s32 pos;
- v2s32 dim;
+ v2s32 pos;
+ v2s32 dim;
- if (data->real_coordinates) {
- pos = getRealCoordinateBasePos(v_pos);
- dim = getRealCoordinateGeometry(v_geom);
- } else {
- pos = getElementBasePos(&v_pos);
- dim.X = stof(v_geom[0]) * spacing.X;
- dim.Y = stof(v_geom[1]) * spacing.Y;
- }
+ if (data->real_coordinates) {
+ pos = getRealCoordinateBasePos(v_pos);
+ dim = getRealCoordinateGeometry(v_geom);
+ } else {
+ pos = getElementBasePos(&v_pos);
+ dim.X = stof(v_geom[0]) * spacing.X;
+ dim.Y = stof(v_geom[1]) * spacing.Y;
+ }
- core::rect<s32> rect =
- core::rect<s32>(pos.X, pos.Y, pos.X + dim.X, pos.Y + dim.Y);
+ core::rect<s32> rect =
+ core::rect<s32>(pos.X, pos.Y, pos.X + dim.X, pos.Y + dim.Y);
- FieldSpec spec(
- name,
- L"",
- L"",
- 258+m_fields.size()
- );
+ FieldSpec spec(
+ name,
+ L"",
+ L"",
+ 258+m_fields.size()
+ );
- bool is_horizontal = true;
+ bool is_horizontal = true;
- if (parts[2] == "vertical")
- is_horizontal = false;
+ if (parts[2] == "vertical")
+ is_horizontal = false;
- spec.ftype = f_ScrollBar;
- spec.send = true;
- GUIScrollBar *e = new GUIScrollBar(Environment, data->current_parent,
- spec.fid, rect, is_horizontal, true);
+ spec.ftype = f_ScrollBar;
+ spec.send = true;
+ GUIScrollBar *e = new GUIScrollBar(Environment, data->current_parent,
+ spec.fid, rect, is_horizontal, true);
- auto style = getDefaultStyleForElement("scrollbar", name);
- e->setNotClipped(style.getBool(StyleSpec::NOCLIP, false));
- e->setArrowsVisible(data->scrollbar_options.arrow_visiblity);
+ auto style = getDefaultStyleForElement("scrollbar", name);
+ e->setNotClipped(style.getBool(StyleSpec::NOCLIP, false));
+ e->setArrowsVisible(data->scrollbar_options.arrow_visiblity);
- s32 max = data->scrollbar_options.max;
- s32 min = data->scrollbar_options.min;
+ s32 max = data->scrollbar_options.max;
+ s32 min = data->scrollbar_options.min;
- e->setMax(max);
- e->setMin(min);
+ e->setMax(max);
+ e->setMin(min);
- e->setPos(stoi(parts[4]));
+ e->setPos(stoi(parts[4]));
- e->setSmallStep(data->scrollbar_options.small_step);
- e->setLargeStep(data->scrollbar_options.large_step);
+ e->setSmallStep(data->scrollbar_options.small_step);
+ e->setLargeStep(data->scrollbar_options.large_step);
- s32 scrollbar_size = is_horizontal ? dim.X : dim.Y;
+ s32 scrollbar_size = is_horizontal ? dim.X : dim.Y;
- e->setPageSize(scrollbar_size * (max - min + 1) / data->scrollbar_options.thumb_size);
+ e->setPageSize(scrollbar_size * (max - min + 1) / data->scrollbar_options.thumb_size);
- if (spec.fname == m_focused_element) {
- Environment->setFocus(e);
- }
-
- m_scrollbars.emplace_back(spec,e);
- m_fields.push_back(spec);
- return;
+ if (spec.fname == m_focused_element) {
+ Environment->setFocus(e);
}
- errorstream << "Invalid scrollbar element(" << parts.size() << "): '" << element
- << "'" << std::endl;
+
+ m_scrollbars.emplace_back(spec,e);
+ m_fields.push_back(spec);
}
void GUIFormSpecMenu::parseScrollBarOptions(parserData* data, const std::string &element)
@@ -787,11 +783,11 @@ void GUIFormSpecMenu::parseScrollBarOptions(parserData* data, const std::string
void GUIFormSpecMenu::parseImage(parserData* data, const std::string &element)
{
- std::vector<std::string> parts = split(element,';');
+ std::vector<std::string> parts;
+ if (!precheckElement("image", element, 2, 3, parts))
+ return;
- if ((parts.size() == 3) ||
- ((parts.size() > 3) && (m_formspec_version > FORMSPEC_API_VERSION)))
- {
+ if (parts.size() >= 3) {
std::vector<std::string> v_pos = split(parts[0],',');
std::vector<std::string> v_geom = split(parts[1],',');
std::string name = unescape_string(parts[2]);
@@ -843,54 +839,47 @@ void GUIFormSpecMenu::parseImage(parserData* data, const std::string &element)
return;
}
- if (parts.size() == 2) {
- std::vector<std::string> v_pos = split(parts[0],',');
- std::string name = unescape_string(parts[1]);
-
- MY_CHECKPOS("image", 0);
+ // Else: 2 arguments in "parts"
- v2s32 pos = getElementBasePos(&v_pos);
+ std::vector<std::string> v_pos = split(parts[0],',');
+ std::string name = unescape_string(parts[1]);
- if (!data->explicit_size)
- warningstream<<"invalid use of image without a size[] element"<<std::endl;
+ MY_CHECKPOS("image", 0);
- video::ITexture *texture = m_tsrc->getTexture(name);
- if (!texture) {
- errorstream << "GUIFormSpecMenu::parseImage() Unable to load texture:"
- << std::endl << "\t" << name << std::endl;
- return;
- }
+ v2s32 pos = getElementBasePos(&v_pos);
- FieldSpec spec(
- name,
- L"",
- L"",
- 258 + m_fields.size()
- );
- gui::IGUIImage *e = Environment->addImage(texture, pos, true,
- data->current_parent, spec.fid, 0);
- auto style = getDefaultStyleForElement("image", spec.fname);
- e->setNotClipped(style.getBool(StyleSpec::NOCLIP, m_formspec_version < 3));
- m_fields.push_back(spec);
+ if (!data->explicit_size)
+ warningstream<<"invalid use of image without a size[] element"<<std::endl;
- // images should let events through
- e->grab();
- m_clickthrough_elements.push_back(e);
+ video::ITexture *texture = m_tsrc->getTexture(name);
+ if (!texture) {
+ errorstream << "GUIFormSpecMenu::parseImage() Unable to load texture:"
+ << std::endl << "\t" << name << std::endl;
return;
}
- errorstream<< "Invalid image element(" << parts.size() << "): '" << element << "'" << std::endl;
+
+ FieldSpec spec(
+ name,
+ L"",
+ L"",
+ 258 + m_fields.size()
+ );
+ gui::IGUIImage *e = Environment->addImage(texture, pos, true,
+ data->current_parent, spec.fid, 0);
+ auto style = getDefaultStyleForElement("image", spec.fname);
+ e->setNotClipped(style.getBool(StyleSpec::NOCLIP, m_formspec_version < 3));
+ m_fields.push_back(spec);
+
+ // images should let events through
+ e->grab();
+ m_clickthrough_elements.push_back(e);
}
void GUIFormSpecMenu::parseAnimatedImage(parserData *data, const std::string &element)
{
- std::vector<std::string> parts = split(element, ';');
-
- if (parts.size() != 6 && parts.size() != 7 &&
- !(parts.size() > 7 && m_formspec_version > FORMSPEC_API_VERSION)) {
- errorstream << "Invalid animated_image element(" << parts.size()
- << "): '" << element << "'" << std::endl;
+ std::vector<std::string> parts;
+ if (!precheckElement("animated_image", element, 6, 7, parts))
return;
- }
std::vector<std::string> v_pos = split(parts[0], ',');
std::vector<std::string> v_geom = split(parts[1], ',');
@@ -945,218 +934,207 @@ void GUIFormSpecMenu::parseAnimatedImage(parserData *data, const std::string &el
void GUIFormSpecMenu::parseItemImage(parserData* data, const std::string &element)
{
- std::vector<std::string> parts = split(element,';');
+ std::vector<std::string> parts;
+ if (!precheckElement("item_image", element, 3, 3, parts))
+ return;
- if ((parts.size() == 3) ||
- ((parts.size() > 3) && (m_formspec_version > FORMSPEC_API_VERSION)))
- {
- std::vector<std::string> v_pos = split(parts[0],',');
- std::vector<std::string> v_geom = split(parts[1],',');
- std::string name = parts[2];
+ std::vector<std::string> v_pos = split(parts[0],',');
+ std::vector<std::string> v_geom = split(parts[1],',');
+ std::string name = parts[2];
- MY_CHECKPOS("itemimage",0);
- MY_CHECKGEOM("itemimage",1);
+ MY_CHECKPOS("item_image",0);
+ MY_CHECKGEOM("item_image",1);
- v2s32 pos;
- v2s32 geom;
+ v2s32 pos;
+ v2s32 geom;
- if (data->real_coordinates) {
- pos = getRealCoordinateBasePos(v_pos);
- geom = getRealCoordinateGeometry(v_geom);
- } else {
- pos = getElementBasePos(&v_pos);
- geom.X = stof(v_geom[0]) * (float)imgsize.X;
- geom.Y = stof(v_geom[1]) * (float)imgsize.Y;
- }
+ if (data->real_coordinates) {
+ pos = getRealCoordinateBasePos(v_pos);
+ geom = getRealCoordinateGeometry(v_geom);
+ } else {
+ pos = getElementBasePos(&v_pos);
+ geom.X = stof(v_geom[0]) * (float)imgsize.X;
+ geom.Y = stof(v_geom[1]) * (float)imgsize.Y;
+ }
- if(!data->explicit_size)
- warningstream<<"invalid use of item_image without a size[] element"<<std::endl;
+ if(!data->explicit_size)
+ warningstream<<"invalid use of item_image without a size[] element"<<std::endl;
- FieldSpec spec(
- "",
- L"",
- L"",
- 258 + m_fields.size(),
- 2
- );
- spec.ftype = f_ItemImage;
+ FieldSpec spec(
+ "",
+ L"",
+ L"",
+ 258 + m_fields.size(),
+ 2
+ );
+ spec.ftype = f_ItemImage;
- GUIItemImage *e = new GUIItemImage(Environment, data->current_parent, spec.fid,
- core::rect<s32>(pos, pos + geom), name, m_font, m_client);
- auto style = getDefaultStyleForElement("item_image", spec.fname);
- e->setNotClipped(style.getBool(StyleSpec::NOCLIP, false));
+ GUIItemImage *e = new GUIItemImage(Environment, data->current_parent, spec.fid,
+ core::rect<s32>(pos, pos + geom), name, m_font, m_client);
+ auto style = getDefaultStyleForElement("item_image", spec.fname);
+ e->setNotClipped(style.getBool(StyleSpec::NOCLIP, false));
- // item images should let events through
- m_clickthrough_elements.push_back(e);
+ // item images should let events through
+ m_clickthrough_elements.push_back(e);
- m_fields.push_back(spec);
- return;
- }
- errorstream<< "Invalid ItemImage element(" << parts.size() << "): '" << element << "'" << std::endl;
+ m_fields.push_back(spec);
}
void GUIFormSpecMenu::parseButton(parserData* data, const std::string &element,
const std::string &type)
{
- std::vector<std::string> parts = split(element,';');
-
- if ((parts.size() == 4) ||
- ((parts.size() > 4) && (m_formspec_version > FORMSPEC_API_VERSION)))
- {
- std::vector<std::string> v_pos = split(parts[0],',');
- std::vector<std::string> v_geom = split(parts[1],',');
- std::string name = parts[2];
- std::string label = parts[3];
+ std::vector<std::string> parts;
+ if (!precheckElement("button", element, 4, 4, parts))
+ return;
- MY_CHECKPOS("button",0);
- MY_CHECKGEOM("button",1);
+ std::vector<std::string> v_pos = split(parts[0],',');
+ std::vector<std::string> v_geom = split(parts[1],',');
+ std::string name = parts[2];
+ std::string label = parts[3];
- v2s32 pos;
- v2s32 geom;
- core::rect<s32> rect;
+ MY_CHECKPOS("button",0);
+ MY_CHECKGEOM("button",1);
- if (data->real_coordinates) {
- pos = getRealCoordinateBasePos(v_pos);
- geom = getRealCoordinateGeometry(v_geom);
- rect = core::rect<s32>(pos.X, pos.Y, pos.X+geom.X,
- pos.Y+geom.Y);
- } else {
- pos = getElementBasePos(&v_pos);
- geom.X = (stof(v_geom[0]) * spacing.X) - (spacing.X - imgsize.X);
- pos.Y += (stof(v_geom[1]) * (float)imgsize.Y)/2;
+ v2s32 pos;
+ v2s32 geom;
+ core::rect<s32> rect;
- rect = core::rect<s32>(pos.X, pos.Y - m_btn_height,
- pos.X + geom.X, pos.Y + m_btn_height);
- }
+ if (data->real_coordinates) {
+ pos = getRealCoordinateBasePos(v_pos);
+ geom = getRealCoordinateGeometry(v_geom);
+ rect = core::rect<s32>(pos.X, pos.Y, pos.X+geom.X,
+ pos.Y+geom.Y);
+ } else {
+ pos = getElementBasePos(&v_pos);
+ geom.X = (stof(v_geom[0]) * spacing.X) - (spacing.X - imgsize.X);
+ pos.Y += (stof(v_geom[1]) * (float)imgsize.Y)/2;
- if(!data->explicit_size)
- warningstream<<"invalid use of button without a size[] element"<<std::endl;
+ rect = core::rect<s32>(pos.X, pos.Y - m_btn_height,
+ pos.X + geom.X, pos.Y + m_btn_height);
+ }
- std::wstring wlabel = translate_string(utf8_to_wide(unescape_string(label)));
+ if(!data->explicit_size)
+ warningstream<<"invalid use of button without a size[] element"<<std::endl;
- FieldSpec spec(
- name,
- wlabel,
- L"",
- 258 + m_fields.size()
- );
- spec.ftype = f_Button;
- if(type == "button_exit")
- spec.is_exit = true;
+ std::wstring wlabel = translate_string(utf8_to_wide(unescape_string(label)));
- GUIButton *e = GUIButton::addButton(Environment, rect, m_tsrc,
- data->current_parent, spec.fid, spec.flabel.c_str());
+ FieldSpec spec(
+ name,
+ wlabel,
+ L"",
+ 258 + m_fields.size()
+ );
+ spec.ftype = f_Button;
+ if(type == "button_exit")
+ spec.is_exit = true;
- auto style = getStyleForElement(type, name, (type != "button") ? "button" : "");
+ GUIButton *e = GUIButton::addButton(Environment, rect, m_tsrc,
+ data->current_parent, spec.fid, spec.flabel.c_str());
- spec.sound = style[StyleSpec::STATE_DEFAULT].get(StyleSpec::Property::SOUND, "");
+ auto style = getStyleForElement(type, name, (type != "button") ? "button" : "");
- e->setStyles(style);
+ spec.sound = style[StyleSpec::STATE_DEFAULT].get(StyleSpec::Property::SOUND, "");
- if (spec.fname == m_focused_element) {
- Environment->setFocus(e);
- }
+ e->setStyles(style);
- m_fields.push_back(spec);
- return;
+ if (spec.fname == m_focused_element) {
+ Environment->setFocus(e);
}
- errorstream<< "Invalid button element(" << parts.size() << "): '" << element << "'" << std::endl;
+
+ m_fields.push_back(spec);
}
void GUIFormSpecMenu::parseBackground(parserData* data, const std::string &element)
{
- std::vector<std::string> parts = split(element,';');
+ std::vector<std::string> parts;
+ if (!precheckElement("background", element, 3, 5, parts))
+ return;
- if ((parts.size() >= 3 && parts.size() <= 5) ||
- (parts.size() > 5 && m_formspec_version > FORMSPEC_API_VERSION)) {
- std::vector<std::string> v_pos = split(parts[0],',');
- std::vector<std::string> v_geom = split(parts[1],',');
- std::string name = unescape_string(parts[2]);
+ std::vector<std::string> v_pos = split(parts[0],',');
+ std::vector<std::string> v_geom = split(parts[1],',');
+ std::string name = unescape_string(parts[2]);
- MY_CHECKPOS("background",0);
- MY_CHECKGEOM("background",1);
+ MY_CHECKPOS("background",0);
+ MY_CHECKGEOM("background",1);
- v2s32 pos;
- v2s32 geom;
+ v2s32 pos;
+ v2s32 geom;
- if (data->real_coordinates) {
- pos = getRealCoordinateBasePos(v_pos);
- geom = getRealCoordinateGeometry(v_geom);
- } else {
- pos = getElementBasePos(&v_pos);
- pos.X -= (spacing.X - (float)imgsize.X) / 2;
- pos.Y -= (spacing.Y - (float)imgsize.Y) / 2;
+ if (data->real_coordinates) {
+ pos = getRealCoordinateBasePos(v_pos);
+ geom = getRealCoordinateGeometry(v_geom);
+ } else {
+ pos = getElementBasePos(&v_pos);
+ pos.X -= (spacing.X - (float)imgsize.X) / 2;
+ pos.Y -= (spacing.Y - (float)imgsize.Y) / 2;
- geom.X = stof(v_geom[0]) * spacing.X;
- geom.Y = stof(v_geom[1]) * spacing.Y;
- }
+ geom.X = stof(v_geom[0]) * spacing.X;
+ geom.Y = stof(v_geom[1]) * spacing.Y;
+ }
- bool clip = false;
- if (parts.size() >= 4 && is_yes(parts[3])) {
- if (data->real_coordinates) {
- pos = getRealCoordinateBasePos(v_pos) * -1;
- geom = v2s32(0, 0);
- } else {
- pos.X = stoi(v_pos[0]); //acts as offset
- pos.Y = stoi(v_pos[1]);
- }
- clip = true;
+ bool clip = false;
+ if (parts.size() >= 4 && is_yes(parts[3])) {
+ if (data->real_coordinates) {
+ pos = getRealCoordinateBasePos(v_pos) * -1;
+ geom = v2s32(0, 0);
+ } else {
+ pos.X = stoi(v_pos[0]); //acts as offset
+ pos.Y = stoi(v_pos[1]);
}
+ clip = true;
+ }
- core::rect<s32> middle;
- if (parts.size() >= 5) {
- std::vector<std::string> v_middle = split(parts[4], ',');
- if (v_middle.size() == 1) {
- s32 x = stoi(v_middle[0]);
- middle.UpperLeftCorner = core::vector2di(x, x);
- middle.LowerRightCorner = core::vector2di(-x, -x);
- } else if (v_middle.size() == 2) {
- s32 x = stoi(v_middle[0]);
- s32 y = stoi(v_middle[1]);
- middle.UpperLeftCorner = core::vector2di(x, y);
- middle.LowerRightCorner = core::vector2di(-x, -y);
- // `-x` is interpreted as `w - x`
- } else if (v_middle.size() == 4) {
- middle.UpperLeftCorner = core::vector2di(stoi(v_middle[0]), stoi(v_middle[1]));
- middle.LowerRightCorner = core::vector2di(stoi(v_middle[2]), stoi(v_middle[3]));
- } else {
- warningstream << "Invalid rectangle given to middle param of background[] element" << std::endl;
- }
+ core::rect<s32> middle;
+ if (parts.size() >= 5) {
+ std::vector<std::string> v_middle = split(parts[4], ',');
+ if (v_middle.size() == 1) {
+ s32 x = stoi(v_middle[0]);
+ middle.UpperLeftCorner = core::vector2di(x, x);
+ middle.LowerRightCorner = core::vector2di(-x, -x);
+ } else if (v_middle.size() == 2) {
+ s32 x = stoi(v_middle[0]);
+ s32 y = stoi(v_middle[1]);
+ middle.UpperLeftCorner = core::vector2di(x, y);
+ middle.LowerRightCorner = core::vector2di(-x, -y);
+ // `-x` is interpreted as `w - x`
+ } else if (v_middle.size() == 4) {
+ middle.UpperLeftCorner = core::vector2di(stoi(v_middle[0]), stoi(v_middle[1]));
+ middle.LowerRightCorner = core::vector2di(stoi(v_middle[2]), stoi(v_middle[3]));
+ } else {
+ warningstream << "Invalid rectangle given to middle param of background[] element" << std::endl;
}
+ }
- if (!data->explicit_size && !clip)
- warningstream << "invalid use of unclipped background without a size[] element" << std::endl;
+ if (!data->explicit_size && !clip)
+ warningstream << "invalid use of unclipped background without a size[] element" << std::endl;
- FieldSpec spec(
- name,
- L"",
- L"",
- 258 + m_fields.size()
- );
+ FieldSpec spec(
+ name,
+ L"",
+ L"",
+ 258 + m_fields.size()
+ );
- core::rect<s32> rect;
- if (!clip) {
- // no auto_clip => position like normal image
- rect = core::rect<s32>(pos, pos + geom);
- } else {
- // it will be auto-clipped when drawing
- rect = core::rect<s32>(-pos, pos);
- }
+ core::rect<s32> rect;
+ if (!clip) {
+ // no auto_clip => position like normal image
+ rect = core::rect<s32>(pos, pos + geom);
+ } else {
+ // it will be auto-clipped when drawing
+ rect = core::rect<s32>(-pos, pos);
+ }
- GUIBackgroundImage *e = new GUIBackgroundImage(Environment, this, spec.fid,
- rect, name, middle, m_tsrc, clip);
+ GUIBackgroundImage *e = new GUIBackgroundImage(Environment, this, spec.fid,
+ rect, name, middle, m_tsrc, clip);
- FATAL_ERROR_IF(!e, "Failed to create background formspec element");
+ FATAL_ERROR_IF(!e, "Failed to create background formspec element");
- e->setNotClipped(true);
+ e->setNotClipped(true);
- e->setVisible(false); // the element is drawn manually before all others
+ e->setVisible(false); // the element is drawn manually before all others
- m_backgrounds.push_back(e);
- m_fields.push_back(spec);
- return;
- }
- errorstream<< "Invalid background element(" << parts.size() << "): '" << element << "'" << std::endl;
+ m_backgrounds.push_back(e);
+ m_fields.push_back(spec);
}
void GUIFormSpecMenu::parseTableOptions(parserData* data, const std::string &element)
@@ -1193,338 +1171,320 @@ void GUIFormSpecMenu::parseTableColumns(parserData* data, const std::string &ele
void GUIFormSpecMenu::parseTable(parserData* data, const std::string &element)
{
- std::vector<std::string> parts = split(element,';');
+ std::vector<std::string> parts;
+ if (!precheckElement("table", element, 4, 5, parts))
+ return;
- if (((parts.size() == 4) || (parts.size() == 5)) ||
- ((parts.size() > 5) && (m_formspec_version > FORMSPEC_API_VERSION)))
- {
- std::vector<std::string> v_pos = split(parts[0],',');
- std::vector<std::string> v_geom = split(parts[1],',');
- std::string name = parts[2];
- std::vector<std::string> items = split(parts[3],',');
- std::string str_initial_selection;
- std::string str_transparent = "false";
+ std::vector<std::string> v_pos = split(parts[0],',');
+ std::vector<std::string> v_geom = split(parts[1],',');
+ std::string name = parts[2];
+ std::vector<std::string> items = split(parts[3],',');
+ std::string str_initial_selection;
+ std::string str_transparent = "false";
- if (parts.size() >= 5)
- str_initial_selection = parts[4];
+ if (parts.size() >= 5)
+ str_initial_selection = parts[4];
- MY_CHECKPOS("table",0);
- MY_CHECKGEOM("table",1);
+ MY_CHECKPOS("table",0);
+ MY_CHECKGEOM("table",1);
- v2s32 pos;
- v2s32 geom;
+ v2s32 pos;
+ v2s32 geom;
- if (data->real_coordinates) {
- pos = getRealCoordinateBasePos(v_pos);
- geom = getRealCoordinateGeometry(v_geom);
- } else {
- pos = getElementBasePos(&v_pos);
- geom.X = stof(v_geom[0]) * spacing.X;
- geom.Y = stof(v_geom[1]) * spacing.Y;
- }
+ if (data->real_coordinates) {
+ pos = getRealCoordinateBasePos(v_pos);
+ geom = getRealCoordinateGeometry(v_geom);
+ } else {
+ pos = getElementBasePos(&v_pos);
+ geom.X = stof(v_geom[0]) * spacing.X;
+ geom.Y = stof(v_geom[1]) * spacing.Y;
+ }
- core::rect<s32> rect = core::rect<s32>(pos.X, pos.Y, pos.X+geom.X, pos.Y+geom.Y);
+ core::rect<s32> rect = core::rect<s32>(pos.X, pos.Y, pos.X+geom.X, pos.Y+geom.Y);
- FieldSpec spec(
- name,
- L"",
- L"",
- 258 + m_fields.size()
- );
+ FieldSpec spec(
+ name,
+ L"",
+ L"",
+ 258 + m_fields.size()
+ );
- spec.ftype = f_Table;
+ spec.ftype = f_Table;
- for (std::string &item : items) {
- item = wide_to_utf8(unescape_translate(utf8_to_wide(unescape_string(item))));
- }
+ for (std::string &item : items) {
+ item = wide_to_utf8(unescape_translate(utf8_to_wide(unescape_string(item))));
+ }
- //now really show table
- GUITable *e = new GUITable(Environment, data->current_parent, spec.fid,
- rect, m_tsrc);
+ //now really show table
+ GUITable *e = new GUITable(Environment, data->current_parent, spec.fid,
+ rect, m_tsrc);
- if (spec.fname == m_focused_element) {
- Environment->setFocus(e);
- }
+ if (spec.fname == m_focused_element) {
+ Environment->setFocus(e);
+ }
- e->setTable(data->table_options, data->table_columns, items);
+ e->setTable(data->table_options, data->table_columns, items);
- if (data->table_dyndata.find(name) != data->table_dyndata.end()) {
- e->setDynamicData(data->table_dyndata[name]);
- }
+ if (data->table_dyndata.find(name) != data->table_dyndata.end()) {
+ e->setDynamicData(data->table_dyndata[name]);
+ }
- if (!str_initial_selection.empty() && str_initial_selection != "0")
- e->setSelected(stoi(str_initial_selection));
+ if (!str_initial_selection.empty() && str_initial_selection != "0")
+ e->setSelected(stoi(str_initial_selection));
- auto style = getDefaultStyleForElement("table", name);
- e->setNotClipped(style.getBool(StyleSpec::NOCLIP, false));
- e->setOverrideFont(style.getFont());
+ auto style = getDefaultStyleForElement("table", name);
+ e->setNotClipped(style.getBool(StyleSpec::NOCLIP, false));
+ e->setOverrideFont(style.getFont());
- m_tables.emplace_back(spec, e);
- m_fields.push_back(spec);
- return;
- }
- errorstream<< "Invalid table element(" << parts.size() << "): '" << element << "'" << std::endl;
+ m_tables.emplace_back(spec, e);
+ m_fields.push_back(spec);
}
void GUIFormSpecMenu::parseTextList(parserData* data, const std::string &element)
{
- std::vector<std::string> parts = split(element,';');
+ std::vector<std::string> parts;
+ if (!precheckElement("textlist", element, 4, 6, parts))
+ return;
- if (((parts.size() == 4) || (parts.size() == 5) || (parts.size() == 6)) ||
- ((parts.size() > 6) && (m_formspec_version > FORMSPEC_API_VERSION)))
- {
- std::vector<std::string> v_pos = split(parts[0],',');
- std::vector<std::string> v_geom = split(parts[1],',');
- std::string name = parts[2];
- std::vector<std::string> items = split(parts[3],',');
- std::string str_initial_selection;
- std::string str_transparent = "false";
+ std::vector<std::string> v_pos = split(parts[0],',');
+ std::vector<std::string> v_geom = split(parts[1],',');
+ std::string name = parts[2];
+ std::vector<std::string> items = split(parts[3],',');
+ std::string str_initial_selection;
+ std::string str_transparent = "false";
- if (parts.size() >= 5)
- str_initial_selection = parts[4];
+ if (parts.size() >= 5)
+ str_initial_selection = parts[4];
- if (parts.size() >= 6)
- str_transparent = parts[5];
+ if (parts.size() >= 6)
+ str_transparent = parts[5];
- MY_CHECKPOS("textlist",0);
- MY_CHECKGEOM("textlist",1);
+ MY_CHECKPOS("textlist",0);
+ MY_CHECKGEOM("textlist",1);
- v2s32 pos;
- v2s32 geom;
+ v2s32 pos;
+ v2s32 geom;
- if (data->real_coordinates) {
- pos = getRealCoordinateBasePos(v_pos);
- geom = getRealCoordinateGeometry(v_geom);
- } else {
- pos = getElementBasePos(&v_pos);
- geom.X = stof(v_geom[0]) * spacing.X;
- geom.Y = stof(v_geom[1]) * spacing.Y;
- }
+ if (data->real_coordinates) {
+ pos = getRealCoordinateBasePos(v_pos);
+ geom = getRealCoordinateGeometry(v_geom);
+ } else {
+ pos = getElementBasePos(&v_pos);
+ geom.X = stof(v_geom[0]) * spacing.X;
+ geom.Y = stof(v_geom[1]) * spacing.Y;
+ }
- core::rect<s32> rect = core::rect<s32>(pos.X, pos.Y, pos.X+geom.X, pos.Y+geom.Y);
+ core::rect<s32> rect = core::rect<s32>(pos.X, pos.Y, pos.X+geom.X, pos.Y+geom.Y);
- FieldSpec spec(
- name,
- L"",
- L"",
- 258 + m_fields.size()
- );
+ FieldSpec spec(
+ name,
+ L"",
+ L"",
+ 258 + m_fields.size()
+ );
- spec.ftype = f_Table;
+ spec.ftype = f_Table;
- for (std::string &item : items) {
- item = wide_to_utf8(unescape_translate(utf8_to_wide(unescape_string(item))));
- }
+ for (std::string &item : items) {
+ item = wide_to_utf8(unescape_translate(utf8_to_wide(unescape_string(item))));
+ }
- //now really show list
- GUITable *e = new GUITable(Environment, data->current_parent, spec.fid,
- rect, m_tsrc);
+ //now really show list
+ GUITable *e = new GUITable(Environment, data->current_parent, spec.fid,
+ rect, m_tsrc);
- if (spec.fname == m_focused_element) {
- Environment->setFocus(e);
- }
+ if (spec.fname == m_focused_element) {
+ Environment->setFocus(e);
+ }
- e->setTextList(items, is_yes(str_transparent));
+ e->setTextList(items, is_yes(str_transparent));
- if (data->table_dyndata.find(name) != data->table_dyndata.end()) {
- e->setDynamicData(data->table_dyndata[name]);
- }
+ if (data->table_dyndata.find(name) != data->table_dyndata.end()) {
+ e->setDynamicData(data->table_dyndata[name]);
+ }
- if (!str_initial_selection.empty() && str_initial_selection != "0")
- e->setSelected(stoi(str_initial_selection));
+ if (!str_initial_selection.empty() && str_initial_selection != "0")
+ e->setSelected(stoi(str_initial_selection));
- auto style = getDefaultStyleForElement("textlist", name);
- e->setNotClipped(style.getBool(StyleSpec::NOCLIP, false));
- e->setOverrideFont(style.getFont());
+ auto style = getDefaultStyleForElement("textlist", name);
+ e->setNotClipped(style.getBool(StyleSpec::NOCLIP, false));
+ e->setOverrideFont(style.getFont());
- m_tables.emplace_back(spec, e);
- m_fields.push_back(spec);
- return;
- }
- errorstream<< "Invalid textlist element(" << parts.size() << "): '" << element << "'" << std::endl;
+ m_tables.emplace_back(spec, e);
+ m_fields.push_back(spec);
}
void GUIFormSpecMenu::parseDropDown(parserData* data, const std::string &element)
{
- std::vector<std::string> parts = split(element, ';');
-
- if (parts.size() == 5 || parts.size() == 6 ||
- (parts.size() > 6 && m_formspec_version > FORMSPEC_API_VERSION))
- {
- std::vector<std::string> v_pos = split(parts[0], ',');
- std::string name = parts[2];
- std::vector<std::string> items = split(parts[3], ',');
- std::string str_initial_selection = parts[4];
+ std::vector<std::string> parts;
+ if (!precheckElement("dropdown", element, 5, 6, parts))
+ return;
- if (parts.size() >= 6 && is_yes(parts[5]))
- m_dropdown_index_event[name] = true;
+ std::vector<std::string> v_pos = split(parts[0], ',');
+ std::string name = parts[2];
+ std::vector<std::string> items = split(parts[3], ',');
+ std::string str_initial_selection = parts[4];
- MY_CHECKPOS("dropdown",0);
+ if (parts.size() >= 6 && is_yes(parts[5]))
+ m_dropdown_index_event[name] = true;
- v2s32 pos;
- v2s32 geom;
- core::rect<s32> rect;
+ MY_CHECKPOS("dropdown",0);
- if (data->real_coordinates) {
- std::vector<std::string> v_geom = split(parts[1],',');
+ v2s32 pos;
+ v2s32 geom;
+ core::rect<s32> rect;
- if (v_geom.size() == 1)
- v_geom.emplace_back("1");
+ if (data->real_coordinates) {
+ std::vector<std::string> v_geom = split(parts[1],',');
- MY_CHECKGEOM("dropdown",1);
+ if (v_geom.size() == 1)
+ v_geom.emplace_back("1");
- pos = getRealCoordinateBasePos(v_pos);
- geom = getRealCoordinateGeometry(v_geom);
- rect = core::rect<s32>(pos.X, pos.Y, pos.X+geom.X, pos.Y+geom.Y);
- } else {
- pos = getElementBasePos(&v_pos);
+ MY_CHECKGEOM("dropdown",1);
- s32 width = stof(parts[1]) * spacing.Y;
+ pos = getRealCoordinateBasePos(v_pos);
+ geom = getRealCoordinateGeometry(v_geom);
+ rect = core::rect<s32>(pos.X, pos.Y, pos.X+geom.X, pos.Y+geom.Y);
+ } else {
+ pos = getElementBasePos(&v_pos);
- rect = core::rect<s32>(pos.X, pos.Y,
- pos.X + width, pos.Y + (m_btn_height * 2));
- }
+ s32 width = stof(parts[1]) * spacing.Y;
- FieldSpec spec(
- name,
- L"",
- L"",
- 258 + m_fields.size()
- );
+ rect = core::rect<s32>(pos.X, pos.Y,
+ pos.X + width, pos.Y + (m_btn_height * 2));
+ }
- spec.ftype = f_DropDown;
- spec.send = true;
+ FieldSpec spec(
+ name,
+ L"",
+ L"",
+ 258 + m_fields.size()
+ );
- //now really show list
- gui::IGUIComboBox *e = Environment->addComboBox(rect, data->current_parent,
- spec.fid);
+ spec.ftype = f_DropDown;
+ spec.send = true;
- if (spec.fname == m_focused_element) {
- Environment->setFocus(e);
- }
+ //now really show list
+ gui::IGUIComboBox *e = Environment->addComboBox(rect, data->current_parent,
+ spec.fid);
- for (const std::string &item : items) {
- e->addItem(unescape_translate(unescape_string(
- utf8_to_wide(item))).c_str());
- }
+ if (spec.fname == m_focused_element) {
+ Environment->setFocus(e);
+ }
- if (!str_initial_selection.empty())
- e->setSelected(stoi(str_initial_selection)-1);
+ for (const std::string &item : items) {
+ e->addItem(unescape_translate(unescape_string(
+ utf8_to_wide(item))).c_str());
+ }
- auto style = getDefaultStyleForElement("dropdown", name);
+ if (!str_initial_selection.empty())
+ e->setSelected(stoi(str_initial_selection)-1);
- spec.sound = style.get(StyleSpec::Property::SOUND, "");
+ auto style = getDefaultStyleForElement("dropdown", name);
- e->setNotClipped(style.getBool(StyleSpec::NOCLIP, false));
+ spec.sound = style.get(StyleSpec::Property::SOUND, "");
- m_fields.push_back(spec);
+ e->setNotClipped(style.getBool(StyleSpec::NOCLIP, false));
- m_dropdowns.emplace_back(spec, std::vector<std::string>());
- std::vector<std::string> &values = m_dropdowns.back().second;
- for (const std::string &item : items) {
- values.push_back(unescape_string(item));
- }
+ m_fields.push_back(spec);
- return;
+ m_dropdowns.emplace_back(spec, std::vector<std::string>());
+ std::vector<std::string> &values = m_dropdowns.back().second;
+ for (const std::string &item : items) {
+ values.push_back(unescape_string(item));
}
- errorstream << "Invalid dropdown element(" << parts.size() << "): '" << element
- << "'" << std::endl;
}
void GUIFormSpecMenu::parseFieldCloseOnEnter(parserData *data, const std::string &element)
{
- std::vector<std::string> parts = split(element,';');
- if (parts.size() == 2 ||
- (parts.size() > 2 && m_formspec_version > FORMSPEC_API_VERSION)) {
- field_close_on_enter[parts[0]] = is_yes(parts[1]);
- }
+ std::vector<std::string> parts;
+ if (!precheckElement("field_close_on_enter", element, 2, 2, parts))
+ return;
+
+ field_close_on_enter[parts[0]] = is_yes(parts[1]);
}
void GUIFormSpecMenu::parsePwdField(parserData* data, const std::string &element)
{
- std::vector<std::string> parts = split(element,';');
-
- if (parts.size() == 4 ||
- (parts.size() > 4 && m_formspec_version > FORMSPEC_API_VERSION))
- {
- std::vector<std::string> v_pos = split(parts[0],',');
- std::vector<std::string> v_geom = split(parts[1],',');
- std::string name = parts[2];
- std::string label = parts[3];
-
- MY_CHECKPOS("pwdfield",0);
- MY_CHECKGEOM("pwdfield",1);
+ std::vector<std::string> parts;
+ if (!precheckElement("pwdfield", element, 4, 4, parts))
+ return;
- v2s32 pos;
- v2s32 geom;
+ std::vector<std::string> v_pos = split(parts[0],',');
+ std::vector<std::string> v_geom = split(parts[1],',');
+ std::string name = parts[2];
+ std::string label = parts[3];
- if (data->real_coordinates) {
- pos = getRealCoordinateBasePos(v_pos);
- geom = getRealCoordinateGeometry(v_geom);
- } else {
- pos = getElementBasePos(&v_pos);
- pos -= padding;
+ MY_CHECKPOS("pwdfield",0);
+ MY_CHECKGEOM("pwdfield",1);
- geom.X = (stof(v_geom[0]) * spacing.X) - (spacing.X - imgsize.X);
+ v2s32 pos;
+ v2s32 geom;
- pos.Y += (stof(v_geom[1]) * (float)imgsize.Y)/2;
- pos.Y -= m_btn_height;
- geom.Y = m_btn_height*2;
- }
+ if (data->real_coordinates) {
+ pos = getRealCoordinateBasePos(v_pos);
+ geom = getRealCoordinateGeometry(v_geom);
+ } else {
+ pos = getElementBasePos(&v_pos);
+ pos -= padding;
- core::rect<s32> rect = core::rect<s32>(pos.X, pos.Y, pos.X+geom.X, pos.Y+geom.Y);
+ geom.X = (stof(v_geom[0]) * spacing.X) - (spacing.X - imgsize.X);
- std::wstring wlabel = translate_string(utf8_to_wide(unescape_string(label)));
+ pos.Y += (stof(v_geom[1]) * (float)imgsize.Y)/2;
+ pos.Y -= m_btn_height;
+ geom.Y = m_btn_height*2;
+ }
- FieldSpec spec(
- name,
- wlabel,
- L"",
- 258 + m_fields.size(),
- 0,
- ECI_IBEAM
- );
+ core::rect<s32> rect = core::rect<s32>(pos.X, pos.Y, pos.X+geom.X, pos.Y+geom.Y);
- spec.send = true;
- gui::IGUIEditBox *e = Environment->addEditBox(0, rect, true,
- data->current_parent, spec.fid);
+ std::wstring wlabel = translate_string(utf8_to_wide(unescape_string(label)));
- if (spec.fname == m_focused_element) {
- Environment->setFocus(e);
- }
+ FieldSpec spec(
+ name,
+ wlabel,
+ L"",
+ 258 + m_fields.size(),
+ 0,
+ ECI_IBEAM
+ );
- if (label.length() >= 1) {
- int font_height = g_fontengine->getTextHeight();
- rect.UpperLeftCorner.Y -= font_height;
- rect.LowerRightCorner.Y = rect.UpperLeftCorner.Y + font_height;
- gui::StaticText::add(Environment, spec.flabel.c_str(), rect, false, true,
- data->current_parent, 0);
- }
+ spec.send = true;
+ gui::IGUIEditBox *e = Environment->addEditBox(0, rect, true,
+ data->current_parent, spec.fid);
- e->setPasswordBox(true,L'*');
+ if (spec.fname == m_focused_element) {
+ Environment->setFocus(e);
+ }
- auto style = getDefaultStyleForElement("pwdfield", name, "field");
- e->setNotClipped(style.getBool(StyleSpec::NOCLIP, false));
- e->setDrawBorder(style.getBool(StyleSpec::BORDER, true));
- e->setOverrideColor(style.getColor(StyleSpec::TEXTCOLOR, video::SColor(0xFFFFFFFF)));
- e->setOverrideFont(style.getFont());
+ if (label.length() >= 1) {
+ int font_height = g_fontengine->getTextHeight();
+ rect.UpperLeftCorner.Y -= font_height;
+ rect.LowerRightCorner.Y = rect.UpperLeftCorner.Y + font_height;
+ gui::StaticText::add(Environment, spec.flabel.c_str(), rect, false, true,
+ data->current_parent, 0);
+ }
- irr::SEvent evt;
- evt.EventType = EET_KEY_INPUT_EVENT;
- evt.KeyInput.Key = KEY_END;
- evt.KeyInput.Char = 0;
- evt.KeyInput.Control = false;
- evt.KeyInput.Shift = false;
- evt.KeyInput.PressedDown = true;
- e->OnEvent(evt);
+ e->setPasswordBox(true,L'*');
- // Note: Before 5.2.0 "parts.size() >= 5" resulted in a
- // warning referring to field_close_on_enter[]!
+ auto style = getDefaultStyleForElement("pwdfield", name, "field");
+ e->setNotClipped(style.getBool(StyleSpec::NOCLIP, false));
+ e->setDrawBorder(style.getBool(StyleSpec::BORDER, true));
+ e->setOverrideColor(style.getColor(StyleSpec::TEXTCOLOR, video::SColor(0xFFFFFFFF)));
+ e->setOverrideFont(style.getFont());
+
+ irr::SEvent evt;
+ evt.EventType = EET_KEY_INPUT_EVENT;
+ evt.KeyInput.Key = KEY_END;
+ evt.KeyInput.Char = 0;
+ evt.KeyInput.Control = false;
+ evt.KeyInput.Shift = false;
+ evt.KeyInput.PressedDown = true;
+ e->OnEvent(evt);
+
+ // Note: Before 5.2.0 "parts.size() >= 5" resulted in a
+ // warning referring to field_close_on_enter[]!
- m_fields.push_back(spec);
- return;
- }
- errorstream<< "Invalid pwdfield element(" << parts.size() << "): '" << element << "'" << std::endl;
+ m_fields.push_back(spec);
}
void GUIFormSpecMenu::createTextField(parserData *data, FieldSpec &spec,
@@ -1547,21 +1507,13 @@ void GUIFormSpecMenu::createTextField(parserData *data, FieldSpec &spec,
}
gui::IGUIEditBox *e = nullptr;
- static constexpr bool use_intl_edit_box = USE_FREETYPE &&
- IRRLICHT_VERSION_MAJOR == 1 && IRRLICHT_VERSION_MINOR < 9;
-
- if (use_intl_edit_box && g_settings->getBool("freetype")) {
- e = new gui::intlGUIEditBox(spec.fdefault.c_str(), true, Environment,
- data->current_parent, spec.fid, rect, is_editable, is_multiline);
- } else {
- if (is_multiline) {
- e = new GUIEditBoxWithScrollBar(spec.fdefault.c_str(), true, Environment,
- data->current_parent, spec.fid, rect, is_editable, true);
- } else if (is_editable) {
- e = Environment->addEditBox(spec.fdefault.c_str(), rect, true,
- data->current_parent, spec.fid);
- e->grab();
- }
+ if (is_multiline) {
+ e = new GUIEditBoxWithScrollBar(spec.fdefault.c_str(), true, Environment,
+ data->current_parent, spec.fid, rect, is_editable, true);
+ } else if (is_editable) {
+ e = Environment->addEditBox(spec.fdefault.c_str(), rect, true,
+ data->current_parent, spec.fid);
+ e->grab();
}
auto style = getDefaultStyleForElement(is_multiline ? "textarea" : "field", spec.fname);
@@ -1586,11 +1538,10 @@ void GUIFormSpecMenu::createTextField(parserData *data, FieldSpec &spec,
}
e->setNotClipped(style.getBool(StyleSpec::NOCLIP, false));
- e->setDrawBorder(style.getBool(StyleSpec::BORDER, true));
e->setOverrideColor(style.getColor(StyleSpec::TEXTCOLOR, video::SColor(0xFFFFFFFF)));
- if (style.get(StyleSpec::BGCOLOR, "") == "transparent") {
- e->setDrawBackground(false);
- }
+ bool border = style.getBool(StyleSpec::BORDER, true);
+ e->setDrawBorder(border);
+ e->setDrawBackground(border);
e->setOverrideFont(style.getFont());
e->drop();
@@ -1720,30 +1671,26 @@ void GUIFormSpecMenu::parseTextArea(parserData* data, std::vector<std::string>&
void GUIFormSpecMenu::parseField(parserData* data, const std::string &element,
const std::string &type)
{
- std::vector<std::string> parts = split(element,';');
+ std::vector<std::string> parts;
+ if (!precheckElement(type, element, 3, 5, parts))
+ return;
if (parts.size() == 3 || parts.size() == 4) {
- parseSimpleField(data,parts);
+ parseSimpleField(data, parts);
return;
}
- if ((parts.size() == 5) ||
- ((parts.size() > 5) && (m_formspec_version > FORMSPEC_API_VERSION)))
- {
- parseTextArea(data,parts,type);
- return;
- }
- errorstream<< "Invalid field element(" << parts.size() << "): '" << element << "'" << std::endl;
+ // Else: >= 5 arguments in "parts"
+ parseTextArea(data, parts, type);
}
void GUIFormSpecMenu::parseHyperText(parserData *data, const std::string &element)
{
- std::vector<std::string> parts = split(element, ';');
+ MY_CHECKCLIENT("list");
- if (parts.size() != 4 && m_formspec_version < FORMSPEC_API_VERSION) {
- errorstream << "Invalid text element(" << parts.size() << "): '" << element << "'" << std::endl;
+ std::vector<std::string> parts;
+ if (!precheckElement("hypertext", element, 4, 4, parts))
return;
- }
std::vector<std::string> v_pos = split(parts[0], ',');
std::vector<std::string> v_geom = split(parts[1], ',');
@@ -1794,539 +1741,521 @@ void GUIFormSpecMenu::parseHyperText(parserData *data, const std::string &elemen
void GUIFormSpecMenu::parseLabel(parserData* data, const std::string &element)
{
- std::vector<std::string> parts = split(element,';');
+ std::vector<std::string> parts;
+ if (!precheckElement("label", element, 2, 2, parts))
+ return;
- if ((parts.size() == 2) ||
- ((parts.size() > 2) && (m_formspec_version > FORMSPEC_API_VERSION)))
- {
- std::vector<std::string> v_pos = split(parts[0],',');
- std::string text = parts[1];
+ std::vector<std::string> v_pos = split(parts[0],',');
+ std::string text = parts[1];
- MY_CHECKPOS("label",0);
+ MY_CHECKPOS("label",0);
- if(!data->explicit_size)
- warningstream<<"invalid use of label without a size[] element"<<std::endl;
+ if(!data->explicit_size)
+ warningstream<<"invalid use of label without a size[] element"<<std::endl;
- std::vector<std::string> lines = split(text, '\n');
+ std::vector<std::string> lines = split(text, '\n');
- auto style = getDefaultStyleForElement("label", "");
- gui::IGUIFont *font = style.getFont();
- if (!font)
- font = m_font;
+ auto style = getDefaultStyleForElement("label", "");
+ gui::IGUIFont *font = style.getFont();
+ if (!font)
+ font = m_font;
- for (unsigned int i = 0; i != lines.size(); i++) {
- std::wstring wlabel_colors = translate_string(
- utf8_to_wide(unescape_string(lines[i])));
- // Without color escapes to get the font dimensions
- std::wstring wlabel_plain = unescape_enriched(wlabel_colors);
+ for (unsigned int i = 0; i != lines.size(); i++) {
+ std::wstring wlabel_colors = translate_string(
+ utf8_to_wide(unescape_string(lines[i])));
+ // Without color escapes to get the font dimensions
+ std::wstring wlabel_plain = unescape_enriched(wlabel_colors);
- core::rect<s32> rect;
+ core::rect<s32> rect;
- if (data->real_coordinates) {
- // Lines are spaced at the distance of 1/2 imgsize.
- // This alows lines that line up with the new elements
- // easily without sacrificing good line distance. If
- // it was one whole imgsize, it would have too much
- // spacing.
- v2s32 pos = getRealCoordinateBasePos(v_pos);
+ if (data->real_coordinates) {
+ // Lines are spaced at the distance of 1/2 imgsize.
+ // This alows lines that line up with the new elements
+ // easily without sacrificing good line distance. If
+ // it was one whole imgsize, it would have too much
+ // spacing.
+ v2s32 pos = getRealCoordinateBasePos(v_pos);
- // Labels are positioned by their center, not their top.
- pos.Y += (((float) imgsize.Y) / -2) + (((float) imgsize.Y) * i / 2);
+ // Labels are positioned by their center, not their top.
+ pos.Y += (((float) imgsize.Y) / -2) + (((float) imgsize.Y) * i / 2);
- rect = core::rect<s32>(
- pos.X, pos.Y,
- pos.X + font->getDimension(wlabel_plain.c_str()).Width,
- pos.Y + imgsize.Y);
+ rect = core::rect<s32>(
+ pos.X, pos.Y,
+ pos.X + font->getDimension(wlabel_plain.c_str()).Width,
+ pos.Y + imgsize.Y);
- } else {
- // Lines are spaced at the nominal distance of
- // 2/5 inventory slot, even if the font doesn't
- // quite match that. This provides consistent
- // form layout, at the expense of sometimes
- // having sub-optimal spacing for the font.
- // We multiply by 2 and then divide by 5, rather
- // than multiply by 0.4, to get exact results
- // in the integer cases: 0.4 is not exactly
- // representable in binary floating point.
-
- v2s32 pos = getElementBasePos(nullptr);
- pos.X += stof(v_pos[0]) * spacing.X;
- pos.Y += (stof(v_pos[1]) + 7.0f / 30.0f) * spacing.Y;
-
- pos.Y += ((float) i) * spacing.Y * 2.0 / 5.0;
-
- rect = core::rect<s32>(
- pos.X, pos.Y - m_btn_height,
- pos.X + font->getDimension(wlabel_plain.c_str()).Width,
- pos.Y + m_btn_height);
- }
+ } else {
+ // Lines are spaced at the nominal distance of
+ // 2/5 inventory slot, even if the font doesn't
+ // quite match that. This provides consistent
+ // form layout, at the expense of sometimes
+ // having sub-optimal spacing for the font.
+ // We multiply by 2 and then divide by 5, rather
+ // than multiply by 0.4, to get exact results
+ // in the integer cases: 0.4 is not exactly
+ // representable in binary floating point.
+
+ v2s32 pos = getElementBasePos(nullptr);
+ pos.X += stof(v_pos[0]) * spacing.X;
+ pos.Y += (stof(v_pos[1]) + 7.0f / 30.0f) * spacing.Y;
+
+ pos.Y += ((float) i) * spacing.Y * 2.0 / 5.0;
- FieldSpec spec(
- "",
- wlabel_colors,
- L"",
- 258 + m_fields.size(),
- 4
- );
- gui::IGUIStaticText *e = gui::StaticText::add(Environment,
- spec.flabel.c_str(), rect, false, false, data->current_parent,
- spec.fid);
- e->setTextAlignment(gui::EGUIA_UPPERLEFT, gui::EGUIA_CENTER);
+ rect = core::rect<s32>(
+ pos.X, pos.Y - m_btn_height,
+ pos.X + font->getDimension(wlabel_plain.c_str()).Width,
+ pos.Y + m_btn_height);
+ }
- e->setNotClipped(style.getBool(StyleSpec::NOCLIP, false));
- e->setOverrideColor(style.getColor(StyleSpec::TEXTCOLOR, video::SColor(0xFFFFFFFF)));
- e->setOverrideFont(font);
+ FieldSpec spec(
+ "",
+ wlabel_colors,
+ L"",
+ 258 + m_fields.size(),
+ 4
+ );
+ gui::IGUIStaticText *e = gui::StaticText::add(Environment,
+ spec.flabel.c_str(), rect, false, false, data->current_parent,
+ spec.fid);
+ e->setTextAlignment(gui::EGUIA_UPPERLEFT, gui::EGUIA_CENTER);
- m_fields.push_back(spec);
+ e->setNotClipped(style.getBool(StyleSpec::NOCLIP, false));
+ e->setOverrideColor(style.getColor(StyleSpec::TEXTCOLOR, video::SColor(0xFFFFFFFF)));
+ e->setOverrideFont(font);
- // labels should let events through
- e->grab();
- m_clickthrough_elements.push_back(e);
- }
+ m_fields.push_back(spec);
- return;
+ // labels should let events through
+ e->grab();
+ m_clickthrough_elements.push_back(e);
}
- errorstream << "Invalid label element(" << parts.size() << "): '" << element
- << "'" << std::endl;
}
void GUIFormSpecMenu::parseVertLabel(parserData* data, const std::string &element)
{
- std::vector<std::string> parts = split(element,';');
+ std::vector<std::string> parts;
+ if (!precheckElement("vertlabel", element, 2, 2, parts))
+ return;
- if ((parts.size() == 2) ||
- ((parts.size() > 2) && (m_formspec_version > FORMSPEC_API_VERSION)))
- {
- std::vector<std::string> v_pos = split(parts[0],',');
- std::wstring text = unescape_translate(
- unescape_string(utf8_to_wide(parts[1])));
+ std::vector<std::string> v_pos = split(parts[0],',');
+ std::wstring text = unescape_translate(
+ unescape_string(utf8_to_wide(parts[1])));
- MY_CHECKPOS("vertlabel",1);
+ MY_CHECKPOS("vertlabel",1);
- auto style = getDefaultStyleForElement("vertlabel", "", "label");
- gui::IGUIFont *font = style.getFont();
- if (!font)
- font = m_font;
+ auto style = getDefaultStyleForElement("vertlabel", "", "label");
+ gui::IGUIFont *font = style.getFont();
+ if (!font)
+ font = m_font;
- v2s32 pos;
- core::rect<s32> rect;
+ v2s32 pos;
+ core::rect<s32> rect;
- if (data->real_coordinates) {
- pos = getRealCoordinateBasePos(v_pos);
+ if (data->real_coordinates) {
+ pos = getRealCoordinateBasePos(v_pos);
- // Vertlabels are positioned by center, not left.
- pos.X -= imgsize.X / 2;
+ // Vertlabels are positioned by center, not left.
+ pos.X -= imgsize.X / 2;
- // We use text.length + 1 because without it, the rect
- // isn't quite tall enough and cuts off the text.
- rect = core::rect<s32>(pos.X, pos.Y,
- pos.X + imgsize.X,
- pos.Y + font_line_height(font) *
- (text.length() + 1));
+ // We use text.length + 1 because without it, the rect
+ // isn't quite tall enough and cuts off the text.
+ rect = core::rect<s32>(pos.X, pos.Y,
+ pos.X + imgsize.X,
+ pos.Y + font_line_height(font) *
+ (text.length() + 1));
- } else {
- pos = getElementBasePos(&v_pos);
+ } else {
+ pos = getElementBasePos(&v_pos);
- // As above, the length must be one longer. The width of
- // the rect (15 pixels) seems rather arbitrary, but
- // changing it might break something.
- rect = core::rect<s32>(
- pos.X, pos.Y+((imgsize.Y/2) - m_btn_height),
- pos.X+15, pos.Y +
- font_line_height(font) *
- (text.length() + 1) +
- ((imgsize.Y/2) - m_btn_height));
- }
+ // As above, the length must be one longer. The width of
+ // the rect (15 pixels) seems rather arbitrary, but
+ // changing it might break something.
+ rect = core::rect<s32>(
+ pos.X, pos.Y+((imgsize.Y/2) - m_btn_height),
+ pos.X+15, pos.Y +
+ font_line_height(font) *
+ (text.length() + 1) +
+ ((imgsize.Y/2) - m_btn_height));
+ }
- if(!data->explicit_size)
- warningstream<<"invalid use of label without a size[] element"<<std::endl;
+ if(!data->explicit_size)
+ warningstream<<"invalid use of label without a size[] element"<<std::endl;
- std::wstring label;
+ std::wstring label;
- for (wchar_t i : text) {
- label += i;
- label += L"\n";
- }
+ for (wchar_t i : text) {
+ label += i;
+ label += L"\n";
+ }
- FieldSpec spec(
- "",
- label,
- L"",
- 258 + m_fields.size()
- );
- gui::IGUIStaticText *e = gui::StaticText::add(Environment, spec.flabel.c_str(),
- rect, false, false, data->current_parent, spec.fid);
- e->setTextAlignment(gui::EGUIA_CENTER, gui::EGUIA_CENTER);
+ FieldSpec spec(
+ "",
+ label,
+ L"",
+ 258 + m_fields.size()
+ );
+ gui::IGUIStaticText *e = gui::StaticText::add(Environment, spec.flabel.c_str(),
+ rect, false, false, data->current_parent, spec.fid);
+ e->setTextAlignment(gui::EGUIA_CENTER, gui::EGUIA_CENTER);
- e->setNotClipped(style.getBool(StyleSpec::NOCLIP, false));
- e->setOverrideColor(style.getColor(StyleSpec::TEXTCOLOR, video::SColor(0xFFFFFFFF)));
- e->setOverrideFont(font);
+ e->setNotClipped(style.getBool(StyleSpec::NOCLIP, false));
+ e->setOverrideColor(style.getColor(StyleSpec::TEXTCOLOR, video::SColor(0xFFFFFFFF)));
+ e->setOverrideFont(font);
- m_fields.push_back(spec);
+ m_fields.push_back(spec);
- // vertlabels should let events through
- e->grab();
- m_clickthrough_elements.push_back(e);
- return;
- }
- errorstream<< "Invalid vertlabel element(" << parts.size() << "): '" << element << "'" << std::endl;
+ // vertlabels should let events through
+ e->grab();
+ m_clickthrough_elements.push_back(e);
}
void GUIFormSpecMenu::parseImageButton(parserData* data, const std::string &element,
const std::string &type)
{
- std::vector<std::string> parts = split(element,';');
-
- if ((((parts.size() >= 5) && (parts.size() <= 8)) && (parts.size() != 6)) ||
- ((parts.size() > 8) && (m_formspec_version > FORMSPEC_API_VERSION)))
- {
- std::vector<std::string> v_pos = split(parts[0],',');
- std::vector<std::string> v_geom = split(parts[1],',');
- std::string image_name = parts[2];
- std::string name = parts[3];
- std::string label = parts[4];
+ std::vector<std::string> parts;
+ if (!precheckElement("image_button", element, 5, 8, parts))
+ return;
- MY_CHECKPOS("imagebutton",0);
- MY_CHECKGEOM("imagebutton",1);
+ if (parts.size() == 6) {
+ // Invalid argument count.
+ errorstream << "Invalid image_button element(" << parts.size() << "): '" << element << "'" << std::endl;
+ return;
+ }
- std::string pressed_image_name;
+ std::vector<std::string> v_pos = split(parts[0],',');
+ std::vector<std::string> v_geom = split(parts[1],',');
+ std::string image_name = parts[2];
+ std::string name = parts[3];
+ std::string label = parts[4];
- if (parts.size() >= 8) {
- pressed_image_name = parts[7];
- }
+ MY_CHECKPOS("image_button",0);
+ MY_CHECKGEOM("image_button",1);
- v2s32 pos;
- v2s32 geom;
+ std::string pressed_image_name;
- if (data->real_coordinates) {
- pos = getRealCoordinateBasePos(v_pos);
- geom = getRealCoordinateGeometry(v_geom);
- } else {
- pos = getElementBasePos(&v_pos);
- geom.X = (stof(v_geom[0]) * spacing.X) - (spacing.X - imgsize.X);
- geom.Y = (stof(v_geom[1]) * spacing.Y) - (spacing.Y - imgsize.Y);
- }
+ if (parts.size() >= 8) {
+ pressed_image_name = parts[7];
+ }
- core::rect<s32> rect = core::rect<s32>(pos.X, pos.Y, pos.X+geom.X,
- pos.Y+geom.Y);
+ v2s32 pos;
+ v2s32 geom;
- if (!data->explicit_size)
- warningstream<<"invalid use of image_button without a size[] element"<<std::endl;
+ if (data->real_coordinates) {
+ pos = getRealCoordinateBasePos(v_pos);
+ geom = getRealCoordinateGeometry(v_geom);
+ } else {
+ pos = getElementBasePos(&v_pos);
+ geom.X = (stof(v_geom[0]) * spacing.X) - (spacing.X - imgsize.X);
+ geom.Y = (stof(v_geom[1]) * spacing.Y) - (spacing.Y - imgsize.Y);
+ }
- image_name = unescape_string(image_name);
- pressed_image_name = unescape_string(pressed_image_name);
+ core::rect<s32> rect = core::rect<s32>(pos.X, pos.Y, pos.X+geom.X,
+ pos.Y+geom.Y);
- std::wstring wlabel = utf8_to_wide(unescape_string(label));
+ if (!data->explicit_size)
+ warningstream<<"invalid use of image_button without a size[] element"<<std::endl;
- FieldSpec spec(
- name,
- wlabel,
- utf8_to_wide(image_name),
- 258 + m_fields.size()
- );
- spec.ftype = f_Button;
- if (type == "image_button_exit")
- spec.is_exit = true;
+ image_name = unescape_string(image_name);
+ pressed_image_name = unescape_string(pressed_image_name);
- GUIButtonImage *e = GUIButtonImage::addButton(Environment, rect, m_tsrc,
- data->current_parent, spec.fid, spec.flabel.c_str());
+ std::wstring wlabel = utf8_to_wide(unescape_string(label));
- if (spec.fname == m_focused_element) {
- Environment->setFocus(e);
- }
+ FieldSpec spec(
+ name,
+ wlabel,
+ utf8_to_wide(image_name),
+ 258 + m_fields.size()
+ );
+ spec.ftype = f_Button;
+ if (type == "image_button_exit")
+ spec.is_exit = true;
- auto style = getStyleForElement("image_button", spec.fname);
+ GUIButtonImage *e = GUIButtonImage::addButton(Environment, rect, m_tsrc,
+ data->current_parent, spec.fid, spec.flabel.c_str());
- spec.sound = style[StyleSpec::STATE_DEFAULT].get(StyleSpec::Property::SOUND, "");
+ if (spec.fname == m_focused_element) {
+ Environment->setFocus(e);
+ }
- // Override style properties with values specified directly in the element
- if (!image_name.empty())
- style[StyleSpec::STATE_DEFAULT].set(StyleSpec::FGIMG, image_name);
+ auto style = getStyleForElement("image_button", spec.fname);
- if (!pressed_image_name.empty())
- style[StyleSpec::STATE_PRESSED].set(StyleSpec::FGIMG, pressed_image_name);
+ spec.sound = style[StyleSpec::STATE_DEFAULT].get(StyleSpec::Property::SOUND, "");
- if (parts.size() >= 7) {
- style[StyleSpec::STATE_DEFAULT].set(StyleSpec::NOCLIP, parts[5]);
- style[StyleSpec::STATE_DEFAULT].set(StyleSpec::BORDER, parts[6]);
- }
+ // Override style properties with values specified directly in the element
+ if (!image_name.empty())
+ style[StyleSpec::STATE_DEFAULT].set(StyleSpec::FGIMG, image_name);
- e->setStyles(style);
- e->setScaleImage(true);
+ if (!pressed_image_name.empty())
+ style[StyleSpec::STATE_PRESSED].set(StyleSpec::FGIMG, pressed_image_name);
- m_fields.push_back(spec);
- return;
+ if (parts.size() >= 7) {
+ style[StyleSpec::STATE_DEFAULT].set(StyleSpec::NOCLIP, parts[5]);
+ style[StyleSpec::STATE_DEFAULT].set(StyleSpec::BORDER, parts[6]);
}
- errorstream<< "Invalid imagebutton element(" << parts.size() << "): '" << element << "'" << std::endl;
+ e->setStyles(style);
+ e->setScaleImage(true);
+
+ m_fields.push_back(spec);
}
void GUIFormSpecMenu::parseTabHeader(parserData* data, const std::string &element)
{
- std::vector<std::string> parts = split(element, ';');
-
- if (((parts.size() == 4) || (parts.size() == 6)) || (parts.size() == 7 &&
- data->real_coordinates) || ((parts.size() > 6) &&
- (m_formspec_version > FORMSPEC_API_VERSION)))
- {
- std::vector<std::string> v_pos = split(parts[0],',');
+ std::vector<std::string> parts;
+ if (!precheckElement("tabheader", element, 4, 7, parts))
+ return;
- // If we're using real coordinates, add an extra field for height.
- // Width is not here because tabs are the width of the text, and
- // there's no reason to change that.
- unsigned int i = 0;
- std::vector<std::string> v_geom = {"1", "1"}; // Dummy width and height
- bool auto_width = true;
- if (parts.size() == 7) {
- i++;
+ // Length 7: Additional "height" parameter after "pos". Only valid with real_coordinates.
+ // Note: New arguments for the "height" syntax cannot be added without breaking older clients.
+ if (parts.size() == 5 || (parts.size() == 7 && !data->real_coordinates)) {
+ errorstream << "Invalid tabheader element(" << parts.size() << "): '"
+ << element << "'" << std::endl;
+ return;
+ }
- v_geom = split(parts[1], ',');
- if (v_geom.size() == 1)
- v_geom.insert(v_geom.begin(), "1"); // Dummy value
- else
- auto_width = false;
- }
+ std::vector<std::string> v_pos = split(parts[0],',');
- std::string name = parts[i+1];
- std::vector<std::string> buttons = split(parts[i+2], ',');
- std::string str_index = parts[i+3];
- bool show_background = true;
- bool show_border = true;
- int tab_index = stoi(str_index) - 1;
+ // If we're using real coordinates, add an extra field for height.
+ // Width is not here because tabs are the width of the text, and
+ // there's no reason to change that.
+ unsigned int i = 0;
+ std::vector<std::string> v_geom = {"1", "1"}; // Dummy width and height
+ bool auto_width = true;
+ if (parts.size() == 7) {
+ i++;
+
+ v_geom = split(parts[1], ',');
+ if (v_geom.size() == 1)
+ v_geom.insert(v_geom.begin(), "1"); // Dummy value
+ else
+ auto_width = false;
+ }
- MY_CHECKPOS("tabheader", 0);
+ std::string name = parts[i+1];
+ std::vector<std::string> buttons = split(parts[i+2], ',');
+ std::string str_index = parts[i+3];
+ bool show_background = true;
+ bool show_border = true;
+ int tab_index = stoi(str_index) - 1;
- if (parts.size() == 6 + i) {
- if (parts[4+i] == "true")
- show_background = false;
- if (parts[5+i] == "false")
- show_border = false;
- }
+ MY_CHECKPOS("tabheader", 0);
- FieldSpec spec(
- name,
- L"",
- L"",
- 258 + m_fields.size()
- );
+ if (parts.size() == 6 + i) {
+ if (parts[4+i] == "true")
+ show_background = false;
+ if (parts[5+i] == "false")
+ show_border = false;
+ }
- spec.ftype = f_TabHeader;
+ FieldSpec spec(
+ name,
+ L"",
+ L"",
+ 258 + m_fields.size()
+ );
- v2s32 pos;
- v2s32 geom;
+ spec.ftype = f_TabHeader;
- if (data->real_coordinates) {
- pos = getRealCoordinateBasePos(v_pos);
+ v2s32 pos;
+ v2s32 geom;
- geom = getRealCoordinateGeometry(v_geom);
- // Set default height
- if (parts.size() <= 6)
- geom.Y = m_btn_height * 2;
- pos.Y -= geom.Y; // TabHeader base pos is the bottom, not the top.
- if (auto_width)
- geom.X = DesiredRect.getWidth(); // Set automatic width
-
- MY_CHECKGEOM("tabheader", 1);
- } else {
- v2f32 pos_f = pos_offset * spacing;
- pos_f.X += stof(v_pos[0]) * spacing.X;
- pos_f.Y += stof(v_pos[1]) * spacing.Y - m_btn_height * 2;
- pos = v2s32(pos_f.X, pos_f.Y);
+ if (data->real_coordinates) {
+ pos = getRealCoordinateBasePos(v_pos);
+ geom = getRealCoordinateGeometry(v_geom);
+ // Set default height
+ if (parts.size() <= 6)
geom.Y = m_btn_height * 2;
- geom.X = DesiredRect.getWidth();
- }
+ pos.Y -= geom.Y; // TabHeader base pos is the bottom, not the top.
+ if (auto_width)
+ geom.X = DesiredRect.getWidth(); // Set automatic width
- core::rect<s32> rect = core::rect<s32>(pos.X, pos.Y, pos.X+geom.X,
- pos.Y+geom.Y);
+ MY_CHECKGEOM("tabheader", 1);
+ } else {
+ v2f32 pos_f = pos_offset * spacing;
+ pos_f.X += stof(v_pos[0]) * spacing.X;
+ pos_f.Y += stof(v_pos[1]) * spacing.Y - m_btn_height * 2;
+ pos = v2s32(pos_f.X, pos_f.Y);
- gui::IGUITabControl *e = Environment->addTabControl(rect,
- data->current_parent, show_background, show_border, spec.fid);
- e->setAlignment(irr::gui::EGUIA_UPPERLEFT, irr::gui::EGUIA_UPPERLEFT,
- irr::gui::EGUIA_UPPERLEFT, irr::gui::EGUIA_LOWERRIGHT);
- e->setTabHeight(geom.Y);
+ geom.Y = m_btn_height * 2;
+ geom.X = DesiredRect.getWidth();
+ }
- auto style = getDefaultStyleForElement("tabheader", name);
+ core::rect<s32> rect = core::rect<s32>(pos.X, pos.Y, pos.X+geom.X,
+ pos.Y+geom.Y);
- spec.sound = style.get(StyleSpec::Property::SOUND, "");
+ gui::IGUITabControl *e = Environment->addTabControl(rect,
+ data->current_parent, show_background, show_border, spec.fid);
+ e->setAlignment(irr::gui::EGUIA_UPPERLEFT, irr::gui::EGUIA_UPPERLEFT,
+ irr::gui::EGUIA_UPPERLEFT, irr::gui::EGUIA_LOWERRIGHT);
+ e->setTabHeight(geom.Y);
- e->setNotClipped(style.getBool(StyleSpec::NOCLIP, true));
+ auto style = getDefaultStyleForElement("tabheader", name);
- for (const std::string &button : buttons) {
- auto tab = e->addTab(unescape_translate(unescape_string(
- utf8_to_wide(button))).c_str(), -1);
- if (style.isNotDefault(StyleSpec::BGCOLOR))
- tab->setBackgroundColor(style.getColor(StyleSpec::BGCOLOR));
+ spec.sound = style.get(StyleSpec::Property::SOUND, "");
- tab->setTextColor(style.getColor(StyleSpec::TEXTCOLOR, video::SColor(0xFFFFFFFF)));
- }
+ e->setNotClipped(style.getBool(StyleSpec::NOCLIP, true));
- if ((tab_index >= 0) &&
- (buttons.size() < INT_MAX) &&
- (tab_index < (int) buttons.size()))
- e->setActiveTab(tab_index);
+ for (const std::string &button : buttons) {
+ auto tab = e->addTab(unescape_translate(unescape_string(
+ utf8_to_wide(button))).c_str(), -1);
+ if (style.isNotDefault(StyleSpec::BGCOLOR))
+ tab->setBackgroundColor(style.getColor(StyleSpec::BGCOLOR));
- m_fields.push_back(spec);
- return;
+ tab->setTextColor(style.getColor(StyleSpec::TEXTCOLOR, video::SColor(0xFFFFFFFF)));
}
- errorstream << "Invalid TabHeader element(" << parts.size() << "): '"
- << element << "'" << std::endl;
+
+ if ((tab_index >= 0) &&
+ (buttons.size() < INT_MAX) &&
+ (tab_index < (int) buttons.size()))
+ e->setActiveTab(tab_index);
+
+ m_fields.push_back(spec);
}
void GUIFormSpecMenu::parseItemImageButton(parserData* data, const std::string &element)
{
- if (m_client == 0) {
- warningstream << "invalid use of item_image_button with m_client==0"
- << std::endl;
- return;
- }
+ MY_CHECKCLIENT("item_image_button");
- std::vector<std::string> parts = split(element,';');
+ std::vector<std::string> parts;
+ if (!precheckElement("item_image_button", element, 5, 5, parts))
+ return;
- if ((parts.size() == 5) ||
- ((parts.size() > 5) && (m_formspec_version > FORMSPEC_API_VERSION)))
- {
- std::vector<std::string> v_pos = split(parts[0],',');
- std::vector<std::string> v_geom = split(parts[1],',');
- std::string item_name = parts[2];
- std::string name = parts[3];
- std::string label = parts[4];
+ std::vector<std::string> v_pos = split(parts[0],',');
+ std::vector<std::string> v_geom = split(parts[1],',');
+ std::string item_name = parts[2];
+ std::string name = parts[3];
+ std::string label = parts[4];
- label = unescape_string(label);
- item_name = unescape_string(item_name);
+ label = unescape_string(label);
+ item_name = unescape_string(item_name);
- MY_CHECKPOS("itemimagebutton",0);
- MY_CHECKGEOM("itemimagebutton",1);
+ MY_CHECKPOS("item_image_button",0);
+ MY_CHECKGEOM("item_image_button",1);
- v2s32 pos;
- v2s32 geom;
-
- if (data->real_coordinates) {
- pos = getRealCoordinateBasePos(v_pos);
- geom = getRealCoordinateGeometry(v_geom);
- } else {
- pos = getElementBasePos(&v_pos);
- geom.X = (stof(v_geom[0]) * spacing.X) - (spacing.X - imgsize.X);
- geom.Y = (stof(v_geom[1]) * spacing.Y) - (spacing.Y - imgsize.Y);
- }
+ v2s32 pos;
+ v2s32 geom;
- core::rect<s32> rect = core::rect<s32>(pos.X, pos.Y, pos.X+geom.X, pos.Y+geom.Y);
+ if (data->real_coordinates) {
+ pos = getRealCoordinateBasePos(v_pos);
+ geom = getRealCoordinateGeometry(v_geom);
+ } else {
+ pos = getElementBasePos(&v_pos);
+ geom.X = (stof(v_geom[0]) * spacing.X) - (spacing.X - imgsize.X);
+ geom.Y = (stof(v_geom[1]) * spacing.Y) - (spacing.Y - imgsize.Y);
+ }
- if(!data->explicit_size)
- warningstream<<"invalid use of item_image_button without a size[] element"<<std::endl;
+ core::rect<s32> rect = core::rect<s32>(pos.X, pos.Y, pos.X+geom.X, pos.Y+geom.Y);
- IItemDefManager *idef = m_client->idef();
- ItemStack item;
- item.deSerialize(item_name, idef);
+ if(!data->explicit_size)
+ warningstream<<"invalid use of item_image_button without a size[] element"<<std::endl;
- m_tooltips[name] =
- TooltipSpec(utf8_to_wide(item.getDefinition(idef).description),
- m_default_tooltip_bgcolor,
- m_default_tooltip_color);
+ IItemDefManager *idef = m_client->idef();
+ ItemStack item;
+ item.deSerialize(item_name, idef);
- // the spec for the button
- FieldSpec spec_btn(
- name,
- utf8_to_wide(label),
- utf8_to_wide(item_name),
- 258 + m_fields.size(),
- 2
- );
+ m_tooltips[name] =
+ TooltipSpec(utf8_to_wide(item.getDefinition(idef).description),
+ m_default_tooltip_bgcolor,
+ m_default_tooltip_color);
- GUIButtonItemImage *e_btn = GUIButtonItemImage::addButton(Environment,
- rect, m_tsrc, data->current_parent, spec_btn.fid, spec_btn.flabel.c_str(),
- item_name, m_client);
+ // the spec for the button
+ FieldSpec spec_btn(
+ name,
+ utf8_to_wide(label),
+ utf8_to_wide(item_name),
+ 258 + m_fields.size(),
+ 2
+ );
- auto style = getStyleForElement("item_image_button", spec_btn.fname, "image_button");
+ GUIButtonItemImage *e_btn = GUIButtonItemImage::addButton(Environment,
+ rect, m_tsrc, data->current_parent, spec_btn.fid, spec_btn.flabel.c_str(),
+ item_name, m_client);
- spec_btn.sound = style[StyleSpec::STATE_DEFAULT].get(StyleSpec::Property::SOUND, "");
+ auto style = getStyleForElement("item_image_button", spec_btn.fname, "image_button");
- e_btn->setStyles(style);
+ spec_btn.sound = style[StyleSpec::STATE_DEFAULT].get(StyleSpec::Property::SOUND, "");
- if (spec_btn.fname == m_focused_element) {
- Environment->setFocus(e_btn);
- }
+ e_btn->setStyles(style);
- spec_btn.ftype = f_Button;
- rect += data->basepos-padding;
- spec_btn.rect = rect;
- m_fields.push_back(spec_btn);
- return;
+ if (spec_btn.fname == m_focused_element) {
+ Environment->setFocus(e_btn);
}
- errorstream<< "Invalid ItemImagebutton element(" << parts.size() << "): '" << element << "'" << std::endl;
+
+ spec_btn.ftype = f_Button;
+ rect += data->basepos-padding;
+ spec_btn.rect = rect;
+ m_fields.push_back(spec_btn);
}
void GUIFormSpecMenu::parseBox(parserData* data, const std::string &element)
{
- std::vector<std::string> parts = split(element, ';');
+ std::vector<std::string> parts;
+ if (!precheckElement("box", element, 3, 3, parts))
+ return;
- if ((parts.size() == 3) ||
- ((parts.size() > 3) && (m_formspec_version > FORMSPEC_API_VERSION)))
- {
- std::vector<std::string> v_pos = split(parts[0], ',');
- std::vector<std::string> v_geom = split(parts[1], ',');
+ std::vector<std::string> v_pos = split(parts[0], ',');
+ std::vector<std::string> v_geom = split(parts[1], ',');
- MY_CHECKPOS("box", 0);
- MY_CHECKGEOM("box", 1);
+ MY_CHECKPOS("box", 0);
+ MY_CHECKGEOM("box", 1);
- v2s32 pos;
- v2s32 geom;
+ v2s32 pos;
+ v2s32 geom;
- if (data->real_coordinates) {
- pos = getRealCoordinateBasePos(v_pos);
- geom = getRealCoordinateGeometry(v_geom);
- } else {
- pos = getElementBasePos(&v_pos);
- geom.X = stof(v_geom[0]) * spacing.X;
- geom.Y = stof(v_geom[1]) * spacing.Y;
- }
+ if (data->real_coordinates) {
+ pos = getRealCoordinateBasePos(v_pos);
+ geom = getRealCoordinateGeometry(v_geom);
+ } else {
+ pos = getElementBasePos(&v_pos);
+ geom.X = stof(v_geom[0]) * spacing.X;
+ geom.Y = stof(v_geom[1]) * spacing.Y;
+ }
- FieldSpec spec(
- "",
- L"",
- L"",
- 258 + m_fields.size(),
- -2
- );
- spec.ftype = f_Box;
+ FieldSpec spec(
+ "",
+ L"",
+ L"",
+ 258 + m_fields.size(),
+ -2
+ );
+ spec.ftype = f_Box;
- auto style = getDefaultStyleForElement("box", spec.fname);
+ auto style = getDefaultStyleForElement("box", spec.fname);
- video::SColor tmp_color;
- std::array<video::SColor, 4> colors;
- std::array<video::SColor, 4> bordercolors = {0x0, 0x0, 0x0, 0x0};
- std::array<s32, 4> borderwidths = {0, 0, 0, 0};
+ video::SColor tmp_color;
+ std::array<video::SColor, 4> colors;
+ std::array<video::SColor, 4> bordercolors = {0x0, 0x0, 0x0, 0x0};
+ std::array<s32, 4> borderwidths = {0, 0, 0, 0};
- if (parseColorString(parts[2], tmp_color, true, 0x8C)) {
- colors = {tmp_color, tmp_color, tmp_color, tmp_color};
- } else {
- colors = style.getColorArray(StyleSpec::COLORS, {0x0, 0x0, 0x0, 0x0});
- bordercolors = style.getColorArray(StyleSpec::BORDERCOLORS,
- {0x0, 0x0, 0x0, 0x0});
- borderwidths = style.getIntArray(StyleSpec::BORDERWIDTHS, {0, 0, 0, 0});
- }
+ if (parseColorString(parts[2], tmp_color, true, 0x8C)) {
+ colors = {tmp_color, tmp_color, tmp_color, tmp_color};
+ } else {
+ colors = style.getColorArray(StyleSpec::COLORS, {0x0, 0x0, 0x0, 0x0});
+ bordercolors = style.getColorArray(StyleSpec::BORDERCOLORS,
+ {0x0, 0x0, 0x0, 0x0});
+ borderwidths = style.getIntArray(StyleSpec::BORDERWIDTHS, {0, 0, 0, 0});
+ }
- core::rect<s32> rect(pos, pos + geom);
+ core::rect<s32> rect(pos, pos + geom);
- GUIBox *e = new GUIBox(Environment, data->current_parent, spec.fid, rect,
- colors, bordercolors, borderwidths);
- e->setNotClipped(style.getBool(StyleSpec::NOCLIP, m_formspec_version < 3));
- e->drop();
+ GUIBox *e = new GUIBox(Environment, data->current_parent, spec.fid, rect,
+ colors, bordercolors, borderwidths);
+ e->setNotClipped(style.getBool(StyleSpec::NOCLIP, m_formspec_version < 3));
+ e->drop();
- m_fields.push_back(spec);
- return;
- }
- errorstream << "Invalid Box element(" << parts.size() << "): '" << element
- << "'" << std::endl;
+ m_fields.push_back(spec);
}
void GUIFormSpecMenu::parseBackgroundColor(parserData* data, const std::string &element)
{
- std::vector<std::string> parts = split(element,';');
+ std::vector<std::string> parts;
+ if (!precheckElement("bgcolor", element, 1, 3, parts))
+ return;
+
const u32 parameter_count = parts.size();
- if ((parameter_count > 2 && m_formspec_version < 3) ||
- (parameter_count > 3 && m_formspec_version <= FORMSPEC_API_VERSION)) {
+ if (parameter_count > 2 && m_formspec_version < 3) {
errorstream << "Invalid bgcolor element(" << parameter_count << "): '"
<< element << "'" << std::endl;
return;
@@ -2357,49 +2286,51 @@ void GUIFormSpecMenu::parseBackgroundColor(parserData* data, const std::string &
void GUIFormSpecMenu::parseListColors(parserData* data, const std::string &element)
{
- std::vector<std::string> parts = split(element,';');
+ std::vector<std::string> parts;
+ // Legacy Note: If clients older than 5.5.0-dev are supplied with additional arguments,
+ // the tooltip colors will be ignored.
+ if (!precheckElement("listcolors", element, 2, 5, parts))
+ return;
- if (((parts.size() == 2) || (parts.size() == 3) || (parts.size() == 5)) ||
- ((parts.size() > 5) && (m_formspec_version > FORMSPEC_API_VERSION)))
- {
- parseColorString(parts[0], data->inventorylist_options.slotbg_n, false);
- parseColorString(parts[1], data->inventorylist_options.slotbg_h, false);
+ if (parts.size() == 4) {
+ // Invalid argument combination
+ errorstream << "Invalid listcolors element(" << parts.size() << "): '"
+ << element << "'" << std::endl;
+ return;
+ }
- if (parts.size() >= 3) {
- if (parseColorString(parts[2], data->inventorylist_options.slotbordercolor,
- false)) {
- data->inventorylist_options.slotborder = true;
- }
- }
- if (parts.size() == 5) {
- video::SColor tmp_color;
+ parseColorString(parts[0], data->inventorylist_options.slotbg_n, false);
+ parseColorString(parts[1], data->inventorylist_options.slotbg_h, false);
- if (parseColorString(parts[3], tmp_color, false))
- m_default_tooltip_bgcolor = tmp_color;
- if (parseColorString(parts[4], tmp_color, false))
- m_default_tooltip_color = tmp_color;
+ if (parts.size() >= 3) {
+ if (parseColorString(parts[2], data->inventorylist_options.slotbordercolor,
+ false)) {
+ data->inventorylist_options.slotborder = true;
}
+ }
+ if (parts.size() >= 5) {
+ video::SColor tmp_color;
- // update all already parsed inventorylists
- for (GUIInventoryList *e : m_inventorylists) {
- e->setSlotBGColors(data->inventorylist_options.slotbg_n,
- data->inventorylist_options.slotbg_h);
- e->setSlotBorders(data->inventorylist_options.slotborder,
- data->inventorylist_options.slotbordercolor);
- }
- return;
+ if (parseColorString(parts[3], tmp_color, false))
+ m_default_tooltip_bgcolor = tmp_color;
+ if (parseColorString(parts[4], tmp_color, false))
+ m_default_tooltip_color = tmp_color;
+ }
+
+ // update all already parsed inventorylists
+ for (GUIInventoryList *e : m_inventorylists) {
+ e->setSlotBGColors(data->inventorylist_options.slotbg_n,
+ data->inventorylist_options.slotbg_h);
+ e->setSlotBorders(data->inventorylist_options.slotborder,
+ data->inventorylist_options.slotbordercolor);
}
- errorstream<< "Invalid listcolors element(" << parts.size() << "): '" << element << "'" << std::endl;
}
void GUIFormSpecMenu::parseTooltip(parserData* data, const std::string &element)
{
- std::vector<std::string> parts = split(element,';');
- if (parts.size() < 2) {
- errorstream << "Invalid tooltip element(" << parts.size() << "): '"
- << element << "'" << std::endl;
+ std::vector<std::string> parts;
+ if (!precheckElement("tooltip", element, 2, 5, parts))
return;
- }
// Get mode and check size
bool rect_mode = parts[0].find(',') != std::string::npos;
@@ -2539,11 +2470,16 @@ bool GUIFormSpecMenu::parsePositionDirect(parserData *data, const std::string &e
void GUIFormSpecMenu::parsePosition(parserData *data, const std::string &element)
{
- std::vector<std::string> parts = split(element, ',');
+ std::vector<std::string> parts = split(element, ';');
- if (parts.size() == 2) {
- data->offset.X = stof(parts[0]);
- data->offset.Y = stof(parts[1]);
+ if (parts.size() == 1 ||
+ (parts.size() > 1 && m_formspec_version > FORMSPEC_API_VERSION)) {
+ std::vector<std::string> v_geom = split(parts[0], ',');
+
+ MY_CHECKGEOM("position", 0);
+
+ data->offset.X = stof(v_geom[0]);
+ data->offset.Y = stof(v_geom[1]);
return;
}
@@ -2573,11 +2509,16 @@ bool GUIFormSpecMenu::parseAnchorDirect(parserData *data, const std::string &ele
void GUIFormSpecMenu::parseAnchor(parserData *data, const std::string &element)
{
- std::vector<std::string> parts = split(element, ',');
+ std::vector<std::string> parts = split(element, ';');
- if (parts.size() == 2) {
- data->anchor.X = stof(parts[0]);
- data->anchor.Y = stof(parts[1]);
+ if (parts.size() == 1 ||
+ (parts.size() > 1 && m_formspec_version > FORMSPEC_API_VERSION)) {
+ std::vector<std::string> v_geom = split(parts[0], ',');
+
+ MY_CHECKGEOM("anchor", 0);
+
+ data->anchor.X = stof(v_geom[0]);
+ data->anchor.Y = stof(v_geom[1]);
return;
}
@@ -2585,6 +2526,46 @@ void GUIFormSpecMenu::parseAnchor(parserData *data, const std::string &element)
<< "'" << std::endl;
}
+bool GUIFormSpecMenu::parsePaddingDirect(parserData *data, const std::string &element)
+{
+ if (element.empty())
+ return false;
+
+ std::vector<std::string> parts = split(element, '[');
+
+ if (parts.size() != 2)
+ return false;
+
+ std::string type = trim(parts[0]);
+ std::string description = trim(parts[1]);
+
+ if (type != "padding")
+ return false;
+
+ parsePadding(data, description);
+
+ return true;
+}
+
+void GUIFormSpecMenu::parsePadding(parserData *data, const std::string &element)
+{
+ std::vector<std::string> parts = split(element, ';');
+
+ if (parts.size() == 1 ||
+ (parts.size() > 1 && m_formspec_version > FORMSPEC_API_VERSION)) {
+ std::vector<std::string> v_geom = split(parts[0], ',');
+
+ MY_CHECKGEOM("padding", 0);
+
+ data->padding.X = stof(v_geom[0]);
+ data->padding.Y = stof(v_geom[1]);
+ return;
+ }
+
+ errorstream << "Invalid padding element (" << parts.size() << "): '" << element
+ << "'" << std::endl;
+}
+
bool GUIFormSpecMenu::parseStyle(parserData *data, const std::string &element, bool style_type)
{
std::vector<std::string> parts = split(element, ';');
@@ -2723,39 +2704,29 @@ bool GUIFormSpecMenu::parseStyle(parserData *data, const std::string &element, b
void GUIFormSpecMenu::parseSetFocus(const std::string &element)
{
- std::vector<std::string> parts = split(element, ';');
-
- if (parts.size() <= 2 ||
- (parts.size() > 2 && m_formspec_version > FORMSPEC_API_VERSION))
- {
- if (m_is_form_regenerated)
- return; // Never focus on resizing
-
- bool force_focus = parts.size() >= 2 && is_yes(parts[1]);
- if (force_focus || m_text_dst->m_formname != m_last_formname)
- setFocus(parts[0]);
-
+ std::vector<std::string> parts;
+ if (!precheckElement("set_focus", element, 1, 2, parts))
return;
- }
- errorstream << "Invalid set_focus element (" << parts.size() << "): '" << element
- << "'" << std::endl;
+ if (m_is_form_regenerated)
+ return; // Never focus on resizing
+
+ bool force_focus = parts.size() >= 2 && is_yes(parts[1]);
+ if (force_focus || m_text_dst->m_formname != m_last_formname)
+ setFocus(parts[0]);
}
void GUIFormSpecMenu::parseModel(parserData *data, const std::string &element)
{
- std::vector<std::string> parts = split(element, ';');
+ MY_CHECKCLIENT("model");
- if (parts.size() < 5 || (parts.size() > 9 &&
- m_formspec_version <= FORMSPEC_API_VERSION)) {
- errorstream << "Invalid model element (" << parts.size() << "): '" << element
- << "'" << std::endl;
+ std::vector<std::string> parts;
+ if (!precheckElement("model", element, 5, 10, parts))
return;
- }
// Avoid length checks by resizing
- if (parts.size() < 9)
- parts.resize(9);
+ if (parts.size() < 10)
+ parts.resize(10);
std::vector<std::string> v_pos = split(parts[0], ',');
std::vector<std::string> v_geom = split(parts[1], ',');
@@ -2766,6 +2737,7 @@ void GUIFormSpecMenu::parseModel(parserData *data, const std::string &element)
bool inf_rotation = is_yes(parts[6]);
bool mousectrl = is_yes(parts[7]) || parts[7].empty(); // default true
std::vector<std::string> frame_loop = split(parts[8], ',');
+ std::string speed = unescape_string(parts[9]);
MY_CHECKPOS("model", 0);
MY_CHECKGEOM("model", 1);
@@ -2802,7 +2774,7 @@ void GUIFormSpecMenu::parseModel(parserData *data, const std::string &element)
core::rect<s32> rect(pos, pos + geom);
- GUIScene *e = new GUIScene(Environment, RenderingEngine::get_scene_manager(),
+ GUIScene *e = new GUIScene(Environment, m_client->getSceneManager(),
data->current_parent, rect, spec.fid);
auto meshnode = e->setMesh(mesh);
@@ -2825,6 +2797,7 @@ void GUIFormSpecMenu::parseModel(parserData *data, const std::string &element)
}
e->setFrameLoop(frame_loop_begin, frame_loop_end);
+ e->setAnimationSpeed(stof(speed));
auto style = getStyleForElement("model", spec.fname);
e->setStyles(style);
@@ -3099,6 +3072,7 @@ void GUIFormSpecMenu::regenerateGui(v2u32 screensize)
mydata.screensize = screensize;
mydata.offset = v2f32(0.5f, 0.5f);
mydata.anchor = v2f32(0.5f, 0.5f);
+ mydata.padding = v2f32(0.05f, 0.05f);
mydata.simple_field_count = 0;
// Base position of contents of form
@@ -3201,7 +3175,14 @@ void GUIFormSpecMenu::regenerateGui(v2u32 screensize)
}
}
- /* "no_prepend" element is always after "position" (or "size" element) if it used */
+ /* "padding" element is always after "anchor" and previous if it is used */
+ for (; i < elements.size(); i++) {
+ if (!parsePaddingDirect(&mydata, elements[i])) {
+ break;
+ }
+ }
+
+ /* "no_prepend" element is always after "padding" and previous if it used */
bool enable_prepends = true;
for (; i < elements.size(); i++) {
if (elements[i].empty())
@@ -3266,11 +3247,9 @@ void GUIFormSpecMenu::regenerateGui(v2u32 screensize)
double fitx_imgsize;
double fity_imgsize;
- // Pad the screensize with 5% of the screensize on all sides to ensure
- // that even the largest formspecs don't touch the screen borders.
v2f padded_screensize(
- mydata.screensize.X * 0.9f,
- mydata.screensize.Y * 0.9f
+ mydata.screensize.X * (1.0f - mydata.padding.X * 2.0f),
+ mydata.screensize.Y * (1.0f - mydata.padding.Y * 2.0f)
);
if (mydata.real_coordinates) {
@@ -3286,13 +3265,15 @@ void GUIFormSpecMenu::regenerateGui(v2u32 screensize)
((15.0 / 13.0) * (0.85 + mydata.invsize.Y));
}
-#ifdef __ANDROID__
+ s32 min_screen_dim = std::min(padded_screensize.X, padded_screensize.Y);
+
+#ifdef HAVE_TOUCHSCREENGUI
// In Android, the preferred imgsize should be larger to accommodate the
// smaller screensize.
- double prefer_imgsize = padded_screensize.Y / 10 * gui_scaling;
+ double prefer_imgsize = min_screen_dim / 10 * gui_scaling;
#else
// Desktop computers have more space, so try to fit 15 coordinates.
- double prefer_imgsize = padded_screensize.Y / 15 * gui_scaling;
+ double prefer_imgsize = min_screen_dim / 15 * gui_scaling;
#endif
// Try to use the preferred imgsize, but if that's bigger than the maximum
// size, use the maximum size.
@@ -3749,7 +3730,7 @@ void GUIFormSpecMenu::showTooltip(const std::wstring &text,
v2u32 screenSize = Environment->getVideoDriver()->getScreenSize();
int tooltip_offset_x = m_btn_height;
int tooltip_offset_y = m_btn_height;
-#ifdef __ANDROID__
+#ifdef HAVE_TOUCHSCREENGUI
tooltip_offset_x *= 3;
tooltip_offset_y = 0;
if (m_pointer.X > (s32)screenSize.X / 2)
@@ -3941,9 +3922,7 @@ void GUIFormSpecMenu::acceptInput(FormspecQuitMode quitmode)
}
if (e != 0) {
- std::stringstream ss;
- ss << (e->getActiveTab() +1);
- fields[name] = ss.str();
+ fields[name] = itos(e->getActiveTab() + 1);
}
} else if (s.ftype == f_CheckBox) {
// No dynamic cast possible due to some distributions shipped
@@ -3969,12 +3948,10 @@ void GUIFormSpecMenu::acceptInput(FormspecQuitMode quitmode)
e = static_cast<GUIScrollBar *>(element);
if (e) {
- std::stringstream os;
- os << e->getPos();
if (s.fdefault == L"Changed")
- fields[name] = "CHG:" + os.str();
+ fields[name] = "CHG:" + itos(e->getPos());
else
- fields[name] = "VAL:" + os.str();
+ fields[name] = "VAL:" + itos(e->getPos());
}
} else if (s.ftype == f_AnimatedImage) {
// No dynamic cast possible due to some distributions shipped
diff --git a/src/gui/guiFormSpecMenu.h b/src/gui/guiFormSpecMenu.h
index d658aba7b..0b4d3879d 100644
--- a/src/gui/guiFormSpecMenu.h
+++ b/src/gui/guiFormSpecMenu.h
@@ -152,6 +152,7 @@ public:
gui::IGUIElement* parent, s32 id,
IMenuManager *menumgr,
Client *client,
+ gui::IGUIEnvironment *guienv,
ISimpleTextureSource *tsrc,
ISoundManager *sound_manager,
IFormSource* fs_src,
@@ -162,8 +163,9 @@ public:
~GUIFormSpecMenu();
static void create(GUIFormSpecMenu *&cur_formspec, Client *client,
- JoystickController *joystick, IFormSource *fs_src, TextDest *txt_dest,
- const std::string &formspecPrepend, ISoundManager *sound_manager);
+ gui::IGUIEnvironment *guienv, JoystickController *joystick, IFormSource *fs_src,
+ TextDest *txt_dest, const std::string &formspecPrepend,
+ ISoundManager *sound_manager);
void setFormSpec(const std::string &formspec_string,
const InventoryLocation &current_inventory_location)
@@ -227,7 +229,7 @@ public:
return m_selected_item;
}
- const u16 getSelectedAmount() const
+ u16 getSelectedAmount() const
{
return m_selected_amount;
}
@@ -277,6 +279,8 @@ protected:
v2s32 getElementBasePos(const std::vector<std::string> *v_pos);
v2s32 getRealCoordinateBasePos(const std::vector<std::string> &v_pos);
v2s32 getRealCoordinateGeometry(const std::vector<std::string> &v_geom);
+ bool precheckElement(const std::string &name, const std::string &element,
+ size_t args_min, size_t args_max, std::vector<std::string> &parts);
std::unordered_map<std::string, std::vector<StyleSpec>> theme_by_type;
std::unordered_map<std::string, std::vector<StyleSpec>> theme_by_name;
@@ -364,6 +368,7 @@ private:
v2s32 size;
v2f32 offset;
v2f32 anchor;
+ v2f32 padding;
core::rect<s32> rect;
v2s32 basepos;
v2u32 screensize;
@@ -445,6 +450,8 @@ private:
void parsePosition(parserData *data, const std::string &element);
bool parseAnchorDirect(parserData *data, const std::string &element);
void parseAnchor(parserData *data, const std::string &element);
+ bool parsePaddingDirect(parserData *data, const std::string &element);
+ void parsePadding(parserData *data, const std::string &element);
bool parseStyle(parserData *data, const std::string &element, bool style_type);
void parseSetFocus(const std::string &element);
void parseModel(parserData *data, const std::string &element);
diff --git a/src/gui/guiHyperText.cpp b/src/gui/guiHyperText.cpp
index ccfdcb81d..40450ce5f 100644
--- a/src/gui/guiHyperText.cpp
+++ b/src/gui/guiHyperText.cpp
@@ -17,31 +17,26 @@ with this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
-#include "IGUIEnvironment.h"
-#include "IGUIElement.h"
+#include "guiHyperText.h"
#include "guiScrollBar.h"
-#include "IGUIFont.h"
-#include <vector>
-#include <list>
-#include <unordered_map>
-using namespace irr::gui;
#include "client/fontengine.h"
-#include <SColor.h>
#include "client/tile.h"
#include "IVideoDriver.h"
#include "client/client.h"
#include "client/renderingengine.h"
#include "hud.h"
-#include "guiHyperText.h"
#include "util/string.h"
+#include "irrlicht_changes/CGUITTFont.h"
-bool check_color(const std::string &str)
+using namespace irr::gui;
+
+static bool check_color(const std::string &str)
{
irr::video::SColor color;
return parseColorString(str, color, false);
}
-bool check_integer(const std::string &str)
+static bool check_integer(const std::string &str)
{
if (str.empty())
return false;
@@ -616,12 +611,10 @@ TextDrawer::TextDrawer(const wchar_t *text, Client *client,
if (e.font) {
e.dim.Width = e.font->getDimension(e.text.c_str()).Width;
e.dim.Height = e.font->getDimension(L"Yy").Height;
-#if USE_FREETYPE
if (e.font->getType() == irr::gui::EGFT_CUSTOM) {
- e.baseline = e.dim.Height - 1 -
- ((irr::gui::CGUITTFont *)e.font)->getAscender() / 64;
+ CGUITTFont *tmp = static_cast<CGUITTFont*>(e.font);
+ e.baseline = e.dim.Height - 1 - tmp->getAscender() / 64;
}
-#endif
} else {
e.dim = {0, 0};
}
diff --git a/src/gui/guiHyperText.h b/src/gui/guiHyperText.h
index 5b936262e..04c664df5 100644
--- a/src/gui/guiHyperText.h
+++ b/src/gui/guiHyperText.h
@@ -19,16 +19,17 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#pragma once
-#include "config.h" // for USE_FREETYPE
+#include <vector>
+#include <list>
+#include <unordered_map>
+#include <string>
+#include "irrlichttypes_extrabloated.h"
using namespace irr;
class ISimpleTextureSource;
class Client;
-
-#if USE_FREETYPE
-#include "irrlicht_changes/CGUITTFont.h"
-#endif
+class GUIScrollBar;
class ParsedText
{
diff --git a/src/gui/guiKeyChangeMenu.cpp b/src/gui/guiKeyChangeMenu.cpp
index 4dcb47779..29d5138f0 100644
--- a/src/gui/guiKeyChangeMenu.cpp
+++ b/src/gui/guiKeyChangeMenu.cpp
@@ -46,7 +46,7 @@ enum
GUI_ID_KEY_BACKWARD_BUTTON,
GUI_ID_KEY_LEFT_BUTTON,
GUI_ID_KEY_RIGHT_BUTTON,
- GUI_ID_KEY_USE_BUTTON,
+ GUI_ID_KEY_AUX1_BUTTON,
GUI_ID_KEY_FLY_BUTTON,
GUI_ID_KEY_FAST_BUTTON,
GUI_ID_KEY_JUMP_BUTTON,
@@ -70,6 +70,7 @@ enum
GUI_ID_KEY_MINIMAP_BUTTON,
GUI_ID_KEY_SCREENSHOT_BUTTON,
GUI_ID_KEY_CHATLOG_BUTTON,
+ GUI_ID_KEY_BLOCK_BOUNDS_BUTTON,
GUI_ID_KEY_HUD_BUTTON,
GUI_ID_KEY_FOG_BUTTON,
GUI_ID_KEY_DEC_RANGE_BUTTON,
@@ -177,7 +178,7 @@ void GUIKeyChangeMenu::regenerateGui(v2u32 screensize)
{
core::rect<s32> rect(0, 0, option_w, 30 * s);
rect += topleft + v2s32(option_x, option_y);
- const wchar_t *text = wgettext("\"Special\" = climb down");
+ const wchar_t *text = wgettext("\"Aux1\" = climb down");
Environment->addCheckBox(g_settings->getBool("aux1_descends"), rect, this,
GUI_ID_CB_AUX1_DESCENDS, text);
delete[] text;
@@ -412,37 +413,38 @@ void GUIKeyChangeMenu::add_key(int id, const wchar_t *button_name, const std::st
void GUIKeyChangeMenu::init_keys()
{
- this->add_key(GUI_ID_KEY_FORWARD_BUTTON, wgettext("Forward"), "keymap_forward");
- this->add_key(GUI_ID_KEY_BACKWARD_BUTTON, wgettext("Backward"), "keymap_backward");
- this->add_key(GUI_ID_KEY_LEFT_BUTTON, wgettext("Left"), "keymap_left");
- this->add_key(GUI_ID_KEY_RIGHT_BUTTON, wgettext("Right"), "keymap_right");
- this->add_key(GUI_ID_KEY_USE_BUTTON, wgettext("Special"), "keymap_special1");
- this->add_key(GUI_ID_KEY_JUMP_BUTTON, wgettext("Jump"), "keymap_jump");
- this->add_key(GUI_ID_KEY_SNEAK_BUTTON, wgettext("Sneak"), "keymap_sneak");
- this->add_key(GUI_ID_KEY_DROP_BUTTON, wgettext("Drop"), "keymap_drop");
- this->add_key(GUI_ID_KEY_INVENTORY_BUTTON, wgettext("Inventory"), "keymap_inventory");
- this->add_key(GUI_ID_KEY_HOTBAR_PREV_BUTTON,wgettext("Prev. item"), "keymap_hotbar_previous");
- this->add_key(GUI_ID_KEY_HOTBAR_NEXT_BUTTON,wgettext("Next item"), "keymap_hotbar_next");
- this->add_key(GUI_ID_KEY_ZOOM_BUTTON, wgettext("Zoom"), "keymap_zoom");
- this->add_key(GUI_ID_KEY_CAMERA_BUTTON, wgettext("Change camera"), "keymap_camera_mode");
- this->add_key(GUI_ID_KEY_MINIMAP_BUTTON, wgettext("Toggle minimap"), "keymap_minimap");
- this->add_key(GUI_ID_KEY_FLY_BUTTON, wgettext("Toggle fly"), "keymap_freemove");
- this->add_key(GUI_ID_KEY_PITCH_MOVE, wgettext("Toggle pitchmove"), "keymap_pitchmove");
- this->add_key(GUI_ID_KEY_FAST_BUTTON, wgettext("Toggle fast"), "keymap_fastmove");
- this->add_key(GUI_ID_KEY_NOCLIP_BUTTON, wgettext("Toggle noclip"), "keymap_noclip");
- this->add_key(GUI_ID_KEY_MUTE_BUTTON, wgettext("Mute"), "keymap_mute");
- this->add_key(GUI_ID_KEY_DEC_VOLUME_BUTTON,wgettext("Dec. volume"), "keymap_decrease_volume");
- this->add_key(GUI_ID_KEY_INC_VOLUME_BUTTON,wgettext("Inc. volume"), "keymap_increase_volume");
- this->add_key(GUI_ID_KEY_AUTOFWD_BUTTON, wgettext("Autoforward"), "keymap_autoforward");
- this->add_key(GUI_ID_KEY_CHAT_BUTTON, wgettext("Chat"), "keymap_chat");
- this->add_key(GUI_ID_KEY_SCREENSHOT_BUTTON,wgettext("Screenshot"), "keymap_screenshot");
- this->add_key(GUI_ID_KEY_RANGE_BUTTON, wgettext("Range select"), "keymap_rangeselect");
- this->add_key(GUI_ID_KEY_DEC_RANGE_BUTTON, wgettext("Dec. range"), "keymap_decrease_viewing_range_min");
- this->add_key(GUI_ID_KEY_INC_RANGE_BUTTON, wgettext("Inc. range"), "keymap_increase_viewing_range_min");
- this->add_key(GUI_ID_KEY_CONSOLE_BUTTON, wgettext("Console"), "keymap_console");
- this->add_key(GUI_ID_KEY_CMD_BUTTON, wgettext("Command"), "keymap_cmd");
- this->add_key(GUI_ID_KEY_CMD_LOCAL_BUTTON, wgettext("Local command"), "keymap_cmd_local");
- this->add_key(GUI_ID_KEY_HUD_BUTTON, wgettext("Toggle HUD"), "keymap_toggle_hud");
- this->add_key(GUI_ID_KEY_CHATLOG_BUTTON, wgettext("Toggle chat log"), "keymap_toggle_chat");
- this->add_key(GUI_ID_KEY_FOG_BUTTON, wgettext("Toggle fog"), "keymap_toggle_fog");
+ this->add_key(GUI_ID_KEY_FORWARD_BUTTON, wgettext("Forward"), "keymap_forward");
+ this->add_key(GUI_ID_KEY_BACKWARD_BUTTON, wgettext("Backward"), "keymap_backward");
+ this->add_key(GUI_ID_KEY_LEFT_BUTTON, wgettext("Left"), "keymap_left");
+ this->add_key(GUI_ID_KEY_RIGHT_BUTTON, wgettext("Right"), "keymap_right");
+ this->add_key(GUI_ID_KEY_AUX1_BUTTON, wgettext("Aux1"), "keymap_aux1");
+ this->add_key(GUI_ID_KEY_JUMP_BUTTON, wgettext("Jump"), "keymap_jump");
+ this->add_key(GUI_ID_KEY_SNEAK_BUTTON, wgettext("Sneak"), "keymap_sneak");
+ this->add_key(GUI_ID_KEY_DROP_BUTTON, wgettext("Drop"), "keymap_drop");
+ this->add_key(GUI_ID_KEY_INVENTORY_BUTTON, wgettext("Inventory"), "keymap_inventory");
+ this->add_key(GUI_ID_KEY_HOTBAR_PREV_BUTTON, wgettext("Prev. item"), "keymap_hotbar_previous");
+ this->add_key(GUI_ID_KEY_HOTBAR_NEXT_BUTTON, wgettext("Next item"), "keymap_hotbar_next");
+ this->add_key(GUI_ID_KEY_ZOOM_BUTTON, wgettext("Zoom"), "keymap_zoom");
+ this->add_key(GUI_ID_KEY_CAMERA_BUTTON, wgettext("Change camera"), "keymap_camera_mode");
+ this->add_key(GUI_ID_KEY_MINIMAP_BUTTON, wgettext("Toggle minimap"), "keymap_minimap");
+ this->add_key(GUI_ID_KEY_FLY_BUTTON, wgettext("Toggle fly"), "keymap_freemove");
+ this->add_key(GUI_ID_KEY_PITCH_MOVE, wgettext("Toggle pitchmove"), "keymap_pitchmove");
+ this->add_key(GUI_ID_KEY_FAST_BUTTON, wgettext("Toggle fast"), "keymap_fastmove");
+ this->add_key(GUI_ID_KEY_NOCLIP_BUTTON, wgettext("Toggle noclip"), "keymap_noclip");
+ this->add_key(GUI_ID_KEY_MUTE_BUTTON, wgettext("Mute"), "keymap_mute");
+ this->add_key(GUI_ID_KEY_DEC_VOLUME_BUTTON, wgettext("Dec. volume"), "keymap_decrease_volume");
+ this->add_key(GUI_ID_KEY_INC_VOLUME_BUTTON, wgettext("Inc. volume"), "keymap_increase_volume");
+ this->add_key(GUI_ID_KEY_AUTOFWD_BUTTON, wgettext("Autoforward"), "keymap_autoforward");
+ this->add_key(GUI_ID_KEY_CHAT_BUTTON, wgettext("Chat"), "keymap_chat");
+ this->add_key(GUI_ID_KEY_SCREENSHOT_BUTTON, wgettext("Screenshot"), "keymap_screenshot");
+ this->add_key(GUI_ID_KEY_RANGE_BUTTON, wgettext("Range select"), "keymap_rangeselect");
+ this->add_key(GUI_ID_KEY_DEC_RANGE_BUTTON, wgettext("Dec. range"), "keymap_decrease_viewing_range_min");
+ this->add_key(GUI_ID_KEY_INC_RANGE_BUTTON, wgettext("Inc. range"), "keymap_increase_viewing_range_min");
+ this->add_key(GUI_ID_KEY_CONSOLE_BUTTON, wgettext("Console"), "keymap_console");
+ this->add_key(GUI_ID_KEY_CMD_BUTTON, wgettext("Command"), "keymap_cmd");
+ this->add_key(GUI_ID_KEY_CMD_LOCAL_BUTTON, wgettext("Local command"), "keymap_cmd_local");
+ this->add_key(GUI_ID_KEY_BLOCK_BOUNDS_BUTTON, wgettext("Block bounds"), "keymap_toggle_block_bounds");
+ this->add_key(GUI_ID_KEY_HUD_BUTTON, wgettext("Toggle HUD"), "keymap_toggle_hud");
+ this->add_key(GUI_ID_KEY_CHATLOG_BUTTON, wgettext("Toggle chat log"), "keymap_toggle_chat");
+ this->add_key(GUI_ID_KEY_FOG_BUTTON, wgettext("Toggle fog"), "keymap_toggle_fog");
}
diff --git a/src/gui/guiPasswordChange.cpp b/src/gui/guiPasswordChange.cpp
index 74cd62f5b..c983260f6 100644
--- a/src/gui/guiPasswordChange.cpp
+++ b/src/gui/guiPasswordChange.cpp
@@ -25,6 +25,10 @@ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
#include <IGUIStaticText.h>
#include <IGUIFont.h>
+#ifdef HAVE_TOUCHSCREENGUI
+ #include "client/renderingengine.h"
+#endif
+
#include "porting.h"
#include "gettext.h"
@@ -79,8 +83,8 @@ void GUIPasswordChange::regenerateGui(v2u32 screensize)
/*
Calculate new sizes and positions
*/
-#ifdef __ANDROID__
- const float s = m_gui_scale * porting::getDisplayDensity() / 2;
+#ifdef HAVE_TOUCHSCREENGUI
+ const float s = m_gui_scale * RenderingEngine::getDisplayDensity() / 2;
#else
const float s = m_gui_scale;
#endif
diff --git a/src/gui/guiScene.cpp b/src/gui/guiScene.cpp
index 5f4c50b91..ee2556b03 100644
--- a/src/gui/guiScene.cpp
+++ b/src/gui/guiScene.cpp
@@ -21,7 +21,6 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include <SViewFrustum.h>
#include <IAnimatedMeshSceneNode.h>
-#include <ILightSceneNode.h>
#include "porting.h"
GUIScene::GUIScene(gui::IGUIEnvironment *env, scene::ISceneManager *smgr,
@@ -34,9 +33,6 @@ GUIScene::GUIScene(gui::IGUIEnvironment *env, scene::ISceneManager *smgr,
m_cam = m_smgr->addCameraSceneNode(0, v3f(0.f, 0.f, -100.f), v3f(0.f));
m_cam->setFOV(30.f * core::DEGTORAD);
- scene::ILightSceneNode *light = m_smgr->addLightSceneNode(m_cam);
- light->setRadius(1000.f);
-
m_smgr->getParameters()->setAttribute(scene::ALLOW_ZWRITE_ON_TRANSPARENT, true);
}
@@ -60,6 +56,7 @@ scene::IAnimatedMeshSceneNode *GUIScene::setMesh(scene::IAnimatedMesh *mesh)
m_mesh = m_smgr->addAnimatedMeshSceneNode(mesh);
m_mesh->setPosition(-m_mesh->getBoundingBox().getCenter());
m_mesh->animateJoints();
+
return m_mesh;
}
@@ -73,10 +70,13 @@ void GUIScene::setTexture(u32 idx, video::ITexture *texture)
material.setFlag(video::EMF_FOG_ENABLE, true);
material.setFlag(video::EMF_BILINEAR_FILTER, false);
material.setFlag(video::EMF_BACK_FACE_CULLING, false);
+ material.setFlag(video::EMF_ZWRITE_ENABLE, true);
}
void GUIScene::draw()
{
+ m_driver->clearBuffers(video::ECBF_DEPTH);
+
// Control rotation speed based on time
u64 new_time = porting::getTimeMs();
u64 dtime_ms = 0;
@@ -161,6 +161,14 @@ void GUIScene::setFrameLoop(s32 begin, s32 end)
m_mesh->setFrameLoop(begin, end);
}
+/**
+ * Sets the animation speed (FPS) for the mesh
+ */
+void GUIScene::setAnimationSpeed(f32 speed)
+{
+ m_mesh->setAnimationSpeed(speed);
+}
+
/* Camera control functions */
inline void GUIScene::calcOptimalDistance()
diff --git a/src/gui/guiScene.h b/src/gui/guiScene.h
index 08eb7f350..0f5f3a891 100644
--- a/src/gui/guiScene.h
+++ b/src/gui/guiScene.h
@@ -37,6 +37,7 @@ public:
void setTexture(u32 idx, video::ITexture *texture);
void setBackgroundColor(const video::SColor &color) noexcept { m_bgcolor = color; };
void setFrameLoop(s32 begin, s32 end);
+ void setAnimationSpeed(f32 speed);
void enableMouseControl(bool enable) noexcept { m_mouse_ctrl = enable; };
void setRotation(v2f rot) noexcept { m_custom_rot = rot; };
void enableContinuousRotation(bool enable) noexcept { m_inf_rot = enable; };
diff --git a/src/gui/guiSkin.cpp b/src/gui/guiSkin.cpp
index e09209bd9..ca692f6cb 100644
--- a/src/gui/guiSkin.cpp
+++ b/src/gui/guiSkin.cpp
@@ -1024,48 +1024,6 @@ void GUISkin::draw2DRectangle(IGUIElement* element,
}
-//! Writes attributes of the object.
-//! Implement this to expose the attributes of your scene node animator for
-//! scripting languages, editors, debuggers or xml serialization purposes.
-void GUISkin::serializeAttributes(io::IAttributes* out, io::SAttributeReadWriteOptions* options) const
-{
- u32 i;
- for (i=0; i<EGDC_COUNT; ++i)
- out->addColor(GUISkinColorNames[i], Colors[i]);
-
- for (i=0; i<EGDS_COUNT; ++i)
- out->addInt(GUISkinSizeNames[i], Sizes[i]);
-
- for (i=0; i<EGDT_COUNT; ++i)
- out->addString(GUISkinTextNames[i], Texts[i].c_str());
-
- for (i=0; i<EGDI_COUNT; ++i)
- out->addInt(GUISkinIconNames[i], Icons[i]);
-}
-
-
-//! Reads attributes of the object.
-//! Implement this to set the attributes of your scene node animator for
-//! scripting languages, editors, debuggers or xml deserialization purposes.
-void GUISkin::deserializeAttributes(io::IAttributes* in, io::SAttributeReadWriteOptions* options)
-{
- // TODO: This is not nice code for downward compatibility, whenever new values are added and users
- // load an old skin the corresponding values will be set to 0.
- u32 i;
- for (i=0; i<EGDC_COUNT; ++i)
- Colors[i] = in->getAttributeAsColor(GUISkinColorNames[i]);
-
- for (i=0; i<EGDS_COUNT; ++i)
- Sizes[i] = in->getAttributeAsInt(GUISkinSizeNames[i]);
-
- for (i=0; i<EGDT_COUNT; ++i)
- Texts[i] = in->getAttributeAsStringW(GUISkinTextNames[i]);
-
- for (i=0; i<EGDI_COUNT; ++i)
- Icons[i] = in->getAttributeAsInt(GUISkinIconNames[i]);
-}
-
-
//! gets the colors
// PATCH
void GUISkin::getColors(video::SColor* colors)
diff --git a/src/gui/guiSkin.h b/src/gui/guiSkin.h
index bbb900f9f..fa9b27bdd 100644
--- a/src/gui/guiSkin.h
+++ b/src/gui/guiSkin.h
@@ -290,16 +290,6 @@ namespace gui
//! get the type of this skin
virtual EGUI_SKIN_TYPE getType() const;
- //! Writes attributes of the object.
- //! Implement this to expose the attributes of your scene node animator for
- //! scripting languages, editors, debuggers or xml serialization purposes.
- virtual void serializeAttributes(io::IAttributes* out, io::SAttributeReadWriteOptions* options=0) const;
-
- //! Reads attributes of the object.
- //! Implement this to set the attributes of your scene node animator for
- //! scripting languages, editors, debuggers or xml deserialization purposes.
- virtual void deserializeAttributes(io::IAttributes* in, io::SAttributeReadWriteOptions* options=0);
-
//! gets the colors
virtual void getColors(video::SColor* colors); // ::PATCH:
diff --git a/src/gui/guiTable.cpp b/src/gui/guiTable.cpp
index cab2e19fd..79ae1aea3 100644
--- a/src/gui/guiTable.cpp
+++ b/src/gui/guiTable.cpp
@@ -77,9 +77,10 @@ GUITable::GUITable(gui::IGUIEnvironment *env,
setTabStop(true);
setTabOrder(-1);
updateAbsolutePosition();
+#ifdef HAVE_TOUCHSCREENGUI
+ float density = 1; // dp scaling is applied by the skin
+#else
float density = RenderingEngine::getDisplayDensity();
-#ifdef __ANDROID__
- density = 1; // dp scaling is applied by the skin
#endif
core::rect<s32> relative_rect = m_scrollbar->getRelativePosition();
s32 width = (relative_rect.getWidth() / (2.0 / 3.0)) * density *
diff --git a/src/gui/guiVolumeChange.cpp b/src/gui/guiVolumeChange.cpp
index f17cfa986..61ab758a1 100644
--- a/src/gui/guiVolumeChange.cpp
+++ b/src/gui/guiVolumeChange.cpp
@@ -93,11 +93,12 @@ void GUIVolumeChange::regenerateGui(v2u32 screensize)
core::rect<s32> rect(0, 0, 160 * s, 20 * s);
rect = rect + v2s32(size.X / 2 - 80 * s, size.Y / 2 - 70 * s);
- const wchar_t *text = wgettext("Sound Volume: ");
+ wchar_t text[100];
+ const wchar_t *str = wgettext("Sound Volume: %d%%");
+ swprintf(text, sizeof(text) / sizeof(wchar_t), str, volume);
+ delete[] str;
core::stringw volume_text = text;
- delete [] text;
- volume_text += core::stringw(volume) + core::stringw("%");
Environment->addStaticText(volume_text.c_str(), rect, false,
true, this, ID_soundText);
}
@@ -183,11 +184,13 @@ bool GUIVolumeChange::OnEvent(const SEvent& event)
g_settings->setFloat("sound_volume", (float) pos / 100);
gui::IGUIElement *e = getElementFromId(ID_soundText);
- const wchar_t *text = wgettext("Sound Volume: ");
+ wchar_t text[100];
+ const wchar_t *str = wgettext("Sound Volume: %d%%");
+ swprintf(text, sizeof(text) / sizeof(wchar_t), str, pos);
+ delete[] str;
+
core::stringw volume_text = text;
- delete [] text;
- volume_text += core::stringw(pos) + core::stringw("%");
e->setText(volume_text.c_str());
return true;
}
diff --git a/src/gui/intlGUIEditBox.cpp b/src/gui/intlGUIEditBox.cpp
deleted file mode 100644
index 0f09ea746..000000000
--- a/src/gui/intlGUIEditBox.cpp
+++ /dev/null
@@ -1,626 +0,0 @@
-// 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 <util/numeric.h>
-#include "intlGUIEditBox.h"
-
-#include "IGUISkin.h"
-#include "IGUIEnvironment.h"
-#include "IGUIFont.h"
-#include "IVideoDriver.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<s32>& rectangle, bool writable, bool has_vscrollbar)
- : GUIEditBox(environment, parent, id, rectangle, border, writable)
-{
- #ifdef _DEBUG
- setDebugName("intlintlGUIEditBox");
- #endif
-
- Text = text;
-
- if (Environment)
- m_operator = Environment->getOSOperator();
-
- if (m_operator)
- m_operator->grab();
-
- // this element can be tabbed to
- setTabStop(true);
- setTabOrder(-1);
-
- IGUISkin *skin = 0;
- if (Environment)
- skin = Environment->getSkin();
- if (m_border && skin)
- {
- m_frame_rect.UpperLeftCorner.X += skin->getSize(EGDS_TEXT_DISTANCE_X)+1;
- m_frame_rect.UpperLeftCorner.Y += skin->getSize(EGDS_TEXT_DISTANCE_Y)+1;
- m_frame_rect.LowerRightCorner.X -= skin->getSize(EGDS_TEXT_DISTANCE_X)+1;
- m_frame_rect.LowerRightCorner.Y -= skin->getSize(EGDS_TEXT_DISTANCE_Y)+1;
- }
-
- if (skin && has_vscrollbar) {
- m_scrollbar_width = skin->getSize(gui::EGDS_SCROLLBAR_SIZE);
-
- if (m_scrollbar_width > 0) {
- createVScrollBar();
- }
- }
-
- breakText();
-
- calculateScrollPos();
- setWritable(writable);
-}
-
-//! Sets whether to draw the background
-void intlGUIEditBox::setDrawBackground(bool draw)
-{
-}
-
-void intlGUIEditBox::updateAbsolutePosition()
-{
- core::rect<s32> oldAbsoluteRect(AbsoluteRect);
- IGUIElement::updateAbsolutePosition();
- if ( oldAbsoluteRect != AbsoluteRect )
- {
- breakText();
- }
-}
-
-
-//! 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;
-
- m_frame_rect = AbsoluteRect;
-
- // draw the border
-
- if (m_border)
- {
- if (m_writable) {
- skin->draw3DSunkenPane(this, skin->getColor(EGDC_WINDOW),
- false, true, m_frame_rect, &AbsoluteClippingRect);
- }
-
- m_frame_rect.UpperLeftCorner.X += skin->getSize(EGDS_TEXT_DISTANCE_X)+1;
- m_frame_rect.UpperLeftCorner.Y += skin->getSize(EGDS_TEXT_DISTANCE_Y)+1;
- m_frame_rect.LowerRightCorner.X -= skin->getSize(EGDS_TEXT_DISTANCE_X)+1;
- m_frame_rect.LowerRightCorner.Y -= skin->getSize(EGDS_TEXT_DISTANCE_Y)+1;
- }
-
- updateVScrollBar();
- core::rect<s32> localClipRect = m_frame_rect;
- localClipRect.clipAgainst(AbsoluteClippingRect);
-
- // draw the text
-
- IGUIFont* font = m_override_font;
- if (!m_override_font)
- font = skin->getFont();
-
- s32 cursorLine = 0;
- s32 charcursorpos = 0;
-
- if (font)
- {
- if (m_last_break_font != font)
- {
- breakText();
- }
-
- // calculate cursor pos
-
- core::stringw *txtLine = &Text;
- s32 startPos = 0;
-
- core::stringw s, s2;
-
- // get mark position
- const bool ml = (!m_passwordbox && (m_word_wrap || m_multiline));
- const s32 realmbgn = m_mark_begin < m_mark_end ? m_mark_begin : m_mark_end;
- const s32 realmend = m_mark_begin < m_mark_end ? m_mark_end : m_mark_begin;
- const s32 hlineStart = ml ? getLineFromPos(realmbgn) : 0;
- const s32 hlineCount = ml ? getLineFromPos(realmend) - hlineStart + 1 : 1;
- const s32 lineCount = ml ? m_broken_text.size() : 1;
-
- // Save the override color information.
- // Then, alter it if the edit box is disabled.
- const bool prevOver = m_override_color_enabled;
- const video::SColor prevColor = m_override_color;
-
- if (!Text.empty()) {
- if (!IsEnabled && !m_override_color_enabled)
- {
- m_override_color_enabled = true;
- m_override_color = 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<s32> c = localClipRect;
- c.clipAgainst(m_current_text_rect);
- if (!c.isValid())
- continue;
-
- // get current line
- if (m_passwordbox)
- {
- if (m_broken_text.size() != 1)
- {
- m_broken_text.clear();
- m_broken_text.emplace_back();
- }
- if (m_broken_text[0].size() != Text.size())
- {
- m_broken_text[0] = Text;
- for (u32 q = 0; q < Text.size(); ++q)
- {
- m_broken_text[0] [q] = m_passwordchar;
- }
- }
- txtLine = &m_broken_text[0];
- startPos = 0;
- }
- else
- {
- txtLine = ml ? &m_broken_text[i] : &Text;
- startPos = ml ? m_broken_text_positions[i] : 0;
- }
-
-
- // draw normal text
- font->draw(txtLine->c_str(), m_current_text_rect,
- m_override_color_enabled ? m_override_color : skin->getColor(EGDC_BUTTON_TEXT),
- false, true, &localClipRect);
-
- // draw mark and marked text
- if (focus && m_mark_begin != m_mark_end && 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;
-
- m_current_text_rect.UpperLeftCorner.X += mbegin;
- m_current_text_rect.LowerRightCorner.X = m_current_text_rect.UpperLeftCorner.X + mend - mbegin;
-
- // draw mark
- skin->draw2DRectangle(this, skin->getColor(EGDC_HIGH_LIGHT), m_current_text_rect, &localClipRect);
-
- // draw marked text
- s = txtLine->subString(lineStartPos, lineEndPos - lineStartPos);
-
- if (!s.empty())
- font->draw(s.c_str(), m_current_text_rect,
- m_override_color_enabled ? m_override_color : skin->getColor(EGDC_HIGH_LIGHT_TEXT),
- false, true, &localClipRect);
-
- }
- }
-
- // Return the override color information to its previous settings.
- m_override_color_enabled = prevOver;
- m_override_color = prevColor;
- }
-
- // draw cursor
-
- if (m_word_wrap || m_multiline)
- {
- cursorLine = getLineFromPos(m_cursor_pos);
- txtLine = &m_broken_text[cursorLine];
- startPos = m_broken_text_positions[cursorLine];
- }
- s = txtLine->subString(0,m_cursor_pos-startPos);
- charcursorpos = font->getDimension(s.c_str()).Width +
- font->getKerningWidth(L"_", m_cursor_pos-startPos > 0 ? &((*txtLine)[m_cursor_pos-startPos-1]) : 0);
-
- if (m_writable) {
- if (focus && (porting::getTimeMs() - m_blink_start_time) % 700 < 350) {
- setTextRect(cursorLine);
- m_current_text_rect.UpperLeftCorner.X += charcursorpos;
-
- font->draw(L"_", m_current_text_rect,
- m_override_color_enabled ? m_override_color : skin->getColor(EGDC_BUTTON_TEXT),
- false, true, &localClipRect);
- }
- }
- }
-
- // draw children
- IGUIElement::draw();
-}
-
-
-s32 intlGUIEditBox::getCursorPos(s32 x, s32 y)
-{
- IGUIFont* font = getActiveFont();
-
- const u32 lineCount = (m_word_wrap || m_multiline) ? m_broken_text.size() : 1;
-
- core::stringw *txtLine = NULL;
- s32 startPos = 0;
- u32 curr_line_idx = 0;
- x += 3;
-
- for (; curr_line_idx < lineCount; ++curr_line_idx) {
- setTextRect(curr_line_idx);
- if (curr_line_idx == 0 && y < m_current_text_rect.UpperLeftCorner.Y)
- y = m_current_text_rect.UpperLeftCorner.Y;
- if (curr_line_idx == lineCount - 1 && y > m_current_text_rect.LowerRightCorner.Y)
- y = m_current_text_rect.LowerRightCorner.Y;
-
- // is it inside this region?
- if (y >= m_current_text_rect.UpperLeftCorner.Y && y <= m_current_text_rect.LowerRightCorner.Y) {
- // we've found the clicked line
- txtLine = (m_word_wrap || m_multiline) ? &m_broken_text[curr_line_idx] : &Text;
- startPos = (m_word_wrap || m_multiline) ? m_broken_text_positions[curr_line_idx] : 0;
- break;
- }
- }
-
- if (x < m_current_text_rect.UpperLeftCorner.X)
- x = m_current_text_rect.UpperLeftCorner.X;
- else if (x > m_current_text_rect.LowerRightCorner.X)
- x = m_current_text_rect.LowerRightCorner.X;
-
- s32 idx = font->getCharacterFromPos(txtLine->c_str(), x - m_current_text_rect.UpperLeftCorner.X);
- // Special handling for last line, if we are on limits, add 1 extra shift because idx
- // will be the last char, not null char of the wstring
- if (curr_line_idx == lineCount - 1 && x == m_current_text_rect.LowerRightCorner.X)
- idx++;
-
- return rangelim(idx + startPos, 0, S32_MAX);
-}
-
-
-//! Breaks the single text line.
-void intlGUIEditBox::breakText()
-{
- IGUISkin* skin = Environment->getSkin();
-
- if ((!m_word_wrap && !m_multiline) || !skin)
- return;
-
- m_broken_text.clear(); // need to reallocate :/
- m_broken_text_positions.clear();
-
- IGUIFont* font = m_override_font;
- if (!m_override_font)
- font = skin->getFont();
-
- if (!font)
- return;
-
- m_last_break_font = font;
-
- core::stringw line;
- core::stringw word;
- core::stringw whitespace;
- s32 lastLineStart = 0;
- s32 size = Text.size();
- s32 length = 0;
- s32 elWidth = RelativeRect.getWidth() - m_scrollbar_width - 10;
- wchar_t c;
-
- for (s32 i=0; i<size; ++i)
- {
- c = Text[i];
- bool lineBreak = false;
-
- if (c == L'\r') // Mac or Windows breaks
- {
- lineBreak = true;
- c = ' ';
- if (Text[i+1] == L'\n') // Windows breaks
- {
- Text.erase(i+1);
- --size;
- }
- }
- else if (c == L'\n') // Unix breaks
- {
- lineBreak = true;
- c = ' ';
- }
-
- // don't break if we're not a multi-line edit box
- if (!m_multiline)
- lineBreak = false;
-
- if (c == L' ' || c == 0 || i == (size-1))
- {
- if (!word.empty()) {
- // here comes the next whitespace, look if
- // we can break the last word to the next line.
- s32 whitelgth = font->getDimension(whitespace.c_str()).Width;
- s32 worldlgth = font->getDimension(word.c_str()).Width;
-
- if (m_word_wrap && length + worldlgth + whitelgth > elWidth)
- {
- // break to next line
- length = worldlgth;
- m_broken_text.push_back(line);
- m_broken_text_positions.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;
- m_broken_text.push_back(line);
- m_broken_text_positions.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;
- m_broken_text.push_back(line);
- m_broken_text_positions.push_back(lastLineStart);
-}
-
-
-void intlGUIEditBox::setTextRect(s32 line)
-{
- core::dimension2du d;
-
- IGUISkin* skin = Environment->getSkin();
- if (!skin)
- return;
-
- IGUIFont* font = m_override_font ? m_override_font : skin->getFont();
-
- if (!font)
- return;
-
- // get text dimension
- const u32 lineCount = (m_word_wrap || m_multiline) ? m_broken_text.size() : 1;
- if (m_word_wrap || m_multiline)
- {
- d = font->getDimension(m_broken_text[line].c_str());
- }
- else
- {
- d = font->getDimension(Text.c_str());
- d.Height = AbsoluteRect.getHeight();
- }
- d.Height += font->getKerningHeight();
-
- // justification
- switch (m_halign)
- {
- case EGUIA_CENTER:
- // align to h centre
- m_current_text_rect.UpperLeftCorner.X = (m_frame_rect.getWidth()/2) - (d.Width/2);
- m_current_text_rect.LowerRightCorner.X = (m_frame_rect.getWidth()/2) + (d.Width/2);
- break;
- case EGUIA_LOWERRIGHT:
- // align to right edge
- m_current_text_rect.UpperLeftCorner.X = m_frame_rect.getWidth() - d.Width;
- m_current_text_rect.LowerRightCorner.X = m_frame_rect.getWidth();
- break;
- default:
- // align to left edge
- m_current_text_rect.UpperLeftCorner.X = 0;
- m_current_text_rect.LowerRightCorner.X = d.Width;
-
- }
-
- switch (m_valign)
- {
- case EGUIA_CENTER:
- // align to v centre
- m_current_text_rect.UpperLeftCorner.Y =
- (m_frame_rect.getHeight()/2) - (lineCount*d.Height)/2 + d.Height*line;
- break;
- case EGUIA_LOWERRIGHT:
- // align to bottom edge
- m_current_text_rect.UpperLeftCorner.Y =
- m_frame_rect.getHeight() - lineCount*d.Height + d.Height*line;
- break;
- default:
- // align to top edge
- m_current_text_rect.UpperLeftCorner.Y = d.Height*line;
- break;
- }
-
- m_current_text_rect.UpperLeftCorner.X -= m_hscroll_pos;
- m_current_text_rect.LowerRightCorner.X -= m_hscroll_pos;
- m_current_text_rect.UpperLeftCorner.Y -= m_vscroll_pos;
- m_current_text_rect.LowerRightCorner.Y = m_current_text_rect.UpperLeftCorner.Y + d.Height;
-
- m_current_text_rect += m_frame_rect.UpperLeftCorner;
-
-}
-
-void intlGUIEditBox::calculateScrollPos()
-{
- if (!m_autoscroll)
- return;
-
- // calculate horizontal scroll position
- s32 cursLine = getLineFromPos(m_cursor_pos);
- setTextRect(cursLine);
-
- // don't do horizontal scrolling when wordwrap is enabled.
- if (!m_word_wrap)
- {
- // get cursor position
- IGUISkin* skin = Environment->getSkin();
- if (!skin)
- return;
- IGUIFont* font = m_override_font ? m_override_font : skin->getFont();
- if (!font)
- return;
-
- core::stringw *txtLine = m_multiline ? &m_broken_text[cursLine] : &Text;
- s32 cPos = m_multiline ? m_cursor_pos - m_broken_text_positions[cursLine] : m_cursor_pos;
-
- s32 cStart = m_current_text_rect.UpperLeftCorner.X + m_hscroll_pos +
- font->getDimension(txtLine->subString(0, cPos).c_str()).Width;
-
- s32 cEnd = cStart + font->getDimension(L"_ ").Width;
-
- if (m_frame_rect.LowerRightCorner.X < cEnd)
- m_hscroll_pos = cEnd - m_frame_rect.LowerRightCorner.X;
- else if (m_frame_rect.UpperLeftCorner.X > cStart)
- m_hscroll_pos = cStart - m_frame_rect.UpperLeftCorner.X;
- else
- m_hscroll_pos = 0;
-
- // todo: adjust scrollbar
- }
-
- if (!m_word_wrap && !m_multiline)
- return;
-
- // vertical scroll position
- if (m_frame_rect.LowerRightCorner.Y < m_current_text_rect.LowerRightCorner.Y)
- m_vscroll_pos += m_current_text_rect.LowerRightCorner.Y - m_frame_rect.LowerRightCorner.Y; // scrolling downwards
- else if (m_frame_rect.UpperLeftCorner.Y > m_current_text_rect.UpperLeftCorner.Y)
- m_vscroll_pos += m_current_text_rect.UpperLeftCorner.Y - m_frame_rect.UpperLeftCorner.Y; // scrolling upwards
-
- // todo: adjust scrollbar
- if (m_vscrollbar)
- m_vscrollbar->setPos(m_vscroll_pos);
-}
-
-
-//! Create a vertical scrollbar
-void intlGUIEditBox::createVScrollBar()
-{
- s32 fontHeight = 1;
-
- if (m_override_font) {
- fontHeight = m_override_font->getDimension(L"").Height;
- } else {
- if (IGUISkin* skin = Environment->getSkin()) {
- if (IGUIFont* font = skin->getFont()) {
- fontHeight = font->getDimension(L"").Height;
- }
- }
- }
-
- irr::core::rect<s32> scrollbarrect = m_frame_rect;
- scrollbarrect.UpperLeftCorner.X += m_frame_rect.getWidth() - m_scrollbar_width;
- m_vscrollbar = new GUIScrollBar(Environment, getParent(), -1,
- scrollbarrect, false, true);
-
- m_vscrollbar->setVisible(false);
- m_vscrollbar->setSmallStep(3 * fontHeight);
- m_vscrollbar->setLargeStep(10 * fontHeight);
-}
-
-} // end namespace gui
-} // end namespace irr
diff --git a/src/gui/intlGUIEditBox.h b/src/gui/intlGUIEditBox.h
deleted file mode 100644
index 007fe1c93..000000000
--- a/src/gui/intlGUIEditBox.h
+++ /dev/null
@@ -1,68 +0,0 @@
-// 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
-
-#pragma once
-
-#include "IrrCompileConfig.h"
-//#ifdef _IRR_COMPILE_WITH_GUI_
-
-#include "guiEditBox.h"
-#include "irrArray.h"
-#include "IOSOperator.h"
-
-namespace irr
-{
-namespace gui
-{
- class intlGUIEditBox : public GUIEditBox
- {
- public:
-
- //! constructor
- intlGUIEditBox(const wchar_t* text, bool border, IGUIEnvironment* environment,
- IGUIElement* parent, s32 id, const core::rect<s32>& rectangle,
- bool writable = true, bool has_vscrollbar = false);
-
- //! destructor
- virtual ~intlGUIEditBox() {}
-
- //! Sets whether to draw the background
- virtual void setDrawBackground(bool draw);
-
- virtual bool isDrawBackgroundEnabled() const { return true; }
-
- //! draws the element and its children
- virtual void draw();
-
- //! Updates the absolute position, splits text if required
- virtual void updateAbsolutePosition();
-
- virtual void setCursorChar(const wchar_t cursorChar) {}
-
- virtual wchar_t getCursorChar() const { return L'|'; }
-
- virtual void setCursorBlinkTime(u32 timeMs) {}
-
- virtual u32 getCursorBlinkTime() const { return 500; }
-
- protected:
- //! Breaks the single text line.
- virtual void breakText();
- //! sets the area of the given line
- virtual void setTextRect(s32 line);
-
- //! calculates the current scroll position
- void calculateScrollPos();
-
- s32 getCursorPos(s32 x, s32 y);
-
- //! Create a vertical scrollbar
- void createVScrollBar();
- };
-
-
-} // end namespace gui
-} // end namespace irr
-
-//#endif // _IRR_COMPILE_WITH_GUI_
diff --git a/src/gui/modalMenu.cpp b/src/gui/modalMenu.cpp
index 0d3fb55f0..56a5d2cb9 100644
--- a/src/gui/modalMenu.cpp
+++ b/src/gui/modalMenu.cpp
@@ -26,6 +26,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#ifdef HAVE_TOUCHSCREENGUI
#include "touchscreengui.h"
+#include "client/renderingengine.h"
#endif
// clang-format off
@@ -40,8 +41,8 @@ GUIModalMenu::GUIModalMenu(gui::IGUIEnvironment* env, gui::IGUIElement* parent,
m_remap_dbl_click(remap_dbl_click)
{
m_gui_scale = g_settings->getFloat("gui_scaling");
-#ifdef __ANDROID__
- float d = porting::getDisplayDensity();
+#ifdef HAVE_TOUCHSCREENGUI
+ float d = RenderingEngine::getDisplayDensity();
m_gui_scale *= 1.1 - 0.3 * d + 0.2 * d * d;
#endif
setVisible(true);
@@ -183,7 +184,7 @@ static bool isChild(gui::IGUIElement *tocheck, gui::IGUIElement *parent)
return false;
}
-#ifdef __ANDROID__
+#ifdef HAVE_TOUCHSCREENGUI
bool GUIModalMenu::simulateMouseEvent(
gui::IGUIElement *target, ETOUCH_INPUT_EVENT touch_event)
@@ -217,6 +218,8 @@ bool GUIModalMenu::simulateMouseEvent(
void GUIModalMenu::enter(gui::IGUIElement *hovered)
{
+ if (!hovered)
+ return;
sanity_check(!m_hovered);
m_hovered.grab(hovered);
SEvent gui_event{};
@@ -268,7 +271,7 @@ bool GUIModalMenu::preprocessEvent(const SEvent &event)
std::string label = wide_to_utf8(getLabelByID(hovered->getID()));
if (label.empty())
label = "text";
- message += gettext(label) + ":";
+ message += strgettext(label) + ":";
// single line text input
int type = 2;
@@ -286,7 +289,9 @@ bool GUIModalMenu::preprocessEvent(const SEvent &event)
return retval;
}
}
+#endif
+#ifdef HAVE_TOUCHSCREENGUI
if (event.EventType == EET_TOUCH_INPUT_EVENT) {
irr_ptr<GUIModalMenu> holder;
holder.grab(this); // keep this alive until return (it might be dropped downstream [?])
diff --git a/src/gui/modalMenu.h b/src/gui/modalMenu.h
index ed0da3205..06e78f06b 100644
--- a/src/gui/modalMenu.h
+++ b/src/gui/modalMenu.h
@@ -75,10 +75,10 @@ protected:
v2u32 m_screensize_old;
float m_gui_scale;
#ifdef __ANDROID__
- v2s32 m_down_pos;
std::string m_jni_field_name;
#endif
#ifdef HAVE_TOUCHSCREENGUI
+ v2s32 m_down_pos;
bool m_touchscreen_visible = true;
#endif
@@ -102,7 +102,7 @@ private:
// wants to launch other menus
bool m_allow_focus_removal = false;
-#ifdef __ANDROID__
+#ifdef HAVE_TOUCHSCREENGUI
irr_ptr<gui::IGUIElement> m_hovered;
bool simulateMouseEvent(gui::IGUIElement *target, ETOUCH_INPUT_EVENT touch_event);
diff --git a/src/gui/profilergraph.cpp b/src/gui/profilergraph.cpp
index b29285e2f..f71ef3799 100644
--- a/src/gui/profilergraph.cpp
+++ b/src/gui/profilergraph.cpp
@@ -94,20 +94,29 @@ void ProfilerGraph::draw(s32 x_left, s32 y_bottom, video::IVideoDriver *driver,
show_min = 0;
}
- s32 texth = 15;
+ const s32 texth = 15;
char buf[10];
- porting::mt_snprintf(buf, sizeof(buf), "%.3g", show_max);
+ if (floorf(show_max) == show_max)
+ porting::mt_snprintf(buf, sizeof(buf), "%.5g", show_max);
+ else
+ porting::mt_snprintf(buf, sizeof(buf), "%.3g", show_max);
font->draw(utf8_to_wide(buf).c_str(),
core::rect<s32>(textx, y - graphh, textx2,
y - graphh + texth),
meta.color);
- porting::mt_snprintf(buf, sizeof(buf), "%.3g", show_min);
+
+ if (floorf(show_min) == show_min)
+ porting::mt_snprintf(buf, sizeof(buf), "%.5g", show_min);
+ else
+ porting::mt_snprintf(buf, sizeof(buf), "%.3g", show_min);
font->draw(utf8_to_wide(buf).c_str(),
core::rect<s32>(textx, y - texth, textx2, y), meta.color);
+
font->draw(utf8_to_wide(id).c_str(),
core::rect<s32>(textx, y - graphh / 2 - texth / 2, textx2,
y - graphh / 2 + texth / 2),
meta.color);
+
s32 graph1y = y;
s32 graph1h = graphh;
bool relativegraph = (show_min != 0 && show_min != show_max);
diff --git a/src/gui/touchscreengui.cpp b/src/gui/touchscreengui.cpp
index e1a971462..ebe1a6325 100644
--- a/src/gui/touchscreengui.cpp
+++ b/src/gui/touchscreengui.cpp
@@ -28,19 +28,18 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "util/numeric.h"
#include "porting.h"
#include "client/guiscalingfilter.h"
+#include "client/renderingengine.h"
#include <iostream>
#include <algorithm>
-#include <ISceneCollisionManager.h>
-
using namespace irr::core;
const char **button_imagenames = (const char *[]) {
"jump_btn.png",
"down.png",
"zoom.png",
- "aux_btn.png"
+ "aux1_btn.png"
};
const char **joystick_imagenames = (const char *[]) {
@@ -80,8 +79,8 @@ static irr::EKEY_CODE id2keycode(touch_gui_button_id id)
case zoom_id:
key = "zoom";
break;
- case special1_id:
- key = "special1";
+ case aux1_id:
+ key = "aux1";
break;
case fly_id:
key = "freemove";
@@ -425,10 +424,10 @@ TouchScreenGUI::TouchScreenGUI(IrrlichtDevice *device, IEventReceiver *receiver)
m_touchscreen_threshold = g_settings->getU16("touchscreen_threshold");
m_fixed_joystick = g_settings->getBool("fixed_virtual_joystick");
- m_joystick_triggers_special1 = g_settings->getBool("virtual_joystick_triggers_aux");
+ m_joystick_triggers_aux1 = g_settings->getBool("virtual_joystick_triggers_aux1");
m_screensize = m_device->getVideoDriver()->getScreenSize();
button_size = MYMIN(m_screensize.Y / 4.5f,
- porting::getDisplayDensity() *
+ RenderingEngine::getDisplayDensity() *
g_settings->getFloat("hud_scaling") * 65.0f);
}
@@ -521,9 +520,9 @@ void TouchScreenGUI::init(ISimpleTextureSource *tsrc)
m_screensize.Y - (3 * button_size)),
L"z", false);
- // init special1/aux button
- if (!m_joystick_triggers_special1)
- initButton(special1_id,
+ // init aux1 button
+ if (!m_joystick_triggers_aux1)
+ initButton(aux1_id,
rect<s32>(m_screensize.X - (1.25 * button_size),
m_screensize.Y - (2.5 * button_size),
m_screensize.X - (0.25 * button_size),
@@ -670,9 +669,9 @@ void TouchScreenGUI::handleReleaseEvent(size_t evt_id)
if (button != after_last_element_id) {
// handle button events
handleButtonEvent(button, evt_id, false);
- } else if (evt_id == m_move_id) {
+ } else if (m_has_move_id && evt_id == m_move_id) {
// handle the point used for moving view
- m_move_id = -1;
+ m_has_move_id = false;
// if this pointer issued a mouse event issue symmetric release here
if (m_move_sent_as_mouse_event) {
@@ -694,8 +693,8 @@ void TouchScreenGUI::handleReleaseEvent(size_t evt_id)
}
// handle joystick
- else if (evt_id == m_joystick_id) {
- m_joystick_id = -1;
+ else if (m_has_joystick_id && evt_id == m_joystick_id) {
+ m_has_joystick_id = false;
// reset joystick
for (unsigned int i = 0; i < 4; i++)
@@ -778,7 +777,8 @@ void TouchScreenGUI::translateEvent(const SEvent &event)
if ((m_fixed_joystick && dxj * dxj + dyj * dyj <= button_size * button_size * 1.5 * 1.5) ||
(!m_fixed_joystick && event.TouchInput.X < m_screensize.X / 3.0f)) {
// If we don't already have a starting point for joystick make this the one.
- if (m_joystick_id == -1) {
+ if (!m_has_joystick_id) {
+ m_has_joystick_id = true;
m_joystick_id = event.TouchInput.ID;
m_joystick_has_really_moved = false;
@@ -798,7 +798,8 @@ void TouchScreenGUI::translateEvent(const SEvent &event)
}
} else {
// If we don't already have a moving point make this the moving one.
- if (m_move_id == -1) {
+ if (!m_has_move_id) {
+ m_has_move_id = true;
m_move_id = event.TouchInput.ID;
m_move_has_really_moved = false;
m_move_downtime = porting::getTimeMs();
@@ -821,7 +822,7 @@ void TouchScreenGUI::translateEvent(const SEvent &event)
v2s32(event.TouchInput.X, event.TouchInput.Y))
return;
- if (m_move_id != -1) {
+ if (m_has_move_id) {
if ((event.TouchInput.ID == m_move_id) &&
(!m_move_sent_as_mouse_event)) {
@@ -864,7 +865,7 @@ void TouchScreenGUI::translateEvent(const SEvent &event)
}
}
- if (m_joystick_id != -1 && event.TouchInput.ID == m_joystick_id) {
+ if (m_has_joystick_id && event.TouchInput.ID == m_joystick_id) {
s32 X = event.TouchInput.X;
s32 Y = event.TouchInput.Y;
@@ -923,7 +924,7 @@ void TouchScreenGUI::translateEvent(const SEvent &event)
}
if (distance > button_size) {
- m_joystick_status[j_special1] = true;
+ m_joystick_status[j_aux1] = true;
// move joystick "button"
s32 ndx = button_size * dx / distance - button_size / 2.0f;
s32 ndy = button_size * dy / distance - button_size / 2.0f;
@@ -943,7 +944,7 @@ void TouchScreenGUI::translateEvent(const SEvent &event)
}
}
- if (m_move_id == -1 && m_joystick_id == -1)
+ if (!m_has_move_id && !m_has_joystick_id)
handleChangedButton(event);
}
}
@@ -1039,7 +1040,7 @@ bool TouchScreenGUI::doubleTapDetection()
void TouchScreenGUI::applyJoystickStatus()
{
for (unsigned int i = 0; i < 5; i++) {
- if (i == 4 && !m_joystick_triggers_special1)
+ if (i == 4 && !m_joystick_triggers_aux1)
continue;
SEvent translated{};
@@ -1088,7 +1089,7 @@ void TouchScreenGUI::step(float dtime)
button.repeatcounter += dtime;
// in case we're moving around digging does not happen
- if (m_move_id != -1)
+ if (m_has_move_id)
m_move_has_really_moved = true;
if (button.repeatcounter < button.repeatdelay)
@@ -1116,7 +1117,7 @@ void TouchScreenGUI::step(float dtime)
}
// if a new placed pointer isn't moved for some time start digging
- if ((m_move_id != -1) &&
+ if (m_has_move_id &&
(!m_move_has_really_moved) &&
(!m_move_sent_as_mouse_event)) {
diff --git a/src/gui/touchscreengui.h b/src/gui/touchscreengui.h
index 0349624fa..6b36c0d59 100644
--- a/src/gui/touchscreengui.h
+++ b/src/gui/touchscreengui.h
@@ -39,7 +39,7 @@ typedef enum
jump_id = 0,
crunch_id,
zoom_id,
- special1_id,
+ aux1_id,
after_last_element_id,
settings_starter_id,
rare_controls_starter_id,
@@ -69,7 +69,7 @@ typedef enum
j_backward,
j_left,
j_right,
- j_special1
+ j_aux1
} touch_gui_joystick_move_id;
typedef enum
@@ -217,7 +217,7 @@ private:
// forward, backward, left, right
touch_gui_button_id m_joystick_names[5] = {
- forward_id, backward_id, left_id, right_id, special1_id};
+ forward_id, backward_id, left_id, right_id, aux1_id};
bool m_joystick_status[5] = {false, false, false, false, false};
/*
@@ -228,16 +228,18 @@ private:
*/
line3d<f32> m_shootline;
- int m_move_id = -1;
+ bool m_has_move_id = false;
+ size_t m_move_id;
bool m_move_has_really_moved = false;
u64 m_move_downtime = 0;
bool m_move_sent_as_mouse_event = false;
v2s32 m_move_downlocation = v2s32(-10000, -10000);
- int m_joystick_id = -1;
+ bool m_has_joystick_id = false;
+ size_t m_joystick_id;
bool m_joystick_has_really_moved = false;
bool m_fixed_joystick = false;
- bool m_joystick_triggers_special1 = false;
+ bool m_joystick_triggers_aux1 = false;
button_info *m_joystick_btn_off = nullptr;
button_info *m_joystick_btn_bg = nullptr;
button_info *m_joystick_btn_center = nullptr;
diff --git a/src/httpfetch.cpp b/src/httpfetch.cpp
index 65202ce3e..16f0791c9 100644
--- a/src/httpfetch.cpp
+++ b/src/httpfetch.cpp
@@ -22,7 +22,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include <iostream>
#include <sstream>
#include <list>
-#include <map>
+#include <unordered_map>
#include <cerrno>
#include <mutex>
#include "network/socket.h" // for select()
@@ -37,13 +37,14 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "settings.h"
#include "noise.h"
-std::mutex g_httpfetch_mutex;
-std::map<unsigned long, std::queue<HTTPFetchResult> > g_httpfetch_results;
-PcgRandom g_callerid_randomness;
+static std::mutex g_httpfetch_mutex;
+static std::unordered_map<u64, std::queue<HTTPFetchResult>>
+ g_httpfetch_results;
+static PcgRandom g_callerid_randomness;
HTTPFetchRequest::HTTPFetchRequest() :
timeout(g_settings->getS32("curl_timeout")),
- connect_timeout(timeout),
+ connect_timeout(10 * 1000),
useragent(std::string(PROJECT_NAME_C "/") + g_version_hash + " (" + porting::get_sysinfo() + ")")
{
}
@@ -51,24 +52,22 @@ HTTPFetchRequest::HTTPFetchRequest() :
static void httpfetch_deliver_result(const HTTPFetchResult &fetch_result)
{
- unsigned long caller = fetch_result.caller;
+ u64 caller = fetch_result.caller;
if (caller != HTTPFETCH_DISCARD) {
MutexAutoLock lock(g_httpfetch_mutex);
- g_httpfetch_results[caller].push(fetch_result);
+ g_httpfetch_results[caller].emplace(fetch_result);
}
}
-static void httpfetch_request_clear(unsigned long caller);
+static void httpfetch_request_clear(u64 caller);
-unsigned long httpfetch_caller_alloc()
+u64 httpfetch_caller_alloc()
{
MutexAutoLock lock(g_httpfetch_mutex);
- // Check each caller ID except HTTPFETCH_DISCARD
- const unsigned long discard = HTTPFETCH_DISCARD;
- for (unsigned long caller = discard + 1; caller != discard; ++caller) {
- std::map<unsigned long, std::queue<HTTPFetchResult> >::iterator
- it = g_httpfetch_results.find(caller);
+ // Check each caller ID except reserved ones
+ for (u64 caller = HTTPFETCH_CID_START; caller != 0; ++caller) {
+ auto it = g_httpfetch_results.find(caller);
if (it == g_httpfetch_results.end()) {
verbosestream << "httpfetch_caller_alloc: allocating "
<< caller << std::endl;
@@ -79,18 +78,17 @@ unsigned long httpfetch_caller_alloc()
}
FATAL_ERROR("httpfetch_caller_alloc: ran out of caller IDs");
- return discard;
}
-unsigned long httpfetch_caller_alloc_secure()
+u64 httpfetch_caller_alloc_secure()
{
MutexAutoLock lock(g_httpfetch_mutex);
// Generate random caller IDs and make sure they're not
- // already used or equal to HTTPFETCH_DISCARD
+ // already used or reserved.
// Give up after 100 tries to prevent infinite loop
- u8 tries = 100;
- unsigned long caller;
+ size_t tries = 100;
+ u64 caller;
do {
caller = (((u64) g_callerid_randomness.next()) << 32) |
@@ -100,7 +98,8 @@ unsigned long httpfetch_caller_alloc_secure()
FATAL_ERROR("httpfetch_caller_alloc_secure: ran out of caller IDs");
return HTTPFETCH_DISCARD;
}
- } while (g_httpfetch_results.find(caller) != g_httpfetch_results.end());
+ } while (caller >= HTTPFETCH_CID_START &&
+ g_httpfetch_results.find(caller) != g_httpfetch_results.end());
verbosestream << "httpfetch_caller_alloc_secure: allocating "
<< caller << std::endl;
@@ -110,7 +109,7 @@ unsigned long httpfetch_caller_alloc_secure()
return caller;
}
-void httpfetch_caller_free(unsigned long caller)
+void httpfetch_caller_free(u64 caller)
{
verbosestream<<"httpfetch_caller_free: freeing "
<<caller<<std::endl;
@@ -122,13 +121,12 @@ void httpfetch_caller_free(unsigned long caller)
}
}
-bool httpfetch_async_get(unsigned long caller, HTTPFetchResult &fetch_result)
+bool httpfetch_async_get(u64 caller, HTTPFetchResult &fetch_result)
{
MutexAutoLock lock(g_httpfetch_mutex);
// Check that caller exists
- std::map<unsigned long, std::queue<HTTPFetchResult> >::iterator
- it = g_httpfetch_results.find(caller);
+ auto it = g_httpfetch_results.find(caller);
if (it == g_httpfetch_results.end())
return false;
@@ -138,7 +136,7 @@ bool httpfetch_async_get(unsigned long caller, HTTPFetchResult &fetch_result)
return false;
// Pop first result
- fetch_result = caller_results.front();
+ fetch_result = std::move(caller_results.front());
caller_results.pop();
return true;
}
@@ -243,7 +241,6 @@ HTTPFetchOngoing::HTTPFetchOngoing(const HTTPFetchRequest &request_,
// Set static cURL options
curl_easy_setopt(curl, CURLOPT_NOSIGNAL, 1);
- curl_easy_setopt(curl, CURLOPT_FAILONERROR, 1);
curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1);
curl_easy_setopt(curl, CURLOPT_MAXREDIRS, 3);
curl_easy_setopt(curl, CURLOPT_ENCODING, "gzip");
@@ -394,10 +391,17 @@ const HTTPFetchResult * HTTPFetchOngoing::complete(CURLcode res)
}
if (res != CURLE_OK) {
- errorstream << request.url << " not found ("
- << curl_easy_strerror(res) << ")"
- << " (response code " << result.response_code << ")"
+ errorstream << "HTTPFetch for " << request.url << " failed ("
+ << curl_easy_strerror(res) << ")" << std::endl;
+ } else if (result.response_code >= 400) {
+ errorstream << "HTTPFetch for " << request.url
+ << " returned response code " << result.response_code
<< std::endl;
+ if (result.caller == HTTPFETCH_PRINT_ERR && !result.data.empty()) {
+ errorstream << "Response body:" << std::endl;
+ safe_print_string(errorstream, result.data);
+ errorstream << std::endl;
+ }
}
return &result;
@@ -475,7 +479,7 @@ public:
m_requests.push_back(req);
}
- void requestClear(unsigned long caller, Event *event)
+ void requestClear(u64 caller, Event *event)
{
Request req;
req.type = RT_CLEAR;
@@ -506,7 +510,7 @@ protected:
}
else if (req.type == RT_CLEAR) {
- unsigned long caller = req.fetch_request.caller;
+ u64 caller = req.fetch_request.caller;
// Abort all ongoing fetches for the caller
for (std::vector<HTTPFetchOngoing*>::iterator
@@ -762,10 +766,12 @@ void httpfetch_cleanup()
{
verbosestream<<"httpfetch_cleanup: cleaning up"<<std::endl;
- g_httpfetch_thread->stop();
- g_httpfetch_thread->requestWakeUp();
- g_httpfetch_thread->wait();
- delete g_httpfetch_thread;
+ if (g_httpfetch_thread) {
+ g_httpfetch_thread->stop();
+ g_httpfetch_thread->requestWakeUp();
+ g_httpfetch_thread->wait();
+ delete g_httpfetch_thread;
+ }
curl_global_cleanup();
}
@@ -777,7 +783,7 @@ void httpfetch_async(const HTTPFetchRequest &fetch_request)
g_httpfetch_thread->start();
}
-static void httpfetch_request_clear(unsigned long caller)
+static void httpfetch_request_clear(u64 caller)
{
if (g_httpfetch_thread->isRunning()) {
Event event;
@@ -826,7 +832,7 @@ void httpfetch_async(const HTTPFetchRequest &fetch_request)
httpfetch_deliver_result(fetch_result);
}
-static void httpfetch_request_clear(unsigned long caller)
+static void httpfetch_request_clear(u64 caller)
{
}
diff --git a/src/httpfetch.h b/src/httpfetch.h
index 3b9f17f0a..a4901e63b 100644
--- a/src/httpfetch.h
+++ b/src/httpfetch.h
@@ -23,10 +23,17 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "util/string.h"
#include "config.h"
-// Can be used in place of "caller" in asynchronous transfers to discard result
-// (used as default value of "caller")
+// These can be used in place of "caller" in to specify special handling.
+// Discard result (used as default value of "caller").
#define HTTPFETCH_DISCARD 0
+// Indicates that the result should not be discarded when performing a
+// synchronous request (since a real caller ID is not needed for synchronous
+// requests because the result does not have to be retrieved later).
#define HTTPFETCH_SYNC 1
+// Print response body to console if the server returns an error code.
+#define HTTPFETCH_PRINT_ERR 2
+// Start of regular allocated caller IDs.
+#define HTTPFETCH_CID_START 3
// Methods
enum HttpMethod : u8
@@ -43,11 +50,11 @@ struct HTTPFetchRequest
// Identifies the caller (for asynchronous requests)
// Ignored by httpfetch_sync
- unsigned long caller = HTTPFETCH_DISCARD;
+ u64 caller = HTTPFETCH_DISCARD;
// Some number that identifies the request
// (when the same caller issues multiple httpfetch_async calls)
- unsigned long request_id = 0;
+ u64 request_id = 0;
// Timeout for the whole transfer, in milliseconds
long timeout;
@@ -85,8 +92,8 @@ struct HTTPFetchResult
long response_code = 0;
std::string data = "";
// The caller and request_id from the corresponding HTTPFetchRequest.
- unsigned long caller = HTTPFETCH_DISCARD;
- unsigned long request_id = 0;
+ u64 caller = HTTPFETCH_DISCARD;
+ u64 request_id = 0;
HTTPFetchResult() = default;
@@ -107,19 +114,19 @@ void httpfetch_async(const HTTPFetchRequest &fetch_request);
// If any fetch for the given caller ID is complete, removes it from the
// result queue, sets the fetch result and returns true. Otherwise returns false.
-bool httpfetch_async_get(unsigned long caller, HTTPFetchResult &fetch_result);
+bool httpfetch_async_get(u64 caller, HTTPFetchResult &fetch_result);
// Allocates a caller ID for httpfetch_async
// Not required if you want to set caller = HTTPFETCH_DISCARD
-unsigned long httpfetch_caller_alloc();
+u64 httpfetch_caller_alloc();
// Allocates a non-predictable caller ID for httpfetch_async
-unsigned long httpfetch_caller_alloc_secure();
+u64 httpfetch_caller_alloc_secure();
// Frees a caller ID allocated with httpfetch_caller_alloc
// Note: This can be expensive, because the httpfetch thread is told
// to stop any ongoing fetches for the given caller.
-void httpfetch_caller_free(unsigned long caller);
+void httpfetch_caller_free(u64 caller);
// Performs a synchronous HTTP request. This blocks and therefore should
// only be used from background threads.
diff --git a/src/hud.cpp b/src/hud.cpp
index 1791e04df..e4ad7940f 100644
--- a/src/hud.cpp
+++ b/src/hud.cpp
@@ -50,6 +50,7 @@ const struct EnumString es_HudElementStat[] =
{HUD_STAT_SIZE, "size"},
{HUD_STAT_Z_INDEX, "z_index"},
{HUD_STAT_TEXT2, "text2"},
+ {HUD_STAT_STYLE, "style"},
{0, NULL},
};
diff --git a/src/hud.h b/src/hud.h
index a0613ae98..769966688 100644
--- a/src/hud.h
+++ b/src/hud.h
@@ -33,6 +33,10 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#define HUD_CORNER_LOWER 1
#define HUD_CORNER_CENTER 2
+#define HUD_STYLE_BOLD 1
+#define HUD_STYLE_ITALIC 2
+#define HUD_STYLE_MONO 4
+
// 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.
@@ -78,6 +82,7 @@ enum HudElementStat {
HUD_STAT_SIZE,
HUD_STAT_Z_INDEX,
HUD_STAT_TEXT2,
+ HUD_STAT_STYLE,
};
enum HudCompassDir {
@@ -102,6 +107,7 @@ struct HudElement {
v2s32 size;
s16 z_index = 0;
std::string text2;
+ u32 style;
};
extern const EnumString es_HudElementType[];
diff --git a/src/inventory.cpp b/src/inventory.cpp
index fc1aaf371..d14b12f9d 100644
--- a/src/inventory.cpp
+++ b/src/inventory.cpp
@@ -460,7 +460,6 @@ void InventoryList::deSerialize(std::istream &is)
std::getline(is, line, '\n');
std::istringstream iss(line);
- //iss.imbue(std::locale("C"));
std::string name;
std::getline(iss, name, ' ');
@@ -561,11 +560,6 @@ u32 InventoryList::getUsedSlots() const
return num;
}
-u32 InventoryList::getFreeSlots() const
-{
- return getSize() - getUsedSlots();
-}
-
const ItemStack& InventoryList::getItem(u32 i) const
{
assert(i < m_size); // Pre-condition
@@ -938,19 +932,16 @@ void Inventory::deSerialize(std::istream &is)
InventoryList * Inventory::addList(const std::string &name, u32 size)
{
setModified();
+
+ // Remove existing lists
s32 i = getListIndex(name);
- if(i != -1)
- {
- if(m_lists[i]->getSize() != size)
- {
- delete m_lists[i];
- m_lists[i] = new InventoryList(name, size, m_itemdef);
- m_lists[i]->setModified();
- }
+ if (i != -1) {
+ delete m_lists[i];
+ m_lists[i] = new InventoryList(name, size, m_itemdef);
+ m_lists[i]->setModified();
return m_lists[i];
}
-
//don't create list with invalid name
if (name.find(' ') != std::string::npos)
return nullptr;
@@ -999,7 +990,7 @@ const InventoryList *Inventory::getList(const std::string &name) const
return m_lists[i];
}
-const s32 Inventory::getListIndex(const std::string &name) const
+s32 Inventory::getListIndex(const std::string &name) const
{
for(u32 i=0; i<m_lists.size(); i++)
{
diff --git a/src/inventory.h b/src/inventory.h
index f36bc57cf..eb063d4ad 100644
--- a/src/inventory.h
+++ b/src/inventory.h
@@ -211,7 +211,6 @@ public:
u32 getWidth() const;
// Count used slots
u32 getUsedSlots() const;
- u32 getFreeSlots() const;
// Get reference to item
const ItemStack& getItem(u32 i) const;
@@ -298,6 +297,7 @@ public:
void serialize(std::ostream &os, bool incremental = false) const;
void deSerialize(std::istream &is);
+ // Creates a new list if none exists or truncates existing lists
InventoryList * addList(const std::string &name, u32 size);
InventoryList * getList(const std::string &name);
const InventoryList * getList(const std::string &name) const;
@@ -335,7 +335,7 @@ public:
}
private:
// -1 if not found
- const s32 getListIndex(const std::string &name) const;
+ s32 getListIndex(const std::string &name) const;
std::vector<InventoryList*> m_lists;
IItemDefManager *m_itemdef;
diff --git a/src/inventorymanager.cpp b/src/inventorymanager.cpp
index 1e81c1dbc..a159bf786 100644
--- a/src/inventorymanager.cpp
+++ b/src/inventorymanager.cpp
@@ -273,7 +273,7 @@ void IMoveAction::apply(InventoryManager *mgr, ServerActiveObject *player, IGame
}
if (!list_to) {
infostream << "IMoveAction::apply(): FAIL: destination list not found: "
- << "to_inv=\""<<to_inv.dump() << "\""
+ << "to_inv=\"" << to_inv.dump() << "\""
<< ", to_list=\"" << to_list << "\"" << std::endl;
return;
}
@@ -322,12 +322,20 @@ void IMoveAction::apply(InventoryManager *mgr, ServerActiveObject *player, IGame
return;
}
- if ((u16)to_i > list_to->getSize()) {
+ if (from_i < 0 || list_from->getSize() <= (u32) from_i) {
+ infostream << "IMoveAction::apply(): FAIL: source index out of bounds: "
+ << "size of from_list=\"" << list_from->getSize() << "\""
+ << ", from_index=\"" << from_i << "\"" << std::endl;
+ return;
+ }
+
+ if (to_i < 0 || list_to->getSize() <= (u32) to_i) {
infostream << "IMoveAction::apply(): FAIL: destination index out of bounds: "
- << "to_i=" << to_i
- << ", size=" << list_to->getSize() << std::endl;
+ << "size of to_list=\"" << list_to->getSize() << "\""
+ << ", to_index=\"" << to_i << "\"" << std::endl;
return;
}
+
/*
Do not handle rollback if both inventories are that of the same player
*/
diff --git a/src/irrlicht_changes/CGUITTFont.cpp b/src/irrlicht_changes/CGUITTFont.cpp
index bd4e700de..e785ea837 100644
--- a/src/irrlicht_changes/CGUITTFont.cpp
+++ b/src/irrlicht_changes/CGUITTFont.cpp
@@ -103,7 +103,7 @@ video::IImage* SGUITTGlyph::createGlyphImage(const FT_Bitmap& bits, video::IVide
// Load the monochrome data in.
const u32 image_pitch = image->getPitch() / sizeof(u16);
- u16* image_data = (u16*)image->lock();
+ u16* image_data = (u16*)image->getData();
u8* glyph_data = bits.buffer;
for (s32 y = 0; y < (s32)bits.rows; ++y)
@@ -119,7 +119,6 @@ video::IImage* SGUITTGlyph::createGlyphImage(const FT_Bitmap& bits, video::IVide
}
image_data += image_pitch;
}
- image->unlock();
break;
}
@@ -133,7 +132,7 @@ video::IImage* SGUITTGlyph::createGlyphImage(const FT_Bitmap& bits, video::IVide
// Load the grayscale data in.
const float gray_count = static_cast<float>(bits.num_grays);
const u32 image_pitch = image->getPitch() / sizeof(u32);
- u32* image_data = (u32*)image->lock();
+ u32* image_data = (u32*)image->getData();
u8* glyph_data = bits.buffer;
for (s32 y = 0; y < (s32)bits.rows; ++y)
{
@@ -145,7 +144,6 @@ video::IImage* SGUITTGlyph::createGlyphImage(const FT_Bitmap& bits, video::IVide
}
glyph_data += bits.pitch;
}
- image->unlock();
break;
}
default:
@@ -277,7 +275,8 @@ CGUITTFont* CGUITTFont::create(IrrlichtDevice *device, const io::path& filename,
//! Constructor.
CGUITTFont::CGUITTFont(IGUIEnvironment *env)
: use_monochrome(false), use_transparency(true), use_hinting(true), use_auto_hinting(true),
-batch_load_size(1), Device(0), Environment(env), Driver(0), GlobalKerningWidth(0), GlobalKerningHeight(0)
+batch_load_size(1), Device(0), Environment(env), Driver(0), GlobalKerningWidth(0), GlobalKerningHeight(0),
+shadow_offset(0), shadow_alpha(0), fallback(0)
{
#ifdef _DEBUG
setDebugName("CGUITTFont");
@@ -548,12 +547,12 @@ void CGUITTFont::setFontHinting(const bool enable, const bool enable_auto_hintin
void CGUITTFont::draw(const core::stringw& text, const core::rect<s32>& position, video::SColor color, bool hcenter, bool vcenter, const core::rect<s32>* clip)
{
- draw(EnrichedString(std::wstring(text.c_str()), color), position, color, hcenter, vcenter, clip);
+ draw(EnrichedString(std::wstring(text.c_str()), color), position, hcenter, vcenter, clip);
}
-void CGUITTFont::draw(const EnrichedString &text, const core::rect<s32>& position, video::SColor color, bool hcenter, bool vcenter, const core::rect<s32>* clip)
+void CGUITTFont::draw(const EnrichedString &text, const core::rect<s32>& position, bool hcenter, bool vcenter, const core::rect<s32>* clip)
{
- std::vector<video::SColor> colors = text.getColors();
+ const std::vector<video::SColor> &colors = text.getColors();
if (!Driver)
return;
@@ -563,6 +562,7 @@ void CGUITTFont::draw(const EnrichedString &text, const core::rect<s32>& positio
{
Glyph_Pages[i]->render_positions.clear();
Glyph_Pages[i]->render_source_rects.clear();
+ Glyph_Pages[i]->render_colors.clear();
}
// Set up some variables.
@@ -591,7 +591,6 @@ void CGUITTFont::draw(const EnrichedString &text, const core::rect<s32>& positio
u32 n;
uchar32_t previousChar = 0;
core::ustring::const_iterator iter(utext);
- std::vector<video::SColor> applied_colors;
while (!iter.atEnd())
{
uchar32_t currentChar = *iter;
@@ -637,12 +636,36 @@ void CGUITTFont::draw(const EnrichedString &text, const core::rect<s32>& positio
CGUITTGlyphPage* const page = Glyph_Pages[glyph.glyph_page];
page->render_positions.push_back(core::position2di(offset.X + offx, offset.Y + offy));
page->render_source_rects.push_back(glyph.source_rect);
+ if (iter.getPos() < colors.size())
+ page->render_colors.push_back(colors[iter.getPos()]);
+ else
+ page->render_colors.push_back(video::SColor(255,255,255,255));
Render_Map.set(glyph.glyph_page, page);
- u32 current_color = iter.getPos();
- if (current_color < colors.size())
- applied_colors.push_back(colors[current_color]);
}
- offset.X += getWidthFromCharacter(currentChar);
+ if (n > 0)
+ {
+ offset.X += getWidthFromCharacter(currentChar);
+ }
+ else if (fallback != 0)
+ {
+ // Let the fallback font draw it, this isn't super efficient but hopefully that doesn't matter
+ wchar_t l1[] = { (wchar_t) currentChar, 0 }, l2 = (wchar_t) previousChar;
+
+ if (visible)
+ {
+ // Apply kerning.
+ offset.X += fallback->getKerningWidth(l1, &l2);
+ offset.Y += fallback->getKerningHeight();
+
+ u32 current_color = iter.getPos();
+ fallback->draw(core::stringw(l1),
+ core::rect<s32>({offset.X-1, offset.Y-1}, position.LowerRightCorner), // ???
+ current_color < colors.size() ? colors[current_color] : video::SColor(255, 255, 255, 255),
+ false, false, clip);
+ }
+
+ offset.X += fallback->getDimension(l1).Width;
+ }
previousChar = currentChar;
++iter;
@@ -666,16 +689,24 @@ void CGUITTFont::draw(const EnrichedString &text, const core::rect<s32>& positio
for (size_t i = 0; i < page->render_positions.size(); ++i)
page->render_positions[i] -= core::vector2di(shadow_offset, shadow_offset);
}
+ // render runs of matching color in batch
+ size_t ibegin;
+ video::SColor colprev;
for (size_t i = 0; i < page->render_positions.size(); ++i) {
- irr::video::SColor col;
- if (!applied_colors.empty()) {
- col = applied_colors[i < applied_colors.size() ? i : 0];
- } else {
- col = irr::video::SColor(255, 255, 255, 255);
- }
+ ibegin = i;
+ colprev = page->render_colors[i];
+ do
+ ++i;
+ while (i < page->render_positions.size() && page->render_colors[i] == colprev);
+ core::array<core::vector2di> tmp_positions;
+ core::array<core::recti> tmp_source_rects;
+ tmp_positions.set_pointer(&page->render_positions[ibegin], i - ibegin, false, false); // no copy
+ tmp_source_rects.set_pointer(&page->render_source_rects[ibegin], i - ibegin, false, false);
+ --i;
+
if (!use_transparency)
- col.color |= 0xff000000;
- Driver->draw2DImage(page->texture, page->render_positions[i], page->render_source_rects[i], clip, col, true);
+ colprev.color |= 0xff000000;
+ Driver->draw2DImageBatch(page->texture, tmp_positions, tmp_source_rects, clip, colprev, true);
}
}
}
@@ -768,6 +799,12 @@ inline u32 CGUITTFont::getWidthFromCharacter(uchar32_t c) const
int w = Glyphs[n-1].advance.x / 64;
return w;
}
+ if (fallback != 0)
+ {
+ wchar_t s[] = { (wchar_t) c, 0 };
+ return fallback->getDimension(s).Width;
+ }
+
if (c >= 0x2000)
return (font_metrics.ascender / 64);
else return (font_metrics.ascender / 64) / 2;
@@ -791,6 +828,12 @@ inline u32 CGUITTFont::getHeightFromCharacter(uchar32_t c) const
s32 height = (font_metrics.ascender / 64) - Glyphs[n-1].offset.Y + Glyphs[n-1].source_rect.getHeight();
return height;
}
+ if (fallback != 0)
+ {
+ wchar_t s[] = { (wchar_t) c, 0 };
+ return fallback->getDimension(s).Height;
+ }
+
if (c >= 0x2000)
return (font_metrics.ascender / 64);
else return (font_metrics.ascender / 64) / 2;
@@ -806,9 +849,9 @@ u32 CGUITTFont::getGlyphIndexByChar(uchar32_t c) const
// Get the glyph.
u32 glyph = FT_Get_Char_Index(tt_face, c);
- // Check for a valid glyph. If it is invalid, attempt to use the replacement character.
+ // Check for a valid glyph.
if (glyph == 0)
- glyph = FT_Get_Char_Index(tt_face, core::unicode::UTF_REPLACEMENT_CHARACTER);
+ return 0;
// If our glyph is already loaded, don't bother doing any batch loading code.
if (glyph != 0 && Glyphs[glyph - 1].isLoaded)
@@ -924,13 +967,26 @@ core::vector2di CGUITTFont::getKerning(const uchar32_t thisLetter, const uchar32
core::vector2di ret(GlobalKerningWidth, GlobalKerningHeight);
+ u32 n = getGlyphIndexByChar(thisLetter);
+
+ // If we don't have this glyph, ask fallback font
+ if (n == 0)
+ {
+ if (fallback != 0) {
+ wchar_t l1 = (wchar_t) thisLetter, l2 = (wchar_t) previousLetter;
+ ret.X = fallback->getKerningWidth(&l1, &l2);
+ ret.Y = fallback->getKerningHeight();
+ }
+ return ret;
+ }
+
// If we don't have kerning, no point in continuing.
if (!FT_HAS_KERNING(tt_face))
return ret;
// Get the kerning information.
FT_Vector v;
- FT_Get_Kerning(tt_face, getGlyphIndexByChar(previousLetter), getGlyphIndexByChar(thisLetter), FT_KERNING_DEFAULT, &v);
+ FT_Get_Kerning(tt_face, getGlyphIndexByChar(previousLetter), n, FT_KERNING_DEFAULT, &v);
// If we have a scalable font, the return value will be in font points.
if (FT_IS_SCALABLE(tt_face))
@@ -962,6 +1018,9 @@ void CGUITTFont::setInvisibleCharacters(const core::ustring& s)
video::IImage* CGUITTFont::createTextureFromChar(const uchar32_t& ch)
{
u32 n = getGlyphIndexByChar(ch);
+ if (n == 0)
+ n = getGlyphIndexByChar((uchar32_t) core::unicode::UTF_REPLACEMENT_CHARACTER);
+
const SGUITTGlyph& glyph = Glyphs[n-1];
CGUITTGlyphPage* page = Glyph_Pages[glyph.glyph_page];
@@ -971,11 +1030,7 @@ video::IImage* CGUITTFont::createTextureFromChar(const uchar32_t& ch)
video::ITexture* tex = page->texture;
// Acquire a read-only lock of the corresponding page texture.
- #if IRRLICHT_VERSION_MAJOR==1 && IRRLICHT_VERSION_MINOR>=8
void* ptr = tex->lock(video::ETLM_READ_ONLY);
- #else
- void* ptr = tex->lock(true);
- #endif
video::ECOLOR_FORMAT format = tex->getColorFormat();
core::dimension2du tex_size = tex->getOriginalSize();
@@ -1132,11 +1187,7 @@ core::array<scene::ISceneNode*> CGUITTFont::addTextSceneNode(const wchar_t* text
// Now we copy planes corresponding to the letter size.
IMeshManipulator* mani = smgr->getMeshManipulator();
IMesh* meshcopy = mani->createMeshCopy(shared_plane_ptr_);
- #if IRRLICHT_VERSION_MAJOR==1 && IRRLICHT_VERSION_MINOR>=8
mani->scale(meshcopy, vector3df((f32)letter_size.Width, (f32)letter_size.Height, 1));
- #else
- mani->scaleMesh(meshcopy, vector3df((f32)letter_size.Width, (f32)letter_size.Height, 1));
- #endif
ISceneNode* current_node = smgr->addMeshSceneNode(meshcopy, parent, -1, current_pos);
meshcopy->drop();
@@ -1149,6 +1200,8 @@ core::array<scene::ISceneNode*> CGUITTFont::addTextSceneNode(const wchar_t* text
container.push_back(current_node);
}
offset.X += getWidthFromCharacter(current_char);
+ // Note that fallback font handling is missing here (Minetest never uses this)
+
previous_char = current_char;
++text;
}
diff --git a/src/irrlicht_changes/CGUITTFont.h b/src/irrlicht_changes/CGUITTFont.h
index 310f74f67..7b04ae828 100644
--- a/src/irrlicht_changes/CGUITTFont.h
+++ b/src/irrlicht_changes/CGUITTFont.h
@@ -34,7 +34,7 @@
#include <irrlicht.h>
#include <ft2build.h>
#include <vector>
-#include "irrUString.h"
+#include <irrUString.h>
#include "util/enriched_string.h"
#include FT_FREETYPE_H
@@ -199,6 +199,7 @@ namespace gui
core::array<core::vector2di> render_positions;
core::array<core::recti> render_source_rects;
+ core::array<video::SColor> render_colors;
private:
core::array<const SGUITTGlyph*> glyph_to_be_paged;
@@ -269,8 +270,8 @@ namespace gui
video::SColor color, bool hcenter=false, bool vcenter=false,
const core::rect<s32>* clip=0);
- virtual void draw(const EnrichedString& text, const core::rect<s32>& position,
- video::SColor color, bool hcenter=false, bool vcenter=false,
+ void draw(const EnrichedString& text, const core::rect<s32>& position,
+ bool hcenter=false, bool vcenter=false,
const core::rect<s32>* clip=0);
//! Returns the dimension of a character produced by this font.
@@ -313,6 +314,9 @@ namespace gui
//! Get the last glyph page's index.
u32 getLastGlyphPageIndex() const { return Glyph_Pages.size() - 1; }
+ //! Set font that should be used for glyphs not present in ours
+ void setFallback(gui::IGUIFont* font) { fallback = font; }
+
//! Create corresponding character's software image copy from the font,
//! so you can use this data just like any ordinary video::IImage.
//! \param ch The character you need
@@ -387,6 +391,8 @@ namespace gui
core::ustring Invisible;
u32 shadow_offset;
u32 shadow_alpha;
+
+ gui::IGUIFont* fallback;
};
} // end namespace gui
diff --git a/src/irrlicht_changes/CMakeLists.txt b/src/irrlicht_changes/CMakeLists.txt
index d2f66ab77..19f431af3 100644
--- a/src/irrlicht_changes/CMakeLists.txt
+++ b/src/irrlicht_changes/CMakeLists.txt
@@ -1,14 +1,9 @@
if (BUILD_CLIENT)
set(client_irrlicht_changes_SRCS
${CMAKE_CURRENT_SOURCE_DIR}/static_text.cpp
+ ${CMAKE_CURRENT_SOURCE_DIR}/CGUITTFont.cpp
)
- if (ENABLE_FREETYPE)
- set(client_irrlicht_changes_SRCS ${client_irrlicht_changes_SRCS}
- ${CMAKE_CURRENT_SOURCE_DIR}/CGUITTFont.cpp
- )
- endif()
-
# CMake require us to set a local scope and then parent scope
# Else the last set win in parent scope
set(client_irrlicht_changes_SRCS ${client_irrlicht_changes_SRCS} PARENT_SCOPE)
diff --git a/src/irrlicht_changes/irrUString.h b/src/irrlicht_changes/irrUString.h
deleted file mode 100644
index 09172ee6d..000000000
--- a/src/irrlicht_changes/irrUString.h
+++ /dev/null
@@ -1,3891 +0,0 @@
-/*
- Basic Unicode string class for Irrlicht.
- Copyright (c) 2009-2011 John Norman
-
- 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.
-
- The original version of this class can be located at:
- http://irrlicht.suckerfreegames.com/
-
- John Norman
- john@suckerfreegames.com
-*/
-
-#pragma once
-
-#if (__cplusplus > 199711L) || (_MSC_VER >= 1600) || defined(__GXX_EXPERIMENTAL_CXX0X__)
-# define USTRING_CPP0X
-# if defined(__GXX_EXPERIMENTAL_CXX0X__) && ((__GNUC__ > 4) || ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 5)))
-# define USTRING_CPP0X_NEWLITERALS
-# endif
-#endif
-
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-#include <cstddef>
-
-#ifdef _WIN32
-#define __BYTE_ORDER 0
-#define __LITTLE_ENDIAN 0
-#define __BIG_ENDIAN 1
-#elif defined(__MACH__) && defined(__APPLE__)
-#include <machine/endian.h>
-#elif defined(__FreeBSD__) || defined(__DragonFly__)
-#include <sys/endian.h>
-#else
-#include <endian.h>
-#endif
-
-#ifdef USTRING_CPP0X
-# include <utility>
-#endif
-
-#ifndef USTRING_NO_STL
-# include <string>
-# include <iterator>
-# include <ostream>
-#endif
-
-#include "irrTypes.h"
-#include "irrAllocator.h"
-#include "irrArray.h"
-#include "irrMath.h"
-#include "irrString.h"
-#include "path.h"
-
-//! UTF-16 surrogate start values.
-static const irr::u16 UTF16_HI_SURROGATE = 0xD800;
-static const irr::u16 UTF16_LO_SURROGATE = 0xDC00;
-
-//! Is a UTF-16 code point a surrogate?
-#define UTF16_IS_SURROGATE(c) (((c) & 0xF800) == 0xD800)
-#define UTF16_IS_SURROGATE_HI(c) (((c) & 0xFC00) == 0xD800)
-#define UTF16_IS_SURROGATE_LO(c) (((c) & 0xFC00) == 0xDC00)
-
-
-namespace irr
-{
-
- // Define our character types.
-#ifdef USTRING_CPP0X_NEWLITERALS // C++0x
- typedef char32_t uchar32_t;
- typedef char16_t uchar16_t;
- typedef char uchar8_t;
-#else
- typedef u32 uchar32_t;
- typedef u16 uchar16_t;
- typedef u8 uchar8_t;
-#endif
-
-namespace core
-{
-
-namespace unicode
-{
-
-//! The unicode replacement character. Used to replace invalid characters.
-const irr::u16 UTF_REPLACEMENT_CHARACTER = 0xFFFD;
-
-//! Convert a UTF-16 surrogate pair into a UTF-32 character.
-//! \param high The high value of the pair.
-//! \param low The low value of the pair.
-//! \return The UTF-32 character expressed by the surrogate pair.
-inline uchar32_t toUTF32(uchar16_t high, uchar16_t low)
-{
- // Convert the surrogate pair into a single UTF-32 character.
- uchar32_t x = ((high & ((1 << 6) -1)) << 10) | (low & ((1 << 10) -1));
- uchar32_t wu = ((high >> 6) & ((1 << 5) - 1)) + 1;
- return (wu << 16) | x;
-}
-
-//! Swaps the endianness of a 16-bit value.
-//! \return The new value.
-inline uchar16_t swapEndian16(const uchar16_t& c)
-{
- return ((c >> 8) & 0x00FF) | ((c << 8) & 0xFF00);
-}
-
-//! Swaps the endianness of a 32-bit value.
-//! \return The new value.
-inline uchar32_t swapEndian32(const uchar32_t& c)
-{
- return ((c >> 24) & 0x000000FF) |
- ((c >> 8) & 0x0000FF00) |
- ((c << 8) & 0x00FF0000) |
- ((c << 24) & 0xFF000000);
-}
-
-//! The Unicode byte order mark.
-const u16 BOM = 0xFEFF;
-
-//! The size of the Unicode byte order mark in terms of the Unicode character size.
-const u8 BOM_UTF8_LEN = 3;
-const u8 BOM_UTF16_LEN = 1;
-const u8 BOM_UTF32_LEN = 1;
-
-//! Unicode byte order marks for file operations.
-const u8 BOM_ENCODE_UTF8[3] = { 0xEF, 0xBB, 0xBF };
-const u8 BOM_ENCODE_UTF16_BE[2] = { 0xFE, 0xFF };
-const u8 BOM_ENCODE_UTF16_LE[2] = { 0xFF, 0xFE };
-const u8 BOM_ENCODE_UTF32_BE[4] = { 0x00, 0x00, 0xFE, 0xFF };
-const u8 BOM_ENCODE_UTF32_LE[4] = { 0xFF, 0xFE, 0x00, 0x00 };
-
-//! The size in bytes of the Unicode byte marks for file operations.
-const u8 BOM_ENCODE_UTF8_LEN = 3;
-const u8 BOM_ENCODE_UTF16_LEN = 2;
-const u8 BOM_ENCODE_UTF32_LEN = 4;
-
-//! Unicode encoding type.
-enum EUTF_ENCODE
-{
- EUTFE_NONE = 0,
- EUTFE_UTF8,
- EUTFE_UTF16,
- EUTFE_UTF16_LE,
- EUTFE_UTF16_BE,
- EUTFE_UTF32,
- EUTFE_UTF32_LE,
- EUTFE_UTF32_BE
-};
-
-//! Unicode endianness.
-enum EUTF_ENDIAN
-{
- EUTFEE_NATIVE = 0,
- EUTFEE_LITTLE,
- EUTFEE_BIG
-};
-
-//! Returns the specified unicode byte order mark in a byte array.
-//! The byte order mark is the first few bytes in a text file that signifies its encoding.
-/** \param mode The Unicode encoding method that we want to get the byte order mark for.
- If EUTFE_UTF16 or EUTFE_UTF32 is passed, it uses the native system endianness. **/
-//! \return An array that contains a byte order mark.
-inline core::array<u8> getUnicodeBOM(EUTF_ENCODE mode)
-{
-#define COPY_ARRAY(source, size) \
- memcpy(ret.pointer(), source, size); \
- ret.set_used(size)
-
- core::array<u8> ret(4);
- switch (mode)
- {
- case EUTFE_UTF8:
- COPY_ARRAY(BOM_ENCODE_UTF8, BOM_ENCODE_UTF8_LEN);
- break;
- case EUTFE_UTF16:
- #ifdef __BIG_ENDIAN__
- COPY_ARRAY(BOM_ENCODE_UTF16_BE, BOM_ENCODE_UTF16_LEN);
- #else
- COPY_ARRAY(BOM_ENCODE_UTF16_LE, BOM_ENCODE_UTF16_LEN);
- #endif
- break;
- case EUTFE_UTF16_BE:
- COPY_ARRAY(BOM_ENCODE_UTF16_BE, BOM_ENCODE_UTF16_LEN);
- break;
- case EUTFE_UTF16_LE:
- COPY_ARRAY(BOM_ENCODE_UTF16_LE, BOM_ENCODE_UTF16_LEN);
- break;
- case EUTFE_UTF32:
- #ifdef __BIG_ENDIAN__
- COPY_ARRAY(BOM_ENCODE_UTF32_BE, BOM_ENCODE_UTF32_LEN);
- #else
- COPY_ARRAY(BOM_ENCODE_UTF32_LE, BOM_ENCODE_UTF32_LEN);
- #endif
- break;
- case EUTFE_UTF32_BE:
- COPY_ARRAY(BOM_ENCODE_UTF32_BE, BOM_ENCODE_UTF32_LEN);
- break;
- case EUTFE_UTF32_LE:
- COPY_ARRAY(BOM_ENCODE_UTF32_LE, BOM_ENCODE_UTF32_LEN);
- break;
- case EUTFE_NONE:
- // TODO sapier: fixed warning only,
- // don't know if something needs to be done here
- break;
- }
- return ret;
-
-#undef COPY_ARRAY
-}
-
-//! Detects if the given data stream starts with a unicode BOM.
-//! \param data The data stream to check.
-//! \return The unicode BOM associated with the data stream, or EUTFE_NONE if none was found.
-inline EUTF_ENCODE determineUnicodeBOM(const char* data)
-{
- if (memcmp(data, BOM_ENCODE_UTF8, 3) == 0) return EUTFE_UTF8;
- if (memcmp(data, BOM_ENCODE_UTF16_BE, 2) == 0) return EUTFE_UTF16_BE;
- if (memcmp(data, BOM_ENCODE_UTF16_LE, 2) == 0) return EUTFE_UTF16_LE;
- if (memcmp(data, BOM_ENCODE_UTF32_BE, 4) == 0) return EUTFE_UTF32_BE;
- if (memcmp(data, BOM_ENCODE_UTF32_LE, 4) == 0) return EUTFE_UTF32_LE;
- return EUTFE_NONE;
-}
-
-} // end namespace unicode
-
-
-//! UTF-16 string class.
-template <typename TAlloc = irrAllocator<uchar16_t> >
-class ustring16
-{
-public:
-
- ///------------------///
- /// iterator classes ///
- ///------------------///
-
- //! Access an element in a unicode string, allowing one to change it.
- class _ustring16_iterator_access
- {
- public:
- _ustring16_iterator_access(const ustring16<TAlloc>* s, u32 p) : ref(s), pos(p) {}
-
- //! Allow the class to be interpreted as a single UTF-32 character.
- operator uchar32_t() const
- {
- return _get();
- }
-
- //! Allow one to change the character in the unicode string.
- //! \param c The new character to use.
- //! \return Myself.
- _ustring16_iterator_access& operator=(const uchar32_t c)
- {
- _set(c);
- return *this;
- }
-
- //! Increments the value by 1.
- //! \return Myself.
- _ustring16_iterator_access& operator++()
- {
- _set(_get() + 1);
- return *this;
- }
-
- //! Increments the value by 1, returning the old value.
- //! \return A unicode character.
- uchar32_t operator++(int)
- {
- uchar32_t old = _get();
- _set(old + 1);
- return old;
- }
-
- //! Decrements the value by 1.
- //! \return Myself.
- _ustring16_iterator_access& operator--()
- {
- _set(_get() - 1);
- return *this;
- }
-
- //! Decrements the value by 1, returning the old value.
- //! \return A unicode character.
- uchar32_t operator--(int)
- {
- uchar32_t old = _get();
- _set(old - 1);
- return old;
- }
-
- //! Adds to the value by a specified amount.
- //! \param val The amount to add to this character.
- //! \return Myself.
- _ustring16_iterator_access& operator+=(int val)
- {
- _set(_get() + val);
- return *this;
- }
-
- //! Subtracts from the value by a specified amount.
- //! \param val The amount to subtract from this character.
- //! \return Myself.
- _ustring16_iterator_access& operator-=(int val)
- {
- _set(_get() - val);
- return *this;
- }
-
- //! Multiples the value by a specified amount.
- //! \param val The amount to multiply this character by.
- //! \return Myself.
- _ustring16_iterator_access& operator*=(int val)
- {
- _set(_get() * val);
- return *this;
- }
-
- //! Divides the value by a specified amount.
- //! \param val The amount to divide this character by.
- //! \return Myself.
- _ustring16_iterator_access& operator/=(int val)
- {
- _set(_get() / val);
- return *this;
- }
-
- //! Modulos the value by a specified amount.
- //! \param val The amount to modulo this character by.
- //! \return Myself.
- _ustring16_iterator_access& operator%=(int val)
- {
- _set(_get() % val);
- return *this;
- }
-
- //! Adds to the value by a specified amount.
- //! \param val The amount to add to this character.
- //! \return A unicode character.
- uchar32_t operator+(int val) const
- {
- return _get() + val;
- }
-
- //! Subtracts from the value by a specified amount.
- //! \param val The amount to subtract from this character.
- //! \return A unicode character.
- uchar32_t operator-(int val) const
- {
- return _get() - val;
- }
-
- //! Multiplies the value by a specified amount.
- //! \param val The amount to multiply this character by.
- //! \return A unicode character.
- uchar32_t operator*(int val) const
- {
- return _get() * val;
- }
-
- //! Divides the value by a specified amount.
- //! \param val The amount to divide this character by.
- //! \return A unicode character.
- uchar32_t operator/(int val) const
- {
- return _get() / val;
- }
-
- //! Modulos the value by a specified amount.
- //! \param val The amount to modulo this character by.
- //! \return A unicode character.
- uchar32_t operator%(int val) const
- {
- return _get() % val;
- }
-
- private:
- //! Gets a uchar32_t from our current position.
- uchar32_t _get() const
- {
- const uchar16_t* a = ref->c_str();
- if (!UTF16_IS_SURROGATE(a[pos]))
- return static_cast<uchar32_t>(a[pos]);
- else
- {
- if (pos + 1 >= ref->size_raw())
- return 0;
-
- return unicode::toUTF32(a[pos], a[pos + 1]);
- }
- }
-
- //! Sets a uchar32_t at our current position.
- void _set(uchar32_t c)
- {
- ustring16<TAlloc>* ref2 = const_cast<ustring16<TAlloc>*>(ref);
- const uchar16_t* a = ref2->c_str();
- if (c > 0xFFFF)
- {
- // c will be multibyte, so split it up into the high and low surrogate pairs.
- uchar16_t x = static_cast<uchar16_t>(c);
- uchar16_t vh = UTF16_HI_SURROGATE | ((((c >> 16) & ((1 << 5) - 1)) - 1) << 6) | (x >> 10);
- uchar16_t vl = UTF16_LO_SURROGATE | (x & ((1 << 10) - 1));
-
- // If the previous position was a surrogate pair, just replace them. Else, insert the low pair.
- if (UTF16_IS_SURROGATE_HI(a[pos]) && pos + 1 != ref2->size_raw())
- ref2->replace_raw(vl, static_cast<u32>(pos) + 1);
- else ref2->insert_raw(vl, static_cast<u32>(pos) + 1);
-
- ref2->replace_raw(vh, static_cast<u32>(pos));
- }
- else
- {
- // c will be a single byte.
- uchar16_t vh = static_cast<uchar16_t>(c);
-
- // If the previous position was a surrogate pair, remove the extra byte.
- if (UTF16_IS_SURROGATE_HI(a[pos]))
- ref2->erase_raw(static_cast<u32>(pos) + 1);
-
- ref2->replace_raw(vh, static_cast<u32>(pos));
- }
- }
-
- const ustring16<TAlloc>* ref;
- u32 pos;
- };
- typedef typename ustring16<TAlloc>::_ustring16_iterator_access access;
-
-
- //! Iterator to iterate through a UTF-16 string.
-#ifndef USTRING_NO_STL
- class _ustring16_const_iterator : public std::iterator<
- std::bidirectional_iterator_tag, // iterator_category
- access, // value_type
- ptrdiff_t, // difference_type
- const access, // pointer
- const access // reference
- >
-#else
- class _ustring16_const_iterator
-#endif
- {
- public:
- typedef _ustring16_const_iterator _Iter;
- typedef std::iterator<std::bidirectional_iterator_tag, access, ptrdiff_t, const access, const access> _Base;
- typedef const access const_pointer;
- typedef const access const_reference;
-
-#ifndef USTRING_NO_STL
- typedef typename _Base::value_type value_type;
- typedef typename _Base::difference_type difference_type;
- typedef typename _Base::difference_type distance_type;
- typedef typename _Base::pointer pointer;
- typedef const_reference reference;
-#else
- typedef access value_type;
- typedef u32 difference_type;
- typedef u32 distance_type;
- typedef const_pointer pointer;
- typedef const_reference reference;
-#endif
-
- //! Constructors.
- _ustring16_const_iterator(const _Iter& i) : ref(i.ref), pos(i.pos) {}
- _ustring16_const_iterator(const ustring16<TAlloc>& s) : ref(&s), pos(0) {}
- _ustring16_const_iterator(const ustring16<TAlloc>& s, const u32 p) : ref(&s), pos(0)
- {
- if (ref->size_raw() == 0 || p == 0)
- return;
-
- // Go to the appropriate position.
- u32 i = p;
- u32 sr = ref->size_raw();
- const uchar16_t* a = ref->c_str();
- while (i != 0 && pos < sr)
- {
- if (UTF16_IS_SURROGATE_HI(a[pos]))
- pos += 2;
- else ++pos;
- --i;
- }
- }
-
- //! Test for equalness.
- bool operator==(const _Iter& iter) const
- {
- if (ref == iter.ref && pos == iter.pos)
- return true;
- return false;
- }
-
- //! Test for unequalness.
- bool operator!=(const _Iter& iter) const
- {
- if (ref != iter.ref || pos != iter.pos)
- return true;
- return false;
- }
-
- //! Switch to the next full character in the string.
- _Iter& operator++()
- { // ++iterator
- if (pos == ref->size_raw()) return *this;
- const uchar16_t* a = ref->c_str();
- if (UTF16_IS_SURROGATE_HI(a[pos]))
- pos += 2; // TODO: check for valid low surrogate?
- else ++pos;
- if (pos > ref->size_raw()) pos = ref->size_raw();
- return *this;
- }
-
- //! Switch to the next full character in the string, returning the previous position.
- _Iter operator++(int)
- { // iterator++
- _Iter _tmp(*this);
- ++*this;
- return _tmp;
- }
-
- //! Switch to the previous full character in the string.
- _Iter& operator--()
- { // --iterator
- if (pos == 0) return *this;
- const uchar16_t* a = ref->c_str();
- --pos;
- if (UTF16_IS_SURROGATE_LO(a[pos]) && pos != 0) // low surrogate, go back one more.
- --pos;
- return *this;
- }
-
- //! Switch to the previous full character in the string, returning the previous position.
- _Iter operator--(int)
- { // iterator--
- _Iter _tmp(*this);
- --*this;
- return _tmp;
- }
-
- //! Advance a specified number of full characters in the string.
- //! \return Myself.
- _Iter& operator+=(const difference_type v)
- {
- if (v == 0) return *this;
- if (v < 0) return operator-=(v * -1);
-
- if (pos >= ref->size_raw())
- return *this;
-
- // Go to the appropriate position.
- // TODO: Don't force u32 on an x64 OS. Make it agnostic.
- u32 i = (u32)v;
- u32 sr = ref->size_raw();
- const uchar16_t* a = ref->c_str();
- while (i != 0 && pos < sr)
- {
- if (UTF16_IS_SURROGATE_HI(a[pos]))
- pos += 2;
- else ++pos;
- --i;
- }
- if (pos > sr)
- pos = sr;
-
- return *this;
- }
-
- //! Go back a specified number of full characters in the string.
- //! \return Myself.
- _Iter& operator-=(const difference_type v)
- {
- if (v == 0) return *this;
- if (v > 0) return operator+=(v * -1);
-
- if (pos == 0)
- return *this;
-
- // Go to the appropriate position.
- // TODO: Don't force u32 on an x64 OS. Make it agnostic.
- u32 i = (u32)v;
- const uchar16_t* a = ref->c_str();
- while (i != 0 && pos != 0)
- {
- --pos;
- if (UTF16_IS_SURROGATE_LO(a[pos]) != 0 && pos != 0)
- --pos;
- --i;
- }
-
- return *this;
- }
-
- //! Return a new iterator that is a variable number of full characters forward from the current position.
- _Iter operator+(const difference_type v) const
- {
- _Iter ret(*this);
- ret += v;
- return ret;
- }
-
- //! Return a new iterator that is a variable number of full characters backward from the current position.
- _Iter operator-(const difference_type v) const
- {
- _Iter ret(*this);
- ret -= v;
- return ret;
- }
-
- //! Returns the distance between two iterators.
- difference_type operator-(const _Iter& iter) const
- {
- // Make sure we reference the same object!
- if (ref != iter.ref)
- return difference_type();
-
- _Iter i = iter;
- difference_type ret;
-
- // Walk up.
- if (pos > i.pos)
- {
- while (pos > i.pos)
- {
- ++i;
- ++ret;
- }
- return ret;
- }
-
- // Walk down.
- while (pos < i.pos)
- {
- --i;
- --ret;
- }
- return ret;
- }
-
- //! Accesses the full character at the iterator's position.
- const_reference operator*() const
- {
- if (pos >= ref->size_raw())
- {
- const uchar16_t* a = ref->c_str();
- u32 p = ref->size_raw();
- if (UTF16_IS_SURROGATE_LO(a[p]))
- --p;
- reference ret(ref, p);
- return ret;
- }
- const_reference ret(ref, pos);
- return ret;
- }
-
- //! Accesses the full character at the iterator's position.
- reference operator*()
- {
- if (pos >= ref->size_raw())
- {
- const uchar16_t* a = ref->c_str();
- u32 p = ref->size_raw();
- if (UTF16_IS_SURROGATE_LO(a[p]))
- --p;
- reference ret(ref, p);
- return ret;
- }
- reference ret(ref, pos);
- return ret;
- }
-
- //! Accesses the full character at the iterator's position.
- const_pointer operator->() const
- {
- return operator*();
- }
-
- //! Accesses the full character at the iterator's position.
- pointer operator->()
- {
- return operator*();
- }
-
- //! Is the iterator at the start of the string?
- bool atStart() const
- {
- return pos == 0;
- }
-
- //! Is the iterator at the end of the string?
- bool atEnd() const
- {
- const uchar16_t* a = ref->c_str();
- if (UTF16_IS_SURROGATE(a[pos]))
- return (pos + 1) >= ref->size_raw();
- else return pos >= ref->size_raw();
- }
-
- //! Moves the iterator to the start of the string.
- void toStart()
- {
- pos = 0;
- }
-
- //! Moves the iterator to the end of the string.
- void toEnd()
- {
- pos = ref->size_raw();
- }
-
- //! Returns the iterator's position.
- //! \return The iterator's position.
- u32 getPos() const
- {
- return pos;
- }
-
- protected:
- const ustring16<TAlloc>* ref;
- u32 pos;
- };
-
- //! Iterator to iterate through a UTF-16 string.
- class _ustring16_iterator : public _ustring16_const_iterator
- {
- public:
- typedef _ustring16_iterator _Iter;
- typedef _ustring16_const_iterator _Base;
- typedef typename _Base::const_pointer const_pointer;
- typedef typename _Base::const_reference const_reference;
-
-
- typedef typename _Base::value_type value_type;
- typedef typename _Base::difference_type difference_type;
- typedef typename _Base::distance_type distance_type;
- typedef access pointer;
- typedef access reference;
-
- using _Base::pos;
- using _Base::ref;
-
- //! Constructors.
- _ustring16_iterator(const _Iter& i) : _ustring16_const_iterator(i) {}
- _ustring16_iterator(const ustring16<TAlloc>& s) : _ustring16_const_iterator(s) {}
- _ustring16_iterator(const ustring16<TAlloc>& s, const u32 p) : _ustring16_const_iterator(s, p) {}
-
- //! Accesses the full character at the iterator's position.
- reference operator*() const
- {
- if (pos >= ref->size_raw())
- {
- const uchar16_t* a = ref->c_str();
- u32 p = ref->size_raw();
- if (UTF16_IS_SURROGATE_LO(a[p]))
- --p;
- reference ret(ref, p);
- return ret;
- }
- reference ret(ref, pos);
- return ret;
- }
-
- //! Accesses the full character at the iterator's position.
- reference operator*()
- {
- if (pos >= ref->size_raw())
- {
- const uchar16_t* a = ref->c_str();
- u32 p = ref->size_raw();
- if (UTF16_IS_SURROGATE_LO(a[p]))
- --p;
- reference ret(ref, p);
- return ret;
- }
- reference ret(ref, pos);
- return ret;
- }
-
- //! Accesses the full character at the iterator's position.
- pointer operator->() const
- {
- return operator*();
- }
-
- //! Accesses the full character at the iterator's position.
- pointer operator->()
- {
- return operator*();
- }
- };
-
- typedef typename ustring16<TAlloc>::_ustring16_iterator iterator;
- typedef typename ustring16<TAlloc>::_ustring16_const_iterator const_iterator;
-
- ///----------------------///
- /// end iterator classes ///
- ///----------------------///
-
- //! Default constructor
- ustring16()
- : array(0), allocated(1), used(0)
- {
-#if __BYTE_ORDER == __BIG_ENDIAN
- encoding = unicode::EUTFE_UTF16_BE;
-#else
- encoding = unicode::EUTFE_UTF16_LE;
-#endif
- array = allocator.allocate(1); // new u16[1];
- array[0] = 0x0;
- }
-
-
- //! Constructor
- ustring16(const ustring16<TAlloc>& other)
- : array(0), allocated(0), used(0)
- {
-#if __BYTE_ORDER == __BIG_ENDIAN
- encoding = unicode::EUTFE_UTF16_BE;
-#else
- encoding = unicode::EUTFE_UTF16_LE;
-#endif
- *this = other;
- }
-
-
- //! Constructor from other string types
- template <class B, class A>
- ustring16(const string<B, A>& other)
- : array(0), allocated(0), used(0)
- {
-#if __BYTE_ORDER == __BIG_ENDIAN
- encoding = unicode::EUTFE_UTF16_BE;
-#else
- encoding = unicode::EUTFE_UTF16_LE;
-#endif
- *this = other;
- }
-
-
-#ifndef USTRING_NO_STL
- //! Constructor from std::string
- template <class B, class A, typename Alloc>
- ustring16(const std::basic_string<B, A, Alloc>& other)
- : array(0), allocated(0), used(0)
- {
-#if __BYTE_ORDER == __BIG_ENDIAN
- encoding = unicode::EUTFE_UTF16_BE;
-#else
- encoding = unicode::EUTFE_UTF16_LE;
-#endif
- *this = other.c_str();
- }
-
-
- //! Constructor from iterator.
- template <typename Itr>
- ustring16(Itr first, Itr last)
- : array(0), allocated(0), used(0)
- {
-#if __BYTE_ORDER == __BIG_ENDIAN
- encoding = unicode::EUTFE_UTF16_BE;
-#else
- encoding = unicode::EUTFE_UTF16_LE;
-#endif
- reserve(std::distance(first, last));
- array[used] = 0;
-
- for (; first != last; ++first)
- append((uchar32_t)*first);
- }
-#endif
-
-
-#ifndef USTRING_CPP0X_NEWLITERALS
- //! Constructor for copying a character string from a pointer.
- ustring16(const char* const c)
- : array(0), allocated(0), used(0)
- {
-#if __BYTE_ORDER == __BIG_ENDIAN
- encoding = unicode::EUTFE_UTF16_BE;
-#else
- encoding = unicode::EUTFE_UTF16_LE;
-#endif
-
- loadDataStream(c, strlen(c));
- //append((uchar8_t*)c);
- }
-
-
- //! Constructor for copying a character string from a pointer with a given length.
- ustring16(const char* const c, u32 length)
- : array(0), allocated(0), used(0)
- {
-#if __BYTE_ORDER == __BIG_ENDIAN
- encoding = unicode::EUTFE_UTF16_BE;
-#else
- encoding = unicode::EUTFE_UTF16_LE;
-#endif
-
- loadDataStream(c, length);
- }
-#endif
-
-
- //! Constructor for copying a UTF-8 string from a pointer.
- ustring16(const uchar8_t* const c)
- : array(0), allocated(0), used(0)
- {
-#if __BYTE_ORDER == __BIG_ENDIAN
- encoding = unicode::EUTFE_UTF16_BE;
-#else
- encoding = unicode::EUTFE_UTF16_LE;
-#endif
-
- append(c);
- }
-
-
- //! Constructor for copying a UTF-8 string from a single char.
- ustring16(const char c)
- : array(0), allocated(0), used(0)
- {
-#if __BYTE_ORDER == __BIG_ENDIAN
- encoding = unicode::EUTFE_UTF16_BE;
-#else
- encoding = unicode::EUTFE_UTF16_LE;
-#endif
-
- append((uchar32_t)c);
- }
-
-
- //! Constructor for copying a UTF-8 string from a pointer with a given length.
- ustring16(const uchar8_t* const c, u32 length)
- : array(0), allocated(0), used(0)
- {
-#if __BYTE_ORDER == __BIG_ENDIAN
- encoding = unicode::EUTFE_UTF16_BE;
-#else
- encoding = unicode::EUTFE_UTF16_LE;
-#endif
-
- append(c, length);
- }
-
-
- //! Constructor for copying a UTF-16 string from a pointer.
- ustring16(const uchar16_t* const c)
- : array(0), allocated(0), used(0)
- {
-#if __BYTE_ORDER == __BIG_ENDIAN
- encoding = unicode::EUTFE_UTF16_BE;
-#else
- encoding = unicode::EUTFE_UTF16_LE;
-#endif
-
- append(c);
- }
-
-
- //! Constructor for copying a UTF-16 string from a pointer with a given length
- ustring16(const uchar16_t* const c, u32 length)
- : array(0), allocated(0), used(0)
- {
-#if __BYTE_ORDER == __BIG_ENDIAN
- encoding = unicode::EUTFE_UTF16_BE;
-#else
- encoding = unicode::EUTFE_UTF16_LE;
-#endif
-
- append(c, length);
- }
-
-
- //! Constructor for copying a UTF-32 string from a pointer.
- ustring16(const uchar32_t* const c)
- : array(0), allocated(0), used(0)
- {
-#if __BYTE_ORDER == __BIG_ENDIAN
- encoding = unicode::EUTFE_UTF16_BE;
-#else
- encoding = unicode::EUTFE_UTF16_LE;
-#endif
-
- append(c);
- }
-
-
- //! Constructor for copying a UTF-32 from a pointer with a given length.
- ustring16(const uchar32_t* const c, u32 length)
- : array(0), allocated(0), used(0)
- {
-#if __BYTE_ORDER == __BIG_ENDIAN
- encoding = unicode::EUTFE_UTF16_BE;
-#else
- encoding = unicode::EUTFE_UTF16_LE;
-#endif
-
- append(c, length);
- }
-
-
- //! Constructor for copying a wchar_t string from a pointer.
- ustring16(const wchar_t* const c)
- : array(0), allocated(0), used(0)
- {
-#if __BYTE_ORDER == __BIG_ENDIAN
- encoding = unicode::EUTFE_UTF16_BE;
-#else
- encoding = unicode::EUTFE_UTF16_LE;
-#endif
-
- if (sizeof(wchar_t) == 4)
- append(reinterpret_cast<const uchar32_t* const>(c));
- else if (sizeof(wchar_t) == 2)
- append(reinterpret_cast<const uchar16_t* const>(c));
- else if (sizeof(wchar_t) == 1)
- append(reinterpret_cast<const uchar8_t* const>(c));
- }
-
-
- //! Constructor for copying a wchar_t string from a pointer with a given length.
- ustring16(const wchar_t* const c, u32 length)
- : array(0), allocated(0), used(0)
- {
-#if __BYTE_ORDER == __BIG_ENDIAN
- encoding = unicode::EUTFE_UTF16_BE;
-#else
- encoding = unicode::EUTFE_UTF16_LE;
-#endif
-
- if (sizeof(wchar_t) == 4)
- append(reinterpret_cast<const uchar32_t* const>(c), length);
- else if (sizeof(wchar_t) == 2)
- append(reinterpret_cast<const uchar16_t* const>(c), length);
- else if (sizeof(wchar_t) == 1)
- append(reinterpret_cast<const uchar8_t* const>(c), length);
- }
-
-
-#ifdef USTRING_CPP0X
- //! Constructor for moving a ustring16
- ustring16(ustring16<TAlloc>&& other)
- : array(other.array), encoding(other.encoding), allocated(other.allocated), used(other.used)
- {
- //std::cout << "MOVE constructor" << std::endl;
- other.array = 0;
- other.allocated = 0;
- other.used = 0;
- }
-#endif
-
-
- //! Destructor
- ~ustring16()
- {
- allocator.deallocate(array); // delete [] array;
- }
-
-
- //! Assignment operator
- ustring16& operator=(const ustring16<TAlloc>& other)
- {
- if (this == &other)
- return *this;
-
- used = other.size_raw();
- if (used >= allocated)
- {
- allocator.deallocate(array); // delete [] array;
- allocated = used + 1;
- array = allocator.allocate(used + 1); //new u16[used];
- }
-
- const uchar16_t* p = other.c_str();
- for (u32 i=0; i<=used; ++i, ++p)
- array[i] = *p;
-
- array[used] = 0;
-
- // Validate our new UTF-16 string.
- validate();
-
- return *this;
- }
-
-
-#ifdef USTRING_CPP0X
- //! Move assignment operator
- ustring16& operator=(ustring16<TAlloc>&& other)
- {
- if (this != &other)
- {
- //std::cout << "MOVE operator=" << std::endl;
- allocator.deallocate(array);
-
- array = other.array;
- allocated = other.allocated;
- encoding = other.encoding;
- used = other.used;
- other.array = 0;
- other.used = 0;
- }
- return *this;
- }
-#endif
-
-
- //! Assignment operator for other string types
- template <class B, class A>
- ustring16<TAlloc>& operator=(const string<B, A>& other)
- {
- *this = other.c_str();
- return *this;
- }
-
-
- //! Assignment operator for UTF-8 strings
- ustring16<TAlloc>& operator=(const uchar8_t* const c)
- {
- if (!array)
- {
- array = allocator.allocate(1); //new u16[1];
- allocated = 1;
- }
- used = 0;
- array[used] = 0x0;
- if (!c) return *this;
-
- //! Append our string now.
- append(c);
- return *this;
- }
-
-
- //! Assignment operator for UTF-16 strings
- ustring16<TAlloc>& operator=(const uchar16_t* const c)
- {
- if (!array)
- {
- array = allocator.allocate(1); //new u16[1];
- allocated = 1;
- }
- used = 0;
- array[used] = 0x0;
- if (!c) return *this;
-
- //! Append our string now.
- append(c);
- return *this;
- }
-
-
- //! Assignment operator for UTF-32 strings
- ustring16<TAlloc>& operator=(const uchar32_t* const c)
- {
- if (!array)
- {
- array = allocator.allocate(1); //new u16[1];
- allocated = 1;
- }
- used = 0;
- array[used] = 0x0;
- if (!c) return *this;
-
- //! Append our string now.
- append(c);
- return *this;
- }
-
-
- //! Assignment operator for wchar_t strings.
- /** Note that this assumes that a correct unicode string is stored in the wchar_t string.
- Since wchar_t changes depending on its platform, it could either be a UTF-8, -16, or -32 string.
- This function assumes you are storing the correct unicode encoding inside the wchar_t string. **/
- ustring16<TAlloc>& operator=(const wchar_t* const c)
- {
- if (sizeof(wchar_t) == 4)
- *this = reinterpret_cast<const uchar32_t* const>(c);
- else if (sizeof(wchar_t) == 2)
- *this = reinterpret_cast<const uchar16_t* const>(c);
- else if (sizeof(wchar_t) == 1)
- *this = reinterpret_cast<const uchar8_t* const>(c);
-
- return *this;
- }
-
-
- //! Assignment operator for other strings.
- /** Note that this assumes that a correct unicode string is stored in the string. **/
- template <class B>
- ustring16<TAlloc>& operator=(const B* const c)
- {
- if (sizeof(B) == 4)
- *this = reinterpret_cast<const uchar32_t* const>(c);
- else if (sizeof(B) == 2)
- *this = reinterpret_cast<const uchar16_t* const>(c);
- else if (sizeof(B) == 1)
- *this = reinterpret_cast<const uchar8_t* const>(c);
-
- return *this;
- }
-
-
- //! Direct access operator
- access operator [](const u32 index)
- {
- _IRR_DEBUG_BREAK_IF(index>=size()) // bad index
- iterator iter(*this, index);
- return iter.operator*();
- }
-
-
- //! Direct access operator
- const access operator [](const u32 index) const
- {
- _IRR_DEBUG_BREAK_IF(index>=size()) // bad index
- const_iterator iter(*this, index);
- return iter.operator*();
- }
-
-
- //! Equality operator
- bool operator ==(const uchar16_t* const str) const
- {
- if (!str)
- return false;
-
- u32 i;
- for(i=0; array[i] && str[i]; ++i)
- if (array[i] != str[i])
- return false;
-
- return !array[i] && !str[i];
- }
-
-
- //! Equality operator
- bool operator ==(const ustring16<TAlloc>& other) const
- {
- for(u32 i=0; array[i] && other.array[i]; ++i)
- if (array[i] != other.array[i])
- return false;
-
- return used == other.used;
- }
-
-
- //! Is smaller comparator
- bool operator <(const ustring16<TAlloc>& other) const
- {
- for(u32 i=0; array[i] && other.array[i]; ++i)
- {
- s32 diff = array[i] - other.array[i];
- if ( diff )
- return diff < 0;
- }
-
- return used < other.used;
- }
-
-
- //! Inequality operator
- bool operator !=(const uchar16_t* const str) const
- {
- return !(*this == str);
- }
-
-
- //! Inequality operator
- bool operator !=(const ustring16<TAlloc>& other) const
- {
- return !(*this == other);
- }
-
-
- //! Returns the length of a ustring16 in full characters.
- //! \return Length of a ustring16 in full characters.
- u32 size() const
- {
- const_iterator i(*this, 0);
- u32 pos = 0;
- while (!i.atEnd())
- {
- ++i;
- ++pos;
- }
- return pos;
- }
-
-
- //! Informs if the ustring is empty or not.
- //! \return True if the ustring is empty, false if not.
- bool empty() const
- {
- return (size_raw() == 0);
- }
-
-
- //! Returns a pointer to the raw UTF-16 string data.
- //! \return pointer to C-style NUL terminated array of UTF-16 code points.
- const uchar16_t* c_str() const
- {
- return array;
- }
-
-
- //! Compares the first n characters of this string with another.
- //! \param other Other string to compare to.
- //! \param n Number of characters to compare.
- //! \return True if the n first characters of both strings are equal.
- bool equalsn(const ustring16<TAlloc>& other, u32 n) const
- {
- u32 i;
- const uchar16_t* oa = other.c_str();
- for(i=0; i < n && array[i] && oa[i]; ++i)
- if (array[i] != oa[i])
- return false;
-
- // if one (or both) of the strings was smaller then they
- // are only equal if they have the same length
- return (i == n) || (used == other.used);
- }
-
-
- //! Compares the first n characters of this string with another.
- //! \param str Other string to compare to.
- //! \param n Number of characters to compare.
- //! \return True if the n first characters of both strings are equal.
- bool equalsn(const uchar16_t* const str, u32 n) const
- {
- if (!str)
- return false;
- u32 i;
- for(i=0; i < n && array[i] && str[i]; ++i)
- if (array[i] != str[i])
- return false;
-
- // if one (or both) of the strings was smaller then they
- // are only equal if they have the same length
- return (i == n) || (array[i] == 0 && str[i] == 0);
- }
-
-
- //! Appends a character to this ustring16
- //! \param character The character to append.
- //! \return A reference to our current string.
- ustring16<TAlloc>& append(uchar32_t character)
- {
- if (used + 2 >= allocated)
- reallocate(used + 2);
-
- if (character > 0xFFFF)
- {
- used += 2;
-
- // character will be multibyte, so split it up into a surrogate pair.
- uchar16_t x = static_cast<uchar16_t>(character);
- uchar16_t vh = UTF16_HI_SURROGATE | ((((character >> 16) & ((1 << 5) - 1)) - 1) << 6) | (x >> 10);
- uchar16_t vl = UTF16_LO_SURROGATE | (x & ((1 << 10) - 1));
- array[used-2] = vh;
- array[used-1] = vl;
- }
- else
- {
- ++used;
- array[used-1] = character;
- }
- array[used] = 0;
-
- return *this;
- }
-
-
- //! Appends a UTF-8 string to this ustring16
- //! \param other The UTF-8 string to append.
- //! \param length The length of the string to append.
- //! \return A reference to our current string.
- ustring16<TAlloc>& append(const uchar8_t* const other, u32 length=0xffffffff)
- {
- if (!other)
- return *this;
-
- // Determine if the string is long enough for a BOM.
- u32 len = 0;
- const uchar8_t* p = other;
- do
- {
- ++len;
- } while (*p++ && len < unicode::BOM_ENCODE_UTF8_LEN);
-
- // Check for BOM.
- unicode::EUTF_ENCODE c_bom = unicode::EUTFE_NONE;
- if (len == unicode::BOM_ENCODE_UTF8_LEN)
- {
- if (memcmp(other, unicode::BOM_ENCODE_UTF8, unicode::BOM_ENCODE_UTF8_LEN) == 0)
- c_bom = unicode::EUTFE_UTF8;
- }
-
- // If a BOM was found, don't include it in the string.
- const uchar8_t* c2 = other;
- if (c_bom != unicode::EUTFE_NONE)
- {
- c2 = other + unicode::BOM_UTF8_LEN;
- length -= unicode::BOM_UTF8_LEN;
- }
-
- // Calculate the size of the string to read in.
- len = 0;
- p = c2;
- do
- {
- ++len;
- } while(*p++ && len < length);
- if (len > length)
- len = length;
-
- // If we need to grow the array, do it now.
- if (used + len >= allocated)
- reallocate(used + (len * 2));
- u32 start = used;
-
- // Convert UTF-8 to UTF-16.
- u32 pos = start;
- for (u32 l = 0; l<len;)
- {
- ++used;
- if (((c2[l] >> 6) & 0x03) == 0x02)
- { // Invalid continuation byte.
- array[pos++] = unicode::UTF_REPLACEMENT_CHARACTER;
- ++l;
- }
- else if (c2[l] == 0xC0 || c2[l] == 0xC1)
- { // Invalid byte - overlong encoding.
- array[pos++] = unicode::UTF_REPLACEMENT_CHARACTER;
- ++l;
- }
- else if ((c2[l] & 0xF8) == 0xF0)
- { // 4 bytes UTF-8, 2 bytes UTF-16.
- // Check for a full string.
- if ((l + 3) >= len)
- {
- array[pos++] = unicode::UTF_REPLACEMENT_CHARACTER;
- l += 3;
- break;
- }
-
- // Validate.
- bool valid = true;
- u8 l2 = 0;
- if (valid && (((c2[l+1] >> 6) & 0x03) == 0x02)) ++l2; else valid = false;
- if (valid && (((c2[l+2] >> 6) & 0x03) == 0x02)) ++l2; else valid = false;
- if (valid && (((c2[l+3] >> 6) & 0x03) == 0x02)) ++l2; else valid = false;
- if (!valid)
- {
- array[pos++] = unicode::UTF_REPLACEMENT_CHARACTER;
- l += l2;
- continue;
- }
-
- // Decode.
- uchar8_t b1 = ((c2[l] & 0x7) << 2) | ((c2[l+1] >> 4) & 0x3);
- uchar8_t b2 = ((c2[l+1] & 0xF) << 4) | ((c2[l+2] >> 2) & 0xF);
- uchar8_t b3 = ((c2[l+2] & 0x3) << 6) | (c2[l+3] & 0x3F);
- uchar32_t v = b3 | ((uchar32_t)b2 << 8) | ((uchar32_t)b1 << 16);
-
- // Split v up into a surrogate pair.
- uchar16_t x = static_cast<uchar16_t>(v);
- uchar16_t vh = UTF16_HI_SURROGATE | ((((v >> 16) & ((1 << 5) - 1)) - 1) << 6) | (x >> 10);
- uchar16_t vl = UTF16_LO_SURROGATE | (x & ((1 << 10) - 1));
-
- array[pos++] = vh;
- array[pos++] = vl;
- l += 4;
- ++used; // Using two shorts this time, so increase used by 1.
- }
- else if ((c2[l] & 0xF0) == 0xE0)
- { // 3 bytes UTF-8, 1 byte UTF-16.
- // Check for a full string.
- if ((l + 2) >= len)
- {
- array[pos++] = unicode::UTF_REPLACEMENT_CHARACTER;
- l += 2;
- break;
- }
-
- // Validate.
- bool valid = true;
- u8 l2 = 0;
- if (valid && (((c2[l+1] >> 6) & 0x03) == 0x02)) ++l2; else valid = false;
- if (valid && (((c2[l+2] >> 6) & 0x03) == 0x02)) ++l2; else valid = false;
- if (!valid)
- {
- array[pos++] = unicode::UTF_REPLACEMENT_CHARACTER;
- l += l2;
- continue;
- }
-
- // Decode.
- uchar8_t b1 = ((c2[l] & 0xF) << 4) | ((c2[l+1] >> 2) & 0xF);
- uchar8_t b2 = ((c2[l+1] & 0x3) << 6) | (c2[l+2] & 0x3F);
- uchar16_t ch = b2 | ((uchar16_t)b1 << 8);
- array[pos++] = ch;
- l += 3;
- }
- else if ((c2[l] & 0xE0) == 0xC0)
- { // 2 bytes UTF-8, 1 byte UTF-16.
- // Check for a full string.
- if ((l + 1) >= len)
- {
- array[pos++] = unicode::UTF_REPLACEMENT_CHARACTER;
- l += 1;
- break;
- }
-
- // Validate.
- if (((c2[l+1] >> 6) & 0x03) != 0x02)
- {
- array[pos++] = unicode::UTF_REPLACEMENT_CHARACTER;
- ++l;
- continue;
- }
-
- // Decode.
- uchar8_t b1 = (c2[l] >> 2) & 0x7;
- uchar8_t b2 = ((c2[l] & 0x3) << 6) | (c2[l+1] & 0x3F);
- uchar16_t ch = b2 | ((uchar16_t)b1 << 8);
- array[pos++] = ch;
- l += 2;
- }
- else
- { // 1 byte UTF-8, 1 byte UTF-16.
- // Validate.
- if (c2[l] > 0x7F)
- { // Values above 0xF4 are restricted and aren't used. By now, anything above 0x7F is invalid.
- array[pos++] = unicode::UTF_REPLACEMENT_CHARACTER;
- }
- else array[pos++] = static_cast<uchar16_t>(c2[l]);
- ++l;
- }
- }
- array[used] = 0;
-
- // Validate our new UTF-16 string.
- validate();
-
- return *this;
- }
-
-
- //! Appends a UTF-16 string to this ustring16
- //! \param other The UTF-16 string to append.
- //! \param length The length of the string to append.
- //! \return A reference to our current string.
- ustring16<TAlloc>& append(const uchar16_t* const other, u32 length=0xffffffff)
- {
- if (!other)
- return *this;
-
- // Determine if the string is long enough for a BOM.
- u32 len = 0;
- const uchar16_t* p = other;
- do
- {
- ++len;
- } while (*p++ && len < unicode::BOM_ENCODE_UTF16_LEN);
-
- // Check for the BOM to determine the string's endianness.
- unicode::EUTF_ENDIAN c_end = unicode::EUTFEE_NATIVE;
- if (memcmp(other, unicode::BOM_ENCODE_UTF16_LE, unicode::BOM_ENCODE_UTF16_LEN) == 0)
- c_end = unicode::EUTFEE_LITTLE;
- else if (memcmp(other, unicode::BOM_ENCODE_UTF16_BE, unicode::BOM_ENCODE_UTF16_LEN) == 0)
- c_end = unicode::EUTFEE_BIG;
-
- // If a BOM was found, don't include it in the string.
- const uchar16_t* c2 = other;
- if (c_end != unicode::EUTFEE_NATIVE)
- {
- c2 = other + unicode::BOM_UTF16_LEN;
- length -= unicode::BOM_UTF16_LEN;
- }
-
- // Calculate the size of the string to read in.
- len = 0;
- p = c2;
- do
- {
- ++len;
- } while(*p++ && len < length);
- if (len > length)
- len = length;
-
- // If we need to grow the size of the array, do it now.
- if (used + len >= allocated)
- reallocate(used + (len * 2));
- u32 start = used;
- used += len;
-
- // Copy the string now.
- unicode::EUTF_ENDIAN m_end = getEndianness();
- for (u32 l = start; l < start + len; ++l)
- {
- array[l] = (uchar16_t)c2[l];
- if (c_end != unicode::EUTFEE_NATIVE && c_end != m_end)
- array[l] = unicode::swapEndian16(array[l]);
- }
-
- array[used] = 0;
-
- // Validate our new UTF-16 string.
- validate();
- return *this;
- }
-
-
- //! Appends a UTF-32 string to this ustring16
- //! \param other The UTF-32 string to append.
- //! \param length The length of the string to append.
- //! \return A reference to our current string.
- ustring16<TAlloc>& append(const uchar32_t* const other, u32 length=0xffffffff)
- {
- if (!other)
- return *this;
-
- // Check for the BOM to determine the string's endianness.
- unicode::EUTF_ENDIAN c_end = unicode::EUTFEE_NATIVE;
- if (memcmp(other, unicode::BOM_ENCODE_UTF32_LE, unicode::BOM_ENCODE_UTF32_LEN) == 0)
- c_end = unicode::EUTFEE_LITTLE;
- else if (memcmp(other, unicode::BOM_ENCODE_UTF32_BE, unicode::BOM_ENCODE_UTF32_LEN) == 0)
- c_end = unicode::EUTFEE_BIG;
-
- // If a BOM was found, don't include it in the string.
- const uchar32_t* c2 = other;
- if (c_end != unicode::EUTFEE_NATIVE)
- {
- c2 = other + unicode::BOM_UTF32_LEN;
- length -= unicode::BOM_UTF32_LEN;
- }
-
- // Calculate the size of the string to read in.
- u32 len = 0;
- const uchar32_t* p = c2;
- do
- {
- ++len;
- } while(*p++ && len < length);
- if (len > length)
- len = length;
-
- // If we need to grow the size of the array, do it now.
- // In case all of the UTF-32 string is split into surrogate pairs, do len * 2.
- if (used + (len * 2) >= allocated)
- reallocate(used + ((len * 2) * 2));
- u32 start = used;
-
- // Convert UTF-32 to UTF-16.
- unicode::EUTF_ENDIAN m_end = getEndianness();
- u32 pos = start;
- for (u32 l = 0; l<len; ++l)
- {
- ++used;
-
- uchar32_t ch = c2[l];
- if (c_end != unicode::EUTFEE_NATIVE && c_end != m_end)
- ch = unicode::swapEndian32(ch);
-
- if (ch > 0xFFFF)
- {
- // Split ch up into a surrogate pair as it is over 16 bits long.
- uchar16_t x = static_cast<uchar16_t>(ch);
- uchar16_t vh = UTF16_HI_SURROGATE | ((((ch >> 16) & ((1 << 5) - 1)) - 1) << 6) | (x >> 10);
- uchar16_t vl = UTF16_LO_SURROGATE | (x & ((1 << 10) - 1));
- array[pos++] = vh;
- array[pos++] = vl;
- ++used; // Using two shorts, so increased used again.
- }
- else if (ch >= 0xD800 && ch <= 0xDFFF)
- {
- // Between possible UTF-16 surrogates (invalid!)
- array[pos++] = unicode::UTF_REPLACEMENT_CHARACTER;
- }
- else array[pos++] = static_cast<uchar16_t>(ch);
- }
- array[used] = 0;
-
- // Validate our new UTF-16 string.
- validate();
-
- return *this;
- }
-
-
- //! Appends a ustring16 to this ustring16
- //! \param other The string to append to this one.
- //! \return A reference to our current string.
- ustring16<TAlloc>& append(const ustring16<TAlloc>& other)
- {
- const uchar16_t* oa = other.c_str();
-
- u32 len = other.size_raw();
-
- if (used + len >= allocated)
- reallocate(used + len);
-
- for (u32 l=0; l<len; ++l)
- array[used+l] = oa[l];
-
- used += len;
- array[used] = 0;
-
- return *this;
- }
-
-
- //! Appends a certain amount of characters of a ustring16 to this ustring16.
- //! \param other The string to append to this one.
- //! \param length How many characters of the other string to add to this one.
- //! \return A reference to our current string.
- ustring16<TAlloc>& append(const ustring16<TAlloc>& other, u32 length)
- {
- if (other.size() == 0)
- return *this;
-
- if (other.size() < length)
- {
- append(other);
- return *this;
- }
-
- if (used + length * 2 >= allocated)
- reallocate(used + length * 2);
-
- const_iterator iter(other, 0);
- u32 l = length;
- while (!iter.atEnd() && l)
- {
- uchar32_t c = *iter;
- append(c);
- ++iter;
- --l;
- }
-
- return *this;
- }
-
-
- //! Reserves some memory.
- //! \param count The amount of characters to reserve.
- void reserve(u32 count)
- {
- if (count < allocated)
- return;
-
- reallocate(count);
- }
-
-
- //! Finds first occurrence of character.
- //! \param c The character to search for.
- //! \return Position where the character has been found, or -1 if not found.
- s32 findFirst(uchar32_t c) const
- {
- const_iterator i(*this, 0);
-
- s32 pos = 0;
- while (!i.atEnd())
- {
- uchar32_t t = *i;
- if (c == t)
- return pos;
- ++pos;
- ++i;
- }
-
- return -1;
- }
-
- //! Finds first occurrence of a character of a list.
- //! \param c A list of characters to find. For example if the method should find the first occurrence of 'a' or 'b', this parameter should be "ab".
- //! \param count The amount of characters in the list. Usually, this should be strlen(c).
- //! \return Position where one of the characters has been found, or -1 if not found.
- s32 findFirstChar(const uchar32_t* const c, u32 count=1) const
- {
- if (!c || !count)
- return -1;
-
- const_iterator i(*this, 0);
-
- s32 pos = 0;
- while (!i.atEnd())
- {
- uchar32_t t = *i;
- for (u32 j=0; j<count; ++j)
- if (t == c[j])
- return pos;
- ++pos;
- ++i;
- }
-
- return -1;
- }
-
-
- //! Finds first position of a character not in a given list.
- //! \param c A list of characters to NOT find. For example if the method should find the first occurrence of a character not 'a' or 'b', this parameter should be "ab".
- //! \param count The amount of characters in the list. Usually, this should be strlen(c).
- //! \return Position where the character has been found, or -1 if not found.
- s32 findFirstCharNotInList(const uchar32_t* const c, u32 count=1) const
- {
- if (!c || !count)
- return -1;
-
- const_iterator i(*this, 0);
-
- s32 pos = 0;
- while (!i.atEnd())
- {
- uchar32_t t = *i;
- u32 j;
- for (j=0; j<count; ++j)
- if (t == c[j])
- break;
-
- if (j==count)
- return pos;
- ++pos;
- ++i;
- }
-
- return -1;
- }
-
- //! Finds last position of a character not in a given list.
- //! \param c A list of characters to NOT find. For example if the method should find the first occurrence of a character not 'a' or 'b', this parameter should be "ab".
- //! \param count The amount of characters in the list. Usually, this should be strlen(c).
- //! \return Position where the character has been found, or -1 if not found.
- s32 findLastCharNotInList(const uchar32_t* const c, u32 count=1) const
- {
- if (!c || !count)
- return -1;
-
- const_iterator i(end());
- --i;
-
- s32 pos = size() - 1;
- while (!i.atStart())
- {
- uchar32_t t = *i;
- u32 j;
- for (j=0; j<count; ++j)
- if (t == c[j])
- break;
-
- if (j==count)
- return pos;
- --pos;
- --i;
- }
-
- return -1;
- }
-
- //! Finds next occurrence of character.
- //! \param c The character to search for.
- //! \param startPos The position in the string to start searching.
- //! \return Position where the character has been found, or -1 if not found.
- s32 findNext(uchar32_t c, u32 startPos) const
- {
- const_iterator i(*this, startPos);
-
- s32 pos = startPos;
- while (!i.atEnd())
- {
- uchar32_t t = *i;
- if (t == c)
- return pos;
- ++pos;
- ++i;
- }
-
- return -1;
- }
-
-
- //! Finds last occurrence of character.
- //! \param c The character to search for.
- //! \param start The start position of the reverse search ( default = -1, on end ).
- //! \return Position where the character has been found, or -1 if not found.
- s32 findLast(uchar32_t c, s32 start = -1) const
- {
- u32 s = size();
- start = core::clamp ( start < 0 ? (s32)s : start, 0, (s32)s ) - 1;
-
- const_iterator i(*this, start);
- u32 pos = start;
- while (!i.atStart())
- {
- uchar32_t t = *i;
- if (t == c)
- return pos;
- --pos;
- --i;
- }
-
- return -1;
- }
-
- //! Finds last occurrence of a character in a list.
- //! \param c A list of strings to find. For example if the method should find the last occurrence of 'a' or 'b', this parameter should be "ab".
- //! \param count The amount of characters in the list. Usually, this should be strlen(c).
- //! \return Position where one of the characters has been found, or -1 if not found.
- s32 findLastChar(const uchar32_t* const c, u32 count=1) const
- {
- if (!c || !count)
- return -1;
-
- const_iterator i(end());
- --i;
-
- s32 pos = size();
- while (!i.atStart())
- {
- uchar32_t t = *i;
- for (u32 j=0; j<count; ++j)
- if (t == c[j])
- return pos;
- --pos;
- --i;
- }
-
- return -1;
- }
-
-
- //! Finds another ustring16 in this ustring16.
- //! \param str The string to find.
- //! \param start The start position of the search.
- //! \return Positions where the ustring16 has been found, or -1 if not found.
- s32 find(const ustring16<TAlloc>& str, const u32 start = 0) const
- {
- u32 my_size = size();
- u32 their_size = str.size();
-
- if (their_size == 0 || my_size - start < their_size)
- return -1;
-
- const_iterator i(*this, start);
-
- s32 pos = start;
- while (!i.atEnd())
- {
- const_iterator i2(i);
- const_iterator j(str, 0);
- uchar32_t t1 = (uchar32_t)*i2;
- uchar32_t t2 = (uchar32_t)*j;
- while (t1 == t2)
- {
- ++i2;
- ++j;
- if (j.atEnd())
- return pos;
- t1 = (uchar32_t)*i2;
- t2 = (uchar32_t)*j;
- }
- ++i;
- ++pos;
- }
-
- return -1;
- }
-
-
- //! Finds another ustring16 in this ustring16.
- //! \param str The string to find.
- //! \param start The start position of the search.
- //! \return Positions where the string has been found, or -1 if not found.
- s32 find_raw(const ustring16<TAlloc>& str, const u32 start = 0) const
- {
- const uchar16_t* data = str.c_str();
- if (data && *data)
- {
- u32 len = 0;
-
- while (data[len])
- ++len;
-
- if (len > used)
- return -1;
-
- for (u32 i=start; i<=used-len; ++i)
- {
- u32 j=0;
-
- while(data[j] && array[i+j] == data[j])
- ++j;
-
- if (!data[j])
- return i;
- }
- }
-
- return -1;
- }
-
-
- //! Returns a substring.
- //! \param begin: Start of substring.
- //! \param length: Length of substring.
- //! \return A reference to our current string.
- ustring16<TAlloc> subString(u32 begin, s32 length) const
- {
- u32 len = size();
- // if start after ustring16
- // or no proper substring length
- if ((length <= 0) || (begin>=len))
- return ustring16<TAlloc>("");
- // clamp length to maximal value
- if ((length+begin) > len)
- length = len-begin;
-
- ustring16<TAlloc> o;
- o.reserve((length+1) * 2);
-
- const_iterator i(*this, begin);
- while (!i.atEnd() && length)
- {
- o.append(*i);
- ++i;
- --length;
- }
-
- return o;
- }
-
-
- //! Appends a character to this ustring16.
- //! \param c Character to append.
- //! \return A reference to our current string.
- ustring16<TAlloc>& operator += (char c)
- {
- append((uchar32_t)c);
- return *this;
- }
-
-
- //! Appends a character to this ustring16.
- //! \param c Character to append.
- //! \return A reference to our current string.
- ustring16<TAlloc>& operator += (uchar32_t c)
- {
- append(c);
- return *this;
- }
-
-
- //! Appends a number to this ustring16.
- //! \param c Number to append.
- //! \return A reference to our current string.
- ustring16<TAlloc>& operator += (short c)
- {
- append(core::stringc(c));
- return *this;
- }
-
-
- //! Appends a number to this ustring16.
- //! \param c Number to append.
- //! \return A reference to our current string.
- ustring16<TAlloc>& operator += (unsigned short c)
- {
- append(core::stringc(c));
- return *this;
- }
-
-
-#ifdef USTRING_CPP0X_NEWLITERALS
- //! Appends a number to this ustring16.
- //! \param c Number to append.
- //! \return A reference to our current string.
- ustring16<TAlloc>& operator += (int c)
- {
- append(core::stringc(c));
- return *this;
- }
-
-
- //! Appends a number to this ustring16.
- //! \param c Number to append.
- //! \return A reference to our current string.
- ustring16<TAlloc>& operator += (unsigned int c)
- {
- append(core::stringc(c));
- return *this;
- }
-#endif
-
-
- //! Appends a number to this ustring16.
- //! \param c Number to append.
- //! \return A reference to our current string.
- ustring16<TAlloc>& operator += (long c)
- {
- append(core::stringc(c));
- return *this;
- }
-
-
- //! Appends a number to this ustring16.
- //! \param c Number to append.
- //! \return A reference to our current string.
- ustring16<TAlloc>& operator += (unsigned long c)
- {
- append(core::stringc(c));
- return *this;
- }
-
-
- //! Appends a number to this ustring16.
- //! \param c Number to append.
- //! \return A reference to our current string.
- ustring16<TAlloc>& operator += (double c)
- {
- append(core::stringc(c));
- return *this;
- }
-
-
- //! Appends a char ustring16 to this ustring16.
- //! \param c Char ustring16 to append.
- //! \return A reference to our current string.
- ustring16<TAlloc>& operator += (const uchar16_t* const c)
- {
- append(c);
- return *this;
- }
-
-
- //! Appends a ustring16 to this ustring16.
- //! \param other ustring16 to append.
- //! \return A reference to our current string.
- ustring16<TAlloc>& operator += (const ustring16<TAlloc>& other)
- {
- append(other);
- return *this;
- }
-
-
- //! Replaces all characters of a given type with another one.
- //! \param toReplace Character to replace.
- //! \param replaceWith Character replacing the old one.
- //! \return A reference to our current string.
- ustring16<TAlloc>& replace(uchar32_t toReplace, uchar32_t replaceWith)
- {
- iterator i(*this, 0);
- while (!i.atEnd())
- {
- typename ustring16<TAlloc>::access a = *i;
- if ((uchar32_t)a == toReplace)
- a = replaceWith;
- ++i;
- }
- return *this;
- }
-
-
- //! Replaces all instances of a string with another one.
- //! \param toReplace The string to replace.
- //! \param replaceWith The string replacing the old one.
- //! \return A reference to our current string.
- ustring16<TAlloc>& replace(const ustring16<TAlloc>& toReplace, const ustring16<TAlloc>& replaceWith)
- {
- if (toReplace.size() == 0)
- return *this;
-
- const uchar16_t* other = toReplace.c_str();
- const uchar16_t* replace = replaceWith.c_str();
- const u32 other_size = toReplace.size_raw();
- const u32 replace_size = replaceWith.size_raw();
-
- // Determine the delta. The algorithm will change depending on the delta.
- s32 delta = replace_size - other_size;
-
- // A character for character replace. The string will not shrink or grow.
- if (delta == 0)
- {
- s32 pos = 0;
- while ((pos = find_raw(other, pos)) != -1)
- {
- for (u32 i = 0; i < replace_size; ++i)
- array[pos + i] = replace[i];
- ++pos;
- }
- return *this;
- }
-
- // We are going to be removing some characters. The string will shrink.
- if (delta < 0)
- {
- u32 i = 0;
- for (u32 pos = 0; pos <= used; ++i, ++pos)
- {
- // Is this potentially a match?
- if (array[pos] == *other)
- {
- // Check to see if we have a match.
- u32 j;
- for (j = 0; j < other_size; ++j)
- {
- if (array[pos + j] != other[j])
- break;
- }
-
- // If we have a match, replace characters.
- if (j == other_size)
- {
- for (j = 0; j < replace_size; ++j)
- array[i + j] = replace[j];
- i += replace_size - 1;
- pos += other_size - 1;
- continue;
- }
- }
-
- // No match found, just copy characters.
- array[i - 1] = array[pos];
- }
- array[i] = 0;
- used = i;
-
- return *this;
- }
-
- // We are going to be adding characters, so the string size will increase.
- // Count the number of times toReplace exists in the string so we can allocate the new size.
- u32 find_count = 0;
- s32 pos = 0;
- while ((pos = find_raw(other, pos)) != -1)
- {
- ++find_count;
- ++pos;
- }
-
- // Re-allocate the string now, if needed.
- u32 len = delta * find_count;
- if (used + len >= allocated)
- reallocate(used + len);
-
- // Start replacing.
- pos = 0;
- while ((pos = find_raw(other, pos)) != -1)
- {
- uchar16_t* start = array + pos + other_size - 1;
- uchar16_t* ptr = array + used;
- uchar16_t* end = array + used + delta;
-
- // Shift characters to make room for the string.
- while (ptr != start)
- {
- *end = *ptr;
- --ptr;
- --end;
- }
-
- // Add the new string now.
- for (u32 i = 0; i < replace_size; ++i)
- array[pos + i] = replace[i];
-
- pos += replace_size;
- used += delta;
- }
-
- // Terminate the string and return ourself.
- array[used] = 0;
- return *this;
- }
-
-
- //! Removes characters from a ustring16..
- //! \param c The character to remove.
- //! \return A reference to our current string.
- ustring16<TAlloc>& remove(uchar32_t c)
- {
- u32 pos = 0;
- u32 found = 0;
- u32 len = (c > 0xFFFF ? 2 : 1); // Remove characters equal to the size of c as a UTF-16 character.
- for (u32 i=0; i<=used; ++i)
- {
- uchar32_t uc32 = 0;
- if (!UTF16_IS_SURROGATE_HI(array[i]))
- uc32 |= array[i];
- else if (i + 1 <= used)
- {
- // Convert the surrogate pair into a single UTF-32 character.
- uc32 = unicode::toUTF32(array[i], array[i + 1]);
- }
- u32 len2 = (uc32 > 0xFFFF ? 2 : 1);
-
- if (uc32 == c)
- {
- found += len;
- continue;
- }
-
- array[pos++] = array[i];
- if (len2 == 2)
- array[pos++] = array[++i];
- }
- used -= found;
- array[used] = 0;
- return *this;
- }
-
-
- //! Removes a ustring16 from the ustring16.
- //! \param toRemove The string to remove.
- //! \return A reference to our current string.
- ustring16<TAlloc>& remove(const ustring16<TAlloc>& toRemove)
- {
- u32 size = toRemove.size_raw();
- if (size == 0) return *this;
-
- const uchar16_t* tra = toRemove.c_str();
- u32 pos = 0;
- u32 found = 0;
- for (u32 i=0; i<=used; ++i)
- {
- u32 j = 0;
- while (j < size)
- {
- if (array[i + j] != tra[j])
- break;
- ++j;
- }
- if (j == size)
- {
- found += size;
- i += size - 1;
- continue;
- }
-
- array[pos++] = array[i];
- }
- used -= found;
- array[used] = 0;
- return *this;
- }
-
-
- //! Removes characters from the ustring16.
- //! \param characters The characters to remove.
- //! \return A reference to our current string.
- ustring16<TAlloc>& removeChars(const ustring16<TAlloc>& characters)
- {
- if (characters.size_raw() == 0)
- return *this;
-
- u32 pos = 0;
- u32 found = 0;
- const_iterator iter(characters);
- for (u32 i=0; i<=used; ++i)
- {
- uchar32_t uc32 = 0;
- if (!UTF16_IS_SURROGATE_HI(array[i]))
- uc32 |= array[i];
- else if (i + 1 <= used)
- {
- // Convert the surrogate pair into a single UTF-32 character.
- uc32 = unicode::toUTF32(array[i], array[i+1]);
- }
- u32 len2 = (uc32 > 0xFFFF ? 2 : 1);
-
- bool cont = false;
- iter.toStart();
- while (!iter.atEnd())
- {
- uchar32_t c = *iter;
- if (uc32 == c)
- {
- found += (c > 0xFFFF ? 2 : 1); // Remove characters equal to the size of c as a UTF-16 character.
- ++i;
- cont = true;
- break;
- }
- ++iter;
- }
- if (cont) continue;
-
- array[pos++] = array[i];
- if (len2 == 2)
- array[pos++] = array[++i];
- }
- used -= found;
- array[used] = 0;
- return *this;
- }
-
-
- //! Trims the ustring16.
- //! Removes the specified characters (by default, Latin-1 whitespace) from the begining and the end of the ustring16.
- //! \param whitespace The characters that are to be considered as whitespace.
- //! \return A reference to our current string.
- ustring16<TAlloc>& trim(const ustring16<TAlloc>& whitespace = " \t\n\r")
- {
- core::array<uchar32_t> utf32white = whitespace.toUTF32();
-
- // find start and end of the substring without the specified characters
- const s32 begin = findFirstCharNotInList(utf32white.const_pointer(), whitespace.used + 1);
- if (begin == -1)
- return (*this="");
-
- const s32 end = findLastCharNotInList(utf32white.const_pointer(), whitespace.used + 1);
-
- return (*this = subString(begin, (end +1) - begin));
- }
-
-
- //! Erases a character from the ustring16.
- //! May be slow, because all elements following after the erased element have to be copied.
- //! \param index Index of element to be erased.
- //! \return A reference to our current string.
- ustring16<TAlloc>& erase(u32 index)
- {
- _IRR_DEBUG_BREAK_IF(index>used) // access violation
-
- iterator i(*this, index);
-
- uchar32_t t = *i;
- u32 len = (t > 0xFFFF ? 2 : 1);
-
- for (u32 j = static_cast<u32>(i.getPos()) + len; j <= used; ++j)
- array[j - len] = array[j];
-
- used -= len;
- array[used] = 0;
-
- return *this;
- }
-
-
- //! Validate the existing ustring16, checking for valid surrogate pairs and checking for proper termination.
- //! \return A reference to our current string.
- ustring16<TAlloc>& validate()
- {
- // Validate all unicode characters.
- for (u32 i=0; i<allocated; ++i)
- {
- // Terminate on existing null.
- if (array[i] == 0)
- {
- used = i;
- return *this;
- }
- if (UTF16_IS_SURROGATE(array[i]))
- {
- if (((i+1) >= allocated) || UTF16_IS_SURROGATE_LO(array[i]))
- array[i] = unicode::UTF_REPLACEMENT_CHARACTER;
- else if (UTF16_IS_SURROGATE_HI(array[i]) && !UTF16_IS_SURROGATE_LO(array[i+1]))
- array[i] = unicode::UTF_REPLACEMENT_CHARACTER;
- ++i;
- }
- if (array[i] >= 0xFDD0 && array[i] <= 0xFDEF)
- array[i] = unicode::UTF_REPLACEMENT_CHARACTER;
- }
-
- // terminate
- used = 0;
- if (allocated > 0)
- {
- used = allocated - 1;
- array[used] = 0;
- }
- return *this;
- }
-
-
- //! Gets the last char of the ustring16, or 0.
- //! \return The last char of the ustring16, or 0.
- uchar32_t lastChar() const
- {
- if (used < 1)
- return 0;
-
- if (UTF16_IS_SURROGATE_LO(array[used-1]))
- {
- // Make sure we have a paired surrogate.
- if (used < 2)
- return 0;
-
- // Check for an invalid surrogate.
- if (!UTF16_IS_SURROGATE_HI(array[used-2]))
- return 0;
-
- // Convert the surrogate pair into a single UTF-32 character.
- return unicode::toUTF32(array[used-2], array[used-1]);
- }
- else
- {
- return array[used-1];
- }
- }
-
-
- //! Split the ustring16 into parts.
- /** This method will split a ustring16 at certain delimiter characters
- into the container passed in as reference. The type of the container
- has to be given as template parameter. It must provide a push_back and
- a size method.
- \param ret The result container
- \param c C-style ustring16 of delimiter characters
- \param count Number of delimiter characters
- \param ignoreEmptyTokens Flag to avoid empty substrings in the result
- container. If two delimiters occur without a character in between, an
- empty substring would be placed in the result. If this flag is set,
- only non-empty strings are stored.
- \param keepSeparators Flag which allows to add the separator to the
- result ustring16. If this flag is true, the concatenation of the
- substrings results in the original ustring16. Otherwise, only the
- characters between the delimiters are returned.
- \return The number of resulting substrings
- */
- template<class container>
- u32 split(container& ret, const uchar32_t* const c, u32 count=1, bool ignoreEmptyTokens=true, bool keepSeparators=false) const
- {
- if (!c)
- return 0;
-
- const_iterator i(*this);
- const u32 oldSize=ret.size();
- u32 pos = 0;
- u32 lastpos = 0;
- u32 lastpospos = 0;
- bool lastWasSeparator = false;
- while (!i.atEnd())
- {
- uchar32_t ch = *i;
- bool foundSeparator = false;
- for (u32 j=0; j<count; ++j)
- {
- if (ch == c[j])
- {
- if ((!ignoreEmptyTokens || pos - lastpos != 0) &&
- !lastWasSeparator)
- ret.push_back(ustring16<TAlloc>(&array[lastpospos], pos - lastpos));
- foundSeparator = true;
- lastpos = (keepSeparators ? pos : pos + 1);
- lastpospos = (keepSeparators ? i.getPos() : i.getPos() + 1);
- break;
- }
- }
- lastWasSeparator = foundSeparator;
- ++pos;
- ++i;
- }
- u32 s = size() + 1;
- if (s > lastpos)
- ret.push_back(ustring16<TAlloc>(&array[lastpospos], s - lastpos));
- return ret.size()-oldSize;
- }
-
-
- //! Split the ustring16 into parts.
- /** This method will split a ustring16 at certain delimiter characters
- into the container passed in as reference. The type of the container
- has to be given as template parameter. It must provide a push_back and
- a size method.
- \param ret The result container
- \param c A unicode string of delimiter characters
- \param ignoreEmptyTokens Flag to avoid empty substrings in the result
- container. If two delimiters occur without a character in between, an
- empty substring would be placed in the result. If this flag is set,
- only non-empty strings are stored.
- \param keepSeparators Flag which allows to add the separator to the
- result ustring16. If this flag is true, the concatenation of the
- substrings results in the original ustring16. Otherwise, only the
- characters between the delimiters are returned.
- \return The number of resulting substrings
- */
- template<class container>
- u32 split(container& ret, const ustring16<TAlloc>& c, bool ignoreEmptyTokens=true, bool keepSeparators=false) const
- {
- core::array<uchar32_t> v = c.toUTF32();
- return split(ret, v.pointer(), v.size(), ignoreEmptyTokens, keepSeparators);
- }
-
-
- //! Gets the size of the allocated memory buffer for the string.
- //! \return The size of the allocated memory buffer.
- u32 capacity() const
- {
- return allocated;
- }
-
-
- //! Returns the raw number of UTF-16 code points in the string which includes the individual surrogates.
- //! \return The raw number of UTF-16 code points, excluding the trialing NUL.
- u32 size_raw() const
- {
- return used;
- }
-
-
- //! Inserts a character into the string.
- //! \param c The character to insert.
- //! \param pos The position to insert the character.
- //! \return A reference to our current string.
- ustring16<TAlloc>& insert(uchar32_t c, u32 pos)
- {
- u8 len = (c > 0xFFFF ? 2 : 1);
-
- if (used + len >= allocated)
- reallocate(used + len);
-
- used += len;
-
- iterator iter(*this, pos);
- for (u32 i = used - 2; i > iter.getPos(); --i)
- array[i] = array[i - len];
-
- if (c > 0xFFFF)
- {
- // c will be multibyte, so split it up into a surrogate pair.
- uchar16_t x = static_cast<uchar16_t>(c);
- uchar16_t vh = UTF16_HI_SURROGATE | ((((c >> 16) & ((1 << 5) - 1)) - 1) << 6) | (x >> 10);
- uchar16_t vl = UTF16_LO_SURROGATE | (x & ((1 << 10) - 1));
- array[iter.getPos()] = vh;
- array[iter.getPos()+1] = vl;
- }
- else
- {
- array[iter.getPos()] = static_cast<uchar16_t>(c);
- }
- array[used] = 0;
- return *this;
- }
-
-
- //! Inserts a string into the string.
- //! \param c The string to insert.
- //! \param pos The position to insert the string.
- //! \return A reference to our current string.
- ustring16<TAlloc>& insert(const ustring16<TAlloc>& c, u32 pos)
- {
- u32 len = c.size_raw();
- if (len == 0) return *this;
-
- if (used + len >= allocated)
- reallocate(used + len);
-
- used += len;
-
- iterator iter(*this, pos);
- for (u32 i = used - 2; i > iter.getPos() + len; --i)
- array[i] = array[i - len];
-
- const uchar16_t* s = c.c_str();
- for (u32 i = 0; i < len; ++i)
- {
- array[pos++] = *s;
- ++s;
- }
-
- array[used] = 0;
- return *this;
- }
-
-
- //! Inserts a character into the string.
- //! \param c The character to insert.
- //! \param pos The position to insert the character.
- //! \return A reference to our current string.
- ustring16<TAlloc>& insert_raw(uchar16_t c, u32 pos)
- {
- if (used + 1 >= allocated)
- reallocate(used + 1);
-
- ++used;
-
- for (u32 i = used - 1; i > pos; --i)
- array[i] = array[i - 1];
-
- array[pos] = c;
- array[used] = 0;
- return *this;
- }
-
-
- //! Removes a character from string.
- //! \param pos Position of the character to remove.
- //! \return A reference to our current string.
- ustring16<TAlloc>& erase_raw(u32 pos)
- {
- for (u32 i=pos; i<=used; ++i)
- {
- array[i] = array[i + 1];
- }
- --used;
- array[used] = 0;
- return *this;
- }
-
-
- //! Replaces a character in the string.
- //! \param c The new character.
- //! \param pos The position of the character to replace.
- //! \return A reference to our current string.
- ustring16<TAlloc>& replace_raw(uchar16_t c, u32 pos)
- {
- array[pos] = c;
- return *this;
- }
-
-
- //! Returns an iterator to the beginning of the string.
- //! \return An iterator to the beginning of the string.
- iterator begin()
- {
- iterator i(*this, 0);
- return i;
- }
-
-
- //! Returns an iterator to the beginning of the string.
- //! \return An iterator to the beginning of the string.
- const_iterator begin() const
- {
- const_iterator i(*this, 0);
- return i;
- }
-
-
- //! Returns an iterator to the beginning of the string.
- //! \return An iterator to the beginning of the string.
- const_iterator cbegin() const
- {
- const_iterator i(*this, 0);
- return i;
- }
-
-
- //! Returns an iterator to the end of the string.
- //! \return An iterator to the end of the string.
- iterator end()
- {
- iterator i(*this, 0);
- i.toEnd();
- return i;
- }
-
-
- //! Returns an iterator to the end of the string.
- //! \return An iterator to the end of the string.
- const_iterator end() const
- {
- const_iterator i(*this, 0);
- i.toEnd();
- return i;
- }
-
-
- //! Returns an iterator to the end of the string.
- //! \return An iterator to the end of the string.
- const_iterator cend() const
- {
- const_iterator i(*this, 0);
- i.toEnd();
- return i;
- }
-
-
- //! Converts the string to a UTF-8 encoded string.
- //! \param addBOM If true, the proper unicode byte-order mark will be prefixed to the string.
- //! \return A string containing the UTF-8 encoded string.
- core::string<uchar8_t> toUTF8_s(const bool addBOM = false) const
- {
- core::string<uchar8_t> ret;
- ret.reserve(used * 4 + (addBOM ? unicode::BOM_UTF8_LEN : 0) + 1);
- const_iterator iter(*this, 0);
-
- // Add the byte order mark if the user wants it.
- if (addBOM)
- {
- ret.append(unicode::BOM_ENCODE_UTF8[0]);
- ret.append(unicode::BOM_ENCODE_UTF8[1]);
- ret.append(unicode::BOM_ENCODE_UTF8[2]);
- }
-
- while (!iter.atEnd())
- {
- uchar32_t c = *iter;
- if (c > 0xFFFF)
- { // 4 bytes
- uchar8_t b1 = (0x1E << 3) | ((c >> 18) & 0x7);
- uchar8_t b2 = (0x2 << 6) | ((c >> 12) & 0x3F);
- uchar8_t b3 = (0x2 << 6) | ((c >> 6) & 0x3F);
- uchar8_t b4 = (0x2 << 6) | (c & 0x3F);
- ret.append(b1);
- ret.append(b2);
- ret.append(b3);
- ret.append(b4);
- }
- else if (c > 0x7FF)
- { // 3 bytes
- uchar8_t b1 = (0xE << 4) | ((c >> 12) & 0xF);
- uchar8_t b2 = (0x2 << 6) | ((c >> 6) & 0x3F);
- uchar8_t b3 = (0x2 << 6) | (c & 0x3F);
- ret.append(b1);
- ret.append(b2);
- ret.append(b3);
- }
- else if (c > 0x7F)
- { // 2 bytes
- uchar8_t b1 = (0x6 << 5) | ((c >> 6) & 0x1F);
- uchar8_t b2 = (0x2 << 6) | (c & 0x3F);
- ret.append(b1);
- ret.append(b2);
- }
- else
- { // 1 byte
- ret.append(static_cast<uchar8_t>(c));
- }
- ++iter;
- }
- return ret;
- }
-
-
- //! Converts the string to a UTF-8 encoded string array.
- //! \param addBOM If true, the proper unicode byte-order mark will be prefixed to the string.
- //! \return An array containing the UTF-8 encoded string.
- core::array<uchar8_t> toUTF8(const bool addBOM = false) const
- {
- core::array<uchar8_t> ret(used * 4 + (addBOM ? unicode::BOM_UTF8_LEN : 0) + 1);
- const_iterator iter(*this, 0);
-
- // Add the byte order mark if the user wants it.
- if (addBOM)
- {
- ret.push_back(unicode::BOM_ENCODE_UTF8[0]);
- ret.push_back(unicode::BOM_ENCODE_UTF8[1]);
- ret.push_back(unicode::BOM_ENCODE_UTF8[2]);
- }
-
- while (!iter.atEnd())
- {
- uchar32_t c = *iter;
- if (c > 0xFFFF)
- { // 4 bytes
- uchar8_t b1 = (0x1E << 3) | ((c >> 18) & 0x7);
- uchar8_t b2 = (0x2 << 6) | ((c >> 12) & 0x3F);
- uchar8_t b3 = (0x2 << 6) | ((c >> 6) & 0x3F);
- uchar8_t b4 = (0x2 << 6) | (c & 0x3F);
- ret.push_back(b1);
- ret.push_back(b2);
- ret.push_back(b3);
- ret.push_back(b4);
- }
- else if (c > 0x7FF)
- { // 3 bytes
- uchar8_t b1 = (0xE << 4) | ((c >> 12) & 0xF);
- uchar8_t b2 = (0x2 << 6) | ((c >> 6) & 0x3F);
- uchar8_t b3 = (0x2 << 6) | (c & 0x3F);
- ret.push_back(b1);
- ret.push_back(b2);
- ret.push_back(b3);
- }
- else if (c > 0x7F)
- { // 2 bytes
- uchar8_t b1 = (0x6 << 5) | ((c >> 6) & 0x1F);
- uchar8_t b2 = (0x2 << 6) | (c & 0x3F);
- ret.push_back(b1);
- ret.push_back(b2);
- }
- else
- { // 1 byte
- ret.push_back(static_cast<uchar8_t>(c));
- }
- ++iter;
- }
- ret.push_back(0);
- return ret;
- }
-
-
-#ifdef USTRING_CPP0X_NEWLITERALS // C++0x
- //! Converts the string to a UTF-16 encoded string.
- //! \param endian The desired endianness of the string.
- //! \param addBOM If true, the proper unicode byte-order mark will be prefixed to the string.
- //! \return A string containing the UTF-16 encoded string.
- core::string<char16_t> toUTF16_s(const unicode::EUTF_ENDIAN endian = unicode::EUTFEE_NATIVE, const bool addBOM = false) const
- {
- core::string<char16_t> ret;
- ret.reserve(used + (addBOM ? unicode::BOM_UTF16_LEN : 0) + 1);
-
- // Add the BOM if specified.
- if (addBOM)
- {
- if (endian == unicode::EUTFEE_NATIVE)
- ret[0] = unicode::BOM;
- else if (endian == unicode::EUTFEE_LITTLE)
- {
- uchar8_t* ptr8 = reinterpret_cast<uchar8_t*>(&ret[0]);
- *ptr8++ = unicode::BOM_ENCODE_UTF16_LE[0];
- *ptr8 = unicode::BOM_ENCODE_UTF16_LE[1];
- }
- else
- {
- uchar8_t* ptr8 = reinterpret_cast<uchar8_t*>(&ret[0]);
- *ptr8++ = unicode::BOM_ENCODE_UTF16_BE[0];
- *ptr8 = unicode::BOM_ENCODE_UTF16_BE[1];
- }
- }
-
- ret.append(array);
- if (endian != unicode::EUTFEE_NATIVE && getEndianness() != endian)
- {
- char16_t* ptr = ret.c_str();
- for (u32 i = 0; i < ret.size(); ++i)
- *ptr++ = unicode::swapEndian16(*ptr);
- }
- return ret;
- }
-#endif
-
-
- //! Converts the string to a UTF-16 encoded string array.
- //! Unfortunately, no toUTF16_s() version exists due to limitations with Irrlicht's string class.
- //! \param endian The desired endianness of the string.
- //! \param addBOM If true, the proper unicode byte-order mark will be prefixed to the string.
- //! \return An array containing the UTF-16 encoded string.
- core::array<uchar16_t> toUTF16(const unicode::EUTF_ENDIAN endian = unicode::EUTFEE_NATIVE, const bool addBOM = false) const
- {
- core::array<uchar16_t> ret(used + (addBOM ? unicode::BOM_UTF16_LEN : 0) + 1);
- uchar16_t* ptr = ret.pointer();
-
- // Add the BOM if specified.
- if (addBOM)
- {
- if (endian == unicode::EUTFEE_NATIVE)
- *ptr = unicode::BOM;
- else if (endian == unicode::EUTFEE_LITTLE)
- {
- uchar8_t* ptr8 = reinterpret_cast<uchar8_t*>(ptr);
- *ptr8++ = unicode::BOM_ENCODE_UTF16_LE[0];
- *ptr8 = unicode::BOM_ENCODE_UTF16_LE[1];
- }
- else
- {
- uchar8_t* ptr8 = reinterpret_cast<uchar8_t*>(ptr);
- *ptr8++ = unicode::BOM_ENCODE_UTF16_BE[0];
- *ptr8 = unicode::BOM_ENCODE_UTF16_BE[1];
- }
- ++ptr;
- }
-
- memcpy((void*)ptr, (void*)array, used * sizeof(uchar16_t));
- if (endian != unicode::EUTFEE_NATIVE && getEndianness() != endian)
- {
- for (u32 i = 0; i <= used; ++i)
- ptr[i] = unicode::swapEndian16(ptr[i]);
- }
- ret.set_used(used + (addBOM ? unicode::BOM_UTF16_LEN : 0));
- ret.push_back(0);
- return ret;
- }
-
-
-#ifdef USTRING_CPP0X_NEWLITERALS // C++0x
- //! Converts the string to a UTF-32 encoded string.
- //! \param endian The desired endianness of the string.
- //! \param addBOM If true, the proper unicode byte-order mark will be prefixed to the string.
- //! \return A string containing the UTF-32 encoded string.
- core::string<char32_t> toUTF32_s(const unicode::EUTF_ENDIAN endian = unicode::EUTFEE_NATIVE, const bool addBOM = false) const
- {
- core::string<char32_t> ret;
- ret.reserve(size() + 1 + (addBOM ? unicode::BOM_UTF32_LEN : 0));
- const_iterator iter(*this, 0);
-
- // Add the BOM if specified.
- if (addBOM)
- {
- if (endian == unicode::EUTFEE_NATIVE)
- ret.append(unicode::BOM);
- else
- {
- union
- {
- uchar32_t full;
- u8 chunk[4];
- } t;
-
- if (endian == unicode::EUTFEE_LITTLE)
- {
- t.chunk[0] = unicode::BOM_ENCODE_UTF32_LE[0];
- t.chunk[1] = unicode::BOM_ENCODE_UTF32_LE[1];
- t.chunk[2] = unicode::BOM_ENCODE_UTF32_LE[2];
- t.chunk[3] = unicode::BOM_ENCODE_UTF32_LE[3];
- }
- else
- {
- t.chunk[0] = unicode::BOM_ENCODE_UTF32_BE[0];
- t.chunk[1] = unicode::BOM_ENCODE_UTF32_BE[1];
- t.chunk[2] = unicode::BOM_ENCODE_UTF32_BE[2];
- t.chunk[3] = unicode::BOM_ENCODE_UTF32_BE[3];
- }
- ret.append(t.full);
- }
- }
-
- while (!iter.atEnd())
- {
- uchar32_t c = *iter;
- if (endian != unicode::EUTFEE_NATIVE && getEndianness() != endian)
- c = unicode::swapEndian32(c);
- ret.append(c);
- ++iter;
- }
- return ret;
- }
-#endif
-
-
- //! Converts the string to a UTF-32 encoded string array.
- //! Unfortunately, no toUTF32_s() version exists due to limitations with Irrlicht's string class.
- //! \param endian The desired endianness of the string.
- //! \param addBOM If true, the proper unicode byte-order mark will be prefixed to the string.
- //! \return An array containing the UTF-32 encoded string.
- core::array<uchar32_t> toUTF32(const unicode::EUTF_ENDIAN endian = unicode::EUTFEE_NATIVE, const bool addBOM = false) const
- {
- core::array<uchar32_t> ret(size() + (addBOM ? unicode::BOM_UTF32_LEN : 0) + 1);
- const_iterator iter(*this, 0);
-
- // Add the BOM if specified.
- if (addBOM)
- {
- if (endian == unicode::EUTFEE_NATIVE)
- ret.push_back(unicode::BOM);
- else
- {
- union
- {
- uchar32_t full;
- u8 chunk[4];
- } t;
-
- if (endian == unicode::EUTFEE_LITTLE)
- {
- t.chunk[0] = unicode::BOM_ENCODE_UTF32_LE[0];
- t.chunk[1] = unicode::BOM_ENCODE_UTF32_LE[1];
- t.chunk[2] = unicode::BOM_ENCODE_UTF32_LE[2];
- t.chunk[3] = unicode::BOM_ENCODE_UTF32_LE[3];
- }
- else
- {
- t.chunk[0] = unicode::BOM_ENCODE_UTF32_BE[0];
- t.chunk[1] = unicode::BOM_ENCODE_UTF32_BE[1];
- t.chunk[2] = unicode::BOM_ENCODE_UTF32_BE[2];
- t.chunk[3] = unicode::BOM_ENCODE_UTF32_BE[3];
- }
- ret.push_back(t.full);
- }
- }
- ret.push_back(0);
-
- while (!iter.atEnd())
- {
- uchar32_t c = *iter;
- if (endian != unicode::EUTFEE_NATIVE && getEndianness() != endian)
- c = unicode::swapEndian32(c);
- ret.push_back(c);
- ++iter;
- }
- return ret;
- }
-
-
- //! Converts the string to a wchar_t encoded string.
- /** The size of a wchar_t changes depending on the platform. This function will store a
- correct UTF-8, -16, or -32 encoded string depending on the size of a wchar_t. **/
- //! \param endian The desired endianness of the string.
- //! \param addBOM If true, the proper unicode byte-order mark will be prefixed to the string.
- //! \return A string containing the wchar_t encoded string.
- core::string<wchar_t> toWCHAR_s(const unicode::EUTF_ENDIAN endian = unicode::EUTFEE_NATIVE, const bool addBOM = false) const
- {
- if (sizeof(wchar_t) == 4)
- {
- core::array<uchar32_t> a(toUTF32(endian, addBOM));
- core::stringw ret(a.pointer());
- return ret;
- }
- else if (sizeof(wchar_t) == 2)
- {
- if (endian == unicode::EUTFEE_NATIVE && addBOM == false)
- {
- core::stringw ret(array);
- return ret;
- }
- else
- {
- core::array<uchar16_t> a(toUTF16(endian, addBOM));
- core::stringw ret(a.pointer());
- return ret;
- }
- }
- else if (sizeof(wchar_t) == 1)
- {
- core::array<uchar8_t> a(toUTF8(addBOM));
- core::stringw ret(a.pointer());
- return ret;
- }
-
- // Shouldn't happen.
- return core::stringw();
- }
-
-
- //! Converts the string to a wchar_t encoded string array.
- /** The size of a wchar_t changes depending on the platform. This function will store a
- correct UTF-8, -16, or -32 encoded string depending on the size of a wchar_t. **/
- //! \param endian The desired endianness of the string.
- //! \param addBOM If true, the proper unicode byte-order mark will be prefixed to the string.
- //! \return An array containing the wchar_t encoded string.
- core::array<wchar_t> toWCHAR(const unicode::EUTF_ENDIAN endian = unicode::EUTFEE_NATIVE, const bool addBOM = false) const
- {
- if (sizeof(wchar_t) == 4)
- {
- core::array<uchar32_t> a(toUTF32(endian, addBOM));
- core::array<wchar_t> ret(a.size());
- ret.set_used(a.size());
- memcpy((void*)ret.pointer(), (void*)a.pointer(), a.size() * sizeof(uchar32_t));
- return ret;
- }
- if (sizeof(wchar_t) == 2)
- {
- if (endian == unicode::EUTFEE_NATIVE && addBOM == false)
- {
- core::array<wchar_t> ret(used);
- ret.set_used(used);
- memcpy((void*)ret.pointer(), (void*)array, used * sizeof(uchar16_t));
- return ret;
- }
- else
- {
- core::array<uchar16_t> a(toUTF16(endian, addBOM));
- core::array<wchar_t> ret(a.size());
- ret.set_used(a.size());
- memcpy((void*)ret.pointer(), (void*)a.pointer(), a.size() * sizeof(uchar16_t));
- return ret;
- }
- }
- if (sizeof(wchar_t) == 1)
- {
- core::array<uchar8_t> a(toUTF8(addBOM));
- core::array<wchar_t> ret(a.size());
- ret.set_used(a.size());
- memcpy((void*)ret.pointer(), (void*)a.pointer(), a.size() * sizeof(uchar8_t));
- return ret;
- }
-
- // Shouldn't happen.
- return core::array<wchar_t>();
- }
-
- //! Converts the string to a properly encoded io::path string.
- //! \param endian The desired endianness of the string.
- //! \param addBOM If true, the proper unicode byte-order mark will be prefixed to the string.
- //! \return An io::path string containing the properly encoded string.
- io::path toPATH_s(const unicode::EUTF_ENDIAN endian = unicode::EUTFEE_NATIVE, const bool addBOM = false) const
- {
-#if defined(_IRR_WCHAR_FILESYSTEM)
- return toWCHAR_s(endian, addBOM);
-#else
- return toUTF8_s(addBOM);
-#endif
- }
-
- //! Loads an unknown stream of data.
- //! Will attempt to determine if the stream is unicode data. Useful for loading from files.
- //! \param data The data stream to load from.
- //! \param data_size The length of the data string.
- //! \return A reference to our current string.
- ustring16<TAlloc>& loadDataStream(const char* data, size_t data_size)
- {
- // Clear our string.
- *this = "";
- if (!data)
- return *this;
-
- unicode::EUTF_ENCODE e = unicode::determineUnicodeBOM(data);
- switch (e)
- {
- default:
- case unicode::EUTFE_UTF8:
- append((uchar8_t*)data, data_size);
- break;
-
- case unicode::EUTFE_UTF16:
- case unicode::EUTFE_UTF16_BE:
- case unicode::EUTFE_UTF16_LE:
- append((uchar16_t*)data, data_size / 2);
- break;
-
- case unicode::EUTFE_UTF32:
- case unicode::EUTFE_UTF32_BE:
- case unicode::EUTFE_UTF32_LE:
- append((uchar32_t*)data, data_size / 4);
- break;
- }
-
- return *this;
- }
-
- //! Gets the encoding of the Unicode string this class contains.
- //! \return An enum describing the current encoding of this string.
- const unicode::EUTF_ENCODE getEncoding() const
- {
- return encoding;
- }
-
- //! Gets the endianness of the Unicode string this class contains.
- //! \return An enum describing the endianness of this string.
- const unicode::EUTF_ENDIAN getEndianness() const
- {
- if (encoding == unicode::EUTFE_UTF16_LE ||
- encoding == unicode::EUTFE_UTF32_LE)
- return unicode::EUTFEE_LITTLE;
- else return unicode::EUTFEE_BIG;
- }
-
-private:
-
- //! Reallocate the string, making it bigger or smaller.
- //! \param new_size The new size of the string.
- void reallocate(u32 new_size)
- {
- uchar16_t* old_array = array;
-
- array = allocator.allocate(new_size + 1); //new u16[new_size];
- allocated = new_size + 1;
- if (old_array == 0) return;
-
- u32 amount = used < new_size ? used : new_size;
- for (u32 i=0; i<=amount; ++i)
- array[i] = old_array[i];
-
- if (allocated <= used)
- used = allocated - 1;
-
- array[used] = 0;
-
- allocator.deallocate(old_array); // delete [] old_array;
- }
-
- //--- member variables
-
- uchar16_t* array;
- unicode::EUTF_ENCODE encoding;
- u32 allocated;
- u32 used;
- TAlloc allocator;
- //irrAllocator<uchar16_t> allocator;
-};
-
-typedef ustring16<irrAllocator<uchar16_t> > ustring;
-
-
-//! Appends two ustring16s.
-template <typename TAlloc>
-inline ustring16<TAlloc> operator+(const ustring16<TAlloc>& left, const ustring16<TAlloc>& right)
-{
- ustring16<TAlloc> ret(left);
- ret += right;
- return ret;
-}
-
-
-//! Appends a ustring16 and a null-terminated unicode string.
-template <typename TAlloc, class B>
-inline ustring16<TAlloc> operator+(const ustring16<TAlloc>& left, const B* const right)
-{
- ustring16<TAlloc> ret(left);
- ret += right;
- return ret;
-}
-
-
-//! Appends a ustring16 and a null-terminated unicode string.
-template <class B, typename TAlloc>
-inline ustring16<TAlloc> operator+(const B* const left, const ustring16<TAlloc>& right)
-{
- ustring16<TAlloc> ret(left);
- ret += right;
- return ret;
-}
-
-
-//! Appends a ustring16 and an Irrlicht string.
-template <typename TAlloc, typename B, typename BAlloc>
-inline ustring16<TAlloc> operator+(const ustring16<TAlloc>& left, const string<B, BAlloc>& right)
-{
- ustring16<TAlloc> ret(left);
- ret += right;
- return ret;
-}
-
-
-//! Appends a ustring16 and an Irrlicht string.
-template <typename TAlloc, typename B, typename BAlloc>
-inline ustring16<TAlloc> operator+(const string<B, BAlloc>& left, const ustring16<TAlloc>& right)
-{
- ustring16<TAlloc> ret(left);
- ret += right;
- return ret;
-}
-
-
-//! Appends a ustring16 and a std::basic_string.
-template <typename TAlloc, typename B, typename A, typename BAlloc>
-inline ustring16<TAlloc> operator+(const ustring16<TAlloc>& left, const std::basic_string<B, A, BAlloc>& right)
-{
- ustring16<TAlloc> ret(left);
- ret += right;
- return ret;
-}
-
-
-//! Appends a ustring16 and a std::basic_string.
-template <typename TAlloc, typename B, typename A, typename BAlloc>
-inline ustring16<TAlloc> operator+(const std::basic_string<B, A, BAlloc>& left, const ustring16<TAlloc>& right)
-{
- ustring16<TAlloc> ret(left);
- ret += right;
- return ret;
-}
-
-
-//! Appends a ustring16 and a char.
-template <typename TAlloc>
-inline ustring16<TAlloc> operator+(const ustring16<TAlloc>& left, const char right)
-{
- ustring16<TAlloc> ret(left);
- ret += right;
- return ret;
-}
-
-
-//! Appends a ustring16 and a char.
-template <typename TAlloc>
-inline ustring16<TAlloc> operator+(const char left, const ustring16<TAlloc>& right)
-{
- ustring16<TAlloc> ret(left);
- ret += right;
- return ret;
-}
-
-
-#ifdef USTRING_CPP0X_NEWLITERALS
-//! Appends a ustring16 and a uchar32_t.
-template <typename TAlloc>
-inline ustring16<TAlloc> operator+(const ustring16<TAlloc>& left, const uchar32_t right)
-{
- ustring16<TAlloc> ret(left);
- ret += right;
- return ret;
-}
-
-
-//! Appends a ustring16 and a uchar32_t.
-template <typename TAlloc>
-inline ustring16<TAlloc> operator+(const uchar32_t left, const ustring16<TAlloc>& right)
-{
- ustring16<TAlloc> ret(left);
- ret += right;
- return ret;
-}
-#endif
-
-
-//! Appends a ustring16 and a short.
-template <typename TAlloc>
-inline ustring16<TAlloc> operator+(const ustring16<TAlloc>& left, const short right)
-{
- ustring16<TAlloc> ret(left);
- ret += core::stringc(right);
- return ret;
-}
-
-
-//! Appends a ustring16 and a short.
-template <typename TAlloc>
-inline ustring16<TAlloc> operator+(const short left, const ustring16<TAlloc>& right)
-{
- ustring16<TAlloc> ret((core::stringc(left)));
- ret += right;
- return ret;
-}
-
-
-//! Appends a ustring16 and an unsigned short.
-template <typename TAlloc>
-inline ustring16<TAlloc> operator+(const ustring16<TAlloc>& left, const unsigned short right)
-{
- ustring16<TAlloc> ret(left);
- ret += core::stringc(right);
- return ret;
-}
-
-
-//! Appends a ustring16 and an unsigned short.
-template <typename TAlloc>
-inline ustring16<TAlloc> operator+(const unsigned short left, const ustring16<TAlloc>& right)
-{
- ustring16<TAlloc> ret((core::stringc(left)));
- ret += right;
- return ret;
-}
-
-
-//! Appends a ustring16 and an int.
-template <typename TAlloc>
-inline ustring16<TAlloc> operator+(const ustring16<TAlloc>& left, const int right)
-{
- ustring16<TAlloc> ret(left);
- ret += core::stringc(right);
- return ret;
-}
-
-
-//! Appends a ustring16 and an int.
-template <typename TAlloc>
-inline ustring16<TAlloc> operator+(const int left, const ustring16<TAlloc>& right)
-{
- ustring16<TAlloc> ret((core::stringc(left)));
- ret += right;
- return ret;
-}
-
-
-//! Appends a ustring16 and an unsigned int.
-template <typename TAlloc>
-inline ustring16<TAlloc> operator+(const ustring16<TAlloc>& left, const unsigned int right)
-{
- ustring16<TAlloc> ret(left);
- ret += core::stringc(right);
- return ret;
-}
-
-
-//! Appends a ustring16 and an unsigned int.
-template <typename TAlloc>
-inline ustring16<TAlloc> operator+(const unsigned int left, const ustring16<TAlloc>& right)
-{
- ustring16<TAlloc> ret((core::stringc(left)));
- ret += right;
- return ret;
-}
-
-
-//! Appends a ustring16 and a long.
-template <typename TAlloc>
-inline ustring16<TAlloc> operator+(const ustring16<TAlloc>& left, const long right)
-{
- ustring16<TAlloc> ret(left);
- ret += core::stringc(right);
- return ret;
-}
-
-
-//! Appends a ustring16 and a long.
-template <typename TAlloc>
-inline ustring16<TAlloc> operator+(const long left, const ustring16<TAlloc>& right)
-{
- ustring16<TAlloc> ret((core::stringc(left)));
- ret += right;
- return ret;
-}
-
-
-//! Appends a ustring16 and an unsigned long.
-template <typename TAlloc>
-inline ustring16<TAlloc> operator+(const ustring16<TAlloc>& left, const unsigned long right)
-{
- ustring16<TAlloc> ret(left);
- ret += core::stringc(right);
- return ret;
-}
-
-
-//! Appends a ustring16 and an unsigned long.
-template <typename TAlloc>
-inline ustring16<TAlloc> operator+(const unsigned long left, const ustring16<TAlloc>& right)
-{
- ustring16<TAlloc> ret((core::stringc(left)));
- ret += right;
- return ret;
-}
-
-
-//! Appends a ustring16 and a float.
-template <typename TAlloc>
-inline ustring16<TAlloc> operator+(const ustring16<TAlloc>& left, const float right)
-{
- ustring16<TAlloc> ret(left);
- ret += core::stringc(right);
- return ret;
-}
-
-
-//! Appends a ustring16 and a float.
-template <typename TAlloc>
-inline ustring16<TAlloc> operator+(const float left, const ustring16<TAlloc>& right)
-{
- ustring16<TAlloc> ret((core::stringc(left)));
- ret += right;
- return ret;
-}
-
-
-//! Appends a ustring16 and a double.
-template <typename TAlloc>
-inline ustring16<TAlloc> operator+(const ustring16<TAlloc>& left, const double right)
-{
- ustring16<TAlloc> ret(left);
- ret += core::stringc(right);
- return ret;
-}
-
-
-//! Appends a ustring16 and a double.
-template <typename TAlloc>
-inline ustring16<TAlloc> operator+(const double left, const ustring16<TAlloc>& right)
-{
- ustring16<TAlloc> ret((core::stringc(left)));
- ret += right;
- return ret;
-}
-
-
-#ifdef USTRING_CPP0X
-//! Appends two ustring16s.
-template <typename TAlloc>
-inline ustring16<TAlloc>&& operator+(const ustring16<TAlloc>& left, ustring16<TAlloc>&& right)
-{
- //std::cout << "MOVE operator+(&, &&)" << std::endl;
- right.insert(left, 0);
- return std::move(right);
-}
-
-
-//! Appends two ustring16s.
-template <typename TAlloc>
-inline ustring16<TAlloc>&& operator+(ustring16<TAlloc>&& left, const ustring16<TAlloc>& right)
-{
- //std::cout << "MOVE operator+(&&, &)" << std::endl;
- left.append(right);
- return std::move(left);
-}
-
-
-//! Appends two ustring16s.
-template <typename TAlloc>
-inline ustring16<TAlloc>&& operator+(ustring16<TAlloc>&& left, ustring16<TAlloc>&& right)
-{
- //std::cout << "MOVE operator+(&&, &&)" << std::endl;
- if ((right.size_raw() <= left.capacity() - left.size_raw()) ||
- (right.capacity() - right.size_raw() < left.size_raw()))
- {
- left.append(right);
- return std::move(left);
- }
- else
- {
- right.insert(left, 0);
- return std::move(right);
- }
-}
-
-
-//! Appends a ustring16 and a null-terminated unicode string.
-template <typename TAlloc, class B>
-inline ustring16<TAlloc>&& operator+(ustring16<TAlloc>&& left, const B* const right)
-{
- //std::cout << "MOVE operator+(&&, B*)" << std::endl;
- left.append(right);
- return std::move(left);
-}
-
-
-//! Appends a ustring16 and a null-terminated unicode string.
-template <class B, typename TAlloc>
-inline ustring16<TAlloc>&& operator+(const B* const left, ustring16<TAlloc>&& right)
-{
- //std::cout << "MOVE operator+(B*, &&)" << std::endl;
- right.insert(left, 0);
- return std::move(right);
-}
-
-
-//! Appends a ustring16 and an Irrlicht string.
-template <typename TAlloc, typename B, typename BAlloc>
-inline ustring16<TAlloc>&& operator+(const string<B, BAlloc>& left, ustring16<TAlloc>&& right)
-{
- //std::cout << "MOVE operator+(&, &&)" << std::endl;
- right.insert(left, 0);
- return std::move(right);
-}
-
-
-//! Appends a ustring16 and an Irrlicht string.
-template <typename TAlloc, typename B, typename BAlloc>
-inline ustring16<TAlloc>&& operator+(ustring16<TAlloc>&& left, const string<B, BAlloc>& right)
-{
- //std::cout << "MOVE operator+(&&, &)" << std::endl;
- left.append(right);
- return std::move(left);
-}
-
-
-//! Appends a ustring16 and a std::basic_string.
-template <typename TAlloc, typename B, typename A, typename BAlloc>
-inline ustring16<TAlloc>&& operator+(const std::basic_string<B, A, BAlloc>& left, ustring16<TAlloc>&& right)
-{
- //std::cout << "MOVE operator+(&, &&)" << std::endl;
- right.insert(core::ustring16<TAlloc>(left), 0);
- return std::move(right);
-}
-
-
-//! Appends a ustring16 and a std::basic_string.
-template <typename TAlloc, typename B, typename A, typename BAlloc>
-inline ustring16<TAlloc>&& operator+(ustring16<TAlloc>&& left, const std::basic_string<B, A, BAlloc>& right)
-{
- //std::cout << "MOVE operator+(&&, &)" << std::endl;
- left.append(right);
- return std::move(left);
-}
-
-
-//! Appends a ustring16 and a char.
-template <typename TAlloc>
-inline ustring16<TAlloc> operator+(ustring16<TAlloc>&& left, const char right)
-{
- left.append((uchar32_t)right);
- return std::move(left);
-}
-
-
-//! Appends a ustring16 and a char.
-template <typename TAlloc>
-inline ustring16<TAlloc> operator+(const char left, ustring16<TAlloc>&& right)
-{
- right.insert((uchar32_t)left, 0);
- return std::move(right);
-}
-
-
-#ifdef USTRING_CPP0X_NEWLITERALS
-//! Appends a ustring16 and a uchar32_t.
-template <typename TAlloc>
-inline ustring16<TAlloc> operator+(ustring16<TAlloc>&& left, const uchar32_t right)
-{
- left.append(right);
- return std::move(left);
-}
-
-
-//! Appends a ustring16 and a uchar32_t.
-template <typename TAlloc>
-inline ustring16<TAlloc> operator+(const uchar32_t left, ustring16<TAlloc>&& right)
-{
- right.insert(left, 0);
- return std::move(right);
-}
-#endif
-
-
-//! Appends a ustring16 and a short.
-template <typename TAlloc>
-inline ustring16<TAlloc> operator+(ustring16<TAlloc>&& left, const short right)
-{
- left.append(core::stringc(right));
- return std::move(left);
-}
-
-
-//! Appends a ustring16 and a short.
-template <typename TAlloc>
-inline ustring16<TAlloc> operator+(const short left, ustring16<TAlloc>&& right)
-{
- right.insert(core::stringc(left), 0);
- return std::move(right);
-}
-
-
-//! Appends a ustring16 and an unsigned short.
-template <typename TAlloc>
-inline ustring16<TAlloc> operator+(ustring16<TAlloc>&& left, const unsigned short right)
-{
- left.append(core::stringc(right));
- return std::move(left);
-}
-
-
-//! Appends a ustring16 and an unsigned short.
-template <typename TAlloc>
-inline ustring16<TAlloc> operator+(const unsigned short left, ustring16<TAlloc>&& right)
-{
- right.insert(core::stringc(left), 0);
- return std::move(right);
-}
-
-
-//! Appends a ustring16 and an int.
-template <typename TAlloc>
-inline ustring16<TAlloc> operator+(ustring16<TAlloc>&& left, const int right)
-{
- left.append(core::stringc(right));
- return std::move(left);
-}
-
-
-//! Appends a ustring16 and an int.
-template <typename TAlloc>
-inline ustring16<TAlloc> operator+(const int left, ustring16<TAlloc>&& right)
-{
- right.insert(core::stringc(left), 0);
- return std::move(right);
-}
-
-
-//! Appends a ustring16 and an unsigned int.
-template <typename TAlloc>
-inline ustring16<TAlloc> operator+(ustring16<TAlloc>&& left, const unsigned int right)
-{
- left.append(core::stringc(right));
- return std::move(left);
-}
-
-
-//! Appends a ustring16 and an unsigned int.
-template <typename TAlloc>
-inline ustring16<TAlloc> operator+(const unsigned int left, ustring16<TAlloc>&& right)
-{
- right.insert(core::stringc(left), 0);
- return std::move(right);
-}
-
-
-//! Appends a ustring16 and a long.
-template <typename TAlloc>
-inline ustring16<TAlloc> operator+(ustring16<TAlloc>&& left, const long right)
-{
- left.append(core::stringc(right));
- return std::move(left);
-}
-
-
-//! Appends a ustring16 and a long.
-template <typename TAlloc>
-inline ustring16<TAlloc> operator+(const long left, ustring16<TAlloc>&& right)
-{
- right.insert(core::stringc(left), 0);
- return std::move(right);
-}
-
-
-//! Appends a ustring16 and an unsigned long.
-template <typename TAlloc>
-inline ustring16<TAlloc> operator+(ustring16<TAlloc>&& left, const unsigned long right)
-{
- left.append(core::stringc(right));
- return std::move(left);
-}
-
-
-//! Appends a ustring16 and an unsigned long.
-template <typename TAlloc>
-inline ustring16<TAlloc> operator+(const unsigned long left, ustring16<TAlloc>&& right)
-{
- right.insert(core::stringc(left), 0);
- return std::move(right);
-}
-
-
-//! Appends a ustring16 and a float.
-template <typename TAlloc>
-inline ustring16<TAlloc> operator+(ustring16<TAlloc>&& left, const float right)
-{
- left.append(core::stringc(right));
- return std::move(left);
-}
-
-
-//! Appends a ustring16 and a float.
-template <typename TAlloc>
-inline ustring16<TAlloc> operator+(const float left, ustring16<TAlloc>&& right)
-{
- right.insert(core::stringc(left), 0);
- return std::move(right);
-}
-
-
-//! Appends a ustring16 and a double.
-template <typename TAlloc>
-inline ustring16<TAlloc> operator+(ustring16<TAlloc>&& left, const double right)
-{
- left.append(core::stringc(right));
- return std::move(left);
-}
-
-
-//! Appends a ustring16 and a double.
-template <typename TAlloc>
-inline ustring16<TAlloc> operator+(const double left, ustring16<TAlloc>&& right)
-{
- right.insert(core::stringc(left), 0);
- return std::move(right);
-}
-#endif
-
-
-#ifndef USTRING_NO_STL
-//! Writes a ustring16 to an ostream.
-template <typename TAlloc>
-inline std::ostream& operator<<(std::ostream& out, const ustring16<TAlloc>& in)
-{
- out << in.toUTF8_s().c_str();
- return out;
-}
-
-//! Writes a ustring16 to a wostream.
-template <typename TAlloc>
-inline std::wostream& operator<<(std::wostream& out, const ustring16<TAlloc>& in)
-{
- out << in.toWCHAR_s().c_str();
- return out;
-}
-#endif
-
-
-#ifndef USTRING_NO_STL
-
-namespace unicode
-{
-
-//! Hashing algorithm for hashing a ustring. Used for things like unordered_maps.
-//! Algorithm taken from std::hash<std::string>.
-class hash : public std::unary_function<core::ustring, size_t>
-{
- public:
- size_t operator()(const core::ustring& s) const
- {
- size_t ret = 2166136261U;
- size_t index = 0;
- size_t stride = 1 + s.size_raw() / 10;
-
- core::ustring::const_iterator i = s.begin();
- while (i != s.end())
- {
- // TODO: Don't force u32 on an x64 OS. Make it agnostic.
- ret = 16777619U * ret ^ (size_t)s[(u32)index];
- index += stride;
- i += stride;
- }
- return (ret);
- }
-};
-
-} // end namespace unicode
-
-#endif
-
-} // end namespace core
-} // end namespace irr
diff --git a/src/irrlicht_changes/static_text.cpp b/src/irrlicht_changes/static_text.cpp
index bf61cd64e..baf0ea626 100644
--- a/src/irrlicht_changes/static_text.cpp
+++ b/src/irrlicht_changes/static_text.cpp
@@ -12,17 +12,12 @@
#include <rect.h>
#include <SColor.h>
-#if USE_FREETYPE
- #include "CGUITTFont.h"
-#endif
-
+#include "CGUITTFont.h"
#include "util/string.h"
namespace irr
{
-#if USE_FREETYPE
-
namespace gui
{
//! constructor
@@ -108,19 +103,12 @@ void StaticText::draw()
font->getDimension(str.c_str()).Width;
}
- //str = colorizeText(BrokenText[i].c_str(), colors, previous_color);
- //if (!colors.empty())
- // previous_color = colors[colors.size() - 1];
-
-#if USE_FREETYPE
if (font->getType() == irr::gui::EGFT_CUSTOM) {
- irr::gui::CGUITTFont *tmp = static_cast<irr::gui::CGUITTFont*>(font);
+ CGUITTFont *tmp = static_cast<CGUITTFont*>(font);
tmp->draw(str,
- r, previous_color, // FIXME
- HAlign == EGUIA_CENTER, VAlign == EGUIA_CENTER,
+ r, HAlign == EGUIA_CENTER, VAlign == EGUIA_CENTER,
(RestrainTextInside ? &AbsoluteClippingRect : NULL));
} else
-#endif
{
// Draw non-colored text
font->draw(str.c_str(),
@@ -246,15 +234,17 @@ void StaticText::setTextAlignment(EGUI_ALIGNMENT horizontal, EGUI_ALIGNMENT vert
}
-#if IRRLICHT_VERSION_MAJOR == 1 && IRRLICHT_VERSION_MINOR <= 7
-const video::SColor& StaticText::getOverrideColor() const
-#else
video::SColor StaticText::getOverrideColor() const
-#endif
{
return ColoredText.getDefaultColor();
}
+#if IRRLICHT_VERSION_MAJOR == 1 && IRRLICHT_VERSION_MINOR > 8
+video::SColor StaticText::getActiveColor() const
+{
+ return getOverrideColor();
+}
+#endif
//! Sets if the static text should use the overide color or the
//! color in the gui skin.
@@ -591,54 +581,8 @@ s32 StaticText::getTextWidth() const
}
-//! Writes attributes of the element.
-//! Implement this to expose the attributes of your element for
-//! scripting languages, editors, debuggers or xml serialization purposes.
-void StaticText::serializeAttributes(io::IAttributes* out, io::SAttributeReadWriteOptions* options=0) const
-{
- IGUIStaticText::serializeAttributes(out,options);
-
- out->addBool ("Border", Border);
- out->addBool ("OverrideColorEnabled",true);
- out->addBool ("OverrideBGColorEnabled",ColoredText.hasBackground());
- out->addBool ("WordWrap", WordWrap);
- out->addBool ("Background", Background);
- out->addBool ("RightToLeft", RightToLeft);
- out->addBool ("RestrainTextInside", RestrainTextInside);
- out->addColor ("OverrideColor", ColoredText.getDefaultColor());
- out->addColor ("BGColor", ColoredText.getBackground());
- out->addEnum ("HTextAlign", HAlign, GUIAlignmentNames);
- out->addEnum ("VTextAlign", VAlign, GUIAlignmentNames);
-
- // out->addFont ("OverrideFont", OverrideFont);
-}
-
-
-//! Reads attributes of the element
-void StaticText::deserializeAttributes(io::IAttributes* in, io::SAttributeReadWriteOptions* options=0)
-{
- IGUIStaticText::deserializeAttributes(in,options);
-
- Border = in->getAttributeAsBool("Border");
- setWordWrap(in->getAttributeAsBool("WordWrap"));
- Background = in->getAttributeAsBool("Background");
- RightToLeft = in->getAttributeAsBool("RightToLeft");
- RestrainTextInside = in->getAttributeAsBool("RestrainTextInside");
- if (in->getAttributeAsBool("OverrideColorEnabled"))
- ColoredText.setDefaultColor(in->getAttributeAsColor("OverrideColor"));
- if (in->getAttributeAsBool("OverrideBGColorEnabled"))
- ColoredText.setBackground(in->getAttributeAsColor("BGColor"));
-
- setTextAlignment( (EGUI_ALIGNMENT) in->getAttributeAsEnumeration("HTextAlign", GUIAlignmentNames),
- (EGUI_ALIGNMENT) in->getAttributeAsEnumeration("VTextAlign", GUIAlignmentNames));
-
- // OverrideFont = in->getAttributeAsFont("OverrideFont");
-}
-
} // end namespace gui
-#endif // USE_FREETYPE
-
} // end namespace irr
diff --git a/src/irrlicht_changes/static_text.h b/src/irrlicht_changes/static_text.h
index 1f111ea56..74ef62008 100644
--- a/src/irrlicht_changes/static_text.h
+++ b/src/irrlicht_changes/static_text.h
@@ -20,7 +20,6 @@
#include "config.h"
#include <IGUIEnvironment.h>
-#if USE_FREETYPE
namespace irr
{
@@ -134,10 +133,11 @@ namespace gui
virtual void setTextAlignment(EGUI_ALIGNMENT horizontal, EGUI_ALIGNMENT vertical);
//! Gets the override color
- #if IRRLICHT_VERSION_MAJOR == 1 && IRRLICHT_VERSION_MINOR <= 7
- virtual const video::SColor& getOverrideColor() const;
- #else
virtual video::SColor getOverrideColor() const;
+
+ #if IRRLICHT_VERSION_MAJOR == 1 && IRRLICHT_VERSION_MINOR > 8
+ //! Gets the currently used text color
+ virtual video::SColor getActiveColor() const;
#endif
//! Sets if the static text should use the overide color or the
@@ -183,12 +183,6 @@ namespace gui
//! Checks if the text should be interpreted as right-to-left text
virtual bool isRightToLeft() const;
- //! 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);
-
virtual bool hasType(EGUI_ELEMENT_TYPE t) const {
return (t == EGUIET_ENRICHED_STATIC_TEXT) || (t == EGUIET_STATIC_TEXT);
};
@@ -235,41 +229,6 @@ inline void setStaticText(irr::gui::IGUIStaticText *static_text, const EnrichedS
}
}
-#else // USE_FREETYPE
-
-namespace irr
-{
-namespace gui
-{
-
-class StaticText
-{
-public:
- static irr::gui::IGUIStaticText *add(
- irr::gui::IGUIEnvironment *guienv,
- const EnrichedString &text,
- const core::rect< s32 > &rectangle,
- bool border = false,
- bool wordWrap = true,
- irr::gui::IGUIElement *parent = NULL,
- s32 id = -1,
- bool fillBackground = false)
- {
- return guienv->addStaticText(text.c_str(), rectangle, border, wordWrap, parent, id, fillBackground);
- }
-};
-
-} // end namespace gui
-
-} // end namespace irr
-
-inline void setStaticText(irr::gui::IGUIStaticText *static_text, const EnrichedString &text)
-{
- static_text->setText(text.c_str());
-}
-
-#endif
-
inline void setStaticText(irr::gui::IGUIStaticText *static_text, const wchar_t *text)
{
setStaticText(static_text, EnrichedString(text, static_text->getOverrideColor()));
diff --git a/src/irrlichttypes.h b/src/irrlichttypes.h
index 794776b26..93c2d105b 100644
--- a/src/irrlichttypes.h
+++ b/src/irrlichttypes.h
@@ -19,16 +19,11 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#pragma once
-/* Ensure that <stdint.h> is included before <irrTypes.h>, unless building on
- * MSVC, to address an irrlicht issue: https://sourceforge.net/p/irrlicht/bugs/433/
- *
- * TODO: Decide whether or not we support non-compliant C++ compilers like old
- * versions of MSCV. If we do not then <stdint.h> can always be included
- * regardless of the compiler.
+/*
+ * IrrlichtMt already includes stdint.h in irrTypes.h. This works everywhere
+ * we need it to (including recent MSVC), so should be fine here too.
*/
-#ifndef _MSC_VER
-# include <cstdint>
-#endif
+#include <cstdint>
#include <irrTypes.h>
@@ -36,19 +31,6 @@ using namespace irr;
namespace irr {
-// Irrlicht 1.8+ defines 64bit unsigned symbol in irrTypes.h
-#if (IRRLICHT_VERSION_MAJOR == 1 && IRRLICHT_VERSION_MINOR < 8)
-#ifdef _MSC_VER
- // Windows
- typedef long long s64;
- typedef unsigned long long u64;
-#else
- // Posix
- typedef int64_t s64;
- typedef uint64_t u64;
-#endif
-#endif
-
#if (IRRLICHT_VERSION_MAJOR == 1 && IRRLICHT_VERSION_MINOR >= 9)
namespace core {
template <typename T>
diff --git a/src/itemdef.cpp b/src/itemdef.cpp
index 5fb1e4c47..d79d6b263 100644
--- a/src/itemdef.cpp
+++ b/src/itemdef.cpp
@@ -71,13 +71,11 @@ ItemDefinition& ItemDefinition::operator=(const ItemDefinition &def)
stack_max = def.stack_max;
usable = def.usable;
liquids_pointable = def.liquids_pointable;
- if(def.tool_capabilities)
- {
- tool_capabilities = new ToolCapabilities(
- *def.tool_capabilities);
- }
+ if (def.tool_capabilities)
+ tool_capabilities = new ToolCapabilities(*def.tool_capabilities);
groups = def.groups;
node_placement_prediction = def.node_placement_prediction;
+ place_param2 = def.place_param2;
sound_place = def.sound_place;
sound_place_failed = def.sound_place_failed;
range = def.range;
@@ -120,8 +118,8 @@ void ItemDefinition::reset()
sound_place = SimpleSoundSpec();
sound_place_failed = SimpleSoundSpec();
range = -1;
-
node_placement_prediction = "";
+ place_param2 = 0;
}
void ItemDefinition::serialize(std::ostream &os, u16 protocol_version) const
@@ -166,6 +164,8 @@ void ItemDefinition::serialize(std::ostream &os, u16 protocol_version) const
os << serializeString16(wield_overlay);
os << serializeString16(short_description);
+
+ os << place_param2;
}
void ItemDefinition::deSerialize(std::istream &is)
@@ -219,6 +219,8 @@ void ItemDefinition::deSerialize(std::istream &is)
// block to not need to increase the version.
try {
short_description = deSerializeString16(is);
+
+ place_param2 = readU8(is); // 0 if missing
} catch(SerializationError &e) {};
}
diff --git a/src/itemdef.h b/src/itemdef.h
index ebf0d3527..3e302840f 100644
--- a/src/itemdef.h
+++ b/src/itemdef.h
@@ -86,6 +86,7 @@ struct ItemDefinition
// Server will update the precise end result a moment later.
// "" = no prediction
std::string node_placement_prediction;
+ u8 place_param2;
/*
Some helpful methods
diff --git a/src/itemstackmetadata.cpp b/src/itemstackmetadata.cpp
index 7a26fbb0e..529e0149f 100644
--- a/src/itemstackmetadata.cpp
+++ b/src/itemstackmetadata.cpp
@@ -60,7 +60,7 @@ bool ItemStackMetadata::setString(const std::string &name, const std::string &va
void ItemStackMetadata::serialize(std::ostream &os) const
{
- std::ostringstream os2;
+ std::ostringstream os2(std::ios_base::binary);
os2 << DESERIALIZE_START;
for (const auto &stringvar : m_stringvars) {
if (!stringvar.first.empty() || !stringvar.second.empty())
diff --git a/src/main.cpp b/src/main.cpp
index 39b441d2c..ca95ef874 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -38,6 +38,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "player.h"
#include "porting.h"
#include "network/socket.h"
+#include "mapblock.h"
#if USE_CURSES
#include "terminal_chat_console.h"
#endif
@@ -60,11 +61,8 @@ extern "C" {
#endif
}
-#if !defined(SERVER) && \
- (IRRLICHT_VERSION_MAJOR == 1) && \
- (IRRLICHT_VERSION_MINOR == 8) && \
- (IRRLICHT_VERSION_REVISION == 2)
- #error "Irrlicht 1.8.2 is known to be broken - please update Irrlicht to version >= 1.8.3"
+#if !defined(__cpp_rtti) || !defined(__cpp_exceptions)
+#error Minetest cannot be built without exceptions or RTTI
#endif
#define DEBUGFILE "debug.txt"
@@ -91,6 +89,7 @@ static void list_worlds(bool print_name, bool print_path);
static bool setup_log_params(const Settings &cmd_args);
static bool create_userdata_path();
static bool init_common(const Settings &cmd_args, int argc, char *argv[]);
+static void uninit_common();
static void startup_message();
static bool read_config_file(const Settings &cmd_args);
static void init_log_streams(const Settings &cmd_args);
@@ -110,6 +109,7 @@ static bool determine_subgame(GameParams *game_params);
static bool run_dedicated_server(const GameParams &game_params, const Settings &cmd_args);
static bool migrate_map_database(const GameParams &game_params, const Settings &cmd_args);
+static bool recompress_map_database(const GameParams &game_params, const Settings &cmd_args, const Address &addr);
/**********************************************************************/
@@ -201,6 +201,7 @@ int main(int argc, char *argv[])
errorstream << "Unittest support is not enabled in this binary. "
<< "If you want to enable it, compile project with BUILD_UNITTESTS=1 flag."
<< std::endl;
+ return 1;
#endif
}
#endif
@@ -225,8 +226,7 @@ int main(int argc, char *argv[])
return run_dedicated_server(game_params, cmd_args) ? 0 : 1;
#ifndef SERVER
- ClientLauncher launcher;
- retval = launcher.run(game_params, cmd_args) ? 0 : 1;
+ retval = ClientLauncher().run(game_params, cmd_args) ? 0 : 1;
#else
retval = 0;
#endif
@@ -237,9 +237,6 @@ int main(int argc, char *argv[])
print_modified_quicktune_values();
- // Stop httpfetch thread (if started)
- httpfetch_cleanup();
-
END_DEBUG_EXCEPTION_HANDLER
return retval;
@@ -302,11 +299,13 @@ static void set_allowed_options(OptionList *allowed_options)
_("Migrate from current players backend to another (Only works when using minetestserver or with --server)"))));
allowed_options->insert(std::make_pair("migrate-auth", ValueSpec(VALUETYPE_STRING,
_("Migrate from current auth backend to another (Only works when using minetestserver or with --server)"))));
+ allowed_options->insert(std::make_pair("migrate-mod-storage", ValueSpec(VALUETYPE_STRING,
+ _("Migrate from current mod storage backend to another (Only works when using minetestserver or with --server)"))));
allowed_options->insert(std::make_pair("terminal", ValueSpec(VALUETYPE_FLAG,
_("Feature an interactive terminal (Only works when using minetestserver or with --server)"))));
+ allowed_options->insert(std::make_pair("recompress", ValueSpec(VALUETYPE_FLAG,
+ _("Recompress the blocks of the given map database."))));
#ifndef SERVER
- allowed_options->insert(std::make_pair("videomodes", ValueSpec(VALUETYPE_FLAG,
- _("Show available video modes"))));
allowed_options->insert(std::make_pair("speedtests", ValueSpec(VALUETYPE_FLAG,
_("Run speed tests"))));
allowed_options->insert(std::make_pair("address", ValueSpec(VALUETYPE_STRING,
@@ -489,13 +488,14 @@ static bool init_common(const Settings &cmd_args, int argc, char *argv[])
startup_message();
set_default_settings();
- // Initialize sockets
sockets_init();
- atexit(sockets_cleanup);
// Initialize g_settings
Settings::createLayer(SL_GLOBAL);
+ // Set cleanup callback(s) to run at process exit
+ atexit(uninit_common);
+
if (!read_config_file(cmd_args))
return false;
@@ -514,6 +514,17 @@ static bool init_common(const Settings &cmd_args, int argc, char *argv[])
return true;
}
+static void uninit_common()
+{
+ httpfetch_cleanup();
+
+ sockets_cleanup();
+
+ // It'd actually be okay to leak these but we want to please valgrind...
+ for (int i = 0; i < (int)SL_TOTAL_COUNT; i++)
+ delete Settings::getLayer((SettingsLayer)i);
+}
+
static void startup_message()
{
infostream << PROJECT_NAME << " " << _("with")
@@ -867,7 +878,7 @@ static bool run_dedicated_server(const GameParams &game_params, const Settings &
return false;
}
- // Database migration
+ // Database migration/compression
if (cmd_args.exists("migrate"))
return migrate_map_database(game_params, cmd_args);
@@ -877,6 +888,12 @@ static bool run_dedicated_server(const GameParams &game_params, const Settings &
if (cmd_args.exists("migrate-auth"))
return ServerEnvironment::migrateAuthDatabase(game_params, cmd_args);
+ if (cmd_args.exists("migrate-mod-storage"))
+ return Server::migrateModStorageDatabase(game_params, cmd_args);
+
+ if (cmd_args.getFlag("recompress"))
+ return recompress_map_database(game_params, cmd_args, bind_addr);
+
if (cmd_args.exists("terminal")) {
#if USE_CURSES
bool name_ok = true;
@@ -1026,3 +1043,67 @@ static bool migrate_map_database(const GameParams &game_params, const Settings &
return true;
}
+
+static bool recompress_map_database(const GameParams &game_params, const Settings &cmd_args, const Address &addr)
+{
+ Settings world_mt;
+ const std::string world_mt_path = game_params.world_path + DIR_DELIM + "world.mt";
+
+ if (!world_mt.readConfigFile(world_mt_path.c_str())) {
+ errorstream << "Cannot read world.mt at " << world_mt_path << std::endl;
+ return false;
+ }
+ const std::string &backend = world_mt.get("backend");
+ Server server(game_params.world_path, game_params.game_spec, false, addr, false);
+ MapDatabase *db = ServerMap::createDatabase(backend, game_params.world_path, world_mt);
+
+ u32 count = 0;
+ u64 last_update_time = 0;
+ bool &kill = *porting::signal_handler_killstatus();
+ const u8 serialize_as_ver = SER_FMT_VER_HIGHEST_WRITE;
+
+ // This is ok because the server doesn't actually run
+ std::vector<v3s16> blocks;
+ db->listAllLoadableBlocks(blocks);
+ db->beginSave();
+ std::istringstream iss(std::ios_base::binary);
+ std::ostringstream oss(std::ios_base::binary);
+ for (auto it = blocks.begin(); it != blocks.end(); ++it) {
+ if (kill) return false;
+
+ std::string data;
+ db->loadBlock(*it, &data);
+ if (data.empty()) {
+ errorstream << "Failed to load block " << PP(*it) << std::endl;
+ return false;
+ }
+
+ iss.str(data);
+ iss.clear();
+
+ MapBlock mb(nullptr, v3s16(0,0,0), &server);
+ u8 ver = readU8(iss);
+ mb.deSerialize(iss, ver, true);
+
+ oss.str("");
+ oss.clear();
+ writeU8(oss, serialize_as_ver);
+ mb.serialize(oss, serialize_as_ver, true, -1);
+
+ db->saveBlock(*it, oss.str());
+
+ count++;
+ if (count % 0xFF == 0 && porting::getTimeS() - last_update_time >= 1) {
+ std::cerr << " Recompressed " << count << " blocks, "
+ << (100.0f * count / blocks.size()) << "% completed.\r";
+ db->endSave();
+ db->beginSave();
+ last_update_time = porting::getTimeS();
+ }
+ }
+ std::cerr << std::endl;
+ db->endSave();
+
+ actionstream << "Done, " << count << " blocks were recompressed." << std::endl;
+ return true;
+}
diff --git a/src/map.cpp b/src/map.cpp
index 7c59edbaa..a11bbb96a 100644
--- a/src/map.cpp
+++ b/src/map.cpp
@@ -139,13 +139,6 @@ MapBlock * Map::getBlockNoCreate(v3s16 p3d)
return block;
}
-bool Map::isNodeUnderground(v3s16 p)
-{
- v3s16 blockpos = getNodeBlockPos(p);
- MapBlock *block = getBlockNoCreateNoEx(blockpos);
- return block && block->getIsUnderground();
-}
-
bool Map::isValidPosition(v3s16 p)
{
v3s16 blockpos = getNodeBlockPos(p);
@@ -829,7 +822,7 @@ void Map::transformLiquids(std::map<v3s16, MapBlock*> &modified_blocks,
m_transforming_liquid.push_back(iter);
voxalgo::update_lighting_nodes(this, changed_nodes, modified_blocks);
-
+ env->getScriptIface()->on_liquid_transformed(changed_nodes);
/* ----------------------------------------------------------------------
* Manage the queue so that it does not grow indefinately
@@ -1451,11 +1444,7 @@ MapSector *ServerMap::createSector(v2s16 p2d)
/*
Do not create over max mapgen limit
*/
- const s16 max_limit_bp = MAX_MAP_GENERATION_LIMIT / MAP_BLOCKSIZE;
- if (p2d.X < -max_limit_bp ||
- p2d.X > max_limit_bp ||
- p2d.Y < -max_limit_bp ||
- p2d.Y > max_limit_bp)
+ if (blockpos_over_max_limit(v3s16(p2d.X, 0, p2d.Y)))
throw InvalidPositionException("createSector(): pos. over max mapgen limit");
/*
@@ -1464,9 +1453,6 @@ MapSector *ServerMap::createSector(v2s16 p2d)
sector = new MapSector(this, p2d, m_gamedef);
- // Sector position on map in nodes
- //v2s16 nodepos2d = p2d * MAP_BLOCKSIZE;
-
/*
Insert to container
*/
@@ -1549,6 +1535,11 @@ MapBlock *ServerMap::getBlockOrEmerge(v3s16 p3d)
return block;
}
+bool ServerMap::isBlockInQueue(v3s16 pos)
+{
+ return m_emerge && m_emerge->isBlockInQueue(pos);
+}
+
// N.B. This requires no synchronization, since data will not be modified unless
// the VoxelManipulator being updated belongs to the same thread.
void ServerMap::updateVManip(v3s16 pos)
diff --git a/src/map.h b/src/map.h
index e68795c4a..fe580b20f 100644
--- a/src/map.h
+++ b/src/map.h
@@ -167,9 +167,6 @@ public:
inline const NodeDefManager * getNodeDefManager() { return m_nodedef; }
- // Returns InvalidPositionException if not found
- bool isNodeUnderground(v3s16 p);
-
bool isValidPosition(v3s16 p);
// throws InvalidPositionException if not found
@@ -365,6 +362,8 @@ public:
*/
MapBlock *getBlockOrEmerge(v3s16 p3d);
+ bool isBlockInQueue(v3s16 pos);
+
/*
Database functions
*/
diff --git a/src/map_settings_manager.cpp b/src/map_settings_manager.cpp
index 99e3cb0e6..c75483edb 100644
--- a/src/map_settings_manager.cpp
+++ b/src/map_settings_manager.cpp
@@ -26,15 +26,24 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "map_settings_manager.h"
MapSettingsManager::MapSettingsManager(const std::string &map_meta_path):
- m_map_meta_path(map_meta_path)
+ m_map_meta_path(map_meta_path),
+ m_hierarchy(g_settings)
{
- m_map_settings = Settings::createLayer(SL_MAP, "[end_of_params]");
- Mapgen::setDefaultSettings(Settings::getLayer(SL_DEFAULTS));
+ /*
+ * We build our own hierarchy which falls back to the global one.
+ * It looks as follows: (lowest prio first)
+ * 0: whatever is picked up from g_settings (incl. engine defaults)
+ * 1: defaults set by scripts (override_meta = false)
+ * 2: settings present in map_meta.txt or overriden by scripts
+ */
+ m_defaults = new Settings("", &m_hierarchy, 1);
+ m_map_settings = new Settings("[end_of_params]", &m_hierarchy, 2);
}
MapSettingsManager::~MapSettingsManager()
{
+ delete m_defaults;
delete m_map_settings;
delete mapgen_params;
}
@@ -43,15 +52,7 @@ MapSettingsManager::~MapSettingsManager()
bool MapSettingsManager::getMapSetting(
const std::string &name, std::string *value_out)
{
- // Get from map_meta.txt, then try from all other sources
- if (m_map_settings->getNoEx(name, *value_out))
- return true;
-
- // Compatibility kludge
- if (name == "seed")
- return Settings::getLayer(SL_GLOBAL)->getNoEx("fixed_map_seed", *value_out);
-
- return false;
+ return m_map_settings->getNoEx(name, *value_out);
}
@@ -72,7 +73,7 @@ bool MapSettingsManager::setMapSetting(
if (override_meta)
m_map_settings->set(name, value);
else
- Settings::getLayer(SL_GLOBAL)->set(name, value);
+ m_defaults->set(name, value);
return true;
}
@@ -87,7 +88,7 @@ bool MapSettingsManager::setMapSettingNoiseParams(
if (override_meta)
m_map_settings->setNoiseParams(name, *value);
else
- Settings::getLayer(SL_GLOBAL)->setNoiseParams(name, *value);
+ m_defaults->setNoiseParams(name, *value);
return true;
}
@@ -146,15 +147,8 @@ MapgenParams *MapSettingsManager::makeMapgenParams()
if (mapgen_params)
return mapgen_params;
- assert(m_map_settings != NULL);
-
- // At this point, we have (in order of precedence):
- // 1). SL_MAP containing map_meta.txt settings or
- // explicit overrides from scripts
- // 2). SL_GLOBAL containing all user-specified config file
- // settings
- // 3). SL_DEFAULTS containing any low-priority settings from
- // scripts, e.g. mods using Lua as an enhanced config file)
+ assert(m_map_settings);
+ assert(m_defaults);
// Now, get the mapgen type so we can create the appropriate MapgenParams
std::string mg_name;
diff --git a/src/map_settings_manager.h b/src/map_settings_manager.h
index 9258d3032..fa271268d 100644
--- a/src/map_settings_manager.h
+++ b/src/map_settings_manager.h
@@ -20,8 +20,8 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#pragma once
#include <string>
+#include "settings.h"
-class Settings;
struct NoiseParams;
struct MapgenParams;
@@ -70,6 +70,8 @@ public:
private:
std::string m_map_meta_path;
- // TODO: Rename to "m_settings"
+
+ SettingsHierarchy m_hierarchy;
+ Settings *m_defaults;
Settings *m_map_settings;
};
diff --git a/src/mapblock.cpp b/src/mapblock.cpp
index 0ca71e643..e3a6caa19 100644
--- a/src/mapblock.cpp
+++ b/src/mapblock.cpp
@@ -218,31 +218,6 @@ void MapBlock::expireDayNightDiff()
m_day_night_differs_expired = true;
}
-s16 MapBlock::getGroundLevel(v2s16 p2d)
-{
- if(isDummy())
- return -3;
- try
- {
- s16 y = MAP_BLOCKSIZE-1;
- for(; y>=0; y--)
- {
- MapNode n = getNodeRef(p2d.X, y, p2d.Y);
- if (m_gamedef->ndef()->get(n).walkable) {
- if(y == MAP_BLOCKSIZE-1)
- return -2;
-
- return y;
- }
- }
- return -1;
- }
- catch(InvalidPositionException &e)
- {
- return -3;
- }
-}
-
/*
Serialization
*/
@@ -355,7 +330,7 @@ static void correctBlockNodeIds(const NameIdMapping *nimap, MapNode *nodes,
}
}
-void MapBlock::serialize(std::ostream &os, u8 version, bool disk, int compression_level)
+void MapBlock::serialize(std::ostream &os_compressed, u8 version, bool disk, int compression_level)
{
if(!ser_ver_supported(version))
throw VersionMismatchException("ERROR: MapBlock format not supported");
@@ -365,6 +340,9 @@ void MapBlock::serialize(std::ostream &os, u8 version, bool disk, int compressio
FATAL_ERROR_IF(version < SER_FMT_VER_LOWEST_WRITE, "Serialisation version error");
+ std::ostringstream os_raw(std::ios_base::binary);
+ std::ostream &os = version >= 29 ? os_raw : os_compressed;
+
// First byte
u8 flags = 0;
if(is_underground)
@@ -382,37 +360,52 @@ void MapBlock::serialize(std::ostream &os, u8 version, bool disk, int compressio
Bulk node data
*/
NameIdMapping nimap;
- if(disk)
+ SharedBuffer<u8> buf;
+ const u8 content_width = 2;
+ const u8 params_width = 2;
+ if(disk)
{
MapNode *tmp_nodes = new MapNode[nodecount];
- for(u32 i=0; i<nodecount; i++)
- tmp_nodes[i] = data[i];
+ memcpy(tmp_nodes, data, nodecount * sizeof(MapNode));
getBlockNodeIdMapping(&nimap, tmp_nodes, m_gamedef->ndef());
- u8 content_width = 2;
- u8 params_width = 2;
- writeU8(os, content_width);
- writeU8(os, params_width);
- MapNode::serializeBulk(os, version, tmp_nodes, nodecount,
- content_width, params_width, compression_level);
+ buf = MapNode::serializeBulk(version, tmp_nodes, nodecount,
+ content_width, params_width);
delete[] tmp_nodes;
+
+ // write timestamp and node/id mapping first
+ if (version >= 29) {
+ writeU32(os, getTimestamp());
+
+ nimap.serialize(os);
+ }
}
else
{
- u8 content_width = 2;
- u8 params_width = 2;
- writeU8(os, content_width);
- writeU8(os, params_width);
- MapNode::serializeBulk(os, version, data, nodecount,
- content_width, params_width, compression_level);
+ buf = MapNode::serializeBulk(version, data, nodecount,
+ content_width, params_width);
+ }
+
+ writeU8(os, content_width);
+ writeU8(os, params_width);
+ if (version >= 29) {
+ os.write(reinterpret_cast<char*>(*buf), buf.getSize());
+ } else {
+ // prior to 29 node data was compressed individually
+ compress(buf, os, version, compression_level);
}
/*
Node metadata
*/
- std::ostringstream oss(std::ios_base::binary);
- m_node_metadata.serialize(oss, version, disk);
- compressZlib(oss.str(), os, compression_level);
+ if (version >= 29) {
+ m_node_metadata.serialize(os, version, disk);
+ } else {
+ // use os_raw from above to avoid allocating another stream object
+ m_node_metadata.serialize(os_raw, version, disk);
+ // prior to 29 node data was compressed individually
+ compress(os_raw.str(), os, version, compression_level);
+ }
/*
Data that goes to disk, but not the network
@@ -427,17 +420,24 @@ void MapBlock::serialize(std::ostream &os, u8 version, bool disk, int compressio
// Static objects
m_static_objects.serialize(os);
- // Timestamp
- writeU32(os, getTimestamp());
+ if(version < 29){
+ // Timestamp
+ writeU32(os, getTimestamp());
- // Write block-specific node definition id mapping
- nimap.serialize(os);
+ // Write block-specific node definition id mapping
+ nimap.serialize(os);
+ }
if(version >= 25){
// Node timers
m_node_timers.serialize(os, version);
}
}
+
+ if (version >= 29) {
+ // now compress the whole thing
+ compress(os_raw.str(), os_compressed, version, compression_level);
+ }
}
void MapBlock::serializeNetworkSpecific(std::ostream &os)
@@ -449,7 +449,7 @@ void MapBlock::serializeNetworkSpecific(std::ostream &os)
writeU8(os, 2); // version
}
-void MapBlock::deSerialize(std::istream &is, u8 version, bool disk)
+void MapBlock::deSerialize(std::istream &in_compressed, u8 version, bool disk)
{
if(!ser_ver_supported(version))
throw VersionMismatchException("ERROR: MapBlock format not supported");
@@ -460,10 +460,16 @@ void MapBlock::deSerialize(std::istream &is, u8 version, bool disk)
if(version <= 21)
{
- deSerialize_pre22(is, version, disk);
+ deSerialize_pre22(in_compressed, version, disk);
return;
}
+ // Decompress the whole block (version >= 29)
+ std::stringstream in_raw(std::ios_base::binary | std::ios_base::in | std::ios_base::out);
+ if (version >= 29)
+ decompress(in_compressed, in_raw, version);
+ std::istream &is = version >= 29 ? in_raw : in_compressed;
+
u8 flags = readU8(is);
is_underground = (flags & 0x01) != 0;
m_day_night_differs = (flags & 0x02) != 0;
@@ -473,9 +479,20 @@ void MapBlock::deSerialize(std::istream &is, u8 version, bool disk)
m_lighting_complete = readU16(is);
m_generated = (flags & 0x08) == 0;
- /*
- Bulk node data
- */
+ NameIdMapping nimap;
+ if (disk && version >= 29) {
+ // Timestamp
+ TRACESTREAM(<<"MapBlock::deSerialize "<<PP(getPos())
+ <<": Timestamp"<<std::endl);
+ setTimestampNoChangedFlag(readU32(is));
+ m_disk_timestamp = m_timestamp;
+
+ // Node/id mapping
+ TRACESTREAM(<<"MapBlock::deSerialize "<<PP(getPos())
+ <<": NameIdMapping"<<std::endl);
+ nimap.deSerialize(is);
+ }
+
TRACESTREAM(<<"MapBlock::deSerialize "<<PP(getPos())
<<": Bulk node data"<<std::endl);
u8 content_width = readU8(is);
@@ -484,29 +501,44 @@ void MapBlock::deSerialize(std::istream &is, u8 version, bool disk)
throw SerializationError("MapBlock::deSerialize(): invalid content_width");
if(params_width != 2)
throw SerializationError("MapBlock::deSerialize(): invalid params_width");
- MapNode::deSerializeBulk(is, version, data, nodecount,
+
+ /*
+ Bulk node data
+ */
+ if (version >= 29) {
+ MapNode::deSerializeBulk(is, version, data, nodecount,
+ content_width, params_width);
+ } else {
+ // use in_raw from above to avoid allocating another stream object
+ decompress(is, in_raw, version);
+ MapNode::deSerializeBulk(in_raw, version, data, nodecount,
content_width, params_width);
+ }
/*
NodeMetadata
*/
TRACESTREAM(<<"MapBlock::deSerialize "<<PP(getPos())
<<": Node metadata"<<std::endl);
- // Ignore errors
- try {
- std::ostringstream oss(std::ios_base::binary);
- decompressZlib(is, oss);
- std::istringstream iss(oss.str(), std::ios_base::binary);
- 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->idef());
- } catch(SerializationError &e) {
- warningstream<<"MapBlock::deSerialize(): Ignoring an error"
- <<" while deserializing node metadata at ("
- <<PP(getPos())<<": "<<e.what()<<std::endl;
+ if (version >= 29) {
+ m_node_metadata.deSerialize(is, m_gamedef->idef());
+ } else {
+ try {
+ // reuse in_raw
+ in_raw.str("");
+ in_raw.clear();
+ decompress(is, in_raw, version);
+ if (version >= 23)
+ m_node_metadata.deSerialize(in_raw, m_gamedef->idef());
+ else
+ content_nodemeta_deserialize_legacy(in_raw,
+ &m_node_metadata, &m_node_timers,
+ m_gamedef->idef());
+ } catch(SerializationError &e) {
+ warningstream<<"MapBlock::deSerialize(): Ignoring an error"
+ <<" while deserializing node metadata at ("
+ <<PP(getPos())<<": "<<e.what()<<std::endl;
+ }
}
/*
@@ -530,17 +562,20 @@ void MapBlock::deSerialize(std::istream &is, u8 version, bool disk)
<<": Static objects"<<std::endl);
m_static_objects.deSerialize(is);
- // Timestamp
- TRACESTREAM(<<"MapBlock::deSerialize "<<PP(getPos())
- <<": Timestamp"<<std::endl);
- setTimestampNoChangedFlag(readU32(is));
- m_disk_timestamp = m_timestamp;
+ if(version < 29) {
+ // Timestamp
+ TRACESTREAM(<<"MapBlock::deSerialize "<<PP(getPos())
+ <<": Timestamp"<<std::endl);
+ setTimestampNoChangedFlag(readU32(is));
+ m_disk_timestamp = m_timestamp;
+
+ // Node/id mapping
+ TRACESTREAM(<<"MapBlock::deSerialize "<<PP(getPos())
+ <<": NameIdMapping"<<std::endl);
+ nimap.deSerialize(is);
+ }
// Dynamically re-set ids based on node names
- TRACESTREAM(<<"MapBlock::deSerialize "<<PP(getPos())
- <<": NameIdMapping"<<std::endl);
- NameIdMapping nimap;
- nimap.deSerialize(is);
correctBlockNodeIds(&nimap, data, m_gamedef);
if(version >= 25){
diff --git a/src/mapblock.h b/src/mapblock.h
index 7b82301e9..a86db7b70 100644
--- a/src/mapblock.h
+++ b/src/mapblock.h
@@ -140,7 +140,7 @@ public:
//// Flags
////
- inline bool isDummy()
+ inline bool isDummy() const
{
return !data;
}
@@ -364,20 +364,6 @@ public:
}
////
- //// Miscellaneous stuff
- ////
-
- /*
- Tries to measure ground level.
- Return value:
- -1 = only air
- -2 = only ground
- -3 = random fail
- 0...MAP_BLOCKSIZE-1 = ground level
- */
- s16 getGroundLevel(v2s16 p2d);
-
- ////
//// Timestamp (see m_timestamp)
////
@@ -473,7 +459,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_VER_LOWEST_WRITE
- void serialize(std::ostream &os, u8 version, bool disk, int compression_level);
+ void serialize(std::ostream &result, u8 version, bool disk, int compression_level);
// If disk == true: In addition to doing other things, will add
// unknown blocks from id-name mapping to wndef
void deSerialize(std::istream &is, u8 version, bool disk);
@@ -615,7 +601,7 @@ typedef std::vector<MapBlock*> MapBlockVect;
inline bool objectpos_over_limit(v3f p)
{
- const float max_limit_bs = MAX_MAP_GENERATION_LIMIT * BS;
+ const float max_limit_bs = (MAX_MAP_GENERATION_LIMIT + 0.5f) * BS;
return p.X < -max_limit_bs ||
p.X > max_limit_bs ||
p.Y < -max_limit_bs ||
diff --git a/src/mapgen/mapgen.cpp b/src/mapgen/mapgen.cpp
index e0dfd2d71..d767bd264 100644
--- a/src/mapgen/mapgen.cpp
+++ b/src/mapgen/mapgen.cpp
@@ -595,7 +595,8 @@ MapgenBasic::MapgenBasic(int mapgenid, MapgenParams *params, EmergeParams *emerg
this->heightmap = new s16[csize.X * csize.Z];
//// Initialize biome generator
- biomegen = m_bmgr->createBiomeGen(BIOMEGEN_ORIGINAL, params->bparams, csize);
+ biomegen = emerge->biomegen;
+ biomegen->assertChunkSize(csize);
biomemap = biomegen->biomemap;
//// Look up some commonly used content
@@ -621,7 +622,6 @@ MapgenBasic::MapgenBasic(int mapgenid, MapgenParams *params, EmergeParams *emerg
MapgenBasic::~MapgenBasic()
{
- delete biomegen;
delete []heightmap;
delete m_emerge; // destroying EmergeParams is our responsibility
@@ -1018,10 +1018,11 @@ MapgenParams::~MapgenParams()
void MapgenParams::readParams(const Settings *settings)
{
- std::string seed_str;
- const char *seed_name = (settings == g_settings) ? "fixed_map_seed" : "seed";
+ // should always be used via MapSettingsManager
+ assert(settings != g_settings);
- if (settings->getNoEx(seed_name, seed_str)) {
+ std::string seed_str;
+ if (settings->getNoEx("seed", seed_str)) {
if (!seed_str.empty())
seed = read_seed(seed_str.c_str());
else
diff --git a/src/mapgen/mapgen_v6.cpp b/src/mapgen/mapgen_v6.cpp
index bce9cee81..a418acace 100644
--- a/src/mapgen/mapgen_v6.cpp
+++ b/src/mapgen/mapgen_v6.cpp
@@ -360,19 +360,6 @@ int MapgenV6::getSpawnLevelAtPoint(v2s16 p)
//////////////////////// Noise functions
-float MapgenV6::getMudAmount(v2s16 p)
-{
- int index = (p.Y - node_min.Z) * ystride + (p.X - node_min.X);
- return getMudAmount(index);
-}
-
-
-bool MapgenV6::getHaveBeach(v2s16 p)
-{
- int index = (p.Y - node_min.Z) * ystride + (p.X - node_min.X);
- return getHaveBeach(index);
-}
-
BiomeV6Type MapgenV6::getBiome(v2s16 p)
{
diff --git a/src/mapgen/mapgen_v6.h b/src/mapgen/mapgen_v6.h
index a6e6da8c6..b0eb67893 100644
--- a/src/mapgen/mapgen_v6.h
+++ b/src/mapgen/mapgen_v6.h
@@ -154,9 +154,7 @@ public:
float getHumidity(v2s16 p);
float getTreeAmount(v2s16 p);
bool getHaveAppleTree(v2s16 p);
- float getMudAmount(v2s16 p);
- virtual float getMudAmount(int index);
- bool getHaveBeach(v2s16 p);
+ float getMudAmount(int index);
bool getHaveBeach(int index);
BiomeV6Type getBiome(v2s16 p);
BiomeV6Type getBiome(int index, v2s16 p);
diff --git a/src/mapgen/mapgen_valleys.cpp b/src/mapgen/mapgen_valleys.cpp
index c4234857e..80a99b1f0 100644
--- a/src/mapgen/mapgen_valleys.cpp
+++ b/src/mapgen/mapgen_valleys.cpp
@@ -57,7 +57,8 @@ FlagDesc flagdesc_mapgen_valleys[] = {
MapgenValleys::MapgenValleys(MapgenValleysParams *params, EmergeParams *emerge)
: MapgenBasic(MAPGEN_VALLEYS, params, emerge)
{
- // NOTE: MapgenValleys has a hard dependency on BiomeGenOriginal
+ FATAL_ERROR_IF(biomegen->getType() != BIOMEGEN_ORIGINAL,
+ "MapgenValleys has a hard dependency on BiomeGenOriginal");
m_bgen = (BiomeGenOriginal *)biomegen;
spflags = params->spflags;
diff --git a/src/mapgen/mg_biome.cpp b/src/mapgen/mg_biome.cpp
index 610c38594..f08cc190f 100644
--- a/src/mapgen/mg_biome.cpp
+++ b/src/mapgen/mg_biome.cpp
@@ -101,71 +101,6 @@ BiomeManager *BiomeManager::clone() const
return mgr;
}
-
-// For BiomeGen type 'BiomeGenOriginal'
-float BiomeManager::getHeatAtPosOriginal(v3s16 pos, NoiseParams &np_heat,
- NoiseParams &np_heat_blend, u64 seed) const
-{
- return
- NoisePerlin2D(&np_heat, pos.X, pos.Z, seed) +
- NoisePerlin2D(&np_heat_blend, pos.X, pos.Z, seed);
-}
-
-
-// For BiomeGen type 'BiomeGenOriginal'
-float BiomeManager::getHumidityAtPosOriginal(v3s16 pos, NoiseParams &np_humidity,
- NoiseParams &np_humidity_blend, u64 seed) const
-{
- return
- NoisePerlin2D(&np_humidity, pos.X, pos.Z, seed) +
- NoisePerlin2D(&np_humidity_blend, pos.X, pos.Z, seed);
-}
-
-
-// For BiomeGen type 'BiomeGenOriginal'
-const Biome *BiomeManager::getBiomeFromNoiseOriginal(float heat,
- float humidity, v3s16 pos) const
-{
- Biome *biome_closest = nullptr;
- Biome *biome_closest_blend = nullptr;
- float dist_min = FLT_MAX;
- float dist_min_blend = FLT_MAX;
-
- for (size_t i = 1; i < getNumObjects(); i++) {
- Biome *b = (Biome *)getRaw(i);
- if (!b ||
- pos.Y < b->min_pos.Y || pos.Y > b->max_pos.Y + b->vertical_blend ||
- pos.X < b->min_pos.X || pos.X > b->max_pos.X ||
- pos.Z < b->min_pos.Z || pos.Z > b->max_pos.Z)
- continue;
-
- float d_heat = heat - b->heat_point;
- float d_humidity = humidity - b->humidity_point;
- float dist = (d_heat * d_heat) + (d_humidity * d_humidity);
-
- if (pos.Y <= b->max_pos.Y) { // Within y limits of biome b
- if (dist < dist_min) {
- dist_min = dist;
- biome_closest = b;
- }
- } else if (dist < dist_min_blend) { // Blend area above biome b
- dist_min_blend = dist;
- biome_closest_blend = b;
- }
- }
-
- const u64 seed = pos.Y + (heat + humidity) * 0.9f;
- PcgRandom rng(seed);
-
- if (biome_closest_blend && dist_min_blend <= dist_min &&
- rng.range(0, biome_closest_blend->vertical_blend) >=
- pos.Y - biome_closest_blend->max_pos.Y)
- return biome_closest_blend;
-
- return (biome_closest) ? biome_closest : (Biome *)getRaw(BIOME_NONE);
-}
-
-
////////////////////////////////////////////////////////////////////////////////
void BiomeParamsOriginal::readParams(const Settings *settings)
@@ -189,7 +124,7 @@ void BiomeParamsOriginal::writeParams(Settings *settings) const
////////////////////////////////////////////////////////////////////////////////
BiomeGenOriginal::BiomeGenOriginal(BiomeManager *biomemgr,
- BiomeParamsOriginal *params, v3s16 chunksize)
+ const BiomeParamsOriginal *params, v3s16 chunksize)
{
m_bmgr = biomemgr;
m_params = params;
@@ -224,17 +159,26 @@ BiomeGenOriginal::~BiomeGenOriginal()
delete noise_humidity_blend;
}
-// Only usable in a mapgen thread
-Biome *BiomeGenOriginal::calcBiomeAtPoint(v3s16 pos) const
+BiomeGen *BiomeGenOriginal::clone(BiomeManager *biomemgr) const
+{
+ return new BiomeGenOriginal(biomemgr, m_params, m_csize);
+}
+
+float BiomeGenOriginal::calcHeatAtPoint(v3s16 pos) const
{
- float heat =
- NoisePerlin2D(&m_params->np_heat, pos.X, pos.Z, m_params->seed) +
+ return NoisePerlin2D(&m_params->np_heat, pos.X, pos.Z, m_params->seed) +
NoisePerlin2D(&m_params->np_heat_blend, pos.X, pos.Z, m_params->seed);
- float humidity =
- NoisePerlin2D(&m_params->np_humidity, pos.X, pos.Z, m_params->seed) +
+}
+
+float BiomeGenOriginal::calcHumidityAtPoint(v3s16 pos) const
+{
+ return NoisePerlin2D(&m_params->np_humidity, pos.X, pos.Z, m_params->seed) +
NoisePerlin2D(&m_params->np_humidity_blend, pos.X, pos.Z, m_params->seed);
+}
- return calcBiomeFromNoise(heat, humidity, pos);
+Biome *BiomeGenOriginal::calcBiomeAtPoint(v3s16 pos) const
+{
+ return calcBiomeFromNoise(calcHeatAtPoint(pos), calcHumidityAtPoint(pos), pos);
}
diff --git a/src/mapgen/mg_biome.h b/src/mapgen/mg_biome.h
index be4cfea4d..c85afc3a0 100644
--- a/src/mapgen/mg_biome.h
+++ b/src/mapgen/mg_biome.h
@@ -97,6 +97,15 @@ public:
virtual BiomeGenType getType() const = 0;
+ // Clone this BiomeGen and set a the new BiomeManager to be used by the copy
+ virtual BiomeGen *clone(BiomeManager *biomemgr) const = 0;
+
+ // Check that the internal chunk size is what the mapgen expects, just to be sure.
+ inline void assertChunkSize(v3s16 expect) const
+ {
+ FATAL_ERROR_IF(m_csize != expect, "Chunk size mismatches");
+ }
+
// Calculates the biome at the exact position provided. This function can
// be called at any time, but may be less efficient than the latter methods,
// depending on implementation.
@@ -158,12 +167,18 @@ struct BiomeParamsOriginal : public BiomeParams {
class BiomeGenOriginal : public BiomeGen {
public:
BiomeGenOriginal(BiomeManager *biomemgr,
- BiomeParamsOriginal *params, v3s16 chunksize);
+ const BiomeParamsOriginal *params, v3s16 chunksize);
virtual ~BiomeGenOriginal();
BiomeGenType getType() const { return BIOMEGEN_ORIGINAL; }
+ BiomeGen *clone(BiomeManager *biomemgr) const;
+
+ // Slower, meant for Script API use
+ float calcHeatAtPoint(v3s16 pos) const;
+ float calcHumidityAtPoint(v3s16 pos) const;
Biome *calcBiomeAtPoint(v3s16 pos) const;
+
void calcBiomeNoise(v3s16 pmin);
biome_t *getBiomes(s16 *heightmap, v3s16 pmin);
@@ -176,7 +191,7 @@ public:
float *humidmap;
private:
- BiomeParamsOriginal *m_params;
+ const BiomeParamsOriginal *m_params;
Noise *noise_heat;
Noise *noise_humidity;
@@ -229,14 +244,6 @@ public:
virtual void clear();
- // For BiomeGen type 'BiomeGenOriginal'
- float getHeatAtPosOriginal(v3s16 pos, NoiseParams &np_heat,
- NoiseParams &np_heat_blend, u64 seed) const;
- float getHumidityAtPosOriginal(v3s16 pos, NoiseParams &np_humidity,
- NoiseParams &np_humidity_blend, u64 seed) const;
- const Biome *getBiomeFromNoiseOriginal(float heat, float humidity,
- v3s16 pos) const;
-
private:
BiomeManager() {};
diff --git a/src/mapgen/mg_ore.h b/src/mapgen/mg_ore.h
index a58fa9bfe..a757fa6d0 100644
--- a/src/mapgen/mg_ore.h
+++ b/src/mapgen/mg_ore.h
@@ -85,7 +85,7 @@ class OreScatter : public Ore {
public:
OreScatter() : Ore(false) {}
- ObjDef *clone() const;
+ ObjDef *clone() const override;
void generate(MMVManip *vm, int mapseed, u32 blockseed,
v3s16 nmin, v3s16 nmax, biome_t *biomemap) override;
@@ -95,7 +95,7 @@ class OreSheet : public Ore {
public:
OreSheet() : Ore(true) {}
- ObjDef *clone() const;
+ ObjDef *clone() const override;
u16 column_height_min;
u16 column_height_max;
@@ -107,7 +107,7 @@ public:
class OrePuff : public Ore {
public:
- ObjDef *clone() const;
+ ObjDef *clone() const override;
NoiseParams np_puff_top;
NoiseParams np_puff_bottom;
@@ -123,7 +123,7 @@ public:
class OreBlob : public Ore {
public:
- ObjDef *clone() const;
+ ObjDef *clone() const override;
OreBlob() : Ore(true) {}
void generate(MMVManip *vm, int mapseed, u32 blockseed,
@@ -132,7 +132,7 @@ public:
class OreVein : public Ore {
public:
- ObjDef *clone() const;
+ ObjDef *clone() const override;
float random_factor;
Noise *noise2 = nullptr;
@@ -147,7 +147,7 @@ public:
class OreStratum : public Ore {
public:
- ObjDef *clone() const;
+ ObjDef *clone() const override;
NoiseParams np_stratum_thickness;
Noise *noise_stratum_thickness = nullptr;
diff --git a/src/mapgen/mg_schematic.cpp b/src/mapgen/mg_schematic.cpp
index e70e97e48..b9ba70302 100644
--- a/src/mapgen/mg_schematic.cpp
+++ b/src/mapgen/mg_schematic.cpp
@@ -76,10 +76,6 @@ void SchematicManager::clear()
///////////////////////////////////////////////////////////////////////////////
-Schematic::Schematic()
-= default;
-
-
Schematic::~Schematic()
{
delete []schemdata;
@@ -108,13 +104,19 @@ ObjDef *Schematic::clone() const
void Schematic::resolveNodeNames()
{
+ c_nodes.clear();
getIdsFromNrBacklog(&c_nodes, true, CONTENT_AIR);
size_t bufsize = size.X * size.Y * size.Z;
for (size_t i = 0; i != bufsize; i++) {
content_t c_original = schemdata[i].getContent();
- content_t c_new = c_nodes[c_original];
- schemdata[i].setContent(c_new);
+ if (c_original >= c_nodes.size()) {
+ errorstream << "Corrupt schematic. name=\"" << name
+ << "\" at index " << i << std::endl;
+ c_original = 0;
+ }
+ // Unfold condensed ID layout to content_t
+ schemdata[i].setContent(c_nodes[c_original]);
}
}
@@ -279,8 +281,7 @@ void Schematic::placeOnMap(ServerMap *map, v3s16 p, u32 flags,
}
-bool Schematic::deserializeFromMts(std::istream *is,
- std::vector<std::string> *names)
+bool Schematic::deserializeFromMts(std::istream *is)
{
std::istream &ss = *is;
content_t cignore = CONTENT_IGNORE;
@@ -312,6 +313,8 @@ bool Schematic::deserializeFromMts(std::istream *is,
slice_probs[y] = (version >= 3) ? readU8(ss) : MTSCHEM_PROB_ALWAYS_OLD;
//// Read node names
+ NodeResolver::reset();
+
u16 nidmapcount = readU16(ss);
for (int i = 0; i != nidmapcount; i++) {
std::string name = deSerializeString16(ss);
@@ -324,16 +327,21 @@ bool Schematic::deserializeFromMts(std::istream *is,
have_cignore = true;
}
- names->push_back(name);
+ m_nodenames.push_back(name);
}
+ // Prepare for node resolver
+ m_nnlistsizes.push_back(m_nodenames.size());
+
//// Read node data
size_t nodecount = size.X * size.Y * size.Z;
delete []schemdata;
schemdata = new MapNode[nodecount];
- MapNode::deSerializeBulk(ss, SER_FMT_VER_HIGHEST_READ, schemdata,
+ std::stringstream d_ss(std::ios_base::binary | std::ios_base::in | std::ios_base::out);
+ decompress(ss, d_ss, MTSCHEM_MAPNODE_SER_FMT_VER);
+ MapNode::deSerializeBulk(d_ss, MTSCHEM_MAPNODE_SER_FMT_VER, schemdata,
nodecount, 2, 2);
// Fix probability values for nodes that were ignore; removed in v2
@@ -358,9 +366,11 @@ bool Schematic::deserializeFromMts(std::istream *is,
}
-bool Schematic::serializeToMts(std::ostream *os,
- const std::vector<std::string> &names) const
+bool Schematic::serializeToMts(std::ostream *os) const
{
+ // Nodes must not be resolved (-> condensed)
+ // checking here is not possible because "schemdata" might be temporary.
+
std::ostream &ss = *os;
writeU32(ss, MTSCHEM_FILE_SIGNATURE); // signature
@@ -370,20 +380,21 @@ bool Schematic::serializeToMts(std::ostream *os,
for (int y = 0; y != size.Y; y++) // Y slice probabilities
writeU8(ss, slice_probs[y]);
- writeU16(ss, names.size()); // name count
- for (size_t i = 0; i != names.size(); i++)
- ss << serializeString16(names[i]); // node names
+ writeU16(ss, m_nodenames.size()); // name count
+ for (size_t i = 0; i != m_nodenames.size(); i++) {
+ ss << serializeString16(m_nodenames[i]); // node names
+ }
// compressed bulk node data
- MapNode::serializeBulk(ss, SER_FMT_VER_HIGHEST_WRITE,
- schemdata, size.X * size.Y * size.Z, 2, 2, -1);
+ SharedBuffer<u8> buf = MapNode::serializeBulk(MTSCHEM_MAPNODE_SER_FMT_VER,
+ schemdata, size.X * size.Y * size.Z, 2, 2);
+ compress(buf, ss, MTSCHEM_MAPNODE_SER_FMT_VER);
return true;
}
-bool Schematic::serializeToLua(std::ostream *os,
- const std::vector<std::string> &names, bool use_comments,
+bool Schematic::serializeToLua(std::ostream *os, bool use_comments,
u32 indent_spaces) const
{
std::ostream &ss = *os;
@@ -392,6 +403,9 @@ bool Schematic::serializeToLua(std::ostream *os,
if (indent_spaces > 0)
indent.assign(indent_spaces, ' ');
+ bool resolve_done = isResolveDone();
+ FATAL_ERROR_IF(resolve_done && !m_ndef, "serializeToLua: NodeDefManager is required");
+
//// Write header
{
ss << "schematic = {" << std::endl;
@@ -436,9 +450,22 @@ bool Schematic::serializeToLua(std::ostream *os,
u8 probability = schemdata[i].param1 & MTSCHEM_PROB_MASK;
bool force_place = schemdata[i].param1 & MTSCHEM_FORCE_PLACE;
- ss << indent << indent << "{"
- << "name=\"" << names[schemdata[i].getContent()]
- << "\", prob=" << (u16)probability * 2
+ // After node resolving: real content_t, lookup using NodeDefManager
+ // Prior node resolving: condensed ID, lookup using m_nodenames
+ content_t c = schemdata[i].getContent();
+
+ ss << indent << indent << "{" << "name=\"";
+
+ if (!resolve_done) {
+ // Prior node resolving (eg. direct schematic load)
+ FATAL_ERROR_IF(c >= m_nodenames.size(), "Invalid node list");
+ ss << m_nodenames[c];
+ } else {
+ // After node resolving (eg. biome decoration)
+ ss << m_ndef->get(c).name;
+ }
+
+ ss << "\", prob=" << (u16)probability * 2
<< ", param2=" << (u16)schemdata[i].param2;
if (force_place)
@@ -467,25 +494,24 @@ bool Schematic::loadSchematicFromFile(const std::string &filename,
return false;
}
- size_t origsize = m_nodenames.size();
- if (!deserializeFromMts(&is, &m_nodenames))
- return false;
+ if (!m_ndef)
+ m_ndef = ndef;
- m_nnlistsizes.push_back(m_nodenames.size() - origsize);
+ if (!deserializeFromMts(&is))
+ return false;
name = filename;
if (replace_names) {
- for (size_t i = origsize; i < m_nodenames.size(); i++) {
- std::string &node_name = m_nodenames[i];
+ for (std::string &node_name : m_nodenames) {
StringMap::iterator it = replace_names->find(node_name);
if (it != replace_names->end())
node_name = it->second;
}
}
- if (ndef)
- ndef->pendNodeResolve(this);
+ if (m_ndef)
+ m_ndef->pendNodeResolve(this);
return true;
}
@@ -494,33 +520,26 @@ bool Schematic::loadSchematicFromFile(const std::string &filename,
bool Schematic::saveSchematicToFile(const std::string &filename,
const NodeDefManager *ndef)
{
- MapNode *orig_schemdata = schemdata;
- std::vector<std::string> ndef_nodenames;
- std::vector<std::string> *names;
+ Schematic *schem = this;
- if (m_resolve_done && ndef == NULL)
- ndef = m_ndef;
+ bool needs_condense = isResolveDone();
- if (ndef) {
- names = &ndef_nodenames;
+ if (!m_ndef)
+ m_ndef = ndef;
- u32 volume = size.X * size.Y * size.Z;
- schemdata = new MapNode[volume];
- for (u32 i = 0; i != volume; i++)
- schemdata[i] = orig_schemdata[i];
+ if (needs_condense) {
+ if (!m_ndef)
+ return false;
- generate_nodelist_and_update_ids(schemdata, volume, names, ndef);
- } else { // otherwise, use the names we have on hand in the list
- names = &m_nodenames;
+ schem = (Schematic *)this->clone();
+ schem->condenseContentIds();
}
std::ostringstream os(std::ios_base::binary);
- bool status = serializeToMts(&os, *names);
+ bool status = schem->serializeToMts(&os);
- if (ndef) {
- delete []schemdata;
- schemdata = orig_schemdata;
- }
+ if (needs_condense)
+ delete schem;
if (!status)
return false;
@@ -556,6 +575,10 @@ bool Schematic::getSchematicFromMap(Map *map, v3s16 p1, v3s16 p2)
}
delete vm;
+
+ // Reset and mark as complete
+ NodeResolver::reset(true);
+
return true;
}
@@ -578,32 +601,36 @@ void Schematic::applyProbabilities(v3s16 p0,
}
for (size_t i = 0; i != splist->size(); i++) {
- s16 y = (*splist)[i].first - p0.Y;
- slice_probs[y] = (*splist)[i].second;
+ s16 slice = (*splist)[i].first;
+ if (slice < size.Y)
+ slice_probs[slice] = (*splist)[i].second;
}
}
-void generate_nodelist_and_update_ids(MapNode *nodes, size_t nodecount,
- std::vector<std::string> *usednodes, const NodeDefManager *ndef)
+void Schematic::condenseContentIds()
{
std::unordered_map<content_t, content_t> nodeidmap;
content_t numids = 0;
+ // Reset node resolve fields
+ NodeResolver::reset();
+
+ size_t nodecount = size.X * size.Y * size.Z;
for (size_t i = 0; i != nodecount; i++) {
content_t id;
- content_t c = nodes[i].getContent();
+ content_t c = schemdata[i].getContent();
- std::unordered_map<content_t, content_t>::const_iterator it = nodeidmap.find(c);
+ auto it = nodeidmap.find(c);
if (it == nodeidmap.end()) {
id = numids;
numids++;
- usednodes->push_back(ndef->get(c).name);
- nodeidmap.insert(std::make_pair(c, id));
+ m_nodenames.push_back(m_ndef->get(c).name);
+ nodeidmap.emplace(std::make_pair(c, id));
} else {
id = it->second;
}
- nodes[i].setContent(id);
+ schemdata[i].setContent(id);
}
}
diff --git a/src/mapgen/mg_schematic.h b/src/mapgen/mg_schematic.h
index 6b31251b6..9189bb3a7 100644
--- a/src/mapgen/mg_schematic.h
+++ b/src/mapgen/mg_schematic.h
@@ -70,6 +70,7 @@ class Server;
#define MTSCHEM_FILE_SIGNATURE 0x4d54534d // 'MTSM'
#define MTSCHEM_FILE_VER_HIGHEST_READ 4
#define MTSCHEM_FILE_VER_HIGHEST_WRITE 4
+#define MTSCHEM_MAPNODE_SER_FMT_VER 28 // Fixed serialization version for schematics since these still need to use Zlib
#define MTSCHEM_PROB_MASK 0x7F
@@ -92,7 +93,7 @@ enum SchematicFormatType {
class Schematic : public ObjDef, public NodeResolver {
public:
- Schematic();
+ Schematic() = default;
virtual ~Schematic();
ObjDef *clone() const;
@@ -105,11 +106,9 @@ public:
const NodeDefManager *ndef);
bool getSchematicFromMap(Map *map, v3s16 p1, v3s16 p2);
- bool deserializeFromMts(std::istream *is, std::vector<std::string> *names);
- bool serializeToMts(std::ostream *os,
- const std::vector<std::string> &names) const;
- bool serializeToLua(std::ostream *os, const std::vector<std::string> &names,
- bool use_comments, u32 indent_spaces) const;
+ bool deserializeFromMts(std::istream *is);
+ bool serializeToMts(std::ostream *os) const;
+ bool serializeToLua(std::ostream *os, bool use_comments, u32 indent_spaces) const;
void blitToVManip(MMVManip *vm, v3s16 p, Rotation rot, bool force_place);
bool placeOnVManip(MMVManip *vm, v3s16 p, u32 flags, Rotation rot, bool force_place);
@@ -124,6 +123,10 @@ public:
v3s16 size;
MapNode *schemdata = nullptr;
u8 *slice_probs = nullptr;
+
+private:
+ // Counterpart to the node resolver: Condense content_t to a sequential "m_nodenames" list
+ void condenseContentIds();
};
class SchematicManager : public ObjDefManager {
@@ -151,5 +154,3 @@ private:
Server *m_server;
};
-void generate_nodelist_and_update_ids(MapNode *nodes, size_t nodecount,
- std::vector<std::string> *usednodes, const NodeDefManager *ndef);
diff --git a/src/mapnode.cpp b/src/mapnode.cpp
index 0551f3b6f..73bd620fb 100644
--- a/src/mapnode.cpp
+++ b/src/mapnode.cpp
@@ -159,8 +159,13 @@ u8 MapNode::getWallMounted(const NodeDefManager *nodemgr) const
{
const ContentFeatures &f = nodemgr->get(*this);
if (f.param_type_2 == CPT2_WALLMOUNTED ||
- f.param_type_2 == CPT2_COLORED_WALLMOUNTED)
+ f.param_type_2 == CPT2_COLORED_WALLMOUNTED) {
return getParam2() & 0x07;
+ } else if (f.drawtype == NDT_SIGNLIKE || f.drawtype == NDT_TORCHLIKE ||
+ f.drawtype == NDT_PLANTLIKE ||
+ f.drawtype == NDT_PLANTLIKE_ROOTED) {
+ return 1;
+ }
return 0;
}
@@ -177,6 +182,16 @@ v3s16 MapNode::getWallMountedDir(const NodeDefManager *nodemgr) const
}
}
+u8 MapNode::getDegRotate(const NodeDefManager *nodemgr) const
+{
+ const ContentFeatures &f = nodemgr->get(*this);
+ if (f.param_type_2 == CPT2_DEGROTATE)
+ return getParam2() % 240;
+ if (f.param_type_2 == CPT2_COLORED_DEGROTATE)
+ return 10 * ((getParam2() & 0x1F) % 24);
+ return 0;
+}
+
void MapNode::rotateAlongYAxis(const NodeDefManager *nodemgr, Rotation rot)
{
ContentParamType2 cpt2 = nodemgr->get(*this).param_type_2;
@@ -230,6 +245,17 @@ void MapNode::rotateAlongYAxis(const NodeDefManager *nodemgr, Rotation rot)
Rotation oldrot = wallmounted_to_rot[wmountface - 2];
param2 &= ~7;
param2 |= rot_to_wallmounted[(oldrot - rot) & 3];
+ } else if (cpt2 == CPT2_DEGROTATE) {
+ int angle = param2; // in 1.5°
+ angle += 60 * rot; // don’t do that on u8
+ angle %= 240;
+ param2 = angle;
+ } else if (cpt2 == CPT2_COLORED_DEGROTATE) {
+ int angle = param2 & 0x1F; // in 15°
+ int color = param2 & 0xE0;
+ angle += 6 * rot;
+ angle %= 24;
+ param2 = color | angle;
}
}
@@ -704,9 +730,10 @@ void MapNode::deSerialize(u8 *source, u8 version)
}
}
}
-void MapNode::serializeBulk(std::ostream &os, int version,
+
+SharedBuffer<u8> MapNode::serializeBulk(int version,
const MapNode *nodes, u32 nodecount,
- u8 content_width, u8 params_width, int compression_level)
+ u8 content_width, u8 params_width)
{
if (!ser_ver_supported(version))
throw VersionMismatchException("ERROR: MapNode format not supported");
@@ -720,8 +747,7 @@ void MapNode::serializeBulk(std::ostream &os, int version,
throw SerializationError("MapNode::serializeBulk: serialization to "
"version < 24 not possible");
- size_t databuf_size = nodecount * (content_width + params_width);
- u8 *databuf = new u8[databuf_size];
+ SharedBuffer<u8> databuf(nodecount * (content_width + params_width));
u32 start1 = content_width * nodecount;
u32 start2 = (content_width + 1) * nodecount;
@@ -732,14 +758,7 @@ void MapNode::serializeBulk(std::ostream &os, int version,
writeU8(&databuf[start1 + i], nodes[i].param1);
writeU8(&databuf[start2 + i], nodes[i].param2);
}
-
- /*
- Compress data to output stream
- */
-
- compressZlib(databuf, databuf_size, os, compression_level);
-
- delete [] databuf;
+ return databuf;
}
// Deserialize bulk node data
@@ -755,15 +774,10 @@ void MapNode::deSerializeBulk(std::istream &is, int version,
|| params_width != 2)
FATAL_ERROR("Deserialize bulk node data error");
- // Uncompress or read data
- u32 len = nodecount * (content_width + params_width);
- std::ostringstream os(std::ios_base::binary);
- decompressZlib(is, os);
- std::string s = os.str();
- if(s.size() != len)
- throw SerializationError("deSerializeBulkNodes: "
- "decompress resulted in invalid size");
- const u8 *databuf = reinterpret_cast<const u8*>(s.c_str());
+ // read data
+ const u32 len = nodecount * (content_width + params_width);
+ Buffer<u8> databuf(len);
+ is.read(reinterpret_cast<char*>(*databuf), len);
// Deserialize content
if(content_width == 1)
diff --git a/src/mapnode.h b/src/mapnode.h
index a9ae63ba3..afd3a96be 100644
--- a/src/mapnode.h
+++ b/src/mapnode.h
@@ -21,6 +21,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "irrlichttypes_bloated.h"
#include "light.h"
+#include "util/pointer.h"
#include <string>
#include <vector>
@@ -240,6 +241,9 @@ struct MapNode
u8 getWallMounted(const NodeDefManager *nodemgr) const;
v3s16 getWallMountedDir(const NodeDefManager *nodemgr) const;
+ /// @returns Rotation in range 0–239 (in 1.5° steps)
+ u8 getDegRotate(const NodeDefManager *nodemgr) const;
+
void rotateAlongYAxis(const NodeDefManager *nodemgr, Rotation rot);
/*!
@@ -290,9 +294,9 @@ struct MapNode
// content_width = the number of bytes of content per node
// params_width = the number of bytes of params per node
// compressed = true to zlib-compress output
- static void serializeBulk(std::ostream &os, int version,
+ static SharedBuffer<u8> serializeBulk(int version,
const MapNode *nodes, u32 nodecount,
- u8 content_width, u8 params_width, int compression_level);
+ u8 content_width, u8 params_width);
static void deSerializeBulk(std::istream &is, int version,
MapNode *nodes, u32 nodecount,
u8 content_width, u8 params_width);
diff --git a/src/network/address.cpp b/src/network/address.cpp
index 05678aa62..90e561802 100644
--- a/src/network/address.cpp
+++ b/src/network/address.cpp
@@ -87,38 +87,31 @@ Address::Address(const IPv6AddressBytes *ipv6_bytes, u16 port)
setPort(port);
}
-// Equality (address family, address and port must be equal)
-bool Address::operator==(const Address &address)
+// Equality (address family, IP and port must be equal)
+bool Address::operator==(const Address &other)
{
- if (address.m_addr_family != m_addr_family || address.m_port != m_port)
+ if (other.m_addr_family != m_addr_family || other.m_port != m_port)
return false;
if (m_addr_family == AF_INET) {
- return m_address.ipv4.sin_addr.s_addr ==
- address.m_address.ipv4.sin_addr.s_addr;
+ return m_address.ipv4.s_addr == other.m_address.ipv4.s_addr;
}
if (m_addr_family == AF_INET6) {
- return memcmp(m_address.ipv6.sin6_addr.s6_addr,
- address.m_address.ipv6.sin6_addr.s6_addr, 16) == 0;
+ return memcmp(m_address.ipv6.s6_addr,
+ other.m_address.ipv6.s6_addr, 16) == 0;
}
return false;
}
-bool Address::operator!=(const Address &address)
-{
- return !(*this == address);
-}
-
void Address::Resolve(const char *name)
{
if (!name || name[0] == 0) {
- if (m_addr_family == AF_INET) {
- setAddress((u32)0);
- } else if (m_addr_family == AF_INET6) {
- setAddress((IPv6AddressBytes *)0);
- }
+ if (m_addr_family == AF_INET)
+ setAddress(static_cast<u32>(0));
+ else if (m_addr_family == AF_INET6)
+ setAddress(static_cast<IPv6AddressBytes*>(nullptr));
return;
}
@@ -126,9 +119,6 @@ void Address::Resolve(const char *name)
memset(&hints, 0, sizeof(hints));
// Setup hints
- hints.ai_socktype = 0;
- hints.ai_protocol = 0;
- hints.ai_flags = 0;
if (g_settings->getBool("enable_ipv6")) {
// AF_UNSPEC allows both IPv6 and IPv4 addresses to be returned
hints.ai_family = AF_UNSPEC;
@@ -145,14 +135,13 @@ void Address::Resolve(const char *name)
if (resolved->ai_family == AF_INET) {
struct sockaddr_in *t = (struct sockaddr_in *)resolved->ai_addr;
m_addr_family = AF_INET;
- m_address.ipv4 = *t;
+ m_address.ipv4 = t->sin_addr;
} else if (resolved->ai_family == AF_INET6) {
struct sockaddr_in6 *t = (struct sockaddr_in6 *)resolved->ai_addr;
m_addr_family = AF_INET6;
- m_address.ipv6 = *t;
+ m_address.ipv6 = t->sin6_addr;
} else {
- freeaddrinfo(resolved);
- throw ResolveError("");
+ m_addr_family = 0;
}
freeaddrinfo(resolved);
}
@@ -163,47 +152,37 @@ std::string Address::serializeString() const
// windows XP doesnt have inet_ntop, maybe use better func
#ifdef _WIN32
if (m_addr_family == AF_INET) {
- u8 a, b, c, d;
- u32 addr;
- addr = ntohl(m_address.ipv4.sin_addr.s_addr);
- a = (addr & 0xFF000000) >> 24;
- b = (addr & 0x00FF0000) >> 16;
- c = (addr & 0x0000FF00) >> 8;
- d = (addr & 0x000000FF);
- return itos(a) + "." + itos(b) + "." + itos(c) + "." + itos(d);
+ return inet_ntoa(m_address.ipv4);
} else if (m_addr_family == AF_INET6) {
std::ostringstream os;
+ os << std::hex;
for (int i = 0; i < 16; i += 2) {
- u16 section = (m_address.ipv6.sin6_addr.s6_addr[i] << 8) |
- (m_address.ipv6.sin6_addr.s6_addr[i + 1]);
- os << std::hex << section;
+ u16 section = (m_address.ipv6.s6_addr[i] << 8) |
+ (m_address.ipv6.s6_addr[i + 1]);
+ os << section;
if (i < 14)
os << ":";
}
return os.str();
- } else
- return std::string("");
+ } else {
+ return "";
+ }
#else
char str[INET6_ADDRSTRLEN];
- if (inet_ntop(m_addr_family,
- (m_addr_family == AF_INET)
- ? (void *)&(m_address.ipv4.sin_addr)
- : (void *)&(m_address.ipv6.sin6_addr),
- str, INET6_ADDRSTRLEN) == NULL) {
- return std::string("");
- }
- return std::string(str);
+ if (inet_ntop(m_addr_family, (void*) &m_address, str, sizeof(str)) == nullptr)
+ return "";
+ return str;
#endif
}
-struct sockaddr_in Address::getAddress() const
+struct in_addr Address::getAddress() const
{
- return m_address.ipv4; // NOTE: NO PORT INCLUDED, use getPort()
+ return m_address.ipv4;
}
-struct sockaddr_in6 Address::getAddress6() const
+struct in6_addr Address::getAddress6() const
{
- return m_address.ipv6; // NOTE: NO PORT INCLUDED, use getPort()
+ return m_address.ipv6;
}
u16 Address::getPort() const
@@ -211,52 +190,39 @@ u16 Address::getPort() const
return m_port;
}
-int Address::getFamily() const
-{
- return m_addr_family;
-}
-
-bool Address::isIPv6() const
-{
- return m_addr_family == AF_INET6;
-}
-
bool Address::isZero() const
{
if (m_addr_family == AF_INET) {
- return m_address.ipv4.sin_addr.s_addr == 0;
+ return m_address.ipv4.s_addr == 0;
}
if (m_addr_family == AF_INET6) {
static const char zero[16] = {0};
- return memcmp(m_address.ipv6.sin6_addr.s6_addr, zero, 16) == 0;
+ return memcmp(m_address.ipv6.s6_addr, zero, 16) == 0;
}
+
return false;
}
void Address::setAddress(u32 address)
{
m_addr_family = AF_INET;
- m_address.ipv4.sin_family = AF_INET;
- m_address.ipv4.sin_addr.s_addr = htonl(address);
+ m_address.ipv4.s_addr = htonl(address);
}
void Address::setAddress(u8 a, u8 b, u8 c, u8 d)
{
- m_addr_family = AF_INET;
- m_address.ipv4.sin_family = AF_INET;
- u32 addr = htonl((a << 24) | (b << 16) | (c << 8) | d);
- m_address.ipv4.sin_addr.s_addr = addr;
+ u32 addr = (a << 24) | (b << 16) | (c << 8) | d;
+ setAddress(addr);
}
void Address::setAddress(const IPv6AddressBytes *ipv6_bytes)
{
m_addr_family = AF_INET6;
- m_address.ipv6.sin6_family = AF_INET6;
if (ipv6_bytes)
- memcpy(m_address.ipv6.sin6_addr.s6_addr, ipv6_bytes->bytes, 16);
+ memcpy(m_address.ipv6.s6_addr, ipv6_bytes->bytes, 16);
else
- memset(m_address.ipv6.sin6_addr.s6_addr, 0, 16);
+ memset(m_address.ipv6.s6_addr, 0, 16);
}
void Address::setPort(u16 port)
@@ -268,23 +234,26 @@ void Address::print(std::ostream *s) const
{
if (m_addr_family == AF_INET6)
*s << "[" << serializeString() << "]:" << m_port;
- else
+ else if (m_addr_family == AF_INET)
*s << serializeString() << ":" << m_port;
+ else
+ *s << "(undefined)";
}
bool Address::isLocalhost() const
{
if (isIPv6()) {
- static const unsigned char localhost_bytes[] = {
+ static const u8 localhost_bytes[] = {
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1};
- static const unsigned char mapped_ipv4_localhost[] = {
+ static const u8 mapped_ipv4_localhost[] = {
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0xff, 0xff, 0x7f, 0, 0, 0};
- auto addr = m_address.ipv6.sin6_addr.s6_addr;
+ auto addr = m_address.ipv6.s6_addr;
return memcmp(addr, localhost_bytes, 16) == 0 ||
memcmp(addr, mapped_ipv4_localhost, 13) == 0;
}
- return (m_address.ipv4.sin_addr.s_addr & 0xFF) == 0x7f;
+ auto addr = ntohl(m_address.ipv4.s_addr);
+ return (addr >> 24) == 0x7f;
}
diff --git a/src/network/address.h b/src/network/address.h
index 4329c84a8..c2f5f2eef 100644
--- a/src/network/address.h
+++ b/src/network/address.h
@@ -36,9 +36,8 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "irrlichttypes.h"
#include "networkexceptions.h"
-class IPv6AddressBytes
+struct IPv6AddressBytes
{
-public:
u8 bytes[16];
IPv6AddressBytes() { memset(bytes, 0, 16); }
};
@@ -50,30 +49,34 @@ public:
Address(u32 address, u16 port);
Address(u8 a, u8 b, u8 c, u8 d, u16 port);
Address(const IPv6AddressBytes *ipv6_bytes, u16 port);
+
bool operator==(const Address &address);
- bool operator!=(const Address &address);
+ bool operator!=(const Address &address) { return !(*this == address); }
+
+ struct in_addr getAddress() const;
+ struct in6_addr getAddress6() const;
+ u16 getPort() const;
+ int getFamily() const { return m_addr_family; }
+ bool isIPv6() const { return m_addr_family == AF_INET6; }
+ bool isZero() const;
+ void print(std::ostream *s) const;
+ std::string serializeString() const;
+ bool isLocalhost() const;
+
// Resolve() may throw ResolveError (address is unchanged in this case)
void Resolve(const char *name);
- struct sockaddr_in getAddress() const;
- unsigned short getPort() const;
+
void setAddress(u32 address);
void setAddress(u8 a, u8 b, u8 c, u8 d);
void setAddress(const IPv6AddressBytes *ipv6_bytes);
- struct sockaddr_in6 getAddress6() const;
- int getFamily() const;
- bool isIPv6() const;
- bool isZero() const;
- void setPort(unsigned short port);
- void print(std::ostream *s) const;
- std::string serializeString() const;
- bool isLocalhost() const;
+ void setPort(u16 port);
private:
- unsigned int m_addr_family = 0;
+ unsigned short m_addr_family = 0;
union
{
- struct sockaddr_in ipv4;
- struct sockaddr_in6 ipv6;
+ struct in_addr ipv4;
+ struct in6_addr ipv6;
} m_address;
u16 m_port = 0; // Port is separate from sockaddr structures
};
diff --git a/src/network/clientopcodes.cpp b/src/network/clientopcodes.cpp
index 55cfdd4dc..a98a5e7d1 100644
--- a/src/network/clientopcodes.cpp
+++ b/src/network/clientopcodes.cpp
@@ -204,7 +204,7 @@ const ServerCommandFactory serverCommandFactoryTable[TOSERVER_NUM_MSG_TYPES] =
null_command_factory, // 0x3e
null_command_factory, // 0x3f
{ "TOSERVER_REQUEST_MEDIA", 1, true }, // 0x40
- null_command_factory, // 0x41
+ { "TOSERVER_HAVE_MEDIA", 2, true }, // 0x41
null_command_factory, // 0x42
{ "TOSERVER_CLIENT_READY", 1, true }, // 0x43
null_command_factory, // 0x44
diff --git a/src/network/clientpackethandler.cpp b/src/network/clientpackethandler.cpp
index 44bd81dac..48ad60ac6 100644
--- a/src/network/clientpackethandler.cpp
+++ b/src/network/clientpackethandler.cpp
@@ -43,6 +43,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "tileanimation.h"
#include "gettext.h"
#include "skyparams.h"
+#include <memory>
void Client::handleCommand_Deprecated(NetworkPacket* pkt)
{
@@ -88,7 +89,7 @@ void Client::handleCommand_Hello(NetworkPacket* pkt)
// This is only neccessary though when we actually want to add casing support
if (m_chosen_auth_mech != AUTH_MECHANISM_NONE) {
- // we recieved a TOCLIENT_HELLO while auth was already going on
+ // we received a TOCLIENT_HELLO while auth was already going on
errorstream << "Client: TOCLIENT_HELLO while auth was already going on"
<< "(chosen_mech=" << m_chosen_auth_mech << ")." << std::endl;
if (m_chosen_auth_mech == AUTH_MECHANISM_SRP ||
@@ -156,7 +157,7 @@ void Client::handleCommand_AcceptSudoMode(NetworkPacket* pkt)
m_password = m_new_password;
- verbosestream << "Client: Recieved TOCLIENT_ACCEPT_SUDO_MODE." << std::endl;
+ verbosestream << "Client: Received TOCLIENT_ACCEPT_SUDO_MODE." << std::endl;
// send packet to actually set the password
startAuth(AUTH_MECHANISM_FIRST_SRP);
@@ -261,7 +262,7 @@ void Client::handleCommand_NodemetaChanged(NetworkPacket *pkt)
return;
std::istringstream is(pkt->readLongString(), std::ios::binary);
- std::stringstream sstr;
+ std::stringstream sstr(std::ios::binary | std::ios::in | std::ios::out);
decompressZlib(is, sstr);
NodeMetadataList meta_updates_list(false);
@@ -670,21 +671,19 @@ void Client::handleCommand_AnnounceMedia(NetworkPacket* pkt)
m_media_downloader->addFile(name, sha1_raw);
}
- try {
+ {
std::string str;
-
*pkt >> str;
Strfnd sf(str);
- while(!sf.at_end()) {
+ while (!sf.at_end()) {
std::string baseurl = trim(sf.next(","));
- if (!baseurl.empty())
+ if (!baseurl.empty()) {
+ m_remote_media_servers.emplace_back(baseurl);
m_media_downloader->addRemoteServer(baseurl);
+ }
}
}
- catch(SerializationError& e) {
- // not supported by server or turned off
- }
m_media_downloader->step(this);
}
@@ -716,31 +715,38 @@ void Client::handleCommand_Media(NetworkPacket* pkt)
if (num_files == 0)
return;
- if (!m_media_downloader || !m_media_downloader->isStarted()) {
- const char *problem = m_media_downloader ?
- "media has not been requested" :
- "all media has been received already";
- errorstream << "Client: Received media but "
- << problem << "! "
- << " bunch " << bunch_i << "/" << num_bunches
- << " files=" << num_files
- << " size=" << pkt->getSize() << std::endl;
- return;
- }
+ bool init_phase = m_media_downloader && m_media_downloader->isStarted();
- // Mesh update thread must be stopped while
- // updating content definitions
- sanity_check(!m_mesh_update_thread.isRunning());
+ if (init_phase) {
+ // Mesh update thread must be stopped while
+ // updating content definitions
+ sanity_check(!m_mesh_update_thread.isRunning());
+ }
- for (u32 i=0; i < num_files; i++) {
- std::string name;
+ for (u32 i = 0; i < num_files; i++) {
+ std::string name, data;
*pkt >> name;
+ data = pkt->readLongString();
- std::string data = pkt->readLongString();
-
- m_media_downloader->conventionalTransferDone(
- name, data, this);
+ bool ok = false;
+ if (init_phase) {
+ ok = m_media_downloader->conventionalTransferDone(name, data, this);
+ } else {
+ // Check pending dynamic transfers, one of them must be it
+ for (const auto &it : m_pending_media_downloads) {
+ if (it.second->conventionalTransferDone(name, data, this)) {
+ ok = true;
+ break;
+ }
+ }
+ }
+ if (!ok) {
+ errorstream << "Client: Received media \"" << name
+ << "\" but no downloads pending. " << num_bunches << " bunches, "
+ << num_files << " in this one. (init_phase=" << init_phase
+ << ")" << std::endl;
+ }
}
}
@@ -755,12 +761,11 @@ void Client::handleCommand_NodeDef(NetworkPacket* pkt)
// Decompress node definitions
std::istringstream tmp_is(pkt->readLongString(), std::ios::binary);
- std::ostringstream tmp_os;
+ std::stringstream tmp_os(std::ios::binary | std::ios::in | std::ios::out);
decompressZlib(tmp_is, tmp_os);
// Deserialize node definitions
- std::istringstream tmp_is2(tmp_os.str());
- m_nodedef->deSerialize(tmp_is2);
+ m_nodedef->deSerialize(tmp_os);
m_nodedef_received = true;
}
@@ -775,12 +780,11 @@ void Client::handleCommand_ItemDef(NetworkPacket* pkt)
// Decompress item definitions
std::istringstream tmp_is(pkt->readLongString(), std::ios::binary);
- std::ostringstream tmp_os;
+ std::stringstream tmp_os(std::ios::binary | std::ios::in | std::ios::out);
decompressZlib(tmp_is, tmp_os);
// Deserialize node definitions
- std::istringstream tmp_is2(tmp_os.str());
- m_itemdef->deSerialize(tmp_is2);
+ m_itemdef->deSerialize(tmp_os);
m_itemdef_received = true;
}
@@ -1041,9 +1045,6 @@ void Client::handleCommand_DeleteParticleSpawner(NetworkPacket* pkt)
void Client::handleCommand_HudAdd(NetworkPacket* pkt)
{
- std::string datastring(pkt->getString(0), pkt->getSize());
- std::istringstream is(datastring, std::ios_base::binary);
-
u32 server_id;
u8 type;
v2f pos;
@@ -1059,6 +1060,7 @@ void Client::handleCommand_HudAdd(NetworkPacket* pkt)
v2s32 size;
s16 z_index = 0;
std::string text2;
+ u32 style = 0;
*pkt >> server_id >> type >> pos >> name >> scale >> text >> number >> item
>> dir >> align >> offset;
@@ -1067,25 +1069,28 @@ void Client::handleCommand_HudAdd(NetworkPacket* pkt)
*pkt >> size;
*pkt >> z_index;
*pkt >> text2;
+ *pkt >> style;
} catch(PacketError &e) {};
ClientEvent *event = new ClientEvent();
- event->type = CE_HUDADD;
- event->hudadd.server_id = server_id;
- event->hudadd.type = type;
- event->hudadd.pos = new v2f(pos);
- event->hudadd.name = new std::string(name);
- event->hudadd.scale = new v2f(scale);
- event->hudadd.text = new std::string(text);
- event->hudadd.number = number;
- event->hudadd.item = item;
- event->hudadd.dir = dir;
- event->hudadd.align = new v2f(align);
- event->hudadd.offset = new v2f(offset);
- event->hudadd.world_pos = new v3f(world_pos);
- event->hudadd.size = new v2s32(size);
- event->hudadd.z_index = z_index;
- event->hudadd.text2 = new std::string(text2);
+ event->type = CE_HUDADD;
+ event->hudadd = new ClientEventHudAdd();
+ event->hudadd->server_id = server_id;
+ event->hudadd->type = type;
+ event->hudadd->pos = pos;
+ event->hudadd->name = name;
+ event->hudadd->scale = scale;
+ event->hudadd->text = text;
+ event->hudadd->number = number;
+ event->hudadd->item = item;
+ event->hudadd->dir = dir;
+ event->hudadd->align = align;
+ event->hudadd->offset = offset;
+ event->hudadd->world_pos = world_pos;
+ event->hudadd->size = size;
+ event->hudadd->z_index = z_index;
+ event->hudadd->text2 = text2;
+ event->hudadd->style = style;
m_client_event_queue.push(event);
}
@@ -1113,27 +1118,40 @@ void Client::handleCommand_HudChange(NetworkPacket* pkt)
*pkt >> server_id >> stat;
- if (stat == HUD_STAT_POS || stat == HUD_STAT_SCALE ||
- stat == HUD_STAT_ALIGN || stat == HUD_STAT_OFFSET)
- *pkt >> v2fdata;
- else if (stat == HUD_STAT_NAME || stat == HUD_STAT_TEXT || stat == HUD_STAT_TEXT2)
- *pkt >> sdata;
- else if (stat == HUD_STAT_WORLD_POS)
- *pkt >> v3fdata;
- else if (stat == HUD_STAT_SIZE )
- *pkt >> v2s32data;
- else
- *pkt >> intdata;
+ // Keep in sync with:server.cpp -> SendHUDChange
+ switch ((HudElementStat)stat) {
+ case HUD_STAT_POS:
+ case HUD_STAT_SCALE:
+ case HUD_STAT_ALIGN:
+ case HUD_STAT_OFFSET:
+ *pkt >> v2fdata;
+ break;
+ case HUD_STAT_NAME:
+ case HUD_STAT_TEXT:
+ case HUD_STAT_TEXT2:
+ *pkt >> sdata;
+ break;
+ case HUD_STAT_WORLD_POS:
+ *pkt >> v3fdata;
+ break;
+ case HUD_STAT_SIZE:
+ *pkt >> v2s32data;
+ break;
+ default:
+ *pkt >> intdata;
+ break;
+ }
ClientEvent *event = new ClientEvent();
- event->type = CE_HUDCHANGE;
- event->hudchange.id = server_id;
- event->hudchange.stat = (HudElementStat)stat;
- event->hudchange.v2fdata = new v2f(v2fdata);
- event->hudchange.v3fdata = new v3f(v3fdata);
- event->hudchange.sdata = new std::string(sdata);
- event->hudchange.data = intdata;
- event->hudchange.v2s32data = new v2s32(v2s32data);
+ event->type = CE_HUDCHANGE;
+ event->hudchange = new ClientEventHudChange();
+ event->hudchange->id = server_id;
+ event->hudchange->stat = static_cast<HudElementStat>(stat);
+ event->hudchange->v2fdata = v2fdata;
+ event->hudchange->v3fdata = v3fdata;
+ event->hudchange->sdata = sdata;
+ event->hudchange->data = intdata;
+ event->hudchange->v2s32data = v2s32data;
m_client_event_queue.push(event);
}
@@ -1219,19 +1237,17 @@ void Client::handleCommand_HudSetSky(NetworkPacket* pkt)
} catch (...) {}
// Use default skybox settings:
- SkyboxDefaults sky_defaults;
- SunParams sun = sky_defaults.getSunDefaults();
- MoonParams moon = sky_defaults.getMoonDefaults();
- StarParams stars = sky_defaults.getStarDefaults();
+ SunParams sun = SkyboxDefaults::getSunDefaults();
+ MoonParams moon = SkyboxDefaults::getMoonDefaults();
+ StarParams stars = SkyboxDefaults::getStarDefaults();
// Fix for "regular" skies, as color isn't kept:
if (skybox.type == "regular") {
- skybox.sky_color = sky_defaults.getSkyColorDefaults();
+ skybox.sky_color = SkyboxDefaults::getSkyColorDefaults();
skybox.fog_tint_type = "default";
skybox.fog_moon_tint = video::SColor(255, 255, 255, 255);
skybox.fog_sun_tint = video::SColor(255, 255, 255, 255);
- }
- else {
+ } else {
sun.visible = false;
sun.sunrise_visible = false;
moon.visible = false;
@@ -1381,6 +1397,8 @@ void Client::handleCommand_LocalPlayerAnimations(NetworkPacket* pkt)
*pkt >> player->local_animations[2];
*pkt >> player->local_animations[3];
*pkt >> player->local_animation_speed;
+
+ player->last_animation = -1;
}
void Client::handleCommand_EyeOffset(NetworkPacket* pkt)
@@ -1478,46 +1496,72 @@ void Client::handleCommand_PlayerSpeed(NetworkPacket *pkt)
void Client::handleCommand_MediaPush(NetworkPacket *pkt)
{
std::string raw_hash, filename, filedata;
+ u32 token;
bool cached;
*pkt >> raw_hash >> filename >> cached;
- filedata = pkt->readLongString();
+ if (m_proto_ver >= 40)
+ *pkt >> token;
+ else
+ filedata = pkt->readLongString();
- if (raw_hash.size() != 20 || filedata.empty() || filename.empty() ||
+ if (raw_hash.size() != 20 || filename.empty() ||
+ (m_proto_ver < 40 && filedata.empty()) ||
!string_allowed(filename, TEXTURENAME_ALLOWED_CHARS)) {
throw PacketError("Illegal filename, data or hash");
}
- verbosestream << "Server pushes media file \"" << filename << "\" with "
- << filedata.size() << " bytes of data (cached=" << cached
- << ")" << std::endl;
+ verbosestream << "Server pushes media file \"" << filename << "\" ";
+ if (filedata.empty())
+ verbosestream << "to be fetched ";
+ else
+ verbosestream << "with " << filedata.size() << " bytes ";
+ verbosestream << "(cached=" << cached << ")" << std::endl;
if (m_media_pushed_files.count(filename) != 0) {
- // Silently ignore for synchronization purposes
+ // Ignore (but acknowledge). Previously this was for sync purposes,
+ // but even in new versions media cannot be replaced at runtime.
+ if (m_proto_ver >= 40)
+ sendHaveMedia({ token });
return;
}
- // Compute and check checksum of data
- std::string computed_hash;
- {
- SHA1 ctx;
- ctx.addBytes(filedata.c_str(), filedata.size());
- unsigned char *buf = ctx.getDigest();
- computed_hash.assign((char*) buf, 20);
- free(buf);
- }
- if (raw_hash != computed_hash) {
- verbosestream << "Hash of file data mismatches, ignoring." << std::endl;
+ if (!filedata.empty()) {
+ // LEGACY CODEPATH
+ // Compute and check checksum of data
+ std::string computed_hash;
+ {
+ SHA1 ctx;
+ ctx.addBytes(filedata.c_str(), filedata.size());
+ unsigned char *buf = ctx.getDigest();
+ computed_hash.assign((char*) buf, 20);
+ free(buf);
+ }
+ if (raw_hash != computed_hash) {
+ verbosestream << "Hash of file data mismatches, ignoring." << std::endl;
+ return;
+ }
+
+ // Actually load media
+ loadMedia(filedata, filename, true);
+ m_media_pushed_files.insert(filename);
+
+ // Cache file for the next time when this client joins the same server
+ if (cached)
+ clientMediaUpdateCache(raw_hash, filedata);
return;
}
- // Actually load media
- loadMedia(filedata, filename, true);
m_media_pushed_files.insert(filename);
- // Cache file for the next time when this client joins the same server
- if (cached)
- clientMediaUpdateCache(raw_hash, filedata);
+ // create a downloader for this file
+ auto downloader(std::make_shared<SingleMediaDownloader>(cached));
+ m_pending_media_downloads.emplace_back(token, downloader);
+ downloader->addFile(filename, raw_hash);
+ for (const auto &baseurl : m_remote_media_servers)
+ downloader->addRemoteServer(baseurl);
+
+ downloader->step(this);
}
/*
diff --git a/src/network/connection.cpp b/src/network/connection.cpp
index a4970954f..2d3cf6e88 100644
--- a/src/network/connection.cpp
+++ b/src/network/connection.cpp
@@ -62,18 +62,27 @@ namespace con
#define PING_TIMEOUT 5.0
-BufferedPacket makePacket(Address &address, const SharedBuffer<u8> &data,
+u16 BufferedPacket::getSeqnum() const
+{
+ if (size() < BASE_HEADER_SIZE + 3)
+ return 0; // should never happen
+
+ return readU16(&data[BASE_HEADER_SIZE + 1]);
+}
+
+BufferedPacketPtr makePacket(Address &address, const SharedBuffer<u8> &data,
u32 protocol_id, session_t sender_peer_id, u8 channel)
{
u32 packet_size = data.getSize() + BASE_HEADER_SIZE;
- BufferedPacket p(packet_size);
- p.address = address;
- writeU32(&p.data[0], protocol_id);
- writeU16(&p.data[4], sender_peer_id);
- writeU8(&p.data[6], channel);
+ BufferedPacketPtr p(new BufferedPacket(packet_size));
+ p->address = address;
+
+ writeU32(&p->data[0], protocol_id);
+ writeU16(&p->data[4], sender_peer_id);
+ writeU8(&p->data[6], channel);
- memcpy(&p.data[BASE_HEADER_SIZE], *data, data.getSize());
+ memcpy(&p->data[BASE_HEADER_SIZE], *data, data.getSize());
return p;
}
@@ -169,9 +178,8 @@ void ReliablePacketBuffer::print()
MutexAutoLock listlock(m_list_mutex);
LOG(dout_con<<"Dump of ReliablePacketBuffer:" << std::endl);
unsigned int index = 0;
- for (BufferedPacket &bufferedPacket : m_list) {
- u16 s = readU16(&(bufferedPacket.data[BASE_HEADER_SIZE+1]));
- LOG(dout_con<<index<< ":" << s << std::endl);
+ for (BufferedPacketPtr &packet : m_list) {
+ LOG(dout_con<<index<< ":" << packet->getSeqnum() << std::endl);
index++;
}
}
@@ -188,16 +196,13 @@ u32 ReliablePacketBuffer::size()
return m_list.size();
}
-RPBSearchResult ReliablePacketBuffer::findPacket(u16 seqnum)
+RPBSearchResult ReliablePacketBuffer::findPacketNoLock(u16 seqnum)
{
- std::list<BufferedPacket>::iterator i = m_list.begin();
- for(; i != m_list.end(); ++i)
- {
- u16 s = readU16(&(i->data[BASE_HEADER_SIZE+1]));
- if (s == seqnum)
- break;
+ for (auto it = m_list.begin(); it != m_list.end(); ++it) {
+ if ((*it)->getSeqnum() == seqnum)
+ return it;
}
- return i;
+ return m_list.end();
}
bool ReliablePacketBuffer::getFirstSeqnum(u16& result)
@@ -205,54 +210,54 @@ bool ReliablePacketBuffer::getFirstSeqnum(u16& result)
MutexAutoLock listlock(m_list_mutex);
if (m_list.empty())
return false;
- const BufferedPacket &p = m_list.front();
- result = readU16(&p.data[BASE_HEADER_SIZE + 1]);
+ result = m_list.front()->getSeqnum();
return true;
}
-BufferedPacket ReliablePacketBuffer::popFirst()
+BufferedPacketPtr ReliablePacketBuffer::popFirst()
{
MutexAutoLock listlock(m_list_mutex);
if (m_list.empty())
throw NotFoundException("Buffer is empty");
- BufferedPacket p = std::move(m_list.front());
+
+ BufferedPacketPtr p(m_list.front());
m_list.pop_front();
if (m_list.empty()) {
m_oldest_non_answered_ack = 0;
} else {
- m_oldest_non_answered_ack =
- readU16(&m_list.front().data[BASE_HEADER_SIZE + 1]);
+ m_oldest_non_answered_ack = m_list.front()->getSeqnum();
}
return p;
}
-BufferedPacket ReliablePacketBuffer::popSeqnum(u16 seqnum)
+BufferedPacketPtr ReliablePacketBuffer::popSeqnum(u16 seqnum)
{
MutexAutoLock listlock(m_list_mutex);
- RPBSearchResult r = findPacket(seqnum);
- if (r == notFound()) {
+ RPBSearchResult r = findPacketNoLock(seqnum);
+ if (r == m_list.end()) {
LOG(dout_con<<"Sequence number: " << seqnum
<< " not found in reliable buffer"<<std::endl);
throw NotFoundException("seqnum not found in buffer");
}
- BufferedPacket p = std::move(*r);
+ BufferedPacketPtr p(*r);
m_list.erase(r);
if (m_list.empty()) {
m_oldest_non_answered_ack = 0;
} else {
- m_oldest_non_answered_ack =
- readU16(&m_list.front().data[BASE_HEADER_SIZE + 1]);
+ m_oldest_non_answered_ack = m_list.front()->getSeqnum();
}
return p;
}
-void ReliablePacketBuffer::insert(const BufferedPacket &p, u16 next_expected)
+void ReliablePacketBuffer::insert(BufferedPacketPtr &p_ptr, u16 next_expected)
{
MutexAutoLock listlock(m_list_mutex);
- if (p.data.getSize() < BASE_HEADER_SIZE + 3) {
+ const BufferedPacket &p = *p_ptr;
+
+ if (p.size() < BASE_HEADER_SIZE + 3) {
errorstream << "ReliablePacketBuffer::insert(): Invalid data size for "
"reliable packet" << std::endl;
return;
@@ -263,7 +268,7 @@ void ReliablePacketBuffer::insert(const BufferedPacket &p, u16 next_expected)
<< std::endl;
return;
}
- u16 seqnum = readU16(&p.data[BASE_HEADER_SIZE + 1]);
+ const u16 seqnum = p.getSeqnum();
if (!seqnum_in_window(seqnum, next_expected, MAX_RELIABLE_WINDOW_SIZE)) {
errorstream << "ReliablePacketBuffer::insert(): seqnum is outside of "
@@ -280,44 +285,44 @@ void ReliablePacketBuffer::insert(const BufferedPacket &p, u16 next_expected)
// Find the right place for the packet and insert it there
// If list is empty, just add it
- if (m_list.empty())
- {
- m_list.push_back(p);
+ if (m_list.empty()) {
+ m_list.push_back(p_ptr);
m_oldest_non_answered_ack = seqnum;
// Done.
return;
}
// Otherwise find the right place
- std::list<BufferedPacket>::iterator i = m_list.begin();
+ auto it = m_list.begin();
// Find the first packet in the list which has a higher seqnum
- u16 s = readU16(&(i->data[BASE_HEADER_SIZE+1]));
+ u16 s = (*it)->getSeqnum();
/* case seqnum is smaller then next_expected seqnum */
/* this is true e.g. on wrap around */
if (seqnum < next_expected) {
- while(((s < seqnum) || (s >= next_expected)) && (i != m_list.end())) {
- ++i;
- if (i != m_list.end())
- s = readU16(&(i->data[BASE_HEADER_SIZE+1]));
+ while(((s < seqnum) || (s >= next_expected)) && (it != m_list.end())) {
+ ++it;
+ if (it != m_list.end())
+ s = (*it)->getSeqnum();
}
}
/* non wrap around case (at least for incoming and next_expected */
else
{
- while(((s < seqnum) && (s >= next_expected)) && (i != m_list.end())) {
- ++i;
- if (i != m_list.end())
- s = readU16(&(i->data[BASE_HEADER_SIZE+1]));
+ while(((s < seqnum) && (s >= next_expected)) && (it != m_list.end())) {
+ ++it;
+ if (it != m_list.end())
+ s = (*it)->getSeqnum();
}
}
if (s == seqnum) {
/* nothing to do this seems to be a resent packet */
/* for paranoia reason data should be compared */
+ auto &i = *it;
if (
- (readU16(&(i->data[BASE_HEADER_SIZE+1])) != seqnum) ||
- (i->data.getSize() != p.data.getSize()) ||
+ (i->getSeqnum() != seqnum) ||
+ (i->size() != p.size()) ||
(i->address != p.address)
)
{
@@ -325,51 +330,52 @@ void ReliablePacketBuffer::insert(const BufferedPacket &p, u16 next_expected)
fprintf(stderr,
"Duplicated seqnum %d non matching packet detected:\n",
seqnum);
- fprintf(stderr, "Old: seqnum: %05d size: %04d, address: %s\n",
- readU16(&(i->data[BASE_HEADER_SIZE+1])),i->data.getSize(),
+ fprintf(stderr, "Old: seqnum: %05d size: %04zu, address: %s\n",
+ i->getSeqnum(), i->size(),
i->address.serializeString().c_str());
- fprintf(stderr, "New: seqnum: %05d size: %04u, address: %s\n",
- readU16(&(p.data[BASE_HEADER_SIZE+1])),p.data.getSize(),
+ fprintf(stderr, "New: seqnum: %05d size: %04zu, address: %s\n",
+ p.getSeqnum(), p.size(),
p.address.serializeString().c_str());
throw IncomingDataCorruption("duplicated packet isn't same as original one");
}
}
/* insert or push back */
- else if (i != m_list.end()) {
- m_list.insert(i, p);
+ else if (it != m_list.end()) {
+ m_list.insert(it, p_ptr);
} else {
- m_list.push_back(p);
+ m_list.push_back(p_ptr);
}
/* update last packet number */
- m_oldest_non_answered_ack = readU16(&m_list.front().data[BASE_HEADER_SIZE+1]);
+ m_oldest_non_answered_ack = m_list.front()->getSeqnum();
}
void ReliablePacketBuffer::incrementTimeouts(float dtime)
{
MutexAutoLock listlock(m_list_mutex);
- for (BufferedPacket &bufferedPacket : m_list) {
- bufferedPacket.time += dtime;
- bufferedPacket.totaltime += dtime;
+ for (auto &packet : m_list) {
+ packet->time += dtime;
+ packet->totaltime += dtime;
}
}
-std::list<BufferedPacket>
+std::list<ConstSharedPtr<BufferedPacket>>
ReliablePacketBuffer::getTimedOuts(float timeout, u32 max_packets)
{
MutexAutoLock listlock(m_list_mutex);
- std::list<BufferedPacket> timed_outs;
- for (BufferedPacket &bufferedPacket : m_list) {
- if (bufferedPacket.time >= timeout) {
- // caller will resend packet so reset time and increase counter
- bufferedPacket.time = 0.0f;
- bufferedPacket.resend_count++;
+ std::list<ConstSharedPtr<BufferedPacket>> timed_outs;
+ for (auto &packet : m_list) {
+ if (packet->time < timeout)
+ continue;
- timed_outs.push_back(bufferedPacket);
+ // caller will resend packet so reset time and increase counter
+ packet->time = 0.0f;
+ packet->resend_count++;
- if (timed_outs.size() >= max_packets)
- break;
- }
+ timed_outs.emplace_back(packet);
+
+ if (timed_outs.size() >= max_packets)
+ break;
}
return timed_outs;
}
@@ -428,11 +434,13 @@ IncomingSplitBuffer::~IncomingSplitBuffer()
}
}
-SharedBuffer<u8> IncomingSplitBuffer::insert(const BufferedPacket &p, bool reliable)
+SharedBuffer<u8> IncomingSplitBuffer::insert(BufferedPacketPtr &p_ptr, bool reliable)
{
MutexAutoLock listlock(m_map_mutex);
+ const BufferedPacket &p = *p_ptr;
+
u32 headersize = BASE_HEADER_SIZE + 7;
- if (p.data.getSize() < headersize) {
+ if (p.size() < headersize) {
errorstream << "Invalid data size for split packet" << std::endl;
return SharedBuffer<u8>();
}
@@ -473,7 +481,7 @@ SharedBuffer<u8> IncomingSplitBuffer::insert(const BufferedPacket &p, bool relia
<<std::endl);
// Cut chunk data out of packet
- u32 chunkdatasize = p.data.getSize() - headersize;
+ u32 chunkdatasize = p.size() - headersize;
SharedBuffer<u8> chunkdata(chunkdatasize);
memcpy(*chunkdata, &(p.data[headersize]), chunkdatasize);
@@ -520,14 +528,67 @@ void IncomingSplitBuffer::removeUnreliableTimedOuts(float dtime, float timeout)
ConnectionCommand
*/
-void ConnectionCommand::send(session_t peer_id_, u8 channelnum_, NetworkPacket *pkt,
- bool reliable_)
+ConnectionCommandPtr ConnectionCommand::create(ConnectionCommandType type)
+{
+ return ConnectionCommandPtr(new ConnectionCommand(type));
+}
+
+ConnectionCommandPtr ConnectionCommand::serve(Address address)
+{
+ auto c = create(CONNCMD_SERVE);
+ c->address = address;
+ return c;
+}
+
+ConnectionCommandPtr ConnectionCommand::connect(Address address)
{
- type = CONNCMD_SEND;
- peer_id = peer_id_;
- channelnum = channelnum_;
- data = pkt->oldForgePacket();
- reliable = reliable_;
+ auto c = create(CONNCMD_CONNECT);
+ c->address = address;
+ return c;
+}
+
+ConnectionCommandPtr ConnectionCommand::disconnect()
+{
+ return create(CONNCMD_DISCONNECT);
+}
+
+ConnectionCommandPtr ConnectionCommand::disconnect_peer(session_t peer_id)
+{
+ auto c = create(CONNCMD_DISCONNECT_PEER);
+ c->peer_id = peer_id;
+ return c;
+}
+
+ConnectionCommandPtr ConnectionCommand::send(session_t peer_id, u8 channelnum,
+ NetworkPacket *pkt, bool reliable)
+{
+ auto c = create(CONNCMD_SEND);
+ c->peer_id = peer_id;
+ c->channelnum = channelnum;
+ c->reliable = reliable;
+ c->data = pkt->oldForgePacket();
+ return c;
+}
+
+ConnectionCommandPtr ConnectionCommand::ack(session_t peer_id, u8 channelnum, const Buffer<u8> &data)
+{
+ auto c = create(CONCMD_ACK);
+ c->peer_id = peer_id;
+ c->channelnum = channelnum;
+ c->reliable = false;
+ data.copyTo(c->data);
+ return c;
+}
+
+ConnectionCommandPtr ConnectionCommand::createPeer(session_t peer_id, const Buffer<u8> &data)
+{
+ auto c = create(CONCMD_CREATE_PEER);
+ c->peer_id = peer_id;
+ c->channelnum = 0;
+ c->reliable = true;
+ c->raw = true;
+ data.copyTo(c->data);
+ return c;
}
/*
@@ -562,39 +623,38 @@ void Channel::setNextSplitSeqNum(u16 seqnum)
u16 Channel::getOutgoingSequenceNumber(bool& successful)
{
MutexAutoLock internal(m_internal_mutex);
+
u16 retval = next_outgoing_seqnum;
- u16 lowest_unacked_seqnumber;
+ successful = false;
/* shortcut if there ain't any packet in outgoing list */
- if (outgoing_reliables_sent.empty())
- {
+ if (outgoing_reliables_sent.empty()) {
+ successful = true;
next_outgoing_seqnum++;
return retval;
}
- if (outgoing_reliables_sent.getFirstSeqnum(lowest_unacked_seqnumber))
- {
+ u16 lowest_unacked_seqnumber;
+ if (outgoing_reliables_sent.getFirstSeqnum(lowest_unacked_seqnumber)) {
if (lowest_unacked_seqnumber < next_outgoing_seqnum) {
// ugly cast but this one is required in order to tell compiler we
// know about difference of two unsigned may be negative in general
// but we already made sure it won't happen in this case
- if (((u16)(next_outgoing_seqnum - lowest_unacked_seqnumber)) > window_size) {
- successful = false;
+ if (((u16)(next_outgoing_seqnum - lowest_unacked_seqnumber)) > m_window_size) {
return 0;
}
- }
- else {
+ } else {
// ugly cast but this one is required in order to tell compiler we
// know about difference of two unsigned may be negative in general
// but we already made sure it won't happen in this case
if ((next_outgoing_seqnum + (u16)(SEQNUM_MAX - lowest_unacked_seqnumber)) >
- window_size) {
- successful = false;
+ m_window_size) {
return 0;
}
}
}
+ successful = true;
next_outgoing_seqnum++;
return retval;
}
@@ -666,7 +726,7 @@ void Channel::UpdateTimers(float dtime)
//packet_too_late = current_packet_too_late;
packets_successful = current_packet_successful;
- if (current_bytes_transfered > (unsigned int) (window_size*512/2)) {
+ if (current_bytes_transfered > (unsigned int) (m_window_size*512/2)) {
reasonable_amount_of_data_transmitted = true;
}
current_packet_loss = 0;
@@ -681,37 +741,25 @@ void Channel::UpdateTimers(float dtime)
if (packets_successful > 0) {
successful_to_lost_ratio = packet_loss/packets_successful;
} else if (packet_loss > 0) {
- window_size = std::max(
- (window_size - 10),
- MIN_RELIABLE_WINDOW_SIZE);
+ setWindowSize(m_window_size - 10);
done = true;
}
if (!done) {
- if ((successful_to_lost_ratio < 0.01f) &&
- (window_size < MAX_RELIABLE_WINDOW_SIZE)) {
+ if (successful_to_lost_ratio < 0.01f) {
/* don't even think about increasing if we didn't even
* use major parts of our window */
if (reasonable_amount_of_data_transmitted)
- window_size = std::min(
- (window_size + 100),
- MAX_RELIABLE_WINDOW_SIZE);
- } else if ((successful_to_lost_ratio < 0.05f) &&
- (window_size < MAX_RELIABLE_WINDOW_SIZE)) {
+ setWindowSize(m_window_size + 100);
+ } else if (successful_to_lost_ratio < 0.05f) {
/* don't even think about increasing if we didn't even
* use major parts of our window */
if (reasonable_amount_of_data_transmitted)
- window_size = std::min(
- (window_size + 50),
- MAX_RELIABLE_WINDOW_SIZE);
+ setWindowSize(m_window_size + 50);
} else if (successful_to_lost_ratio > 0.15f) {
- window_size = std::max(
- (window_size - 100),
- MIN_RELIABLE_WINDOW_SIZE);
+ setWindowSize(m_window_size - 100);
} else if (successful_to_lost_ratio > 0.1f) {
- window_size = std::max(
- (window_size - 50),
- MIN_RELIABLE_WINDOW_SIZE);
+ setWindowSize(m_window_size - 50);
}
}
}
@@ -958,45 +1006,45 @@ bool UDPPeer::Ping(float dtime,SharedBuffer<u8>& data)
return false;
}
-void UDPPeer::PutReliableSendCommand(ConnectionCommand &c,
+void UDPPeer::PutReliableSendCommand(ConnectionCommandPtr &c,
unsigned int max_packet_size)
{
if (m_pending_disconnect)
return;
- Channel &chan = channels[c.channelnum];
+ Channel &chan = channels[c->channelnum];
if (chan.queued_commands.empty() &&
/* don't queue more packets then window size */
- (chan.queued_reliables.size() < chan.getWindowSize() / 2)) {
+ (chan.queued_reliables.size() + 1 < chan.getWindowSize() / 2)) {
LOG(dout_con<<m_connection->getDesc()
- <<" processing reliable command for peer id: " << c.peer_id
- <<" data size: " << c.data.getSize() << std::endl);
- if (!processReliableSendCommand(c,max_packet_size)) {
- chan.queued_commands.push_back(c);
- }
- }
- else {
+ <<" processing reliable command for peer id: " << c->peer_id
+ <<" data size: " << c->data.getSize() << std::endl);
+ if (processReliableSendCommand(c, max_packet_size))
+ return;
+ } else {
LOG(dout_con<<m_connection->getDesc()
- <<" Queueing reliable command for peer id: " << c.peer_id
- <<" data size: " << c.data.getSize() <<std::endl);
- chan.queued_commands.push_back(c);
- if (chan.queued_commands.size() >= chan.getWindowSize() / 2) {
+ <<" Queueing reliable command for peer id: " << c->peer_id
+ <<" data size: " << c->data.getSize() <<std::endl);
+
+ if (chan.queued_commands.size() + 1 >= chan.getWindowSize() / 2) {
LOG(derr_con << m_connection->getDesc()
- << "Possible packet stall to peer id: " << c.peer_id
+ << "Possible packet stall to peer id: " << c->peer_id
<< " queued_commands=" << chan.queued_commands.size()
<< std::endl);
}
}
+ chan.queued_commands.push_back(c);
}
bool UDPPeer::processReliableSendCommand(
- ConnectionCommand &c,
+ ConnectionCommandPtr &c_ptr,
unsigned int max_packet_size)
{
if (m_pending_disconnect)
return true;
+ const auto &c = *c_ptr;
Channel &chan = channels[c.channelnum];
u32 chunksize_max = max_packet_size
@@ -1015,9 +1063,9 @@ bool UDPPeer::processReliableSendCommand(
chan.setNextSplitSeqNum(split_sequence_number);
}
- bool have_sequence_number = true;
+ bool have_sequence_number = false;
bool have_initial_sequence_number = false;
- std::queue<BufferedPacket> toadd;
+ std::queue<BufferedPacketPtr> toadd;
volatile u16 initial_sequence_number = 0;
for (SharedBuffer<u8> &original : originals) {
@@ -1036,25 +1084,23 @@ bool UDPPeer::processReliableSendCommand(
SharedBuffer<u8> reliable = makeReliablePacket(original, seqnum);
// Add base headers and make a packet
- BufferedPacket p = con::makePacket(address, reliable,
+ BufferedPacketPtr p = con::makePacket(address, reliable,
m_connection->GetProtocolID(), m_connection->GetPeerID(),
c.channelnum);
- toadd.push(std::move(p));
+ toadd.push(p);
}
if (have_sequence_number) {
- volatile u16 pcount = 0;
while (!toadd.empty()) {
- BufferedPacket p = std::move(toadd.front());
+ BufferedPacketPtr p = toadd.front();
toadd.pop();
// LOG(dout_con<<connection->getDesc()
// << " queuing reliable packet for peer_id: " << c.peer_id
// << " channel: " << (c.channelnum&0xFF)
// << " seqnum: " << readU16(&p.data[BASE_HEADER_SIZE+1])
// << std::endl)
- chan.queued_reliables.push(std::move(p));
- pcount++;
+ chan.queued_reliables.push(p);
}
sanity_check(chan.queued_reliables.size() < 0xFFFF);
return true;
@@ -1063,6 +1109,7 @@ bool UDPPeer::processReliableSendCommand(
volatile u16 packets_available = toadd.size();
/* we didn't get a single sequence number no need to fill queue */
if (!have_initial_sequence_number) {
+ LOG(derr_con << m_connection->getDesc() << "Ran out of sequence numbers!" << std::endl);
return false;
}
@@ -1108,18 +1155,18 @@ void UDPPeer::RunCommandQueues(
(channel.queued_reliables.size() < maxtransfer) &&
(commands_processed < maxcommands)) {
try {
- ConnectionCommand c = channel.queued_commands.front();
+ ConnectionCommandPtr c = channel.queued_commands.front();
LOG(dout_con << m_connection->getDesc()
<< " processing queued reliable command " << std::endl);
// Packet is processed, remove it from queue
- if (processReliableSendCommand(c,max_packet_size)) {
+ if (processReliableSendCommand(c, max_packet_size)) {
channel.queued_commands.pop_front();
} else {
LOG(dout_con << m_connection->getDesc()
- << " Failed to queue packets for peer_id: " << c.peer_id
- << ", delaying sending of " << c.data.getSize()
+ << " Failed to queue packets for peer_id: " << c->peer_id
+ << ", delaying sending of " << c->data.getSize()
<< " bytes" << std::endl);
}
}
@@ -1142,7 +1189,7 @@ void UDPPeer::setNextSplitSequenceNumber(u8 channel, u16 seqnum)
channels[channel].setNextSplitSeqNum(seqnum);
}
-SharedBuffer<u8> UDPPeer::addSplitPacket(u8 channel, const BufferedPacket &toadd,
+SharedBuffer<u8> UDPPeer::addSplitPacket(u8 channel, BufferedPacketPtr &toadd,
bool reliable)
{
assert(channel < CHANNEL_COUNT); // Pre-condition
@@ -1150,6 +1197,63 @@ SharedBuffer<u8> UDPPeer::addSplitPacket(u8 channel, const BufferedPacket &toadd
}
/*
+ ConnectionEvent
+*/
+
+const char *ConnectionEvent::describe() const
+{
+ switch(type) {
+ case CONNEVENT_NONE:
+ return "CONNEVENT_NONE";
+ case CONNEVENT_DATA_RECEIVED:
+ return "CONNEVENT_DATA_RECEIVED";
+ case CONNEVENT_PEER_ADDED:
+ return "CONNEVENT_PEER_ADDED";
+ case CONNEVENT_PEER_REMOVED:
+ return "CONNEVENT_PEER_REMOVED";
+ case CONNEVENT_BIND_FAILED:
+ return "CONNEVENT_BIND_FAILED";
+ }
+ return "Invalid ConnectionEvent";
+}
+
+
+ConnectionEventPtr ConnectionEvent::create(ConnectionEventType type)
+{
+ return std::shared_ptr<ConnectionEvent>(new ConnectionEvent(type));
+}
+
+ConnectionEventPtr ConnectionEvent::dataReceived(session_t peer_id, const Buffer<u8> &data)
+{
+ auto e = create(CONNEVENT_DATA_RECEIVED);
+ e->peer_id = peer_id;
+ data.copyTo(e->data);
+ return e;
+}
+
+ConnectionEventPtr ConnectionEvent::peerAdded(session_t peer_id, Address address)
+{
+ auto e = create(CONNEVENT_PEER_ADDED);
+ e->peer_id = peer_id;
+ e->address = address;
+ return e;
+}
+
+ConnectionEventPtr ConnectionEvent::peerRemoved(session_t peer_id, bool is_timeout, Address address)
+{
+ auto e = create(CONNEVENT_PEER_REMOVED);
+ e->peer_id = peer_id;
+ e->timeout = is_timeout;
+ e->address = address;
+ return e;
+}
+
+ConnectionEventPtr ConnectionEvent::bindFailed()
+{
+ return create(CONNEVENT_BIND_FAILED);
+}
+
+/*
Connection
*/
@@ -1198,18 +1302,12 @@ Connection::~Connection()
/* Internal stuff */
-void Connection::putEvent(const ConnectionEvent &e)
+void Connection::putEvent(ConnectionEventPtr e)
{
- assert(e.type != CONNEVENT_NONE); // Pre-condition
+ assert(e->type != CONNEVENT_NONE); // Pre-condition
m_event_queue.push_back(e);
}
-void Connection::putEvent(ConnectionEvent &&e)
-{
- assert(e.type != CONNEVENT_NONE); // Pre-condition
- m_event_queue.push_back(std::move(e));
-}
-
void Connection::TriggerSend()
{
m_sendThread->Trigger();
@@ -1272,11 +1370,9 @@ bool Connection::deletePeer(session_t peer_id, bool timeout)
Address peer_address;
//any peer has a primary address this never fails!
peer->getAddress(MTP_PRIMARY, peer_address);
- // Create event
- ConnectionEvent e;
- e.peerRemoved(peer_id, timeout, peer_address);
- putEvent(e);
+ // Create event
+ putEvent(ConnectionEvent::peerRemoved(peer_id, timeout, peer_address));
peer->Drop();
return true;
@@ -1284,18 +1380,16 @@ bool Connection::deletePeer(session_t peer_id, bool timeout)
/* Interface */
-ConnectionEvent Connection::waitEvent(u32 timeout_ms)
+ConnectionEventPtr Connection::waitEvent(u32 timeout_ms)
{
try {
return m_event_queue.pop_front(timeout_ms);
} catch(ItemNotFoundException &ex) {
- ConnectionEvent e;
- e.type = CONNEVENT_NONE;
- return e;
+ return ConnectionEvent::create(CONNEVENT_NONE);
}
}
-void Connection::putCommand(const ConnectionCommand &c)
+void Connection::putCommand(ConnectionCommandPtr c)
{
if (!m_shutting_down) {
m_command_queue.push_back(c);
@@ -1303,26 +1397,14 @@ void Connection::putCommand(const ConnectionCommand &c)
}
}
-void Connection::putCommand(ConnectionCommand &&c)
-{
- if (!m_shutting_down) {
- m_command_queue.push_back(std::move(c));
- m_sendThread->Trigger();
- }
-}
-
void Connection::Serve(Address bind_addr)
{
- ConnectionCommand c;
- c.serve(bind_addr);
- putCommand(c);
+ putCommand(ConnectionCommand::serve(bind_addr));
}
void Connection::Connect(Address address)
{
- ConnectionCommand c;
- c.connect(address);
- putCommand(c);
+ putCommand(ConnectionCommand::connect(address));
}
bool Connection::Connected()
@@ -1344,9 +1426,7 @@ bool Connection::Connected()
void Connection::Disconnect()
{
- ConnectionCommand c;
- c.disconnect();
- putCommand(c);
+ putCommand(ConnectionCommand::disconnect());
}
bool Connection::Receive(NetworkPacket *pkt, u32 timeout)
@@ -1357,11 +1437,15 @@ bool Connection::Receive(NetworkPacket *pkt, u32 timeout)
This is not considered to be a problem (is it?)
*/
for(;;) {
- ConnectionEvent e = waitEvent(timeout);
- if (e.type != CONNEVENT_NONE)
+ ConnectionEventPtr e_ptr = waitEvent(timeout);
+ const ConnectionEvent &e = *e_ptr;
+
+ if (e.type != CONNEVENT_NONE) {
LOG(dout_con << getDesc() << ": Receive: got event: "
<< e.describe() << std::endl);
- switch(e.type) {
+ }
+
+ switch (e.type) {
case CONNEVENT_NONE:
return false;
case CONNEVENT_DATA_RECEIVED:
@@ -1409,10 +1493,7 @@ void Connection::Send(session_t peer_id, u8 channelnum,
{
assert(channelnum < CHANNEL_COUNT); // Pre-condition
- ConnectionCommand c;
-
- c.send(peer_id, channelnum, pkt, reliable);
- putCommand(std::move(c));
+ putCommand(ConnectionCommand::send(peer_id, channelnum, pkt, reliable));
}
Address Connection::GetPeerAddress(session_t peer_id)
@@ -1511,41 +1592,31 @@ u16 Connection::createPeer(Address& sender, MTProtocols protocol, int fd)
LOG(dout_con << getDesc()
<< "createPeer(): giving peer_id=" << peer_id_new << std::endl);
- ConnectionCommand cmd;
- Buffer<u8> reply(4);
- writeU8(&reply[0], PACKET_TYPE_CONTROL);
- writeU8(&reply[1], CONTROLTYPE_SET_PEER_ID);
- writeU16(&reply[2], peer_id_new);
- cmd.createPeer(peer_id_new,reply);
- putCommand(std::move(cmd));
+ {
+ Buffer<u8> reply(4);
+ writeU8(&reply[0], PACKET_TYPE_CONTROL);
+ writeU8(&reply[1], CONTROLTYPE_SET_PEER_ID);
+ writeU16(&reply[2], peer_id_new);
+ putCommand(ConnectionCommand::createPeer(peer_id_new, reply));
+ }
// Create peer addition event
- ConnectionEvent e;
- e.peerAdded(peer_id_new, sender);
- putEvent(e);
+ putEvent(ConnectionEvent::peerAdded(peer_id_new, sender));
// We're now talking to a valid peer_id
return peer_id_new;
}
-void Connection::PrintInfo(std::ostream &out)
-{
- m_info_mutex.lock();
- out<<getDesc()<<": ";
- m_info_mutex.unlock();
-}
-
const std::string Connection::getDesc()
{
+ MutexAutoLock _(m_info_mutex);
return std::string("con(")+
itos(m_udpSocket.GetHandle())+"/"+itos(m_peer_id)+")";
}
void Connection::DisconnectPeer(session_t peer_id)
{
- ConnectionCommand discon;
- discon.disconnect_peer(peer_id);
- putCommand(discon);
+ putCommand(ConnectionCommand::disconnect_peer(peer_id));
}
void Connection::sendAck(session_t peer_id, u8 channelnum, u16 seqnum)
@@ -1557,14 +1628,12 @@ void Connection::sendAck(session_t peer_id, u8 channelnum, u16 seqnum)
" channel: " << (channelnum & 0xFF) <<
" seqnum: " << seqnum << std::endl);
- ConnectionCommand c;
SharedBuffer<u8> ack(4);
writeU8(&ack[0], PACKET_TYPE_CONTROL);
writeU8(&ack[1], CONTROLTYPE_ACK);
writeU16(&ack[2], seqnum);
- c.ack(peer_id, channelnum, ack);
- putCommand(std::move(c));
+ putCommand(ConnectionCommand::ack(peer_id, channelnum, ack));
m_sendThread->Trigger();
}
diff --git a/src/network/connection.h b/src/network/connection.h
index 49bb65c3e..1afb4ae84 100644
--- a/src/network/connection.h
+++ b/src/network/connection.h
@@ -32,6 +32,95 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include <vector>
#include <map>
+#define MAX_UDP_PEERS 65535
+
+/*
+=== NOTES ===
+
+A packet is sent through a channel to a peer with a basic header:
+ Header (7 bytes):
+ [0] u32 protocol_id
+ [4] session_t sender_peer_id
+ [6] u8 channel
+sender_peer_id:
+ Unique to each peer.
+ value 0 (PEER_ID_INEXISTENT) is reserved for making new connections
+ value 1 (PEER_ID_SERVER) is reserved for server
+ these constants are defined in constants.h
+channel:
+ Channel numbers have no intrinsic meaning. Currently only 0, 1, 2 exist.
+*/
+#define BASE_HEADER_SIZE 7
+#define CHANNEL_COUNT 3
+
+/*
+Packet types:
+
+CONTROL: This is a packet used by the protocol.
+- When this is processed, nothing is handed to the user.
+ Header (2 byte):
+ [0] u8 type
+ [1] u8 controltype
+controltype and data description:
+ CONTROLTYPE_ACK
+ [2] u16 seqnum
+ CONTROLTYPE_SET_PEER_ID
+ [2] session_t peer_id_new
+ CONTROLTYPE_PING
+ - There is no actual reply, but this can be sent in a reliable
+ packet to get a reply
+ CONTROLTYPE_DISCO
+*/
+enum ControlType : u8 {
+ CONTROLTYPE_ACK = 0,
+ CONTROLTYPE_SET_PEER_ID = 1,
+ CONTROLTYPE_PING = 2,
+ CONTROLTYPE_DISCO = 3,
+};
+
+/*
+ORIGINAL: This is a plain packet with no control and no error
+checking at all.
+- When this is processed, it is directly handed to the user.
+ Header (1 byte):
+ [0] u8 type
+*/
+//#define TYPE_ORIGINAL 1
+#define ORIGINAL_HEADER_SIZE 1
+
+/*
+SPLIT: These are sequences of packets forming one bigger piece of
+data.
+- When processed and all the packet_nums 0...packet_count-1 are
+ present (this should be buffered), the resulting data shall be
+ directly handed to the user.
+- If the data fails to come up in a reasonable time, the buffer shall
+ be silently discarded.
+- These can be sent as-is or atop of a RELIABLE packet stream.
+ Header (7 bytes):
+ [0] u8 type
+ [1] u16 seqnum
+ [3] u16 chunk_count
+ [5] u16 chunk_num
+*/
+//#define TYPE_SPLIT 2
+
+/*
+RELIABLE: Delivery of all RELIABLE packets shall be forced by ACKs,
+and they shall be delivered in the same order as sent. This is done
+with a buffer in the receiving and transmitting end.
+- When this is processed, the contents of each packet is recursively
+ processed as packets.
+ Header (3 bytes):
+ [0] u8 type
+ [1] u16 seqnum
+
+*/
+//#define TYPE_RELIABLE 3
+#define RELIABLE_HEADER_SIZE 3
+#define SEQNUM_INITIAL 65500
+#define SEQNUM_MAX 65535
+
class NetworkPacket;
namespace con
@@ -46,9 +135,13 @@ typedef enum MTProtocols {
MTP_MINETEST_RELIABLE_UDP
} MTProtocols;
-#define MAX_UDP_PEERS 65535
-
-#define SEQNUM_MAX 65535
+enum PacketType : u8 {
+ PACKET_TYPE_CONTROL = 0,
+ PACKET_TYPE_ORIGINAL = 1,
+ PACKET_TYPE_SPLIT = 2,
+ PACKET_TYPE_RELIABLE = 3,
+ PACKET_TYPE_MAX
+};
inline bool seqnum_higher(u16 totest, u16 base)
{
@@ -85,24 +178,40 @@ static inline float CALC_DTIME(u64 lasttime, u64 curtime)
return MYMAX(MYMIN(value,0.1),0.0);
}
-struct BufferedPacket
-{
- BufferedPacket(u8 *a_data, u32 a_size):
- data(a_data, a_size)
- {}
- BufferedPacket(u32 a_size):
- data(a_size)
- {}
- Buffer<u8> data; // Data of the packet, including headers
+/*
+ Struct for all kinds of packets. Includes following data:
+ BASE_HEADER
+ u8[] packet data (usually copied from SharedBuffer<u8>)
+*/
+struct BufferedPacket {
+ BufferedPacket(u32 a_size)
+ {
+ m_data.resize(a_size);
+ data = &m_data[0];
+ }
+
+ DISABLE_CLASS_COPY(BufferedPacket)
+
+ u16 getSeqnum() const;
+
+ inline const size_t size() const { return m_data.size(); }
+
+ u8 *data; // Direct memory access
float time = 0.0f; // Seconds from buffering the packet or re-sending
float totaltime = 0.0f; // Seconds from buffering the packet
u64 absolute_send_time = -1;
Address address; // Sender or destination
unsigned int resend_count = 0;
+
+private:
+ std::vector<u8> m_data; // Data of the packet, including headers
};
+typedef std::shared_ptr<BufferedPacket> BufferedPacketPtr;
+
+
// This adds the base headers to the data and makes a packet out of it
-BufferedPacket makePacket(Address &address, const SharedBuffer<u8> &data,
+BufferedPacketPtr makePacket(Address &address, const SharedBuffer<u8> &data,
u32 protocol_id, session_t sender_peer_id, u8 channel);
// Depending on size, make a TYPE_ORIGINAL or TYPE_SPLIT packet
@@ -137,100 +246,11 @@ private:
};
/*
-=== NOTES ===
-
-A packet is sent through a channel to a peer with a basic header:
- Header (7 bytes):
- [0] u32 protocol_id
- [4] session_t sender_peer_id
- [6] u8 channel
-sender_peer_id:
- Unique to each peer.
- value 0 (PEER_ID_INEXISTENT) is reserved for making new connections
- value 1 (PEER_ID_SERVER) is reserved for server
- these constants are defined in constants.h
-channel:
- Channel numbers have no intrinsic meaning. Currently only 0, 1, 2 exist.
-*/
-#define BASE_HEADER_SIZE 7
-#define CHANNEL_COUNT 3
-/*
-Packet types:
-
-CONTROL: This is a packet used by the protocol.
-- When this is processed, nothing is handed to the user.
- Header (2 byte):
- [0] u8 type
- [1] u8 controltype
-controltype and data description:
- CONTROLTYPE_ACK
- [2] u16 seqnum
- CONTROLTYPE_SET_PEER_ID
- [2] session_t peer_id_new
- CONTROLTYPE_PING
- - There is no actual reply, but this can be sent in a reliable
- packet to get a reply
- CONTROLTYPE_DISCO
-*/
-//#define TYPE_CONTROL 0
-#define CONTROLTYPE_ACK 0
-#define CONTROLTYPE_SET_PEER_ID 1
-#define CONTROLTYPE_PING 2
-#define CONTROLTYPE_DISCO 3
-
-/*
-ORIGINAL: This is a plain packet with no control and no error
-checking at all.
-- When this is processed, it is directly handed to the user.
- Header (1 byte):
- [0] u8 type
-*/
-//#define TYPE_ORIGINAL 1
-#define ORIGINAL_HEADER_SIZE 1
-/*
-SPLIT: These are sequences of packets forming one bigger piece of
-data.
-- When processed and all the packet_nums 0...packet_count-1 are
- present (this should be buffered), the resulting data shall be
- directly handed to the user.
-- If the data fails to come up in a reasonable time, the buffer shall
- be silently discarded.
-- These can be sent as-is or atop of a RELIABLE packet stream.
- Header (7 bytes):
- [0] u8 type
- [1] u16 seqnum
- [3] u16 chunk_count
- [5] u16 chunk_num
-*/
-//#define TYPE_SPLIT 2
-/*
-RELIABLE: Delivery of all RELIABLE packets shall be forced by ACKs,
-and they shall be delivered in the same order as sent. This is done
-with a buffer in the receiving and transmitting end.
-- When this is processed, the contents of each packet is recursively
- processed as packets.
- Header (3 bytes):
- [0] u8 type
- [1] u16 seqnum
-
-*/
-//#define TYPE_RELIABLE 3
-#define RELIABLE_HEADER_SIZE 3
-#define SEQNUM_INITIAL 65500
-
-enum PacketType: u8 {
- PACKET_TYPE_CONTROL = 0,
- PACKET_TYPE_ORIGINAL = 1,
- PACKET_TYPE_SPLIT = 2,
- PACKET_TYPE_RELIABLE = 3,
- PACKET_TYPE_MAX
-};
-/*
A buffer which stores reliable packets and sorts them internally
for fast access to the smallest one.
*/
-typedef std::list<BufferedPacket>::iterator RPBSearchResult;
+typedef std::list<BufferedPacketPtr>::iterator RPBSearchResult;
class ReliablePacketBuffer
{
@@ -239,12 +259,12 @@ public:
bool getFirstSeqnum(u16& result);
- BufferedPacket popFirst();
- BufferedPacket popSeqnum(u16 seqnum);
- void insert(const BufferedPacket &p, u16 next_expected);
+ BufferedPacketPtr popFirst();
+ BufferedPacketPtr popSeqnum(u16 seqnum);
+ void insert(BufferedPacketPtr &p_ptr, u16 next_expected);
void incrementTimeouts(float dtime);
- std::list<BufferedPacket> getTimedOuts(float timeout, u32 max_packets);
+ std::list<ConstSharedPtr<BufferedPacket>> getTimedOuts(float timeout, u32 max_packets);
void print();
bool empty();
@@ -252,10 +272,9 @@ public:
private:
- RPBSearchResult findPacket(u16 seqnum); // does not perform locking
- inline RPBSearchResult notFound() { return m_list.end(); }
+ RPBSearchResult findPacketNoLock(u16 seqnum);
- std::list<BufferedPacket> m_list;
+ std::list<BufferedPacketPtr> m_list;
u16 m_oldest_non_answered_ack;
@@ -274,7 +293,7 @@ public:
Returns a reference counted buffer of length != 0 when a full split
packet is constructed. If not, returns one of length 0.
*/
- SharedBuffer<u8> insert(const BufferedPacket &p, bool reliable);
+ SharedBuffer<u8> insert(BufferedPacketPtr &p_ptr, bool reliable);
void removeUnreliableTimedOuts(float dtime, float timeout);
@@ -285,25 +304,6 @@ private:
std::mutex m_map_mutex;
};
-struct OutgoingPacket
-{
- session_t peer_id;
- u8 channelnum;
- SharedBuffer<u8> data;
- bool reliable;
- bool ack;
-
- OutgoingPacket(session_t peer_id_, u8 channelnum_, const SharedBuffer<u8> &data_,
- bool reliable_,bool ack_=false):
- peer_id(peer_id_),
- channelnum(channelnum_),
- data(data_),
- reliable(reliable_),
- ack(ack_)
- {
- }
-};
-
enum ConnectionCommandType{
CONNCMD_NONE,
CONNCMD_SERVE,
@@ -316,9 +316,13 @@ enum ConnectionCommandType{
CONCMD_CREATE_PEER
};
+struct ConnectionCommand;
+typedef std::shared_ptr<ConnectionCommand> ConnectionCommandPtr;
+
+// This is very similar to ConnectionEvent
struct ConnectionCommand
{
- enum ConnectionCommandType type = CONNCMD_NONE;
+ const ConnectionCommandType type;
Address address;
session_t peer_id = PEER_ID_INEXISTENT;
u8 channelnum = 0;
@@ -326,48 +330,21 @@ struct ConnectionCommand
bool reliable = false;
bool raw = false;
- ConnectionCommand() = default;
+ DISABLE_CLASS_COPY(ConnectionCommand);
- void serve(Address address_)
- {
- type = CONNCMD_SERVE;
- address = address_;
- }
- void connect(Address address_)
- {
- type = CONNCMD_CONNECT;
- address = address_;
- }
- void disconnect()
- {
- type = CONNCMD_DISCONNECT;
- }
- void disconnect_peer(session_t peer_id_)
- {
- type = CONNCMD_DISCONNECT_PEER;
- peer_id = peer_id_;
- }
-
- void send(session_t peer_id_, u8 channelnum_, NetworkPacket *pkt, bool reliable_);
+ static ConnectionCommandPtr serve(Address address);
+ static ConnectionCommandPtr connect(Address address);
+ static ConnectionCommandPtr disconnect();
+ static ConnectionCommandPtr disconnect_peer(session_t peer_id);
+ static ConnectionCommandPtr send(session_t peer_id, u8 channelnum, NetworkPacket *pkt, bool reliable);
+ static ConnectionCommandPtr ack(session_t peer_id, u8 channelnum, const Buffer<u8> &data);
+ static ConnectionCommandPtr createPeer(session_t peer_id, const Buffer<u8> &data);
- void ack(session_t peer_id_, u8 channelnum_, const Buffer<u8> &data_)
- {
- type = CONCMD_ACK;
- peer_id = peer_id_;
- channelnum = channelnum_;
- data = data_;
- reliable = false;
- }
+private:
+ ConnectionCommand(ConnectionCommandType type_) :
+ type(type_) {}
- void createPeer(session_t peer_id_, const Buffer<u8> &data_)
- {
- type = CONCMD_CREATE_PEER;
- peer_id = peer_id_;
- data = data_;
- channelnum = 0;
- reliable = true;
- raw = true;
- }
+ static ConnectionCommandPtr create(ConnectionCommandType type);
};
/* maximum window size to use, 0xFFFF is theoretical maximum. don't think about
@@ -402,10 +379,10 @@ public:
ReliablePacketBuffer outgoing_reliables_sent;
//queued reliable packets
- std::queue<BufferedPacket> queued_reliables;
+ std::queue<BufferedPacketPtr> queued_reliables;
//queue commands prior splitting to packets
- std::deque<ConnectionCommand> queued_commands;
+ std::deque<ConnectionCommandPtr> queued_commands;
IncomingSplitBuffer incoming_splits;
@@ -420,34 +397,38 @@ public:
void UpdateTimers(float dtime);
- const float getCurrentDownloadRateKB()
+ float getCurrentDownloadRateKB()
{ MutexAutoLock lock(m_internal_mutex); return cur_kbps; };
- const float getMaxDownloadRateKB()
+ float getMaxDownloadRateKB()
{ MutexAutoLock lock(m_internal_mutex); return max_kbps; };
- const float getCurrentLossRateKB()
+ float getCurrentLossRateKB()
{ MutexAutoLock lock(m_internal_mutex); return cur_kbps_lost; };
- const float getMaxLossRateKB()
+ float getMaxLossRateKB()
{ MutexAutoLock lock(m_internal_mutex); return max_kbps_lost; };
- const float getCurrentIncomingRateKB()
+ float getCurrentIncomingRateKB()
{ MutexAutoLock lock(m_internal_mutex); return cur_incoming_kbps; };
- const float getMaxIncomingRateKB()
+ float getMaxIncomingRateKB()
{ MutexAutoLock lock(m_internal_mutex); return max_incoming_kbps; };
- const float getAvgDownloadRateKB()
+ float getAvgDownloadRateKB()
{ MutexAutoLock lock(m_internal_mutex); return avg_kbps; };
- const float getAvgLossRateKB()
+ float getAvgLossRateKB()
{ MutexAutoLock lock(m_internal_mutex); return avg_kbps_lost; };
- const float getAvgIncomingRateKB()
+ float getAvgIncomingRateKB()
{ MutexAutoLock lock(m_internal_mutex); return avg_incoming_kbps; };
- const unsigned int getWindowSize() const { return window_size; };
+ u16 getWindowSize() const { return m_window_size; };
+
+ void setWindowSize(long size)
+ {
+ m_window_size = (u16)rangelim(size, MIN_RELIABLE_WINDOW_SIZE, MAX_RELIABLE_WINDOW_SIZE);
+ }
- void setWindowSize(unsigned int size) { window_size = size; };
private:
std::mutex m_internal_mutex;
- int window_size = MIN_RELIABLE_WINDOW_SIZE;
+ u16 m_window_size = MIN_RELIABLE_WINDOW_SIZE;
u16 next_incoming_seqnum = SEQNUM_INITIAL;
@@ -510,7 +491,7 @@ class Peer {
public:
friend class PeerHelper;
- Peer(Address address_,u16 id_,Connection* connection) :
+ Peer(Address address_,session_t id_,Connection* connection) :
id(id_),
m_connection(connection),
address(address_),
@@ -524,11 +505,11 @@ class Peer {
};
// Unique id of the peer
- u16 id;
+ const session_t id;
void Drop();
- virtual void PutReliableSendCommand(ConnectionCommand &c,
+ virtual void PutReliableSendCommand(ConnectionCommandPtr &c,
unsigned int max_packet_size) {};
virtual bool getAddress(MTProtocols type, Address& toset) = 0;
@@ -545,7 +526,7 @@ class Peer {
virtual u16 getNextSplitSequenceNumber(u8 channel) { return 0; };
virtual void setNextSplitSequenceNumber(u8 channel, u16 seqnum) {};
- virtual SharedBuffer<u8> addSplitPacket(u8 channel, const BufferedPacket &toadd,
+ virtual SharedBuffer<u8> addSplitPacket(u8 channel, BufferedPacketPtr &toadd,
bool reliable)
{
errorstream << "Peer::addSplitPacket called,"
@@ -582,7 +563,7 @@ class Peer {
bool IncUseCount();
void DecUseCount();
- std::mutex m_exclusive_access_mutex;
+ mutable std::mutex m_exclusive_access_mutex;
bool m_pending_deletion = false;
@@ -630,7 +611,7 @@ public:
UDPPeer(u16 a_id, Address a_address, Connection* connection);
virtual ~UDPPeer() = default;
- void PutReliableSendCommand(ConnectionCommand &c,
+ void PutReliableSendCommand(ConnectionCommandPtr &c,
unsigned int max_packet_size);
bool getAddress(MTProtocols type, Address& toset);
@@ -638,7 +619,7 @@ public:
u16 getNextSplitSequenceNumber(u8 channel);
void setNextSplitSequenceNumber(u8 channel, u16 seqnum);
- SharedBuffer<u8> addSplitPacket(u8 channel, const BufferedPacket &toadd,
+ SharedBuffer<u8> addSplitPacket(u8 channel, BufferedPacketPtr &toadd,
bool reliable);
protected:
@@ -667,7 +648,7 @@ private:
float resend_timeout = 0.5;
bool processReliableSendCommand(
- ConnectionCommand &c,
+ ConnectionCommandPtr &c_ptr,
unsigned int max_packet_size);
};
@@ -675,7 +656,7 @@ private:
Connection
*/
-enum ConnectionEventType{
+enum ConnectionEventType {
CONNEVENT_NONE,
CONNEVENT_DATA_RECEIVED,
CONNEVENT_PEER_ADDED,
@@ -683,56 +664,32 @@ enum ConnectionEventType{
CONNEVENT_BIND_FAILED,
};
+struct ConnectionEvent;
+typedef std::shared_ptr<ConnectionEvent> ConnectionEventPtr;
+
+// This is very similar to ConnectionCommand
struct ConnectionEvent
{
- enum ConnectionEventType type = CONNEVENT_NONE;
+ const ConnectionEventType type;
session_t peer_id = 0;
Buffer<u8> data;
bool timeout = false;
Address address;
- ConnectionEvent() = default;
+ // We don't want to copy "data"
+ DISABLE_CLASS_COPY(ConnectionEvent);
- const char *describe() const
- {
- switch(type) {
- case CONNEVENT_NONE:
- return "CONNEVENT_NONE";
- case CONNEVENT_DATA_RECEIVED:
- return "CONNEVENT_DATA_RECEIVED";
- case CONNEVENT_PEER_ADDED:
- return "CONNEVENT_PEER_ADDED";
- case CONNEVENT_PEER_REMOVED:
- return "CONNEVENT_PEER_REMOVED";
- case CONNEVENT_BIND_FAILED:
- return "CONNEVENT_BIND_FAILED";
- }
- return "Invalid ConnectionEvent";
- }
+ static ConnectionEventPtr create(ConnectionEventType type);
+ static ConnectionEventPtr dataReceived(session_t peer_id, const Buffer<u8> &data);
+ static ConnectionEventPtr peerAdded(session_t peer_id, Address address);
+ static ConnectionEventPtr peerRemoved(session_t peer_id, bool is_timeout, Address address);
+ static ConnectionEventPtr bindFailed();
- void dataReceived(session_t peer_id_, const Buffer<u8> &data_)
- {
- type = CONNEVENT_DATA_RECEIVED;
- peer_id = peer_id_;
- data = data_;
- }
- void peerAdded(session_t peer_id_, Address address_)
- {
- type = CONNEVENT_PEER_ADDED;
- peer_id = peer_id_;
- address = address_;
- }
- void peerRemoved(session_t peer_id_, bool timeout_, Address address_)
- {
- type = CONNEVENT_PEER_REMOVED;
- peer_id = peer_id_;
- timeout = timeout_;
- address = address_;
- }
- void bindFailed()
- {
- type = CONNEVENT_BIND_FAILED;
- }
+ const char *describe() const;
+
+private:
+ ConnectionEvent(ConnectionEventType type_) :
+ type(type_) {}
};
class PeerHandler;
@@ -748,10 +705,9 @@ public:
~Connection();
/* Interface */
- ConnectionEvent waitEvent(u32 timeout_ms);
- // Warning: creates an unnecessary copy, prefer putCommand(T&&) if possible
- void putCommand(const ConnectionCommand &c);
- void putCommand(ConnectionCommand &&c);
+ ConnectionEventPtr waitEvent(u32 timeout_ms);
+
+ void putCommand(ConnectionCommandPtr c);
void SetTimeoutMs(u32 timeout) { m_bc_receive_timeout = timeout; }
void Serve(Address bind_addr);
@@ -765,7 +721,7 @@ public:
Address GetPeerAddress(session_t peer_id);
float getPeerStat(session_t peer_id, rtt_stat_type type);
float getLocalStat(rate_stat_type type);
- const u32 GetProtocolID() const { return m_protocol_id; };
+ u32 GetProtocolID() const { return m_protocol_id; };
const std::string getDesc();
void DisconnectPeer(session_t peer_id);
@@ -781,8 +737,6 @@ protected:
void sendAck(session_t peer_id, u8 channelnum, u16 seqnum);
- void PrintInfo(std::ostream &out);
-
std::vector<session_t> getPeerIDs()
{
MutexAutoLock peerlock(m_peers_mutex);
@@ -791,13 +745,11 @@ protected:
UDPSocket m_udpSocket;
// Command queue: user -> SendThread
- MutexedQueue<ConnectionCommand> m_command_queue;
+ MutexedQueue<ConnectionCommandPtr> m_command_queue;
bool Receive(NetworkPacket *pkt, u32 timeout);
- // Warning: creates an unnecessary copy, prefer putEvent(T&&) if possible
- void putEvent(const ConnectionEvent &e);
- void putEvent(ConnectionEvent &&e);
+ void putEvent(ConnectionEventPtr e);
void TriggerSend();
@@ -807,7 +759,7 @@ protected:
}
private:
// Event queue: ReceiveThread -> user
- MutexedQueue<ConnectionEvent> m_event_queue;
+ MutexedQueue<ConnectionEventPtr> m_event_queue;
session_t m_peer_id = 0;
u32 m_protocol_id;
@@ -819,7 +771,7 @@ private:
std::unique_ptr<ConnectionSendThread> m_sendThread;
std::unique_ptr<ConnectionReceiveThread> m_receiveThread;
- std::mutex m_info_mutex;
+ mutable std::mutex m_info_mutex;
// Backwards compatibility
PeerHandler *m_bc_peerhandler;
diff --git a/src/network/connectionthreads.cpp b/src/network/connectionthreads.cpp
index a306ced9b..dca065ae1 100644
--- a/src/network/connectionthreads.cpp
+++ b/src/network/connectionthreads.cpp
@@ -50,11 +50,11 @@ std::mutex log_conthread_mutex;
#define WINDOW_SIZE 5
-static session_t readPeerId(u8 *packetdata)
+static session_t readPeerId(const u8 *packetdata)
{
return readU16(&packetdata[4]);
}
-static u8 readChannel(u8 *packetdata)
+static u8 readChannel(const u8 *packetdata)
{
return readU8(&packetdata[6]);
}
@@ -114,9 +114,9 @@ void *ConnectionSendThread::run()
}
/* translate commands to packets */
- ConnectionCommand c = m_connection->m_command_queue.pop_frontNoEx(0);
- while (c.type != CONNCMD_NONE) {
- if (c.reliable)
+ auto c = m_connection->m_command_queue.pop_frontNoEx(0);
+ while (c && c->type != CONNCMD_NONE) {
+ if (c->reliable)
processReliableCommand(c);
else
processNonReliableCommand(c);
@@ -227,21 +227,21 @@ void ConnectionSendThread::runTimeouts(float dtime)
m_iteration_packets_avaialble -= timed_outs.size();
for (const auto &k : timed_outs) {
- u8 channelnum = readChannel(*k.data);
- u16 seqnum = readU16(&(k.data[BASE_HEADER_SIZE + 1]));
+ u8 channelnum = readChannel(k->data);
+ u16 seqnum = k->getSeqnum();
- channel.UpdateBytesLost(k.data.getSize());
+ channel.UpdateBytesLost(k->size());
LOG(derr_con << m_connection->getDesc()
<< "RE-SENDING timed-out RELIABLE to "
- << k.address.serializeString()
+ << k->address.serializeString()
<< "(t/o=" << resend_timeout << "): "
- << "count=" << k.resend_count
+ << "count=" << k->resend_count
<< ", channel=" << ((int) channelnum & 0xff)
<< ", seqnum=" << seqnum
<< std::endl);
- rawSend(k);
+ rawSend(k.get());
// do not handle rtt here as we can't decide if this packet was
// lost or really takes more time to transmit
@@ -274,25 +274,24 @@ void ConnectionSendThread::runTimeouts(float dtime)
}
}
-void ConnectionSendThread::rawSend(const BufferedPacket &packet)
+void ConnectionSendThread::rawSend(const BufferedPacket *p)
{
try {
- m_connection->m_udpSocket.Send(packet.address, *packet.data,
- packet.data.getSize());
+ m_connection->m_udpSocket.Send(p->address, p->data, p->size());
LOG(dout_con << m_connection->getDesc()
- << " rawSend: " << packet.data.getSize()
+ << " rawSend: " << p->size()
<< " bytes sent" << std::endl);
} catch (SendFailedException &e) {
LOG(derr_con << m_connection->getDesc()
<< "Connection::rawSend(): SendFailedException: "
- << packet.address.serializeString() << std::endl);
+ << p->address.serializeString() << std::endl);
}
}
-void ConnectionSendThread::sendAsPacketReliable(BufferedPacket &p, Channel *channel)
+void ConnectionSendThread::sendAsPacketReliable(BufferedPacketPtr &p, Channel *channel)
{
try {
- p.absolute_send_time = porting::getTimeMs();
+ p->absolute_send_time = porting::getTimeMs();
// Buffer the packet
channel->outgoing_reliables_sent.insert(p,
(channel->readOutgoingSequenceNumber() - MAX_RELIABLE_WINDOW_SIZE)
@@ -305,7 +304,7 @@ void ConnectionSendThread::sendAsPacketReliable(BufferedPacket &p, Channel *chan
}
// Send the packet
- rawSend(p);
+ rawSend(p.get());
}
bool ConnectionSendThread::rawSendAsPacket(session_t peer_id, u8 channelnum,
@@ -321,11 +320,10 @@ bool ConnectionSendThread::rawSendAsPacket(session_t peer_id, u8 channelnum,
Channel *channel = &(dynamic_cast<UDPPeer *>(&peer)->channels[channelnum]);
if (reliable) {
- bool have_sequence_number_for_raw_packet = true;
- u16 seqnum =
- channel->getOutgoingSequenceNumber(have_sequence_number_for_raw_packet);
+ bool have_seqnum = false;
+ const u16 seqnum = channel->getOutgoingSequenceNumber(have_seqnum);
- if (!have_sequence_number_for_raw_packet)
+ if (!have_seqnum)
return false;
SharedBuffer<u8> reliable = makeReliablePacket(data, seqnum);
@@ -333,13 +331,12 @@ bool ConnectionSendThread::rawSendAsPacket(session_t peer_id, u8 channelnum,
peer->getAddress(MTP_MINETEST_RELIABLE_UDP, peer_address);
// Add base headers and make a packet
- BufferedPacket p = con::makePacket(peer_address, reliable,
+ BufferedPacketPtr p = con::makePacket(peer_address, reliable,
m_connection->GetProtocolID(), m_connection->GetPeerID(),
channelnum);
// first check if our send window is already maxed out
- if (channel->outgoing_reliables_sent.size()
- < channel->getWindowSize()) {
+ if (channel->outgoing_reliables_sent.size() < channel->getWindowSize()) {
LOG(dout_con << m_connection->getDesc()
<< " INFO: sending a reliable packet to peer_id " << peer_id
<< " channel: " << (u32)channelnum
@@ -352,19 +349,19 @@ bool ConnectionSendThread::rawSendAsPacket(session_t peer_id, u8 channelnum,
<< " INFO: queueing reliable packet for peer_id: " << peer_id
<< " channel: " << (u32)channelnum
<< " seqnum: " << seqnum << std::endl);
- channel->queued_reliables.push(std::move(p));
+ channel->queued_reliables.push(p);
return false;
}
Address peer_address;
if (peer->getAddress(MTP_UDP, peer_address)) {
// Add base headers and make a packet
- BufferedPacket p = con::makePacket(peer_address, data,
+ BufferedPacketPtr p = con::makePacket(peer_address, data,
m_connection->GetProtocolID(), m_connection->GetPeerID(),
channelnum);
// Send the packet
- rawSend(p);
+ rawSend(p.get());
return true;
}
@@ -374,11 +371,11 @@ bool ConnectionSendThread::rawSendAsPacket(session_t peer_id, u8 channelnum,
return false;
}
-void ConnectionSendThread::processReliableCommand(ConnectionCommand &c)
+void ConnectionSendThread::processReliableCommand(ConnectionCommandPtr &c)
{
- assert(c.reliable); // Pre-condition
+ assert(c->reliable); // Pre-condition
- switch (c.type) {
+ switch (c->type) {
case CONNCMD_NONE:
LOG(dout_con << m_connection->getDesc()
<< "UDP processing reliable CONNCMD_NONE" << std::endl);
@@ -399,7 +396,7 @@ void ConnectionSendThread::processReliableCommand(ConnectionCommand &c)
case CONCMD_CREATE_PEER:
LOG(dout_con << m_connection->getDesc()
<< "UDP processing reliable CONCMD_CREATE_PEER" << std::endl);
- if (!rawSendAsPacket(c.peer_id, c.channelnum, c.data, c.reliable)) {
+ if (!rawSendAsPacket(c->peer_id, c->channelnum, c->data, c->reliable)) {
/* put to queue if we couldn't send it immediately */
sendReliable(c);
}
@@ -412,13 +409,14 @@ void ConnectionSendThread::processReliableCommand(ConnectionCommand &c)
FATAL_ERROR("Got command that shouldn't be reliable as reliable command");
default:
LOG(dout_con << m_connection->getDesc()
- << " Invalid reliable command type: " << c.type << std::endl);
+ << " Invalid reliable command type: " << c->type << std::endl);
}
}
-void ConnectionSendThread::processNonReliableCommand(ConnectionCommand &c)
+void ConnectionSendThread::processNonReliableCommand(ConnectionCommandPtr &c_ptr)
{
+ const ConnectionCommand &c = *c_ptr;
assert(!c.reliable); // Pre-condition
switch (c.type) {
@@ -480,9 +478,7 @@ void ConnectionSendThread::serve(Address bind_address)
}
catch (SocketException &e) {
// Create event
- ConnectionEvent ce;
- ce.bindFailed();
- m_connection->putEvent(ce);
+ m_connection->putEvent(ConnectionEvent::bindFailed());
}
}
@@ -495,9 +491,7 @@ void ConnectionSendThread::connect(Address address)
UDPPeer *peer = m_connection->createServerPeer(address);
// Create event
- ConnectionEvent e;
- e.peerAdded(peer->id, peer->address);
- m_connection->putEvent(e);
+ m_connection->putEvent(ConnectionEvent::peerAdded(peer->id, peer->address));
Address bind_addr;
@@ -586,9 +580,9 @@ void ConnectionSendThread::send(session_t peer_id, u8 channelnum,
}
}
-void ConnectionSendThread::sendReliable(ConnectionCommand &c)
+void ConnectionSendThread::sendReliable(ConnectionCommandPtr &c)
{
- PeerHelper peer = m_connection->getPeerNoEx(c.peer_id);
+ PeerHelper peer = m_connection->getPeerNoEx(c->peer_id);
if (!peer)
return;
@@ -604,7 +598,7 @@ void ConnectionSendThread::sendToAll(u8 channelnum, const SharedBuffer<u8> &data
}
}
-void ConnectionSendThread::sendToAllReliable(ConnectionCommand &c)
+void ConnectionSendThread::sendToAllReliable(ConnectionCommandPtr &c)
{
std::vector<session_t> peerids = m_connection->getPeerIDs();
@@ -663,8 +657,12 @@ void ConnectionSendThread::sendPackets(float dtime)
// first send queued reliable packets for all peers (if possible)
for (unsigned int i = 0; i < CHANNEL_COUNT; i++) {
Channel &channel = udpPeer->channels[i];
- u16 next_to_ack = 0;
+ // Reduces logging verbosity
+ if (channel.queued_reliables.empty())
+ continue;
+
+ u16 next_to_ack = 0;
channel.outgoing_reliables_sent.getFirstSeqnum(next_to_ack);
u16 next_to_receive = 0;
channel.incoming_reliables.getFirstSeqnum(next_to_receive);
@@ -694,13 +692,13 @@ void ConnectionSendThread::sendPackets(float dtime)
channel.outgoing_reliables_sent.size()
< channel.getWindowSize() &&
peer->m_increment_packets_remaining > 0) {
- BufferedPacket p = std::move(channel.queued_reliables.front());
+ BufferedPacketPtr p = channel.queued_reliables.front();
channel.queued_reliables.pop();
LOG(dout_con << m_connection->getDesc()
<< " INFO: sending a queued reliable packet "
<< " channel: " << i
- << ", seqnum: " << readU16(&p.data[BASE_HEADER_SIZE + 1])
+ << ", seqnum: " << p->getSeqnum()
<< std::endl);
sendAsPacketReliable(p, &channel);
@@ -881,17 +879,14 @@ void ConnectionReceiveThread::receive(SharedBuffer<u8> &packetdata,
try {
// First, see if there any buffered packets we can process now
if (packet_queued) {
- bool data_left = true;
session_t peer_id;
SharedBuffer<u8> resultdata;
- while (data_left) {
+ while (true) {
try {
- data_left = getFromBuffers(peer_id, resultdata);
- if (data_left) {
- ConnectionEvent e;
- e.dataReceived(peer_id, resultdata);
- m_connection->putEvent(std::move(e));
- }
+ if (!getFromBuffers(peer_id, resultdata))
+ break;
+
+ m_connection->putEvent(ConnectionEvent::dataReceived(peer_id, resultdata));
}
catch (ProcessedSilentlyException &e) {
/* try reading again */
@@ -908,7 +903,7 @@ void ConnectionReceiveThread::receive(SharedBuffer<u8> &packetdata,
return;
if ((received_size < BASE_HEADER_SIZE) ||
- (readU32(&packetdata[0]) != m_connection->GetProtocolID())) {
+ (readU32(&packetdata[0]) != m_connection->GetProtocolID())) {
LOG(derr_con << m_connection->getDesc()
<< "Receive(): Invalid incoming packet, "
<< "size: " << received_size
@@ -999,9 +994,7 @@ void ConnectionReceiveThread::receive(SharedBuffer<u8> &packetdata,
<< ", channel: " << (u32)channelnum << ", returned "
<< resultdata.getSize() << " bytes" << std::endl);
- ConnectionEvent e;
- e.dataReceived(peer_id, resultdata);
- m_connection->putEvent(std::move(e));
+ m_connection->putEvent(ConnectionEvent::dataReceived(peer_id, resultdata));
}
catch (ProcessedSilentlyException &e) {
}
@@ -1026,10 +1019,11 @@ bool ConnectionReceiveThread::getFromBuffers(session_t &peer_id, SharedBuffer<u8
if (!peer)
continue;
- if (dynamic_cast<UDPPeer *>(&peer) == 0)
+ UDPPeer *p = dynamic_cast<UDPPeer *>(&peer);
+ if (!p)
continue;
- for (Channel &channel : (dynamic_cast<UDPPeer *>(&peer))->channels) {
+ for (Channel &channel : p->channels) {
if (checkIncomingBuffers(&channel, peer_id, dst)) {
return true;
}
@@ -1042,32 +1036,34 @@ bool ConnectionReceiveThread::checkIncomingBuffers(Channel *channel,
session_t &peer_id, SharedBuffer<u8> &dst)
{
u16 firstseqnum = 0;
- if (channel->incoming_reliables.getFirstSeqnum(firstseqnum)) {
- if (firstseqnum == channel->readNextIncomingSeqNum()) {
- BufferedPacket p = channel->incoming_reliables.popFirst();
- peer_id = readPeerId(*p.data);
- u8 channelnum = readChannel(*p.data);
- u16 seqnum = readU16(&p.data[BASE_HEADER_SIZE + 1]);
+ if (!channel->incoming_reliables.getFirstSeqnum(firstseqnum))
+ return false;
- LOG(dout_con << m_connection->getDesc()
- << "UNBUFFERING TYPE_RELIABLE"
- << " seqnum=" << seqnum
- << " peer_id=" << peer_id
- << " channel=" << ((int) channelnum & 0xff)
- << std::endl);
+ if (firstseqnum != channel->readNextIncomingSeqNum())
+ return false;
- channel->incNextIncomingSeqNum();
+ BufferedPacketPtr p = channel->incoming_reliables.popFirst();
- u32 headers_size = BASE_HEADER_SIZE + RELIABLE_HEADER_SIZE;
- // Get out the inside packet and re-process it
- SharedBuffer<u8> payload(p.data.getSize() - headers_size);
- memcpy(*payload, &p.data[headers_size], payload.getSize());
+ peer_id = readPeerId(p->data); // Carried over to caller function
+ u8 channelnum = readChannel(p->data);
+ u16 seqnum = p->getSeqnum();
- dst = processPacket(channel, payload, peer_id, channelnum, true);
- return true;
- }
- }
- return false;
+ LOG(dout_con << m_connection->getDesc()
+ << "UNBUFFERING TYPE_RELIABLE"
+ << " seqnum=" << seqnum
+ << " peer_id=" << peer_id
+ << " channel=" << ((int) channelnum & 0xff)
+ << std::endl);
+
+ channel->incNextIncomingSeqNum();
+
+ u32 headers_size = BASE_HEADER_SIZE + RELIABLE_HEADER_SIZE;
+ // Get out the inside packet and re-process it
+ SharedBuffer<u8> payload(p->size() - headers_size);
+ memcpy(*payload, &p->data[headers_size], payload.getSize());
+
+ dst = processPacket(channel, payload, peer_id, channelnum, true);
+ return true;
}
SharedBuffer<u8> ConnectionReceiveThread::processPacket(Channel *channel,
@@ -1115,7 +1111,7 @@ SharedBuffer<u8> ConnectionReceiveThread::handlePacketType_Control(Channel *chan
if (packetdata.getSize() < 2)
throw InvalidIncomingDataException("packetdata.getSize() < 2");
- u8 controltype = readU8(&(packetdata[1]));
+ ControlType controltype = (ControlType)readU8(&(packetdata[1]));
if (controltype == CONTROLTYPE_ACK) {
assert(channel != NULL);
@@ -1131,7 +1127,7 @@ SharedBuffer<u8> ConnectionReceiveThread::handlePacketType_Control(Channel *chan
<< seqnum << " ]" << std::endl);
try {
- BufferedPacket p = channel->outgoing_reliables_sent.popSeqnum(seqnum);
+ BufferedPacketPtr p = channel->outgoing_reliables_sent.popSeqnum(seqnum);
// the rtt calculation will be a bit off for re-sent packets but that's okay
{
@@ -1140,14 +1136,14 @@ SharedBuffer<u8> ConnectionReceiveThread::handlePacketType_Control(Channel *chan
// a overflow is quite unlikely but as it'd result in major
// rtt miscalculation we handle it here
- if (current_time > p.absolute_send_time) {
- float rtt = (current_time - p.absolute_send_time) / 1000.0;
+ if (current_time > p->absolute_send_time) {
+ float rtt = (current_time - p->absolute_send_time) / 1000.0;
// Let peer calculate stuff according to it
// (avg_rtt and resend_timeout)
dynamic_cast<UDPPeer *>(peer)->reportRTT(rtt);
- } else if (p.totaltime > 0) {
- float rtt = p.totaltime;
+ } else if (p->totaltime > 0) {
+ float rtt = p->totaltime;
// Let peer calculate stuff according to it
// (avg_rtt and resend_timeout)
@@ -1156,7 +1152,7 @@ SharedBuffer<u8> ConnectionReceiveThread::handlePacketType_Control(Channel *chan
}
// put bytes for max bandwidth calculation
- channel->UpdateBytesSent(p.data.getSize(), 1);
+ channel->UpdateBytesSent(p->size(), 1);
if (channel->outgoing_reliables_sent.size() == 0)
m_connection->TriggerSend();
} catch (NotFoundException &e) {
@@ -1204,7 +1200,7 @@ SharedBuffer<u8> ConnectionReceiveThread::handlePacketType_Control(Channel *chan
throw ProcessedSilentlyException("Got a DISCO");
} else {
LOG(derr_con << m_connection->getDesc()
- << "INVALID TYPE_CONTROL: invalid controltype="
+ << "INVALID controltype="
<< ((int) controltype & 0xff) << std::endl);
throw InvalidIncomingDataException("Invalid control type");
}
@@ -1232,7 +1228,7 @@ SharedBuffer<u8> ConnectionReceiveThread::handlePacketType_Split(Channel *channe
if (peer->getAddress(MTP_UDP, peer_address)) {
// We have to create a packet again for buffering
// This isn't actually too bad an idea.
- BufferedPacket packet = makePacket(peer_address,
+ BufferedPacketPtr packet = con::makePacket(peer_address,
packetdata,
m_connection->GetProtocolID(),
peer->id,
@@ -1267,7 +1263,7 @@ SharedBuffer<u8> ConnectionReceiveThread::handlePacketType_Reliable(Channel *cha
if (packetdata.getSize() < RELIABLE_HEADER_SIZE)
throw InvalidIncomingDataException("packetdata.getSize() < RELIABLE_HEADER_SIZE");
- u16 seqnum = readU16(&packetdata[1]);
+ const u16 seqnum = readU16(&packetdata[1]);
bool is_future_packet = false;
bool is_old_packet = false;
@@ -1311,7 +1307,7 @@ SharedBuffer<u8> ConnectionReceiveThread::handlePacketType_Reliable(Channel *cha
// This one comes later, buffer it.
// Actually we have to make a packet to buffer one.
// Well, we have all the ingredients, so just do it.
- BufferedPacket packet = con::makePacket(
+ BufferedPacketPtr packet = con::makePacket(
peer_address,
packetdata,
m_connection->GetProtocolID(),
@@ -1328,9 +1324,7 @@ SharedBuffer<u8> ConnectionReceiveThread::handlePacketType_Reliable(Channel *cha
throw ProcessedQueued("Buffered future reliable packet");
} catch (AlreadyExistsException &e) {
} catch (IncomingDataCorruption &e) {
- ConnectionCommand discon;
- discon.disconnect_peer(peer->id);
- m_connection->putCommand(discon);
+ m_connection->putCommand(ConnectionCommand::disconnect_peer(peer->id));
LOG(derr_con << m_connection->getDesc()
<< "INVALID, TYPE_RELIABLE peer_id: " << peer->id
@@ -1351,7 +1345,7 @@ SharedBuffer<u8> ConnectionReceiveThread::handlePacketType_Reliable(Channel *cha
u16 queued_seqnum = 0;
if (channel->incoming_reliables.getFirstSeqnum(queued_seqnum)) {
if (queued_seqnum == seqnum) {
- BufferedPacket queued_packet = channel->incoming_reliables.popFirst();
+ BufferedPacketPtr queued_packet = channel->incoming_reliables.popFirst();
/** TODO find a way to verify the new against the old packet */
}
}
diff --git a/src/network/connectionthreads.h b/src/network/connectionthreads.h
index 612407c3b..c2e2dae12 100644
--- a/src/network/connectionthreads.h
+++ b/src/network/connectionthreads.h
@@ -29,6 +29,25 @@ namespace con
class Connection;
+struct OutgoingPacket
+{
+ session_t peer_id;
+ u8 channelnum;
+ SharedBuffer<u8> data;
+ bool reliable;
+ bool ack;
+
+ OutgoingPacket(session_t peer_id_, u8 channelnum_, const SharedBuffer<u8> &data_,
+ bool reliable_,bool ack_=false):
+ peer_id(peer_id_),
+ channelnum(channelnum_),
+ data(data_),
+ reliable(reliable_),
+ ack(ack_)
+ {
+ }
+};
+
class ConnectionSendThread : public Thread
{
@@ -51,27 +70,27 @@ public:
private:
void runTimeouts(float dtime);
- void rawSend(const BufferedPacket &packet);
+ void rawSend(const BufferedPacket *p);
bool rawSendAsPacket(session_t peer_id, u8 channelnum,
const SharedBuffer<u8> &data, bool reliable);
- void processReliableCommand(ConnectionCommand &c);
- void processNonReliableCommand(ConnectionCommand &c);
+ void processReliableCommand(ConnectionCommandPtr &c);
+ void processNonReliableCommand(ConnectionCommandPtr &c);
void serve(Address bind_address);
void connect(Address address);
void disconnect();
void disconnect_peer(session_t peer_id);
void send(session_t peer_id, u8 channelnum, const SharedBuffer<u8> &data);
- void sendReliable(ConnectionCommand &c);
+ void sendReliable(ConnectionCommandPtr &c);
void sendToAll(u8 channelnum, const SharedBuffer<u8> &data);
- void sendToAllReliable(ConnectionCommand &c);
+ void sendToAllReliable(ConnectionCommandPtr &c);
void sendPackets(float dtime);
void sendAsPacket(session_t peer_id, u8 channelnum, const SharedBuffer<u8> &data,
bool ack = false);
- void sendAsPacketReliable(BufferedPacket &p, Channel *channel);
+ void sendAsPacketReliable(BufferedPacketPtr &p, Channel *channel);
bool packetsQueued();
diff --git a/src/network/networkpacket.h b/src/network/networkpacket.h
index b1c44f055..b9c39f332 100644
--- a/src/network/networkpacket.h
+++ b/src/network/networkpacket.h
@@ -41,7 +41,7 @@ public:
u32 getSize() const { return m_datasize; }
session_t getPeerId() const { return m_peer_id; }
u16 getCommand() { return m_command; }
- const u32 getRemainingBytes() const { return m_datasize - m_read_offset; }
+ u32 getRemainingBytes() const { return m_datasize - m_read_offset; }
const char *getRemainingString() { return getString(m_read_offset); }
// Returns a c-string without copying.
diff --git a/src/network/networkprotocol.h b/src/network/networkprotocol.h
index 838bf0b2c..a5ff53216 100644
--- a/src/network/networkprotocol.h
+++ b/src/network/networkprotocol.h
@@ -205,9 +205,11 @@ with this program; if not, write to the Free Software Foundation, Inc.,
Updated set_sky packet
Adds new sun, moon and stars packets
Minimap modes
+ PROTOCOL VERSION 40:
+ TOCLIENT_MEDIA_PUSH changed, TOSERVER_HAVE_MEDIA added
*/
-#define LATEST_PROTOCOL_VERSION 39
+#define LATEST_PROTOCOL_VERSION 40
#define LATEST_PROTOCOL_VERSION_STRING TOSTRING(LATEST_PROTOCOL_VERSION)
// Server's supported network protocol range
@@ -227,7 +229,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
// base64-encoded SHA-1 (27+\0).
// See also: Formspec Version History in doc/lua_api.txt
-#define FORMSPEC_API_VERSION 4
+#define FORMSPEC_API_VERSION 5
#define TEXTURENAME_ALLOWED_CHARS "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_.-"
@@ -315,9 +317,8 @@ enum ToClientCommand
/*
std::string raw_hash
std::string filename
+ u32 callback_token
bool should_be_cached
- u32 len
- char filedata[len]
*/
// (oops, there is some gap here)
@@ -936,7 +937,13 @@ enum ToServerCommand
}
*/
- TOSERVER_RECEIVED_MEDIA = 0x41, // Obsolete
+ TOSERVER_HAVE_MEDIA = 0x41,
+ /*
+ u8 number of callback tokens
+ for each:
+ u32 token
+ */
+
TOSERVER_BREATH = 0x42, // Obsolete
TOSERVER_CLIENT_READY = 0x43,
diff --git a/src/network/serveropcodes.cpp b/src/network/serveropcodes.cpp
index aea5d7174..44b65e8da 100644
--- a/src/network/serveropcodes.cpp
+++ b/src/network/serveropcodes.cpp
@@ -89,7 +89,7 @@ const ToServerCommandHandler toServerCommandTable[TOSERVER_NUM_MSG_TYPES] =
null_command_handler, // 0x3e
null_command_handler, // 0x3f
{ "TOSERVER_REQUEST_MEDIA", TOSERVER_STATE_STARTUP, &Server::handleCommand_RequestMedia }, // 0x40
- null_command_handler, // 0x41
+ { "TOSERVER_HAVE_MEDIA", TOSERVER_STATE_INGAME, &Server::handleCommand_HaveMedia }, // 0x41
null_command_handler, // 0x42
{ "TOSERVER_CLIENT_READY", TOSERVER_STATE_STARTUP, &Server::handleCommand_ClientReady }, // 0x43
null_command_handler, // 0x44
@@ -167,7 +167,7 @@ const ClientCommandFactory clientCommandFactoryTable[TOCLIENT_NUM_MSG_TYPES] =
{ "TOCLIENT_TIME_OF_DAY", 0, true }, // 0x29
{ "TOCLIENT_CSM_RESTRICTION_FLAGS", 0, true }, // 0x2A
{ "TOCLIENT_PLAYER_SPEED", 0, true }, // 0x2B
- { "TOCLIENT_MEDIA_PUSH", 0, true }, // 0x2C (sent over channel 1 too)
+ { "TOCLIENT_MEDIA_PUSH", 0, true }, // 0x2C (sent over channel 1 too if legacy)
null_command_factory, // 0x2D
null_command_factory, // 0x2E
{ "TOCLIENT_CHAT_MESSAGE", 0, true }, // 0x2F
diff --git a/src/network/serverpackethandler.cpp b/src/network/serverpackethandler.cpp
index fd5aed9d1..12dc24460 100644
--- a/src/network/serverpackethandler.cpp
+++ b/src/network/serverpackethandler.cpp
@@ -86,7 +86,7 @@ void Server::handleCommand_Init(NetworkPacket* pkt)
// Do not allow multiple players in simple singleplayer mode.
// This isn't a perfect way to do it, but will suffice for now
- if (m_simple_singleplayer_mode && m_clients.getClientIDs().size() > 1) {
+ if (m_simple_singleplayer_mode && !m_clients.getClientIDs().empty()) {
infostream << "Server: Not allowing another client (" << addr_s <<
") to connect in simple singleplayer mode" << std::endl;
DenyAccess(peer_id, SERVER_ACCESSDENIED_SINGLEPLAYER);
@@ -174,6 +174,16 @@ void Server::handleCommand_Init(NetworkPacket* pkt)
return;
}
+ RemotePlayer *player = m_env->getPlayer(playername);
+
+ // If player is already connected, cancel
+ if (player && player->getPeerId() != PEER_ID_INEXISTENT) {
+ actionstream << "Server: Player with name \"" << playername <<
+ "\" tried to connect, but player with same name is already connected" << std::endl;
+ DenyAccess(peer_id, SERVER_ACCESSDENIED_ALREADY_CONNECTED);
+ return;
+ }
+
m_clients.setPlayerName(peer_id, playername);
//TODO (later) case insensitivity
@@ -352,16 +362,15 @@ void Server::handleCommand_RequestMedia(NetworkPacket* pkt)
session_t peer_id = pkt->getPeerId();
infostream << "Sending " << numfiles << " files to " <<
getPlayerName(peer_id) << std::endl;
- verbosestream << "TOSERVER_REQUEST_MEDIA: " << std::endl;
+ verbosestream << "TOSERVER_REQUEST_MEDIA: requested file(s)" << std::endl;
for (u16 i = 0; i < numfiles; i++) {
std::string name;
*pkt >> name;
- tosend.push_back(name);
- verbosestream << "TOSERVER_REQUEST_MEDIA: requested file "
- << name << std::endl;
+ tosend.emplace_back(name);
+ verbosestream << " " << name << std::endl;
}
sendRequestedMedia(peer_id, tosend);
@@ -473,7 +482,6 @@ void Server::process_PlayerPos(RemotePlayer *player, PlayerSAO *playersao,
f32 yaw = (f32)f32yaw / 100.0f;
u32 keyPressed = 0;
- // default behavior (in case an old client doesn't send these)
f32 fov = 0;
u8 wanted_range = 0;
@@ -499,17 +507,7 @@ void Server::process_PlayerPos(RemotePlayer *player, PlayerSAO *playersao,
playersao->setFov(fov);
playersao->setWantedRange(wanted_range);
- player->keyPressed = keyPressed;
- player->control.up = (keyPressed & (0x1 << 0));
- player->control.down = (keyPressed & (0x1 << 1));
- player->control.left = (keyPressed & (0x1 << 2));
- player->control.right = (keyPressed & (0x1 << 3));
- player->control.jump = (keyPressed & (0x1 << 4));
- player->control.aux1 = (keyPressed & (0x1 << 5));
- player->control.sneak = (keyPressed & (0x1 << 6));
- player->control.dig = (keyPressed & (0x1 << 7));
- player->control.place = (keyPressed & (0x1 << 8));
- player->control.zoom = (keyPressed & (0x1 << 9));
+ player->control.unpackKeysPressed(keyPressed);
if (playersao->checkMovementCheat()) {
// Call callbacks
@@ -821,8 +819,7 @@ void Server::handleCommand_Damage(NetworkPacket* pkt)
<< std::endl;
PlayerHPChangeReason reason(PlayerHPChangeReason::FALL);
- playersao->setHP((s32)playersao->getHP() - (s32)damage, reason);
- SendPlayerHPOrDie(playersao, reason);
+ playersao->setHP((s32)playersao->getHP() - (s32)damage, reason, true);
}
}
@@ -916,6 +913,13 @@ bool Server::checkInteractDistance(RemotePlayer *player, const f32 d, const std:
return true;
}
+// Tiny helper to retrieve the selected item into an Optional
+static inline void getWieldedItem(const PlayerSAO *playersao, Optional<ItemStack> &ret)
+{
+ ret = ItemStack();
+ playersao->getWieldedItem(&(*ret));
+}
+
void Server::handleCommand_Interact(NetworkPacket *pkt)
{
/*
@@ -1107,11 +1111,8 @@ void Server::handleCommand_Interact(NetworkPacket *pkt)
float time_from_last_punch =
playersao->resetTimeFromLastPunch();
- u16 src_original_hp = pointed_object->getHP();
- u16 dst_origin_hp = playersao->getHP();
-
- u16 wear = pointed_object->punch(dir, &toolcap, playersao,
- time_from_last_punch);
+ u32 wear = pointed_object->punch(dir, &toolcap, playersao,
+ time_from_last_punch, tool_item.wear);
// Callback may have changed item, so get it again
playersao->getWieldedItem(&selected_item);
@@ -1119,18 +1120,6 @@ void Server::handleCommand_Interact(NetworkPacket *pkt)
if (changed)
playersao->setWieldedItem(selected_item);
- // 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,
- PlayerHPChangeReason(PlayerHPChangeReason::PLAYER_PUNCH, playersao));
- }
-
- // If the puncher is a player and its HP changed
- if (dst_origin_hp != playersao->getHP())
- SendPlayerHPOrDie(playersao,
- PlayerHPChangeReason(PlayerHPChangeReason::PLAYER_PUNCH, pointed_object));
-
return;
} // action == INTERACT_START_DIGGING
@@ -1176,7 +1165,8 @@ void Server::handleCommand_Interact(NetworkPacket *pkt)
// Get diggability and expected digging time
DigParams params = getDigParams(m_nodedef->get(n).groups,
- &selected_item.getToolCapabilities(m_itemdef));
+ &selected_item.getToolCapabilities(m_itemdef),
+ selected_item.wear);
// If can't dig, try hand
if (!params.diggable) {
params = getDigParams(m_nodedef->get(n).groups,
@@ -1238,14 +1228,17 @@ void Server::handleCommand_Interact(NetworkPacket *pkt)
// Place block or right-click object
case INTERACT_PLACE: {
- ItemStack selected_item;
- playersao->getWieldedItem(&selected_item, nullptr);
+ Optional<ItemStack> selected_item;
+ getWieldedItem(playersao, selected_item);
// Reset build time counter
if (pointed.type == POINTEDTHING_NODE &&
- selected_item.getDefinition(m_itemdef).type == ITEM_NODE)
+ selected_item->getDefinition(m_itemdef).type == ITEM_NODE)
getClient(peer_id)->m_time_from_building = 0.0;
+ const bool had_prediction = !selected_item->getDefinition(m_itemdef).
+ node_placement_prediction.empty();
+
if (pointed.type == POINTEDTHING_OBJECT) {
// Right click object
@@ -1258,11 +1251,9 @@ void Server::handleCommand_Interact(NetworkPacket *pkt)
<< pointed_object->getDescription() << std::endl;
// Do stuff
- if (m_script->item_OnSecondaryUse(
- selected_item, playersao, pointed)) {
- if (playersao->setWieldedItem(selected_item)) {
+ if (m_script->item_OnSecondaryUse(selected_item, playersao, pointed)) {
+ if (selected_item.has_value() && playersao->setWieldedItem(*selected_item))
SendInventory(playersao, true);
- }
}
pointed_object->rightClick(playersao);
@@ -1270,7 +1261,7 @@ void Server::handleCommand_Interact(NetworkPacket *pkt)
// Placement was handled in lua
// Apply returned ItemStack
- if (playersao->setWieldedItem(selected_item))
+ if (selected_item.has_value() && playersao->setWieldedItem(*selected_item))
SendInventory(playersao, true);
}
@@ -1282,8 +1273,7 @@ void Server::handleCommand_Interact(NetworkPacket *pkt)
RemoteClient *client = getClient(peer_id);
v3s16 blockpos = getNodeBlockPos(pointed.node_abovesurface);
v3s16 blockpos2 = getNodeBlockPos(pointed.node_undersurface);
- if (!selected_item.getDefinition(m_itemdef
- ).node_placement_prediction.empty()) {
+ if (had_prediction) {
client->SetBlockNotSent(blockpos);
if (blockpos2 != blockpos)
client->SetBlockNotSent(blockpos2);
@@ -1297,15 +1287,15 @@ void Server::handleCommand_Interact(NetworkPacket *pkt)
} // action == INTERACT_PLACE
case INTERACT_USE: {
- ItemStack selected_item;
- playersao->getWieldedItem(&selected_item, nullptr);
+ Optional<ItemStack> selected_item;
+ getWieldedItem(playersao, selected_item);
- actionstream << player->getName() << " uses " << selected_item.name
+ actionstream << player->getName() << " uses " << selected_item->name
<< ", pointing at " << pointed.dump() << std::endl;
if (m_script->item_OnUse(selected_item, playersao, pointed)) {
// Apply returned ItemStack
- if (playersao->setWieldedItem(selected_item))
+ if (selected_item.has_value() && playersao->setWieldedItem(*selected_item))
SendInventory(playersao, true);
}
@@ -1314,16 +1304,17 @@ void Server::handleCommand_Interact(NetworkPacket *pkt)
// Rightclick air
case INTERACT_ACTIVATE: {
- ItemStack selected_item;
- playersao->getWieldedItem(&selected_item, nullptr);
+ Optional<ItemStack> selected_item;
+ getWieldedItem(playersao, selected_item);
actionstream << player->getName() << " activates "
- << selected_item.name << std::endl;
+ << selected_item->name << std::endl;
pointed.type = POINTEDTHING_NOTHING; // can only ever be NOTHING
if (m_script->item_OnSecondaryUse(selected_item, playersao, pointed)) {
- if (playersao->setWieldedItem(selected_item))
+ // Apply returned ItemStack
+ if (selected_item.has_value() && playersao->setWieldedItem(*selected_item))
SendInventory(playersao, true);
}
@@ -1811,3 +1802,30 @@ void Server::handleCommand_ModChannelMsg(NetworkPacket *pkt)
broadcastModChannelMessage(channel_name, channel_msg, peer_id);
}
+
+void Server::handleCommand_HaveMedia(NetworkPacket *pkt)
+{
+ std::vector<u32> tokens;
+ u8 numtokens;
+
+ *pkt >> numtokens;
+ for (u16 i = 0; i < numtokens; i++) {
+ u32 n;
+ *pkt >> n;
+ tokens.emplace_back(n);
+ }
+
+ const session_t peer_id = pkt->getPeerId();
+ auto player = m_env->getPlayer(peer_id);
+
+ for (const u32 token : tokens) {
+ auto it = m_pending_dyn_media.find(token);
+ if (it == m_pending_dyn_media.end())
+ continue;
+ if (it->second.waiting_players.count(peer_id)) {
+ it->second.waiting_players.erase(peer_id);
+ if (player)
+ getScriptIface()->on_dynamic_media_added(token, player->getName());
+ }
+ }
+}
diff --git a/src/network/socket.cpp b/src/network/socket.cpp
index 94a9f4180..0bb7ea234 100644
--- a/src/network/socket.cpp
+++ b/src/network/socket.cpp
@@ -23,14 +23,11 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include <iostream>
#include <cstdlib>
#include <cstring>
-#include <cerrno>
-#include <sstream>
#include <iomanip>
#include "util/string.h"
#include "util/numeric.h"
#include "constants.h"
#include "debug.h"
-#include "settings.h"
#include "log.h"
#ifdef _WIN32
@@ -42,9 +39,10 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include <winsock2.h>
#include <ws2tcpip.h>
#define LAST_SOCKET_ERR() WSAGetLastError()
-typedef SOCKET socket_t;
+#define SOCKET_ERR_STR(e) itos(e)
typedef int socklen_t;
#else
+#include <cerrno>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
@@ -53,7 +51,7 @@ typedef int socklen_t;
#include <unistd.h>
#include <arpa/inet.h>
#define LAST_SOCKET_ERR() (errno)
-typedef int socket_t;
+#define SOCKET_ERR_STR(e) strerror(e)
#endif
// Set to true to enable verbose debug output
@@ -113,7 +111,7 @@ bool UDPSocket::init(bool ipv6, bool noExceptions)
}
throw SocketException(std::string("Failed to create socket: error ") +
- itos(LAST_SOCKET_ERR()));
+ SOCKET_ERR_STR(LAST_SOCKET_ERR()));
}
setTimeoutMs(0);
@@ -153,40 +151,40 @@ void UDPSocket::Bind(Address addr)
}
if (addr.getFamily() != m_addr_family) {
- static const char *errmsg =
+ const char *errmsg =
"Socket and bind address families do not match";
errorstream << "Bind failed: " << errmsg << std::endl;
throw SocketException(errmsg);
}
+ int ret = 0;
+
if (m_addr_family == AF_INET6) {
struct sockaddr_in6 address;
memset(&address, 0, sizeof(address));
- address = addr.getAddress6();
address.sin6_family = AF_INET6;
+ address.sin6_addr = addr.getAddress6();
address.sin6_port = htons(addr.getPort());
- if (bind(m_handle, (const struct sockaddr *)&address,
- sizeof(struct sockaddr_in6)) < 0) {
- dstream << (int)m_handle << ": Bind failed: " << strerror(errno)
- << std::endl;
- throw SocketException("Failed to bind socket");
- }
+ ret = bind(m_handle, (const struct sockaddr *) &address,
+ sizeof(struct sockaddr_in6));
} else {
struct sockaddr_in address;
memset(&address, 0, sizeof(address));
- address = addr.getAddress();
address.sin_family = AF_INET;
+ address.sin_addr = addr.getAddress();
address.sin_port = htons(addr.getPort());
- if (bind(m_handle, (const struct sockaddr *)&address,
- sizeof(struct sockaddr_in)) < 0) {
- dstream << (int)m_handle << ": Bind failed: " << strerror(errno)
- << std::endl;
- throw SocketException("Failed to bind socket");
- }
+ ret = bind(m_handle, (const struct sockaddr *) &address,
+ sizeof(struct sockaddr_in));
+ }
+
+ if (ret < 0) {
+ dstream << (int)m_handle << ": Bind failed: "
+ << SOCKET_ERR_STR(LAST_SOCKET_ERR()) << std::endl;
+ throw SocketException("Failed to bind socket");
}
}
@@ -233,13 +231,19 @@ void UDPSocket::Send(const Address &destination, const void *data, int size)
int sent;
if (m_addr_family == AF_INET6) {
- struct sockaddr_in6 address = destination.getAddress6();
+ struct sockaddr_in6 address = {0};
+ address.sin6_family = AF_INET6;
+ address.sin6_addr = destination.getAddress6();
address.sin6_port = htons(destination.getPort());
+
sent = sendto(m_handle, (const char *)data, size, 0,
(struct sockaddr *)&address, sizeof(struct sockaddr_in6));
} else {
- struct sockaddr_in address = destination.getAddress();
+ struct sockaddr_in address = {0};
+ address.sin_family = AF_INET;
+ address.sin_addr = destination.getAddress();
address.sin_port = htons(destination.getPort());
+
sent = sendto(m_handle, (const char *)data, size, 0,
(struct sockaddr *)&address, sizeof(struct sockaddr_in));
}
@@ -267,9 +271,9 @@ int UDPSocket::Receive(Address &sender, void *data, int size)
return -1;
u16 address_port = ntohs(address.sin6_port);
- IPv6AddressBytes bytes;
- memcpy(bytes.bytes, address.sin6_addr.s6_addr, 16);
- sender = Address(&bytes, address_port);
+ const auto *bytes = reinterpret_cast<IPv6AddressBytes*>
+ (address.sin6_addr.s6_addr);
+ sender = Address(bytes, address_port);
} else {
struct sockaddr_in address;
memset(&address, 0, sizeof(address));
@@ -341,7 +345,12 @@ bool UDPSocket::WaitData(int timeout_ms)
if (result == 0)
return false;
- if (result < 0 && (errno == EINTR || errno == EBADF)) {
+ int e = LAST_SOCKET_ERR();
+#ifdef _WIN32
+ if (result < 0 && (e == WSAEINTR || e == WSAEBADF)) {
+#else
+ if (result < 0 && (e == EINTR || e == EBADF)) {
+#endif
// N.B. select() fails when sockets are destroyed on Connection's dtor
// with EBADF. Instead of doing tricky synchronization, allow this
// thread to exit but don't throw an exception.
@@ -349,18 +358,9 @@ bool UDPSocket::WaitData(int timeout_ms)
}
if (result < 0) {
- dstream << m_handle << ": Select failed: " << strerror(errno)
+ dstream << (int)m_handle << ": Select failed: " << SOCKET_ERR_STR(e)
<< std::endl;
-#ifdef _WIN32
- int e = WSAGetLastError();
- dstream << (int)m_handle << ": WSAGetLastError()=" << e << std::endl;
- if (e == 10004 /* WSAEINTR */ || e == 10009 /* WSAEBADF */) {
- infostream << "Ignoring WSAEINTR/WSAEBADF." << std::endl;
- return false;
- }
-#endif
-
throw SocketException("Select failed");
} else if (!FD_ISSET(m_handle, &readset)) {
// No data
diff --git a/src/network/socket.h b/src/network/socket.h
index e0e76f4c2..d34186b44 100644
--- a/src/network/socket.h
+++ b/src/network/socket.h
@@ -19,18 +19,6 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#pragma once
-#ifdef _WIN32
-#ifndef _WIN32_WINNT
-#define _WIN32_WINNT 0x0501
-#endif
-#include <windows.h>
-#include <winsock2.h>
-#include <ws2tcpip.h>
-#else
-#include <sys/socket.h>
-#include <netinet/in.h>
-#endif
-
#include <ostream>
#include <cstring>
#include "address.h"
@@ -53,8 +41,6 @@ public:
bool init(bool ipv6, bool noExceptions = false);
- // void Close();
- // bool IsOpen();
void Send(const Address &destination, const void *data, int size);
// Returns -1 if there is no data
int Receive(Address &sender, void *data, int size);
diff --git a/src/nodedef.cpp b/src/nodedef.cpp
index a3b6b18c1..8a5542837 100644
--- a/src/nodedef.cpp
+++ b/src/nodedef.cpp
@@ -207,7 +207,17 @@ void TileDef::serialize(std::ostream &os, u16 protocol_version) const
u8 version = 6;
writeU8(os, version);
- os << serializeString16(name);
+ if (protocol_version > 39) {
+ os << serializeString16(name);
+ } else {
+ // Before f018737, TextureSource::getTextureAverageColor did not handle
+ // missing textures. "[png" can be used as base texture, but is not known
+ // on older clients. Hence use "blank.png" to avoid this problem.
+ if (!name.empty() && name[0] == '[')
+ os << serializeString16("blank.png^" + name);
+ else
+ os << serializeString16(name);
+ }
animation.serialize(os, version);
bool has_scale = scale > 0;
u16 flags = 0;
@@ -403,6 +413,8 @@ void ContentFeatures::reset()
palette_name = "";
palette = NULL;
node_dig_prediction = "air";
+ move_resistance = 0;
+ liquid_move_physics = false;
}
void ContentFeatures::setAlphaFromLegacy(u8 legacy_alpha)
@@ -489,7 +501,16 @@ void ContentFeatures::serialize(std::ostream &os, u16 protocol_version) const
writeU32(os, damage_per_second);
// liquid
- writeU8(os, liquid_type);
+ LiquidType liquid_type_bc = liquid_type;
+ if (protocol_version <= 39) {
+ // Since commit 7f25823, liquid drawtypes can be used even with LIQUID_NONE
+ // solution: force liquid type accordingly to accepted values
+ if (drawtype == NDT_LIQUID)
+ liquid_type_bc = LIQUID_SOURCE;
+ else if (drawtype == NDT_FLOWINGLIQUID)
+ liquid_type_bc = LIQUID_FLOWING;
+ }
+ writeU8(os, liquid_type_bc);
os << serializeString16(liquid_alternative_flowing);
os << serializeString16(liquid_alternative_source);
writeU8(os, liquid_viscosity);
@@ -512,9 +533,12 @@ void ContentFeatures::serialize(std::ostream &os, u16 protocol_version) const
writeU8(os, legacy_facedir_simple);
writeU8(os, legacy_wallmounted);
+ // new attributes
os << serializeString16(node_dig_prediction);
writeU8(os, leveled_max);
writeU8(os, alpha);
+ writeU8(os, move_resistance);
+ writeU8(os, liquid_move_physics);
}
void ContentFeatures::deSerialize(std::istream &is)
@@ -584,9 +608,11 @@ void ContentFeatures::deSerialize(std::istream &is)
// liquid
liquid_type = (enum LiquidType) readU8(is);
+ liquid_move_physics = liquid_type != LIQUID_NONE;
liquid_alternative_flowing = deSerializeString16(is);
liquid_alternative_source = deSerializeString16(is);
liquid_viscosity = readU8(is);
+ move_resistance = liquid_viscosity; // set default move_resistance
liquid_renewable = readU8(is);
liquid_range = readU8(is);
drowning = readU8(is);
@@ -618,6 +644,16 @@ void ContentFeatures::deSerialize(std::istream &is)
if (is.eof())
throw SerializationError("");
alpha = static_cast<enum AlphaMode>(tmp);
+
+ tmp = readU8(is);
+ if (is.eof())
+ throw SerializationError("");
+ move_resistance = tmp;
+
+ tmp = readU8(is);
+ if (is.eof())
+ throw SerializationError("");
+ liquid_move_physics = tmp;
} catch(SerializationError &e) {};
}
@@ -779,8 +815,10 @@ void ContentFeatures::updateTextures(ITextureSource *tsrc, IShaderSource *shdsrc
TileDef tdef[6];
for (u32 j = 0; j < 6; j++) {
tdef[j] = tiledef[j];
- if (tdef[j].name.empty())
- tdef[j].name = "unknown_node.png";
+ if (tdef[j].name.empty()) {
+ tdef[j].name = "no_texture.png";
+ tdef[j].backface_culling = false;
+ }
}
// also the overlay tiles
TileDef tdef_overlay[6];
@@ -788,8 +826,9 @@ void ContentFeatures::updateTextures(ITextureSource *tsrc, IShaderSource *shdsrc
tdef_overlay[j] = tiledef_overlay[j];
// also the special tiles
TileDef tdef_spec[6];
- for (u32 j = 0; j < CF_SPECIAL_COUNT; j++)
+ for (u32 j = 0; j < CF_SPECIAL_COUNT; j++) {
tdef_spec[j] = tiledef_special[j];
+ }
bool is_liquid = false;
@@ -944,7 +983,8 @@ void ContentFeatures::updateTextures(ITextureSource *tsrc, IShaderSource *shdsrc
if (param_type_2 == CPT2_COLOR ||
param_type_2 == CPT2_COLORED_FACEDIR ||
- param_type_2 == CPT2_COLORED_WALLMOUNTED)
+ param_type_2 == CPT2_COLORED_WALLMOUNTED ||
+ param_type_2 == CPT2_COLORED_DEGROTATE)
palette = tsrc->getPalette(palette_name);
if (drawtype == NDT_MESH && !mesh.empty()) {
@@ -1034,6 +1074,10 @@ void NodeDefManager::clear()
{
ContentFeatures f;
f.name = "unknown";
+ TileDef unknownTile;
+ unknownTile.name = "unknown_node.png";
+ for (int t = 0; t < 6; t++)
+ f.tiledef[t] = unknownTile;
// Insert directly into containers
content_t c = CONTENT_UNKNOWN;
m_content_features[c] = f;
@@ -1434,9 +1478,7 @@ void NodeDefManager::applyTextureOverrides(const std::vector<TextureOverride> &o
}
}
-void NodeDefManager::updateTextures(IGameDef *gamedef,
- void (*progress_callback)(void *progress_args, u32 progress, u32 max_progress),
- void *progress_callback_args)
+void NodeDefManager::updateTextures(IGameDef *gamedef, void *progress_callback_args)
{
#ifndef SERVER
infostream << "NodeDefManager::updateTextures(): Updating "
@@ -1445,8 +1487,8 @@ void NodeDefManager::updateTextures(IGameDef *gamedef,
Client *client = (Client *)gamedef;
ITextureSource *tsrc = client->tsrc();
IShaderSource *shdsrc = client->getShaderSource();
- scene::IMeshManipulator *meshmanip =
- RenderingEngine::get_scene_manager()->getMeshManipulator();
+ auto smgr = client->getSceneManager();
+ scene::IMeshManipulator *meshmanip = smgr->getMeshManipulator();
TextureSettings tsettings;
tsettings.readSettings();
@@ -1455,7 +1497,7 @@ void NodeDefManager::updateTextures(IGameDef *gamedef,
for (u32 i = 0; i < size; i++) {
ContentFeatures *f = &(m_content_features[i]);
f->updateTextures(tsrc, shdsrc, meshmanip, client, tsettings);
- progress_callback(progress_callback_args, i, size);
+ client->showUpdateProgressTexture(progress_callback_args, i, size);
}
#endif
}
@@ -1675,8 +1717,7 @@ bool NodeDefManager::nodeboxConnects(MapNode from, MapNode to,
NodeResolver::NodeResolver()
{
- m_nodenames.reserve(16);
- m_nnlistsizes.reserve(4);
+ reset();
}
@@ -1779,3 +1820,16 @@ bool NodeResolver::getIdsFromNrBacklog(std::vector<content_t> *result_out,
return success;
}
+
+void NodeResolver::reset(bool resolve_done)
+{
+ m_nodenames.clear();
+ m_nodenames_idx = 0;
+ m_nnlistsizes.clear();
+ m_nnlistsizes_idx = 0;
+
+ m_resolve_done = resolve_done;
+
+ m_nodenames.reserve(16);
+ m_nnlistsizes.reserve(4);
+}
diff --git a/src/nodedef.h b/src/nodedef.h
index 7da0e0d07..ea50d4281 100644
--- a/src/nodedef.h
+++ b/src/nodedef.h
@@ -44,6 +44,9 @@ class ITextureSource;
class IShaderSource;
class IGameDef;
class NodeResolver;
+#if BUILD_UNITTESTS
+class TestSchematic;
+#endif
enum ContentParamType
{
@@ -64,7 +67,7 @@ enum ContentParamType2
CPT2_WALLMOUNTED,
// Block level like FLOWINGLIQUID
CPT2_LEVELED,
- // 2D rotation for things like plants
+ // 2D rotation
CPT2_DEGROTATE,
// Mesh options for plants
CPT2_MESHOPTIONS,
@@ -76,6 +79,8 @@ enum ContentParamType2
CPT2_COLORED_WALLMOUNTED,
// Glasslike framed drawtype internal liquid level, param2 values 0 to 63
CPT2_GLASSLIKE_LIQUID_LEVEL,
+ // 3 bits of palette index, then degrotate
+ CPT2_COLORED_DEGROTATE,
};
enum LiquidType
@@ -371,11 +376,15 @@ struct ContentFeatures
u32 damage_per_second;
// client dig prediction
std::string node_dig_prediction;
+ // how slow players move through
+ u8 move_resistance = 0;
// --- LIQUID PROPERTIES ---
// Whether the node is non-liquid, source liquid or flowing liquid
enum LiquidType liquid_type;
+ // If true, movement (e.g. of players) inside this node is liquid-like.
+ bool liquid_move_physics;
// If the content is liquid, this is the flowing version of the liquid.
std::string liquid_alternative_flowing;
content_t liquid_alternative_flowing_id;
@@ -655,9 +664,7 @@ public:
* total ContentFeatures.
* @param progress_cbk_args passed to the callback function
*/
- void updateTextures(IGameDef *gamedef,
- void (*progress_cbk)(void *progress_args, u32 progress, u32 max_progress),
- void *progress_cbk_args);
+ void updateTextures(IGameDef *gamedef, void *progress_cbk_args);
/*!
* Writes the content of this manager to the given output stream.
@@ -789,10 +796,13 @@ private:
NodeDefManager *createNodeDefManager();
+// NodeResolver: Queue for node names which are then translated
+// to content_t after the NodeDefManager was initialized
class NodeResolver {
public:
NodeResolver();
virtual ~NodeResolver();
+ // Callback which is run as soon NodeDefManager is ready
virtual void resolveNodeNames() = 0;
// required because this class is used as mixin for ObjDef
@@ -804,12 +814,31 @@ public:
bool getIdsFromNrBacklog(std::vector<content_t> *result_out,
bool all_required = false, content_t c_fallback = CONTENT_IGNORE);
- void nodeResolveInternal();
+ inline bool isResolveDone() const { return m_resolve_done; }
+ void reset(bool resolve_done = false);
- u32 m_nodenames_idx = 0;
- u32 m_nnlistsizes_idx = 0;
+ // Vector containing all node names in the resolve "queue"
std::vector<std::string> m_nodenames;
+ // Specifies the "set size" of node names which are to be processed
+ // this is used for getIdsFromNrBacklog
+ // TODO: replace or remove
std::vector<size_t> m_nnlistsizes;
+
+protected:
+ friend class NodeDefManager; // m_ndef
+
const NodeDefManager *m_ndef = nullptr;
+ // Index of the next "m_nodenames" entry to resolve
+ u32 m_nodenames_idx = 0;
+
+private:
+#if BUILD_UNITTESTS
+ // Unittest requires access to m_resolve_done
+ friend class TestSchematic;
+#endif
+ void nodeResolveInternal();
+
+ // Index of the next "m_nnlistsizes" entry to process
+ u32 m_nnlistsizes_idx = 0;
bool m_resolve_done = false;
};
diff --git a/src/nodemetadata.cpp b/src/nodemetadata.cpp
index f98732385..b5052c3b8 100644
--- a/src/nodemetadata.cpp
+++ b/src/nodemetadata.cpp
@@ -113,13 +113,13 @@ int NodeMetadata::countNonPrivate() const
*/
void NodeMetadataList::serialize(std::ostream &os, u8 blockver, bool disk,
- bool absolute_pos) const
+ bool absolute_pos, bool include_empty) const
{
/*
Version 0 is a placeholder for "nothing to see here; go away."
*/
- u16 count = countNonEmpty();
+ u16 count = include_empty ? m_data.size() : countNonEmpty();
if (count == 0) {
writeU8(os, 0); // version
return;
@@ -134,7 +134,7 @@ void NodeMetadataList::serialize(std::ostream &os, u8 blockver, bool disk,
i != m_data.end(); ++i) {
v3s16 p = i->first;
NodeMetadata *data = i->second;
- if (data->empty())
+ if (!include_empty && data->empty())
continue;
if (absolute_pos) {
diff --git a/src/nodemetadata.h b/src/nodemetadata.h
index c028caf88..4b5b4d887 100644
--- a/src/nodemetadata.h
+++ b/src/nodemetadata.h
@@ -82,7 +82,7 @@ public:
~NodeMetadataList();
void serialize(std::ostream &os, u8 blockver, bool disk = true,
- bool absolute_pos = false) const;
+ bool absolute_pos = false, bool include_empty = false) const;
void deSerialize(std::istream &is, IItemDefManager *item_def_mgr,
bool absolute_pos = false);
diff --git a/src/noise.cpp b/src/noise.cpp
index e16564b05..2f4de6855 100644
--- a/src/noise.cpp
+++ b/src/noise.cpp
@@ -312,51 +312,6 @@ float noise2d_perlin(float x, float y, s32 seed,
}
-float noise2d_perlin_abs(float x, float y, s32 seed,
- int octaves, float persistence, bool eased)
-{
- float a = 0;
- float f = 1.0;
- float g = 1.0;
- for (int i = 0; i < octaves; i++) {
- a += g * std::fabs(noise2d_gradient(x * f, y * f, seed + i, eased));
- f *= 2.0;
- g *= persistence;
- }
- return a;
-}
-
-
-float noise3d_perlin(float x, float y, float z, s32 seed,
- int octaves, float persistence, bool eased)
-{
- float a = 0;
- float f = 1.0;
- float g = 1.0;
- for (int i = 0; i < octaves; i++) {
- a += g * noise3d_gradient(x * f, y * f, z * f, seed + i, eased);
- f *= 2.0;
- g *= persistence;
- }
- return a;
-}
-
-
-float noise3d_perlin_abs(float x, float y, float z, s32 seed,
- int octaves, float persistence, bool eased)
-{
- float a = 0;
- float f = 1.0;
- float g = 1.0;
- for (int i = 0; i < octaves; i++) {
- a += g * std::fabs(noise3d_gradient(x * f, y * f, z * f, seed + i, eased));
- f *= 2.0;
- g *= persistence;
- }
- return a;
-}
-
-
float contour(float v)
{
v = std::fabs(v);
@@ -369,7 +324,7 @@ float contour(float v)
///////////////////////// [ New noise ] ////////////////////////////
-float NoisePerlin2D(NoiseParams *np, float x, float y, s32 seed)
+float NoisePerlin2D(const NoiseParams *np, float x, float y, s32 seed)
{
float a = 0;
float f = 1.0;
@@ -395,7 +350,7 @@ float NoisePerlin2D(NoiseParams *np, float x, float y, s32 seed)
}
-float NoisePerlin3D(NoiseParams *np, float x, float y, float z, s32 seed)
+float NoisePerlin3D(const NoiseParams *np, float x, float y, float z, s32 seed)
{
float a = 0;
float f = 1.0;
@@ -422,7 +377,7 @@ float NoisePerlin3D(NoiseParams *np, float x, float y, float z, s32 seed)
}
-Noise::Noise(NoiseParams *np_, s32 seed, u32 sx, u32 sy, u32 sz)
+Noise::Noise(const NoiseParams *np_, s32 seed, u32 sx, u32 sy, u32 sz)
{
np = *np_;
this->seed = seed;
diff --git a/src/noise.h b/src/noise.h
index 613879890..e4a9ed6c7 100644
--- a/src/noise.h
+++ b/src/noise.h
@@ -146,7 +146,7 @@ public:
float *persist_buf = nullptr;
float *result = nullptr;
- Noise(NoiseParams *np, s32 seed, u32 sx, u32 sy, u32 sz=1);
+ Noise(const NoiseParams *np, s32 seed, u32 sx, u32 sy, u32 sz=1);
~Noise();
void setSize(u32 sx, u32 sy, u32 sz=1);
@@ -192,8 +192,8 @@ private:
};
-float NoisePerlin2D(NoiseParams *np, float x, float y, s32 seed);
-float NoisePerlin3D(NoiseParams *np, float x, float y, float z, s32 seed);
+float NoisePerlin2D(const NoiseParams *np, float x, float y, s32 seed);
+float NoisePerlin3D(const NoiseParams *np, float x, float y, float z, s32 seed);
inline float NoisePerlin2D_PO(NoiseParams *np, float x, float xoff,
float y, float yoff, s32 seed)
@@ -224,15 +224,6 @@ float noise3d_gradient(float x, float y, float z, s32 seed, bool eased=false);
float noise2d_perlin(float x, float y, s32 seed,
int octaves, float persistence, bool eased=true);
-float noise2d_perlin_abs(float x, float y, s32 seed,
- int octaves, float persistence, bool eased=true);
-
-float noise3d_perlin(float x, float y, float z, s32 seed,
- int octaves, float persistence, bool eased=false);
-
-float noise3d_perlin_abs(float x, float y, float z, s32 seed,
- int octaves, float persistence, bool eased=false);
-
inline float easeCurve(float t)
{
return t * t * t * (t * (6.f * t - 15.f) + 10.f);
diff --git a/src/object_properties.cpp b/src/object_properties.cpp
index 2eebc27d6..c7f6becf0 100644
--- a/src/object_properties.cpp
+++ b/src/object_properties.cpp
@@ -28,7 +28,7 @@ static const video::SColor NULL_BGCOLOR{0, 1, 1, 1};
ObjectProperties::ObjectProperties()
{
- textures.emplace_back("unknown_object.png");
+ textures.emplace_back("no_texture.png");
colors.emplace_back(255,255,255,255);
}
@@ -83,6 +83,39 @@ std::string ObjectProperties::dump()
return os.str();
}
+bool ObjectProperties::validate()
+{
+ const char *func = "ObjectProperties::validate(): ";
+ bool ret = true;
+
+ // cf. where serializeString16 is used below
+ for (u32 i = 0; i < textures.size(); i++) {
+ if (textures[i].size() > U16_MAX) {
+ warningstream << func << "texture " << (i+1) << " has excessive length, "
+ "clearing it." << std::endl;
+ textures[i].clear();
+ ret = false;
+ }
+ }
+ if (nametag.length() > U16_MAX) {
+ warningstream << func << "nametag has excessive length, clearing it." << std::endl;
+ nametag.clear();
+ ret = false;
+ }
+ if (infotext.length() > U16_MAX) {
+ warningstream << func << "infotext has excessive length, clearing it." << std::endl;
+ infotext.clear();
+ ret = false;
+ }
+ if (wield_item.length() > U16_MAX) {
+ warningstream << func << "wield_item has excessive length, clearing it." << std::endl;
+ wield_item.clear();
+ ret = false;
+ }
+
+ return ret;
+}
+
void ObjectProperties::serialize(std::ostream &os) const
{
writeU8(os, 4); // PROTOCOL_VERSION >= 37
@@ -105,7 +138,6 @@ void ObjectProperties::serialize(std::ostream &os) const
writeU8(os, is_visible);
writeU8(os, makes_footstep_sound);
writeF32(os, automatic_rotate);
- // Added in protocol version 14
os << serializeString16(mesh);
writeU16(os, colors.size());
for (video::SColor color : colors) {
diff --git a/src/object_properties.h b/src/object_properties.h
index db28eebfd..79866a22c 100644
--- a/src/object_properties.h
+++ b/src/object_properties.h
@@ -68,6 +68,8 @@ struct ObjectProperties
ObjectProperties();
std::string dump();
+ // check limits of some important properties (strings) that'd cause exceptions later on
+ bool validate();
void serialize(std::ostream &os) const;
void deSerialize(std::istream &is);
};
diff --git a/src/player.cpp b/src/player.cpp
index d3ba5c2c2..347be30f1 100644
--- a/src/player.cpp
+++ b/src/player.cpp
@@ -19,6 +19,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "player.h"
+#include <cmath>
#include "threading/mutex_auto_lock.h"
#include "util/numeric.h"
#include "hud.h"
@@ -159,6 +160,64 @@ void Player::clearHud()
}
}
+#ifndef SERVER
+
+u32 PlayerControl::getKeysPressed() const
+{
+ u32 keypress_bits =
+ ( (u32)(jump & 1) << 4) |
+ ( (u32)(aux1 & 1) << 5) |
+ ( (u32)(sneak & 1) << 6) |
+ ( (u32)(dig & 1) << 7) |
+ ( (u32)(place & 1) << 8) |
+ ( (u32)(zoom & 1) << 9)
+ ;
+
+ // If any direction keys are pressed pass those through
+ if (direction_keys != 0)
+ {
+ keypress_bits |= direction_keys;
+ }
+ // Otherwise set direction keys based on joystick movement (for mod compatibility)
+ else if (isMoving())
+ {
+ float abs_d;
+
+ // (absolute value indicates forward / backward)
+ abs_d = abs(movement_direction);
+ if (abs_d < 3.0f / 8.0f * M_PI)
+ keypress_bits |= (u32)1; // Forward
+ if (abs_d > 5.0f / 8.0f * M_PI)
+ keypress_bits |= (u32)1 << 1; // Backward
+
+ // rotate entire coordinate system by 90 degree
+ abs_d = movement_direction + M_PI_2;
+ if (abs_d >= M_PI)
+ abs_d -= 2 * M_PI;
+ abs_d = abs(abs_d);
+ // (value now indicates left / right)
+ if (abs_d < 3.0f / 8.0f * M_PI)
+ keypress_bits |= (u32)1 << 2; // Left
+ if (abs_d > 5.0f / 8.0f * M_PI)
+ keypress_bits |= (u32)1 << 3; // Right
+ }
+
+ return keypress_bits;
+}
+
+#endif
+
+void PlayerControl::unpackKeysPressed(u32 keypress_bits)
+{
+ direction_keys = keypress_bits & 0xf;
+ jump = keypress_bits & (1 << 4);
+ aux1 = keypress_bits & (1 << 5);
+ sneak = keypress_bits & (1 << 6);
+ dig = keypress_bits & (1 << 7);
+ place = keypress_bits & (1 << 8);
+ zoom = keypress_bits & (1 << 9);
+}
+
void PlayerSettings::readGlobalSettings()
{
free_move = g_settings->getBool("free_move");
diff --git a/src/player.h b/src/player.h
index ec068a8b1..d769acdad 100644
--- a/src/player.h
+++ b/src/player.h
@@ -49,26 +49,18 @@ struct PlayerControl
PlayerControl() = default;
PlayerControl(
- bool a_up,
- bool a_down,
- bool a_left,
- bool a_right,
- bool a_jump,
- bool a_aux1,
- bool a_sneak,
+ bool a_up, bool a_down, bool a_left, bool a_right,
+ bool a_jump, bool a_aux1, bool a_sneak,
bool a_zoom,
- bool a_dig,
- bool a_place,
- float a_pitch,
- float a_yaw,
- float a_sidew_move_joystick_axis,
- float a_forw_move_joystick_axis
+ bool a_dig, bool a_place,
+ float a_pitch, float a_yaw,
+ float a_movement_speed, float a_movement_direction
)
{
- up = a_up;
- down = a_down;
- left = a_left;
- right = a_right;
+ // Encode direction keys into a single value so nobody uses it accidentally
+ // as movement_{speed,direction} is supposed to be the source of truth.
+ direction_keys = (a_up&1) | ((a_down&1) << 1) |
+ ((a_left&1) << 2) | ((a_right&1) << 3);
jump = a_jump;
aux1 = a_aux1;
sneak = a_sneak;
@@ -77,23 +69,31 @@ struct PlayerControl
place = a_place;
pitch = a_pitch;
yaw = a_yaw;
- sidew_move_joystick_axis = a_sidew_move_joystick_axis;
- forw_move_joystick_axis = a_forw_move_joystick_axis;
+ movement_speed = a_movement_speed;
+ movement_direction = a_movement_direction;
}
- bool up = false;
- bool down = false;
- bool left = false;
- bool right = false;
+
+#ifndef SERVER
+ // For client use
+ u32 getKeysPressed() const;
+ inline bool isMoving() const { return movement_speed > 0.001f; }
+#endif
+
+ // For server use
+ void unpackKeysPressed(u32 keypress_bits);
+
+ u8 direction_keys = 0;
bool jump = false;
bool aux1 = false;
bool sneak = false;
bool zoom = false;
bool dig = false;
bool place = false;
+ // Note: These four are NOT available on the server
float pitch = 0.0f;
float yaw = 0.0f;
- float sidew_move_joystick_axis = 0.0f;
- float forw_move_joystick_axis = 0.0f;
+ float movement_speed = 0.0f;
+ float movement_direction = 0.0f;
};
struct PlayerSettings
@@ -200,8 +200,6 @@ public:
return m_fov_override_spec;
}
- u32 keyPressed = 0;
-
HudElement* getHud(u32 id);
u32 addHud(HudElement* hud);
HudElement* removeHud(u32 id);
diff --git a/src/porting.cpp b/src/porting.cpp
index 4c87bddee..caf9e9be3 100644
--- a/src/porting.cpp
+++ b/src/porting.cpp
@@ -35,6 +35,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include <algorithm>
#include <shlwapi.h>
#include <shellapi.h>
+ #include <mmsystem.h>
#endif
#if !defined(_WIN32)
#include <unistd.h>
@@ -69,6 +70,15 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include <cstdarg>
#include <cstdio>
+#if !defined(SERVER) && defined(_WIN32)
+// On Windows export some driver-specific variables to encourage Minetest to be
+// executed on the discrete GPU in case of systems with two. Portability is fun.
+extern "C" {
+ __declspec(dllexport) DWORD NvOptimusEnablement = 1;
+ __declspec(dllexport) DWORD AmdPowerXpressRequestHighPerformance = 1;
+}
+#endif
+
namespace porting
{
@@ -766,6 +776,9 @@ bool open_directory(const std::string &path)
inline double get_perf_freq()
{
+ // Also use this opportunity to enable high-res timers
+ timeBeginPeriod(1);
+
LARGE_INTEGER freq;
QueryPerformanceFrequency(&freq);
return freq.QuadPart;
diff --git a/src/porting.h b/src/porting.h
index e4ebe36fd..93932e1d9 100644
--- a/src/porting.h
+++ b/src/porting.h
@@ -234,21 +234,21 @@ inline u64 getTimeMs()
{
struct timespec ts;
os_get_clock(&ts);
- return ts.tv_sec * 1000 + ts.tv_nsec / 1000000;
+ return ((u64) ts.tv_sec) * 1000LL + ((u64) ts.tv_nsec) / 1000000LL;
}
inline u64 getTimeUs()
{
struct timespec ts;
os_get_clock(&ts);
- return ts.tv_sec * 1000000 + ts.tv_nsec / 1000;
+ return ((u64) ts.tv_sec) * 1000000LL + ((u64) ts.tv_nsec) / 1000LL;
}
inline u64 getTimeNs()
{
struct timespec ts;
os_get_clock(&ts);
- return ts.tv_sec * 1000000000 + ts.tv_nsec;
+ return ((u64) ts.tv_sec) * 1000000000LL + ((u64) ts.tv_nsec);
}
#endif
diff --git a/src/remoteplayer.cpp b/src/remoteplayer.cpp
index 925ad001b..20be7a8c8 100644
--- a/src/remoteplayer.cpp
+++ b/src/remoteplayer.cpp
@@ -31,6 +31,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
/*
RemotePlayer
*/
+
// static config cache for remoteplayer
bool RemotePlayer::m_setting_cache_loaded = false;
float RemotePlayer::m_setting_chat_message_limit_per_10sec = 0.0f;
@@ -46,6 +47,7 @@ RemotePlayer::RemotePlayer(const char *name, IItemDefManager *idef):
g_settings->getU16("chat_message_limit_trigger_kick");
RemotePlayer::m_setting_cache_loaded = true;
}
+
movement_acceleration_default = g_settings->getFloat("movement_acceleration_default") * BS;
movement_acceleration_air = g_settings->getFloat("movement_acceleration_air") * BS;
movement_acceleration_fast = g_settings->getFloat("movement_acceleration_fast") * BS;
@@ -59,32 +61,16 @@ RemotePlayer::RemotePlayer(const char *name, IItemDefManager *idef):
movement_liquid_sink = g_settings->getFloat("movement_liquid_sink") * BS;
movement_gravity = g_settings->getFloat("movement_gravity") * BS;
- // copy defaults
- m_cloud_params.density = 0.4f;
- m_cloud_params.color_bright = video::SColor(229, 240, 240, 255);
- m_cloud_params.color_ambient = video::SColor(255, 0, 0, 0);
- m_cloud_params.height = 120.0f;
- m_cloud_params.thickness = 16.0f;
- m_cloud_params.speed = v2f(0.0f, -2.0f);
-
// Skybox defaults:
-
- SkyboxDefaults sky_defaults;
-
- m_skybox_params.sky_color = sky_defaults.getSkyColorDefaults();
- m_skybox_params.type = "regular";
- m_skybox_params.clouds = true;
- m_skybox_params.fog_sun_tint = video::SColor(255, 244, 125, 29);
- m_skybox_params.fog_moon_tint = video::SColorf(0.5, 0.6, 0.8, 1).toSColor();
- m_skybox_params.fog_tint_type = "default";
-
- m_sun_params = sky_defaults.getSunDefaults();
- m_moon_params = sky_defaults.getMoonDefaults();
- m_star_params = sky_defaults.getStarDefaults();
+ m_cloud_params = SkyboxDefaults::getCloudDefaults();
+ m_skybox_params = SkyboxDefaults::getSkyDefaults();
+ m_sun_params = SkyboxDefaults::getSunDefaults();
+ m_moon_params = SkyboxDefaults::getMoonDefaults();
+ m_star_params = SkyboxDefaults::getStarDefaults();
}
-const RemotePlayerChatResult RemotePlayer::canSendChatMessage()
+RemotePlayerChatResult RemotePlayer::canSendChatMessage()
{
// Rate limit messages
u32 now = time(NULL);
diff --git a/src/remoteplayer.h b/src/remoteplayer.h
index 8d086fc5a..c8991480b 100644
--- a/src/remoteplayer.h
+++ b/src/remoteplayer.h
@@ -21,7 +21,6 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#pragma once
#include "player.h"
-#include "cloudparams.h"
#include "skyparams.h"
class PlayerSAO;
@@ -47,7 +46,7 @@ public:
PlayerSAO *getPlayerSAO() { return m_sao; }
void setPlayerSAO(PlayerSAO *sao) { m_sao = sao; }
- const RemotePlayerChatResult canSendChatMessage();
+ RemotePlayerChatResult canSendChatMessage();
void setHotbarItemcount(s32 hotbar_itemcount)
{
diff --git a/src/rollback.cpp b/src/rollback.cpp
index 3cd9c7ce7..33b7958b9 100644
--- a/src/rollback.cpp
+++ b/src/rollback.cpp
@@ -941,12 +941,6 @@ void RollbackManager::addAction(const RollbackAction & action)
}
}
-std::list<RollbackAction> RollbackManager::getEntriesSince(time_t first_time)
-{
- flush();
- return getActionsSince(first_time);
-}
-
std::list<RollbackAction> RollbackManager::getNodeActors(v3s16 pos, int range,
time_t seconds, int limit)
{
diff --git a/src/rollback.h b/src/rollback.h
index 1d9949d15..ff96e513f 100644
--- a/src/rollback.h
+++ b/src/rollback.h
@@ -46,7 +46,6 @@ public:
void flush();
void addAction(const RollbackAction & action);
- std::list<RollbackAction> getEntriesSince(time_t first_time);
std::list<RollbackAction> getNodeActors(v3s16 pos, int range,
time_t seconds, int limit);
std::list<RollbackAction> getRevertActions(
diff --git a/src/script/common/c_content.cpp b/src/script/common/c_content.cpp
index 6995f6b61..8a5a3fe71 100644
--- a/src/script/common/c_content.cpp
+++ b/src/script/common/c_content.cpp
@@ -119,6 +119,8 @@ void read_item_definition(lua_State* L, int index,
// "" = no prediction
getstringfield(L, index, "node_placement_prediction",
def.node_placement_prediction);
+
+ getintfield(L, index, "place_param2", def.place_param2);
}
/******************************************************************************/
@@ -198,8 +200,6 @@ void read_object_properties(lua_State *L, int index,
if (prop->hp_max < sao->getHP()) {
PlayerHPChangeReason reason(PlayerHPChangeReason::SET_HP);
sao->setHP(prop->hp_max, reason);
- if (sao->getType() == ACTIVEOBJECT_TYPE_PLAYER)
- sao->getEnv()->getGameDef()->SendPlayerHPOrDie((PlayerSAO *)sao, reason);
}
}
@@ -683,7 +683,8 @@ void read_content_features(lua_State *L, ContentFeatures &f, int index)
if (!f.palette_name.empty() &&
!(f.param_type_2 == CPT2_COLOR ||
f.param_type_2 == CPT2_COLORED_FACEDIR ||
- f.param_type_2 == CPT2_COLORED_WALLMOUNTED))
+ f.param_type_2 == CPT2_COLORED_WALLMOUNTED ||
+ f.param_type_2 == CPT2_COLORED_DEGROTATE))
warningstream << "Node " << f.name.c_str()
<< " has a palette, but not a suitable paramtype2." << std::endl;
@@ -718,6 +719,9 @@ void read_content_features(lua_State *L, ContentFeatures &f, int index)
// the slowest possible
f.liquid_viscosity = getintfield_default(L, index,
"liquid_viscosity", f.liquid_viscosity);
+ // If move_resistance is not set explicitly,
+ // move_resistance is equal to liquid_viscosity
+ f.move_resistance = f.liquid_viscosity;
f.liquid_range = getintfield_default(L, index,
"liquid_range", f.liquid_range);
f.leveled = getintfield_default(L, index, "leveled", f.leveled);
@@ -821,6 +825,21 @@ void read_content_features(lua_State *L, ContentFeatures &f, int index)
getstringfield(L, index, "node_dig_prediction",
f.node_dig_prediction);
+ // How much the node slows down players, ranging from 1 to 7,
+ // the higher, the slower.
+ f.move_resistance = getintfield_default(L, index,
+ "move_resistance", f.move_resistance);
+
+ // Whether e.g. players in this node will have liquid movement physics
+ lua_getfield(L, index, "liquid_move_physics");
+ if(lua_isboolean(L, -1)) {
+ f.liquid_move_physics = lua_toboolean(L, -1);
+ } else if(lua_isnil(L, -1)) {
+ f.liquid_move_physics = f.liquid_type != LIQUID_NONE;
+ } else {
+ errorstream << "Field \"liquid_move_physics\": Invalid type!" << std::endl;
+ }
+ lua_pop(L, 1);
}
void push_content_features(lua_State *L, const ContentFeatures &c)
@@ -948,6 +967,10 @@ void push_content_features(lua_State *L, const ContentFeatures &c)
lua_setfield(L, -2, "legacy_wallmounted");
lua_pushstring(L, c.node_dig_prediction.c_str());
lua_setfield(L, -2, "node_dig_prediction");
+ lua_pushnumber(L, c.move_resistance);
+ lua_setfield(L, -2, "move_resistance");
+ lua_pushboolean(L, c.liquid_move_physics);
+ lua_setfield(L, -2, "liquid_move_physics");
}
/******************************************************************************/
@@ -1347,26 +1370,28 @@ void read_inventory_list(lua_State *L, int tableindex,
{
if(tableindex < 0)
tableindex = lua_gettop(L) + 1 + tableindex;
+
// If nil, delete list
if(lua_isnil(L, tableindex)){
inv->deleteList(name);
return;
}
- // Otherwise set list
+
+ // Get Lua-specified items to insert into the list
std::vector<ItemStack> items = read_items(L, tableindex,srv);
- int listsize = (forcesize != -1) ? forcesize : items.size();
+ size_t listsize = (forcesize >= 0) ? forcesize : items.size();
+
+ // Create or resize/clear list
InventoryList *invlist = inv->addList(name, listsize);
- int index = 0;
- for(std::vector<ItemStack>::const_iterator
- i = items.begin(); i != items.end(); ++i){
- if(forcesize != -1 && index == forcesize)
- break;
- invlist->changeItem(index, *i);
- index++;
+ if (!invlist) {
+ luaL_error(L, "inventory list: cannot create list named '%s'", name);
+ return;
}
- while(forcesize != -1 && index < forcesize){
- invlist->deleteItem(index);
- index++;
+
+ for (size_t i = 0; i < items.size(); ++i) {
+ if (i == listsize)
+ break; // Truncate provided list of items
+ invlist->changeItem(i, items[i]);
}
}
@@ -1923,6 +1948,8 @@ void read_hud_element(lua_State *L, HudElement *elem)
elem->world_pos = lua_istable(L, -1) ? read_v3f(L, -1) : v3f();
lua_pop(L, 1);
+ elem->style = getintfield_default(L, 2, "style", 0);
+
/* check for known deprecated element usage */
if ((elem->type == HUD_ELEM_STATBAR) && (elem->size == v2s32()))
log_deprecated(L,"Deprecated usage of statbar without size!");
@@ -1977,17 +2004,22 @@ void push_hud_element(lua_State *L, HudElement *elem)
lua_pushstring(L, elem->text2.c_str());
lua_setfield(L, -2, "text2");
+
+ lua_pushinteger(L, elem->style);
+ lua_setfield(L, -2, "style");
}
-HudElementStat read_hud_change(lua_State *L, HudElement *elem, void **value)
+bool read_hud_change(lua_State *L, HudElementStat &stat, HudElement *elem, void **value)
{
- HudElementStat stat = HUD_STAT_NUMBER;
- std::string statstr;
- if (lua_isstring(L, 3)) {
+ std::string statstr = lua_tostring(L, 3);
+ {
int statint;
- statstr = lua_tostring(L, 3);
- stat = string_to_enum(es_HudElementStat, statint, statstr) ?
- (HudElementStat)statint : stat;
+ if (!string_to_enum(es_HudElementStat, statint, statstr)) {
+ script_log_unique(L, "Unknown HUD stat type: " + statstr, warningstream);
+ return false;
+ }
+
+ stat = (HudElementStat)statint;
}
switch (stat) {
@@ -2045,8 +2077,13 @@ HudElementStat read_hud_change(lua_State *L, HudElement *elem, void **value)
elem->text2 = luaL_checkstring(L, 4);
*value = &elem->text2;
break;
+ case HUD_STAT_STYLE:
+ elem->style = luaL_checknumber(L, 4);
+ *value = &elem->style;
+ break;
}
- return stat;
+
+ return true;
}
/******************************************************************************/
diff --git a/src/script/common/c_content.h b/src/script/common/c_content.h
index 29d576355..e762604a4 100644
--- a/src/script/common/c_content.h
+++ b/src/script/common/c_content.h
@@ -39,7 +39,9 @@ extern "C" {
#include "itemgroup.h"
#include "itemdef.h"
#include "c_types.h"
-#include "hud.h"
+// We do a explicit path include because by default c_content.h include src/client/hud.h
+// prior to the src/hud.h, which is not good on server only build
+#include "../../hud.h"
namespace Json { class Value; }
@@ -191,12 +193,12 @@ void read_json_value (lua_State *L, Json::Value &root,
void push_pointed_thing(lua_State *L, const PointedThing &pointed, bool csm =
false, bool hitpoint = false);
-void push_objectRef (lua_State *L, const u16 id);
+void push_objectRef (lua_State *L, const u16 id);
-void read_hud_element (lua_State *L, HudElement *elem);
+void read_hud_element (lua_State *L, HudElement *elem);
-void push_hud_element (lua_State *L, HudElement *elem);
+void push_hud_element (lua_State *L, HudElement *elem);
-HudElementStat read_hud_change (lua_State *L, HudElement *elem, void **value);
+bool read_hud_change (lua_State *L, HudElementStat &stat, HudElement *elem, void **value);
-void push_collision_move_result(lua_State *L, const collisionMoveResult &res);
+void push_collision_move_result(lua_State *L, const collisionMoveResult &res);
diff --git a/src/script/common/c_converter.cpp b/src/script/common/c_converter.cpp
index c00401b58..19734b913 100644
--- a/src/script/common/c_converter.cpp
+++ b/src/script/common/c_converter.cpp
@@ -51,12 +51,32 @@ if (value < F1000_MIN || value > F1000_MAX) { \
#define CHECK_POS_TAB(index) CHECK_TYPE(index, "position", LUA_TTABLE)
+/**
+ * A helper which sets (if available) the vector metatable from builtin as metatable
+ * for the table on top of the stack
+ */
+static void set_vector_metatable(lua_State *L)
+{
+ // get vector.metatable
+ lua_getglobal(L, "vector");
+ if (!lua_istable(L, -1)) {
+ // there is no global vector table
+ lua_pop(L, 1);
+ errorstream << "set_vector_metatable in c_converter.cpp: " <<
+ "missing global vector table" << std::endl;
+ return;
+ }
+ lua_getfield(L, -1, "metatable");
+ // set the metatable
+ lua_setmetatable(L, -3);
+ // pop vector global
+ lua_pop(L, 1);
+}
+
+
void push_float_string(lua_State *L, float value)
{
- std::stringstream ss;
- std::string str;
- ss << value;
- str = ss.str();
+ auto str = ftos(value);
lua_pushstring(L, str.c_str());
}
@@ -69,6 +89,7 @@ void push_v3f(lua_State *L, v3f p)
lua_setfield(L, -2, "y");
lua_pushnumber(L, p.Z);
lua_setfield(L, -2, "z");
+ set_vector_metatable(L);
}
void push_v2f(lua_State *L, v2f p)
@@ -281,6 +302,7 @@ void push_v3s16(lua_State *L, v3s16 p)
lua_setfield(L, -2, "y");
lua_pushinteger(L, p.Z);
lua_setfield(L, -2, "z");
+ set_vector_metatable(L);
}
v3s16 read_v3s16(lua_State *L, int index)
diff --git a/src/script/common/c_internal.cpp b/src/script/common/c_internal.cpp
index ad5f836c5..df82dba14 100644
--- a/src/script/common/c_internal.cpp
+++ b/src/script/common/c_internal.cpp
@@ -18,10 +18,12 @@ with this program; if not, write to the Free Software Foundation, Inc.,
*/
#include "common/c_internal.h"
+#include "util/numeric.h"
#include "debug.h"
#include "log.h"
#include "porting.h"
#include "settings.h"
+#include <algorithm> // std::find
std::string script_get_backtrace(lua_State *L)
{
@@ -99,60 +101,35 @@ void script_error(lua_State *L, int pcall_result, const char *mod, const char *f
throw LuaError(err_msg);
}
-// 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 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
- 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:
- // ... <error handler> <run_callbacks> <table> <mode> <arg#1> <arg#2> ... <arg#n>
-
- int result = lua_pcall(L, nargs + 2, 1, error_handler);
- if (result != 0)
- script_error(L, result, NULL, fxn);
-
- lua_remove(L, error_handler);
-}
-
-static void script_log(lua_State *L, const std::string &message,
- std::ostream &log_to, bool do_error, int stack_depth)
+static void script_log_add_source(lua_State *L, std::string &message, int stack_depth)
{
lua_Debug ar;
- log_to << message << " ";
if (lua_getstack(L, stack_depth, &ar)) {
FATAL_ERROR_IF(!lua_getinfo(L, "Sl", &ar), "lua_getinfo() failed");
- log_to << "(at " << ar.short_src << ":" << ar.currentline << ")";
+ message.append(" (at " + std::string(ar.short_src) + ":"
+ + std::to_string(ar.currentline) + ")");
} else {
- log_to << "(at ?:?)";
+ message.append(" (at ?:?)");
}
- log_to << std::endl;
+}
- if (do_error)
- script_error(L, LUA_ERRRUN, NULL, NULL);
- else
- infostream << script_get_backtrace(L) << std::endl;
+bool script_log_unique(lua_State *L, std::string message, std::ostream &log_to,
+ int stack_depth)
+{
+ thread_local std::vector<u64> logged_messages;
+
+ script_log_add_source(L, message, stack_depth);
+ u64 hash = murmur_hash_64_ua(message.data(), message.length(), 0xBADBABE);
+
+ if (std::find(logged_messages.begin(), logged_messages.end(), hash)
+ == logged_messages.end()) {
+
+ logged_messages.emplace_back(hash);
+ log_to << message << std::endl;
+ return true;
+ }
+ return false;
}
DeprecatedHandlingMode get_deprecated_handling_mode()
@@ -174,9 +151,18 @@ DeprecatedHandlingMode get_deprecated_handling_mode()
return ret;
}
-void log_deprecated(lua_State *L, const std::string &message, int stack_depth)
+void log_deprecated(lua_State *L, std::string message, int stack_depth)
{
DeprecatedHandlingMode mode = get_deprecated_handling_mode();
- if (mode != DeprecatedHandlingMode::Ignore)
- script_log(L, message, warningstream, mode == DeprecatedHandlingMode::Error, stack_depth);
+ if (mode == DeprecatedHandlingMode::Ignore)
+ return;
+
+ script_log_add_source(L, message, stack_depth);
+ warningstream << message << std::endl;
+
+ if (mode == DeprecatedHandlingMode::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 452c2dd5e..94cfd61fb 100644
--- a/src/script/common/c_internal.h
+++ b/src/script/common/c_internal.h
@@ -54,6 +54,8 @@ extern "C" {
#define CUSTOM_RIDX_GLOBALS_BACKUP (CUSTOM_RIDX_BASE + 1)
#define CUSTOM_RIDX_CURRENT_MOD_NAME (CUSTOM_RIDX_BASE + 2)
#define CUSTOM_RIDX_BACKTRACE (CUSTOM_RIDX_BASE + 3)
+#define CUSTOM_RIDX_HTTP_API_LUA (CUSTOM_RIDX_BASE + 4)
+
// Determine if CUSTOM_RIDX_SCRIPTAPI will hold a light or full userdata
#if defined(__aarch64__) && USE_LUAJIT
@@ -75,9 +77,6 @@ extern "C" {
} \
}
-#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.
@@ -108,13 +107,17 @@ enum RunCallbacksMode
// are converted by readParam<bool> to true or false, respectively.
};
+// Gets a backtrace of the current execution point
std::string script_get_backtrace(lua_State *L);
+// Wrapper for CFunction calls that converts C++ exceptions to Lua errors
int script_exception_wrapper(lua_State *L, lua_CFunction f);
+// Takes an error from lua_pcall and throws it as a LuaError
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);
-enum class DeprecatedHandlingMode {
+bool script_log_unique(lua_State *L, std::string message, std::ostream &log_to,
+ int stack_depth = 1);
+
+enum DeprecatedHandlingMode {
Ignore,
Log,
Error
@@ -134,5 +137,4 @@ DeprecatedHandlingMode get_deprecated_handling_mode();
* @param message The deprecation method
* @param stack_depth How far on the stack to the first user function (ie: not builtin or core)
*/
-void log_deprecated(lua_State *L, const std::string &message,
- int stack_depth=1);
+void log_deprecated(lua_State *L, std::string message, int stack_depth = 1);
diff --git a/src/script/cpp_api/s_async.cpp b/src/script/cpp_api/s_async.cpp
index 0619b32c0..dacdcd75a 100644
--- a/src/script/cpp_api/s_async.cpp
+++ b/src/script/cpp_api/s_async.cpp
@@ -32,20 +32,19 @@ extern "C" {
#include "filesys.h"
#include "porting.h"
#include "common/c_internal.h"
+#include "lua_api/l_base.h"
/******************************************************************************/
AsyncEngine::~AsyncEngine()
{
-
// Request all threads to stop
for (AsyncWorkerThread *workerThread : workerThreads) {
workerThread->stop();
}
-
// Wake up all threads
- for (std::vector<AsyncWorkerThread *>::iterator it = workerThreads.begin();
- it != workerThreads.end(); ++it) {
+ for (auto it : workerThreads) {
+ (void)it;
jobQueueCounter.post();
}
@@ -68,6 +67,7 @@ AsyncEngine::~AsyncEngine()
/******************************************************************************/
void AsyncEngine::registerStateInitializer(StateInitializer func)
{
+ FATAL_ERROR_IF(initDone, "Initializer may not be registered after init");
stateInitializers.push_back(func);
}
@@ -85,36 +85,36 @@ void AsyncEngine::initialize(unsigned int numEngines)
}
/******************************************************************************/
-unsigned int AsyncEngine::queueAsyncJob(const std::string &func,
- const std::string &params)
+u32 AsyncEngine::queueAsyncJob(std::string &&func, std::string &&params,
+ const std::string &mod_origin)
{
jobQueueMutex.lock();
- LuaJobInfo toAdd;
- toAdd.id = jobIdCounter++;
- toAdd.serializedFunction = func;
- toAdd.serializedParams = params;
+ u32 jobId = jobIdCounter++;
- jobQueue.push_back(toAdd);
+ jobQueue.emplace_back();
+ auto &to_add = jobQueue.back();
+ to_add.id = jobId;
+ to_add.function = std::move(func);
+ to_add.params = std::move(params);
+ to_add.mod_origin = mod_origin;
jobQueueCounter.post();
-
jobQueueMutex.unlock();
-
- return toAdd.id;
+ return jobId;
}
/******************************************************************************/
-LuaJobInfo AsyncEngine::getJob()
+bool AsyncEngine::getJob(LuaJobInfo *job)
{
jobQueueCounter.wait();
jobQueueMutex.lock();
- LuaJobInfo retval;
+ bool retval = false;
if (!jobQueue.empty()) {
- retval = jobQueue.front();
+ *job = std::move(jobQueue.front());
jobQueue.pop_front();
- retval.valid = true;
+ retval = true;
}
jobQueueMutex.unlock();
@@ -122,10 +122,10 @@ LuaJobInfo AsyncEngine::getJob()
}
/******************************************************************************/
-void AsyncEngine::putJobResult(const LuaJobInfo &result)
+void AsyncEngine::putJobResult(LuaJobInfo &&result)
{
resultQueueMutex.lock();
- resultQueue.push_back(result);
+ resultQueue.emplace_back(std::move(result));
resultQueueMutex.unlock();
}
@@ -134,26 +134,30 @@ void AsyncEngine::step(lua_State *L)
{
int error_handler = PUSH_ERROR_HANDLER(L);
lua_getglobal(L, "core");
- resultQueueMutex.lock();
+
+ ScriptApiBase *script = ModApiBase::getScriptApiBase(L);
+
+ MutexAutoLock autolock(resultQueueMutex);
while (!resultQueue.empty()) {
- LuaJobInfo jobDone = resultQueue.front();
+ LuaJobInfo j = std::move(resultQueue.front());
resultQueue.pop_front();
lua_getfield(L, -1, "async_event_handler");
-
- if (lua_isnil(L, -1)) {
+ if (lua_isnil(L, -1))
FATAL_ERROR("Async event handler does not exist!");
- }
-
luaL_checktype(L, -1, LUA_TFUNCTION);
- lua_pushinteger(L, jobDone.id);
- lua_pushlstring(L, jobDone.serializedResult.data(),
- jobDone.serializedResult.size());
+ lua_pushinteger(L, j.id);
+ lua_pushlstring(L, j.result.data(), j.result.size());
- PCALL_RESL(L, lua_pcall(L, 2, 0, error_handler));
+ // Call handler
+ const char *origin = j.mod_origin.empty() ? nullptr : j.mod_origin.c_str();
+ script->setOriginDirect(origin);
+ int result = lua_pcall(L, 2, 0, error_handler);
+ if (result)
+ script_error(L, result, origin, "<async>");
}
- resultQueueMutex.unlock();
+
lua_pop(L, 2); // Pop core and error handler
}
@@ -168,8 +172,8 @@ void AsyncEngine::prepareEnvironment(lua_State* L, int top)
/******************************************************************************/
AsyncWorkerThread::AsyncWorkerThread(AsyncEngine* jobDispatcher,
const std::string &name) :
- Thread(name),
ScriptApiBase(ScriptingType::Async),
+ Thread(name),
jobDispatcher(jobDispatcher)
{
lua_State *L = getStack();
@@ -196,9 +200,9 @@ void* AsyncWorkerThread::run()
{
lua_State *L = getStack();
- std::string script = getServer()->getBuiltinLuaPath() + DIR_DELIM + "init.lua";
try {
- loadScript(script);
+ loadMod(getServer()->getBuiltinLuaPath() + DIR_DELIM + "init.lua",
+ BUILTIN_MOD_NAME);
} catch (const ModError &e) {
errorstream << "Execution of async base environment failed: "
<< e.what() << std::endl;
@@ -213,44 +217,44 @@ void* AsyncWorkerThread::run()
}
// Main loop
+ LuaJobInfo j;
while (!stopRequested()) {
// Wait for job
- LuaJobInfo toProcess = jobDispatcher->getJob();
-
- if (!toProcess.valid || stopRequested()) {
+ if (!jobDispatcher->getJob(&j) || stopRequested())
continue;
- }
lua_getfield(L, -1, "job_processor");
- if (lua_isnil(L, -1)) {
+ if (lua_isnil(L, -1))
FATAL_ERROR("Unable to get async job processor!");
- }
-
luaL_checktype(L, -1, LUA_TFUNCTION);
- // Call it
- lua_pushlstring(L,
- toProcess.serializedFunction.data(),
- toProcess.serializedFunction.size());
- lua_pushlstring(L,
- toProcess.serializedParams.data(),
- toProcess.serializedParams.size());
+ if (luaL_loadbuffer(L, j.function.data(), j.function.size(), "=(async)")) {
+ errorstream << "ASYNC WORKER: Unable to deserialize function" << std::endl;
+ lua_pushnil(L);
+ }
+ lua_pushlstring(L, j.params.data(), j.params.size());
+ // Call it
+ setOriginDirect(j.mod_origin.empty() ? nullptr : j.mod_origin.c_str());
int result = lua_pcall(L, 2, 1, error_handler);
if (result) {
- PCALL_RES(result);
- toProcess.serializedResult = "";
+ try {
+ scriptError(result, "<async>");
+ } catch (const ModError &e) {
+ errorstream << e.what() << std::endl;
+ }
} else {
// Fetch result
size_t length;
const char *retval = lua_tolstring(L, -1, &length);
- toProcess.serializedResult = std::string(retval, length);
+ j.result.assign(retval, length);
}
lua_pop(L, 1); // Pop retval
// Put job result
- jobDispatcher->putJobResult(toProcess);
+ if (!j.result.empty())
+ jobDispatcher->putJobResult(std::move(j));
}
lua_pop(L, 2); // Pop core and error handler
diff --git a/src/script/cpp_api/s_async.h b/src/script/cpp_api/s_async.h
index 99a4f891c..697cb0221 100644
--- a/src/script/cpp_api/s_async.h
+++ b/src/script/cpp_api/s_async.h
@@ -21,7 +21,6 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include <vector>
#include <deque>
-#include <map>
#include "threading/semaphore.h"
#include "threading/thread.h"
@@ -39,26 +38,29 @@ struct LuaJobInfo
{
LuaJobInfo() = default;
- // Function to be called in async environment
- std::string serializedFunction = "";
- // Parameter to be passed to function
- std::string serializedParams = "";
- // Result of function call
- std::string serializedResult = "";
+ // Function to be called in async environment (from string.dump)
+ std::string function;
+ // Parameter to be passed to function (serialized)
+ std::string params;
+ // Result of function call (serialized)
+ std::string result;
+ // Name of the mod who invoked this call
+ std::string mod_origin;
// JobID used to identify a job and match it to callback
- unsigned int id = 0;
-
- bool valid = false;
+ u32 id;
};
// Asynchronous working environment
-class AsyncWorkerThread : public Thread, public ScriptApiBase {
+class AsyncWorkerThread : public Thread, virtual public ScriptApiBase {
+ friend class AsyncEngine;
public:
- AsyncWorkerThread(AsyncEngine* jobDispatcher, const std::string &name);
virtual ~AsyncWorkerThread();
void *run();
+protected:
+ AsyncWorkerThread(AsyncEngine* jobDispatcher, const std::string &name);
+
private:
AsyncEngine *jobDispatcher = nullptr;
};
@@ -89,7 +91,8 @@ public:
* @param params Serialized parameters
* @return jobid The job is queued
*/
- unsigned int queueAsyncJob(const std::string &func, const std::string &params);
+ u32 queueAsyncJob(std::string &&func, std::string &&params,
+ const std::string &mod_origin = "");
/**
* Engine step to process finished jobs
@@ -102,15 +105,16 @@ protected:
/**
* Get a Job from queue to be processed
* this function blocks until a job is ready
- * @return a job to be processed
+ * @param job a job to be processed
+ * @return whether a job was available
*/
- LuaJobInfo getJob();
+ bool getJob(LuaJobInfo *job);
/**
* Put a Job result back to result queue
* @param result result of completed job
*/
- void putJobResult(const LuaJobInfo &result);
+ void putJobResult(LuaJobInfo &&result);
/**
* Initialize environment with current registred functions
@@ -129,11 +133,10 @@ private:
std::vector<StateInitializer> stateInitializers;
// Internal counter to create job IDs
- unsigned int jobIdCounter = 0;
+ u32 jobIdCounter = 0;
// Mutex to protect job queue
std::mutex jobQueueMutex;
-
// Job queue
std::deque<LuaJobInfo> jobQueue;
diff --git a/src/script/cpp_api/s_base.cpp b/src/script/cpp_api/s_base.cpp
index f965975a3..f7b8a5102 100644
--- a/src/script/cpp_api/s_base.cpp
+++ b/src/script/cpp_api/s_base.cpp
@@ -37,6 +37,8 @@ extern "C" {
#include "lualib.h"
#if USE_LUAJIT
#include "luajit.h"
+#else
+ #include "bit.h"
#endif
}
@@ -88,6 +90,11 @@ ScriptApiBase::ScriptApiBase(ScriptingType type):
else
luaL_openlibs(m_luastack);
+ // Load bit library
+ lua_pushcfunction(m_luastack, luaopen_bit);
+ lua_pushstring(m_luastack, LUA_BITLIBNAME);
+ lua_call(m_luastack, 1, 0);
+
// Make the ScriptApiBase* accessible to ModApiBase
#if INDIRECT_SCRIPTAPI_RIDX
*(void **)(lua_newuserdata(m_luastack, sizeof(void *))) = this;
@@ -331,13 +338,9 @@ void ScriptApiBase::setOriginDirect(const char *origin)
void ScriptApiBase::setOriginFromTableRaw(int index, const char *fxn)
{
-#ifdef SCRIPTAPI_DEBUG
lua_State *L = getStack();
-
m_last_run_mod = lua_istable(L, index) ?
getstringfield_default(L, index, "mod_origin", "") : "";
- //printf(">>>> running %s for mod: %s\n", fxn, m_last_run_mod.c_str());
-#endif
}
/*
diff --git a/src/script/cpp_api/s_base.h b/src/script/cpp_api/s_base.h
index 86f7f7bac..244d81605 100644
--- a/src/script/cpp_api/s_base.h
+++ b/src/script/cpp_api/s_base.h
@@ -39,7 +39,6 @@ extern "C" {
#include "config.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!
@@ -108,7 +107,9 @@ public:
Client* getClient();
#endif
- std::string getOrigin() { return m_last_run_mod; }
+ // IMPORTANT: these cannot be used for any security-related uses, they exist
+ // only to enrich error messages
+ const std::string &getOrigin() { return m_last_run_mod; }
void setOriginDirect(const char *origin);
void setOriginFromTableRaw(int index, const char *fxn);
@@ -124,11 +125,23 @@ protected:
friend class ModApiEnvMod;
friend class LuaVoxelManip;
+ /*
+ Subtle edge case with coroutines: If for whatever reason you have a
+ method in a subclass that's called from existing lua_CFunction
+ (any of the l_*.cpp files) then make it static and take the lua_State*
+ as an argument. This is REQUIRED because getStack() will not return the
+ correct state if called inside coroutines.
+
+ Also note that src/script/common/ is the better place for such helpers.
+ */
lua_State* getStack()
{ return m_luastack; }
+ // Checks that stack size is sane
void realityCheck();
+ // Takes an error from lua_pcall and throws it as a LuaError
void scriptError(int result, const char *fxn);
+ // Dumps stack contents for debugging
void stackDump(std::ostream &o);
void setGameDef(IGameDef* gamedef) { m_gamedef = gamedef; }
diff --git a/src/script/cpp_api/s_client.cpp b/src/script/cpp_api/s_client.cpp
index f2cc9730b..c889fffa0 100644
--- a/src/script/cpp_api/s_client.cpp
+++ b/src/script/cpp_api/s_client.cpp
@@ -33,7 +33,11 @@ void ScriptApiClient::on_mods_loaded()
lua_getglobal(L, "core");
lua_getfield(L, -1, "registered_on_mods_loaded");
// Call callbacks
- runCallbacks(0, RUN_CALLBACKS_MODE_FIRST);
+ try {
+ runCallbacks(0, RUN_CALLBACKS_MODE_FIRST);
+ } catch (LuaError &e) {
+ getClient()->setFatalError(e);
+ }
}
void ScriptApiClient::on_shutdown()
@@ -44,7 +48,11 @@ void ScriptApiClient::on_shutdown()
lua_getglobal(L, "core");
lua_getfield(L, -1, "registered_on_shutdown");
// Call callbacks
- runCallbacks(0, RUN_CALLBACKS_MODE_FIRST);
+ try {
+ runCallbacks(0, RUN_CALLBACKS_MODE_FIRST);
+ } catch (LuaError &e) {
+ getClient()->setFatalError(e);
+ }
}
bool ScriptApiClient::on_sending_message(const std::string &message)
@@ -56,7 +64,12 @@ bool ScriptApiClient::on_sending_message(const std::string &message)
lua_getfield(L, -1, "registered_on_sending_chat_message");
// Call callbacks
lua_pushstring(L, message.c_str());
- runCallbacks(1, RUN_CALLBACKS_MODE_OR_SC);
+ try {
+ runCallbacks(1, RUN_CALLBACKS_MODE_OR_SC);
+ } catch (LuaError &e) {
+ getClient()->setFatalError(e);
+ return true;
+ }
return readParam<bool>(L, -1);
}
@@ -69,7 +82,12 @@ bool ScriptApiClient::on_receiving_message(const std::string &message)
lua_getfield(L, -1, "registered_on_receiving_chat_message");
// Call callbacks
lua_pushstring(L, message.c_str());
- runCallbacks(1, RUN_CALLBACKS_MODE_OR_SC);
+ try {
+ runCallbacks(1, RUN_CALLBACKS_MODE_OR_SC);
+ } catch (LuaError &e) {
+ getClient()->setFatalError(e);
+ return true;
+ }
return readParam<bool>(L, -1);
}
@@ -82,7 +100,11 @@ void ScriptApiClient::on_damage_taken(int32_t damage_amount)
lua_getfield(L, -1, "registered_on_damage_taken");
// Call callbacks
lua_pushinteger(L, damage_amount);
- runCallbacks(1, RUN_CALLBACKS_MODE_OR_SC);
+ try {
+ runCallbacks(1, RUN_CALLBACKS_MODE_OR_SC);
+ } catch (LuaError &e) {
+ getClient()->setFatalError(e);
+ }
}
void ScriptApiClient::on_hp_modification(int32_t newhp)
@@ -94,7 +116,11 @@ void ScriptApiClient::on_hp_modification(int32_t newhp)
lua_getfield(L, -1, "registered_on_hp_modification");
// Call callbacks
lua_pushinteger(L, newhp);
- runCallbacks(1, RUN_CALLBACKS_MODE_OR_SC);
+ try {
+ runCallbacks(1, RUN_CALLBACKS_MODE_OR_SC);
+ } catch (LuaError &e) {
+ getClient()->setFatalError(e);
+ }
}
void ScriptApiClient::on_death()
@@ -105,7 +131,11 @@ void ScriptApiClient::on_death()
lua_getglobal(L, "core");
lua_getfield(L, -1, "registered_on_death");
// Call callbacks
- runCallbacks(0, RUN_CALLBACKS_MODE_FIRST);
+ try {
+ runCallbacks(0, RUN_CALLBACKS_MODE_FIRST);
+ } catch (LuaError &e) {
+ getClient()->setFatalError(e);
+ }
}
void ScriptApiClient::environment_step(float dtime)
@@ -120,8 +150,7 @@ void ScriptApiClient::environment_step(float dtime)
try {
runCallbacks(1, RUN_CALLBACKS_MODE_FIRST);
} catch (LuaError &e) {
- getClient()->setFatalError(std::string("Client environment_step: ") + e.what() + "\n"
- + script_get_backtrace(L));
+ getClient()->setFatalError(e);
}
}
@@ -146,7 +175,11 @@ void ScriptApiClient::on_formspec_input(const std::string &formname,
lua_pushlstring(L, value.c_str(), value.size());
lua_settable(L, -3);
}
- runCallbacks(2, RUN_CALLBACKS_MODE_OR_SC);
+ try {
+ runCallbacks(2, RUN_CALLBACKS_MODE_OR_SC);
+ } catch (LuaError &e) {
+ getClient()->setFatalError(e);
+ }
}
bool ScriptApiClient::on_dignode(v3s16 p, MapNode node)
@@ -164,7 +197,12 @@ bool ScriptApiClient::on_dignode(v3s16 p, MapNode node)
pushnode(L, node, ndef);
// Call functions
- runCallbacks(2, RUN_CALLBACKS_MODE_OR);
+ try {
+ runCallbacks(2, RUN_CALLBACKS_MODE_OR);
+ } catch (LuaError &e) {
+ getClient()->setFatalError(e);
+ return true;
+ }
return lua_toboolean(L, -1);
}
@@ -183,7 +221,12 @@ bool ScriptApiClient::on_punchnode(v3s16 p, MapNode node)
pushnode(L, node, ndef);
// Call functions
- runCallbacks(2, RUN_CALLBACKS_MODE_OR);
+ try {
+ runCallbacks(2, RUN_CALLBACKS_MODE_OR);
+ } catch (LuaError &e) {
+ getClient()->setFatalError(e);
+ return true;
+ }
return readParam<bool>(L, -1);
}
@@ -200,7 +243,12 @@ bool ScriptApiClient::on_placenode(const PointedThing &pointed, const ItemDefini
push_item_definition(L, item);
// Call functions
- runCallbacks(2, RUN_CALLBACKS_MODE_OR);
+ try {
+ runCallbacks(2, RUN_CALLBACKS_MODE_OR);
+ } catch (LuaError &e) {
+ getClient()->setFatalError(e);
+ return true;
+ }
return readParam<bool>(L, -1);
}
@@ -217,7 +265,12 @@ bool ScriptApiClient::on_item_use(const ItemStack &item, const PointedThing &poi
push_pointed_thing(L, pointed, true);
// Call functions
- runCallbacks(2, RUN_CALLBACKS_MODE_OR);
+ try {
+ runCallbacks(2, RUN_CALLBACKS_MODE_OR);
+ } catch (LuaError &e) {
+ getClient()->setFatalError(e);
+ return true;
+ }
return readParam<bool>(L, -1);
}
@@ -238,7 +291,12 @@ bool ScriptApiClient::on_inventory_open(Inventory *inventory)
lua_rawset(L, -3);
}
- runCallbacks(1, RUN_CALLBACKS_MODE_OR);
+ try {
+ runCallbacks(1, RUN_CALLBACKS_MODE_OR);
+ } catch (LuaError &e) {
+ getClient()->setFatalError(e);
+ return true;
+ }
return readParam<bool>(L, -1);
}
diff --git a/src/script/cpp_api/s_entity.cpp b/src/script/cpp_api/s_entity.cpp
index 746f7013e..06337b9e8 100644
--- a/src/script/cpp_api/s_entity.cpp
+++ b/src/script/cpp_api/s_entity.cpp
@@ -240,7 +240,7 @@ void ScriptApiEntity::luaentity_Step(u16 id, float dtime,
// tool_capabilities, direction, damage)
bool ScriptApiEntity::luaentity_Punch(u16 id,
ServerActiveObject *puncher, float time_from_last_punch,
- const ToolCapabilities *toolcap, v3f dir, s16 damage)
+ const ToolCapabilities *toolcap, v3f dir, s32 damage)
{
SCRIPTAPI_PRECHECKHEADER
diff --git a/src/script/cpp_api/s_entity.h b/src/script/cpp_api/s_entity.h
index b52f6e447..7658ae922 100644
--- a/src/script/cpp_api/s_entity.h
+++ b/src/script/cpp_api/s_entity.h
@@ -42,7 +42,7 @@ public:
const collisionMoveResult *moveresult);
bool luaentity_Punch(u16 id,
ServerActiveObject *puncher, float time_from_last_punch,
- const ToolCapabilities *toolcap, v3f dir, s16 damage);
+ const ToolCapabilities *toolcap, v3f dir, s32 damage);
bool luaentity_on_death(u16 id, ServerActiveObject *killer);
void luaentity_Rightclick(u16 id, ServerActiveObject *clicker);
void luaentity_on_attach_child(u16 id, ServerActiveObject *child);
diff --git a/src/script/cpp_api/s_env.cpp b/src/script/cpp_api/s_env.cpp
index 8da5debaa..874c37b6e 100644
--- a/src/script/cpp_api/s_env.cpp
+++ b/src/script/cpp_api/s_env.cpp
@@ -25,6 +25,8 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "mapgen/mapgen.h"
#include "lua_api/l_env.h"
#include "server.h"
+#include "script/common/c_content.h"
+
void ScriptApiEnv::environment_OnGenerated(v3s16 minp, v3s16 maxp,
u32 blockseed)
@@ -51,13 +53,7 @@ void ScriptApiEnv::environment_Step(float dtime)
lua_getfield(L, -1, "registered_globalsteps");
// Call callbacks
lua_pushnumber(L, dtime);
- try {
- runCallbacks(1, RUN_CALLBACKS_MODE_FIRST);
- } catch (LuaError &e) {
- getServer()->setAsyncFatalError(
- std::string("environment_Step: ") + e.what() + "\n"
- + script_get_backtrace(L));
- }
+ runCallbacks(1, RUN_CALLBACKS_MODE_FIRST);
}
void ScriptApiEnv::player_event(ServerActiveObject *player, const std::string &type)
@@ -74,13 +70,7 @@ void ScriptApiEnv::player_event(ServerActiveObject *player, const std::string &t
// Call callbacks
objectrefGetOrCreate(L, player); // player
lua_pushstring(L,type.c_str()); // event type
- try {
- runCallbacks(2, RUN_CALLBACKS_MODE_FIRST);
- } catch (LuaError &e) {
- getServer()->setAsyncFatalError(
- std::string("player_event: ") + e.what() + "\n"
- + script_get_backtrace(L) );
- }
+ runCallbacks(2, RUN_CALLBACKS_MODE_FIRST);
}
void ScriptApiEnv::initializeEnvironment(ServerEnvironment *env)
@@ -150,13 +140,19 @@ void ScriptApiEnv::initializeEnvironment(ServerEnvironment *env)
bool simple_catch_up = true;
getboolfield(L, current_abm, "catch_up", simple_catch_up);
+
+ s16 min_y = INT16_MIN;
+ getintfield(L, current_abm, "min_y", min_y);
+
+ s16 max_y = INT16_MAX;
+ getintfield(L, current_abm, "max_y", max_y);
lua_getfield(L, current_abm, "action");
luaL_checktype(L, current_abm + 1, LUA_TFUNCTION);
lua_pop(L, 1);
LuaABM *abm = new LuaABM(L, id, trigger_contents, required_neighbors,
- trigger_interval, trigger_chance, simple_catch_up);
+ trigger_interval, trigger_chance, simple_catch_up, min_y, max_y);
env->addActiveBlockModifier(abm);
@@ -249,9 +245,8 @@ void ScriptApiEnv::on_emerge_area_completion(
try {
PCALL_RES(lua_pcall(L, 4, 0, error_handler));
} catch (LuaError &e) {
- server->setAsyncFatalError(
- std::string("on_emerge_area_completion: ") + e.what() + "\n"
- + script_get_backtrace(L));
+ // Note: don't throw here, we still need to run the cleanup code below
+ server->setAsyncFatalError(e);
}
lua_pop(L, 1); // Pop error handler
@@ -261,3 +256,35 @@ void ScriptApiEnv::on_emerge_area_completion(
luaL_unref(L, LUA_REGISTRYINDEX, state->args_ref);
}
}
+
+void ScriptApiEnv::on_liquid_transformed(
+ const std::vector<std::pair<v3s16, MapNode>> &list)
+{
+ SCRIPTAPI_PRECHECKHEADER
+
+ // Get core.registered_on_liquid_transformed
+ lua_getglobal(L, "core");
+ lua_getfield(L, -1, "registered_on_liquid_transformed");
+ luaL_checktype(L, -1, LUA_TTABLE);
+ lua_remove(L, -2);
+
+ // Skip converting list and calling hook if there are
+ // no registered callbacks.
+ if(lua_objlen(L, -1) < 1) return;
+
+ // Convert the list to a pos array and a node array for lua
+ int index = 1;
+ const NodeDefManager *ndef = getEnv()->getGameDef()->ndef();
+ lua_createtable(L, list.size(), 0);
+ lua_createtable(L, list.size(), 0);
+ for(std::pair<v3s16, MapNode> p : list) {
+ lua_pushnumber(L, index);
+ push_v3s16(L, p.first);
+ lua_rawset(L, -4);
+ lua_pushnumber(L, index++);
+ pushnode(L, p.second, ndef);
+ lua_rawset(L, -3);
+ }
+
+ runCallbacks(2, RUN_CALLBACKS_MODE_FIRST);
+}
diff --git a/src/script/cpp_api/s_env.h b/src/script/cpp_api/s_env.h
index 232a08aaf..090858f17 100644
--- a/src/script/cpp_api/s_env.h
+++ b/src/script/cpp_api/s_env.h
@@ -21,6 +21,8 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "cpp_api/s_base.h"
#include "irr_v3d.h"
+#include "mapnode.h"
+#include <vector>
class ServerEnvironment;
struct ScriptCallbackState;
@@ -41,5 +43,8 @@ public:
void on_emerge_area_completion(v3s16 blockpos, int action,
ScriptCallbackState *state);
+ // Called after liquid transform changes
+ void on_liquid_transformed(const std::vector<std::pair<v3s16, MapNode>> &list);
+
void initializeEnvironment(ServerEnvironment *env);
};
diff --git a/src/script/cpp_api/s_item.cpp b/src/script/cpp_api/s_item.cpp
index 24955cefc..b1916070e 100644
--- a/src/script/cpp_api/s_item.cpp
+++ b/src/script/cpp_api/s_item.cpp
@@ -29,6 +29,9 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "inventory.h"
#include "inventorymanager.h"
+#define WRAP_LUAERROR(e, detail) \
+ LuaError(std::string(__FUNCTION__) + ": " + (e).what() + ". " detail)
+
bool ScriptApiItem::item_OnDrop(ItemStack &item,
ServerActiveObject *dropper, v3f pos)
{
@@ -49,20 +52,21 @@ bool ScriptApiItem::item_OnDrop(ItemStack &item,
try {
item = read_item(L, -1, getServer()->idef());
} catch (LuaError &e) {
- throw LuaError(std::string(e.what()) + ". item=" + item.name);
+ throw WRAP_LUAERROR(e, "item=" + item.name);
}
}
lua_pop(L, 2); // Pop item and error handler
return true;
}
-bool ScriptApiItem::item_OnPlace(ItemStack &item,
+bool ScriptApiItem::item_OnPlace(Optional<ItemStack> &ret_item,
ServerActiveObject *placer, const PointedThing &pointed)
{
SCRIPTAPI_PRECHECKHEADER
int error_handler = PUSH_ERROR_HANDLER(L);
+ const ItemStack &item = *ret_item;
// Push callback function on stack
if (!getItemCallback(item.name.c_str(), "on_place"))
return false;
@@ -79,22 +83,25 @@ bool ScriptApiItem::item_OnPlace(ItemStack &item,
PCALL_RES(lua_pcall(L, 3, 1, error_handler));
if (!lua_isnil(L, -1)) {
try {
- item = read_item(L, -1, getServer()->idef());
+ ret_item = read_item(L, -1, getServer()->idef());
} catch (LuaError &e) {
- throw LuaError(std::string(e.what()) + ". item=" + item.name);
+ throw WRAP_LUAERROR(e, "item=" + item.name);
}
+ } else {
+ ret_item = nullopt;
}
lua_pop(L, 2); // Pop item and error handler
return true;
}
-bool ScriptApiItem::item_OnUse(ItemStack &item,
+bool ScriptApiItem::item_OnUse(Optional<ItemStack> &ret_item,
ServerActiveObject *user, const PointedThing &pointed)
{
SCRIPTAPI_PRECHECKHEADER
int error_handler = PUSH_ERROR_HANDLER(L);
+ const ItemStack &item = *ret_item;
// Push callback function on stack
if (!getItemCallback(item.name.c_str(), "on_use"))
return false;
@@ -106,22 +113,25 @@ bool ScriptApiItem::item_OnUse(ItemStack &item,
PCALL_RES(lua_pcall(L, 3, 1, error_handler));
if(!lua_isnil(L, -1)) {
try {
- item = read_item(L, -1, getServer()->idef());
+ ret_item = read_item(L, -1, getServer()->idef());
} catch (LuaError &e) {
- throw LuaError(std::string(e.what()) + ". item=" + item.name);
+ throw WRAP_LUAERROR(e, "item=" + item.name);
}
+ } else {
+ ret_item = nullopt;
}
lua_pop(L, 2); // Pop item and error handler
return true;
}
-bool ScriptApiItem::item_OnSecondaryUse(ItemStack &item,
+bool ScriptApiItem::item_OnSecondaryUse(Optional<ItemStack> &ret_item,
ServerActiveObject *user, const PointedThing &pointed)
{
SCRIPTAPI_PRECHECKHEADER
int error_handler = PUSH_ERROR_HANDLER(L);
+ const ItemStack &item = *ret_item;
if (!getItemCallback(item.name.c_str(), "on_secondary_use"))
return false;
@@ -131,10 +141,12 @@ bool ScriptApiItem::item_OnSecondaryUse(ItemStack &item,
PCALL_RES(lua_pcall(L, 3, 1, error_handler));
if (!lua_isnil(L, -1)) {
try {
- item = read_item(L, -1, getServer()->idef());
+ ret_item = read_item(L, -1, getServer()->idef());
} catch (LuaError &e) {
- throw LuaError(std::string(e.what()) + ". item=" + item.name);
+ throw WRAP_LUAERROR(e, "item=" + item.name);
}
+ } else {
+ ret_item = nullopt;
}
lua_pop(L, 2); // Pop item and error handler
return true;
@@ -165,7 +177,7 @@ bool ScriptApiItem::item_OnCraft(ItemStack &item, ServerActiveObject *user,
try {
item = read_item(L, -1, getServer()->idef());
} catch (LuaError &e) {
- throw LuaError(std::string(e.what()) + ". item=" + item.name);
+ throw WRAP_LUAERROR(e, "item=" + item.name);
}
}
lua_pop(L, 2); // Pop item and error handler
@@ -197,7 +209,7 @@ bool ScriptApiItem::item_CraftPredict(ItemStack &item, ServerActiveObject *user,
try {
item = read_item(L, -1, getServer()->idef());
} catch (LuaError &e) {
- throw LuaError(std::string(e.what()) + ". item=" + item.name);
+ throw WRAP_LUAERROR(e, "item=" + item.name);
}
}
lua_pop(L, 2); // Pop item and error handler
diff --git a/src/script/cpp_api/s_item.h b/src/script/cpp_api/s_item.h
index 25a3501f9..5015d8bd4 100644
--- a/src/script/cpp_api/s_item.h
+++ b/src/script/cpp_api/s_item.h
@@ -21,6 +21,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "cpp_api/s_base.h"
#include "irr_v3d.h"
+#include "util/Optional.h"
struct PointedThing;
struct ItemStack;
@@ -35,13 +36,20 @@ class ScriptApiItem
: virtual public ScriptApiBase
{
public:
+ /*
+ * Functions with Optional<ItemStack> are for callbacks where Lua may
+ * want to prevent the engine from modifying the inventory after it's done.
+ * This has a longer backstory where on_use may need to empty the player's
+ * inventory without the engine interfering (see issue #6546).
+ */
+
bool item_OnDrop(ItemStack &item,
ServerActiveObject *dropper, v3f pos);
- bool item_OnPlace(ItemStack &item,
+ bool item_OnPlace(Optional<ItemStack> &item,
ServerActiveObject *placer, const PointedThing &pointed);
- bool item_OnUse(ItemStack &item,
+ bool item_OnUse(Optional<ItemStack> &item,
ServerActiveObject *user, const PointedThing &pointed);
- bool item_OnSecondaryUse(ItemStack &item,
+ bool item_OnSecondaryUse(Optional<ItemStack> &item,
ServerActiveObject *user, const PointedThing &pointed);
bool item_OnCraft(ItemStack &item, ServerActiveObject *user,
const InventoryList *old_craft_grid, const InventoryLocation &craft_inv);
diff --git a/src/script/cpp_api/s_mainmenu.h b/src/script/cpp_api/s_mainmenu.h
index aef36ce39..470577a29 100644
--- a/src/script/cpp_api/s_mainmenu.h
+++ b/src/script/cpp_api/s_mainmenu.h
@@ -38,7 +38,7 @@ public:
void handleMainMenuEvent(std::string text);
/**
- * process field data recieved from formspec
+ * process field data received from formspec
* @param fields data in field format
*/
void handleMainMenuButtons(const StringMap &fields);
diff --git a/src/script/cpp_api/s_node.cpp b/src/script/cpp_api/s_node.cpp
index f23fbfbde..029cb6308 100644
--- a/src/script/cpp_api/s_node.cpp
+++ b/src/script/cpp_api/s_node.cpp
@@ -65,6 +65,7 @@ struct EnumString ScriptApiNode::es_ContentParamType2[] =
{CPT2_COLORED_FACEDIR, "colorfacedir"},
{CPT2_COLORED_WALLMOUNTED, "colorwallmounted"},
{CPT2_GLASSLIKE_LIQUID_LEVEL, "glasslikeliquidlevel"},
+ {CPT2_COLORED_DEGROTATE, "colordegrotate"},
{0, NULL},
};
diff --git a/src/script/cpp_api/s_node.h b/src/script/cpp_api/s_node.h
index 3f771c838..3c6a8445b 100644
--- a/src/script/cpp_api/s_node.h
+++ b/src/script/cpp_api/s_node.h
@@ -53,6 +53,7 @@ public:
static struct EnumString es_ContentParamType[];
static struct EnumString es_ContentParamType2[];
static struct EnumString es_LiquidType[];
+ static struct EnumString es_LiquidMoveType[];
static struct EnumString es_NodeBoxType[];
static struct EnumString es_TextureAlphaMode[];
};
diff --git a/src/script/cpp_api/s_nodemeta.cpp b/src/script/cpp_api/s_nodemeta.cpp
index c081e9fc4..7ab3757f3 100644
--- a/src/script/cpp_api/s_nodemeta.cpp
+++ b/src/script/cpp_api/s_nodemeta.cpp
@@ -43,7 +43,7 @@ int ScriptApiNodemeta::nodemeta_inventory_AllowMove(
return 0;
// Push callback function on stack
- std::string nodename = ndef->get(node).name;
+ const auto &nodename = ndef->get(node).name;
if (!getItemCallback(nodename.c_str(), "allow_metadata_inventory_move", &ma.to_inv.p))
return count;
@@ -58,7 +58,7 @@ int ScriptApiNodemeta::nodemeta_inventory_AllowMove(
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);
+ " return a number. node=" + nodename);
int num = luaL_checkinteger(L, -1);
lua_pop(L, 2); // Pop integer and error handler
return num;
@@ -81,7 +81,7 @@ int ScriptApiNodemeta::nodemeta_inventory_AllowPut(
return 0;
// Push callback function on stack
- std::string nodename = ndef->get(node).name;
+ const auto &nodename = ndef->get(node).name;
if (!getItemCallback(nodename.c_str(), "allow_metadata_inventory_put", &ma.to_inv.p))
return stack.count;
@@ -94,7 +94,7 @@ int ScriptApiNodemeta::nodemeta_inventory_AllowPut(
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);
+ " return a number. node=" + nodename);
int num = luaL_checkinteger(L, -1);
lua_pop(L, 2); // Pop integer and error handler
return num;
@@ -117,7 +117,7 @@ int ScriptApiNodemeta::nodemeta_inventory_AllowTake(
return 0;
// Push callback function on stack
- std::string nodename = ndef->get(node).name;
+ const auto &nodename = ndef->get(node).name;
if (!getItemCallback(nodename.c_str(), "allow_metadata_inventory_take", &ma.from_inv.p))
return stack.count;
@@ -130,7 +130,7 @@ int ScriptApiNodemeta::nodemeta_inventory_AllowTake(
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);
+ " return a number. node=" + nodename);
int num = luaL_checkinteger(L, -1);
lua_pop(L, 2); // Pop integer and error handler
return num;
@@ -153,7 +153,7 @@ void ScriptApiNodemeta::nodemeta_inventory_OnMove(
return;
// Push callback function on stack
- std::string nodename = ndef->get(node).name;
+ const auto &nodename = ndef->get(node).name;
if (!getItemCallback(nodename.c_str(), "on_metadata_inventory_move", &ma.from_inv.p))
return;
@@ -186,7 +186,7 @@ void ScriptApiNodemeta::nodemeta_inventory_OnPut(
return;
// Push callback function on stack
- std::string nodename = ndef->get(node).name;
+ const auto &nodename = ndef->get(node).name;
if (!getItemCallback(nodename.c_str(), "on_metadata_inventory_put", &ma.to_inv.p))
return;
@@ -217,7 +217,7 @@ void ScriptApiNodemeta::nodemeta_inventory_OnTake(
return;
// Push callback function on stack
- std::string nodename = ndef->get(node).name;
+ const auto &nodename = ndef->get(node).name;
if (!getItemCallback(nodename.c_str(), "on_metadata_inventory_take", &ma.from_inv.p))
return;
diff --git a/src/script/cpp_api/s_player.cpp b/src/script/cpp_api/s_player.cpp
index d3e6138dc..22b24f363 100644
--- a/src/script/cpp_api/s_player.cpp
+++ b/src/script/cpp_api/s_player.cpp
@@ -60,7 +60,7 @@ bool ScriptApiPlayer::on_punchplayer(ServerActiveObject *player,
float time_from_last_punch,
const ToolCapabilities *toolcap,
v3f dir,
- s16 damage)
+ s32 damage)
{
SCRIPTAPI_PRECHECKHEADER
// Get core.registered_on_punchplayers
diff --git a/src/script/cpp_api/s_player.h b/src/script/cpp_api/s_player.h
index c0f141862..e866aee46 100644
--- a/src/script/cpp_api/s_player.h
+++ b/src/script/cpp_api/s_player.h
@@ -46,7 +46,7 @@ public:
void on_cheat(ServerActiveObject *player, const std::string &cheat_type);
bool on_punchplayer(ServerActiveObject *player, ServerActiveObject *hitter,
float time_from_last_punch, const ToolCapabilities *toolcap,
- v3f dir, s16 damage);
+ v3f dir, s32 damage);
void on_rightclickplayer(ServerActiveObject *player, ServerActiveObject *clicker);
s32 on_player_hpchange(ServerActiveObject *player, s32 hp_change,
const PlayerHPChangeReason &reason);
diff --git a/src/script/cpp_api/s_security.cpp b/src/script/cpp_api/s_security.cpp
index 63058d7c3..a6c5114b2 100644
--- a/src/script/cpp_api/s_security.cpp
+++ b/src/script/cpp_api/s_security.cpp
@@ -18,7 +18,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
*/
#include "cpp_api/s_security.h"
-
+#include "lua_api/l_base.h"
#include "filesys.h"
#include "porting.h"
#include "server.h"
@@ -27,6 +27,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include <cerrno>
#include <string>
+#include <algorithm>
#include <iostream>
@@ -45,6 +46,21 @@ static inline void copy_safe(lua_State *L, const char *list[], unsigned len, int
}
}
+static void shallow_copy_table(lua_State *L, int from=-2, int to=-1)
+{
+ if (from < 0) from = lua_gettop(L) + from + 1;
+ if (to < 0) to = lua_gettop(L) + to + 1;
+ lua_pushnil(L);
+ while (lua_next(L, from) != 0) {
+ assert(lua_type(L, -1) != LUA_TTABLE);
+ // duplicate key and value for lua_rawset
+ lua_pushvalue(L, -2);
+ lua_pushvalue(L, -2);
+ lua_rawset(L, to);
+ lua_pop(L, 1);
+ }
+}
+
// 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)
{
@@ -83,11 +99,15 @@ void ScriptApiSecurity::initializeSecurity()
"unpack",
"_VERSION",
"xpcall",
- // Completely safe libraries
+ };
+ static const char *whitelist_tables[] = {
+ // These libraries are completely safe BUT we need to duplicate their table
+ // to ensure the sandbox can't affect the insecure env
"coroutine",
"string",
"table",
"math",
+ "bit"
};
static const char *io_whitelist[] = {
"close",
@@ -101,21 +121,17 @@ void ScriptApiSecurity::initializeSecurity()
"date",
"difftime",
"getenv",
- "setlocale",
"time",
- "tmpname",
};
static const char *debug_whitelist[] = {
"gethook",
"traceback",
"getinfo",
"getmetatable",
- "setupvalue",
"setmetatable",
"upvalueid",
"sethook",
"debug",
- "setlocal",
};
static const char *package_whitelist[] = {
"config",
@@ -167,6 +183,17 @@ void ScriptApiSecurity::initializeSecurity()
lua_pop(L, 1);
+ // Copy safe libraries
+ for (const char *libname : whitelist_tables) {
+ lua_getfield(L, old_globals, libname);
+ lua_newtable(L);
+ shallow_copy_table(L);
+
+ lua_setglobal(L, libname);
+ lua_pop(L, 1);
+ }
+
+
// Copy safe IO functions
lua_getfield(L, old_globals, "io");
lua_newtable(L);
@@ -190,6 +217,7 @@ void ScriptApiSecurity::initializeSecurity()
// And replace unsafe ones
SECURE_API(os, remove);
SECURE_API(os, rename);
+ SECURE_API(os, setlocale);
lua_setglobal(L, "os");
lua_pop(L, 1); // Pop old OS
@@ -221,7 +249,25 @@ void ScriptApiSecurity::initializeSecurity()
lua_pop(L, 1); // Pop old jit
#endif
+ // Get rid of 'core' in the old globals, we don't want anyone thinking it's
+ // safe or even usable.
+ lua_pushnil(L);
+ lua_setfield(L, old_globals, "core");
+
lua_pop(L, 1); // Pop globals_backup
+
+
+ /*
+ * In addition to copying the tables in whitelist_tables, we also need to
+ * replace the string metatable. Otherwise old_globals.string would
+ * be accessible via getmetatable("").__index from inside the sandbox.
+ */
+ lua_pushliteral(L, "");
+ lua_newtable(L);
+ lua_getglobal(L, "string");
+ lua_setfield(L, -2, "__index");
+ lua_setmetatable(L, -2);
+ lua_pop(L, 1); // Pop empty string
}
void ScriptApiSecurity::initializeSecurityClient()
@@ -243,7 +289,7 @@ void ScriptApiSecurity::initializeSecurityClient()
"rawset",
"select",
"setfenv",
- // getmetatable can be used to escape the sandbox
+ // getmetatable can be used to escape the sandbox <- ???
"setmetatable",
"tonumber",
"tostring",
@@ -256,6 +302,7 @@ void ScriptApiSecurity::initializeSecurityClient()
"string",
"table",
"math",
+ "bit",
};
static const char *os_whitelist[] = {
"clock",
@@ -264,7 +311,7 @@ void ScriptApiSecurity::initializeSecurityClient()
"time"
};
static const char *debug_whitelist[] = {
- "getinfo",
+ "getinfo", // used by builtin and unset before mods load
"traceback"
};
@@ -496,15 +543,8 @@ bool ScriptApiSecurity::checkPath(lua_State *L, const char *path,
if (!removed.empty())
abs_path += DIR_DELIM + removed;
- // Get server from registry
- lua_rawgeti(L, LUA_REGISTRYINDEX, CUSTOM_RIDX_SCRIPTAPI);
- ScriptApiBase *script;
-#if INDIRECT_SCRIPTAPI_RIDX
- script = (ScriptApiBase *) *(void**)(lua_touserdata(L, -1));
-#else
- script = (ScriptApiBase *) lua_touserdata(L, -1);
-#endif
- lua_pop(L, 1);
+ // Get gamedef from registry
+ ScriptApiBase *script = ModApiBase::getScriptApiBase(L);
const IGameDef *gamedef = script->getGameDef();
if (!gamedef)
return false;
@@ -569,6 +609,38 @@ bool ScriptApiSecurity::checkPath(lua_State *L, const char *path,
return false;
}
+bool ScriptApiSecurity::checkWhitelisted(lua_State *L, const std::string &setting)
+{
+ assert(str_starts_with(setting, "secure."));
+
+ // We have to make sure that this function is being called directly by
+ // a mod, otherwise a malicious mod could override this function and
+ // steal its return value.
+ lua_Debug info;
+
+ // Make sure there's only one item below this function on the stack...
+ if (lua_getstack(L, 2, &info))
+ return false;
+ FATAL_ERROR_IF(!lua_getstack(L, 1, &info), "lua_getstack() failed");
+ FATAL_ERROR_IF(!lua_getinfo(L, "S", &info), "lua_getinfo() failed");
+
+ // ...and that that item is the main file scope.
+ if (strcmp(info.what, "main") != 0)
+ return false;
+
+ // Mod must be listed in secure.http_mods or secure.trusted_mods
+ lua_rawgeti(L, LUA_REGISTRYINDEX, CUSTOM_RIDX_CURRENT_MOD_NAME);
+ if (!lua_isstring(L, -1))
+ return false;
+ std::string mod_name = readParam<std::string>(L, -1);
+
+ std::string value = g_settings->get(setting);
+ value.erase(std::remove(value.begin(), value.end(), ' '), value.end());
+ auto mod_list = str_split(value, ',');
+
+ return CONTAINS(mod_list, mod_name);
+}
+
int ScriptApiSecurity::sl_g_dofile(lua_State *L)
{
@@ -627,13 +699,7 @@ int ScriptApiSecurity::sl_g_load(lua_State *L)
int ScriptApiSecurity::sl_g_loadfile(lua_State *L)
{
#ifndef SERVER
- lua_rawgeti(L, LUA_REGISTRYINDEX, CUSTOM_RIDX_SCRIPTAPI);
-#if INDIRECT_SCRIPTAPI_RIDX
- ScriptApiBase *script = (ScriptApiBase *) *(void**)(lua_touserdata(L, -1));
-#else
- ScriptApiBase *script = (ScriptApiBase *) lua_touserdata(L, -1);
-#endif
- lua_pop(L, 1);
+ ScriptApiBase *script = ModApiBase::getScriptApiBase(L);
// Client implementation
if (script->getType() == ScriptingType::Client) {
@@ -806,3 +872,20 @@ int ScriptApiSecurity::sl_os_remove(lua_State *L)
return 2;
}
+
+int ScriptApiSecurity::sl_os_setlocale(lua_State *L)
+{
+ const bool cat = lua_gettop(L) > 1;
+ // Don't allow changes
+ if (!lua_isnoneornil(L, 1)) {
+ lua_pushnil(L);
+ return 1;
+ }
+
+ push_original(L, "os", "setlocale");
+ lua_pushnil(L);
+ if (cat)
+ lua_pushvalue(L, 2);
+ lua_call(L, cat ? 2 : 1, 1);
+ return 1;
+}
diff --git a/src/script/cpp_api/s_security.h b/src/script/cpp_api/s_security.h
index 73e763548..880ce1638 100644
--- a/src/script/cpp_api/s_security.h
+++ b/src/script/cpp_api/s_security.h
@@ -40,11 +40,6 @@ with this program; if not, write to the Free Software Foundation, Inc.,
class ScriptApiSecurity : virtual public ScriptApiBase
{
public:
- int getThread(lua_State *L);
- // creates an empty Lua environment
- void createEmptyEnv(lua_State *L);
- // sets the enviroment to the table thats on top of the stack
- void setLuaEnv(lua_State *L, int thread);
// Sets up security on the ScriptApi's Lua state
void initializeSecurity();
void initializeSecurityClient();
@@ -57,8 +52,17 @@ public:
// Checks if mods are allowed to read (and optionally write) to the path
static bool checkPath(lua_State *L, const char *path, bool write_required,
bool *write_allowed=NULL);
+ // Check if mod is whitelisted in the given setting
+ // This additionally checks that the mod's main file scope is executing.
+ static bool checkWhitelisted(lua_State *L, const std::string &setting);
private:
+ int getThread(lua_State *L);
+ // sets the enviroment to the table thats on top of the stack
+ void setLuaEnv(lua_State *L, int thread);
+ // creates an empty Lua environment
+ void createEmptyEnv(lua_State *L);
+
// Syntax: "sl_" <Library name or 'g' (global)> '_' <Function name>
// (sl stands for Secure Lua)
@@ -75,4 +79,5 @@ private:
static int sl_os_rename(lua_State *L);
static int sl_os_remove(lua_State *L);
+ static int sl_os_setlocale(lua_State *L);
};
diff --git a/src/script/cpp_api/s_server.cpp b/src/script/cpp_api/s_server.cpp
index 96cb28b28..c255b0c71 100644
--- a/src/script/cpp_api/s_server.cpp
+++ b/src/script/cpp_api/s_server.cpp
@@ -20,6 +20,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "cpp_api/s_server.h"
#include "cpp_api/s_internal.h"
#include "common/c_converter.h"
+#include "util/numeric.h" // myrand
bool ScriptApiServer::getAuth(const std::string &playername,
std::string *dst_password,
@@ -196,3 +197,66 @@ std::string ScriptApiServer::formatChatMessage(const std::string &name,
return ret;
}
+
+u32 ScriptApiServer::allocateDynamicMediaCallback(lua_State *L, int f_idx)
+{
+ if (f_idx < 0)
+ f_idx = lua_gettop(L) + f_idx + 1;
+
+ lua_getglobal(L, "core");
+ lua_getfield(L, -1, "dynamic_media_callbacks");
+ luaL_checktype(L, -1, LUA_TTABLE);
+
+ // Find a randomly generated token that doesn't exist yet
+ int tries = 100;
+ u32 token;
+ while (1) {
+ token = myrand();
+ lua_rawgeti(L, -2, token);
+ bool is_free = lua_isnil(L, -1);
+ lua_pop(L, 1);
+ if (is_free)
+ break;
+ if (--tries < 0)
+ FATAL_ERROR("Ran out of callbacks IDs?!");
+ }
+
+ // core.dynamic_media_callbacks[token] = callback_func
+ lua_pushvalue(L, f_idx);
+ lua_rawseti(L, -2, token);
+
+ lua_pop(L, 2);
+
+ verbosestream << "allocateDynamicMediaCallback() = " << token << std::endl;
+ return token;
+}
+
+void ScriptApiServer::freeDynamicMediaCallback(u32 token)
+{
+ SCRIPTAPI_PRECHECKHEADER
+
+ verbosestream << "freeDynamicMediaCallback(" << token << ")" << std::endl;
+
+ // core.dynamic_media_callbacks[token] = nil
+ lua_getglobal(L, "core");
+ lua_getfield(L, -1, "dynamic_media_callbacks");
+ luaL_checktype(L, -1, LUA_TTABLE);
+ lua_pushnil(L);
+ lua_rawseti(L, -2, token);
+ lua_pop(L, 2);
+}
+
+void ScriptApiServer::on_dynamic_media_added(u32 token, const char *playername)
+{
+ SCRIPTAPI_PRECHECKHEADER
+
+ int error_handler = PUSH_ERROR_HANDLER(L);
+ lua_getglobal(L, "core");
+ lua_getfield(L, -1, "dynamic_media_callbacks");
+ luaL_checktype(L, -1, LUA_TTABLE);
+ lua_rawgeti(L, -1, token);
+ luaL_checktype(L, -1, LUA_TFUNCTION);
+
+ lua_pushstring(L, playername);
+ PCALL_RES(lua_pcall(L, 1, 0, error_handler));
+}
diff --git a/src/script/cpp_api/s_server.h b/src/script/cpp_api/s_server.h
index d8639cba7..58c8c0e48 100644
--- a/src/script/cpp_api/s_server.h
+++ b/src/script/cpp_api/s_server.h
@@ -49,6 +49,12 @@ public:
const std::string &password);
bool setPassword(const std::string &playername,
const std::string &password);
+
+ /* dynamic media handling */
+ static u32 allocateDynamicMediaCallback(lua_State *L, int f_idx);
+ void freeDynamicMediaCallback(u32 token);
+ void on_dynamic_media_added(u32 token, const char *playername);
+
private:
void getAuthHandler();
void readPrivileges(int index, std::set<std::string> &result);
diff --git a/src/script/lua_api/l_areastore.cpp b/src/script/lua_api/l_areastore.cpp
index 908c766b0..45724e604 100644
--- a/src/script/lua_api/l_areastore.cpp
+++ b/src/script/lua_api/l_areastore.cpp
@@ -372,7 +372,7 @@ void LuaAreaStore::Register(lua_State *L)
lua_pop(L, 1); // drop metatable
- luaL_openlib(L, 0, methods, 0); // fill methodtable
+ luaL_register(L, nullptr, methods); // fill methodtable
lua_pop(L, 1); // drop methodtable
// Can be created from Lua (AreaStore())
diff --git a/src/script/lua_api/l_auth.cpp b/src/script/lua_api/l_auth.cpp
index 0fc57ba3a..32d8a7411 100644
--- a/src/script/lua_api/l_auth.cpp
+++ b/src/script/lua_api/l_auth.cpp
@@ -32,8 +32,11 @@ AuthDatabase *ModApiAuth::getAuthDb(lua_State *L)
{
ServerEnvironment *server_environment =
dynamic_cast<ServerEnvironment *>(getEnv(L));
- if (!server_environment)
+ if (!server_environment) {
+ luaL_error(L, "Attempt to access an auth function but the auth"
+ " system is yet not initialized. This causes bugs.");
return nullptr;
+ }
return server_environment->getAuthDatabase();
}
diff --git a/src/script/lua_api/l_camera.cpp b/src/script/lua_api/l_camera.cpp
index 40251154c..d85d16283 100644
--- a/src/script/lua_api/l_camera.cpp
+++ b/src/script/lua_api/l_camera.cpp
@@ -219,7 +219,7 @@ void LuaCamera::Register(lua_State *L)
lua_pop(L, 1);
- luaL_openlib(L, 0, methods, 0);
+ luaL_register(L, nullptr, methods);
lua_pop(L, 1);
}
diff --git a/src/script/lua_api/l_env.cpp b/src/script/lua_api/l_env.cpp
index c75fc8dc7..18ee3a521 100644
--- a/src/script/lua_api/l_env.cpp
+++ b/src/script/lua_api/l_env.cpp
@@ -46,13 +46,22 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "client/client.h"
#endif
-struct EnumString ModApiEnvMod::es_ClearObjectsMode[] =
+const EnumString ModApiEnvMod::es_ClearObjectsMode[] =
{
{CLEAR_OBJECTS_MODE_FULL, "full"},
{CLEAR_OBJECTS_MODE_QUICK, "quick"},
{0, NULL},
};
+const EnumString ModApiEnvMod::es_BlockStatusType[] =
+{
+ {ServerEnvironment::BS_UNKNOWN, "unknown"},
+ {ServerEnvironment::BS_EMERGING, "emerging"},
+ {ServerEnvironment::BS_LOADED, "loaded"},
+ {ServerEnvironment::BS_ACTIVE, "active"},
+ {0, NULL},
+};
+
///////////////////////////////////////////////////////////////////////////////
@@ -228,7 +237,7 @@ void LuaRaycast::Register(lua_State *L)
lua_pop(L, 1);
- luaL_openlib(L, 0, methods, 0);
+ luaL_register(L, nullptr, methods);
lua_pop(L, 1);
lua_register(L, className, create_object);
@@ -468,7 +477,7 @@ int ModApiEnvMod::l_place_node(lua_State *L)
return 1;
}
// Create item to place
- ItemStack item(ndef->get(n).name, 1, 0, idef);
+ Optional<ItemStack> item = ItemStack(ndef->get(n).name, 1, 0, idef);
// Make pointed position
PointedThing pointed;
pointed.type = POINTEDTHING_NODE;
@@ -871,6 +880,21 @@ int ModApiEnvMod::l_find_node_near(lua_State *L)
return 0;
}
+static void checkArea(v3s16 &minp, v3s16 &maxp)
+{
+ auto volume = VoxelArea(minp, maxp).getVolume();
+ // Volume limit equal to 8 default mapchunks, (80 * 2) ^ 3 = 4,096,000
+ if (volume > 4096000) {
+ throw LuaError("Area volume exceeds allowed value of 4096000");
+ }
+
+ // Clamp to map range to avoid problems
+#define CLAMP(arg) core::clamp(arg, (s16)-MAX_MAP_GENERATION_LIMIT, (s16)MAX_MAP_GENERATION_LIMIT)
+ minp = v3s16(CLAMP(minp.X), CLAMP(minp.Y), CLAMP(minp.Z));
+ maxp = v3s16(CLAMP(maxp.X), CLAMP(maxp.Y), CLAMP(maxp.Z));
+#undef CLAMP
+}
+
// find_nodes_in_area(minp, maxp, nodenames, [grouped])
int ModApiEnvMod::l_find_nodes_in_area(lua_State *L)
{
@@ -890,13 +914,7 @@ int ModApiEnvMod::l_find_nodes_in_area(lua_State *L)
}
#endif
- v3s16 cube = maxp - minp + 1;
- // Volume limit equal to 8 default mapchunks, (80 * 2) ^ 3 = 4,096,000
- if ((u64)cube.X * (u64)cube.Y * (u64)cube.Z > 4096000) {
- luaL_error(L, "find_nodes_in_area(): area volume"
- " exceeds allowed value of 4096000");
- return 0;
- }
+ checkArea(minp, maxp);
std::vector<content_t> filter;
collectNodeIds(L, 3, ndef, filter);
@@ -1001,13 +1019,7 @@ int ModApiEnvMod::l_find_nodes_in_area_under_air(lua_State *L)
}
#endif
- v3s16 cube = maxp - minp + 1;
- // Volume limit equal to 8 default mapchunks, (80 * 2) ^ 3 = 4,096,000
- if ((u64)cube.X * (u64)cube.Y * (u64)cube.Z > 4096000) {
- luaL_error(L, "find_nodes_in_area_under_air(): area volume"
- " exceeds allowed value of 4096000");
- return 0;
- }
+ checkArea(minp, maxp);
std::vector<content_t> filter;
collectNodeIds(L, 3, ndef, filter);
@@ -1389,6 +1401,24 @@ int ModApiEnvMod::l_forceload_block(lua_State *L)
return 0;
}
+// compare_block_status(nodepos)
+int ModApiEnvMod::l_compare_block_status(lua_State *L)
+{
+ GET_ENV_PTR;
+
+ v3s16 nodepos = check_v3s16(L, 1);
+ std::string condition_s = luaL_checkstring(L, 2);
+ auto status = env->getBlockStatus(getNodeBlockPos(nodepos));
+
+ int condition_i = -1;
+ if (!string_to_enum(es_BlockStatusType, condition_i, condition_s))
+ return 0; // Unsupported
+
+ lua_pushboolean(L, status >= condition_i);
+ return 1;
+}
+
+
// forceload_free_block(blockpos)
// blockpos = {x=num, y=num, z=num}
int ModApiEnvMod::l_forceload_free_block(lua_State *L)
@@ -1462,6 +1492,7 @@ void ModApiEnvMod::Initialize(lua_State *L, int top)
API_FCT(transforming_liquid_add);
API_FCT(forceload_block);
API_FCT(forceload_free_block);
+ API_FCT(compare_block_status);
API_FCT(get_translated_string);
}
diff --git a/src/script/lua_api/l_env.h b/src/script/lua_api/l_env.h
index 42c2d64f8..67c76faae 100644
--- a/src/script/lua_api/l_env.h
+++ b/src/script/lua_api/l_env.h
@@ -195,6 +195,9 @@ private:
// stops forceloading a position
static int l_forceload_free_block(lua_State *L);
+ // compare_block_status(nodepos)
+ static int l_compare_block_status(lua_State *L);
+
// Get a string translated server side
static int l_get_translated_string(lua_State * L);
@@ -207,7 +210,8 @@ public:
static void Initialize(lua_State *L, int top);
static void InitializeClient(lua_State *L, int top);
- static struct EnumString es_ClearObjectsMode[];
+ static const EnumString es_ClearObjectsMode[];
+ static const EnumString es_BlockStatusType[];
};
class LuaABM : public ActiveBlockModifier {
@@ -219,17 +223,21 @@ private:
float m_trigger_interval;
u32 m_trigger_chance;
bool m_simple_catch_up;
+ s16 m_min_y;
+ s16 m_max_y;
public:
LuaABM(lua_State *L, int id,
const std::vector<std::string> &trigger_contents,
const std::vector<std::string> &required_neighbors,
- float trigger_interval, u32 trigger_chance, bool simple_catch_up):
+ float trigger_interval, u32 trigger_chance, bool simple_catch_up, s16 min_y, s16 max_y):
m_id(id),
m_trigger_contents(trigger_contents),
m_required_neighbors(required_neighbors),
m_trigger_interval(trigger_interval),
m_trigger_chance(trigger_chance),
- m_simple_catch_up(simple_catch_up)
+ m_simple_catch_up(simple_catch_up),
+ m_min_y(min_y),
+ m_max_y(max_y)
{
}
virtual const std::vector<std::string> &getTriggerContents() const
@@ -252,6 +260,14 @@ public:
{
return m_simple_catch_up;
}
+ virtual s16 getMinY()
+ {
+ return m_min_y;
+ }
+ virtual s16 getMaxY()
+ {
+ return m_max_y;
+ }
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_http.cpp b/src/script/lua_api/l_http.cpp
index 5ea3b3f99..bd359b3cc 100644
--- a/src/script/lua_api/l_http.cpp
+++ b/src/script/lua_api/l_http.cpp
@@ -21,14 +21,13 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "common/c_converter.h"
#include "common/c_content.h"
#include "lua_api/l_http.h"
+#include "cpp_api/s_security.h"
#include "httpfetch.h"
#include "settings.h"
#include "debug.h"
#include "log.h"
-#include <algorithm>
#include <iomanip>
-#include <cctype>
#define HTTP_API(name) \
lua_pushstring(L, #name); \
@@ -42,12 +41,10 @@ void ModApiHttp::read_http_fetch_request(lua_State *L, HTTPFetchRequest &req)
req.caller = httpfetch_caller_alloc_secure();
getstringfield(L, 1, "url", req.url);
- lua_getfield(L, 1, "user_agent");
- if (lua_isstring(L, -1))
- req.useragent = getstringfield_default(L, 1, "user_agent", "");
- lua_pop(L, 1);
+ getstringfield(L, 1, "user_agent", req.useragent);
req.multipart = getboolfield_default(L, 1, "multipart", false);
- req.timeout = getintfield_default(L, 1, "timeout", 3) * 1000;
+ if (getintfield(L, 1, "timeout", req.timeout))
+ req.timeout *= 1000;
lua_getfield(L, 1, "method");
if (lua_isstring(L, -1)) {
@@ -165,58 +162,40 @@ int ModApiHttp::l_http_fetch_async_get(lua_State *L)
return 1;
}
-int ModApiHttp::l_request_http_api(lua_State *L)
+int ModApiHttp::l_set_http_api_lua(lua_State *L)
{
NO_MAP_LOCK_REQUIRED;
- // We have to make sure that this function is being called directly by
- // a mod, otherwise a malicious mod could override this function and
- // steal its return value.
- lua_Debug info;
-
- // Make sure there's only one item below this function on the stack...
- if (lua_getstack(L, 2, &info)) {
- return 0;
- }
- FATAL_ERROR_IF(!lua_getstack(L, 1, &info), "lua_getstack() failed");
- FATAL_ERROR_IF(!lua_getinfo(L, "S", &info), "lua_getinfo() failed");
-
- // ...and that that item is the main file scope.
- if (strcmp(info.what, "main") != 0) {
- return 0;
- }
-
- // Mod must be listed in secure.http_mods or secure.trusted_mods
- lua_rawgeti(L, LUA_REGISTRYINDEX, CUSTOM_RIDX_CURRENT_MOD_NAME);
- if (!lua_isstring(L, -1)) {
- return 0;
- }
+ // This is called by builtin to give us a function that will later
+ // populate the http_api table with additional method(s).
+ // We need this because access to the HTTP api is security-relevant and
+ // any mod could just mess with a global variable.
+ luaL_checktype(L, 1, LUA_TFUNCTION);
+ lua_rawseti(L, LUA_REGISTRYINDEX, CUSTOM_RIDX_HTTP_API_LUA);
- std::string mod_name = readParam<std::string>(L, -1);
- std::string http_mods = g_settings->get("secure.http_mods");
- http_mods.erase(std::remove(http_mods.begin(), http_mods.end(), ' '), http_mods.end());
- std::vector<std::string> mod_list_http = str_split(http_mods, ',');
+ return 0;
+}
- std::string trusted_mods = g_settings->get("secure.trusted_mods");
- trusted_mods.erase(std::remove(trusted_mods.begin(), trusted_mods.end(), ' '), trusted_mods.end());
- std::vector<std::string> mod_list_trusted = str_split(trusted_mods, ',');
+int ModApiHttp::l_request_http_api(lua_State *L)
+{
+ NO_MAP_LOCK_REQUIRED;
- mod_list_http.insert(mod_list_http.end(), mod_list_trusted.begin(), mod_list_trusted.end());
- if (std::find(mod_list_http.begin(), mod_list_http.end(), mod_name) == mod_list_http.end()) {
+ if (!ScriptApiSecurity::checkWhitelisted(L, "secure.http_mods") &&
+ !ScriptApiSecurity::checkWhitelisted(L, "secure.trusted_mods")) {
lua_pushnil(L);
return 1;
}
- lua_getglobal(L, "core");
- lua_getfield(L, -1, "http_add_fetch");
+ lua_rawgeti(L, LUA_REGISTRYINDEX, CUSTOM_RIDX_HTTP_API_LUA);
+ assert(lua_isfunction(L, -1));
lua_newtable(L);
HTTP_API(fetch_async);
HTTP_API(fetch_async_get);
// Stack now looks like this:
- // <core.http_add_fetch> <table with fetch_async, fetch_async_get>
- // Now call core.http_add_fetch to append .fetch(request, callback) to table
+ // <function> <table with fetch_async, fetch_async_get>
+ // Now call it to append .fetch(request, callback) to table
lua_call(L, 1, 1);
return 1;
@@ -249,6 +228,7 @@ void ModApiHttp::Initialize(lua_State *L, int top)
API_FCT(get_http_api);
} else {
API_FCT(request_http_api);
+ API_FCT(set_http_api_lua);
}
#endif
diff --git a/src/script/lua_api/l_http.h b/src/script/lua_api/l_http.h
index c3a2a5276..17fa283ba 100644
--- a/src/script/lua_api/l_http.h
+++ b/src/script/lua_api/l_http.h
@@ -41,6 +41,9 @@ private:
// http_fetch_async_get(handle)
static int l_http_fetch_async_get(lua_State *L);
+ // set_http_api_lua() [internal]
+ static int l_set_http_api_lua(lua_State *L);
+
// request_http_api()
static int l_request_http_api(lua_State *L);
diff --git a/src/script/lua_api/l_inventory.cpp b/src/script/lua_api/l_inventory.cpp
index 434d0a76c..b0a4ee194 100644
--- a/src/script/lua_api/l_inventory.cpp
+++ b/src/script/lua_api/l_inventory.cpp
@@ -421,19 +421,6 @@ void InvRef::create(lua_State *L, const InventoryLocation &loc)
luaL_getmetatable(L, className);
lua_setmetatable(L, -2);
}
-void InvRef::createPlayer(lua_State *L, RemotePlayer *player)
-{
- NO_MAP_LOCK_REQUIRED;
- InventoryLocation loc;
- loc.setPlayer(player->getName());
- create(L, loc);
-}
-void InvRef::createNodeMeta(lua_State *L, v3s16 p)
-{
- InventoryLocation loc;
- loc.setNodeMeta(p);
- create(L, loc);
-}
void InvRef::Register(lua_State *L)
{
@@ -456,7 +443,7 @@ void InvRef::Register(lua_State *L)
lua_pop(L, 1); // drop metatable
- luaL_openlib(L, 0, methods, 0); // fill methodtable
+ luaL_register(L, nullptr, methods); // fill methodtable
lua_pop(L, 1); // drop methodtable
// Cannot be created from Lua
diff --git a/src/script/lua_api/l_inventory.h b/src/script/lua_api/l_inventory.h
index 94f670c9d..6a75bac0f 100644
--- a/src/script/lua_api/l_inventory.h
+++ b/src/script/lua_api/l_inventory.h
@@ -111,8 +111,6 @@ public:
// Creates an InvRef and leaves it on top of stack
// Not callable from Lua; all references are created on the C side.
static void create(lua_State *L, const InventoryLocation &loc);
- static void createPlayer(lua_State *L, RemotePlayer *player);
- static void createNodeMeta(lua_State *L, v3s16 p);
static void Register(lua_State *L);
};
diff --git a/src/script/lua_api/l_item.cpp b/src/script/lua_api/l_item.cpp
index 9e0da4034..794d8a6e5 100644
--- a/src/script/lua_api/l_item.cpp
+++ b/src/script/lua_api/l_item.cpp
@@ -483,7 +483,7 @@ void LuaItemStack::Register(lua_State *L)
lua_pop(L, 1); // drop metatable
- luaL_openlib(L, 0, methods, 0); // fill methodtable
+ luaL_register(L, nullptr, methods); // fill methodtable
lua_pop(L, 1); // drop methodtable
// Can be created from Lua (ItemStack(itemstack or itemstring or table or nil))
diff --git a/src/script/lua_api/l_itemstackmeta.cpp b/src/script/lua_api/l_itemstackmeta.cpp
index d1ba1bda4..739fb9221 100644
--- a/src/script/lua_api/l_itemstackmeta.cpp
+++ b/src/script/lua_api/l_itemstackmeta.cpp
@@ -114,7 +114,7 @@ void ItemStackMetaRef::Register(lua_State *L)
lua_pop(L, 1); // drop metatable
- luaL_openlib(L, 0, methods, 0); // fill methodtable
+ luaL_register(L, nullptr, methods); // fill methodtable
lua_pop(L, 1); // drop methodtable
// Cannot be created from Lua
diff --git a/src/script/lua_api/l_localplayer.cpp b/src/script/lua_api/l_localplayer.cpp
index 33fa27c8b..2efb976c7 100644
--- a/src/script/lua_api/l_localplayer.cpp
+++ b/src/script/lua_api/l_localplayer.cpp
@@ -128,11 +128,11 @@ int LuaLocalPlayer::l_is_in_liquid_stable(lua_State *L)
return 1;
}
-int LuaLocalPlayer::l_get_liquid_viscosity(lua_State *L)
+int LuaLocalPlayer::l_get_move_resistance(lua_State *L)
{
LocalPlayer *player = getobject(L, 1);
- lua_pushinteger(L, player->liquid_viscosity);
+ lua_pushinteger(L, player->move_resistance);
return 1;
}
@@ -223,16 +223,22 @@ int LuaLocalPlayer::l_get_control(lua_State *L)
};
lua_createtable(L, 0, 12);
- set("up", c.up);
- set("down", c.down);
- set("left", c.left);
- set("right", c.right);
- set("jump", c.jump);
- set("aux1", c.aux1);
+ set("jump", c.jump);
+ set("aux1", c.aux1);
set("sneak", c.sneak);
- set("zoom", c.zoom);
- set("dig", c.dig);
+ set("zoom", c.zoom);
+ set("dig", c.dig);
set("place", c.place);
+ // Player movement in polar coordinates and non-binary speed
+ lua_pushnumber(L, c.movement_speed);
+ lua_setfield(L, -2, "movement_speed");
+ lua_pushnumber(L, c.movement_direction);
+ lua_setfield(L, -2, "movement_direction");
+ // Provide direction keys to ensure compatibility
+ set("up", c.direction_keys & (1 << 0));
+ set("down", c.direction_keys & (1 << 1));
+ set("left", c.direction_keys & (1 << 2));
+ set("right", c.direction_keys & (1 << 3));
return 1;
}
@@ -369,10 +375,11 @@ int LuaLocalPlayer::l_hud_change(lua_State *L)
if (!element)
return 0;
+ HudElementStat stat;
void *unused;
- read_hud_change(L, element, &unused);
+ bool ok = read_hud_change(L, stat, element, &unused);
- lua_pushboolean(L, true);
+ lua_pushboolean(L, ok);
return 1;
}
@@ -446,7 +453,7 @@ void LuaLocalPlayer::Register(lua_State *L)
lua_pop(L, 1); // Drop metatable
- luaL_openlib(L, 0, methods, 0); // fill methodtable
+ luaL_register(L, nullptr, methods); // fill methodtable
lua_pop(L, 1); // Drop methodtable
}
@@ -461,7 +468,6 @@ const luaL_Reg LuaLocalPlayer::methods[] = {
luamethod(LuaLocalPlayer, is_touching_ground),
luamethod(LuaLocalPlayer, is_in_liquid),
luamethod(LuaLocalPlayer, is_in_liquid_stable),
- luamethod(LuaLocalPlayer, get_liquid_viscosity),
luamethod(LuaLocalPlayer, is_climbing),
luamethod(LuaLocalPlayer, swimming_vertical),
luamethod(LuaLocalPlayer, get_physics_override),
@@ -483,5 +489,7 @@ const luaL_Reg LuaLocalPlayer::methods[] = {
luamethod(LuaLocalPlayer, hud_change),
luamethod(LuaLocalPlayer, hud_get),
+ luamethod(LuaLocalPlayer, get_move_resistance),
+
{0, 0}
};
diff --git a/src/script/lua_api/l_localplayer.h b/src/script/lua_api/l_localplayer.h
index 4413f2bdb..041545a49 100644
--- a/src/script/lua_api/l_localplayer.h
+++ b/src/script/lua_api/l_localplayer.h
@@ -51,7 +51,6 @@ private:
static int l_is_touching_ground(lua_State *L);
static int l_is_in_liquid(lua_State *L);
static int l_is_in_liquid_stable(lua_State *L);
- static int l_get_liquid_viscosity(lua_State *L);
static int l_is_climbing(lua_State *L);
static int l_swimming_vertical(lua_State *L);
@@ -96,6 +95,8 @@ private:
// hud_get(self, id)
static int l_hud_get(lua_State *L);
+ static int l_get_move_resistance(lua_State *L);
+
LocalPlayer *m_localplayer = nullptr;
public:
diff --git a/src/script/lua_api/l_mainmenu.cpp b/src/script/lua_api/l_mainmenu.cpp
index 3e9709bde..736ad022f 100644
--- a/src/script/lua_api/l_mainmenu.cpp
+++ b/src/script/lua_api/l_mainmenu.cpp
@@ -21,6 +21,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "lua_api/l_internal.h"
#include "common/c_content.h"
#include "cpp_api/s_async.h"
+#include "scripting_mainmenu.h"
#include "gui/guiEngine.h"
#include "gui/guiMainMenu.h"
#include "gui/guiKeyChangeMenu.h"
@@ -34,9 +35,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "serverlist.h"
#include "mapgen/mapgen.h"
#include "settings.h"
-
-#include <IFileArchive.h>
-#include <IFileSystem.h>
+#include "client/client.h"
#include "client/renderingengine.h"
#include "network/networkprotocol.h"
@@ -399,7 +398,8 @@ int ModApiMainMenu::l_show_keys_menu(lua_State *L)
GUIEngine* engine = getGuiEngine(L);
sanity_check(engine != NULL);
- GUIKeyChangeMenu *kmenu = new GUIKeyChangeMenu(RenderingEngine::get_gui_env(),
+ GUIKeyChangeMenu *kmenu = new GUIKeyChangeMenu(
+ engine->m_rendering_engine->get_gui_env(),
engine->m_parent,
-1,
engine->m_menumanager,
@@ -414,25 +414,53 @@ int ModApiMainMenu::l_create_world(lua_State *L)
const char *name = luaL_checkstring(L, 1);
int gameidx = luaL_checkinteger(L,2) -1;
+ StringMap use_settings;
+ luaL_checktype(L, 3, LUA_TTABLE);
+ lua_pushnil(L);
+ while (lua_next(L, 3) != 0) {
+ // key at index -2 and value at index -1
+ use_settings[luaL_checkstring(L, -2)] = luaL_checkstring(L, -1);
+ lua_pop(L, 1);
+ }
+ lua_pop(L, 1);
+
std::string path = porting::path_user + DIR_DELIM
"worlds" + DIR_DELIM
+ sanitizeDirName(name, "world_");
std::vector<SubgameSpec> games = getAvailableGames();
+ if (gameidx < 0 || gameidx >= (int) games.size()) {
+ lua_pushstring(L, "Invalid game index");
+ return 1;
+ }
- if ((gameidx >= 0) &&
- (gameidx < (int) games.size())) {
+ // Set the settings for world creation
+ // this is a bad hack but the best we have right now..
+ StringMap backup;
+ for (auto it : use_settings) {
+ if (g_settings->existsLocal(it.first))
+ backup[it.first] = g_settings->get(it.first);
+ g_settings->set(it.first, it.second);
+ }
- // Create world if it doesn't exist
- try {
- loadGameConfAndInitWorld(path, name, games[gameidx], true);
- lua_pushnil(L);
- } catch (const BaseException &e) {
- lua_pushstring(L, (std::string("Failed to initialize world: ") + e.what()).c_str());
- }
- } else {
- lua_pushstring(L, "Invalid game index");
+ // Create world if it doesn't exist
+ try {
+ loadGameConfAndInitWorld(path, name, games[gameidx], true);
+ lua_pushnil(L);
+ } catch (const BaseException &e) {
+ auto err = std::string("Failed to initialize world: ") + e.what();
+ lua_pushstring(L, err.c_str());
+ }
+
+ // Restore previous settings
+ for (auto it : use_settings) {
+ auto it2 = backup.find(it.first);
+ if (it2 == backup.end())
+ g_settings->remove(it.first); // wasn't set before
+ else
+ g_settings->set(it.first, it2->second); // was set before
}
+
return 1;
}
@@ -503,6 +531,21 @@ int ModApiMainMenu::l_get_modpath(lua_State *L)
}
/******************************************************************************/
+int ModApiMainMenu::l_get_modpaths(lua_State *L)
+{
+ int index = 1;
+ lua_newtable(L);
+ ModApiMainMenu::l_get_modpath(L);
+ lua_rawseti(L, -2, index);
+ for (const std::string &component : getEnvModPaths()) {
+ index++;
+ lua_pushstring(L, component.c_str());
+ lua_rawseti(L, -2, index);
+ }
+ return 1;
+}
+
+/******************************************************************************/
int ModApiMainMenu::l_get_clientmodpath(lua_State *L)
{
std::string modpath = fs::RemoveRelativePathComponents(
@@ -548,7 +591,10 @@ int ModApiMainMenu::l_get_cache_path(lua_State *L)
/******************************************************************************/
int ModApiMainMenu::l_get_temp_path(lua_State *L)
{
- lua_pushstring(L, fs::TempPath().c_str());
+ if (lua_isnoneornil(L, 1) || !lua_toboolean(L, 1))
+ lua_pushstring(L, fs::TempPath().c_str());
+ else
+ lua_pushstring(L, fs::CreateTempFile().c_str());
return 1;
}
@@ -588,26 +634,24 @@ int ModApiMainMenu::l_copy_dir(lua_State *L)
const char *destination = luaL_checkstring(L, 2);
bool keep_source = true;
+ if (!lua_isnoneornil(L, 3))
+ keep_source = readParam<bool>(L, 3);
- if ((!lua_isnone(L,3)) &&
- (!lua_isnil(L,3))) {
- keep_source = readParam<bool>(L,3);
- }
-
- std::string absolute_destination = fs::RemoveRelativePathComponents(destination);
- std::string absolute_source = fs::RemoveRelativePathComponents(source);
-
- if ((ModApiMainMenu::mayModifyPath(absolute_destination))) {
- bool retval = fs::CopyDir(absolute_source,absolute_destination);
-
- if (retval && (!keep_source)) {
+ std::string abs_destination = fs::RemoveRelativePathComponents(destination);
+ std::string abs_source = fs::RemoveRelativePathComponents(source);
- retval &= fs::RecursiveDelete(absolute_source);
- }
- lua_pushboolean(L,retval);
+ if (!ModApiMainMenu::mayModifyPath(abs_destination) ||
+ (!keep_source && !ModApiMainMenu::mayModifyPath(abs_source))) {
+ lua_pushboolean(L, false);
return 1;
}
- lua_pushboolean(L,false);
+
+ bool retval;
+ if (keep_source)
+ retval = fs::CopyDir(abs_source, abs_destination);
+ else
+ retval = fs::MoveDir(abs_source, abs_destination);
+ lua_pushboolean(L, retval);
return 1;
}
@@ -629,75 +673,9 @@ int ModApiMainMenu::l_extract_zip(lua_State *L)
std::string absolute_destination = fs::RemoveRelativePathComponents(destination);
if (ModApiMainMenu::mayModifyPath(absolute_destination)) {
- fs::CreateAllDirs(absolute_destination);
-
- io::IFileSystem *fs = RenderingEngine::get_filesystem();
-
- if (!fs->addFileArchive(zipfile, false, false, io::EFAT_ZIP)) {
- lua_pushboolean(L,false);
- return 1;
- }
-
- sanity_check(fs->getFileArchiveCount() > 0);
-
- /**********************************************************************/
- /* WARNING this is not threadsafe!! */
- /**********************************************************************/
- io::IFileArchive* opened_zip =
- fs->getFileArchive(fs->getFileArchiveCount()-1);
-
- const io::IFileList* files_in_zip = opened_zip->getFileList();
-
- unsigned int number_of_files = files_in_zip->getFileCount();
-
- for (unsigned int i=0; i < number_of_files; i++) {
- std::string fullpath = destination;
- fullpath += DIR_DELIM;
- fullpath += files_in_zip->getFullFileName(i).c_str();
- std::string fullpath_dir = fs::RemoveLastPathComponent(fullpath);
-
- if (!files_in_zip->isDirectory(i)) {
- if (!fs::PathExists(fullpath_dir) && !fs::CreateAllDirs(fullpath_dir)) {
- fs->removeFileArchive(fs->getFileArchiveCount()-1);
- lua_pushboolean(L,false);
- return 1;
- }
-
- io::IReadFile* toread = opened_zip->createAndOpenFile(i);
-
- FILE *targetfile = fopen(fullpath.c_str(),"wb");
-
- if (targetfile == NULL) {
- fs->removeFileArchive(fs->getFileArchiveCount()-1);
- lua_pushboolean(L,false);
- return 1;
- }
-
- char read_buffer[1024];
- long total_read = 0;
-
- while (total_read < toread->getSize()) {
-
- unsigned int bytes_read =
- toread->read(read_buffer,sizeof(read_buffer));
- if ((bytes_read == 0 ) ||
- (fwrite(read_buffer, 1, bytes_read, targetfile) != bytes_read))
- {
- fclose(targetfile);
- fs->removeFileArchive(fs->getFileArchiveCount()-1);
- lua_pushboolean(L,false);
- return 1;
- }
- total_read += bytes_read;
- }
-
- fclose(targetfile);
- }
-
- }
-
- fs->removeFileArchive(fs->getFileArchiveCount()-1);
- lua_pushboolean(L,true);
+ auto fs = RenderingEngine::get_raw_device()->getFileSystem();
+ bool ok = fs::extractZipFile(fs, zipfile, destination);
+ lua_pushboolean(L, ok);
return 1;
}
@@ -763,7 +741,7 @@ int ModApiMainMenu::l_show_path_select_dialog(lua_State *L)
bool is_file_select = readParam<bool>(L, 3);
GUIFileSelectMenu* fileOpenMenu =
- new GUIFileSelectMenu(RenderingEngine::get_gui_env(),
+ new GUIFileSelectMenu(engine->m_rendering_engine->get_gui_env(),
engine->m_parent,
-1,
engine->m_menumanager,
@@ -804,13 +782,12 @@ int ModApiMainMenu::l_get_video_drivers(lua_State *L)
lua_newtable(L);
for (u32 i = 0; i != drivers.size(); i++) {
- const char *name = RenderingEngine::getVideoDriverName(drivers[i]);
- const char *fname = RenderingEngine::getVideoDriverFriendlyName(drivers[i]);
+ auto &info = RenderingEngine::getVideoDriverInfo(drivers[i]);
lua_newtable(L);
- lua_pushstring(L, name);
+ lua_pushstring(L, info.name.c_str());
lua_setfield(L, -2, "name");
- lua_pushstring(L, fname);
+ lua_pushstring(L, info.friendly_name.c_str());
lua_setfield(L, -2, "friendly_name");
lua_rawseti(L, -2, i + 1);
@@ -820,32 +797,11 @@ int ModApiMainMenu::l_get_video_drivers(lua_State *L)
}
/******************************************************************************/
-int ModApiMainMenu::l_get_video_modes(lua_State *L)
-{
- std::vector<core::vector3d<u32> > videomodes
- = RenderingEngine::getSupportedVideoModes();
-
- lua_newtable(L);
- for (u32 i = 0; i != videomodes.size(); i++) {
- lua_newtable(L);
- lua_pushnumber(L, videomodes[i].X);
- lua_setfield(L, -2, "w");
- lua_pushnumber(L, videomodes[i].Y);
- lua_setfield(L, -2, "h");
- lua_pushnumber(L, videomodes[i].Z);
- lua_setfield(L, -2, "depth");
-
- lua_rawseti(L, -2, i + 1);
- }
-
- return 1;
-}
-
-/******************************************************************************/
int ModApiMainMenu::l_gettext(lua_State *L)
{
- std::string text = strgettext(std::string(luaL_checkstring(L, 1)));
- lua_pushstring(L, text.c_str());
+ const char *srctext = luaL_checkstring(L, 1);
+ const char *text = *srctext ? gettext(srctext) : "";
+ lua_pushstring(L, text);
return 1;
}
@@ -859,15 +815,7 @@ int ModApiMainMenu::l_get_screen_info(lua_State *L)
lua_pushnumber(L,RenderingEngine::getDisplayDensity());
lua_settable(L, top);
- lua_pushstring(L,"display_width");
- lua_pushnumber(L,RenderingEngine::getDisplaySize().X);
- lua_settable(L, top);
-
- lua_pushstring(L,"display_height");
- lua_pushnumber(L,RenderingEngine::getDisplaySize().Y);
- lua_settable(L, top);
-
- const v2u32 &window_size = RenderingEngine::get_instance()->getWindowSize();
+ const v2u32 &window_size = RenderingEngine::getWindowSize();
lua_pushstring(L,"window_width");
lua_pushnumber(L, window_size.X);
lua_settable(L, top);
@@ -875,6 +823,10 @@ int ModApiMainMenu::l_get_screen_info(lua_State *L)
lua_pushstring(L,"window_height");
lua_pushnumber(L, window_size.Y);
lua_settable(L, top);
+
+ lua_pushstring(L, "render_info");
+ lua_pushstring(L, wide_to_utf8(RenderingEngine::get_video_driver()->getName()).c_str());
+ lua_settable(L, top);
return 1;
}
@@ -910,20 +862,20 @@ int ModApiMainMenu::l_open_dir(lua_State *L)
/******************************************************************************/
int ModApiMainMenu::l_do_async_callback(lua_State *L)
{
- GUIEngine* engine = getGuiEngine(L);
+ MainMenuScripting *script = getScriptApi<MainMenuScripting>(L);
size_t func_length, param_length;
const char* serialized_func_raw = luaL_checklstring(L, 1, &func_length);
-
const char* serialized_param_raw = luaL_checklstring(L, 2, &param_length);
sanity_check(serialized_func_raw != NULL);
sanity_check(serialized_param_raw != NULL);
- std::string serialized_func = std::string(serialized_func_raw, func_length);
- std::string serialized_param = std::string(serialized_param_raw, param_length);
+ u32 jobId = script->queueAsync(
+ std::string(serialized_func_raw, func_length),
+ std::string(serialized_param_raw, param_length));
- lua_pushinteger(L, engine->queueAsync(serialized_func, serialized_param));
+ lua_pushinteger(L, jobId);
return 1;
}
@@ -949,6 +901,7 @@ void ModApiMainMenu::Initialize(lua_State *L, int top)
API_FCT(get_mapgen_names);
API_FCT(get_user_path);
API_FCT(get_modpath);
+ API_FCT(get_modpaths);
API_FCT(get_clientmodpath);
API_FCT(get_gamepath);
API_FCT(get_texturepath);
@@ -966,7 +919,6 @@ void ModApiMainMenu::Initialize(lua_State *L, int top)
API_FCT(download_file);
API_FCT(gettext);
API_FCT(get_video_drivers);
- API_FCT(get_video_modes);
API_FCT(get_screen_info);
API_FCT(get_min_supp_proto);
API_FCT(get_max_supp_proto);
@@ -983,6 +935,7 @@ void ModApiMainMenu::InitializeAsync(lua_State *L, int top)
API_FCT(get_mapgen_names);
API_FCT(get_user_path);
API_FCT(get_modpath);
+ API_FCT(get_modpaths);
API_FCT(get_clientmodpath);
API_FCT(get_gamepath);
API_FCT(get_texturepath);
@@ -993,10 +946,10 @@ void ModApiMainMenu::InitializeAsync(lua_State *L, int top)
API_FCT(delete_dir);
API_FCT(copy_dir);
API_FCT(is_dir);
- //API_FCT(extract_zip); //TODO remove dependency to GuiEngine
+ API_FCT(extract_zip);
API_FCT(may_modify_path);
API_FCT(download_file);
API_FCT(get_min_supp_proto);
API_FCT(get_max_supp_proto);
- //API_FCT(gettext); (gettext lib isn't threadsafe)
+ API_FCT(gettext);
}
diff --git a/src/script/lua_api/l_mainmenu.h b/src/script/lua_api/l_mainmenu.h
index 33ac9e721..781185425 100644
--- a/src/script/lua_api/l_mainmenu.h
+++ b/src/script/lua_api/l_mainmenu.h
@@ -112,6 +112,8 @@ private:
static int l_get_modpath(lua_State *L);
+ static int l_get_modpaths(lua_State *L);
+
static int l_get_clientmodpath(lua_State *L);
static int l_get_gamepath(lua_State *L);
@@ -140,8 +142,6 @@ private:
static int l_get_video_drivers(lua_State *L);
- static int l_get_video_modes(lua_State *L);
-
//version compatibility
static int l_get_min_supp_proto(lua_State *L);
diff --git a/src/script/lua_api/l_mapgen.cpp b/src/script/lua_api/l_mapgen.cpp
index 12a497b1e..f173bd162 100644
--- a/src/script/lua_api/l_mapgen.cpp
+++ b/src/script/lua_api/l_mapgen.cpp
@@ -482,9 +482,7 @@ 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;
+ const char *biome_str = luaL_checkstring(L, 1);
const BiomeManager *bmgr = getServer(L)->getEmergeManager()->getBiomeManager();
if (!bmgr)
@@ -527,30 +525,12 @@ int ModApiMapgen::l_get_heat(lua_State *L)
v3s16 pos = read_v3s16(L, 1);
- NoiseParams np_heat;
- NoiseParams np_heat_blend;
-
- MapSettingsManager *settingsmgr =
- getServer(L)->getEmergeManager()->map_settings_mgr;
-
- if (!settingsmgr->getMapSettingNoiseParams("mg_biome_np_heat",
- &np_heat) ||
- !settingsmgr->getMapSettingNoiseParams("mg_biome_np_heat_blend",
- &np_heat_blend))
- return 0;
+ const BiomeGen *biomegen = getServer(L)->getEmergeManager()->getBiomeGen();
- std::string value;
- if (!settingsmgr->getMapSetting("seed", &value))
- return 0;
- std::istringstream ss(value);
- u64 seed;
- ss >> seed;
-
- const BiomeManager *bmgr = getServer(L)->getEmergeManager()->getBiomeManager();
- if (!bmgr)
+ if (!biomegen || biomegen->getType() != BIOMEGEN_ORIGINAL)
return 0;
- float heat = bmgr->getHeatAtPosOriginal(pos, np_heat, np_heat_blend, seed);
+ float heat = ((BiomeGenOriginal*) biomegen)->calcHeatAtPoint(pos);
lua_pushnumber(L, heat);
@@ -566,31 +546,12 @@ int ModApiMapgen::l_get_humidity(lua_State *L)
v3s16 pos = read_v3s16(L, 1);
- NoiseParams np_humidity;
- NoiseParams np_humidity_blend;
+ const BiomeGen *biomegen = getServer(L)->getEmergeManager()->getBiomeGen();
- MapSettingsManager *settingsmgr =
- getServer(L)->getEmergeManager()->map_settings_mgr;
-
- if (!settingsmgr->getMapSettingNoiseParams("mg_biome_np_humidity",
- &np_humidity) ||
- !settingsmgr->getMapSettingNoiseParams("mg_biome_np_humidity_blend",
- &np_humidity_blend))
- return 0;
-
- std::string value;
- if (!settingsmgr->getMapSetting("seed", &value))
- return 0;
- std::istringstream ss(value);
- u64 seed;
- ss >> seed;
-
- const BiomeManager *bmgr = getServer(L)->getEmergeManager()->getBiomeManager();
- if (!bmgr)
+ if (!biomegen || biomegen->getType() != BIOMEGEN_ORIGINAL)
return 0;
- float humidity = bmgr->getHumidityAtPosOriginal(pos, np_humidity,
- np_humidity_blend, seed);
+ float humidity = ((BiomeGenOriginal*) biomegen)->calcHumidityAtPoint(pos);
lua_pushnumber(L, humidity);
@@ -606,45 +567,11 @@ int ModApiMapgen::l_get_biome_data(lua_State *L)
v3s16 pos = read_v3s16(L, 1);
- NoiseParams np_heat;
- NoiseParams np_heat_blend;
- NoiseParams np_humidity;
- NoiseParams np_humidity_blend;
-
- MapSettingsManager *settingsmgr =
- getServer(L)->getEmergeManager()->map_settings_mgr;
-
- if (!settingsmgr->getMapSettingNoiseParams("mg_biome_np_heat",
- &np_heat) ||
- !settingsmgr->getMapSettingNoiseParams("mg_biome_np_heat_blend",
- &np_heat_blend) ||
- !settingsmgr->getMapSettingNoiseParams("mg_biome_np_humidity",
- &np_humidity) ||
- !settingsmgr->getMapSettingNoiseParams("mg_biome_np_humidity_blend",
- &np_humidity_blend))
- return 0;
-
- std::string value;
- if (!settingsmgr->getMapSetting("seed", &value))
- return 0;
- std::istringstream ss(value);
- u64 seed;
- ss >> seed;
-
- const BiomeManager *bmgr = getServer(L)->getEmergeManager()->getBiomeManager();
- if (!bmgr)
+ const BiomeGen *biomegen = getServer(L)->getEmergeManager()->getBiomeGen();
+ if (!biomegen)
return 0;
- float heat = bmgr->getHeatAtPosOriginal(pos, np_heat, np_heat_blend, seed);
- if (!heat)
- return 0;
-
- float humidity = bmgr->getHumidityAtPosOriginal(pos, np_humidity,
- np_humidity_blend, seed);
- if (!humidity)
- return 0;
-
- const Biome *biome = bmgr->getBiomeFromNoiseOriginal(heat, humidity, pos);
+ const Biome *biome = biomegen->calcBiomeAtPoint(pos);
if (!biome || biome->index == OBJDEF_INVALID_INDEX)
return 0;
@@ -653,11 +580,16 @@ int ModApiMapgen::l_get_biome_data(lua_State *L)
lua_pushinteger(L, biome->index);
lua_setfield(L, -2, "biome");
- lua_pushnumber(L, heat);
- lua_setfield(L, -2, "heat");
+ if (biomegen->getType() == BIOMEGEN_ORIGINAL) {
+ float heat = ((BiomeGenOriginal*) biomegen)->calcHeatAtPoint(pos);
+ float humidity = ((BiomeGenOriginal*) biomegen)->calcHumidityAtPoint(pos);
- lua_pushnumber(L, humidity);
- lua_setfield(L, -2, "humidity");
+ lua_pushnumber(L, heat);
+ lua_setfield(L, -2, "heat");
+
+ lua_pushnumber(L, humidity);
+ lua_setfield(L, -2, "humidity");
+ }
return 1;
}
@@ -820,9 +752,7 @@ int ModApiMapgen::l_get_mapgen_params(lua_State *L)
lua_setfield(L, -2, "mgname");
settingsmgr->getMapSetting("seed", &value);
- std::istringstream ss(value);
- u64 seed;
- ss >> seed;
+ u64 seed = from_string<u64>(value);
lua_pushinteger(L, seed);
lua_setfield(L, -2, "seed");
@@ -1493,9 +1423,12 @@ int ModApiMapgen::l_generate_ores(lua_State *L)
NO_MAP_LOCK_REQUIRED;
EmergeManager *emerge = getServer(L)->getEmergeManager();
+ if (!emerge || !emerge->mgparams)
+ return 0;
Mapgen mg;
- mg.seed = emerge->mgparams->seed;
+ // Intentionally truncates to s32, see Mapgen::Mapgen()
+ mg.seed = (s32)emerge->mgparams->seed;
mg.vm = LuaVoxelManip::checkobject(L, 1)->vm;
mg.ndef = getServer(L)->getNodeDefManager();
@@ -1519,9 +1452,12 @@ int ModApiMapgen::l_generate_decorations(lua_State *L)
NO_MAP_LOCK_REQUIRED;
EmergeManager *emerge = getServer(L)->getEmergeManager();
+ if (!emerge || !emerge->mgparams)
+ return 0;
Mapgen mg;
- mg.seed = emerge->mgparams->seed;
+ // Intentionally truncates to s32, see Mapgen::Mapgen()
+ mg.seed = (s32)emerge->mgparams->seed;
mg.vm = LuaVoxelManip::checkobject(L, 1)->vm;
mg.ndef = getServer(L)->getNodeDefManager();
@@ -1734,11 +1670,10 @@ int ModApiMapgen::l_serialize_schematic(lua_State *L)
std::ostringstream os(std::ios_base::binary);
switch (schem_format) {
case SCHEM_FMT_MTS:
- schem->serializeToMts(&os, schem->m_nodenames);
+ schem->serializeToMts(&os);
break;
case SCHEM_FMT_LUA:
- schem->serializeToLua(&os, schem->m_nodenames,
- use_comments, indent_spaces);
+ schem->serializeToLua(&os, use_comments, indent_spaces);
break;
default:
return 0;
diff --git a/src/script/lua_api/l_metadata.cpp b/src/script/lua_api/l_metadata.cpp
index 21002e6a7..d00cb4daa 100644
--- a/src/script/lua_api/l_metadata.cpp
+++ b/src/script/lua_api/l_metadata.cpp
@@ -82,9 +82,10 @@ int MetaDataRef::l_get(lua_State *L)
std::string str;
if (meta->getStringToRef(name, str)) {
lua_pushlstring(L, str.c_str(), str.size());
- return 1;
+ } else {
+ lua_pushnil(L);
}
- return 0;
+ return 1;
}
// get_string(self, name)
diff --git a/src/script/lua_api/l_minimap.cpp b/src/script/lua_api/l_minimap.cpp
index 3bbb6e5e3..a135e0bd5 100644
--- a/src/script/lua_api/l_minimap.cpp
+++ b/src/script/lua_api/l_minimap.cpp
@@ -211,7 +211,7 @@ void LuaMinimap::Register(lua_State *L)
lua_pop(L, 1); // drop metatable
- luaL_openlib(L, 0, methods, 0); // fill methodtable
+ luaL_register(L, nullptr, methods); // fill methodtable
lua_pop(L, 1); // drop methodtable
}
diff --git a/src/script/lua_api/l_modchannels.cpp b/src/script/lua_api/l_modchannels.cpp
index 0485b276a..931c2749c 100644
--- a/src/script/lua_api/l_modchannels.cpp
+++ b/src/script/lua_api/l_modchannels.cpp
@@ -107,7 +107,7 @@ void ModChannelRef::Register(lua_State *L)
lua_pop(L, 1); // Drop metatable
- luaL_openlib(L, 0, methods, 0); // fill methodtable
+ luaL_register(L, nullptr, methods); // fill methodtable
lua_pop(L, 1); // Drop methodtable
}
diff --git a/src/script/lua_api/l_nodemeta.cpp b/src/script/lua_api/l_nodemeta.cpp
index 57052cb42..34760157d 100644
--- a/src/script/lua_api/l_nodemeta.cpp
+++ b/src/script/lua_api/l_nodemeta.cpp
@@ -89,7 +89,10 @@ int NodeMetaRef::l_get_inventory(lua_State *L)
NodeMetaRef *ref = checkobject(L, 1);
ref->getmeta(true); // try to ensure the metadata exists
- InvRef::createNodeMeta(L, ref->m_p);
+
+ InventoryLocation loc;
+ loc.setNodeMeta(ref->m_p);
+ InvRef::create(L, loc);
return 1;
}
@@ -234,7 +237,7 @@ void NodeMetaRef::RegisterCommon(lua_State *L)
void NodeMetaRef::Register(lua_State *L)
{
RegisterCommon(L);
- luaL_openlib(L, 0, methodsServer, 0); // fill methodtable
+ luaL_register(L, nullptr, methodsServer); // fill methodtable
lua_pop(L, 1); // drop methodtable
}
@@ -260,7 +263,7 @@ const luaL_Reg NodeMetaRef::methodsServer[] = {
void NodeMetaRef::RegisterClient(lua_State *L)
{
RegisterCommon(L);
- luaL_openlib(L, 0, methodsClient, 0); // fill methodtable
+ luaL_register(L, nullptr, methodsClient); // fill methodtable
lua_pop(L, 1); // drop methodtable
}
diff --git a/src/script/lua_api/l_nodetimer.cpp b/src/script/lua_api/l_nodetimer.cpp
index c2df52c05..8a302149f 100644
--- a/src/script/lua_api/l_nodetimer.cpp
+++ b/src/script/lua_api/l_nodetimer.cpp
@@ -122,7 +122,7 @@ void NodeTimerRef::Register(lua_State *L)
lua_pop(L, 1); // drop metatable
- luaL_openlib(L, 0, methods, 0); // fill methodtable
+ luaL_register(L, nullptr, methods); // fill methodtable
lua_pop(L, 1); // drop methodtable
// Cannot be created from Lua
diff --git a/src/script/lua_api/l_noise.cpp b/src/script/lua_api/l_noise.cpp
index e0861126a..f43ba837a 100644
--- a/src/script/lua_api/l_noise.cpp
+++ b/src/script/lua_api/l_noise.cpp
@@ -122,7 +122,7 @@ void LuaPerlinNoise::Register(lua_State *L)
lua_pop(L, 1);
- luaL_openlib(L, 0, methods, 0);
+ luaL_register(L, nullptr, methods);
lua_pop(L, 1);
lua_register(L, className, create_object);
@@ -380,7 +380,7 @@ void LuaPerlinNoiseMap::Register(lua_State *L)
lua_pop(L, 1);
- luaL_openlib(L, 0, methods, 0);
+ luaL_register(L, nullptr, methods);
lua_pop(L, 1);
lua_register(L, className, create_object);
@@ -485,7 +485,7 @@ void LuaPseudoRandom::Register(lua_State *L)
lua_pop(L, 1);
- luaL_openlib(L, 0, methods, 0);
+ luaL_register(L, nullptr, methods);
lua_pop(L, 1);
lua_register(L, className, create_object);
@@ -584,7 +584,7 @@ void LuaPcgRandom::Register(lua_State *L)
lua_pop(L, 1);
- luaL_openlib(L, 0, methods, 0);
+ luaL_register(L, nullptr, methods);
lua_pop(L, 1);
lua_register(L, className, create_object);
@@ -699,7 +699,7 @@ void LuaSecureRandom::Register(lua_State *L)
lua_pop(L, 1);
- luaL_openlib(L, 0, methods, 0);
+ luaL_register(L, nullptr, methods);
lua_pop(L, 1);
lua_register(L, className, create_object);
diff --git a/src/script/lua_api/l_object.cpp b/src/script/lua_api/l_object.cpp
index 8ae99b929..407b48db0 100644
--- a/src/script/lua_api/l_object.cpp
+++ b/src/script/lua_api/l_object.cpp
@@ -172,27 +172,11 @@ int ObjectRef::l_punch(lua_State *L)
float time_from_last_punch = readParam<float>(L, 3, 1000000.0f);
ToolCapabilities toolcap = read_tool_capabilities(L, 4);
v3f dir = readParam<v3f>(L, 5, sao->getBasePosition() - puncher->getBasePosition());
-
dir.normalize();
- u16 src_original_hp = sao->getHP();
- u16 dst_origin_hp = puncher->getHP();
- u16 wear = sao->punch(dir, &toolcap, puncher, time_from_last_punch);
+ u32 wear = sao->punch(dir, &toolcap, puncher, time_from_last_punch);
lua_pushnumber(L, wear);
- // If the punched is a player, and its HP changed
- if (src_original_hp != sao->getHP() &&
- sao->getType() == ACTIVEOBJECT_TYPE_PLAYER) {
- getServer(L)->SendPlayerHPOrDie((PlayerSAO *)sao,
- PlayerHPChangeReason(PlayerHPChangeReason::PLAYER_PUNCH, puncher));
- }
-
- // 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,
- PlayerHPChangeReason(PlayerHPChangeReason::PLAYER_PUNCH, sao));
- }
return 1;
}
@@ -238,8 +222,6 @@ int ObjectRef::l_set_hp(lua_State *L)
}
sao->setHP(hp, reason);
- if (sao->getType() == ACTIVEOBJECT_TYPE_PLAYER)
- getServer(L)->SendPlayerHPOrDie((PlayerSAO *)sao, reason);
if (reason.hasLuaReference())
luaL_unref(L, LUA_REGISTRYINDEX, reason.lua_reference);
return 0;
@@ -685,6 +667,7 @@ int ObjectRef::l_set_properties(lua_State *L)
return 0;
read_object_properties(L, 2, sao, prop, getServer(L)->idef());
+ prop->validate();
sao->notifyObjectPropertiesModified();
return 0;
}
@@ -752,6 +735,7 @@ int ObjectRef::l_set_nametag_attributes(lua_State *L)
std::string nametag = getstringfield_default(L, 2, "text", "");
prop->nametag = nametag;
+ prop->validate();
sao->notifyObjectPropertiesModified();
lua_pushboolean(L, true);
return 1;
@@ -1383,20 +1367,19 @@ int ObjectRef::l_get_player_control(lua_State *L)
NO_MAP_LOCK_REQUIRED;
ObjectRef *ref = checkobject(L, 1);
RemotePlayer *player = getplayer(ref);
- if (player == nullptr) {
- lua_pushlstring(L, "", 0);
- return 1;
- }
- const PlayerControl &control = player->getPlayerControl();
lua_newtable(L);
- lua_pushboolean(L, control.up);
+ if (player == nullptr)
+ return 1;
+
+ const PlayerControl &control = player->getPlayerControl();
+ lua_pushboolean(L, control.direction_keys & (1 << 0));
lua_setfield(L, -2, "up");
- lua_pushboolean(L, control.down);
+ lua_pushboolean(L, control.direction_keys & (1 << 1));
lua_setfield(L, -2, "down");
- lua_pushboolean(L, control.left);
+ lua_pushboolean(L, control.direction_keys & (1 << 2));
lua_setfield(L, -2, "left");
- lua_pushboolean(L, control.right);
+ lua_pushboolean(L, control.direction_keys & (1 << 3));
lua_setfield(L, -2, "right");
lua_pushboolean(L, control.jump);
lua_setfield(L, -2, "jump");
@@ -1425,11 +1408,25 @@ int ObjectRef::l_get_player_control_bits(lua_State *L)
ObjectRef *ref = checkobject(L, 1);
RemotePlayer *player = getplayer(ref);
if (player == nullptr) {
- lua_pushlstring(L, "", 0);
+ lua_pushinteger(L, 0);
return 1;
}
- lua_pushnumber(L, player->keyPressed);
+ const auto &c = player->getPlayerControl();
+
+ // This is very close to PlayerControl::getKeysPressed() but duplicated
+ // here so the encoding in the API is not inadvertedly changed.
+ u32 keypress_bits =
+ c.direction_keys |
+ ( (u32)(c.jump & 1) << 4) |
+ ( (u32)(c.aux1 & 1) << 5) |
+ ( (u32)(c.sneak & 1) << 6) |
+ ( (u32)(c.dig & 1) << 7) |
+ ( (u32)(c.place & 1) << 8) |
+ ( (u32)(c.zoom & 1) << 9)
+ ;
+
+ lua_pushinteger(L, keypress_bits);
return 1;
}
@@ -1553,12 +1550,14 @@ int ObjectRef::l_hud_change(lua_State *L)
if (elem == nullptr)
return 0;
+ HudElementStat stat;
void *value = nullptr;
- HudElementStat stat = read_hud_change(L, elem, &value);
+ bool ok = read_hud_change(L, stat, elem, &value);
- getServer(L)->hudChange(player, id, stat, value);
+ if (ok)
+ getServer(L)->hudChange(player, id, stat, value);
- lua_pushboolean(L, true);
+ lua_pushboolean(L, ok);
return 1;
}
@@ -1736,9 +1735,11 @@ int ObjectRef::l_set_sky(lua_State *L)
return 0;
SkyboxParams sky_params = player->getSkyParams();
- bool is_colorspec = is_color_table(L, 2);
- if (lua_istable(L, 2) && !is_colorspec) {
+ // reset if empty
+ if (lua_isnoneornil(L, 2) && lua_isnone(L, 3)) {
+ sky_params = SkyboxDefaults::getSkyDefaults();
+ } else if (lua_istable(L, 2) && !is_color_table(L, 2)) {
lua_getfield(L, 2, "base_color");
if (!lua_isnil(L, -1))
read_color(L, -1, &sky_params.bgcolor);
@@ -1762,17 +1763,11 @@ int ObjectRef::l_set_sky(lua_State *L)
}
lua_pop(L, 1);
- /*
- We want to avoid crashes, so we're checking even if we're not using them.
- However, we want to ensure that the skybox can be set to nil when
- using "regular" or "plain" skybox modes as textures aren't needed.
- */
-
- if (sky_params.textures.size() != 6 && sky_params.textures.size() > 0)
+ // Validate that we either have six or zero textures
+ if (sky_params.textures.size() != 6 && !sky_params.textures.empty())
throw LuaError("Skybox expects 6 textures!");
- sky_params.clouds = getboolfield_default(L, 2,
- "clouds", sky_params.clouds);
+ sky_params.clouds = getboolfield_default(L, 2, "clouds", sky_params.clouds);
lua_getfield(L, 2, "sky_color");
if (lua_istable(L, -1)) {
@@ -1820,7 +1815,7 @@ int ObjectRef::l_set_sky(lua_State *L)
sky_params.fog_tint_type = luaL_checkstring(L, -1);
lua_pop(L, 1);
- // Because we need to leave the "sky_color" table.
+ // pop "sky_color" table
lua_pop(L, 1);
}
} else {
@@ -1856,11 +1851,8 @@ int ObjectRef::l_set_sky(lua_State *L)
if (lua_istable(L, 4)) {
lua_pushnil(L);
while (lua_next(L, 4) != 0) {
- // Key at index -2, and value at index -1
- if (lua_isstring(L, -1))
- sky_params.textures.emplace_back(readParam<std::string>(L, -1));
- else
- sky_params.textures.emplace_back("");
+ // Key at index -2, and value at index -1
+ sky_params.textures.emplace_back(readParam<std::string>(L, -1));
// Remove the value, keep the key for the next iteration
lua_pop(L, 1);
}
@@ -1876,6 +1868,7 @@ int ObjectRef::l_set_sky(lua_State *L)
getServer(L)->setMoon(player, moon_params);
getServer(L)->setStars(player, star_params);
}
+
getServer(L)->setSky(player, sky_params);
lua_pushboolean(L, true);
return 1;
@@ -1951,21 +1944,20 @@ int ObjectRef::l_set_sun(lua_State *L)
if (player == nullptr)
return 0;
- luaL_checktype(L, 2, LUA_TTABLE);
SunParams sun_params = player->getSunParams();
- sun_params.visible = getboolfield_default(L, 2,
- "visible", sun_params.visible);
- sun_params.texture = getstringfield_default(L, 2,
- "texture", sun_params.texture);
- sun_params.tonemap = getstringfield_default(L, 2,
- "tonemap", sun_params.tonemap);
- sun_params.sunrise = getstringfield_default(L, 2,
- "sunrise", sun_params.sunrise);
- sun_params.sunrise_visible = getboolfield_default(L, 2,
- "sunrise_visible", sun_params.sunrise_visible);
- sun_params.scale = getfloatfield_default(L, 2,
- "scale", sun_params.scale);
+ // reset if empty
+ if (lua_isnoneornil(L, 2)) {
+ sun_params = SkyboxDefaults::getSunDefaults();
+ } else {
+ luaL_checktype(L, 2, LUA_TTABLE);
+ sun_params.visible = getboolfield_default(L, 2, "visible", sun_params.visible);
+ sun_params.texture = getstringfield_default(L, 2, "texture", sun_params.texture);
+ sun_params.tonemap = getstringfield_default(L, 2, "tonemap", sun_params.tonemap);
+ sun_params.sunrise = getstringfield_default(L, 2, "sunrise", sun_params.sunrise);
+ sun_params.sunrise_visible = getboolfield_default(L, 2, "sunrise_visible", sun_params.sunrise_visible);
+ sun_params.scale = getfloatfield_default(L, 2, "scale", sun_params.scale);
+ }
getServer(L)->setSun(player, sun_params);
lua_pushboolean(L, true);
@@ -2008,17 +2000,18 @@ int ObjectRef::l_set_moon(lua_State *L)
if (player == nullptr)
return 0;
- luaL_checktype(L, 2, LUA_TTABLE);
MoonParams moon_params = player->getMoonParams();
- moon_params.visible = getboolfield_default(L, 2,
- "visible", moon_params.visible);
- moon_params.texture = getstringfield_default(L, 2,
- "texture", moon_params.texture);
- moon_params.tonemap = getstringfield_default(L, 2,
- "tonemap", moon_params.tonemap);
- moon_params.scale = getfloatfield_default(L, 2,
- "scale", moon_params.scale);
+ // reset if empty
+ if (lua_isnoneornil(L, 2)) {
+ moon_params = SkyboxDefaults::getMoonDefaults();
+ } else {
+ luaL_checktype(L, 2, LUA_TTABLE);
+ moon_params.visible = getboolfield_default(L, 2, "visible", moon_params.visible);
+ moon_params.texture = getstringfield_default(L, 2, "texture", moon_params.texture);
+ moon_params.tonemap = getstringfield_default(L, 2, "tonemap", moon_params.tonemap);
+ moon_params.scale = getfloatfield_default(L, 2, "scale", moon_params.scale);
+ }
getServer(L)->setMoon(player, moon_params);
lua_pushboolean(L, true);
@@ -2057,21 +2050,24 @@ int ObjectRef::l_set_stars(lua_State *L)
if (player == nullptr)
return 0;
- luaL_checktype(L, 2, LUA_TTABLE);
StarParams star_params = player->getStarParams();
- star_params.visible = getboolfield_default(L, 2,
- "visible", star_params.visible);
- star_params.count = getintfield_default(L, 2,
- "count", star_params.count);
+ // reset if empty
+ if (lua_isnoneornil(L, 2)) {
+ star_params = SkyboxDefaults::getStarDefaults();
+ } else {
+ luaL_checktype(L, 2, LUA_TTABLE);
+ star_params.visible = getboolfield_default(L, 2, "visible", star_params.visible);
+ star_params.count = getintfield_default(L, 2, "count", star_params.count);
- lua_getfield(L, 2, "star_color");
- if (!lua_isnil(L, -1))
- read_color(L, -1, &star_params.starcolor);
- lua_pop(L, 1);
+ lua_getfield(L, 2, "star_color");
+ if (!lua_isnil(L, -1))
+ read_color(L, -1, &star_params.starcolor);
+ lua_pop(L, 1);
- star_params.scale = getfloatfield_default(L, 2,
- "scale", star_params.scale);
+ star_params.scale = getfloatfield_default(L, 2,
+ "scale", star_params.scale);
+ }
getServer(L)->setStars(player, star_params);
lua_pushboolean(L, true);
@@ -2110,31 +2106,36 @@ int ObjectRef::l_set_clouds(lua_State *L)
if (player == nullptr)
return 0;
- luaL_checktype(L, 2, LUA_TTABLE);
CloudParams cloud_params = player->getCloudParams();
- cloud_params.density = getfloatfield_default(L, 2, "density", cloud_params.density);
+ // reset if empty
+ if (lua_isnoneornil(L, 2)) {
+ cloud_params = SkyboxDefaults::getCloudDefaults();
+ } else {
+ luaL_checktype(L, 2, LUA_TTABLE);
+ cloud_params.density = getfloatfield_default(L, 2, "density", cloud_params.density);
- lua_getfield(L, 2, "color");
- if (!lua_isnil(L, -1))
- read_color(L, -1, &cloud_params.color_bright);
- lua_pop(L, 1);
- lua_getfield(L, 2, "ambient");
- if (!lua_isnil(L, -1))
- read_color(L, -1, &cloud_params.color_ambient);
- lua_pop(L, 1);
+ lua_getfield(L, 2, "color");
+ if (!lua_isnil(L, -1))
+ read_color(L, -1, &cloud_params.color_bright);
+ lua_pop(L, 1);
+ lua_getfield(L, 2, "ambient");
+ if (!lua_isnil(L, -1))
+ read_color(L, -1, &cloud_params.color_ambient);
+ lua_pop(L, 1);
- cloud_params.height = getfloatfield_default(L, 2, "height", cloud_params.height );
- cloud_params.thickness = getfloatfield_default(L, 2, "thickness", cloud_params.thickness);
+ cloud_params.height = getfloatfield_default(L, 2, "height", cloud_params.height);
+ cloud_params.thickness = getfloatfield_default(L, 2, "thickness", cloud_params.thickness);
- lua_getfield(L, 2, "speed");
- if (lua_istable(L, -1)) {
- v2f new_speed;
- new_speed.X = getfloatfield_default(L, -1, "x", 0);
- new_speed.Y = getfloatfield_default(L, -1, "z", 0);
- cloud_params.speed = new_speed;
+ lua_getfield(L, 2, "speed");
+ if (lua_istable(L, -1)) {
+ v2f new_speed;
+ new_speed.X = getfloatfield_default(L, -1, "x", 0);
+ new_speed.Y = getfloatfield_default(L, -1, "z", 0);
+ cloud_params.speed = new_speed;
+ }
+ lua_pop(L, 1);
}
- lua_pop(L, 1);
getServer(L)->setClouds(player, cloud_params);
lua_pushboolean(L, true);
@@ -2311,7 +2312,7 @@ void ObjectRef::Register(lua_State *L)
lua_pop(L, 1); // drop metatable
- luaL_openlib(L, 0, methods, 0); // fill methodtable
+ luaL_register(L, nullptr, methods); // fill methodtable
lua_pop(L, 1); // drop methodtable
}
diff --git a/src/script/lua_api/l_playermeta.cpp b/src/script/lua_api/l_playermeta.cpp
index 558672e38..2706c99df 100644
--- a/src/script/lua_api/l_playermeta.cpp
+++ b/src/script/lua_api/l_playermeta.cpp
@@ -97,7 +97,7 @@ void PlayerMetaRef::Register(lua_State *L)
lua_pop(L, 1); // drop metatable
- luaL_openlib(L, 0, methods, 0);
+ luaL_register(L, nullptr, methods);
lua_pop(L, 1);
// Cannot be created from Lua
diff --git a/src/script/lua_api/l_server.cpp b/src/script/lua_api/l_server.cpp
index bf5292521..88ab5e16b 100644
--- a/src/script/lua_api/l_server.cpp
+++ b/src/script/lua_api/l_server.cpp
@@ -23,6 +23,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "common/c_content.h"
#include "cpp_api/s_base.h"
#include "cpp_api/s_security.h"
+#include "scripting_server.h"
#include "server.h"
#include "environment.h"
#include "remoteplayer.h"
@@ -56,6 +57,17 @@ int ModApiServer::l_get_server_uptime(lua_State *L)
return 1;
}
+// get_server_max_lag()
+int ModApiServer::l_get_server_max_lag(lua_State *L)
+{
+ NO_MAP_LOCK_REQUIRED;
+ ServerEnvironment *s_env = dynamic_cast<ServerEnvironment *>(getEnv(L));
+ if (!s_env)
+ lua_pushnil(L);
+ else
+ lua_pushnumber(L, s_env->getMaxLagEstimate());
+ return 1;
+}
// print(text)
int ModApiServer::l_print(lua_State *L)
@@ -281,8 +293,10 @@ int ModApiServer::l_ban_player(lua_State *L)
{
NO_MAP_LOCK_REQUIRED;
- Server *server = getServer(L);
+ if (!getEnv(L))
+ throw LuaError("Can't ban player before server has started up");
+ Server *server = getServer(L);
const char *name = luaL_checkstring(L, 1);
RemotePlayer *player = server->getEnv().getPlayer(name);
if (!player) {
@@ -296,16 +310,20 @@ int ModApiServer::l_ban_player(lua_State *L)
return 1;
}
-// kick_player(name, [reason]) -> success
-int ModApiServer::l_kick_player(lua_State *L)
+// disconnect_player(name, [reason]) -> success
+int ModApiServer::l_disconnect_player(lua_State *L)
{
NO_MAP_LOCK_REQUIRED;
+
+ if (!getEnv(L))
+ throw LuaError("Can't kick player before server has started up");
+
const char *name = luaL_checkstring(L, 1);
- std::string message("Kicked");
+ std::string message;
if (lua_isstring(L, 2))
- message.append(": ").append(readParam<std::string>(L, 2));
+ message.append(readParam<std::string>(L, 2));
else
- message.append(".");
+ message.append("Disconnected.");
RemotePlayer *player = dynamic_cast<ServerEnvironment *>(getEnv(L))->getPlayer(name);
if (player == NULL) {
@@ -322,7 +340,8 @@ int ModApiServer::l_remove_player(lua_State *L)
NO_MAP_LOCK_REQUIRED;
std::string name = luaL_checkstring(L, 1);
ServerEnvironment *s_env = dynamic_cast<ServerEnvironment *>(getEnv(L));
- assert(s_env);
+ if (!s_env)
+ throw LuaError("Can't remove player before server has started up");
RemotePlayer *player = s_env->getPlayer(name.c_str());
if (!player)
@@ -452,29 +471,37 @@ int ModApiServer::l_sound_fade(lua_State *L)
}
// dynamic_add_media(filepath)
-int ModApiServer::l_dynamic_add_media_raw(lua_State *L)
+int ModApiServer::l_dynamic_add_media(lua_State *L)
{
NO_MAP_LOCK_REQUIRED;
if (!getEnv(L))
throw LuaError("Dynamic media cannot be added before server has started up");
+ Server *server = getServer(L);
- std::string filepath = readParam<std::string>(L, 1);
- CHECK_SECURE_PATH(L, filepath.c_str(), false);
+ std::string filepath;
+ std::string to_player;
+ bool ephemeral = false;
- std::vector<RemotePlayer*> sent_to;
- bool ok = getServer(L)->dynamicAddMedia(filepath, sent_to);
- if (ok) {
- // (see wrapper code in builtin)
- lua_createtable(L, sent_to.size(), 0);
- int i = 0;
- for (RemotePlayer *player : sent_to) {
- lua_pushstring(L, player->getName());
- lua_rawseti(L, -2, ++i);
- }
+ if (lua_istable(L, 1)) {
+ getstringfield(L, 1, "filepath", filepath);
+ getstringfield(L, 1, "to_player", to_player);
+ getboolfield(L, 1, "ephemeral", ephemeral);
} else {
- lua_pushboolean(L, false);
+ filepath = readParam<std::string>(L, 1);
}
+ if (filepath.empty())
+ luaL_typerror(L, 1, "non-empty string");
+ luaL_checktype(L, 2, LUA_TFUNCTION);
+
+ CHECK_SECURE_PATH(L, filepath.c_str(), false);
+
+ u32 token = server->getScriptIface()->allocateDynamicMediaCallback(L, 2);
+
+ bool ok = server->dynamicAddMedia(filepath, token, to_player, ephemeral);
+ if (!ok)
+ server->getScriptIface()->freeDynamicMediaCallback(token);
+ lua_pushboolean(L, ok);
return 1;
}
@@ -498,36 +525,12 @@ 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);
- std::string current_mod = readParam<std::string>(L, -1, "");
- if (current_mod.empty()) {
- 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;
-}
-
void ModApiServer::Initialize(lua_State *L, int top)
{
API_FCT(request_shutdown);
API_FCT(get_server_status);
API_FCT(get_server_uptime);
+ API_FCT(get_server_max_lag);
API_FCT(get_worldpath);
API_FCT(is_singleplayer);
@@ -543,7 +546,7 @@ void ModApiServer::Initialize(lua_State *L, int top)
API_FCT(sound_play);
API_FCT(sound_stop);
API_FCT(sound_fade);
- API_FCT(dynamic_add_media_raw);
+ API_FCT(dynamic_add_media);
API_FCT(get_player_information);
API_FCT(get_player_privs);
@@ -551,11 +554,8 @@ void ModApiServer::Initialize(lua_State *L, int top)
API_FCT(get_ban_list);
API_FCT(get_ban_description);
API_FCT(ban_player);
- API_FCT(kick_player);
+ API_FCT(disconnect_player);
API_FCT(remove_player);
API_FCT(unban_player_or_ip);
API_FCT(notify_authentication_modified);
-
- API_FCT(get_last_run_mod);
- API_FCT(set_last_run_mod);
}
diff --git a/src/script/lua_api/l_server.h b/src/script/lua_api/l_server.h
index 2df180b17..f05c0b7c9 100644
--- a/src/script/lua_api/l_server.h
+++ b/src/script/lua_api/l_server.h
@@ -33,6 +33,9 @@ private:
// get_server_uptime()
static int l_get_server_uptime(lua_State *L);
+ // get_server_max_lag()
+ static int l_get_server_max_lag(lua_State *L);
+
// get_worldpath()
static int l_get_worldpath(lua_State *L);
@@ -71,7 +74,7 @@ private:
static int l_sound_fade(lua_State *L);
// dynamic_add_media(filepath)
- static int l_dynamic_add_media_raw(lua_State *L);
+ static int l_dynamic_add_media(lua_State *L);
// get_player_privs(name, text)
static int l_get_player_privs(lua_State *L);
@@ -94,8 +97,8 @@ private:
// unban_player_or_ip()
static int l_unban_player_or_ip(lua_State *L);
- // kick_player(name, [message]) -> success
- static int l_kick_player(lua_State *L);
+ // disconnect_player(name, [reason]) -> success
+ static int l_disconnect_player(lua_State *L);
// remove_player(name)
static int l_remove_player(lua_State *L);
@@ -103,12 +106,6 @@ 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);
-
public:
static void Initialize(lua_State *L, int top);
};
diff --git a/src/script/lua_api/l_settings.cpp b/src/script/lua_api/l_settings.cpp
index bcbaf15fa..14398dda2 100644
--- a/src/script/lua_api/l_settings.cpp
+++ b/src/script/lua_api/l_settings.cpp
@@ -20,18 +20,43 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "lua_api/l_settings.h"
#include "lua_api/l_internal.h"
#include "cpp_api/s_security.h"
+#include "threading/mutex_auto_lock.h"
#include "util/string.h" // FlagDesc
#include "settings.h"
#include "noise.h"
#include "log.h"
-#define SET_SECURITY_CHECK(L, name) \
- if (o->m_settings == g_settings && ScriptApiSecurity::isSecure(L) && \
- name.compare(0, 7, "secure.") == 0) { \
- throw LuaError("Attempt to set secure setting."); \
+/* This protects:
+ * 'secure.*' settings from being set
+ * some mapgen settings from being set
+ * (not security-criticial, just to avoid messing up user configs)
+ */
+#define CHECK_SETTING_SECURITY(L, name) \
+ if (o->m_settings == g_settings) { \
+ if (checkSettingSecurity(L, name) == -1) \
+ return 0; \
}
+static inline int checkSettingSecurity(lua_State* L, const std::string &name)
+{
+ if (ScriptApiSecurity::isSecure(L) && name.compare(0, 7, "secure.") == 0)
+ throw LuaError("Attempt to set secure setting.");
+
+ bool is_mainmenu = false;
+#ifndef SERVER
+ is_mainmenu = ModApiBase::getGuiEngine(L) != nullptr;
+#endif
+ if (!is_mainmenu && (name == "mg_name" || name == "mg_flags")) {
+ errorstream << "Tried to set global setting " << name << ", ignoring. "
+ "minetest.set_mapgen_setting() should be used instead." << std::endl;
+ infostream << script_get_backtrace(L) << std::endl;
+ return -1;
+ }
+
+ return 0;
+}
+
LuaSettings::LuaSettings(Settings *settings, const std::string &filename) :
m_settings(settings),
m_filename(filename)
@@ -129,6 +154,7 @@ int LuaSettings::l_get_np_group(lua_State *L)
return 1;
}
+// get_flags(self, key) -> table or nil
int LuaSettings::l_get_flags(lua_State *L)
{
NO_MAP_LOCK_REQUIRED;
@@ -161,7 +187,7 @@ int LuaSettings::l_set(lua_State* L)
std::string key = std::string(luaL_checkstring(L, 2));
const char* value = luaL_checkstring(L, 3);
- SET_SECURITY_CHECK(L, key);
+ CHECK_SETTING_SECURITY(L, key);
if (!o->m_settings->set(key, value))
throw LuaError("Invalid sequence found in setting parameters");
@@ -178,14 +204,14 @@ int LuaSettings::l_set_bool(lua_State* L)
std::string key = std::string(luaL_checkstring(L, 2));
bool value = readParam<bool>(L, 3);
- SET_SECURITY_CHECK(L, key);
+ CHECK_SETTING_SECURITY(L, key);
o->m_settings->setBool(key, value);
- return 1;
+ return 0;
}
-// set(self, key, value)
+// set_np_group(self, key, value)
int LuaSettings::l_set_np_group(lua_State *L)
{
NO_MAP_LOCK_REQUIRED;
@@ -195,7 +221,7 @@ int LuaSettings::l_set_np_group(lua_State *L)
NoiseParams value;
read_noiseparams(L, 3, &value);
- SET_SECURITY_CHECK(L, key);
+ CHECK_SETTING_SECURITY(L, key);
o->m_settings->setNoiseParams(key, value);
@@ -210,7 +236,7 @@ int LuaSettings::l_remove(lua_State* L)
std::string key = std::string(luaL_checkstring(L, 2));
- SET_SECURITY_CHECK(L, key);
+ CHECK_SETTING_SECURITY(L, key);
bool success = o->m_settings->remove(key);
lua_pushboolean(L, success);
@@ -253,20 +279,36 @@ int LuaSettings::l_write(lua_State* L)
return 1;
}
-// to_table(self) -> {[key1]=value1,...}
-int LuaSettings::l_to_table(lua_State* L)
+static void push_settings_table(lua_State *L, const Settings *settings)
{
- NO_MAP_LOCK_REQUIRED;
- LuaSettings* o = checkobject(L, 1);
-
- std::vector<std::string> keys = o->m_settings->getNames();
-
+ std::vector<std::string> keys = settings->getNames();
lua_newtable(L);
for (const std::string &key : keys) {
- lua_pushstring(L, o->m_settings->get(key).c_str());
+ std::string value;
+ Settings *group = nullptr;
+
+ if (settings->getNoEx(key, value)) {
+ lua_pushstring(L, value.c_str());
+ } else if (settings->getGroupNoEx(key, group)) {
+ // Recursively push tables
+ push_settings_table(L, group);
+ } else {
+ // Impossible case (multithreading) due to MutexAutoLock
+ continue;
+ }
+
lua_setfield(L, -2, key.c_str());
}
+}
+
+// to_table(self) -> {[key1]=value1,...}
+int LuaSettings::l_to_table(lua_State* L)
+{
+ NO_MAP_LOCK_REQUIRED;
+ LuaSettings* o = checkobject(L, 1);
+ MutexAutoLock(o->m_settings->m_mutex);
+ push_settings_table(L, o->m_settings);
return 1;
}
@@ -292,7 +334,7 @@ void LuaSettings::Register(lua_State* L)
lua_pop(L, 1); // drop metatable
- luaL_openlib(L, 0, methods, 0); // fill methodtable
+ luaL_register(L, nullptr, methods); // fill methodtable
lua_pop(L, 1); // drop methodtable
// Can be created from Lua (Settings(filename))
diff --git a/src/script/lua_api/l_storage.cpp b/src/script/lua_api/l_storage.cpp
index cba34fb63..b8f4347a8 100644
--- a/src/script/lua_api/l_storage.cpp
+++ b/src/script/lua_api/l_storage.cpp
@@ -32,19 +32,23 @@ int ModApiStorage::l_get_mod_storage(lua_State *L)
std::string mod_name = readParam<std::string>(L, -1);
- ModMetadata *store = new ModMetadata(mod_name);
+ ModMetadata *store = nullptr;
+
if (IGameDef *gamedef = getGameDef(L)) {
- store->load(gamedef->getModStoragePath());
- gamedef->registerModStorage(store);
+ store = new ModMetadata(mod_name, gamedef->getModStorageDatabase());
+ if (gamedef->registerModStorage(store)) {
+ StorageRef::create(L, store);
+ int object = lua_gettop(L);
+ lua_pushvalue(L, object);
+ return 1;
+ }
} else {
- delete store;
assert(false); // this should not happen
}
- StorageRef::create(L, store);
- int object = lua_gettop(L);
+ delete store;
- lua_pushvalue(L, object);
+ lua_pushnil(L);
return 1;
}
@@ -110,7 +114,7 @@ void StorageRef::Register(lua_State *L)
lua_pop(L, 1); // drop metatable
- luaL_openlib(L, 0, methods, 0); // fill methodtable
+ luaL_register(L, nullptr, methods); // fill methodtable
lua_pop(L, 1); // drop methodtable
}
diff --git a/src/script/lua_api/l_util.cpp b/src/script/lua_api/l_util.cpp
index 203a0dd28..b04f26fda 100644
--- a/src/script/lua_api/l_util.cpp
+++ b/src/script/lua_api/l_util.cpp
@@ -17,6 +17,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
+#include "irrlichttypes_extrabloated.h"
#include "lua_api/l_util.h"
#include "lua_api/l_internal.h"
#include "lua_api/l_settings.h"
@@ -39,8 +40,8 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "version.h"
#include "util/hex.h"
#include "util/sha1.h"
-#include <algorithm>
-
+#include "util/png.h"
+#include <cstdio>
// log([level,] text)
// Writes a line to the logger.
@@ -158,28 +159,33 @@ int ModApiUtil::l_write_json(lua_State *L)
return 1;
}
-// get_dig_params(groups, tool_capabilities)
+// get_dig_params(groups, tool_capabilities[, wear])
int ModApiUtil::l_get_dig_params(lua_State *L)
{
NO_MAP_LOCK_REQUIRED;
ItemGroupList groups;
read_groups(L, 1, groups);
ToolCapabilities tp = read_tool_capabilities(L, 2);
- push_dig_params(L, getDigParams(groups, &tp));
+ if (lua_isnoneornil(L, 3)) {
+ push_dig_params(L, getDigParams(groups, &tp));
+ } else {
+ u16 wear = readParam<int>(L, 3);
+ push_dig_params(L, getDigParams(groups, &tp, wear));
+ }
return 1;
}
-// get_hit_params(groups, tool_capabilities[, time_from_last_punch])
+// get_hit_params(groups, tool_capabilities[, time_from_last_punch, [, wear]])
int ModApiUtil::l_get_hit_params(lua_State *L)
{
NO_MAP_LOCK_REQUIRED;
std::unordered_map<std::string, int> groups;
read_groups(L, 1, groups);
ToolCapabilities tp = read_tool_capabilities(L, 2);
- if(lua_isnoneornil(L, 3))
- push_hit_params(L, getHitParams(groups, &tp));
- else
- push_hit_params(L, getHitParams(groups, &tp, readParam<float>(L, 3)));
+ float time_from_last_punch = readParam<float>(L, 3, 1000000);
+ int wear = readParam<int>(L, 4, 0);
+ push_hit_params(L, getHitParams(groups, &tp,
+ time_from_last_punch, wear));
return 1;
}
@@ -270,11 +276,11 @@ int ModApiUtil::l_compress(lua_State *L)
const char *data = luaL_checklstring(L, 1, &size);
int level = -1;
- if (!lua_isnone(L, 3) && !lua_isnil(L, 3))
- level = readParam<float>(L, 3);
+ if (!lua_isnoneornil(L, 3))
+ level = readParam<int>(L, 3);
- std::ostringstream os;
- compressZlib(std::string(data, size), os, level);
+ std::ostringstream os(std::ios_base::binary);
+ compressZlib(reinterpret_cast<const u8 *>(data), size, os, level);
std::string out = os.str();
@@ -290,8 +296,8 @@ int ModApiUtil::l_decompress(lua_State *L)
size_t size;
const char *data = luaL_checklstring(L, 1, &size);
- std::istringstream is(std::string(data, size));
- std::ostringstream os;
+ std::istringstream is(std::string(data, size), std::ios_base::binary);
+ std::ostringstream os(std::ios_base::binary);
decompressZlib(is, os);
std::string out = os.str();
@@ -342,6 +348,49 @@ int ModApiUtil::l_mkdir(lua_State *L)
return 1;
}
+// rmdir(path, recursive)
+int ModApiUtil::l_rmdir(lua_State *L)
+{
+ NO_MAP_LOCK_REQUIRED;
+ const char *path = luaL_checkstring(L, 1);
+ CHECK_SECURE_PATH(L, path, true);
+
+ bool recursive = readParam<bool>(L, 2, false);
+
+ if (recursive)
+ lua_pushboolean(L, fs::RecursiveDelete(path));
+ else
+ lua_pushboolean(L, fs::DeleteSingleFileOrEmptyDirectory(path));
+
+ return 1;
+}
+
+// cpdir(source, destination)
+int ModApiUtil::l_cpdir(lua_State *L)
+{
+ NO_MAP_LOCK_REQUIRED;
+ const char *source = luaL_checkstring(L, 1);
+ const char *destination = luaL_checkstring(L, 2);
+ CHECK_SECURE_PATH(L, source, false);
+ CHECK_SECURE_PATH(L, destination, true);
+
+ lua_pushboolean(L, fs::CopyDir(source, destination));
+ return 1;
+}
+
+// mpdir(source, destination)
+int ModApiUtil::l_mvdir(lua_State *L)
+{
+ NO_MAP_LOCK_REQUIRED;
+ const char *source = luaL_checkstring(L, 1);
+ const char *destination = luaL_checkstring(L, 2);
+ CHECK_SECURE_PATH(L, source, true);
+ CHECK_SECURE_PATH(L, destination, true);
+
+ lua_pushboolean(L, fs::MoveDir(source, destination));
+ return 1;
+}
+
// get_dir_list(path, is_dir)
int ModApiUtil::l_get_dir_list(lua_State *L)
{
@@ -394,36 +443,7 @@ int ModApiUtil::l_request_insecure_environment(lua_State *L)
return 1;
}
- // We have to make sure that this function is being called directly by
- // a mod, otherwise a malicious mod could override this function and
- // steal its return value.
- lua_Debug info;
- // Make sure there's only one item below this function on the stack...
- if (lua_getstack(L, 2, &info)) {
- return 0;
- }
- FATAL_ERROR_IF(!lua_getstack(L, 1, &info), "lua_getstack() failed");
- FATAL_ERROR_IF(!lua_getinfo(L, "S", &info), "lua_getinfo() failed");
- // ...and that that item is the main file scope.
- if (strcmp(info.what, "main") != 0) {
- return 0;
- }
-
- // Get mod name
- lua_rawgeti(L, LUA_REGISTRYINDEX, CUSTOM_RIDX_CURRENT_MOD_NAME);
- if (!lua_isstring(L, -1)) {
- return 0;
- }
-
- // Check secure.trusted_mods
- std::string mod_name = readParam<std::string>(L, -1);
- std::string trusted_mods = g_settings->get("secure.trusted_mods");
- trusted_mods.erase(std::remove_if(trusted_mods.begin(),
- trusted_mods.end(), static_cast<int(*)(int)>(&std::isspace)),
- trusted_mods.end());
- std::vector<std::string> mod_list = str_split(trusted_mods, ',');
- if (std::find(mod_list.begin(), mod_list.end(), mod_name) ==
- mod_list.end()) {
+ if (!ScriptApiSecurity::checkWhitelisted(L, "secure.trusted_mods")) {
return 0;
}
@@ -479,6 +499,84 @@ int ModApiUtil::l_sha1(lua_State *L)
return 1;
}
+// colorspec_to_colorstring(colorspec)
+int ModApiUtil::l_colorspec_to_colorstring(lua_State *L)
+{
+ NO_MAP_LOCK_REQUIRED;
+
+ video::SColor color(0);
+ if (read_color(L, 1, &color)) {
+ char colorstring[10];
+ snprintf(colorstring, 10, "#%02X%02X%02X%02X",
+ color.getRed(), color.getGreen(), color.getBlue(), color.getAlpha());
+ lua_pushstring(L, colorstring);
+ return 1;
+ }
+
+ return 0;
+}
+
+// colorspec_to_bytes(colorspec)
+int ModApiUtil::l_colorspec_to_bytes(lua_State *L)
+{
+ NO_MAP_LOCK_REQUIRED;
+
+ video::SColor color(0);
+ if (read_color(L, 1, &color)) {
+ u8 colorbytes[4] = {
+ (u8) color.getRed(),
+ (u8) color.getGreen(),
+ (u8) color.getBlue(),
+ (u8) color.getAlpha(),
+ };
+ lua_pushlstring(L, (const char*) colorbytes, 4);
+ return 1;
+ }
+
+ return 0;
+}
+
+// encode_png(w, h, data, level)
+int ModApiUtil::l_encode_png(lua_State *L)
+{
+ NO_MAP_LOCK_REQUIRED;
+
+ // The args are already pre-validated on the lua side.
+ u32 width = readParam<int>(L, 1);
+ u32 height = readParam<int>(L, 2);
+ const char *data = luaL_checklstring(L, 3, NULL);
+ s32 compression = readParam<int>(L, 4);
+
+ std::string out = encodePNG((const u8*)data, width, height, compression);
+
+ lua_pushlstring(L, out.data(), out.size());
+ return 1;
+}
+
+// get_last_run_mod()
+int ModApiUtil::l_get_last_run_mod(lua_State *L)
+{
+ NO_MAP_LOCK_REQUIRED;
+
+ lua_rawgeti(L, LUA_REGISTRYINDEX, CUSTOM_RIDX_CURRENT_MOD_NAME);
+ std::string current_mod = readParam<std::string>(L, -1, "");
+ if (current_mod.empty()) {
+ lua_pop(L, 1);
+ lua_pushstring(L, getScriptApiBase(L)->getOrigin().c_str());
+ }
+ return 1;
+}
+
+// set_last_run_mod(modname)
+int ModApiUtil::l_set_last_run_mod(lua_State *L)
+{
+ NO_MAP_LOCK_REQUIRED;
+
+ const char *mod = luaL_checkstring(L, 1);
+ getScriptApiBase(L)->setOriginDirect(mod);
+ return 0;
+}
+
void ModApiUtil::Initialize(lua_State *L, int top)
{
API_FCT(log);
@@ -503,6 +601,9 @@ void ModApiUtil::Initialize(lua_State *L, int top)
API_FCT(decompress);
API_FCT(mkdir);
+ API_FCT(rmdir);
+ API_FCT(cpdir);
+ API_FCT(mvdir);
API_FCT(get_dir_list);
API_FCT(safe_file_write);
@@ -513,6 +614,13 @@ void ModApiUtil::Initialize(lua_State *L, int top)
API_FCT(get_version);
API_FCT(sha1);
+ API_FCT(colorspec_to_colorstring);
+ API_FCT(colorspec_to_bytes);
+
+ API_FCT(encode_png);
+
+ API_FCT(get_last_run_mod);
+ API_FCT(set_last_run_mod);
LuaSettings::create(L, g_settings, g_settings_path);
lua_setfield(L, top, "settings");
@@ -537,6 +645,8 @@ void ModApiUtil::InitializeClient(lua_State *L, int top)
API_FCT(get_version);
API_FCT(sha1);
+ API_FCT(colorspec_to_colorstring);
+ API_FCT(colorspec_to_bytes);
}
void ModApiUtil::InitializeAsync(lua_State *L, int top)
@@ -557,6 +667,9 @@ void ModApiUtil::InitializeAsync(lua_State *L, int top)
API_FCT(decompress);
API_FCT(mkdir);
+ API_FCT(rmdir);
+ API_FCT(cpdir);
+ API_FCT(mvdir);
API_FCT(get_dir_list);
API_FCT(encode_base64);
@@ -564,8 +677,12 @@ void ModApiUtil::InitializeAsync(lua_State *L, int top)
API_FCT(get_version);
API_FCT(sha1);
+ API_FCT(colorspec_to_colorstring);
+ API_FCT(colorspec_to_bytes);
+
+ API_FCT(get_last_run_mod);
+ API_FCT(set_last_run_mod);
LuaSettings::create(L, g_settings, g_settings_path);
lua_setfield(L, top, "settings");
}
-
diff --git a/src/script/lua_api/l_util.h b/src/script/lua_api/l_util.h
index dbdd62b99..fcf8a1057 100644
--- a/src/script/lua_api/l_util.h
+++ b/src/script/lua_api/l_util.h
@@ -50,10 +50,10 @@ private:
// write_json(data[, styled])
static int l_write_json(lua_State *L);
- // get_dig_params(groups, tool_capabilities[, time_from_last_punch])
+ // get_dig_params(groups, tool_capabilities[, wear])
static int l_get_dig_params(lua_State *L);
- // get_hit_params(groups, tool_capabilities[, time_from_last_punch])
+ // get_hit_params(groups, tool_capabilities[, time_from_last_punch[, wear]])
static int l_get_hit_params(lua_State *L);
// check_password_entry(name, entry, password)
@@ -80,6 +80,15 @@ private:
// mkdir(path)
static int l_mkdir(lua_State *L);
+ // rmdir(path, recursive)
+ static int l_rmdir(lua_State *L);
+
+ // cpdir(source, destination, remove_source)
+ static int l_cpdir(lua_State *L);
+
+ // mvdir(source, destination)
+ static int l_mvdir(lua_State *L);
+
// get_dir_list(path, is_dir)
static int l_get_dir_list(lua_State *L);
@@ -101,6 +110,21 @@ private:
// sha1(string, raw)
static int l_sha1(lua_State *L);
+ // colorspec_to_colorstring(colorspec)
+ static int l_colorspec_to_colorstring(lua_State *L);
+
+ // colorspec_to_bytes(colorspec)
+ static int l_colorspec_to_bytes(lua_State *L);
+
+ // encode_png(w, h, data, level)
+ static int l_encode_png(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);
+
public:
static void Initialize(lua_State *L, int top);
static void InitializeAsync(lua_State *L, int top);
diff --git a/src/script/lua_api/l_vmanip.cpp b/src/script/lua_api/l_vmanip.cpp
index b99b1d98c..e040e545b 100644
--- a/src/script/lua_api/l_vmanip.cpp
+++ b/src/script/lua_api/l_vmanip.cpp
@@ -450,7 +450,7 @@ void LuaVoxelManip::Register(lua_State *L)
lua_pop(L, 1); // drop metatable
- luaL_openlib(L, 0, methods, 0); // fill methodtable
+ luaL_register(L, nullptr, methods); // fill methodtable
lua_pop(L, 1); // drop methodtable
// Can be created from Lua (VoxelManip())
diff --git a/src/script/scripting_mainmenu.cpp b/src/script/scripting_mainmenu.cpp
index b102a66a1..2a0cadb23 100644
--- a/src/script/scripting_mainmenu.cpp
+++ b/src/script/scripting_mainmenu.cpp
@@ -92,9 +92,9 @@ void MainMenuScripting::step()
}
/******************************************************************************/
-unsigned int MainMenuScripting::queueAsync(const std::string &serialized_func,
- const std::string &serialized_param)
+u32 MainMenuScripting::queueAsync(std::string &&serialized_func,
+ std::string &&serialized_param)
{
- return asyncEngine.queueAsyncJob(serialized_func, serialized_param);
+ return asyncEngine.queueAsyncJob(std::move(serialized_func), std::move(serialized_param));
}
diff --git a/src/script/scripting_mainmenu.h b/src/script/scripting_mainmenu.h
index 9e23bdc1b..3c329654a 100644
--- a/src/script/scripting_mainmenu.h
+++ b/src/script/scripting_mainmenu.h
@@ -38,8 +38,9 @@ public:
void step();
// Pass async events from engine to async threads
- unsigned int queueAsync(const std::string &serialized_func,
- const std::string &serialized_params);
+ u32 queueAsync(std::string &&serialized_func,
+ std::string &&serialized_param);
+
private:
void initializeModApi(lua_State *L, int top);
static void registerLuaClasses(lua_State *L, int top);
diff --git a/src/serialization.cpp b/src/serialization.cpp
index 310604f54..d4d7b5f6e 100644
--- a/src/serialization.cpp
+++ b/src/serialization.cpp
@@ -21,7 +21,8 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "util/serialize.h"
-#include "zlib.h"
+#include <zlib.h>
+#include <zstd.h>
/* report a zlib or i/o error */
void zerr(int ret)
@@ -197,27 +198,158 @@ void decompressZlib(std::istream &is, std::ostream &os, size_t limit)
inflateEnd(&z);
}
-void compress(const SharedBuffer<u8> &data, std::ostream &os, u8 version)
+struct ZSTD_Deleter {
+ void operator() (ZSTD_CStream* cstream) {
+ ZSTD_freeCStream(cstream);
+ }
+
+ void operator() (ZSTD_DStream* dstream) {
+ ZSTD_freeDStream(dstream);
+ }
+};
+
+#if defined(__MINGW32__) && !defined(__MINGW64__)
+/*
+ * This is exactly as dumb as it looks.
+ * Yes, this is a memory leak. No, we don't have better solution right now.
+ */
+template<typename T> class leaky_ptr
+{
+ T *value;
+public:
+ leaky_ptr(T *value) : value(value) {};
+ T *get() { return value; }
+};
+#endif
+
+void compressZstd(const u8 *data, size_t data_size, std::ostream &os, int level)
+{
+#if defined(__MINGW32__) && !defined(__MINGW64__)
+ // leaks one context per thread but doesn't crash :shrug:
+ thread_local leaky_ptr<ZSTD_CStream> stream(ZSTD_createCStream());
+#else
+ // reusing the context is recommended for performance
+ // it will destroyed when the thread ends
+ thread_local std::unique_ptr<ZSTD_CStream, ZSTD_Deleter> stream(ZSTD_createCStream());
+#endif
+
+
+ ZSTD_initCStream(stream.get(), level);
+
+ const size_t bufsize = 16384;
+ char output_buffer[bufsize];
+
+ ZSTD_inBuffer input = { data, data_size, 0 };
+ ZSTD_outBuffer output = { output_buffer, bufsize, 0 };
+
+ while (input.pos < input.size) {
+ size_t ret = ZSTD_compressStream(stream.get(), &output, &input);
+ if (ZSTD_isError(ret)) {
+ dstream << ZSTD_getErrorName(ret) << std::endl;
+ throw SerializationError("compressZstd: failed");
+ }
+ if (output.pos) {
+ os.write(output_buffer, output.pos);
+ output.pos = 0;
+ }
+ }
+
+ size_t ret;
+ do {
+ ret = ZSTD_endStream(stream.get(), &output);
+ if (ZSTD_isError(ret)) {
+ dstream << ZSTD_getErrorName(ret) << std::endl;
+ throw SerializationError("compressZstd: failed");
+ }
+ if (output.pos) {
+ os.write(output_buffer, output.pos);
+ output.pos = 0;
+ }
+ } while (ret != 0);
+
+}
+
+void compressZstd(const std::string &data, std::ostream &os, int level)
+{
+ compressZstd((u8*)data.c_str(), data.size(), os, level);
+}
+
+void decompressZstd(std::istream &is, std::ostream &os)
+{
+#if defined(__MINGW32__) && !defined(__MINGW64__)
+ // leaks one context per thread but doesn't crash :shrug:
+ thread_local leaky_ptr<ZSTD_DStream> stream(ZSTD_createDStream());
+#else
+ // reusing the context is recommended for performance
+ // it will destroyed when the thread ends
+ thread_local std::unique_ptr<ZSTD_DStream, ZSTD_Deleter> stream(ZSTD_createDStream());
+#endif
+
+ ZSTD_initDStream(stream.get());
+
+ const size_t bufsize = 16384;
+ char output_buffer[bufsize];
+ char input_buffer[bufsize];
+
+ ZSTD_outBuffer output = { output_buffer, bufsize, 0 };
+ ZSTD_inBuffer input = { input_buffer, 0, 0 };
+ size_t ret;
+ do
+ {
+ if (input.size == input.pos) {
+ is.read(input_buffer, bufsize);
+ input.size = is.gcount();
+ input.pos = 0;
+ }
+
+ ret = ZSTD_decompressStream(stream.get(), &output, &input);
+ if (ZSTD_isError(ret)) {
+ dstream << ZSTD_getErrorName(ret) << std::endl;
+ throw SerializationError("decompressZstd: failed");
+ }
+ if (output.pos) {
+ os.write(output_buffer, output.pos);
+ output.pos = 0;
+ }
+ } while (ret != 0);
+
+ // Unget all the data that ZSTD_decompressStream didn't take
+ is.clear(); // Just in case EOF is set
+ for (u32 i = 0; i < input.size - input.pos; i++) {
+ is.unget();
+ if (is.fail() || is.bad())
+ throw SerializationError("decompressZstd: unget failed");
+ }
+}
+
+void compress(u8 *data, u32 size, std::ostream &os, u8 version, int level)
{
+ if(version >= 29)
+ {
+ // map the zlib levels [0,9] to [1,10]. -1 becomes 0 which indicates the default (currently 3)
+ compressZstd(data, size, os, level + 1);
+ return;
+ }
+
if(version >= 11)
{
- compressZlib(*data ,data.getSize(), os);
+ compressZlib(data, size, os, level);
return;
}
- if(data.getSize() == 0)
+ if(size == 0)
return;
// Write length (u32)
u8 tmp[4];
- writeU32(tmp, data.getSize());
+ writeU32(tmp, size);
os.write((char*)tmp, 4);
// We will be writing 8-bit pairs of more_count and byte
u8 more_count = 0;
u8 current_byte = data[0];
- for(u32 i=1; i<data.getSize(); i++)
+ for(u32 i=1; i<size; i++)
{
if(
data[i] != current_byte
@@ -240,8 +372,24 @@ void compress(const SharedBuffer<u8> &data, std::ostream &os, u8 version)
os.write((char*)&current_byte, 1);
}
+void compress(const SharedBuffer<u8> &data, std::ostream &os, u8 version, int level)
+{
+ compress(*data, data.getSize(), os, version, level);
+}
+
+void compress(const std::string &data, std::ostream &os, u8 version, int level)
+{
+ compress((u8*)data.c_str(), data.size(), os, version, level);
+}
+
void decompress(std::istream &is, std::ostream &os, u8 version)
{
+ if(version >= 29)
+ {
+ decompressZstd(is, os);
+ return;
+ }
+
if(version >= 11)
{
decompressZlib(is, os);
diff --git a/src/serialization.h b/src/serialization.h
index f399983c4..e83a8c179 100644
--- a/src/serialization.h
+++ b/src/serialization.h
@@ -63,13 +63,14 @@ with this program; if not, write to the Free Software Foundation, Inc.,
26: Never written; read the same as 25
27: Added light spreading flags to blocks
28: Added "private" flag to NodeMetadata
+ 29: Switched compression to zstd, a bit of reorganization
*/
// This represents an uninitialized or invalid format
#define SER_FMT_VER_INVALID 255
// Highest supported serialization version
-#define SER_FMT_VER_HIGHEST_READ 28
+#define SER_FMT_VER_HIGHEST_READ 29
// Saved on disk version
-#define SER_FMT_VER_HIGHEST_WRITE 28
+#define SER_FMT_VER_HIGHEST_WRITE 29
// Lowest supported serialization version
#define SER_FMT_VER_LOWEST_READ 0
// Lowest serialization version for writing
@@ -89,7 +90,12 @@ void compressZlib(const u8 *data, size_t data_size, std::ostream &os, int level
void compressZlib(const std::string &data, std::ostream &os, int level = -1);
void decompressZlib(std::istream &is, std::ostream &os, size_t limit = 0);
+void compressZstd(const u8 *data, size_t data_size, std::ostream &os, int level = 0);
+void compressZstd(const std::string &data, std::ostream &os, int level = 0);
+void decompressZstd(std::istream &is, std::ostream &os);
+
// These choose between zlib and a self-made one according to version
-void compress(const SharedBuffer<u8> &data, std::ostream &os, u8 version);
-//void compress(const std::string &data, std::ostream &os, u8 version);
+void compress(const SharedBuffer<u8> &data, std::ostream &os, u8 version, int level = -1);
+void compress(const std::string &data, std::ostream &os, u8 version, int level = -1);
+void compress(u8 *data, u32 size, std::ostream &os, u8 version, int level = -1);
void decompress(std::istream &is, std::ostream &os, u8 version);
diff --git a/src/server.cpp b/src/server.cpp
index 81cdd1f8d..23a7dc5a0 100644
--- a/src/server.cpp
+++ b/src/server.cpp
@@ -66,6 +66,10 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "server/player_sao.h"
#include "server/serverinventorymgr.h"
#include "translation.h"
+#include "database/database-sqlite3.h"
+#include "database/database-files.h"
+#include "database/database-dummy.h"
+#include "gameparams.h"
class ClientNotFoundException : public BaseException
{
@@ -103,7 +107,13 @@ void *ServerThread::run()
* doesn't busy wait) and will process any remaining packets.
*/
- m_server->AsyncRunStep(true);
+ try {
+ m_server->AsyncRunStep(true);
+ } catch (con::ConnectionBindFailed &e) {
+ m_server->setAsyncFatalError(e.what());
+ } catch (LuaError &e) {
+ m_server->setAsyncFatalError(e);
+ }
while (!stopRequested()) {
try {
@@ -117,8 +127,7 @@ void *ServerThread::run()
} catch (con::ConnectionBindFailed &e) {
m_server->setAsyncFatalError(e.what());
} catch (LuaError &e) {
- m_server->setAsyncFatalError(
- "ServerThread::run Lua: " + std::string(e.what()));
+ m_server->setAsyncFatalError(e);
}
}
@@ -339,10 +348,15 @@ Server::~Server()
delete m_thread;
}
+ // Write any changes before deletion.
+ if (m_mod_storage_database)
+ m_mod_storage_database->endSave();
+
// Delete things in the reverse order of creation
delete m_emerge;
delete m_env;
delete m_rollback;
+ delete m_mod_storage_database;
delete m_banmanager;
delete m_itemdef;
delete m_nodedef;
@@ -388,6 +402,10 @@ void Server::init()
std::string ban_path = m_path_world + DIR_DELIM "ipban.txt";
m_banmanager = new BanManager(ban_path);
+ // Create mod storage database and begin a save for later
+ m_mod_storage_database = openModStorageDatabase(m_path_world);
+ m_mod_storage_database->beginSave();
+
m_modmgr = std::unique_ptr<ServerModManager>(new ServerModManager(m_path_world));
std::vector<ModSpec> unsatisfied_mods = m_modmgr->getUnsatisfiedMods();
// complain about mods with unsatisfied dependencies
@@ -494,16 +512,17 @@ void Server::start()
// ASCII art for the win!
std::cerr
- << " .__ __ __ " << std::endl
- << " _____ |__| ____ _____/ |_ ____ _______/ |_ " << std::endl
- << " / \\| |/ \\_/ __ \\ __\\/ __ \\ / ___/\\ __\\" << std::endl
- << "| Y Y \\ | | \\ ___/| | \\ ___/ \\___ \\ | | " << std::endl
- << "|__|_| /__|___| /\\___ >__| \\___ >____ > |__| " << std::endl
- << " \\/ \\/ \\/ \\/ \\/ " << std::endl;
+ << " __. __. __. " << std::endl
+ << " _____ |__| ____ _____ / |_ _____ _____ / |_ " << std::endl
+ << " / \\| |/ \\ / __ \\ _\\/ __ \\/ __> _\\" << std::endl
+ << "| Y Y \\ | | \\ ___/| | | ___/\\___ \\| | " << std::endl
+ << "|__|_| / |___| /\\______> | \\______>_____/| | " << std::endl
+ << " \\/ \\/ \\/ \\/ \\/ " << std::endl;
actionstream << "World at [" << m_path_world << "]" << std::endl;
actionstream << "Server for gameid=\"" << m_gamespec.id
- << "\" listening on " << m_bind_addr.serializeString() << ":"
- << m_bind_addr.getPort() << "." << std::endl;
+ << "\" listening on ";
+ m_bind_addr.print(&actionstream);
+ actionstream << "." << std::endl;
}
void Server::stop()
@@ -512,9 +531,7 @@ void Server::stop()
// Stop threads (set run=false first so both start stopping)
m_thread->stop();
- //m_emergethread.setRun(false);
m_thread->wait();
- //m_emergethread.stop();
infostream<<"Server: Threads stopped"<<std::endl;
}
@@ -665,6 +682,17 @@ void Server::AsyncRunStep(bool initial_step)
} else {
m_lag_gauge->increment(dtime/100);
}
+
+ {
+ float &counter = m_step_pending_dyn_media_timer;
+ counter += dtime;
+ if (counter >= 5.0f) {
+ stepPendingDynMediaCallbacks(counter);
+ counter = 0;
+ }
+ }
+
+
#if USE_CURL
// send masterserver announce
{
@@ -718,20 +746,12 @@ void Server::AsyncRunStep(bool initial_step)
}
m_clients.unlock();
- // Save mod storages if modified
+ // Write changes to the mod storage
m_mod_storage_save_timer -= dtime;
if (m_mod_storage_save_timer <= 0.0f) {
m_mod_storage_save_timer = g_settings->getFloat("server_map_save_interval");
- int n = 0;
- for (std::unordered_map<std::string, ModMetadata *>::const_iterator
- it = m_mod_storages.begin(); it != m_mod_storages.end(); ++it) {
- if (it->second->isModified()) {
- it->second->save(getModStoragePath());
- n++;
- }
- }
- if (n > 0)
- infostream << "Saved " << n << " modified mod storages." << std::endl;
+ m_mod_storage_database->endSave();
+ m_mod_storage_database->beginSave();
}
}
@@ -938,14 +958,14 @@ void Server::AsyncRunStep(bool initial_step)
}
/*
- Trigger emergethread (it somehow gets to a non-triggered but
- bysy state sometimes)
+ Trigger emerge thread
+ Doing this every 2s is left over from old code, unclear if this is still needed.
*/
{
float &counter = m_emergethread_trigger_timer;
- counter += dtime;
- if (counter >= 2.0) {
- counter = 0.0;
+ counter -= dtime;
+ if (counter <= 0.0f) {
+ counter = 2.0f;
m_emerge->startThreads();
}
@@ -1075,12 +1095,12 @@ PlayerSAO* Server::StageTwoClientInit(session_t peer_id)
// Send inventory
SendInventory(playersao, false);
- // Send HP or death screen
+ // Send HP
+ SendPlayerHP(playersao);
+
+ // Send death screen
if (playersao->isDead())
SendDeathscreen(peer_id, false, v3f(0,0,0));
- else
- SendPlayerHPOrDie(playersao,
- PlayerHPChangeReason(PlayerHPChangeReason::SET_HP));
// Send Breath
SendPlayerBreath(playersao);
@@ -1346,18 +1366,21 @@ void Server::SendMovement(session_t peer_id)
Send(&pkt);
}
-void Server::SendPlayerHPOrDie(PlayerSAO *playersao, const PlayerHPChangeReason &reason)
+void Server::HandlePlayerHPChange(PlayerSAO *playersao, const PlayerHPChangeReason &reason)
{
- if (playersao->isImmortal())
- return;
+ m_script->player_event(playersao, "health_changed");
+ SendPlayerHP(playersao);
+
+ // Send to other clients
+ playersao->sendPunchCommand();
- session_t peer_id = playersao->getPeerID();
- bool is_alive = !playersao->isDead();
+ if (playersao->isDead())
+ HandlePlayerDeath(playersao, reason);
+}
- if (is_alive)
- SendPlayerHP(peer_id);
- else
- DiePlayer(peer_id, reason);
+void Server::SendPlayerHP(PlayerSAO *playersao)
+{
+ SendHP(playersao->getPeerID(), playersao->getHP());
}
void Server::SendHP(session_t peer_id, u16 hp)
@@ -1638,7 +1661,7 @@ void Server::SendHUDAdd(session_t peer_id, u32 id, HudElement *form)
pkt << id << (u8) form->type << form->pos << form->name << form->scale
<< form->text << form->number << form->item << form->dir
<< form->align << form->offset << form->world_pos << form->size
- << form->z_index << form->text2;
+ << form->z_index << form->text2 << form->style;
Send(&pkt);
}
@@ -1673,10 +1696,7 @@ void Server::SendHUDChange(session_t peer_id, u32 id, HudElementStat stat, void
case HUD_STAT_SIZE:
pkt << *(v2s32 *) value;
break;
- case HUD_STAT_NUMBER:
- case HUD_STAT_ITEM:
- case HUD_STAT_DIR:
- default:
+ default: // all other types
pkt << *(u32 *) value;
break;
}
@@ -1794,18 +1814,6 @@ void Server::SendTimeOfDay(session_t peer_id, u16 time, f32 time_speed)
}
}
-void Server::SendPlayerHP(session_t peer_id)
-{
- PlayerSAO *playersao = getPlayerSAO(peer_id);
- assert(playersao);
-
- SendHP(peer_id, playersao->getHP());
- m_script->player_event(playersao,"health_changed");
-
- // Send to other clients
- playersao->sendPunchCommand();
-}
-
void Server::SendPlayerBreath(PlayerSAO *sao)
{
assert(sao);
@@ -2313,7 +2321,7 @@ void Server::sendMetadataChanged(const std::list<v3s16> &meta_updates, float far
// Send the meta changes
std::ostringstream os(std::ios::binary);
- meta_updates_list.serialize(os, client->net_proto_version, false, true);
+ meta_updates_list.serialize(os, client->serialization_version, false, true, true);
std::ostringstream oss(std::ios::binary);
compressZlib(os.str(), oss);
@@ -2442,9 +2450,8 @@ bool Server::addMediaFile(const std::string &filename,
// If name is not in a supported format, ignore it
const char *supported_ext[] = {
".png", ".jpg", ".bmp", ".tga",
- ".pcx", ".ppm", ".psd", ".wal", ".rgb",
".ogg",
- ".x", ".b3d", ".md2", ".obj",
+ ".x", ".b3d", ".obj",
// Custom translation file format
".tr",
NULL
@@ -2496,7 +2503,9 @@ void Server::fillMediaCache()
// Collect all media file paths
std::vector<std::string> paths;
- // The paths are ordered in descending priority
+
+ // ordered in descending priority
+ paths.push_back(getBuiltinLuaPath() + DIR_DELIM + "locale");
fs::GetRecursiveDirs(paths, porting::path_user + DIR_DELIM + "textures" + DIR_DELIM + "server");
fs::GetRecursiveDirs(paths, m_gamespec.path + DIR_DELIM + "textures");
m_modmgr->getModsMediaPaths(paths);
@@ -2530,6 +2539,8 @@ void Server::sendMediaAnnouncement(session_t peer_id, const std::string &lang_co
std::string lang_suffix;
lang_suffix.append(".").append(lang_code).append(".tr");
for (const auto &i : m_media) {
+ if (i.second.no_announce)
+ continue;
if (str_ends_with(i.first, ".tr") && !str_ends_with(i.first, lang_suffix))
continue;
media_sent++;
@@ -2538,6 +2549,8 @@ void Server::sendMediaAnnouncement(session_t peer_id, const std::string &lang_co
pkt << media_sent;
for (const auto &i : m_media) {
+ if (i.second.no_announce)
+ continue;
if (str_ends_with(i.first, ".tr") && !str_ends_with(i.first, lang_suffix))
continue;
pkt << i.first << i.second.sha1_digest;
@@ -2556,11 +2569,9 @@ struct SendableMedia
std::string path;
std::string data;
- SendableMedia(const std::string &name_="", const std::string &path_="",
- const std::string &data_=""):
- name(name_),
- path(path_),
- data(data_)
+ SendableMedia(const std::string &name, const std::string &path,
+ std::string &&data):
+ name(name), path(path), data(std::move(data))
{}
};
@@ -2587,40 +2598,19 @@ void Server::sendRequestedMedia(session_t peer_id,
continue;
}
- //TODO get path + name
- std::string tpath = m_media[name].path;
+ const auto &m = m_media[name];
// Read data
- std::ifstream fis(tpath.c_str(), std::ios_base::binary);
- if(!fis.good()){
- errorstream<<"Server::sendRequestedMedia(): Could not open \""
- <<tpath<<"\" for reading"<<std::endl;
- continue;
- }
- std::ostringstream tmp_os(std::ios_base::binary);
- bool bad = false;
- for(;;) {
- char buf[1024];
- fis.read(buf, 1024);
- std::streamsize len = fis.gcount();
- tmp_os.write(buf, len);
- file_size_bunch_total += len;
- if(fis.eof())
- break;
- if(!fis.good()) {
- bad = true;
- break;
- }
- }
- if (bad) {
- errorstream<<"Server::sendRequestedMedia(): Failed to read \""
- <<name<<"\""<<std::endl;
+ std::string data;
+ if (!fs::ReadFile(m.path, data)) {
+ errorstream << "Server::sendRequestedMedia(): Failed to read \""
+ << name << "\"" << std::endl;
continue;
}
- /*infostream<<"Server::sendRequestedMedia(): Loaded \""
- <<tname<<"\""<<std::endl;*/
+ file_size_bunch_total += data.size();
+
// Put in list
- file_bunches[file_bunches.size()-1].emplace_back(name, tpath, tmp_os.str());
+ file_bunches.back().emplace_back(name, m.path, std::move(data));
// Start next bunch if got enough data
if(file_size_bunch_total >= bytes_per_bunch) {
@@ -2663,6 +2653,33 @@ void Server::sendRequestedMedia(session_t peer_id,
}
}
+void Server::stepPendingDynMediaCallbacks(float dtime)
+{
+ MutexAutoLock lock(m_env_mutex);
+
+ for (auto it = m_pending_dyn_media.begin(); it != m_pending_dyn_media.end();) {
+ it->second.expiry_timer -= dtime;
+ bool del = it->second.waiting_players.empty() || it->second.expiry_timer < 0;
+
+ if (!del) {
+ it++;
+ continue;
+ }
+
+ const auto &name = it->second.filename;
+ if (!name.empty()) {
+ assert(m_media.count(name));
+ // if no_announce isn't set we're definitely deleting the wrong file!
+ sanity_check(m_media[name].no_announce);
+
+ fs::DeleteSingleFileOrEmptyDirectory(m_media[name].path);
+ m_media.erase(name);
+ }
+ getScriptIface()->freeDynamicMediaCallback(it->first);
+ it = m_pending_dyn_media.erase(it);
+ }
+}
+
void Server::SendMinimapModes(session_t peer_id,
std::vector<MinimapMode> &modes, size_t wanted_mode)
{
@@ -2725,23 +2742,18 @@ void Server::sendDetachedInventories(session_t peer_id, bool incremental)
Something random
*/
-void Server::DiePlayer(session_t peer_id, const PlayerHPChangeReason &reason)
+void Server::HandlePlayerDeath(PlayerSAO *playersao, const PlayerHPChangeReason &reason)
{
- PlayerSAO *playersao = getPlayerSAO(peer_id);
- assert(playersao);
-
infostream << "Server::DiePlayer(): Player "
<< playersao->getPlayer()->getName()
<< " dies" << std::endl;
- playersao->setHP(0, reason);
playersao->clearParentAttachment();
// Trigger scripted stuff
m_script->on_dieplayer(playersao, reason);
- SendPlayerHP(peer_id);
- SendDeathscreen(peer_id, false, v3f(0,0,0));
+ SendDeathscreen(playersao->getPeerID(), false, v3f(0,0,0));
}
void Server::RespawnPlayer(session_t peer_id)
@@ -2762,8 +2774,6 @@ void Server::RespawnPlayer(session_t peer_id)
// setPos will send the new position to client
playersao->setPos(findSpawnPos());
}
-
- SendPlayerHP(peer_id);
}
@@ -2999,6 +3009,9 @@ std::wstring Server::handleChat(const std::string &name,
}
auto message = trim(wide_to_utf8(wmessage));
+ if (message.empty())
+ return L"";
+
if (message.find_first_of("\n\r") != std::wstring::npos) {
return L"Newlines are not permitted in chat messages";
}
@@ -3095,15 +3108,18 @@ std::string Server::getStatusString()
std::ostringstream os(std::ios_base::binary);
os << "# Server: ";
// Version
- os << "version=" << g_version_string;
+ os << "version: " << g_version_string;
+ // Game
+ os << " | game: " << (m_gamespec.name.empty() ? m_gamespec.id : m_gamespec.name);
// Uptime
- os << ", uptime=" << m_uptime_counter->get();
+ os << " | uptime: " << duration_to_string((int) m_uptime_counter->get());
// Max lag estimate
- os << ", max_lag=" << (m_env ? m_env->getMaxLagEstimate() : 0);
+ os << " | max lag: " << std::setprecision(3);
+ os << (m_env ? m_env->getMaxLagEstimate() : 0) << "s";
// Information about clients
bool first = true;
- os << ", clients={";
+ os << " | clients: ";
if (m_env) {
std::vector<session_t> clients = m_clients.getClientIDs();
for (session_t client_id : clients) {
@@ -3120,7 +3136,6 @@ std::string Server::getStatusString()
os << name;
}
}
- os << "}";
if (m_env && !((ServerMap*)(&m_env->getMap()))->isSavingEnabled())
os << std::endl << "# Server: " << " WARNING: Map saving is disabled.";
@@ -3457,14 +3472,18 @@ void Server::deleteParticleSpawner(const std::string &playername, u32 id)
SendDeleteParticleSpawner(peer_id, id);
}
-bool Server::dynamicAddMedia(const std::string &filepath,
- std::vector<RemotePlayer*> &sent_to)
+bool Server::dynamicAddMedia(std::string filepath,
+ const u32 token, const std::string &to_player, bool ephemeral)
{
std::string filename = fs::GetFilenameFromPath(filepath.c_str());
- if (m_media.find(filename) != m_media.end()) {
- errorstream << "Server::dynamicAddMedia(): file \"" << filename
- << "\" already exists in media cache" << std::endl;
- return false;
+ auto it = m_media.find(filename);
+ if (it != m_media.end()) {
+ // Allow the same path to be "added" again in certain conditions
+ if (ephemeral || it->second.path != filepath) {
+ errorstream << "Server::dynamicAddMedia(): file \"" << filename
+ << "\" already exists in media cache" << std::endl;
+ return false;
+ }
}
// Load the file and add it to our media cache
@@ -3473,35 +3492,105 @@ bool Server::dynamicAddMedia(const std::string &filepath,
if (!ok)
return false;
+ if (ephemeral) {
+ // Create a copy of the file and swap out the path, this removes the
+ // requirement that mods keep the file accessible at the original path.
+ filepath = fs::CreateTempFile();
+ bool ok = ([&] () -> bool {
+ if (filepath.empty())
+ return false;
+ std::ofstream os(filepath.c_str(), std::ios::binary);
+ if (!os.good())
+ return false;
+ os << filedata;
+ os.close();
+ return !os.fail();
+ })();
+ if (!ok) {
+ errorstream << "Server: failed to create a copy of media file "
+ << "\"" << filename << "\"" << std::endl;
+ m_media.erase(filename);
+ return false;
+ }
+ verbosestream << "Server: \"" << filename << "\" temporarily copied to "
+ << filepath << std::endl;
+
+ m_media[filename].path = filepath;
+ m_media[filename].no_announce = true;
+ // stepPendingDynMediaCallbacks will clean this up later.
+ } else if (!to_player.empty()) {
+ m_media[filename].no_announce = true;
+ }
+
// Push file to existing clients
NetworkPacket pkt(TOCLIENT_MEDIA_PUSH, 0);
- pkt << raw_hash << filename << (bool) true;
- pkt.putLongString(filedata);
+ pkt << raw_hash << filename << (bool)ephemeral;
+
+ NetworkPacket legacy_pkt = pkt;
+
+ // Newer clients get asked to fetch the file (asynchronous)
+ pkt << token;
+ // Older clients have an awful hack that just throws the data at them
+ legacy_pkt.putLongString(filedata);
+ std::unordered_set<session_t> delivered, waiting;
m_clients.lock();
for (auto &pair : m_clients.getClientList()) {
- if (pair.second->getState() < CS_DefinitionsSent)
+ if (pair.second->getState() == CS_DefinitionsSent && !ephemeral) {
+ /*
+ If a client is in the DefinitionsSent state it is too late to
+ transfer the file via sendMediaAnnouncement() but at the same
+ time the client cannot accept a media push yet.
+ Short of artificially delaying the joining process there is no
+ way for the server to resolve this so we (currently) opt not to.
+ */
+ warningstream << "The media \"" << filename << "\" (dynamic) could "
+ "not be delivered to " << pair.second->getName()
+ << " due to a race condition." << std::endl;
continue;
- if (pair.second->net_proto_version < 39)
+ }
+ if (pair.second->getState() < CS_Active)
continue;
- if (auto player = m_env->getPlayer(pair.second->peer_id))
- sent_to.emplace_back(player);
- /*
- FIXME: this is a very awful hack
- The network layer only guarantees ordered delivery inside a channel.
- Since the very next packet could be one that uses the media, we have
- to push the media over ALL channels to ensure it is processed before
- it is used.
- In practice this means we have to send it twice:
- - channel 1 (HUD)
- - channel 0 (everything else: e.g. play_sound, object messages)
- */
- m_clients.send(pair.second->peer_id, 1, &pkt, true);
- m_clients.send(pair.second->peer_id, 0, &pkt, true);
+ const auto proto_ver = pair.second->net_proto_version;
+ if (proto_ver < 39)
+ continue;
+
+ const session_t peer_id = pair.second->peer_id;
+ if (!to_player.empty() && getPlayerName(peer_id) != to_player)
+ continue;
+
+ if (proto_ver < 40) {
+ delivered.emplace(peer_id);
+ /*
+ The network layer only guarantees ordered delivery inside a channel.
+ Since the very next packet could be one that uses the media, we have
+ to push the media over ALL channels to ensure it is processed before
+ it is used. In practice this means channels 1 and 0.
+ */
+ m_clients.send(peer_id, 1, &legacy_pkt, true);
+ m_clients.send(peer_id, 0, &legacy_pkt, true);
+ } else {
+ waiting.emplace(peer_id);
+ Send(peer_id, &pkt);
+ }
}
m_clients.unlock();
+ // Run callback for players that already had the file delivered (legacy-only)
+ for (session_t peer_id : delivered) {
+ if (auto player = m_env->getPlayer(peer_id))
+ getScriptIface()->on_dynamic_media_added(token, player->getName());
+ }
+
+ // Save all others in our pending state
+ auto &state = m_pending_dyn_media[token];
+ state.waiting_players = std::move(waiting);
+ // regardless of success throw away the callback after a while
+ state.expiry_timer = 60.0f;
+ if (ephemeral)
+ state.filename = filename;
+
return true;
}
@@ -3606,11 +3695,6 @@ std::string Server::getBuiltinLuaPath()
return porting::path_share + DIR_DELIM + "builtin";
}
-std::string Server::getModStoragePath() const
-{
- return m_path_world + DIR_DELIM + "mod_storage";
-}
-
v3f Server::findSpawnPos()
{
ServerMap &map = m_env->getServerMap();
@@ -3774,11 +3858,8 @@ bool Server::registerModStorage(ModMetadata *storage)
void Server::unregisterModStorage(const std::string &name)
{
std::unordered_map<std::string, ModMetadata *>::const_iterator it = m_mod_storages.find(name);
- if (it != m_mod_storages.end()) {
- // Save unconditionaly on unregistration
- it->second->save(getModStoragePath());
+ if (it != m_mod_storages.end())
m_mod_storages.erase(name);
- }
}
void dedicated_server_loop(Server &server, bool &kill)
@@ -3916,3 +3997,106 @@ Translations *Server::getTranslationLanguage(const std::string &lang_code)
return translations;
}
+
+ModMetadataDatabase *Server::openModStorageDatabase(const std::string &world_path)
+{
+ std::string world_mt_path = world_path + DIR_DELIM + "world.mt";
+ Settings world_mt;
+ if (!world_mt.readConfigFile(world_mt_path.c_str()))
+ throw BaseException("Cannot read world.mt!");
+
+ std::string backend = world_mt.exists("mod_storage_backend") ?
+ world_mt.get("mod_storage_backend") : "files";
+ if (backend == "files")
+ warningstream << "/!\\ You are using the old mod storage files backend. "
+ << "This backend is deprecated and may be removed in a future release /!\\"
+ << std::endl << "Switching to SQLite3 is advised, "
+ << "please read http://wiki.minetest.net/Database_backends." << std::endl;
+
+ return openModStorageDatabase(backend, world_path, world_mt);
+}
+
+ModMetadataDatabase *Server::openModStorageDatabase(const std::string &backend,
+ const std::string &world_path, const Settings &world_mt)
+{
+ if (backend == "sqlite3")
+ return new ModMetadataDatabaseSQLite3(world_path);
+
+ if (backend == "files")
+ return new ModMetadataDatabaseFiles(world_path);
+
+ if (backend == "dummy")
+ return new Database_Dummy();
+
+ throw BaseException("Mod storage database backend " + backend + " not supported");
+}
+
+bool Server::migrateModStorageDatabase(const GameParams &game_params, const Settings &cmd_args)
+{
+ std::string migrate_to = cmd_args.get("migrate-mod-storage");
+ Settings world_mt;
+ std::string world_mt_path = game_params.world_path + DIR_DELIM + "world.mt";
+ if (!world_mt.readConfigFile(world_mt_path.c_str())) {
+ errorstream << "Cannot read world.mt!" << std::endl;
+ return false;
+ }
+
+ std::string backend = world_mt.exists("mod_storage_backend") ?
+ world_mt.get("mod_storage_backend") : "files";
+ if (backend == migrate_to) {
+ errorstream << "Cannot migrate: new backend is same"
+ << " as the old one" << std::endl;
+ return false;
+ }
+
+ ModMetadataDatabase *srcdb = nullptr;
+ ModMetadataDatabase *dstdb = nullptr;
+
+ bool succeeded = false;
+
+ try {
+ srcdb = Server::openModStorageDatabase(backend, game_params.world_path, world_mt);
+ dstdb = Server::openModStorageDatabase(migrate_to, game_params.world_path, world_mt);
+
+ dstdb->beginSave();
+
+ std::vector<std::string> mod_list;
+ srcdb->listMods(&mod_list);
+ for (const std::string &modname : mod_list) {
+ StringMap meta;
+ srcdb->getModEntries(modname, &meta);
+ for (const auto &pair : meta) {
+ dstdb->setModEntry(modname, pair.first, pair.second);
+ }
+ }
+
+ dstdb->endSave();
+
+ succeeded = true;
+
+ actionstream << "Successfully migrated the metadata of "
+ << mod_list.size() << " mods" << std::endl;
+ world_mt.set("mod_storage_backend", migrate_to);
+ if (!world_mt.updateConfigFile(world_mt_path.c_str()))
+ errorstream << "Failed to update world.mt!" << std::endl;
+ else
+ actionstream << "world.mt updated" << std::endl;
+
+ } catch (BaseException &e) {
+ errorstream << "An error occurred during migration: " << e.what() << std::endl;
+ }
+
+ delete srcdb;
+ delete dstdb;
+
+ if (succeeded && backend == "files") {
+ // Back up files
+ const std::string storage_path = game_params.world_path + DIR_DELIM + "mod_storage";
+ const std::string backup_path = game_params.world_path + DIR_DELIM + "mod_storage.bak";
+ if (!fs::Rename(storage_path, backup_path))
+ warningstream << "After migration, " << storage_path
+ << " could not be renamed to " << backup_path << std::endl;
+ }
+
+ return succeeded;
+}
diff --git a/src/server.h b/src/server.h
index 9857215d0..2741b3157 100644
--- a/src/server.h
+++ b/src/server.h
@@ -43,6 +43,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include <list>
#include <map>
#include <vector>
+#include <unordered_set>
class ChatEvent;
struct ChatEventChat;
@@ -81,12 +82,14 @@ enum ClientDeletionReason {
struct MediaInfo
{
std::string path;
- std::string sha1_digest;
+ std::string sha1_digest; // base64-encoded
+ bool no_announce; // true: not announced in TOCLIENT_ANNOUNCE_MEDIA (at player join)
MediaInfo(const std::string &path_="",
const std::string &sha1_digest_=""):
path(path_),
- sha1_digest(sha1_digest_)
+ sha1_digest(sha1_digest_),
+ no_announce(false)
{
}
};
@@ -197,6 +200,7 @@ public:
void handleCommand_FirstSrp(NetworkPacket* pkt);
void handleCommand_SrpBytesA(NetworkPacket* pkt);
void handleCommand_SrpBytesM(NetworkPacket* pkt);
+ void handleCommand_HaveMedia(NetworkPacket *pkt);
void ProcessData(NetworkPacket *pkt);
@@ -257,7 +261,8 @@ public:
void deleteParticleSpawner(const std::string &playername, u32 id);
- bool dynamicAddMedia(const std::string &filepath, std::vector<RemotePlayer*> &sent_to);
+ bool dynamicAddMedia(std::string filepath, u32 token,
+ const std::string &to_player, bool ephemeral);
ServerInventoryManager *getInventoryMgr() const { return m_inventory_mgr.get(); }
void sendDetachedInventory(Inventory *inventory, const std::string &name, session_t peer_id);
@@ -278,6 +283,7 @@ public:
virtual u16 allocateUnknownNodeId(const std::string &name);
IRollbackManager *getRollbackManager() { return m_rollback; }
virtual EmergeManager *getEmergeManager() { return m_emerge; }
+ virtual ModMetadataDatabase *getModStorageDatabase() { return m_mod_storage_database; }
IWritableItemDefManager* getWritableItemDefManager();
NodeDefManager* getWritableNodeDefManager();
@@ -288,13 +294,16 @@ public:
void getModNames(std::vector<std::string> &modlist);
std::string getBuiltinLuaPath();
virtual std::string getWorldPath() const { return m_path_world; }
- virtual std::string getModStoragePath() const;
inline bool isSingleplayer()
{ return m_simple_singleplayer_mode; }
inline void setAsyncFatalError(const std::string &error)
{ m_async_fatal_error.set(error); }
+ inline void setAsyncFatalError(const LuaError &e)
+ {
+ setAsyncFatalError(std::string("Lua: ") + e.what());
+ }
bool showFormspec(const char *name, const std::string &formspec, const std::string &formname);
Map & getMap() { return m_env->getMap(); }
@@ -341,7 +350,8 @@ public:
void printToConsoleOnly(const std::string &text);
- void SendPlayerHPOrDie(PlayerSAO *player, const PlayerHPChangeReason &reason);
+ void HandlePlayerHPChange(PlayerSAO *sao, const PlayerHPChangeReason &reason);
+ void SendPlayerHP(PlayerSAO *sao);
void SendPlayerBreath(PlayerSAO *sao);
void SendInventory(PlayerSAO *playerSAO, bool incremental);
void SendMovePlayer(session_t peer_id);
@@ -368,6 +378,14 @@ public:
// Get or load translations for a language
Translations *getTranslationLanguage(const std::string &lang_code);
+ static ModMetadataDatabase *openModStorageDatabase(const std::string &world_path);
+
+ static ModMetadataDatabase *openModStorageDatabase(const std::string &backend,
+ const std::string &world_path, const Settings &world_mt);
+
+ static bool migrateModStorageDatabase(const GameParams &game_params,
+ const Settings &cmd_args);
+
// Bind address
Address m_bind_addr;
@@ -395,6 +413,12 @@ private:
float m_timer = 0.0f;
};
+ struct PendingDynamicMediaCallback {
+ std::string filename; // only set if media entry and file is to be deleted
+ float expiry_timer;
+ std::unordered_set<session_t> waiting_players;
+ };
+
void init();
void SendMovement(session_t peer_id);
@@ -415,7 +439,6 @@ private:
virtual void SendChatMessage(session_t peer_id, const ChatMessage &message);
void SendTimeOfDay(session_t peer_id, u16 time, f32 time_speed);
- void SendPlayerHP(session_t peer_id);
void SendLocalPlayerAnimations(session_t peer_id, v2s32 animation_frames[4],
f32 animation_speed);
@@ -466,6 +489,7 @@ private:
void sendMediaAnnouncement(session_t peer_id, const std::string &lang_code);
void sendRequestedMedia(session_t peer_id,
const std::vector<std::string> &tosend);
+ void stepPendingDynMediaCallbacks(float dtime);
// Adds a ParticleSpawner on peer with peer_id (PEER_ID_INEXISTENT == all)
void SendAddParticleSpawner(session_t peer_id, u16 protocol_version,
@@ -486,7 +510,7 @@ private:
Something random
*/
- void DiePlayer(session_t peer_id, const PlayerHPChangeReason &reason);
+ void HandlePlayerDeath(PlayerSAO* sao, const PlayerHPChangeReason &reason);
void RespawnPlayer(session_t peer_id);
void DeleteClient(session_t peer_id, ClientDeletionReason reason);
void UpdateCrafting(RemotePlayer *player);
@@ -650,6 +674,10 @@ private:
// media files known to server
std::unordered_map<std::string, MediaInfo> m_media;
+ // pending dynamic media callbacks, clients inform the server when they have a file fetched
+ std::unordered_map<u32, PendingDynamicMediaCallback> m_pending_dyn_media;
+ float m_step_pending_dyn_media_timer = 0.0f;
+
/*
Sounds
*/
@@ -658,6 +686,7 @@ private:
s32 nextSoundId();
std::unordered_map<std::string, ModMetadata *> m_mod_storages;
+ ModMetadataDatabase *m_mod_storage_database = nullptr;
float m_mod_storage_save_timer = 10.0f;
// CSM restrictions byteflag
diff --git a/src/server/luaentity_sao.cpp b/src/server/luaentity_sao.cpp
index 3bcbe107b..82f6da231 100644
--- a/src/server/luaentity_sao.cpp
+++ b/src/server/luaentity_sao.cpp
@@ -108,7 +108,12 @@ void LuaEntitySAO::addedToEnvironment(u32 dtime_s)
m_env->getScriptIface()->
luaentity_Activate(m_id, m_init_state, dtime_s);
} else {
+ // It's an unknown object
+ // Use entitystring as infotext for debugging
m_prop.infotext = m_init_name;
+ // Set unknown object texture
+ m_prop.textures.clear();
+ m_prop.textures.emplace_back("unknown_object.png");
}
}
@@ -300,10 +305,11 @@ void LuaEntitySAO::getStaticData(std::string *result) const
*result = os.str();
}
-u16 LuaEntitySAO::punch(v3f dir,
+u32 LuaEntitySAO::punch(v3f dir,
const ToolCapabilities *toolcap,
ServerActiveObject *puncher,
- float time_from_last_punch)
+ float time_from_last_punch,
+ u16 initial_wear)
{
if (!m_registered) {
// Delete unknown LuaEntities when punched
@@ -321,7 +327,8 @@ u16 LuaEntitySAO::punch(v3f dir,
m_armor_groups,
toolcap,
&tool_item,
- time_from_last_punch);
+ time_from_last_punch,
+ initial_wear);
bool damage_handled = m_env->getScriptIface()->luaentity_Punch(m_id, puncher,
time_from_last_punch, toolcap, dir, result.did_punch ? result.damage : 0);
diff --git a/src/server/luaentity_sao.h b/src/server/luaentity_sao.h
index 6883ae1b9..87b664a8b 100644
--- a/src/server/luaentity_sao.h
+++ b/src/server/luaentity_sao.h
@@ -44,9 +44,10 @@ public:
bool isStaticAllowed() const { return m_prop.static_save; }
bool shouldUnload() const { return true; }
void getStaticData(std::string *result) const;
- u16 punch(v3f dir, const ToolCapabilities *toolcap = nullptr,
+ u32 punch(v3f dir, const ToolCapabilities *toolcap = nullptr,
ServerActiveObject *puncher = nullptr,
- float time_from_last_punch = 1000000.0f);
+ float time_from_last_punch = 1000000.0f,
+ u16 initial_wear = 0);
void rightClick(ServerActiveObject *clicker);
void setPos(const v3f &pos);
void moveTo(v3f pos, bool continuous);
diff --git a/src/server/mods.cpp b/src/server/mods.cpp
index 83fa12da9..609d8c346 100644
--- a/src/server/mods.cpp
+++ b/src/server/mods.cpp
@@ -61,12 +61,8 @@ void ServerModManager::loadMods(ServerScripting *script)
infostream << std::endl;
// Load and run "mod" scripts
for (const ModSpec &mod : m_sorted_mods) {
- if (!string_allowed(mod.name, MODNAME_ALLOWED_CHARS)) {
- throw ModError("Error loading mod \"" + mod.name +
- "\": Mod name does not follow naming "
- "conventions: "
- "Only characters [a-z0-9_] are allowed.");
- }
+ mod.checkAndLog();
+
std::string script_path = mod.path + DIR_DELIM + "init.lua";
auto t = porting::getTimeMs();
script->loadMod(script_path, mod.name);
diff --git a/src/server/player_sao.cpp b/src/server/player_sao.cpp
index 0d31f2e0b..d076d5783 100644
--- a/src/server/player_sao.cpp
+++ b/src/server/player_sao.cpp
@@ -167,7 +167,6 @@ void PlayerSAO::step(float dtime, bool send_recommended)
if (m_breath == 0) {
PlayerHPChangeReason reason(PlayerHPChangeReason::DROWNING);
setHP(m_hp - c.drowning, reason);
- m_env->getGameDef()->SendPlayerHPOrDie(this, reason);
}
}
}
@@ -216,7 +215,6 @@ void PlayerSAO::step(float dtime, bool send_recommended)
s32 newhp = (s32)m_hp - (s32)damage_per_second;
PlayerHPChangeReason reason(PlayerHPChangeReason::NODE_DAMAGE, nodename);
setHP(newhp, reason);
- m_env->getGameDef()->SendPlayerHPOrDie(this, reason);
}
}
@@ -411,10 +409,11 @@ void PlayerSAO::setLookPitchAndSend(const float pitch)
m_env->getGameDef()->SendMovePlayer(m_peer_id);
}
-u16 PlayerSAO::punch(v3f dir,
+u32 PlayerSAO::punch(v3f dir,
const ToolCapabilities *toolcap,
ServerActiveObject *puncher,
- float time_from_last_punch)
+ float time_from_last_punch,
+ u16 initial_wear)
{
if (!toolcap)
return 0;
@@ -432,7 +431,7 @@ u16 PlayerSAO::punch(v3f dir,
s32 old_hp = getHP();
HitParams hitparams = getHitParams(m_armor_groups, toolcap,
- time_from_last_punch);
+ time_from_last_punch, initial_wear);
PlayerSAO *playersao = m_player->getPlayerSAO();
@@ -464,33 +463,33 @@ void PlayerSAO::rightClick(ServerActiveObject *clicker)
m_env->getScriptIface()->on_rightclickplayer(this, clicker);
}
-void PlayerSAO::setHP(s32 hp, const PlayerHPChangeReason &reason)
+void PlayerSAO::setHP(s32 target_hp, const PlayerHPChangeReason &reason, bool from_client)
{
- if (hp == (s32)m_hp)
- return; // Nothing to do
+ target_hp = rangelim(target_hp, 0, U16_MAX);
- if (m_hp <= 0 && hp < (s32)m_hp)
- return; // Cannot take more damage
+ if (target_hp == m_hp)
+ return; // Nothing to do
- {
- s32 hp_change = m_env->getScriptIface()->on_player_hpchange(this, hp - m_hp, reason);
- if (hp_change == 0)
- return;
+ s32 hp_change = m_env->getScriptIface()->on_player_hpchange(this, target_hp - (s32)m_hp, reason);
- hp = m_hp + hp_change;
- }
+ s32 hp = (s32)m_hp + std::min(hp_change, U16_MAX); // Protection against s32 overflow
+ hp = rangelim(hp, 0, U16_MAX);
- s32 oldhp = m_hp;
- hp = rangelim(hp, 0, m_prop.hp_max);
+ if (hp > m_prop.hp_max)
+ hp = m_prop.hp_max;
- if (hp < oldhp && isImmortal())
- return; // Do not allow immortal players to be damaged
-
- m_hp = hp;
+ if (hp < m_hp && isImmortal())
+ hp = m_hp; // Do not allow immortal players to be damaged
// Update properties on death
- if ((hp == 0) != (oldhp == 0))
+ if ((hp == 0) != (m_hp == 0))
m_properties_sent = false;
+
+ if (hp != m_hp) {
+ m_hp = hp;
+ m_env->getGameDef()->HandlePlayerHPChange(this, reason);
+ } else if (from_client)
+ m_env->getGameDef()->SendPlayerHP(this);
}
void PlayerSAO::setBreath(const u16 breath, bool send)
diff --git a/src/server/player_sao.h b/src/server/player_sao.h
index 8e2d8803f..96d8f7189 100644
--- a/src/server/player_sao.h
+++ b/src/server/player_sao.h
@@ -109,10 +109,14 @@ public:
Interaction interface
*/
- u16 punch(v3f dir, const ToolCapabilities *toolcap, ServerActiveObject *puncher,
- float time_from_last_punch);
+ u32 punch(v3f dir, const ToolCapabilities *toolcap, ServerActiveObject *puncher,
+ float time_from_last_punch, u16 initial_wear = 0);
void rightClick(ServerActiveObject *clicker);
- void setHP(s32 hp, const PlayerHPChangeReason &reason);
+ void setHP(s32 hp, const PlayerHPChangeReason &reason) override
+ {
+ return setHP(hp, reason, false);
+ }
+ void setHP(s32 hp, const PlayerHPChangeReason &reason, bool from_client);
void setHPRaw(u16 hp) { m_hp = hp; }
u16 getBreath() const { return m_breath; }
void setBreath(const u16 breath, bool send = true);
diff --git a/src/server/serveractiveobject.h b/src/server/serveractiveobject.h
index 51f445914..5b0ee2d9b 100644
--- a/src/server/serveractiveobject.h
+++ b/src/server/serveractiveobject.h
@@ -145,11 +145,12 @@ public:
virtual bool shouldUnload() const
{ return true; }
- // Returns tool wear
- virtual u16 punch(v3f dir,
+ // Returns added tool wear
+ virtual u32 punch(v3f dir,
const ToolCapabilities *toolcap = nullptr,
ServerActiveObject *puncher = nullptr,
- float time_from_last_punch = 1000000.0f)
+ float time_from_last_punch = 1000000.0f,
+ u16 initial_wear = 0)
{ return 0; }
virtual void rightClick(ServerActiveObject *clicker)
{}
diff --git a/src/server/serverinventorymgr.cpp b/src/server/serverinventorymgr.cpp
index 2a80c9bbe..63d1645cb 100644
--- a/src/server/serverinventorymgr.cpp
+++ b/src/server/serverinventorymgr.cpp
@@ -39,24 +39,29 @@ ServerInventoryManager::~ServerInventoryManager()
Inventory *ServerInventoryManager::getInventory(const InventoryLocation &loc)
{
+ // No m_env check here: allow creation and modification of detached inventories
+
switch (loc.type) {
case InventoryLocation::UNDEFINED:
case InventoryLocation::CURRENT_PLAYER:
break;
case InventoryLocation::PLAYER: {
+ if (!m_env)
+ return nullptr;
+
RemotePlayer *player = m_env->getPlayer(loc.name.c_str());
if (!player)
return NULL;
+
PlayerSAO *playersao = player->getPlayerSAO();
- if (!playersao)
- return NULL;
- return playersao->getInventory();
+ return playersao ? playersao->getInventory() : nullptr;
} break;
case InventoryLocation::NODEMETA: {
+ if (!m_env)
+ return nullptr;
+
NodeMetadata *meta = m_env->getMap().getNodeMetadata(loc.p);
- if (!meta)
- return NULL;
- return meta->getInventory();
+ return meta ? meta->getInventory() : nullptr;
} break;
case InventoryLocation::DETACHED: {
auto it = m_detached_inventories.find(loc.name);
@@ -151,14 +156,15 @@ bool ServerInventoryManager::removeDetachedInventory(const std::string &name)
const std::string &owner = inv_it->second.owner;
if (!owner.empty()) {
- RemotePlayer *player = m_env->getPlayer(owner.c_str());
+ if (m_env) {
+ RemotePlayer *player = m_env->getPlayer(owner.c_str());
- if (player && player->getPeerId() != PEER_ID_INEXISTENT)
- m_env->getGameDef()->sendDetachedInventory(
- nullptr, name, player->getPeerId());
-
- } else {
- // Notify all players about the change
+ if (player && player->getPeerId() != PEER_ID_INEXISTENT)
+ m_env->getGameDef()->sendDetachedInventory(
+ nullptr, name, player->getPeerId());
+ }
+ } else if (m_env) {
+ // Notify all players about the change as soon ServerEnv exists
m_env->getGameDef()->sendDetachedInventory(
nullptr, name, PEER_ID_INEXISTENT);
}
diff --git a/src/server/unit_sao.cpp b/src/server/unit_sao.cpp
index 2371640ca..9a49b0f43 100644
--- a/src/server/unit_sao.cpp
+++ b/src/server/unit_sao.cpp
@@ -84,8 +84,11 @@ void UnitSAO::setBonePosition(const std::string &bone, v3f position, v3f rotatio
void UnitSAO::getBonePosition(const std::string &bone, v3f *position, v3f *rotation)
{
- *position = m_bone_position[bone].X;
- *rotation = m_bone_position[bone].Y;
+ auto it = m_bone_position.find(bone);
+ if (it != m_bone_position.end()) {
+ *position = it->second.X;
+ *rotation = it->second.Y;
+ }
}
// clang-format off
@@ -124,6 +127,19 @@ void UnitSAO::sendOutdatedData()
void UnitSAO::setAttachment(int parent_id, const std::string &bone, v3f position,
v3f rotation, bool force_visible)
{
+ auto *obj = parent_id ? m_env->getActiveObject(parent_id) : nullptr;
+ if (obj) {
+ // Do checks to avoid circular references
+ // The chain of wanted parent must not refer or contain "this"
+ for (obj = obj->getParent(); obj; obj = obj->getParent()) {
+ if (obj == this) {
+ warningstream << "Mod bug: Attempted to attach object " << m_id << " to parent "
+ << parent_id << " but former is an (in)direct parent of latter." << std::endl;
+ return;
+ }
+ }
+ }
+
// Attachments need to be handled on both the server and client.
// If we just attach on the server, we can only copy the position of the parent.
// Attachments are still sent to clients at an interval so players might see them
@@ -134,16 +150,21 @@ void UnitSAO::setAttachment(int parent_id, const std::string &bone, v3f position
int old_parent = m_attachment_parent_id;
m_attachment_parent_id = parent_id;
+
+ // The detach callbacks might call to setAttachment() again.
+ // Ensure the attachment params are applied after this callback is run.
+ if (parent_id != old_parent)
+ onDetach(old_parent);
+
+ m_attachment_parent_id = parent_id;
m_attachment_bone = bone;
m_attachment_position = position;
m_attachment_rotation = rotation;
m_force_visible = force_visible;
m_attachment_sent = false;
- if (parent_id != old_parent) {
- onDetach(old_parent);
+ if (parent_id != old_parent)
onAttach(parent_id);
- }
}
void UnitSAO::getAttachment(int *parent_id, std::string *bone, v3f *position,
diff --git a/src/serverenvironment.cpp b/src/serverenvironment.cpp
index 3d9ba132b..f3711652c 100644
--- a/src/serverenvironment.cpp
+++ b/src/serverenvironment.cpp
@@ -729,6 +729,8 @@ struct ActiveABM
int chance;
std::vector<content_t> required_neighbors;
bool check_required_neighbors; // false if required_neighbors is known to be empty
+ s16 min_y;
+ s16 max_y;
};
class ABMHandler
@@ -773,6 +775,9 @@ public:
} else {
aabm.chance = chance;
}
+ // y limits
+ aabm.min_y = abm->getMinY();
+ aabm.max_y = abm->getMaxY();
// Trigger neighbors
const std::vector<std::string> &required_neighbors_s =
@@ -885,6 +890,9 @@ public:
v3s16 p = p0 + block->getPosRelative();
for (ActiveABM &aabm : *m_aabms[c]) {
+ if ((p.Y < aabm.min_y) || (p.Y > aabm.max_y))
+ continue;
+
if (myrand() % aabm.chance != 0)
continue;
@@ -1542,6 +1550,21 @@ void ServerEnvironment::step(float dtime)
m_server->sendDetachedInventories(PEER_ID_INEXISTENT, true);
}
+ServerEnvironment::BlockStatus ServerEnvironment::getBlockStatus(v3s16 blockpos)
+{
+ if (m_active_blocks.contains(blockpos))
+ return BS_ACTIVE;
+
+ const MapBlock *block = m_map->getBlockNoCreateNoEx(blockpos);
+ if (block && !block->isDummy())
+ return BS_LOADED;
+
+ if (m_map->isBlockInQueue(blockpos))
+ return BS_EMERGING;
+
+ return BS_UNKNOWN;
+}
+
u32 ServerEnvironment::addParticleSpawner(float exptime)
{
// Timers with lifetime 0 do not expire
diff --git a/src/serverenvironment.h b/src/serverenvironment.h
index a11c814ed..8733c2dd2 100644
--- a/src/serverenvironment.h
+++ b/src/serverenvironment.h
@@ -67,6 +67,10 @@ public:
virtual u32 getTriggerChance() = 0;
// Whether to modify chance to simulate time lost by an unnattended block
virtual bool getSimpleCatchUp() = 0;
+ // get min Y for apply abm
+ virtual s16 getMinY() = 0;
+ // get max Y for apply abm
+ virtual s16 getMaxY() = 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,
@@ -342,7 +346,16 @@ public:
void reportMaxLagEstimate(float f) { m_max_lag_estimate = f; }
float getMaxLagEstimate() { return m_max_lag_estimate; }
- std::set<v3s16>* getForceloadedBlocks() { return &m_active_blocks.m_forceloaded_list; };
+ std::set<v3s16>* getForceloadedBlocks() { return &m_active_blocks.m_forceloaded_list; }
+
+ // Sorted by how ready a mapblock is
+ enum BlockStatus {
+ BS_UNKNOWN,
+ BS_EMERGING,
+ BS_LOADED,
+ BS_ACTIVE // always highest value
+ };
+ BlockStatus getBlockStatus(v3s16 blockpos);
// Sets the static object status all the active objects in the specified block
// This is only really needed for deleting blocks from the map
diff --git a/src/serverlist.cpp b/src/serverlist.cpp
index 3bcab3d58..29e3ac9a6 100644
--- a/src/serverlist.cpp
+++ b/src/serverlist.cpp
@@ -97,6 +97,7 @@ void sendAnnounce(AnnounceAction action,
}
HTTPFetchRequest fetch_request;
+ fetch_request.caller = HTTPFETCH_PRINT_ERR;
fetch_request.url = g_settings->get("serverlist_url") + std::string("/announce");
fetch_request.method = HTTP_POST;
fetch_request.fields["json"] = fastWriteJson(server);
diff --git a/src/settings.cpp b/src/settings.cpp
index cff393e5f..0e44ee0bc 100644
--- a/src/settings.cpp
+++ b/src/settings.cpp
@@ -33,35 +33,89 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include <cctype>
#include <algorithm>
-Settings *g_settings = nullptr; // Populated in main()
+Settings *g_settings = nullptr;
+static SettingsHierarchy g_hierarchy;
std::string g_settings_path;
-Settings *Settings::s_layers[SL_TOTAL_COUNT] = {0}; // Zeroed by compiler
std::unordered_map<std::string, const FlagDesc *> Settings::s_flags;
+/* Settings hierarchy implementation */
-Settings *Settings::createLayer(SettingsLayer sl, const std::string &end_tag)
+SettingsHierarchy::SettingsHierarchy(Settings *fallback)
{
- if ((int)sl < 0 || sl >= SL_TOTAL_COUNT)
+ layers.push_back(fallback);
+}
+
+
+Settings *SettingsHierarchy::getLayer(int layer) const
+{
+ if (layer < 0 || layer >= (int)layers.size())
throw BaseException("Invalid settings layer");
+ return layers[layer];
+}
+
+
+Settings *SettingsHierarchy::getParent(int layer) const
+{
+ assert(layer >= 0 && layer < (int)layers.size());
+ // iterate towards the origin (0) to find the next fallback layer
+ for (int i = layer - 1; i >= 0; --i) {
+ if (layers[i])
+ return layers[i];
+ }
+
+ return nullptr;
+}
- Settings *&pos = s_layers[(size_t)sl];
+
+void SettingsHierarchy::onLayerCreated(int layer, Settings *obj)
+{
+ if (layer < 0)
+ throw BaseException("Invalid settings layer");
+ if ((int)layers.size() < layer + 1)
+ layers.resize(layer + 1);
+
+ Settings *&pos = layers[layer];
if (pos)
- throw BaseException("Setting layer " + std::to_string(sl) + " already exists");
+ throw BaseException("Setting layer " + itos(layer) + " already exists");
+
+ pos = obj;
+ // This feels bad
+ if (this == &g_hierarchy && layer == (int)SL_GLOBAL)
+ g_settings = obj;
+}
- pos = new Settings(end_tag);
- pos->m_settingslayer = sl;
- if (sl == SL_GLOBAL)
- g_settings = pos;
- return pos;
+void SettingsHierarchy::onLayerRemoved(int layer)
+{
+ assert(layer >= 0 && layer < (int)layers.size());
+ layers[layer] = nullptr;
+ if (this == &g_hierarchy && layer == (int)SL_GLOBAL)
+ g_settings = nullptr;
+}
+
+/* Settings implementation */
+
+Settings *Settings::createLayer(SettingsLayer sl, const std::string &end_tag)
+{
+ return new Settings(end_tag, &g_hierarchy, (int)sl);
}
Settings *Settings::getLayer(SettingsLayer sl)
{
- sanity_check((int)sl >= 0 && sl < SL_TOTAL_COUNT);
- return s_layers[(size_t)sl];
+ return g_hierarchy.getLayer(sl);
+}
+
+
+Settings::Settings(const std::string &end_tag, SettingsHierarchy *h,
+ int settings_layer) :
+ m_end_tag(end_tag),
+ m_hierarchy(h),
+ m_settingslayer(settings_layer)
+{
+ if (m_hierarchy)
+ m_hierarchy->onLayerCreated(m_settingslayer, this);
}
@@ -69,12 +123,8 @@ Settings::~Settings()
{
MutexAutoLock lock(m_mutex);
- if (m_settingslayer < SL_TOTAL_COUNT)
- s_layers[(size_t)m_settingslayer] = nullptr;
-
- // Compatibility
- if (m_settingslayer == SL_GLOBAL)
- g_settings = nullptr;
+ if (m_hierarchy)
+ m_hierarchy->onLayerRemoved(m_settingslayer);
clearNoLock();
}
@@ -86,8 +136,8 @@ Settings & Settings::operator = (const Settings &other)
return *this;
// TODO: Avoid copying Settings objects. Make this private.
- FATAL_ERROR_IF(m_settingslayer != SL_TOTAL_COUNT && other.m_settingslayer != SL_TOTAL_COUNT,
- ("Tried to copy unique Setting layer " + std::to_string(m_settingslayer)).c_str());
+ FATAL_ERROR_IF(m_hierarchy || other.m_hierarchy,
+ "Cannot copy or overwrite Settings object that belongs to a hierarchy");
MutexAutoLock lock(m_mutex);
MutexAutoLock lock2(other.m_mutex);
@@ -410,18 +460,7 @@ bool Settings::parseCommandLine(int argc, char *argv[],
Settings *Settings::getParent() const
{
- // If the Settings object is within the hierarchy structure,
- // iterate towards the origin (0) to find the next fallback layer
- if (m_settingslayer >= SL_TOTAL_COUNT)
- return nullptr;
-
- for (int i = (int)m_settingslayer - 1; i >= 0; --i) {
- if (s_layers[i])
- return s_layers[i];
- }
-
- // No parent
- return nullptr;
+ return m_hierarchy ? m_hierarchy->getParent(m_settingslayer) : nullptr;
}
@@ -497,11 +536,8 @@ float Settings::getFloat(const std::string &name) const
u64 Settings::getU64(const std::string &name) const
{
- u64 value = 0;
std::string s = get(name);
- std::istringstream ss(s);
- ss >> value;
- return value;
+ return from_string<u64>(s);
}
@@ -623,9 +659,7 @@ bool Settings::getNoiseParamsFromGroup(const std::string &name,
bool Settings::exists(const std::string &name) const
{
- MutexAutoLock lock(m_mutex);
-
- if (m_settings.find(name) != m_settings.end())
+ if (existsLocal(name))
return true;
if (auto parent = getParent())
return parent->exists(name);
@@ -633,6 +667,14 @@ bool Settings::exists(const std::string &name) const
}
+bool Settings::existsLocal(const std::string &name) const
+{
+ MutexAutoLock lock(m_mutex);
+
+ return m_settings.find(name) != m_settings.end();
+}
+
+
std::vector<std::string> Settings::getNames() const
{
MutexAutoLock lock(m_mutex);
@@ -715,6 +757,15 @@ bool Settings::getS16NoEx(const std::string &name, s16 &val) const
}
}
+bool Settings::getU32NoEx(const std::string &name, u32 &val) const
+{
+ try {
+ val = getU32(name);
+ return true;
+ } catch (SettingNotFoundException &e) {
+ return false;
+ }
+}
bool Settings::getS32NoEx(const std::string &name, s32 &val) const
{
@@ -823,6 +874,8 @@ bool Settings::set(const std::string &name, const std::string &value)
// TODO: Remove this function
bool Settings::setDefault(const std::string &name, const std::string &value)
{
+ FATAL_ERROR_IF(m_hierarchy != &g_hierarchy, "setDefault is only valid on "
+ "global settings");
return getLayer(SL_DEFAULTS)->set(name, value);
}
diff --git a/src/settings.h b/src/settings.h
index b5e859ee0..767d057f9 100644
--- a/src/settings.h
+++ b/src/settings.h
@@ -21,6 +21,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "irrlichttypes_bloated.h"
#include "util/string.h"
+#include "util/basic_macros.h"
#include <string>
#include <list>
#include <set>
@@ -60,14 +61,36 @@ enum SettingsParseEvent {
SPE_MULTILINE,
};
+// Describes the global setting layers, SL_GLOBAL is where settings are read from
enum SettingsLayer {
SL_DEFAULTS,
SL_GAME,
SL_GLOBAL,
- SL_MAP,
SL_TOTAL_COUNT
};
+// Implements the hierarchy a settings object may be part of
+class SettingsHierarchy {
+public:
+ /*
+ * A settings object that may be part of another hierarchy can
+ * occupy the index 0 as a fallback. If not set you can use 0 on your own.
+ */
+ SettingsHierarchy(Settings *fallback = nullptr);
+
+ DISABLE_CLASS_COPY(SettingsHierarchy)
+
+ Settings *getLayer(int layer) const;
+
+private:
+ friend class Settings;
+ Settings *getParent(int layer) const;
+ void onLayerCreated(int layer, Settings *obj);
+ void onLayerRemoved(int layer);
+
+ std::vector<Settings*> layers;
+};
+
struct ValueSpec {
ValueSpec(ValueType a_type, const char *a_help=NULL)
{
@@ -100,13 +123,15 @@ typedef std::unordered_map<std::string, SettingsEntry> SettingEntries;
class Settings {
public:
+ /* These functions operate on the global hierarchy! */
static Settings *createLayer(SettingsLayer sl, const std::string &end_tag = "");
static Settings *getLayer(SettingsLayer sl);
- SettingsLayer getLayerType() const { return m_settingslayer; }
+ /**/
Settings(const std::string &end_tag = "") :
m_end_tag(end_tag)
{}
+ Settings(const std::string &end_tag, SettingsHierarchy *h, int settings_layer);
~Settings();
Settings & operator += (const Settings &other);
@@ -147,9 +172,12 @@ public:
bool getNoiseParamsFromValue(const std::string &name, NoiseParams &np) const;
bool getNoiseParamsFromGroup(const std::string &name, NoiseParams &np) const;
- // return all keys used
+ // return all keys used in this object
std::vector<std::string> getNames() const;
+ // check if setting exists anywhere in the hierarchy
bool exists(const std::string &name) const;
+ // check if setting exists in this object ("locally")
+ bool existsLocal(const std::string &name) const;
/***************************************
@@ -161,6 +189,7 @@ public:
bool getFlag(const std::string &name) const;
bool getU16NoEx(const std::string &name, u16 &val) const;
bool getS16NoEx(const std::string &name, s16 &val) const;
+ bool getU32NoEx(const std::string &name, u32 &val) const;
bool getS32NoEx(const std::string &name, s32 &val) const;
bool getU64NoEx(const std::string &name, u64 &val) const;
bool getFloatNoEx(const std::string &name, float &val) const;
@@ -200,9 +229,9 @@ public:
// remove a setting
bool remove(const std::string &name);
- /**************
- * Miscellany *
- **************/
+ /*****************
+ * Miscellaneous *
+ *****************/
void setDefault(const std::string &name, const FlagDesc *flagdesc, u32 flags);
const FlagDesc *getFlagDescFallback(const std::string &name) const;
@@ -214,6 +243,10 @@ public:
void removeSecureSettings();
+ // Returns the settings layer this object is.
+ // If within the global hierarchy you can cast this to enum SettingsLayer
+ inline int getLayer() const { return m_settingslayer; }
+
private:
/***********************
* Reading and writing *
@@ -239,6 +272,8 @@ private:
// Allow TestSettings to run sanity checks using private functions.
friend class TestSettings;
+ // For sane mutex locking when iterating
+ friend class LuaSettings;
void updateNoLock(const Settings &other);
void clearNoLock();
@@ -255,7 +290,8 @@ private:
// All methods that access m_settings/m_defaults directly should lock this.
mutable std::mutex m_mutex;
- static Settings *s_layers[SL_TOTAL_COUNT];
- SettingsLayer m_settingslayer = SL_TOTAL_COUNT;
+ SettingsHierarchy *m_hierarchy = nullptr;
+ int m_settingslayer = -1;
+
static std::unordered_map<std::string, const FlagDesc *> s_flags;
};
diff --git a/src/settings_translation_file.cpp b/src/settings_translation_file.cpp
index 317186e94..ebb7ba9be 100644
--- a/src/settings_translation_file.cpp
+++ b/src/settings_translation_file.cpp
@@ -11,7 +11,7 @@ fake_function() {
gettext("Pitch move mode");
gettext("If enabled, makes move directions relative to the player's pitch when flying or swimming.");
gettext("Fast movement");
- gettext("Fast movement (via the \"special\" key).\nThis requires the \"fast\" privilege on the server.");
+ gettext("Fast movement (via the \"Aux1\" 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");
@@ -24,12 +24,12 @@ fake_function() {
gettext("Invert vertical mouse movement.");
gettext("Mouse sensitivity");
gettext("Mouse sensitivity multiplier.");
- gettext("Special key for climbing/descending");
- gettext("If enabled, \"special\" key instead of \"sneak\" key is used for climbing down and\ndescending.");
+ gettext("Aux1 key for climbing/descending");
+ gettext("If enabled, \"Aux1\" key instead of \"Sneak\" key is used for climbing down and\ndescending.");
gettext("Double tap jump for fly");
gettext("Double-tapping the jump key toggles fly mode.");
gettext("Always fly and fast");
- gettext("If disabled, \"special\" key is used to fly fast if both fly and fast mode are\nenabled.");
+ gettext("If disabled, \"Aux1\" key is used to fly fast if both fly and fast mode are\nenabled.");
gettext("Place repetition interval");
gettext("The time in seconds it takes between repeated node placements when holding\nthe place button.");
gettext("Automatic jumping");
@@ -44,8 +44,8 @@ fake_function() {
gettext("The length in pixels it takes for touch screen interaction to start.");
gettext("Fixed virtual joystick");
gettext("(Android) Fixes the position of virtual joystick.\nIf disabled, virtual joystick will center to first-touch's position.");
- gettext("Virtual joystick triggers aux button");
- gettext("(Android) Use virtual joystick to trigger \"aux\" button.\nIf enabled, virtual joystick will also tap \"aux\" button when out of main circle.");
+ gettext("Virtual joystick triggers Aux1 button");
+ gettext("(Android) Use virtual joystick to trigger \"Aux1\" button.\nIf enabled, virtual joystick will also tap \"Aux1\" button when out of main circle.");
gettext("Enable joysticks");
gettext("Enable joysticks");
gettext("Joystick ID");
@@ -54,10 +54,10 @@ fake_function() {
gettext("The type of joystick");
gettext("Joystick button repetition interval");
gettext("The time in seconds it takes between repeated events\nwhen holding down a joystick button combination.");
- gettext("Joystick deadzone");
- gettext("The deadzone of the joystick");
+ gettext("Joystick dead zone");
+ gettext("The dead zone of the joystick");
gettext("Joystick frustum sensitivity");
- gettext("The sensitivity of the joystick axes for moving the\ningame view frustum around.");
+ gettext("The sensitivity of the joystick axes for moving the\nin-game view frustum around.");
gettext("Forward key");
gettext("Key for moving the player forward.\nSee http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3");
gettext("Backward key");
@@ -76,7 +76,7 @@ fake_function() {
gettext("Key for placing.\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("Special key");
+ gettext("Aux1 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");
@@ -203,8 +203,8 @@ fake_function() {
gettext("Graphics");
gettext("In-Game");
gettext("Basic");
- gettext("Show nametag backgrounds by default");
- gettext("Whether nametag backgrounds should be shown by default.\nMods may still set a background.");
+ gettext("Show name tag backgrounds by default");
+ gettext("Whether name tag backgrounds should be shown by default.\nMods may still set a background.");
gettext("VBO");
gettext("Enable vertex buffer objects.\nThis should greatly improve graphics performance.");
gettext("Fog");
@@ -215,6 +215,8 @@ fake_function() {
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("Tradeoffs for performance");
+ gettext("Enables tradeoffs that reduce CPU load or increase rendering performance\nat the expense of minor visual glitches that do not impact game playability.");
gettext("Clouds");
gettext("Clouds are a client side effect.");
gettext("3D clouds");
@@ -225,7 +227,7 @@ fake_function() {
gettext("Adds particles when digging a node.");
gettext("Filtering");
gettext("Mipmapping");
- gettext("Use mip mapping to scale textures. May slightly increase performance,\nespecially when using a high resolution texture pack.\nGamma correct downscaling is not supported.");
+ gettext("Use mipmapping to scale textures. May slightly increase performance,\nespecially when using a high resolution texture pack.\nGamma correct downscaling is not supported.");
gettext("Anisotropic filtering");
gettext("Use anisotropic filtering when viewing at textures from an angle.");
gettext("Bilinear filtering");
@@ -233,9 +235,9 @@ fake_function() {
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("Filtered textures can blend RGB values with fully-transparent neighbors,\nwhich PNG optimizers usually discard, often resulting in dark or\nlight edges to transparent textures. Apply a filter to clean that up\nat texture load time. This is automatically enabled if mipmapping is enabled.");
gettext("Minimum texture size");
- 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.\nThis is also used as the base node texture size for world-aligned\ntexture autoscaling.");
+ 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. This setting is ONLY applied if\nbilinear/trilinear/anisotropic filtering is enabled.\nThis is also used as the base node texture size for world-aligned\ntexture autoscaling.");
gettext("FSAA");
gettext("Use multi-sample antialiasing (MSAA) to smooth out block edges.\nThis algorithm smooths out the 3D viewport while keeping the image sharp,\nbut it doesn't affect the insides of textures\n(which is especially noticeable with transparent textures).\nVisible spaces appear between nodes when shaders are disabled.\nIf set to 0, MSAA is disabled.\nA restart is required after changing this option.");
gettext("Undersampling");
@@ -261,6 +263,29 @@ fake_function() {
gettext("Set to true to enable waving leaves.\nRequires shaders to be enabled.");
gettext("Waving plants");
gettext("Set to true to enable waving plants.\nRequires shaders to be enabled.");
+ gettext("Dynamic shadows");
+ gettext("Dynamic shadows");
+ gettext("Set to true to enable Shadow Mapping.\nRequires shaders to be enabled.");
+ gettext("Shadow strength");
+ gettext("Set the shadow strength.\nLower value means lighter shadows, higher value means darker shadows.");
+ gettext("Shadow map max distance in nodes to render shadows");
+ gettext("Maximum distance to render shadows.");
+ gettext("Shadow map texture size");
+ gettext("Texture size to render the shadow map on.\nThis must be a power of two.\nBigger numbers create better shadows but it is also more expensive.");
+ gettext("Shadow map texture in 32 bits");
+ gettext("Sets shadow texture quality to 32 bits.\nOn false, 16 bits texture will be used.\nThis can cause much more artifacts in the shadow.");
+ gettext("Poisson filtering");
+ gettext("Enable Poisson disk filtering.\nOn true uses Poisson disk to make \"soft shadows\". Otherwise uses PCF filtering.");
+ gettext("Shadow filter quality");
+ gettext("Define shadow filtering quality.\nThis simulates the soft shadows effect by applying a PCF or Poisson disk\nbut also uses more resources.");
+ gettext("Colored shadows");
+ gettext("Enable colored shadows.\nOn true translucent nodes cast colored shadows. This is expensive.");
+ gettext("Map shadows update frames");
+ gettext("Spread a complete update of shadow map over given amount of frames.\nHigher values might make shadows laggy, lower values\nwill consume more resources.\nMinimum value: 1; maximum value: 16");
+ gettext("Soft shadow radius");
+ gettext("Set the soft shadow radius size.\nLower values mean sharper shadows, bigger values mean softer shadows.\nMinimum value: 1.0; maximum value: 10.0");
+ gettext("Sky Body Orbit Tilt");
+ gettext("Set the tilt of Sun/Moon orbit in degrees.\nValue of 0 means no tilt / vertical orbit.\nMinimum value: 0.0; maximum value: 60.0");
gettext("Advanced");
gettext("Arm inertia");
gettext("Arm inertia, gives a more realistic movement of\nthe arm when the camera moves.");
@@ -275,15 +300,13 @@ fake_function() {
gettext("Near plane");
gettext("Camera 'near clipping plane' distance in nodes, between 0 and 0.25\nOnly works on GLES platforms. Most users will not need to change this.\nIncreasing can reduce artifacting on weaker GPUs.\n0.1 = Default, 0.25 = Good value for weaker tablets.");
gettext("Screen width");
- gettext("Width component of the initial window size.");
+ gettext("Width component of the initial window size. Ignored in fullscreen mode.");
gettext("Screen height");
- gettext("Height component of the initial window size.");
+ gettext("Height component of the initial window size. Ignored in fullscreen mode.");
gettext("Autosave screen size");
gettext("Save window size automatically when modified.");
gettext("Full screen");
gettext("Fullscreen mode.");
- gettext("Full screen BPP");
- gettext("Bits per pixel (aka color depth) in fullscreen mode.");
gettext("VSync");
gettext("Vertical screen synchronization.");
gettext("Field of view");
@@ -303,7 +326,7 @@ fake_function() {
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.\nA restart is required after changing this.\nNote: On Android, stick with OGLES1 if unsure! App may fail to start otherwise.\nOn other platforms, OpenGL is recommended.\nShaders are supported by OpenGL (desktop only) and OGLES2 (experimental)");
+ gettext("The rendering back-end.\nA restart is required after changing this.\nNote: On Android, stick with OGLES1 if unsure! App may fail to start otherwise.\nOn other platforms, OpenGL is recommended.\nShaders are supported by OpenGL (desktop only) and OGLES2 (experimental)");
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 factor");
@@ -335,7 +358,7 @@ fake_function() {
gettext("Crosshair color");
gettext("Crosshair color (R,G,B).\nAlso controls the object crosshair color");
gettext("Crosshair alpha");
- gettext("Crosshair alpha (opaqueness, between 0 and 255).\nAlso controls the object crosshair color");
+ gettext("Crosshair alpha (opaqueness, between 0 and 255).\nThis also applies to the object crosshair.");
gettext("Recent Chat Messages");
gettext("Maximum number of recent chat messages to show");
gettext("Desynchronize block animation");
@@ -343,7 +366,7 @@ fake_function() {
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("HUD scale factor");
- gettext("Modifies the size of the hudbar elements.");
+ gettext("Modifies the size of the HUD elements.");
gettext("Mesh cache");
gettext("Enables caching of facedir rotated meshes.");
gettext("Mapblock mesh generation delay");
@@ -385,8 +408,6 @@ fake_function() {
gettext("Delay showing tooltips, stated in milliseconds.");
gettext("Append item name");
gettext("Append item name to tooltip.");
- gettext("FreeType fonts");
- gettext("Whether FreeType fonts are used, requires FreeType support to be compiled in.\nIf disabled, bitmap and XML vectors fonts are used instead.");
gettext("Font bold by default");
gettext("Font italic by default");
gettext("Font shadow");
@@ -394,27 +415,25 @@ fake_function() {
gettext("Font shadow alpha");
gettext("Opaqueness (alpha) of the shadow behind the default font, between 0 and 255.");
gettext("Font size");
- gettext("Font size of the default font in point (pt).");
+ gettext("Font size of the default font where 1 unit = 1 pixel at 96 DPI");
+ gettext("Font size divisible by");
+ gettext("For pixel-style fonts that do not scale well, this ensures that font sizes used\nwith this font will always be divisible by this value, in pixels. For instance,\na pixel font 16 pixels tall should have this set to 16, so it will only ever be\nsized 16, 32, 48, etc., so a mod requesting a size of 25 will get 32.");
gettext("Regular font path");
- gettext("Path to the default font.\nIf “freetype†setting is enabled: Must be a TrueType font.\nIf “freetype†setting is disabled: Must be a bitmap or XML vectors font.\nThe fallback font will be used if the font cannot be loaded.");
+ gettext("Path to the default font. Must be a TrueType font.\nThe fallback font will be used if the font cannot be loaded.");
gettext("Bold font path");
gettext("Italic font path");
gettext("Bold and italic font path");
gettext("Monospace font size");
- gettext("Font size of the monospace font in point (pt).");
+ gettext("Font size of the monospace font where 1 unit = 1 pixel at 96 DPI");
+ gettext("Monospace font size divisible by");
+ gettext("For pixel-style fonts that do not scale well, this ensures that font sizes used\nwith this font will always be divisible by this value, in pixels. For instance,\na pixel font 16 pixels tall should have this set to 16, so it will only ever be\nsized 16, 32, 48, etc., so a mod requesting a size of 25 will get 32.");
gettext("Monospace font path");
- gettext("Path to the monospace font.\nIf “freetype†setting is enabled: Must be a TrueType font.\nIf “freetype†setting is disabled: Must be a bitmap or XML vectors font.\nThis font is used for e.g. the console and profiler screen.");
+ gettext("Path to the monospace font. Must be a TrueType font.\nThis font is used for e.g. the console and profiler screen.");
gettext("Bold monospace font path");
gettext("Italic monospace font path");
gettext("Bold and italic monospace font path");
- gettext("Fallback font size");
- gettext("Font size of the fallback font in point (pt).");
- gettext("Fallback font shadow");
- gettext("Shadow offset (in pixels) of the fallback font. If 0, then shadow will not be drawn.");
- gettext("Fallback font shadow alpha");
- gettext("Opaqueness (alpha) of the shadow behind the fallback font, between 0 and 255.");
gettext("Fallback font path");
- gettext("Path of the fallback font.\nIf “freetype†setting is enabled: Must be a TrueType font.\nIf “freetype†setting is disabled: Must be a bitmap or XML vectors font.\nThis font will be used for certain languages or if the default font is unavailable.");
+ gettext("Path of the fallback font. Must be a TrueType font.\nThis font will be used for certain languages or if the default font is unavailable.");
gettext("Chat font size");
gettext("Font size of the recent chat text and chat prompt in point (pt).\nValue 0 will use the default font size.");
gettext("Screenshot folder");
@@ -426,6 +445,8 @@ fake_function() {
gettext("Advanced");
gettext("DPI");
gettext("Adjust dpi configuration to your screen (non X11/Android only) e.g. for 4k screens.");
+ gettext("Display Density Scaling Factor");
+ gettext("Adjust the detected display density, used for scaling UI elements.");
gettext("Enable console window");
gettext("Windows systems only: Start Minetest with the command line window in the background.\nContains the same information as the file debug.txt (default name).");
gettext("Sound");
@@ -436,13 +457,17 @@ fake_function() {
gettext("Mute sound");
gettext("Whether to mute sounds. You can unmute sounds at any time, unless the\nsound system is disabled (enable_sound=false).\nIn-game, you can toggle the mute state with the mute key or by using the\npause menu.");
gettext("Client");
+ gettext("Chat weblinks");
+ gettext("Clickable weblinks (middle-click or Ctrl+left-click) enabled in chat console output.");
+ gettext("Weblink color");
+ gettext("Optional override for chat weblink color.");
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("Prometheus listener address");
- gettext("Prometheus listener address.\nIf minetest is compiled with ENABLE_PROMETHEUS option enabled,\nenable metrics listener for Prometheus on that address.\nMetrics can be fetch on http://127.0.0.1:30000/metrics");
+ gettext("Prometheus listener address.\nIf Minetest is compiled with ENABLE_PROMETHEUS option enabled,\nenable metrics listener for Prometheus on that address.\nMetrics can be fetched on http://127.0.0.1:30000/metrics");
gettext("Saving map received from server");
gettext("Save the map received by the client on disk.");
gettext("Connect to external media server");
@@ -498,7 +523,7 @@ fake_function() {
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("Map Compression Level for Network Transfer");
- gettext("ZLib compression level to use when sending mapblocks to the client.\n-1 - Zlib's default compression level\n0 - no compresson, fastest\n9 - best compression, slowest\n(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)");
+ gettext("Compression level to use when sending mapblocks to the client.\n-1 - use default compression level\n0 - least compression, fastest\n9 - best compression, slowest");
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.");
@@ -542,6 +567,8 @@ fake_function() {
gettext("If enabled, actions are recorded for rollback.\nThis option is only read when server starts.");
gettext("Chat message format");
gettext("Format of player chat messages. The following strings are valid placeholders:\n@name, @message, @timestamp (optional)");
+ gettext("Chat command time message threshold");
+ gettext("If the execution of a chat command takes longer than this specified time in\nseconds, add the time information to the chat command message");
gettext("Shutdown message");
gettext("A message to be displayed to all clients when the server shuts down.");
gettext("Crash message");
@@ -599,7 +626,7 @@ fake_function() {
gettext("Deprecated Lua API handling");
gettext("Handling for deprecated Lua API calls:\n- none: Do not log deprecated calls\n- log: mimic and log backtrace of deprecated call (default).\n- error: abort on usage of deprecated call (suggested for mod 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("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("Maximum objects per block");
@@ -607,7 +634,7 @@ fake_function() {
gettext("Synchronous SQLite");
gettext("See https://www.sqlite.org/pragma.html#pragma_synchronous");
gettext("Map Compression Level for Disk Storage");
- gettext("ZLib compression level to use when saving mapblocks to disk.\n-1 - Zlib's default compression level\n0 - no compresson, fastest\n9 - best compression, slowest\n(levels 1-3 use Zlib's \"fast\" method, 4-9 use the normal method)");
+ gettext("Compression level to use when saving mapblocks to disk.\n-1 - use default compression level\n0 - least compression, fastest\n9 - best compression, slowest");
gettext("Dedicated server step");
gettext("Length of a server tick and the interval at which objects are generally updated over\nnetwork.");
gettext("Active block management interval");
@@ -656,8 +683,8 @@ fake_function() {
gettext("Instrument the action function of Active Block Modifiers on registration.");
gettext("Loading Block Modifiers");
gettext("Instrument the action function of Loading Block Modifiers on registration.");
- gettext("Chatcommands");
- gettext("Instrument chatcommands on registration.");
+ gettext("Chat commands");
+ gettext("Instrument chat commands on registration.");
gettext("Global callbacks");
gettext("Instrument global callback functions on registration.\n(anything you pass to a minetest.register_*() function)");
gettext("Advanced");
@@ -679,14 +706,12 @@ fake_function() {
gettext("IPv6");
gettext("Enable IPv6 support (for both client and server).\nRequired for IPv6 connections to work at all.");
gettext("Advanced");
- gettext("cURL timeout");
- gettext("Default timeout for cURL, stated in milliseconds.\nOnly has an effect if compiled with cURL.");
+ gettext("cURL interactive timeout");
+ gettext("Maximum time an interactive request (e.g. server list fetch) may take, stated in milliseconds.");
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("Maximum time a file download (e.g. a mod download) may take, stated in milliseconds.");
gettext("Main menu script");
gettext("Replaces the default main menu with a custom one.");
gettext("Engine profiling data print interval");
@@ -701,7 +726,7 @@ fake_function() {
gettext("Map generation limit");
gettext("Limit of map generation, in nodes, in all 6 directions from (0, 0, 0).\nOnly mapchunks completely within the mapgen limit are generated.\nValue is stored per-world.");
gettext("Mapgen flags");
- gettext("Global map generation attributes.\nIn Mapgen v6 the 'decorations' flag controls all decorations except trees\nand junglegrass, in all other mapgens this flag controls all decorations.");
+ gettext("Global map generation attributes.\nIn Mapgen v6 the 'decorations' flag controls all decorations except trees\nand jungle grass, in all other mapgens this flag controls all decorations.");
gettext("Biome API temperature and humidity noise parameters");
gettext("Heat noise");
gettext("Temperature variation for biomes.");
diff --git a/src/skyparams.h b/src/skyparams.h
index 1de494d69..f7f694427 100644
--- a/src/skyparams.h
+++ b/src/skyparams.h
@@ -68,11 +68,36 @@ struct StarParams
f32 scale;
};
+struct CloudParams
+{
+ float density;
+ video::SColor color_bright;
+ video::SColor color_ambient;
+ float thickness;
+ float height;
+ v2f speed;
+};
+
// Utility class for setting default sky, sun, moon, stars values:
class SkyboxDefaults
{
public:
- const SkyColor getSkyColorDefaults()
+ SkyboxDefaults() = delete;
+
+ static const SkyboxParams getSkyDefaults()
+ {
+ SkyboxParams sky;
+ sky.bgcolor = video::SColor(255, 255, 255, 255);
+ sky.type = "regular";
+ sky.clouds = true;
+ sky.sky_color = getSkyColorDefaults();
+ sky.fog_sun_tint = video::SColor(255, 244, 125, 29);
+ sky.fog_moon_tint = video::SColorf(0.5, 0.6, 0.8, 1).toSColor();
+ sky.fog_tint_type = "default";
+ return sky;
+ }
+
+ static const SkyColor getSkyColorDefaults()
{
SkyColor sky;
// Horizon colors
@@ -87,7 +112,7 @@ public:
return sky;
}
- const SunParams getSunDefaults()
+ static const SunParams getSunDefaults()
{
SunParams sun;
sun.visible = true;
@@ -99,7 +124,7 @@ public:
return sun;
}
- const MoonParams getMoonDefaults()
+ static const MoonParams getMoonDefaults()
{
MoonParams moon;
moon.visible = true;
@@ -109,7 +134,7 @@ public:
return moon;
}
- const StarParams getStarDefaults()
+ static const StarParams getStarDefaults()
{
StarParams stars;
stars.visible = true;
@@ -118,4 +143,16 @@ public:
stars.scale = 1;
return stars;
}
+
+ static const CloudParams getCloudDefaults()
+ {
+ CloudParams clouds;
+ clouds.density = 0.4f;
+ clouds.color_bright = video::SColor(229, 240, 240, 255);
+ clouds.color_ambient = video::SColor(255, 0, 0, 0);
+ clouds.thickness = 16.0f;
+ clouds.height = 120;
+ clouds.speed = v2f(0.0f, -2.0f);
+ return clouds;
+ }
};
diff --git a/src/staticobject.cpp b/src/staticobject.cpp
index 86e455b9f..1160ec68f 100644
--- a/src/staticobject.cpp
+++ b/src/staticobject.cpp
@@ -37,6 +37,7 @@ void StaticObject::serialize(std::ostream &os)
// data
os<<serializeString16(data);
}
+
void StaticObject::deSerialize(std::istream &is, u8 version)
{
// type
@@ -49,6 +50,29 @@ void StaticObject::deSerialize(std::istream &is, u8 version)
void StaticObjectList::serialize(std::ostream &os)
{
+ // Check for problems first
+ auto problematic = [] (StaticObject &obj) -> bool {
+ if (obj.data.size() > U16_MAX) {
+ errorstream << "StaticObjectList::serialize(): "
+ "object has excessive static data (" << obj.data.size() <<
+ "), deleting it." << std::endl;
+ return true;
+ }
+ return false;
+ };
+ for (auto it = m_stored.begin(); it != m_stored.end(); ) {
+ if (problematic(*it))
+ it = m_stored.erase(it);
+ else
+ it++;
+ }
+ for (auto it = m_active.begin(); it != m_active.end(); ) {
+ if (problematic(it->second))
+ it = m_active.erase(it);
+ else
+ it++;
+ }
+
// version
u8 version = 0;
writeU8(os, version);
diff --git a/src/tool.cpp b/src/tool.cpp
index 90f4f9c12..075c6b3c5 100644
--- a/src/tool.cpp
+++ b/src/tool.cpp
@@ -23,6 +23,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "log.h"
#include "inventory.h"
#include "exceptions.h"
+#include "convert_json.h"
#include "util/serialize.h"
#include "util/numeric.h"
@@ -142,7 +143,7 @@ void ToolCapabilities::serializeJson(std::ostream &os) const
}
root["damage_groups"] = damage_groups_object;
- os << root;
+ fastWriteJson(root, os);
}
void ToolCapabilities::deserializeJson(std::istream &is)
@@ -182,9 +183,74 @@ void ToolCapabilities::deserializeJson(std::istream &is)
}
}
+static u32 calculateResultWear(const u32 uses, const u16 initial_wear)
+{
+ if (uses == 0) {
+ // Trivial case: Infinite uses
+ return 0;
+ }
+ /* Finite uses. This is not trivial,
+ as the maximum wear is not neatly evenly divisible by
+ most possible uses numbers. For example, for 128
+ uses, the calculation of wear is trivial, as
+ 65536 / 128 uses = 512 wear,
+ so the tool will get 512 wear 128 times in its lifetime.
+ But for a number like 130, this does not work:
+ 65536 / 130 uses = 504.123... wear.
+ Since wear must be an integer, we will get
+ 504*130 = 65520, which would lead to the wrong number
+ of uses.
+
+ Instead, we partition the "wear range" into blocks:
+ A block represents a single use and can be
+ of two possible sizes: normal and oversized.
+ A normal block is equal to floor(65536 / uses).
+ An oversized block is a normal block plus 1.
+ Then we determine how many oversized and normal
+ blocks we need and finally, whether we add
+ the normal wear or the oversized wear.
+
+ Example for 130 uses:
+ * Normal wear = 504
+ * Number of normal blocks = 114
+ * Oversized wear = 505
+ * Number of oversized blocks = 16
+
+ If we add everything together, we get:
+ 114*504 + 16*505 = 65536
+ */
+ u32 result_wear;
+ u32 wear_normal = ((U16_MAX+1) / uses);
+ // Will be non-zero if its not evenly divisible
+ u16 blocks_oversize = (U16_MAX+1) % uses;
+ // Whether to add one extra wear point in case
+ // of oversized wear.
+ u16 wear_extra = 0;
+ if (blocks_oversize > 0) {
+ u16 blocks_normal = uses - blocks_oversize;
+ /* When the wear has reached this value, we
+ know that wear_normal has been applied
+ for blocks_normal times, therefore,
+ only oversized blocks remain.
+ This also implies the raw tool wear number
+ increases a bit faster after this point,
+ but this should be barely noticable by the
+ player.
+ */
+ u16 wear_extra_at = blocks_normal * wear_normal;
+ if (initial_wear >= wear_extra_at) {
+ wear_extra = 1;
+ }
+ }
+ result_wear = wear_normal + wear_extra;
+ return result_wear;
+}
+
DigParams getDigParams(const ItemGroupList &groups,
- const ToolCapabilities *tp)
+ const ToolCapabilities *tp,
+ const u16 initial_wear)
{
+
// Group dig_immediate defaults to fixed time and no wear
if (tp->groupcaps.find("dig_immediate") == tp->groupcaps.cend()) {
switch (itemgroup_get(groups, "dig_immediate")) {
@@ -200,7 +266,7 @@ DigParams getDigParams(const ItemGroupList &groups,
// Values to be returned (with a bit of conversion)
bool result_diggable = false;
float result_time = 0.0;
- float result_wear = 0.0;
+ u32 result_wear = 0;
std::string result_main_group;
int level = itemgroup_get(groups, "level");
@@ -223,22 +289,24 @@ DigParams getDigParams(const ItemGroupList &groups,
if (!result_diggable || time < result_time) {
result_time = time;
result_diggable = true;
- if (cap.uses != 0)
- result_wear = 1.0 / cap.uses / pow(3.0, leveldiff);
- else
- result_wear = 0;
+ // The actual number of uses increases
+ // exponentially with leveldiff.
+ // If the levels are equal, real_uses equals cap.uses.
+ u32 real_uses = cap.uses * pow(3.0, leveldiff);
+ real_uses = MYMIN(real_uses, U16_MAX);
+ result_wear = calculateResultWear(real_uses, initial_wear);
result_main_group = groupname;
}
}
- u16 wear_i = U16_MAX * result_wear;
- return DigParams(result_diggable, result_time, wear_i, result_main_group);
+ return DigParams(result_diggable, result_time, result_wear, result_main_group);
}
HitParams getHitParams(const ItemGroupList &armor_groups,
- const ToolCapabilities *tp, float time_from_last_punch)
+ const ToolCapabilities *tp, float time_from_last_punch,
+ u16 initial_wear)
{
- s16 damage = 0;
+ s32 damage = 0;
float result_wear = 0.0f;
float punch_interval_multiplier =
rangelim(time_from_last_punch / tp->full_punch_interval, 0.0f, 1.0f);
@@ -248,10 +316,14 @@ HitParams getHitParams(const ItemGroupList &armor_groups,
damage += damageGroup.second * punch_interval_multiplier * armor / 100.0;
}
- if (tp->punch_attack_uses > 0)
- result_wear = 1.0f / tp->punch_attack_uses * punch_interval_multiplier;
+ if (tp->punch_attack_uses > 0) {
+ result_wear = calculateResultWear(tp->punch_attack_uses, initial_wear);
+ result_wear *= punch_interval_multiplier;
+ }
+ // Keep damage in sane bounds for simplicity
+ damage = rangelim(damage, -U16_MAX, U16_MAX);
- u16 wear_i = U16_MAX * result_wear;
+ u32 wear_i = (u32) result_wear;
return {damage, wear_i};
}
@@ -265,7 +337,8 @@ PunchDamageResult getPunchDamage(
const ItemGroupList &armor_groups,
const ToolCapabilities *toolcap,
const ItemStack *punchitem,
- float time_from_last_punch
+ float time_from_last_punch,
+ u16 initial_wear
){
bool do_hit = true;
{
@@ -285,7 +358,8 @@ PunchDamageResult getPunchDamage(
if(do_hit)
{
HitParams hitparams = getHitParams(armor_groups, toolcap,
- time_from_last_punch);
+ time_from_last_punch,
+ punchitem->wear);
result.did_punch = true;
result.wear = hitparams.wear;
result.damage = hitparams.hp;
diff --git a/src/tool.h b/src/tool.h
index 59dd501f5..8409f59af 100644
--- a/src/tool.h
+++ b/src/tool.h
@@ -88,10 +88,10 @@ struct DigParams
// Digging time in seconds
float time;
// Caused wear
- u16 wear;
+ u32 wear; // u32 because wear could be 65536 (single-use tool)
std::string main_group;
- DigParams(bool a_diggable = false, float a_time = 0.0f, u16 a_wear = 0,
+ DigParams(bool a_diggable = false, float a_time = 0.0f, u32 a_wear = 0,
const std::string &a_main_group = ""):
diggable(a_diggable),
time(a_time),
@@ -101,21 +101,24 @@ struct DigParams
};
DigParams getDigParams(const ItemGroupList &groups,
- const ToolCapabilities *tp);
+ const ToolCapabilities *tp,
+ const u16 initial_wear = 0);
struct HitParams
{
- s16 hp;
- u16 wear;
+ s32 hp;
+ // Caused wear
+ u32 wear; // u32 because wear could be 65536 (single-use weapon)
- HitParams(s16 hp_ = 0, u16 wear_ = 0):
+ HitParams(s32 hp_ = 0, u32 wear_ = 0):
hp(hp_),
wear(wear_)
{}
};
HitParams getHitParams(const ItemGroupList &armor_groups,
- const ToolCapabilities *tp, float time_from_last_punch);
+ const ToolCapabilities *tp, float time_from_last_punch,
+ u16 initial_wear = 0);
HitParams getHitParams(const ItemGroupList &armor_groups,
const ToolCapabilities *tp);
@@ -135,7 +138,8 @@ PunchDamageResult getPunchDamage(
const ItemGroupList &armor_groups,
const ToolCapabilities *toolcap,
const ItemStack *punchitem,
- float time_from_last_punch
+ float time_from_last_punch,
+ u16 initial_wear = 0
);
f32 getToolRange(const ItemDefinition &def_selected, const ItemDefinition &def_hand);
diff --git a/src/translation.cpp b/src/translation.cpp
index 55c958fa2..1e43b0894 100644
--- a/src/translation.cpp
+++ b/src/translation.cpp
@@ -64,7 +64,13 @@ void Translations::loadTranslation(const std::string &data)
line.resize(line.length() - 1);
if (str_starts_with(line, "# textdomain:")) {
- textdomain = utf8_to_wide(trim(str_split(line, ':')[1]));
+ auto parts = str_split(line, ':');
+ if (parts.size() < 2) {
+ errorstream << "Invalid textdomain translation line \"" << line
+ << "\"" << std::endl;
+ continue;
+ }
+ textdomain = utf8_to_wide(trim(parts[1]));
}
if (line.empty() || line[0] == '#')
continue;
diff --git a/src/unittest/CMakeLists.txt b/src/unittest/CMakeLists.txt
index 5703b8906..92f31ecac 100644
--- a/src/unittest/CMakeLists.txt
+++ b/src/unittest/CMakeLists.txt
@@ -11,14 +11,15 @@ set (UNITTEST_SRCS
${CMAKE_CURRENT_SOURCE_DIR}/test_filepath.cpp
${CMAKE_CURRENT_SOURCE_DIR}/test_inventory.cpp
${CMAKE_CURRENT_SOURCE_DIR}/test_irrptr.cpp
+ ${CMAKE_CURRENT_SOURCE_DIR}/test_map.cpp
${CMAKE_CURRENT_SOURCE_DIR}/test_map_settings_manager.cpp
${CMAKE_CURRENT_SOURCE_DIR}/test_mapnode.cpp
${CMAKE_CURRENT_SOURCE_DIR}/test_modchannels.cpp
+ ${CMAKE_CURRENT_SOURCE_DIR}/test_modmetadatadatabase.cpp
${CMAKE_CURRENT_SOURCE_DIR}/test_nodedef.cpp
${CMAKE_CURRENT_SOURCE_DIR}/test_noderesolver.cpp
${CMAKE_CURRENT_SOURCE_DIR}/test_noise.cpp
${CMAKE_CURRENT_SOURCE_DIR}/test_objdef.cpp
- ${CMAKE_CURRENT_SOURCE_DIR}/test_player.cpp
${CMAKE_CURRENT_SOURCE_DIR}/test_profiler.cpp
${CMAKE_CURRENT_SOURCE_DIR}/test_random.cpp
${CMAKE_CURRENT_SOURCE_DIR}/test_schematic.cpp
@@ -33,6 +34,7 @@ set (UNITTEST_SRCS
${CMAKE_CURRENT_SOURCE_DIR}/test_voxelarea.cpp
${CMAKE_CURRENT_SOURCE_DIR}/test_voxelalgorithms.cpp
${CMAKE_CURRENT_SOURCE_DIR}/test_voxelmanipulator.cpp
+ ${CMAKE_CURRENT_SOURCE_DIR}/test_gettext.cpp
PARENT_SCOPE)
set (UNITTEST_CLIENT_SRCS
@@ -44,6 +46,7 @@ set (UNITTEST_CLIENT_SRCS
set (TEST_WORLDDIR ${CMAKE_CURRENT_SOURCE_DIR}/test_world)
set (TEST_SUBGAME_PATH ${CMAKE_CURRENT_SOURCE_DIR}/../../games/devtest)
+set (TEST_MOD_PATH ${CMAKE_CURRENT_SOURCE_DIR}/test_mod)
configure_file(
"${CMAKE_CURRENT_SOURCE_DIR}/test_config.h.in"
diff --git a/src/unittest/test.cpp b/src/unittest/test.cpp
index af324e1b1..f223d567e 100644
--- a/src/unittest/test.cpp
+++ b/src/unittest/test.cpp
@@ -25,6 +25,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "gamedef.h"
#include "modchannels.h"
#include "content/mods.h"
+#include "database/database-dummy.h"
#include "util/numeric.h"
#include "porting.h"
@@ -55,6 +56,7 @@ public:
scene::ISceneManager *getSceneManager() { return m_scenemgr; }
IRollbackManager *getRollbackManager() { return m_rollbackmgr; }
EmergeManager *getEmergeManager() { return m_emergemgr; }
+ ModMetadataDatabase *getModStorageDatabase() { return m_mod_storage_database; }
scene::IAnimatedMesh *getMesh(const std::string &filename) { return NULL; }
bool checkLocalPrivilege(const std::string &priv) { return false; }
@@ -68,7 +70,6 @@ public:
return testmodspec;
}
virtual const ModSpec* getModSpec(const std::string &modname) const { return NULL; }
- virtual std::string getModStoragePath() const { return "."; }
virtual bool registerModStorage(ModMetadata *meta) { return true; }
virtual void unregisterModStorage(const std::string &name) {}
bool joinModChannel(const std::string &channel);
@@ -89,11 +90,13 @@ private:
scene::ISceneManager *m_scenemgr = nullptr;
IRollbackManager *m_rollbackmgr = nullptr;
EmergeManager *m_emergemgr = nullptr;
+ ModMetadataDatabase *m_mod_storage_database = nullptr;
std::unique_ptr<ModChannelMgr> m_modchannel_mgr;
};
TestGameDef::TestGameDef() :
+ m_mod_storage_database(new Database_Dummy()),
m_modchannel_mgr(new ModChannelMgr())
{
m_itemdef = createItemDefManager();
@@ -107,6 +110,7 @@ TestGameDef::~TestGameDef()
{
delete m_itemdef;
delete m_nodedef;
+ delete m_mod_storage_database;
}
diff --git a/src/unittest/test_areastore.cpp b/src/unittest/test_areastore.cpp
index 691cd69d2..2af3ca90c 100644
--- a/src/unittest/test_areastore.cpp
+++ b/src/unittest/test_areastore.cpp
@@ -135,7 +135,7 @@ void TestAreaStore::testSerialization()
b.data = "Area BB";
store.insertArea(&b);
- std::ostringstream os;
+ std::ostringstream os(std::ios_base::binary);
store.serialize(os);
std::string str = os.str();
@@ -157,7 +157,7 @@ void TestAreaStore::testSerialization()
UASSERTEQ(const std::string &, str, str_wanted);
- std::istringstream is(str);
+ std::istringstream is(str, std::ios_base::binary);
store.deserialize(is);
// deserialize() doesn't clear the store
diff --git a/src/unittest/test_clientactiveobjectmgr.cpp b/src/unittest/test_clientactiveobjectmgr.cpp
index 4d2846c8d..2d508cf32 100644
--- a/src/unittest/test_clientactiveobjectmgr.cpp
+++ b/src/unittest/test_clientactiveobjectmgr.cpp
@@ -29,6 +29,7 @@ public:
TestClientActiveObject() : ClientActiveObject(0, nullptr, nullptr) {}
~TestClientActiveObject() = default;
ActiveObjectType getType() const { return ACTIVEOBJECT_TYPE_TEST; }
+ virtual void addToScene(ITextureSource *tsrc, scene::ISceneManager *smgr) {}
};
class TestClientActiveObjectMgr : public TestBase
diff --git a/src/unittest/test_compression.cpp b/src/unittest/test_compression.cpp
index dfcadd4b2..a96282f58 100644
--- a/src/unittest/test_compression.cpp
+++ b/src/unittest/test_compression.cpp
@@ -37,6 +37,7 @@ public:
void testRLECompression();
void testZlibCompression();
void testZlibLargeData();
+ void testZstdLargeData();
void testZlibLimit();
void _testZlibLimit(u32 size, u32 limit);
};
@@ -48,6 +49,7 @@ void TestCompression::runTests(IGameDef *gamedef)
TEST(testRLECompression);
TEST(testZlibCompression);
TEST(testZlibLargeData);
+ TEST(testZstdLargeData);
TEST(testZlibLimit);
}
@@ -111,7 +113,7 @@ void TestCompression::testZlibCompression()
fromdata[3]=1;
std::ostringstream os(std::ios_base::binary);
- compress(fromdata, os, SER_FMT_VER_HIGHEST_READ);
+ compressZlib(*fromdata, fromdata.getSize(), os);
std::string str_out = os.str();
@@ -124,7 +126,7 @@ void TestCompression::testZlibCompression()
std::istringstream is(str_out, std::ios_base::binary);
std::ostringstream os2(std::ios_base::binary);
- decompress(is, os2, SER_FMT_VER_HIGHEST_READ);
+ decompressZlib(is, os2);
std::string str_out2 = os2.str();
infostream << "decompress: ";
@@ -174,6 +176,42 @@ void TestCompression::testZlibLargeData()
}
}
+void TestCompression::testZstdLargeData()
+{
+ infostream << "Test: Testing zstd wrappers with a large amount "
+ "of pseudorandom data" << std::endl;
+
+ u32 size = 500000;
+ infostream << "Test: Input size of large compressZstd is "
+ << size << std::endl;
+
+ std::string data_in;
+ data_in.resize(size);
+ PseudoRandom pseudorandom(9420);
+ for (u32 i = 0; i < size; i++)
+ data_in[i] = pseudorandom.range(0, 255);
+
+ std::ostringstream os_compressed(std::ios::binary);
+ compressZstd(data_in, os_compressed, 0);
+ infostream << "Test: Output size of large compressZstd is "
+ << os_compressed.str().size()<<std::endl;
+
+ std::istringstream is_compressed(os_compressed.str(), std::ios::binary);
+ std::ostringstream os_decompressed(std::ios::binary);
+ decompressZstd(is_compressed, os_decompressed);
+ infostream << "Test: Output size of large decompressZstd is "
+ << os_decompressed.str().size() << std::endl;
+
+ std::string str_decompressed = os_decompressed.str();
+ UASSERTEQ(size_t, str_decompressed.size(), data_in.size());
+
+ for (u32 i = 0; i < size && i < str_decompressed.size(); i++) {
+ UTEST(str_decompressed[i] == data_in[i],
+ "index out[%i]=%i differs from in[%i]=%i",
+ i, str_decompressed[i], i, data_in[i]);
+ }
+}
+
void TestCompression::testZlibLimit()
{
// edge cases
diff --git a/src/unittest/test_config.h.in b/src/unittest/test_config.h.in
index 36850b00d..50d2398e4 100644
--- a/src/unittest/test_config.h.in
+++ b/src/unittest/test_config.h.in
@@ -4,3 +4,4 @@
#define TEST_WORLDDIR "@TEST_WORLDDIR@"
#define TEST_SUBGAME_PATH "@TEST_SUBGAME_PATH@"
+#define TEST_MOD_PATH "@TEST_MOD_PATH@"
diff --git a/src/unittest/test_connection.cpp b/src/unittest/test_connection.cpp
index 23b7e9105..04fea90d6 100644
--- a/src/unittest/test_connection.cpp
+++ b/src/unittest/test_connection.cpp
@@ -124,7 +124,7 @@ void TestConnection::testHelpers()
Address a(127,0,0,1, 10);
const u16 seqnum = 34352;
- con::BufferedPacket p1 = con::makePacket(a, data1,
+ con::BufferedPacketPtr p1 = con::makePacket(a, data1,
proto_id, peer_id, channel);
/*
We should now have a packet with this data:
@@ -135,10 +135,10 @@ void TestConnection::testHelpers()
Data:
[7] u8 data1[0]
*/
- UASSERT(readU32(&p1.data[0]) == proto_id);
- UASSERT(readU16(&p1.data[4]) == peer_id);
- UASSERT(readU8(&p1.data[6]) == channel);
- UASSERT(readU8(&p1.data[7]) == data1[0]);
+ UASSERT(readU32(&p1->data[0]) == proto_id);
+ UASSERT(readU16(&p1->data[4]) == peer_id);
+ UASSERT(readU8(&p1->data[6]) == channel);
+ UASSERT(readU8(&p1->data[7]) == data1[0]);
//infostream<<"initial data1[0]="<<((u32)data1[0]&0xff)<<std::endl;
diff --git a/src/unittest/test_gettext.cpp b/src/unittest/test_gettext.cpp
new file mode 100644
index 000000000..338a416d7
--- /dev/null
+++ b/src/unittest/test_gettext.cpp
@@ -0,0 +1,43 @@
+#include "test.h"
+#include "porting.h"
+#include "gettext.h"
+
+class TestGettext : public TestBase
+{
+public:
+ TestGettext() {
+ TestManager::registerTestModule(this);
+ }
+
+ const char *getName() { return "TestGettext"; }
+
+ void runTests(IGameDef *gamedef);
+
+ void testFmtgettext();
+};
+
+static TestGettext g_test_instance;
+
+void TestGettext::runTests(IGameDef *gamedef)
+{
+ TEST(testFmtgettext);
+}
+
+// Make sure updatepo.sh does not pick up the strings
+#define dummyname fmtgettext
+
+void TestGettext::testFmtgettext()
+{
+ std::string buf = dummyname("sample text %d", 12);
+ UASSERTEQ(std::string, buf, "sample text 12");
+
+ std::string src, expect;
+ src = "You are about to join this server with the name \"%s\".\n";
+ expect = "You are about to join this server with the name \"foo\".\n";
+ for (int i = 0; i < 20; i++) {
+ src.append("loooong text");
+ expect.append("loooong text");
+ }
+ buf = dummyname(src.c_str(), "foo");
+ UASSERTEQ(const std::string &, buf, expect);
+}
diff --git a/src/unittest/test_irrptr.cpp b/src/unittest/test_irrptr.cpp
index aa857ff46..3484f1514 100644
--- a/src/unittest/test_irrptr.cpp
+++ b/src/unittest/test_irrptr.cpp
@@ -91,6 +91,12 @@ void TestIrrPtr::testRefCounting()
obj->getReferenceCount());
}
+#if defined(__clang__)
+ #pragma GCC diagnostic push
+ #pragma GCC diagnostic ignored "-Wself-assign-overloaded"
+ #pragma GCC diagnostic ignored "-Wself-move"
+#endif
+
void TestIrrPtr::testSelfAssignment()
{
irr_ptr<IReferenceCounted> p1{new IReferenceCounted()};
@@ -129,3 +135,7 @@ void TestIrrPtr::testNullHandling()
UASSERT(!p2);
UASSERT(!p3);
}
+
+#if defined(__clang__)
+ #pragma GCC diagnostic pop
+#endif
diff --git a/src/unittest/test_map.cpp b/src/unittest/test_map.cpp
new file mode 100644
index 000000000..82e55e1aa
--- /dev/null
+++ b/src/unittest/test_map.cpp
@@ -0,0 +1,68 @@
+/*
+Minetest
+
+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
+(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 <cstdio>
+#include "mapblock.h"
+
+class TestMap : public TestBase
+{
+public:
+ TestMap() { TestManager::registerTestModule(this); }
+ const char *getName() { return "TestMap"; }
+
+ void runTests(IGameDef *gamedef);
+
+ void testMaxMapgenLimit();
+};
+
+static TestMap g_test_instance;
+
+void TestMap::runTests(IGameDef *gamedef)
+{
+ TEST(testMaxMapgenLimit);
+}
+
+////////////////////////////////////////////////////////////////////////////////
+
+void TestMap::testMaxMapgenLimit()
+{
+ // limit must end on a mapblock boundary
+ UASSERTEQ(int, MAX_MAP_GENERATION_LIMIT % MAP_BLOCKSIZE, MAP_BLOCKSIZE - 1);
+
+ // objectpos_over_limit should do exactly this except the last node
+ // actually spans from LIMIT-0.5 to LIMIT+0.5
+ float limit_times_bs = MAX_MAP_GENERATION_LIMIT * BS;
+ UASSERT(objectpos_over_limit(v3f(limit_times_bs-BS/2)) == false);
+ UASSERT(objectpos_over_limit(v3f(limit_times_bs)) == false);
+ UASSERT(objectpos_over_limit(v3f(limit_times_bs+BS/2)) == false);
+ UASSERT(objectpos_over_limit(v3f(limit_times_bs+BS)) == true);
+
+ UASSERT(objectpos_over_limit(v3f(-limit_times_bs+BS/2)) == false);
+ UASSERT(objectpos_over_limit(v3f(-limit_times_bs)) == false);
+ UASSERT(objectpos_over_limit(v3f(-limit_times_bs-BS/2)) == false);
+ UASSERT(objectpos_over_limit(v3f(-limit_times_bs-BS)) == true);
+
+ // blockpos_over_max_limit
+ s16 limit_block = MAX_MAP_GENERATION_LIMIT / MAP_BLOCKSIZE;
+ UASSERT(blockpos_over_max_limit(v3s16(limit_block)) == false);
+ UASSERT(blockpos_over_max_limit(v3s16(limit_block+1)) == true);
+ UASSERT(blockpos_over_max_limit(v3s16(-limit_block)) == false);
+ UASSERT(blockpos_over_max_limit(v3s16(-limit_block-1)) == true);
+}
diff --git a/src/unittest/test_map_settings_manager.cpp b/src/unittest/test_map_settings_manager.cpp
index 81ca68705..17c31fe79 100644
--- a/src/unittest/test_map_settings_manager.cpp
+++ b/src/unittest/test_map_settings_manager.cpp
@@ -148,6 +148,11 @@ void TestMapSettingsManager::testMapSettingsManager()
check_noise_params(&dummy, &script_np_factor);
}
+ // The settings manager MUST leave user settings alone
+ mgr.setMapSetting("testname", "1");
+ mgr.setMapSetting("testname", "1", true);
+ UASSERT(!Settings::getLayer(SL_GLOBAL)->exists("testname"));
+
// Now make our Params and see if the values are correctly sourced
MapgenParams *params = mgr.makeMapgenParams();
UASSERT(params->mgtype == MAPGEN_V5);
diff --git a/src/unittest/test_mod/test_mod/init.lua b/src/unittest/test_mod/test_mod/init.lua
new file mode 100644
index 000000000..724a863f5
--- /dev/null
+++ b/src/unittest/test_mod/test_mod/init.lua
@@ -0,0 +1 @@
+-- deliberately empty
diff --git a/src/unittest/test_mod/test_mod/mod.conf b/src/unittest/test_mod/test_mod/mod.conf
new file mode 100644
index 000000000..56c64b2d8
--- /dev/null
+++ b/src/unittest/test_mod/test_mod/mod.conf
@@ -0,0 +1,2 @@
+name = test_mod
+description = A mod doing nothing, to test if MINETEST_MOD_PATH is recognised
diff --git a/src/unittest/test_modmetadatadatabase.cpp b/src/unittest/test_modmetadatadatabase.cpp
new file mode 100644
index 000000000..be97fae5e
--- /dev/null
+++ b/src/unittest/test_modmetadatadatabase.cpp
@@ -0,0 +1,253 @@
+/*
+Minetest
+Copyright (C) 2018 bendeutsch, Ben Deutsch <ben@bendeutsch.de>
+Copyright (C) 2021 TurkeyMcMac, Jude Melton-Houghton <jwmhjwmh@gmail.com>
+
+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
+(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.
+*/
+
+// This file is an edited copy of test_authdatabase.cpp
+
+#include "test.h"
+
+#include <algorithm>
+#include "database/database-files.h"
+#include "database/database-sqlite3.h"
+#include "filesys.h"
+
+namespace
+{
+// Anonymous namespace to create classes that are only
+// visible to this file
+//
+// These are helpers that return a *ModMetadataDatabase and
+// allow us to run the same tests on different databases and
+// database acquisition strategies.
+
+class ModMetadataDatabaseProvider
+{
+public:
+ virtual ~ModMetadataDatabaseProvider() = default;
+ virtual ModMetadataDatabase *getModMetadataDatabase() = 0;
+};
+
+class FixedProvider : public ModMetadataDatabaseProvider
+{
+public:
+ FixedProvider(ModMetadataDatabase *mod_meta_db) : mod_meta_db(mod_meta_db){};
+ virtual ~FixedProvider(){};
+ virtual ModMetadataDatabase *getModMetadataDatabase() { return mod_meta_db; };
+
+private:
+ ModMetadataDatabase *mod_meta_db;
+};
+
+class FilesProvider : public ModMetadataDatabaseProvider
+{
+public:
+ FilesProvider(const std::string &dir) : dir(dir){};
+ virtual ~FilesProvider()
+ {
+ if (mod_meta_db)
+ mod_meta_db->endSave();
+ delete mod_meta_db;
+ }
+ virtual ModMetadataDatabase *getModMetadataDatabase()
+ {
+ if (mod_meta_db)
+ mod_meta_db->endSave();
+ delete mod_meta_db;
+ mod_meta_db = new ModMetadataDatabaseFiles(dir);
+ mod_meta_db->beginSave();
+ return mod_meta_db;
+ };
+
+private:
+ std::string dir;
+ ModMetadataDatabase *mod_meta_db = nullptr;
+};
+
+class SQLite3Provider : public ModMetadataDatabaseProvider
+{
+public:
+ SQLite3Provider(const std::string &dir) : dir(dir){};
+ virtual ~SQLite3Provider()
+ {
+ if (mod_meta_db)
+ mod_meta_db->endSave();
+ delete mod_meta_db;
+ }
+ virtual ModMetadataDatabase *getModMetadataDatabase()
+ {
+ if (mod_meta_db)
+ mod_meta_db->endSave();
+ delete mod_meta_db;
+ mod_meta_db = new ModMetadataDatabaseSQLite3(dir);
+ mod_meta_db->beginSave();
+ return mod_meta_db;
+ };
+
+private:
+ std::string dir;
+ ModMetadataDatabase *mod_meta_db = nullptr;
+};
+}
+
+class TestModMetadataDatabase : public TestBase
+{
+public:
+ TestModMetadataDatabase() { TestManager::registerTestModule(this); }
+ const char *getName() { return "TestModMetadataDatabase"; }
+
+ void runTests(IGameDef *gamedef);
+ void runTestsForCurrentDB();
+
+ void testRecallFail();
+ void testCreate();
+ void testRecall();
+ void testChange();
+ void testRecallChanged();
+ void testListMods();
+ void testRemove();
+
+private:
+ ModMetadataDatabaseProvider *mod_meta_provider;
+};
+
+static TestModMetadataDatabase g_test_instance;
+
+void TestModMetadataDatabase::runTests(IGameDef *gamedef)
+{
+ // fixed directory, for persistence
+ thread_local const std::string test_dir = getTestTempDirectory();
+
+ // Each set of tests is run twice for each database type:
+ // one where we reuse the same ModMetadataDatabase object (to test local caching),
+ // and one where we create a new ModMetadataDatabase object for each call
+ // (to test actual persistence).
+
+ rawstream << "-------- Files database (same object)" << std::endl;
+
+ ModMetadataDatabase *mod_meta_db = new ModMetadataDatabaseFiles(test_dir);
+ mod_meta_provider = new FixedProvider(mod_meta_db);
+
+ runTestsForCurrentDB();
+
+ delete mod_meta_db;
+ delete mod_meta_provider;
+
+ // reset database
+ fs::RecursiveDelete(test_dir + DIR_DELIM + "mod_storage");
+
+ rawstream << "-------- Files database (new objects)" << std::endl;
+
+ mod_meta_provider = new FilesProvider(test_dir);
+
+ runTestsForCurrentDB();
+
+ delete mod_meta_provider;
+
+ rawstream << "-------- SQLite3 database (same object)" << std::endl;
+
+ mod_meta_db = new ModMetadataDatabaseSQLite3(test_dir);
+ mod_meta_provider = new FixedProvider(mod_meta_db);
+
+ runTestsForCurrentDB();
+
+ delete mod_meta_db;
+ delete mod_meta_provider;
+
+ // reset database
+ fs::DeleteSingleFileOrEmptyDirectory(test_dir + DIR_DELIM + "mod_storage.sqlite");
+
+ rawstream << "-------- SQLite3 database (new objects)" << std::endl;
+
+ mod_meta_provider = new SQLite3Provider(test_dir);
+
+ runTestsForCurrentDB();
+
+ delete mod_meta_provider;
+}
+
+////////////////////////////////////////////////////////////////////////////////
+
+void TestModMetadataDatabase::runTestsForCurrentDB()
+{
+ TEST(testRecallFail);
+ TEST(testCreate);
+ TEST(testRecall);
+ TEST(testChange);
+ TEST(testRecallChanged);
+ TEST(testListMods);
+ TEST(testRemove);
+ TEST(testRecallFail);
+}
+
+void TestModMetadataDatabase::testRecallFail()
+{
+ ModMetadataDatabase *mod_meta_db = mod_meta_provider->getModMetadataDatabase();
+ StringMap recalled;
+ mod_meta_db->getModEntries("mod1", &recalled);
+ UASSERT(recalled.empty());
+}
+
+void TestModMetadataDatabase::testCreate()
+{
+ ModMetadataDatabase *mod_meta_db = mod_meta_provider->getModMetadataDatabase();
+ StringMap recalled;
+ UASSERT(mod_meta_db->setModEntry("mod1", "key1", "value1"));
+}
+
+void TestModMetadataDatabase::testRecall()
+{
+ ModMetadataDatabase *mod_meta_db = mod_meta_provider->getModMetadataDatabase();
+ StringMap recalled;
+ mod_meta_db->getModEntries("mod1", &recalled);
+ UASSERT(recalled.size() == 1);
+ UASSERT(recalled["key1"] == "value1");
+}
+
+void TestModMetadataDatabase::testChange()
+{
+ ModMetadataDatabase *mod_meta_db = mod_meta_provider->getModMetadataDatabase();
+ StringMap recalled;
+ UASSERT(mod_meta_db->setModEntry("mod1", "key1", "value2"));
+}
+
+void TestModMetadataDatabase::testRecallChanged()
+{
+ ModMetadataDatabase *mod_meta_db = mod_meta_provider->getModMetadataDatabase();
+ StringMap recalled;
+ mod_meta_db->getModEntries("mod1", &recalled);
+ UASSERT(recalled.size() == 1);
+ UASSERT(recalled["key1"] == "value2");
+}
+
+void TestModMetadataDatabase::testListMods()
+{
+ ModMetadataDatabase *mod_meta_db = mod_meta_provider->getModMetadataDatabase();
+ UASSERT(mod_meta_db->setModEntry("mod2", "key1", "value1"));
+ std::vector<std::string> mod_list;
+ mod_meta_db->listMods(&mod_list);
+ UASSERT(mod_list.size() == 2);
+ UASSERT(std::find(mod_list.cbegin(), mod_list.cend(), "mod1") != mod_list.cend());
+ UASSERT(std::find(mod_list.cbegin(), mod_list.cend(), "mod2") != mod_list.cend());
+}
+
+void TestModMetadataDatabase::testRemove()
+{
+ ModMetadataDatabase *mod_meta_db = mod_meta_provider->getModMetadataDatabase();
+ UASSERT(mod_meta_db->removeModEntry("mod1", "key1"));
+}
diff --git a/src/unittest/test_noderesolver.cpp b/src/unittest/test_noderesolver.cpp
index 28da43620..ed66093a9 100644
--- a/src/unittest/test_noderesolver.cpp
+++ b/src/unittest/test_noderesolver.cpp
@@ -56,6 +56,8 @@ void TestNodeResolver::runTests(IGameDef *gamedef)
class Foobar : public NodeResolver {
public:
+ friend class TestNodeResolver; // m_ndef
+
void resolveNodeNames();
content_t test_nr_node1;
diff --git a/src/unittest/test_schematic.cpp b/src/unittest/test_schematic.cpp
index da4ce50d2..d2f027eb4 100644
--- a/src/unittest/test_schematic.cpp
+++ b/src/unittest/test_schematic.cpp
@@ -66,13 +66,14 @@ void TestSchematic::testMtsSerializeDeserialize(const NodeDefManager *ndef)
std::stringstream ss(std::ios_base::binary |
std::ios_base::in | std::ios_base::out);
- std::vector<std::string> names;
- names.emplace_back("foo");
- names.emplace_back("bar");
- names.emplace_back("baz");
- names.emplace_back("qux");
-
- Schematic schem, schem2;
+ Schematic schem;
+ {
+ std::vector<std::string> &names = schem.m_nodenames;
+ names.emplace_back("foo");
+ names.emplace_back("bar");
+ names.emplace_back("baz");
+ names.emplace_back("qux");
+ }
schem.flags = 0;
schem.size = size;
@@ -83,18 +84,21 @@ void TestSchematic::testMtsSerializeDeserialize(const NodeDefManager *ndef)
for (s16 y = 0; y != size.Y; y++)
schem.slice_probs[y] = MTSCHEM_PROB_ALWAYS;
- UASSERT(schem.serializeToMts(&ss, names));
+ UASSERT(schem.serializeToMts(&ss));
ss.seekg(0);
- names.clear();
- UASSERT(schem2.deserializeFromMts(&ss, &names));
+ Schematic schem2;
+ UASSERT(schem2.deserializeFromMts(&ss));
- UASSERTEQ(size_t, names.size(), 4);
- UASSERTEQ(std::string, names[0], "foo");
- UASSERTEQ(std::string, names[1], "bar");
- UASSERTEQ(std::string, names[2], "baz");
- UASSERTEQ(std::string, names[3], "qux");
+ {
+ std::vector<std::string> &names = schem2.m_nodenames;
+ UASSERTEQ(size_t, names.size(), 4);
+ UASSERTEQ(std::string, names[0], "foo");
+ UASSERTEQ(std::string, names[1], "bar");
+ UASSERTEQ(std::string, names[2], "baz");
+ UASSERTEQ(std::string, names[3], "qux");
+ }
UASSERT(schem2.size == size);
for (size_t i = 0; i != volume; i++)
@@ -120,14 +124,14 @@ void TestSchematic::testLuaTableSerialize(const NodeDefManager *ndef)
for (s16 y = 0; y != size.Y; y++)
schem.slice_probs[y] = MTSCHEM_PROB_ALWAYS;
- std::vector<std::string> names;
+ std::vector<std::string> &names = schem.m_nodenames;
names.emplace_back("air");
names.emplace_back("default:lava_source");
names.emplace_back("default:glass");
std::ostringstream ss(std::ios_base::binary);
- UASSERT(schem.serializeToLua(&ss, names, false, 0));
+ UASSERT(schem.serializeToLua(&ss, false, 0));
UASSERTEQ(std::string, ss.str(), expected_lua_output);
}
@@ -159,6 +163,8 @@ void TestSchematic::testFileSerializeDeserialize(const NodeDefManager *ndef)
schem1.slice_probs[0] = 80;
schem1.slice_probs[1] = 160;
schem1.slice_probs[2] = 240;
+ // Node resolving happened manually.
+ schem1.m_resolve_done = true;
for (size_t i = 0; i != volume; i++) {
content_t c = content_map[test_schem2_data[i]];
diff --git a/src/unittest/test_servermodmanager.cpp b/src/unittest/test_servermodmanager.cpp
index e3edb0c32..4c473d8b5 100644
--- a/src/unittest/test_servermodmanager.cpp
+++ b/src/unittest/test_servermodmanager.cpp
@@ -48,14 +48,20 @@ static TestServerModManager g_test_instance;
void TestServerModManager::runTests(IGameDef *gamedef)
{
const char *saved_env_mt_subgame_path = getenv("MINETEST_SUBGAME_PATH");
+ const char *saved_env_mt_mod_path = getenv("MINETEST_MOD_PATH");
#ifdef WIN32
{
std::string subgame_path("MINETEST_SUBGAME_PATH=");
subgame_path.append(TEST_SUBGAME_PATH);
_putenv(subgame_path.c_str());
+
+ std::string mod_path("MINETEST_MOD_PATH=");
+ mod_path.append(TEST_MOD_PATH);
+ _putenv(mod_path.c_str());
}
#else
setenv("MINETEST_SUBGAME_PATH", TEST_SUBGAME_PATH, 1);
+ setenv("MINETEST_MOD_PATH", TEST_MOD_PATH, 1);
#endif
TEST(testCreation);
@@ -75,12 +81,21 @@ void TestServerModManager::runTests(IGameDef *gamedef)
if (saved_env_mt_subgame_path)
subgame_path.append(saved_env_mt_subgame_path);
_putenv(subgame_path.c_str());
+
+ std::string mod_path("MINETEST_MOD_PATH=");
+ if (saved_env_mt_mod_path)
+ mod_path.append(saved_env_mt_mod_path);
+ _putenv(mod_path.c_str());
}
#else
if (saved_env_mt_subgame_path)
setenv("MINETEST_SUBGAME_PATH", saved_env_mt_subgame_path, 1);
else
unsetenv("MINETEST_SUBGAME_PATH");
+ if (saved_env_mt_mod_path)
+ setenv("MINETEST_MOD_PATH", saved_env_mt_mod_path, 1);
+ else
+ unsetenv("MINETEST_MOD_PATH");
#endif
}
@@ -89,6 +104,7 @@ void TestServerModManager::testCreation()
std::string path = std::string(TEST_WORLDDIR) + DIR_DELIM + "world.mt";
Settings world_config;
world_config.set("gameid", "devtest");
+ world_config.set("load_mod_test_mod", "true");
UASSERTEQ(bool, world_config.updateConfigFile(path.c_str()), true);
ServerModManager sm(TEST_WORLDDIR);
}
@@ -119,16 +135,21 @@ void TestServerModManager::testGetMods()
UASSERTEQ(bool, mods.empty(), false);
// Ensure we found basenodes mod (part of devtest)
+ // and test_mod (for testing MINETEST_MOD_PATH).
bool default_found = false;
+ bool test_mod_found = false;
for (const auto &m : mods) {
if (m.name == "basenodes")
default_found = true;
+ if (m.name == "test_mod")
+ test_mod_found = true;
// Verify if paths are not empty
UASSERTEQ(bool, m.path.empty(), false);
}
UASSERTEQ(bool, default_found, true);
+ UASSERTEQ(bool, test_mod_found, true);
}
void TestServerModManager::testGetModspec()
diff --git a/src/unittest/test_socket.cpp b/src/unittest/test_socket.cpp
index 6d5cf334d..620021b59 100644
--- a/src/unittest/test_socket.cpp
+++ b/src/unittest/test_socket.cpp
@@ -97,11 +97,11 @@ void TestSocket::testIPv4Socket()
UASSERT(strncmp(sendbuffer, rcvbuffer, sizeof(sendbuffer)) == 0);
if (address != Address(0, 0, 0, 0, port)) {
- UASSERT(sender.getAddress().sin_addr.s_addr ==
- address.getAddress().sin_addr.s_addr);
+ UASSERT(sender.getAddress().s_addr ==
+ address.getAddress().s_addr);
} else {
- UASSERT(sender.getAddress().sin_addr.s_addr ==
- Address(127, 0, 0, 1, 0).getAddress().sin_addr.s_addr);
+ UASSERT(sender.getAddress().s_addr ==
+ Address(127, 0, 0, 1, 0).getAddress().s_addr);
}
}
@@ -128,7 +128,7 @@ void TestSocket::testIPv6Socket()
socket6.Bind(address6);
- try {
+ {
socket6.Send(Address(&bytes, port), sendbuffer, sizeof(sendbuffer));
sleep_ms(50);
@@ -142,10 +142,8 @@ void TestSocket::testIPv6Socket()
}
//FIXME: This fails on some systems
UASSERT(strncmp(sendbuffer, rcvbuffer, sizeof(sendbuffer)) == 0);
- UASSERT(memcmp(sender.getAddress6().sin6_addr.s6_addr,
- Address(&bytes, 0).getAddress6().sin6_addr.s6_addr, 16) == 0);
- } catch (SendFailedException &e) {
- errorstream << "IPv6 support enabled but not available!"
- << std::endl;
+
+ UASSERT(memcmp(sender.getAddress6().s6_addr,
+ Address(&bytes, 0).getAddress6().s6_addr, 16) == 0);
}
}
diff --git a/src/unittest/test_utilities.cpp b/src/unittest/test_utilities.cpp
index 93ba3f844..743fe4462 100644
--- a/src/unittest/test_utilities.cpp
+++ b/src/unittest/test_utilities.cpp
@@ -23,6 +23,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "util/enriched_string.h"
#include "util/numeric.h"
#include "util/string.h"
+#include "util/base64.h"
class TestUtilities : public TestBase {
public:
@@ -56,6 +57,7 @@ public:
void testMyround();
void testStringJoin();
void testEulerConversion();
+ void testBase64();
};
static TestUtilities g_test_instance;
@@ -87,6 +89,7 @@ void TestUtilities::runTests(IGameDef *gamedef)
TEST(testMyround);
TEST(testStringJoin);
TEST(testEulerConversion);
+ TEST(testBase64);
}
////////////////////////////////////////////////////////////////////////////////
@@ -389,9 +392,9 @@ void TestUtilities::testIsPowerOfTwo()
UASSERT(is_power_of_two(2) == true);
UASSERT(is_power_of_two(3) == false);
for (int exponent = 2; exponent <= 31; ++exponent) {
- UASSERT(is_power_of_two((1 << exponent) - 1) == false);
- UASSERT(is_power_of_two((1 << exponent)) == true);
- UASSERT(is_power_of_two((1 << exponent) + 1) == false);
+ UASSERT(is_power_of_two((1U << exponent) - 1) == false);
+ UASSERT(is_power_of_two((1U << exponent)) == true);
+ UASSERT(is_power_of_two((1U << exponent) + 1) == false);
}
UASSERT(is_power_of_two(U32_MAX) == false);
}
@@ -537,3 +540,93 @@ void TestUtilities::testEulerConversion()
setPitchYawRoll(m2, v2);
UASSERT(within(m1, m2, tolL));
}
+
+void TestUtilities::testBase64()
+{
+ // Test character set
+ UASSERT(base64_is_valid("ABCDEFGHIJKLMNOPQRSTUVWXYZ"
+ "abcdefghijklmnopqrstuvwxyz"
+ "0123456789+/") == true);
+ UASSERT(base64_is_valid("/+9876543210"
+ "zyxwvutsrqponmlkjihgfedcba"
+ "ZYXWVUTSRQPONMLKJIHGFEDCBA") == true);
+ UASSERT(base64_is_valid("ABCDEFGHIJKLMNOPQRSTUVWXYZ"
+ "abcdefghijklmnopqrstuvwxyz"
+ "0123456789+.") == false);
+ UASSERT(base64_is_valid("ABCDEFGHIJKLMNOPQRSTUVWXYZ"
+ "abcdefghijklmnopqrstuvwxyz"
+ "0123456789 /") == false);
+
+ // Test empty string
+ UASSERT(base64_is_valid("") == true);
+
+ // Test different lengths, with and without padding,
+ // with correct and incorrect padding
+ UASSERT(base64_is_valid("A") == false);
+ UASSERT(base64_is_valid("AA") == true);
+ UASSERT(base64_is_valid("AAA") == true);
+ UASSERT(base64_is_valid("AAAA") == true);
+ UASSERT(base64_is_valid("AAAAA") == false);
+ UASSERT(base64_is_valid("AAAAAA") == true);
+ UASSERT(base64_is_valid("AAAAAAA") == true);
+ UASSERT(base64_is_valid("AAAAAAAA") == true);
+ UASSERT(base64_is_valid("A===") == false);
+ UASSERT(base64_is_valid("AA==") == true);
+ UASSERT(base64_is_valid("AAA=") == true);
+ UASSERT(base64_is_valid("AAAA") == true);
+ UASSERT(base64_is_valid("AAAA====") == false);
+ UASSERT(base64_is_valid("AAAAA===") == false);
+ UASSERT(base64_is_valid("AAAAAA==") == true);
+ UASSERT(base64_is_valid("AAAAAAA=") == true);
+ UASSERT(base64_is_valid("AAAAAAA==") == false);
+ UASSERT(base64_is_valid("AAAAAAA===") == false);
+ UASSERT(base64_is_valid("AAAAAAA====") == false);
+ UASSERT(base64_is_valid("AAAAAAAA") == true);
+ UASSERT(base64_is_valid("AAAAAAAA=") == false);
+ UASSERT(base64_is_valid("AAAAAAAA==") == false);
+ UASSERT(base64_is_valid("AAAAAAAA===") == false);
+ UASSERT(base64_is_valid("AAAAAAAA====") == false);
+
+ // Test if canonical encoding
+ // Last character limitations, length % 4 == 3
+ UASSERT(base64_is_valid("AAB") == false);
+ UASSERT(base64_is_valid("AAE") == true);
+ UASSERT(base64_is_valid("AAQ") == true);
+ UASSERT(base64_is_valid("AAB=") == false);
+ UASSERT(base64_is_valid("AAE=") == true);
+ UASSERT(base64_is_valid("AAQ=") == true);
+ UASSERT(base64_is_valid("AAAAAAB=") == false);
+ UASSERT(base64_is_valid("AAAAAAE=") == true);
+ UASSERT(base64_is_valid("AAAAAAQ=") == true);
+ // Last character limitations, length % 4 == 2
+ UASSERT(base64_is_valid("AB") == false);
+ UASSERT(base64_is_valid("AE") == false);
+ UASSERT(base64_is_valid("AQ") == true);
+ UASSERT(base64_is_valid("AB==") == false);
+ UASSERT(base64_is_valid("AE==") == false);
+ UASSERT(base64_is_valid("AQ==") == true);
+ UASSERT(base64_is_valid("AAAAAB==") == false);
+ UASSERT(base64_is_valid("AAAAAE==") == false);
+ UASSERT(base64_is_valid("AAAAAQ==") == true);
+
+ // Extraneous character present
+ UASSERT(base64_is_valid(".") == false);
+ UASSERT(base64_is_valid("A.") == false);
+ UASSERT(base64_is_valid("AA.") == false);
+ UASSERT(base64_is_valid("AAA.") == false);
+ UASSERT(base64_is_valid("AAAA.") == false);
+ UASSERT(base64_is_valid("AAAAA.") == false);
+ UASSERT(base64_is_valid("A.A") == false);
+ UASSERT(base64_is_valid("AA.A") == false);
+ UASSERT(base64_is_valid("AAA.A") == false);
+ UASSERT(base64_is_valid("AAAA.A") == false);
+ UASSERT(base64_is_valid("AAAAA.A") == false);
+ UASSERT(base64_is_valid("\xE1""AAA") == false);
+
+ // Padding in wrong position
+ UASSERT(base64_is_valid("A=A") == false);
+ UASSERT(base64_is_valid("AA=A") == false);
+ UASSERT(base64_is_valid("AAA=A") == false);
+ UASSERT(base64_is_valid("AAAA=A") == false);
+ UASSERT(base64_is_valid("AAAAA=A") == false);
+}
diff --git a/src/unittest/test_voxelarea.cpp b/src/unittest/test_voxelarea.cpp
index 6ec0412d5..9826d2ee7 100644
--- a/src/unittest/test_voxelarea.cpp
+++ b/src/unittest/test_voxelarea.cpp
@@ -30,6 +30,7 @@ public:
void test_addarea();
void test_pad();
+ void test_extent();
void test_volume();
void test_contains_voxelarea();
void test_contains_point();
@@ -65,6 +66,7 @@ void TestVoxelArea::runTests(IGameDef *gamedef)
{
TEST(test_addarea);
TEST(test_pad);
+ TEST(test_extent);
TEST(test_volume);
TEST(test_contains_voxelarea);
TEST(test_contains_point);
@@ -113,10 +115,22 @@ void TestVoxelArea::test_pad()
UASSERT(v1.MaxEdge == v3s16(-47, -9347, 969));
}
+void TestVoxelArea::test_extent()
+{
+ VoxelArea v1(v3s16(-1337, -547, -789), v3s16(-147, 447, 669));
+ UASSERT(v1.getExtent() == v3s16(1191, 995, 1459));
+
+ VoxelArea v2(v3s16(32493, -32507, 32753), v3s16(32508, -32492, 32768));
+ UASSERT(v2.getExtent() == v3s16(16, 16, 16));
+}
+
void TestVoxelArea::test_volume()
{
- VoxelArea v1(v3s16(-1337, 447, -789), v3s16(-147, -9547, 669));
- UASSERTEQ(s32, v1.getVolume(), -184657133);
+ VoxelArea v1(v3s16(-1337, -547, -789), v3s16(-147, 447, 669));
+ UASSERTEQ(s32, v1.getVolume(), 1728980655);
+
+ VoxelArea v2(v3s16(32493, -32507, 32753), v3s16(32508, -32492, 32768));
+ UASSERTEQ(s32, v2.getVolume(), 4096);
}
void TestVoxelArea::test_contains_voxelarea()
diff --git a/src/util/CMakeLists.txt b/src/util/CMakeLists.txt
index cd2e468d1..6bc97915f 100644
--- a/src/util/CMakeLists.txt
+++ b/src/util/CMakeLists.txt
@@ -15,4 +15,5 @@ set(UTIL_SRCS
${CMAKE_CURRENT_SOURCE_DIR}/string.cpp
${CMAKE_CURRENT_SOURCE_DIR}/srp.cpp
${CMAKE_CURRENT_SOURCE_DIR}/timetaker.cpp
+ ${CMAKE_CURRENT_SOURCE_DIR}/png.cpp
PARENT_SCOPE)
diff --git a/src/util/Optional.h b/src/util/Optional.h
index 9c2842b43..eda7fff89 100644
--- a/src/util/Optional.h
+++ b/src/util/Optional.h
@@ -19,6 +19,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#pragma once
+#include <utility>
#include "debug.h"
struct nullopt_t
@@ -43,18 +44,38 @@ class Optional
public:
Optional() noexcept {}
Optional(nullopt_t) noexcept {}
+
Optional(const T &value) noexcept : m_has_value(true), m_value(value) {}
+ Optional(T &&value) noexcept : m_has_value(true), m_value(std::move(value)) {}
+
Optional(const Optional<T> &other) noexcept :
m_has_value(other.m_has_value), m_value(other.m_value)
+ {}
+ Optional(Optional<T> &&other) noexcept :
+ m_has_value(other.m_has_value), m_value(std::move(other.m_value))
{
+ other.m_has_value = false;
}
- void operator=(nullopt_t) noexcept { m_has_value = false; }
+ Optional<T> &operator=(nullopt_t) noexcept { m_has_value = false; return *this; }
- void operator=(const Optional<T> &other) noexcept
+ Optional<T> &operator=(const Optional<T> &other) noexcept
{
+ if (&other == this)
+ return *this;
m_has_value = other.m_has_value;
m_value = other.m_value;
+ return *this;
+ }
+
+ Optional<T> &operator=(Optional<T> &&other) noexcept
+ {
+ if (&other == this)
+ return *this;
+ m_has_value = other.m_has_value;
+ m_value = std::move(other.m_value);
+ other.m_has_value = false;
+ return *this;
}
T &value()
@@ -71,6 +92,13 @@ public:
const T &value_or(const T &def) const { return m_has_value ? m_value : def; }
+ // Unchecked access consistent with std::optional
+ T* operator->() { return &m_value; }
+ const T* operator->() const { return &m_value; }
+
+ T& operator*() { return m_value; }
+ const T& operator*() const { return m_value; }
+
bool has_value() const noexcept { return m_has_value; }
explicit operator bool() const { return m_has_value; }
diff --git a/src/util/base64.cpp b/src/util/base64.cpp
index 6e1584410..0c2455222 100644
--- a/src/util/base64.cpp
+++ b/src/util/base64.cpp
@@ -33,18 +33,39 @@ static const std::string base64_chars =
"abcdefghijklmnopqrstuvwxyz"
"0123456789+/";
+static const std::string base64_chars_padding_1 = "AEIMQUYcgkosw048";
+static const std::string base64_chars_padding_2 = "AQgw";
static inline bool is_base64(unsigned char c)
{
- return isalnum(c) || c == '+' || c == '/' || c == '=';
+ return (c >= '0' && c <= '9')
+ || (c >= 'A' && c <= 'Z')
+ || (c >= 'a' && c <= 'z')
+ || c == '+' || c == '/';
}
bool base64_is_valid(std::string const& s)
{
- for (char i : s)
- if (!is_base64(i))
+ size_t i = 0;
+ for (; i < s.size(); ++i)
+ if (!is_base64(s[i]))
+ break;
+ unsigned char padding = 3 - ((i + 3) % 4);
+ if ((padding == 1 && base64_chars_padding_1.find(s[i - 1]) == std::string::npos)
+ || (padding == 2 && base64_chars_padding_2.find(s[i - 1]) == std::string::npos)
+ || padding == 3)
+ return false;
+ int actual_padding = s.size() - i;
+ // omission of padding characters is allowed
+ if (actual_padding == 0)
+ return true;
+
+ // remaining characters (max. 2) may only be padding
+ for (; i < s.size(); ++i)
+ if (s[i] != '=')
return false;
- return true;
+ // number of padding characters needs to match
+ return padding == actual_padding;
}
std::string base64_encode(unsigned char const* bytes_to_encode, unsigned int in_len) {
diff --git a/src/util/numeric.cpp b/src/util/numeric.cpp
index 1af3f66be..702ddce95 100644
--- a/src/util/numeric.cpp
+++ b/src/util/numeric.cpp
@@ -106,10 +106,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)
{
- // Maximum radius of a block. The magic number is
- // sqrt(3.0) / 2.0 in literal form.
- static constexpr const f32 block_max_radius = 0.866025403784f * MAP_BLOCKSIZE * BS;
-
v3s16 blockpos_nodes = blockpos_b * MAP_BLOCKSIZE;
// Block center position
@@ -123,7 +119,7 @@ bool isBlockInSight(v3s16 blockpos_b, v3f camera_pos, v3f camera_dir,
v3f blockpos_relative = blockpos - camera_pos;
// Total distance
- f32 d = MYMAX(0, blockpos_relative.getLength() - block_max_radius);
+ f32 d = MYMAX(0, blockpos_relative.getLength() - BLOCK_MAX_RADIUS);
if (distance_ptr)
*distance_ptr = d;
@@ -141,7 +137,7 @@ bool isBlockInSight(v3s16 blockpos_b, v3f camera_pos, v3f camera_dir,
// such that a block that has any portion visible with the
// current camera position will have the center visible at the
// adjusted postion
- f32 adjdist = block_max_radius / cos((M_PI - camera_fov) / 2);
+ f32 adjdist = BLOCK_MAX_RADIUS / cos((M_PI - camera_fov) / 2);
// Block position relative to adjusted camera
v3f blockpos_adj = blockpos - (camera_pos - camera_dir * adjdist);
@@ -163,7 +159,7 @@ bool isBlockInSight(v3s16 blockpos_b, v3f camera_pos, v3f camera_dir,
return true;
}
-s16 adjustDist(s16 dist, float zoom_fov)
+inline float adjustDist(float dist, float zoom_fov)
{
// 1.775 ~= 72 * PI / 180 * 1.4, the default FOV on the client.
// The heuristic threshold for zooming is half of that.
@@ -171,8 +167,13 @@ s16 adjustDist(s16 dist, float zoom_fov)
if (zoom_fov < 0.001f || zoom_fov > threshold_fov)
return dist;
- return std::round(dist * std::cbrt((1.0f - std::cos(threshold_fov)) /
- (1.0f - std::cos(zoom_fov / 2.0f))));
+ return dist * std::cbrt((1.0f - std::cos(threshold_fov)) /
+ (1.0f - std::cos(zoom_fov / 2.0f)));
+}
+
+s16 adjustDist(s16 dist, float zoom_fov)
+{
+ return std::round(adjustDist((float)dist, zoom_fov));
}
void setPitchYawRollRad(core::matrix4 &m, const v3f &rot)
diff --git a/src/util/numeric.h b/src/util/numeric.h
index 864ab7543..32a6f4312 100644
--- a/src/util/numeric.h
+++ b/src/util/numeric.h
@@ -20,6 +20,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#pragma once
#include "basic_macros.h"
+#include "constants.h"
#include "irrlichttypes.h"
#include "irr_v2d.h"
#include "irr_v3d.h"
@@ -36,6 +37,9 @@ with this program; if not, write to the Free Software Foundation, Inc.,
y = temp; \
} while (0)
+// Maximum radius of a block. The magic number is
+// sqrt(3.0) / 2.0 in literal form.
+static constexpr const f32 BLOCK_MAX_RADIUS = 0.866025403784f * MAP_BLOCKSIZE * BS;
inline s16 getContainerPos(s16 p, s16 d)
{
diff --git a/src/util/png.cpp b/src/util/png.cpp
new file mode 100755
index 000000000..698cbc9a5
--- /dev/null
+++ b/src/util/png.cpp
@@ -0,0 +1,68 @@
+/*
+Minetest
+Copyright (C) 2021 hecks
+
+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
+(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 "png.h"
+#include <string>
+#include <sstream>
+#include <zlib.h>
+#include <cassert>
+#include "util/serialize.h"
+#include "serialization.h"
+#include "irrlichttypes.h"
+
+static void writeChunk(std::ostringstream &target, const std::string &chunk_str)
+{
+ assert(chunk_str.size() >= 4);
+ assert(chunk_str.size() - 4 < U32_MAX);
+ writeU32(target, chunk_str.size() - 4); // Write length minus the identifier
+ target << chunk_str;
+ writeU32(target, crc32(0,(const u8*)chunk_str.data(), chunk_str.size()));
+}
+
+std::string encodePNG(const u8 *data, u32 width, u32 height, s32 compression)
+{
+ std::ostringstream file(std::ios::binary);
+ file << "\x89PNG\r\n\x1a\n";
+
+ {
+ std::ostringstream IHDR(std::ios::binary);
+ IHDR << "IHDR";
+ writeU32(IHDR, width);
+ writeU32(IHDR, height);
+ // 8 bpp, color type 6 (RGBA)
+ IHDR.write("\x08\x06\x00\x00\x00", 5);
+ writeChunk(file, IHDR.str());
+ }
+
+ {
+ std::ostringstream IDAT(std::ios::binary);
+ IDAT << "IDAT";
+ std::ostringstream scanlines(std::ios::binary);
+ for(u32 i = 0; i < height; i++) {
+ scanlines.write("\x00", 1); // Null predictor
+ scanlines.write((const char*) data + width * 4 * i, width * 4);
+ }
+ compressZlib(scanlines.str(), IDAT, compression);
+ writeChunk(file, IDAT.str());
+ }
+
+ file.write("\x00\x00\x00\x00IEND\xae\x42\x60\x82", 12);
+
+ return file.str();
+}
diff --git a/src/cloudparams.h b/src/util/png.h
index 88b5760ee..92387aef0 100644..100755
--- a/src/cloudparams.h
+++ b/src/util/png.h
@@ -1,6 +1,6 @@
/*
Minetest
-Copyright (C) 2017 bendeutsch, Ben Deutsch <ben@bendeutsch.de>
+Copyright (C) 2021 hecks
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
@@ -19,12 +19,9 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#pragma once
-struct CloudParams
-{
- float density;
- video::SColor color_bright;
- video::SColor color_ambient;
- float thickness;
- float height;
- v2f speed;
-};
+#include <string>
+#include "irrlichttypes.h"
+
+/* Simple PNG encoder. Encodes an RGBA image with no predictors.
+ Returns a binary string. */
+std::string encodePNG(const u8 *data, u32 width, u32 height, s32 compression);
diff --git a/src/util/pointer.h b/src/util/pointer.h
index 7fc5de551..245ac85bf 100644
--- a/src/util/pointer.h
+++ b/src/util/pointer.h
@@ -22,6 +22,21 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "irrlichttypes.h"
#include "debug.h" // For assert()
#include <cstring>
+#include <memory> // std::shared_ptr
+
+
+template<typename T> class ConstSharedPtr {
+public:
+ ConstSharedPtr(T *ptr) : ptr(ptr) {}
+ ConstSharedPtr(const std::shared_ptr<T> &ptr) : ptr(ptr) {}
+
+ const T* get() const noexcept { return ptr.get(); }
+ const T& operator*() const noexcept { return *ptr.get(); }
+ const T* operator->() const noexcept { return ptr.get(); }
+
+private:
+ std::shared_ptr<T> ptr;
+};
template <typename T>
class Buffer
@@ -40,17 +55,11 @@ public:
else
data = NULL;
}
- Buffer(const Buffer &buffer)
- {
- m_size = buffer.m_size;
- if(m_size != 0)
- {
- data = new T[buffer.m_size];
- memcpy(data, buffer.data, buffer.m_size);
- }
- else
- data = NULL;
- }
+
+ // Disable class copy
+ Buffer(const Buffer &) = delete;
+ Buffer &operator=(const Buffer &) = delete;
+
Buffer(Buffer &&buffer)
{
m_size = buffer.m_size;
@@ -81,21 +90,6 @@ public:
drop();
}
- Buffer& operator=(const Buffer &buffer)
- {
- if(this == &buffer)
- return *this;
- drop();
- m_size = buffer.m_size;
- if(m_size != 0)
- {
- data = new T[buffer.m_size];
- memcpy(data, buffer.data, buffer.m_size);
- }
- else
- data = NULL;
- return *this;
- }
Buffer& operator=(Buffer &&buffer)
{
if(this == &buffer)
@@ -113,6 +107,18 @@ public:
return *this;
}
+ void copyTo(Buffer &buffer) const
+ {
+ buffer.drop();
+ buffer.m_size = m_size;
+ if (m_size != 0) {
+ buffer.data = new T[m_size];
+ memcpy(buffer.data, data, m_size);
+ } else {
+ buffer.data = nullptr;
+ }
+ }
+
T & operator[](unsigned int i) const
{
return data[i];
diff --git a/src/util/serialize.cpp b/src/util/serialize.cpp
index d770101f2..281061229 100644
--- a/src/util/serialize.cpp
+++ b/src/util/serialize.cpp
@@ -248,7 +248,7 @@ std::string serializeJsonStringIfNeeded(const std::string &s)
std::string deSerializeJsonStringIfNeeded(std::istream &is)
{
- std::ostringstream tmp_os;
+ std::stringstream tmp_os(std::ios_base::binary | std::ios_base::in | std::ios_base::out);
bool expect_initial_quote = true;
bool is_json = false;
bool was_backslash = false;
@@ -280,8 +280,7 @@ std::string deSerializeJsonStringIfNeeded(std::istream &is)
expect_initial_quote = false;
}
if (is_json) {
- std::istringstream tmp_is(tmp_os.str(), std::ios::binary);
- return deSerializeJsonString(tmp_is);
+ return deSerializeJsonString(tmp_os);
}
return tmp_os.str();
diff --git a/src/util/string.cpp b/src/util/string.cpp
index 611ad35cb..bc4664997 100644
--- a/src/util/string.cpp
+++ b/src/util/string.cpp
@@ -30,7 +30,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include <array>
#include <sstream>
#include <iomanip>
-#include <map>
+#include <unordered_map>
#ifndef _WIN32
#include <iconv.h>
@@ -39,15 +39,16 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include <windows.h>
#endif
-#if defined(_ICONV_H_) && (defined(__FreeBSD__) || defined(__NetBSD__) || \
- defined(__OpenBSD__) || defined(__DragonFly__))
+#ifdef __NetBSD__
+ #include <sys/param.h>
+ #if __NetBSD_Version__ <= 999001500
+ #define BSD_ICONV_USED
+ #endif
+#elif defined(_ICONV_H_) && (defined(__FreeBSD__) || defined(__OpenBSD__) || \
+ defined(__DragonFly__))
#define BSD_ICONV_USED
#endif
-static bool parseHexColorString(const std::string &value, video::SColor &color,
- unsigned char default_alpha = 0xff);
-static bool parseNamedColorString(const std::string &value, video::SColor &color);
-
#ifndef _WIN32
static bool convert(const char *to, const char *from, char *outbuf,
@@ -83,6 +84,14 @@ static bool convert(const char *to, const char *from, char *outbuf,
#ifdef __ANDROID__
// On Android iconv disagrees how big a wchar_t is for whatever reason
const char *DEFAULT_ENCODING = "UTF-32LE";
+#elif defined(__NetBSD__)
+ // NetBSD does not allow "WCHAR_T" as a charset input to iconv.
+ #include <sys/endian.h>
+ #if BYTE_ORDER == BIG_ENDIAN
+ const char *DEFAULT_ENCODING = "UTF-32BE";
+ #else
+ const char *DEFAULT_ENCODING = "UTF-32LE";
+ #endif
#else
const char *DEFAULT_ENCODING = "WCHAR_T";
#endif
@@ -98,7 +107,7 @@ std::wstring utf8_to_wide(const std::string &input)
std::wstring out;
out.resize(outbuf_size / sizeof(wchar_t));
-#ifdef __ANDROID__
+#if defined(__ANDROID__) || defined(__NetBSD__)
SANITY_CHECK(sizeof(wchar_t) == 4);
#endif
@@ -324,29 +333,10 @@ u64 read_seed(const char *str)
return num;
}
-bool parseColorString(const std::string &value, video::SColor &color, bool quiet,
- unsigned char default_alpha)
-{
- bool success;
-
- if (value[0] == '#')
- success = parseHexColorString(value, color, default_alpha);
- else
- success = parseNamedColorString(value, color);
-
- if (!success && !quiet)
- errorstream << "Invalid color: \"" << value << "\"" << std::endl;
-
- return success;
-}
-
static bool parseHexColorString(const std::string &value, video::SColor &color,
unsigned char default_alpha)
{
- unsigned char components[] = { 0x00, 0x00, 0x00, default_alpha }; // R,G,B,A
-
- if (value[0] != '#')
- return false;
+ u8 components[] = {0x00, 0x00, 0x00, default_alpha}; // R,G,B,A
size_t len = value.size();
bool short_form;
@@ -358,198 +348,182 @@ static bool parseHexColorString(const std::string &value, video::SColor &color,
else
return false;
- bool success = true;
-
for (size_t pos = 1, cc = 0; pos < len; pos++, cc++) {
- assert(cc < sizeof components / sizeof components[0]);
if (short_form) {
- unsigned char d;
- if (!hex_digit_decode(value[pos], d)) {
- success = false;
- break;
- }
+ u8 d;
+ if (!hex_digit_decode(value[pos], d))
+ return false;
+
components[cc] = (d & 0xf) << 4 | (d & 0xf);
} else {
- unsigned char d1, d2;
+ u8 d1, d2;
if (!hex_digit_decode(value[pos], d1) ||
- !hex_digit_decode(value[pos+1], d2)) {
- success = false;
- break;
- }
+ !hex_digit_decode(value[pos+1], d2))
+ return false;
+
components[cc] = (d1 & 0xf) << 4 | (d2 & 0xf);
- pos++; // skip the second digit -- it's already used
+ pos++; // skip the second digit -- it's already used
}
}
- if (success) {
- color.setRed(components[0]);
- color.setGreen(components[1]);
- color.setBlue(components[2]);
- color.setAlpha(components[3]);
- }
+ color.setRed(components[0]);
+ color.setGreen(components[1]);
+ color.setBlue(components[2]);
+ color.setAlpha(components[3]);
- return success;
+ return true;
}
-struct ColorContainer {
- ColorContainer();
- std::map<const std::string, u32> colors;
+const static std::unordered_map<std::string, u32> s_named_colors = {
+ {"aliceblue", 0xf0f8ff},
+ {"antiquewhite", 0xfaebd7},
+ {"aqua", 0x00ffff},
+ {"aquamarine", 0x7fffd4},
+ {"azure", 0xf0ffff},
+ {"beige", 0xf5f5dc},
+ {"bisque", 0xffe4c4},
+ {"black", 00000000},
+ {"blanchedalmond", 0xffebcd},
+ {"blue", 0x0000ff},
+ {"blueviolet", 0x8a2be2},
+ {"brown", 0xa52a2a},
+ {"burlywood", 0xdeb887},
+ {"cadetblue", 0x5f9ea0},
+ {"chartreuse", 0x7fff00},
+ {"chocolate", 0xd2691e},
+ {"coral", 0xff7f50},
+ {"cornflowerblue", 0x6495ed},
+ {"cornsilk", 0xfff8dc},
+ {"crimson", 0xdc143c},
+ {"cyan", 0x00ffff},
+ {"darkblue", 0x00008b},
+ {"darkcyan", 0x008b8b},
+ {"darkgoldenrod", 0xb8860b},
+ {"darkgray", 0xa9a9a9},
+ {"darkgreen", 0x006400},
+ {"darkgrey", 0xa9a9a9},
+ {"darkkhaki", 0xbdb76b},
+ {"darkmagenta", 0x8b008b},
+ {"darkolivegreen", 0x556b2f},
+ {"darkorange", 0xff8c00},
+ {"darkorchid", 0x9932cc},
+ {"darkred", 0x8b0000},
+ {"darksalmon", 0xe9967a},
+ {"darkseagreen", 0x8fbc8f},
+ {"darkslateblue", 0x483d8b},
+ {"darkslategray", 0x2f4f4f},
+ {"darkslategrey", 0x2f4f4f},
+ {"darkturquoise", 0x00ced1},
+ {"darkviolet", 0x9400d3},
+ {"deeppink", 0xff1493},
+ {"deepskyblue", 0x00bfff},
+ {"dimgray", 0x696969},
+ {"dimgrey", 0x696969},
+ {"dodgerblue", 0x1e90ff},
+ {"firebrick", 0xb22222},
+ {"floralwhite", 0xfffaf0},
+ {"forestgreen", 0x228b22},
+ {"fuchsia", 0xff00ff},
+ {"gainsboro", 0xdcdcdc},
+ {"ghostwhite", 0xf8f8ff},
+ {"gold", 0xffd700},
+ {"goldenrod", 0xdaa520},
+ {"gray", 0x808080},
+ {"green", 0x008000},
+ {"greenyellow", 0xadff2f},
+ {"grey", 0x808080},
+ {"honeydew", 0xf0fff0},
+ {"hotpink", 0xff69b4},
+ {"indianred", 0xcd5c5c},
+ {"indigo", 0x4b0082},
+ {"ivory", 0xfffff0},
+ {"khaki", 0xf0e68c},
+ {"lavender", 0xe6e6fa},
+ {"lavenderblush", 0xfff0f5},
+ {"lawngreen", 0x7cfc00},
+ {"lemonchiffon", 0xfffacd},
+ {"lightblue", 0xadd8e6},
+ {"lightcoral", 0xf08080},
+ {"lightcyan", 0xe0ffff},
+ {"lightgoldenrodyellow", 0xfafad2},
+ {"lightgray", 0xd3d3d3},
+ {"lightgreen", 0x90ee90},
+ {"lightgrey", 0xd3d3d3},
+ {"lightpink", 0xffb6c1},
+ {"lightsalmon", 0xffa07a},
+ {"lightseagreen", 0x20b2aa},
+ {"lightskyblue", 0x87cefa},
+ {"lightslategray", 0x778899},
+ {"lightslategrey", 0x778899},
+ {"lightsteelblue", 0xb0c4de},
+ {"lightyellow", 0xffffe0},
+ {"lime", 0x00ff00},
+ {"limegreen", 0x32cd32},
+ {"linen", 0xfaf0e6},
+ {"magenta", 0xff00ff},
+ {"maroon", 0x800000},
+ {"mediumaquamarine", 0x66cdaa},
+ {"mediumblue", 0x0000cd},
+ {"mediumorchid", 0xba55d3},
+ {"mediumpurple", 0x9370db},
+ {"mediumseagreen", 0x3cb371},
+ {"mediumslateblue", 0x7b68ee},
+ {"mediumspringgreen", 0x00fa9a},
+ {"mediumturquoise", 0x48d1cc},
+ {"mediumvioletred", 0xc71585},
+ {"midnightblue", 0x191970},
+ {"mintcream", 0xf5fffa},
+ {"mistyrose", 0xffe4e1},
+ {"moccasin", 0xffe4b5},
+ {"navajowhite", 0xffdead},
+ {"navy", 0x000080},
+ {"oldlace", 0xfdf5e6},
+ {"olive", 0x808000},
+ {"olivedrab", 0x6b8e23},
+ {"orange", 0xffa500},
+ {"orangered", 0xff4500},
+ {"orchid", 0xda70d6},
+ {"palegoldenrod", 0xeee8aa},
+ {"palegreen", 0x98fb98},
+ {"paleturquoise", 0xafeeee},
+ {"palevioletred", 0xdb7093},
+ {"papayawhip", 0xffefd5},
+ {"peachpuff", 0xffdab9},
+ {"peru", 0xcd853f},
+ {"pink", 0xffc0cb},
+ {"plum", 0xdda0dd},
+ {"powderblue", 0xb0e0e6},
+ {"purple", 0x800080},
+ {"red", 0xff0000},
+ {"rosybrown", 0xbc8f8f},
+ {"royalblue", 0x4169e1},
+ {"saddlebrown", 0x8b4513},
+ {"salmon", 0xfa8072},
+ {"sandybrown", 0xf4a460},
+ {"seagreen", 0x2e8b57},
+ {"seashell", 0xfff5ee},
+ {"sienna", 0xa0522d},
+ {"silver", 0xc0c0c0},
+ {"skyblue", 0x87ceeb},
+ {"slateblue", 0x6a5acd},
+ {"slategray", 0x708090},
+ {"slategrey", 0x708090},
+ {"snow", 0xfffafa},
+ {"springgreen", 0x00ff7f},
+ {"steelblue", 0x4682b4},
+ {"tan", 0xd2b48c},
+ {"teal", 0x008080},
+ {"thistle", 0xd8bfd8},
+ {"tomato", 0xff6347},
+ {"turquoise", 0x40e0d0},
+ {"violet", 0xee82ee},
+ {"wheat", 0xf5deb3},
+ {"white", 0xffffff},
+ {"whitesmoke", 0xf5f5f5},
+ {"yellow", 0xffff00},
+ {"yellowgreen", 0x9acd32}
};
-ColorContainer::ColorContainer()
-{
- colors["aliceblue"] = 0xf0f8ff;
- colors["antiquewhite"] = 0xfaebd7;
- colors["aqua"] = 0x00ffff;
- colors["aquamarine"] = 0x7fffd4;
- colors["azure"] = 0xf0ffff;
- colors["beige"] = 0xf5f5dc;
- colors["bisque"] = 0xffe4c4;
- colors["black"] = 00000000;
- colors["blanchedalmond"] = 0xffebcd;
- colors["blue"] = 0x0000ff;
- colors["blueviolet"] = 0x8a2be2;
- colors["brown"] = 0xa52a2a;
- colors["burlywood"] = 0xdeb887;
- colors["cadetblue"] = 0x5f9ea0;
- colors["chartreuse"] = 0x7fff00;
- colors["chocolate"] = 0xd2691e;
- colors["coral"] = 0xff7f50;
- colors["cornflowerblue"] = 0x6495ed;
- colors["cornsilk"] = 0xfff8dc;
- colors["crimson"] = 0xdc143c;
- colors["cyan"] = 0x00ffff;
- colors["darkblue"] = 0x00008b;
- colors["darkcyan"] = 0x008b8b;
- colors["darkgoldenrod"] = 0xb8860b;
- colors["darkgray"] = 0xa9a9a9;
- colors["darkgreen"] = 0x006400;
- colors["darkgrey"] = 0xa9a9a9;
- colors["darkkhaki"] = 0xbdb76b;
- colors["darkmagenta"] = 0x8b008b;
- colors["darkolivegreen"] = 0x556b2f;
- colors["darkorange"] = 0xff8c00;
- colors["darkorchid"] = 0x9932cc;
- colors["darkred"] = 0x8b0000;
- colors["darksalmon"] = 0xe9967a;
- colors["darkseagreen"] = 0x8fbc8f;
- colors["darkslateblue"] = 0x483d8b;
- colors["darkslategray"] = 0x2f4f4f;
- colors["darkslategrey"] = 0x2f4f4f;
- colors["darkturquoise"] = 0x00ced1;
- colors["darkviolet"] = 0x9400d3;
- colors["deeppink"] = 0xff1493;
- colors["deepskyblue"] = 0x00bfff;
- colors["dimgray"] = 0x696969;
- colors["dimgrey"] = 0x696969;
- colors["dodgerblue"] = 0x1e90ff;
- colors["firebrick"] = 0xb22222;
- colors["floralwhite"] = 0xfffaf0;
- colors["forestgreen"] = 0x228b22;
- colors["fuchsia"] = 0xff00ff;
- colors["gainsboro"] = 0xdcdcdc;
- colors["ghostwhite"] = 0xf8f8ff;
- colors["gold"] = 0xffd700;
- colors["goldenrod"] = 0xdaa520;
- colors["gray"] = 0x808080;
- colors["green"] = 0x008000;
- colors["greenyellow"] = 0xadff2f;
- colors["grey"] = 0x808080;
- colors["honeydew"] = 0xf0fff0;
- colors["hotpink"] = 0xff69b4;
- colors["indianred"] = 0xcd5c5c;
- colors["indigo"] = 0x4b0082;
- colors["ivory"] = 0xfffff0;
- colors["khaki"] = 0xf0e68c;
- colors["lavender"] = 0xe6e6fa;
- colors["lavenderblush"] = 0xfff0f5;
- colors["lawngreen"] = 0x7cfc00;
- colors["lemonchiffon"] = 0xfffacd;
- colors["lightblue"] = 0xadd8e6;
- colors["lightcoral"] = 0xf08080;
- colors["lightcyan"] = 0xe0ffff;
- colors["lightgoldenrodyellow"] = 0xfafad2;
- colors["lightgray"] = 0xd3d3d3;
- colors["lightgreen"] = 0x90ee90;
- colors["lightgrey"] = 0xd3d3d3;
- colors["lightpink"] = 0xffb6c1;
- colors["lightsalmon"] = 0xffa07a;
- colors["lightseagreen"] = 0x20b2aa;
- colors["lightskyblue"] = 0x87cefa;
- colors["lightslategray"] = 0x778899;
- colors["lightslategrey"] = 0x778899;
- colors["lightsteelblue"] = 0xb0c4de;
- colors["lightyellow"] = 0xffffe0;
- colors["lime"] = 0x00ff00;
- colors["limegreen"] = 0x32cd32;
- colors["linen"] = 0xfaf0e6;
- colors["magenta"] = 0xff00ff;
- colors["maroon"] = 0x800000;
- colors["mediumaquamarine"] = 0x66cdaa;
- colors["mediumblue"] = 0x0000cd;
- colors["mediumorchid"] = 0xba55d3;
- colors["mediumpurple"] = 0x9370db;
- colors["mediumseagreen"] = 0x3cb371;
- colors["mediumslateblue"] = 0x7b68ee;
- colors["mediumspringgreen"] = 0x00fa9a;
- colors["mediumturquoise"] = 0x48d1cc;
- colors["mediumvioletred"] = 0xc71585;
- colors["midnightblue"] = 0x191970;
- colors["mintcream"] = 0xf5fffa;
- colors["mistyrose"] = 0xffe4e1;
- colors["moccasin"] = 0xffe4b5;
- colors["navajowhite"] = 0xffdead;
- colors["navy"] = 0x000080;
- colors["oldlace"] = 0xfdf5e6;
- colors["olive"] = 0x808000;
- colors["olivedrab"] = 0x6b8e23;
- colors["orange"] = 0xffa500;
- colors["orangered"] = 0xff4500;
- colors["orchid"] = 0xda70d6;
- colors["palegoldenrod"] = 0xeee8aa;
- colors["palegreen"] = 0x98fb98;
- colors["paleturquoise"] = 0xafeeee;
- colors["palevioletred"] = 0xdb7093;
- colors["papayawhip"] = 0xffefd5;
- colors["peachpuff"] = 0xffdab9;
- colors["peru"] = 0xcd853f;
- colors["pink"] = 0xffc0cb;
- colors["plum"] = 0xdda0dd;
- colors["powderblue"] = 0xb0e0e6;
- colors["purple"] = 0x800080;
- colors["red"] = 0xff0000;
- colors["rosybrown"] = 0xbc8f8f;
- colors["royalblue"] = 0x4169e1;
- colors["saddlebrown"] = 0x8b4513;
- colors["salmon"] = 0xfa8072;
- colors["sandybrown"] = 0xf4a460;
- colors["seagreen"] = 0x2e8b57;
- colors["seashell"] = 0xfff5ee;
- colors["sienna"] = 0xa0522d;
- colors["silver"] = 0xc0c0c0;
- colors["skyblue"] = 0x87ceeb;
- colors["slateblue"] = 0x6a5acd;
- colors["slategray"] = 0x708090;
- colors["slategrey"] = 0x708090;
- colors["snow"] = 0xfffafa;
- colors["springgreen"] = 0x00ff7f;
- colors["steelblue"] = 0x4682b4;
- colors["tan"] = 0xd2b48c;
- colors["teal"] = 0x008080;
- colors["thistle"] = 0xd8bfd8;
- colors["tomato"] = 0xff6347;
- colors["turquoise"] = 0x40e0d0;
- colors["violet"] = 0xee82ee;
- colors["wheat"] = 0xf5deb3;
- colors["white"] = 0xffffff;
- colors["whitesmoke"] = 0xf5f5f5;
- colors["yellow"] = 0xffff00;
- colors["yellowgreen"] = 0x9acd32;
-
-}
-
-static const ColorContainer named_colors;
-
static bool parseNamedColorString(const std::string &value, video::SColor &color)
{
std::string color_name;
@@ -570,9 +544,8 @@ static bool parseNamedColorString(const std::string &value, video::SColor &color
color_name = lowercase(color_name);
- std::map<const std::string, unsigned>::const_iterator it;
- it = named_colors.colors.find(color_name);
- if (it == named_colors.colors.end())
+ auto it = s_named_colors.find(color_name);
+ if (it == s_named_colors.end())
return false;
u32 color_temp = it->second;
@@ -580,21 +553,26 @@ static bool parseNamedColorString(const std::string &value, video::SColor &color
/* An empty string for alpha is ok (none of the color table entries
* have an alpha value either). Color strings without an alpha specified
* are interpreted as fully opaque
- *
- * For named colors the supplied alpha string (representing a hex value)
- * must be exactly two digits. For example: colorname#08
*/
if (!alpha_string.empty()) {
- if (alpha_string.length() != 2)
- return false;
-
- unsigned char d1, d2;
- if (!hex_digit_decode(alpha_string.at(0), d1)
- || !hex_digit_decode(alpha_string.at(1), d2))
+ if (alpha_string.size() == 1) {
+ u8 d;
+ if (!hex_digit_decode(alpha_string[0], d))
+ return false;
+
+ color_temp |= ((d & 0xf) << 4 | (d & 0xf)) << 24;
+ } else if (alpha_string.size() == 2) {
+ u8 d1, d2;
+ if (!hex_digit_decode(alpha_string[0], d1)
+ || !hex_digit_decode(alpha_string[1], d2))
+ return false;
+
+ color_temp |= ((d1 & 0xf) << 4 | (d2 & 0xf)) << 24;
+ } else {
return false;
- color_temp |= ((d1 & 0xf) << 4 | (d2 & 0xf)) << 24;
+ }
} else {
- color_temp |= 0xff << 24; // Fully opaque
+ color_temp |= 0xff << 24; // Fully opaque
}
color = video::SColor(color_temp);
@@ -602,6 +580,22 @@ static bool parseNamedColorString(const std::string &value, video::SColor &color
return true;
}
+bool parseColorString(const std::string &value, video::SColor &color, bool quiet,
+ unsigned char default_alpha)
+{
+ bool success;
+
+ if (value[0] == '#')
+ success = parseHexColorString(value, color, default_alpha);
+ else
+ success = parseNamedColorString(value, color);
+
+ if (!success && !quiet)
+ errorstream << "Invalid color: \"" << value << "\"" << std::endl;
+
+ return success;
+}
+
void str_replace(std::string &str, char from, char to)
{
std::replace(str.begin(), str.end(), from, to);
@@ -893,3 +887,19 @@ std::string sanitizeDirName(const std::string &str, const std::string &optional_
return wide_to_utf8(safe_name);
}
+
+
+void safe_print_string(std::ostream &os, const std::string &str)
+{
+ std::ostream::fmtflags flags = os.flags();
+ os << std::hex;
+ for (const char c : str) {
+ if (IS_ASCII_PRINTABLE_CHAR(c) || IS_UTF8_MULTB_START(c) ||
+ IS_UTF8_MULTB_INNER(c) || c == '\n' || c == '\t') {
+ os << c;
+ } else {
+ os << '<' << std::setw(2) << (int)c << '>';
+ }
+ }
+ os.setf(flags);
+}
diff --git a/src/util/string.h b/src/util/string.h
index d4afcaec8..8a9e83f22 100644
--- a/src/util/string.h
+++ b/src/util/string.h
@@ -661,24 +661,49 @@ inline const char *bool_to_cstr(bool val)
return val ? "true" : "false";
}
+/**
+ * Converts a duration in seconds to a pretty-printed duration in
+ * days, hours, minutes and seconds.
+ *
+ * @param sec duration in seconds
+ * @return pretty-printed duration
+ */
inline const std::string duration_to_string(int sec)
{
+ std::ostringstream ss;
+ const char *neg = "";
+ if (sec < 0) {
+ sec = -sec;
+ neg = "-";
+ }
+ int total_sec = sec;
int min = sec / 60;
sec %= 60;
int hour = min / 60;
min %= 60;
+ int day = hour / 24;
+ hour %= 24;
+
+ if (day > 0) {
+ ss << neg << day << "d";
+ if (hour > 0 || min > 0 || sec > 0)
+ ss << " ";
+ }
- std::stringstream ss;
if (hour > 0) {
- ss << hour << "h ";
+ ss << neg << hour << "h";
+ if (min > 0 || sec > 0)
+ ss << " ";
}
if (min > 0) {
- ss << min << "m ";
+ ss << neg << min << "min";
+ if (sec > 0)
+ ss << " ";
}
- if (sec > 0) {
- ss << sec << "s ";
+ if (sec > 0 || total_sec == 0) {
+ ss << neg << sec << "s";
}
return ss.str();
@@ -728,3 +753,11 @@ inline irr::core::stringw utf8_to_stringw(const std::string &input)
* 2. Remove 'unsafe' characters from the name by replacing them with '_'
*/
std::string sanitizeDirName(const std::string &str, const std::string &optional_prefix);
+
+/**
+ * Prints a sanitized version of a string without control characters.
+ * '\t' and '\n' are allowed, as are UTF-8 control characters (e.g. RTL).
+ * ASCII control characters are replaced with their hex encoding in angle
+ * brackets (e.g. "a\x1eb" -> "a<1e>b").
+ */
+void safe_print_string(std::ostream &os, const std::string &str);
diff --git a/src/version.cpp b/src/version.cpp
index c555f30af..f2aac37df 100644
--- a/src/version.cpp
+++ b/src/version.cpp
@@ -37,7 +37,6 @@ const char *g_build_info =
#ifndef SERVER
"USE_GETTEXT=" STR(USE_GETTEXT) "\n"
"USE_SOUND=" STR(USE_SOUND) "\n"
- "USE_FREETYPE=" STR(USE_FREETYPE) "\n"
#endif
"STATIC_SHAREDIR=" STR(STATIC_SHAREDIR)
#if USE_GETTEXT && defined(STATIC_LOCALEDIR)
diff --git a/textures/base/pack/aux1_btn.png b/textures/base/pack/aux1_btn.png
new file mode 100644
index 000000000..8ceb09542
--- /dev/null
+++ b/textures/base/pack/aux1_btn.png
Binary files differ
diff --git a/textures/base/pack/aux_btn.png b/textures/base/pack/aux_btn.png
deleted file mode 100644
index f589910e8..000000000
--- a/textures/base/pack/aux_btn.png
+++ /dev/null
Binary files differ
diff --git a/textures/base/pack/no_texture.png b/textures/base/pack/no_texture.png
new file mode 100644
index 000000000..681b81082
--- /dev/null
+++ b/textures/base/pack/no_texture.png
Binary files differ
diff --git a/textures/base/pack/server_flags_favorite.png b/textures/base/pack/server_favorite.png
index 6a3fc5efe..6a3fc5efe 100644
--- a/textures/base/pack/server_flags_favorite.png
+++ b/textures/base/pack/server_favorite.png
Binary files differ
diff --git a/textures/base/pack/server_incompatible.png b/textures/base/pack/server_incompatible.png
new file mode 100644
index 000000000..9076ab58f
--- /dev/null
+++ b/textures/base/pack/server_incompatible.png
Binary files differ
diff --git a/textures/base/pack/server_public.png b/textures/base/pack/server_public.png
new file mode 100644
index 000000000..46a48fac8
--- /dev/null
+++ b/textures/base/pack/server_public.png
Binary files differ
diff --git a/util/buildbot/buildwin32.sh b/util/buildbot/buildwin32.sh
index e62d32969..9eb9a4050 100755
--- a/util/buildbot/buildwin32.sh
+++ b/util/buildbot/buildwin32.sh
@@ -16,114 +16,132 @@ fi
builddir=$1
mkdir -p $builddir
builddir="$( cd "$builddir" && pwd )"
-packagedir=$builddir/packages
libdir=$builddir/libs
# Test which win32 compiler is present
-which i586-mingw32msvc-windres &>/dev/null && toolchain_file=$dir/toolchain_i586-mingw32msvc.cmake
-which i686-w64-mingw32-windres &>/dev/null && toolchain_file=$dir/toolchain_i646-w64-mingw32.cmake
+command -v i686-w64-mingw32-gcc >/dev/null &&
+ compiler=i686-w64-mingw32-gcc
+command -v i686-w64-mingw32-gcc-posix >/dev/null &&
+ compiler=i686-w64-mingw32-gcc-posix
-if [ -z "$toolchain_file" ]; then
- echo "Unable to determine which mingw32 compiler to use"
+if [ -z "$compiler" ]; then
+ echo "Unable to determine which MinGW compiler to use"
exit 1
fi
+toolchain_file=$dir/toolchain_${compiler/-gcc/}.cmake
echo "Using $toolchain_file"
-irrlicht_version=1.8.4
-ogg_version=1.3.2
-vorbis_version=1.3.5
-curl_version=7.65.3
+# Try to find runtime DLLs in various paths (varies by distribution, sigh)
+tmp=$(dirname "$(command -v $compiler)")/..
+runtime_dlls=
+for name in lib{gcc_,stdc++-,winpthread-}'*'.dll; do
+ for dir in $tmp/i686-w64-mingw32/{bin,lib} $tmp/lib/gcc/i686-w64-mingw32/*; do
+ [ -d "$dir" ] || continue
+ file=$(echo $dir/$name)
+ [ -f "$file" ] && { runtime_dlls+="$file;"; break; }
+ done
+done
+[ -z "$runtime_dlls" ] &&
+ echo "The compiler runtime DLLs could not be found, they might be missing in the final package."
+
+# Get stuff
+irrlicht_version=1.9.0mt4
+ogg_version=1.3.4
+vorbis_version=1.3.7
+curl_version=7.76.1
gettext_version=0.20.1
-freetype_version=2.10.1
-sqlite3_version=3.27.2
+freetype_version=2.10.4
+sqlite3_version=3.35.5
luajit_version=2.1.0-beta3
-leveldb_version=1.22
+leveldb_version=1.23
zlib_version=1.2.11
+zstd_version=1.4.9
-mkdir -p $packagedir
mkdir -p $libdir
-cd $builddir
+download () {
+ local url=$1
+ local filename=$2
+ [ -z "$filename" ] && filename=${url##*/}
+ local foldername=${filename%%[.-]*}
+ local extract=$3
+ [ -z "$extract" ] && extract=unzip
+
+ [ -d "./$foldername" ] && return 0
+ wget "$url" -c -O "./$filename"
+ if [ "$extract" = "unzip" ]; then
+ unzip -o "$filename" -d "$foldername"
+ elif [ "$extract" = "unzip_nofolder" ]; then
+ unzip -o "$filename"
+ else
+ return 1
+ fi
+}
-# Get stuff
-[ -e $packagedir/irrlicht-$irrlicht_version.zip ] || wget http://minetest.kitsunemimi.pw/irrlicht-$irrlicht_version-win32.zip \
- -c -O $packagedir/irrlicht-$irrlicht_version.zip
-[ -e $packagedir/zlib-$zlib_version.zip ] || wget http://minetest.kitsunemimi.pw/zlib-$zlib_version-win32.zip \
- -c -O $packagedir/zlib-$zlib_version.zip
-[ -e $packagedir/libogg-$ogg_version.zip ] || wget http://minetest.kitsunemimi.pw/libogg-$ogg_version-win32.zip \
- -c -O $packagedir/libogg-$ogg_version.zip
-[ -e $packagedir/libvorbis-$vorbis_version.zip ] || wget http://minetest.kitsunemimi.pw/libvorbis-$vorbis_version-win32.zip \
- -c -O $packagedir/libvorbis-$vorbis_version.zip
-[ -e $packagedir/curl-$curl_version.zip ] || wget http://minetest.kitsunemimi.pw/curl-$curl_version-win32.zip \
- -c -O $packagedir/curl-$curl_version.zip
-[ -e $packagedir/gettext-$gettext_version.zip ] || wget http://minetest.kitsunemimi.pw/gettext-$gettext_version-win32.zip \
- -c -O $packagedir/gettext-$gettext_version.zip
-[ -e $packagedir/freetype2-$freetype_version.zip ] || wget http://minetest.kitsunemimi.pw/freetype2-$freetype_version-win32.zip \
- -c -O $packagedir/freetype2-$freetype_version.zip
-[ -e $packagedir/sqlite3-$sqlite3_version.zip ] || wget http://minetest.kitsunemimi.pw/sqlite3-$sqlite3_version-win32.zip \
- -c -O $packagedir/sqlite3-$sqlite3_version.zip
-[ -e $packagedir/luajit-$luajit_version.zip ] || wget http://minetest.kitsunemimi.pw/luajit-$luajit_version-win32.zip \
- -c -O $packagedir/luajit-$luajit_version.zip
-[ -e $packagedir/libleveldb-$leveldb_version.zip ] || wget http://minetest.kitsunemimi.pw/libleveldb-$leveldb_version-win32.zip \
- -c -O $packagedir/libleveldb-$leveldb_version.zip
-[ -e $packagedir/openal_stripped.zip ] || wget http://minetest.kitsunemimi.pw/openal_stripped.zip \
- -c -O $packagedir/openal_stripped.zip
-
-# Extract stuff
cd $libdir
-[ -d irrlicht ] || unzip -o $packagedir/irrlicht-$irrlicht_version.zip -d irrlicht
-[ -d zlib ] || unzip -o $packagedir/zlib-$zlib_version.zip -d zlib
-[ -d libogg ] || unzip -o $packagedir/libogg-$ogg_version.zip -d libogg
-[ -d libvorbis ] || unzip -o $packagedir/libvorbis-$vorbis_version.zip -d libvorbis
-[ -d libcurl ] || unzip -o $packagedir/curl-$curl_version.zip -d libcurl
-[ -d gettext ] || unzip -o $packagedir/gettext-$gettext_version.zip -d gettext
-[ -d freetype ] || unzip -o $packagedir/freetype2-$freetype_version.zip -d freetype
-[ -d sqlite3 ] || unzip -o $packagedir/sqlite3-$sqlite3_version.zip -d sqlite3
-[ -d openal_stripped ] || unzip -o $packagedir/openal_stripped.zip
-[ -d luajit ] || unzip -o $packagedir/luajit-$luajit_version.zip -d luajit
-[ -d leveldb ] || unzip -o $packagedir/libleveldb-$leveldb_version.zip -d leveldb
-
-# Get minetest
-cd $builddir
-if [ ! "x$EXISTING_MINETEST_DIR" = "x" ]; then
- cd /$EXISTING_MINETEST_DIR # must be absolute path
+download "https://github.com/minetest/irrlicht/releases/download/$irrlicht_version/win32.zip" irrlicht-$irrlicht_version.zip
+download "http://minetest.kitsunemimi.pw/zlib-$zlib_version-win32.zip"
+download "http://minetest.kitsunemimi.pw/zstd-$zstd_version-win32.zip"
+download "http://minetest.kitsunemimi.pw/libogg-$ogg_version-win32.zip"
+download "http://minetest.kitsunemimi.pw/libvorbis-$vorbis_version-win32.zip"
+download "http://minetest.kitsunemimi.pw/curl-$curl_version-win32.zip"
+download "http://minetest.kitsunemimi.pw/gettext-$gettext_version-win32.zip"
+download "http://minetest.kitsunemimi.pw/freetype2-$freetype_version-win32.zip" freetype-$freetype_version.zip
+download "http://minetest.kitsunemimi.pw/sqlite3-$sqlite3_version-win32.zip"
+download "http://minetest.kitsunemimi.pw/luajit-$luajit_version-win32.zip"
+download "http://minetest.kitsunemimi.pw/libleveldb-$leveldb_version-win32.zip" leveldb-$leveldb_version.zip
+download "http://minetest.kitsunemimi.pw/openal_stripped.zip" '' unzip_nofolder
+
+# Set source dir, downloading Minetest as needed
+if [ -n "$EXISTING_MINETEST_DIR" ]; then
+ sourcedir="$( cd "$EXISTING_MINETEST_DIR" && pwd )"
else
- [ -d $CORE_NAME ] && (cd $CORE_NAME && git pull) || (git clone -b $CORE_BRANCH $CORE_GIT)
- cd $CORE_NAME
+ cd $builddir
+ sourcedir=$PWD/$CORE_NAME
+ [ -d $CORE_NAME ] && { pushd $CORE_NAME; git pull; popd; } || \
+ git clone -b $CORE_BRANCH $CORE_GIT $CORE_NAME
+ if [ -z "$NO_MINETEST_GAME" ]; then
+ cd $sourcedir
+ [ -d games/$GAME_NAME ] && { pushd games/$GAME_NAME; git pull; popd; } || \
+ git clone -b $GAME_BRANCH $GAME_GIT games/$GAME_NAME
+ fi
fi
-git_hash=$(git rev-parse --short HEAD)
-# Get minetest_game
-if [ "x$NO_MINETEST_GAME" = "x" ]; then
- cd games
- [ -d $GAME_NAME ] && (cd $GAME_NAME && git pull) || (git clone -b $GAME_BRANCH $GAME_GIT)
- cd ..
-fi
+git_hash=$(cd $sourcedir && git rev-parse --short HEAD)
# Build the thing
-[ -d _build ] && rm -Rf _build/
-mkdir _build
-cd _build
-cmake .. \
+cd $builddir
+[ -d build ] && rm -rf build
+mkdir build
+cd build
+
+irr_dlls=$(echo $libdir/irrlicht/lib/*.dll | tr ' ' ';')
+vorbis_dlls=$(echo $libdir/libvorbis/bin/libvorbis{,file}-*.dll | tr ' ' ';')
+gettext_dlls=$(echo $libdir/gettext/bin/lib{intl,iconv}-*.dll | tr ' ' ';')
+
+cmake -S $sourcedir -B . \
+ -DCMAKE_TOOLCHAIN_FILE=$toolchain_file \
-DCMAKE_INSTALL_PREFIX=/tmp \
-DVERSION_EXTRA=$git_hash \
-DBUILD_CLIENT=1 -DBUILD_SERVER=0 \
- -DCMAKE_TOOLCHAIN_FILE=$toolchain_file \
+ -DEXTRA_DLL="$runtime_dlls" \
\
-DENABLE_SOUND=1 \
-DENABLE_CURL=1 \
-DENABLE_GETTEXT=1 \
- -DENABLE_FREETYPE=1 \
-DENABLE_LEVELDB=1 \
\
- -DIRRLICHT_INCLUDE_DIR=$libdir/irrlicht/include \
- -DIRRLICHT_LIBRARY=$libdir/irrlicht/lib/Win32-gcc/libIrrlicht.dll.a \
- -DIRRLICHT_DLL=$libdir/irrlicht/bin/Win32-gcc/Irrlicht.dll \
+ -DCMAKE_PREFIX_PATH=$libdir/irrlicht \
+ -DIRRLICHT_DLL="$irr_dlls" \
\
-DZLIB_INCLUDE_DIR=$libdir/zlib/include \
- -DZLIB_LIBRARIES=$libdir/zlib/lib/libz.dll.a \
+ -DZLIB_LIBRARY=$libdir/zlib/lib/libz.dll.a \
-DZLIB_DLL=$libdir/zlib/bin/zlib1.dll \
\
+ -DZSTD_INCLUDE_DIR=$libdir/zstd/include \
+ -DZSTD_LIBRARY=$libdir/zstd/lib/libzstd.dll.a \
+ -DZSTD_DLL=$libdir/zstd/bin/libzstd.dll \
+ \
-DLUA_INCLUDE_DIR=$libdir/luajit/include \
-DLUA_LIBRARY=$libdir/luajit/libluajit.a \
\
@@ -133,21 +151,19 @@ cmake .. \
\
-DVORBIS_INCLUDE_DIR=$libdir/libvorbis/include \
-DVORBIS_LIBRARY=$libdir/libvorbis/lib/libvorbis.dll.a \
- -DVORBIS_DLL=$libdir/libvorbis/bin/libvorbis-0.dll \
+ -DVORBIS_DLL="$vorbis_dlls" \
-DVORBISFILE_LIBRARY=$libdir/libvorbis/lib/libvorbisfile.dll.a \
- -DVORBISFILE_DLL=$libdir/libvorbis/bin/libvorbisfile-3.dll \
\
-DOPENAL_INCLUDE_DIR=$libdir/openal_stripped/include/AL \
-DOPENAL_LIBRARY=$libdir/openal_stripped/lib/libOpenAL32.dll.a \
-DOPENAL_DLL=$libdir/openal_stripped/bin/OpenAL32.dll \
\
- -DCURL_DLL=$libdir/libcurl/bin/libcurl-4.dll \
- -DCURL_INCLUDE_DIR=$libdir/libcurl/include \
- -DCURL_LIBRARY=$libdir/libcurl/lib/libcurl.dll.a \
+ -DCURL_DLL=$libdir/curl/bin/libcurl-4.dll \
+ -DCURL_INCLUDE_DIR=$libdir/curl/include \
+ -DCURL_LIBRARY=$libdir/curl/lib/libcurl.dll.a \
\
- -DGETTEXT_MSGFMT=`which msgfmt` \
- -DGETTEXT_DLL=$libdir/gettext/bin/libintl-8.dll \
- -DGETTEXT_ICONV_DLL=$libdir/gettext/bin/libiconv-2.dll \
+ -DGETTEXT_MSGFMT=`command -v msgfmt` \
+ -DGETTEXT_DLL="$gettext_dlls" \
-DGETTEXT_INCLUDE_DIR=$libdir/gettext/include \
-DGETTEXT_LIBRARY=$libdir/gettext/lib/libintl.dll.a \
\
@@ -166,7 +182,7 @@ cmake .. \
make -j$(nproc)
-[ "x$NO_PACKAGE" = "x" ] && make package
+[ -z "$NO_PACKAGE" ] && make package
exit 0
# EOF
diff --git a/util/buildbot/buildwin64.sh b/util/buildbot/buildwin64.sh
index 94e009c29..eb1eae4c2 100755
--- a/util/buildbot/buildwin64.sh
+++ b/util/buildbot/buildwin64.sh
@@ -16,106 +16,132 @@ fi
builddir=$1
mkdir -p $builddir
builddir="$( cd "$builddir" && pwd )"
-packagedir=$builddir/packages
libdir=$builddir/libs
-toolchain_file=$dir/toolchain_x86_64-w64-mingw32.cmake
-irrlicht_version=1.8.4
-ogg_version=1.3.2
-vorbis_version=1.3.5
-curl_version=7.65.3
+# Test which win64 compiler is present
+command -v x86_64-w64-mingw32-gcc >/dev/null &&
+ compiler=x86_64-w64-mingw32-gcc
+command -v x86_64-w64-mingw32-gcc-posix >/dev/null &&
+ compiler=x86_64-w64-mingw32-gcc-posix
+
+if [ -z "$compiler" ]; then
+ echo "Unable to determine which MinGW compiler to use"
+ exit 1
+fi
+toolchain_file=$dir/toolchain_${compiler/-gcc/}.cmake
+echo "Using $toolchain_file"
+
+# Try to find runtime DLLs in various paths (varies by distribution, sigh)
+tmp=$(dirname "$(command -v $compiler)")/..
+runtime_dlls=
+for name in lib{gcc_,stdc++-,winpthread-}'*'.dll; do
+ for dir in $tmp/x86_64-w64-mingw32/{bin,lib} $tmp/lib/gcc/x86_64-w64-mingw32/*; do
+ [ -d "$dir" ] || continue
+ file=$(echo $dir/$name)
+ [ -f "$file" ] && { runtime_dlls+="$file;"; break; }
+ done
+done
+[ -z "$runtime_dlls" ] &&
+ echo "The compiler runtime DLLs could not be found, they might be missing in the final package."
+
+# Get stuff
+irrlicht_version=1.9.0mt4
+ogg_version=1.3.4
+vorbis_version=1.3.7
+curl_version=7.76.1
gettext_version=0.20.1
-freetype_version=2.10.1
-sqlite3_version=3.27.2
+freetype_version=2.10.4
+sqlite3_version=3.35.5
luajit_version=2.1.0-beta3
-leveldb_version=1.22
+leveldb_version=1.23
zlib_version=1.2.11
+zstd_version=1.4.9
-mkdir -p $packagedir
mkdir -p $libdir
-cd $builddir
+download () {
+ local url=$1
+ local filename=$2
+ [ -z "$filename" ] && filename=${url##*/}
+ local foldername=${filename%%[.-]*}
+ local extract=$3
+ [ -z "$extract" ] && extract=unzip
+
+ [ -d "./$foldername" ] && return 0
+ wget "$url" -c -O "./$filename"
+ if [ "$extract" = "unzip" ]; then
+ unzip -o "$filename" -d "$foldername"
+ elif [ "$extract" = "unzip_nofolder" ]; then
+ unzip -o "$filename"
+ else
+ return 1
+ fi
+}
-# Get stuff
-[ -e $packagedir/irrlicht-$irrlicht_version.zip ] || wget http://minetest.kitsunemimi.pw/irrlicht-$irrlicht_version-win64.zip \
- -c -O $packagedir/irrlicht-$irrlicht_version.zip
-[ -e $packagedir/zlib-$zlib_version.zip ] || wget http://minetest.kitsunemimi.pw/zlib-$zlib_version-win64.zip \
- -c -O $packagedir/zlib-$zlib_version.zip
-[ -e $packagedir/libogg-$ogg_version.zip ] || wget http://minetest.kitsunemimi.pw/libogg-$ogg_version-win64.zip \
- -c -O $packagedir/libogg-$ogg_version.zip
-[ -e $packagedir/libvorbis-$vorbis_version.zip ] || wget http://minetest.kitsunemimi.pw/libvorbis-$vorbis_version-win64.zip \
- -c -O $packagedir/libvorbis-$vorbis_version.zip
-[ -e $packagedir/curl-$curl_version.zip ] || wget http://minetest.kitsunemimi.pw/curl-$curl_version-win64.zip \
- -c -O $packagedir/curl-$curl_version.zip
-[ -e $packagedir/gettext-$gettext_version.zip ] || wget http://minetest.kitsunemimi.pw/gettext-$gettext_version-win64.zip \
- -c -O $packagedir/gettext-$gettext_version.zip
-[ -e $packagedir/freetype2-$freetype_version.zip ] || wget http://minetest.kitsunemimi.pw/freetype2-$freetype_version-win64.zip \
- -c -O $packagedir/freetype2-$freetype_version.zip
-[ -e $packagedir/sqlite3-$sqlite3_version.zip ] || wget http://minetest.kitsunemimi.pw/sqlite3-$sqlite3_version-win64.zip \
- -c -O $packagedir/sqlite3-$sqlite3_version.zip
-[ -e $packagedir/luajit-$luajit_version.zip ] || wget http://minetest.kitsunemimi.pw/luajit-$luajit_version-win64.zip \
- -c -O $packagedir/luajit-$luajit_version.zip
-[ -e $packagedir/libleveldb-$leveldb_version.zip ] || wget http://minetest.kitsunemimi.pw/libleveldb-$leveldb_version-win64.zip \
- -c -O $packagedir/libleveldb-$leveldb_version.zip
-[ -e $packagedir/openal_stripped.zip ] || wget http://minetest.kitsunemimi.pw/openal_stripped64.zip \
- -c -O $packagedir/openal_stripped.zip
-
-
-# Extract stuff
cd $libdir
-[ -d irrlicht ] || unzip -o $packagedir/irrlicht-$irrlicht_version.zip -d irrlicht
-[ -d zlib ] || unzip -o $packagedir/zlib-$zlib_version.zip -d zlib
-[ -d libogg ] || unzip -o $packagedir/libogg-$ogg_version.zip -d libogg
-[ -d libvorbis ] || unzip -o $packagedir/libvorbis-$vorbis_version.zip -d libvorbis
-[ -d libcurl ] || unzip -o $packagedir/curl-$curl_version.zip -d libcurl
-[ -d gettext ] || unzip -o $packagedir/gettext-$gettext_version.zip -d gettext
-[ -d freetype ] || unzip -o $packagedir/freetype2-$freetype_version.zip -d freetype
-[ -d sqlite3 ] || unzip -o $packagedir/sqlite3-$sqlite3_version.zip -d sqlite3
-[ -d openal_stripped ] || unzip -o $packagedir/openal_stripped.zip
-[ -d luajit ] || unzip -o $packagedir/luajit-$luajit_version.zip -d luajit
-[ -d leveldb ] || unzip -o $packagedir/libleveldb-$leveldb_version.zip -d leveldb
-
-# Get minetest
-cd $builddir
-if [ ! "x$EXISTING_MINETEST_DIR" = "x" ]; then
- cd /$EXISTING_MINETEST_DIR # must be absolute path
+download "https://github.com/minetest/irrlicht/releases/download/$irrlicht_version/win64.zip" irrlicht-$irrlicht_version.zip
+download "http://minetest.kitsunemimi.pw/zlib-$zlib_version-win64.zip"
+download "http://minetest.kitsunemimi.pw/zstd-$zstd_version-win64.zip"
+download "http://minetest.kitsunemimi.pw/libogg-$ogg_version-win64.zip"
+download "http://minetest.kitsunemimi.pw/libvorbis-$vorbis_version-win64.zip"
+download "http://minetest.kitsunemimi.pw/curl-$curl_version-win64.zip"
+download "http://minetest.kitsunemimi.pw/gettext-$gettext_version-win64.zip"
+download "http://minetest.kitsunemimi.pw/freetype2-$freetype_version-win64.zip" freetype-$freetype_version.zip
+download "http://minetest.kitsunemimi.pw/sqlite3-$sqlite3_version-win64.zip"
+download "http://minetest.kitsunemimi.pw/luajit-$luajit_version-win64.zip"
+download "http://minetest.kitsunemimi.pw/libleveldb-$leveldb_version-win64.zip" leveldb-$leveldb_version.zip
+download "http://minetest.kitsunemimi.pw/openal_stripped64.zip" 'openal_stripped.zip' unzip_nofolder
+
+# Set source dir, downloading Minetest as needed
+if [ -n "$EXISTING_MINETEST_DIR" ]; then
+ sourcedir="$( cd "$EXISTING_MINETEST_DIR" && pwd )"
else
- [ -d $CORE_NAME ] && (cd $CORE_NAME && git pull) || (git clone -b $CORE_BRANCH $CORE_GIT)
- cd $CORE_NAME
+ cd $builddir
+ sourcedir=$PWD/$CORE_NAME
+ [ -d $CORE_NAME ] && { pushd $CORE_NAME; git pull; popd; } || \
+ git clone -b $CORE_BRANCH $CORE_GIT $CORE_NAME
+ if [ -z "$NO_MINETEST_GAME" ]; then
+ cd $sourcedir
+ [ -d games/$GAME_NAME ] && { pushd games/$GAME_NAME; git pull; popd; } || \
+ git clone -b $GAME_BRANCH $GAME_GIT games/$GAME_NAME
+ fi
fi
-git_hash=$(git rev-parse --short HEAD)
-# Get minetest_game
-if [ "x$NO_MINETEST_GAME" = "x" ]; then
- cd games
- [ -d $GAME_NAME ] && (cd $GAME_NAME && git pull) || (git clone -b $GAME_BRANCH $GAME_GIT)
- cd ..
-fi
+git_hash=$(cd $sourcedir && git rev-parse --short HEAD)
# Build the thing
-[ -d _build ] && rm -Rf _build/
-mkdir _build
-cd _build
-cmake .. \
+cd $builddir
+[ -d build ] && rm -rf build
+mkdir build
+cd build
+
+irr_dlls=$(echo $libdir/irrlicht/lib/*.dll | tr ' ' ';')
+vorbis_dlls=$(echo $libdir/libvorbis/bin/libvorbis{,file}-*.dll | tr ' ' ';')
+gettext_dlls=$(echo $libdir/gettext/bin/lib{intl,iconv}-*.dll | tr ' ' ';')
+
+cmake -S $sourcedir -B . \
-DCMAKE_TOOLCHAIN_FILE=$toolchain_file \
-DCMAKE_INSTALL_PREFIX=/tmp \
-DVERSION_EXTRA=$git_hash \
-DBUILD_CLIENT=1 -DBUILD_SERVER=0 \
+ -DEXTRA_DLL="$runtime_dlls" \
\
-DENABLE_SOUND=1 \
-DENABLE_CURL=1 \
-DENABLE_GETTEXT=1 \
- -DENABLE_FREETYPE=1 \
-DENABLE_LEVELDB=1 \
\
- -DIRRLICHT_INCLUDE_DIR=$libdir/irrlicht/include \
- -DIRRLICHT_LIBRARY=$libdir/irrlicht/lib/Win64-gcc/libIrrlicht.dll.a \
- -DIRRLICHT_DLL=$libdir/irrlicht/bin/Win64-gcc/Irrlicht.dll \
+ -DCMAKE_PREFIX_PATH=$libdir/irrlicht \
+ -DIRRLICHT_DLL="$irr_dlls" \
\
-DZLIB_INCLUDE_DIR=$libdir/zlib/include \
- -DZLIB_LIBRARIES=$libdir/zlib/lib/libz.dll.a \
+ -DZLIB_LIBRARY=$libdir/zlib/lib/libz.dll.a \
-DZLIB_DLL=$libdir/zlib/bin/zlib1.dll \
\
+ -DZSTD_INCLUDE_DIR=$libdir/zstd/include \
+ -DZSTD_LIBRARY=$libdir/zstd/lib/libzstd.dll.a \
+ -DZSTD_DLL=$libdir/zstd/bin/libzstd.dll \
+ \
-DLUA_INCLUDE_DIR=$libdir/luajit/include \
-DLUA_LIBRARY=$libdir/luajit/libluajit.a \
\
@@ -125,21 +151,19 @@ cmake .. \
\
-DVORBIS_INCLUDE_DIR=$libdir/libvorbis/include \
-DVORBIS_LIBRARY=$libdir/libvorbis/lib/libvorbis.dll.a \
- -DVORBIS_DLL=$libdir/libvorbis/bin/libvorbis-0.dll \
+ -DVORBIS_DLL="$vorbis_dlls" \
-DVORBISFILE_LIBRARY=$libdir/libvorbis/lib/libvorbisfile.dll.a \
- -DVORBISFILE_DLL=$libdir/libvorbis/bin/libvorbisfile-3.dll \
\
-DOPENAL_INCLUDE_DIR=$libdir/openal_stripped/include/AL \
-DOPENAL_LIBRARY=$libdir/openal_stripped/lib/libOpenAL32.dll.a \
-DOPENAL_DLL=$libdir/openal_stripped/bin/OpenAL32.dll \
\
- -DCURL_DLL=$libdir/libcurl/bin/libcurl-4.dll \
- -DCURL_INCLUDE_DIR=$libdir/libcurl/include \
- -DCURL_LIBRARY=$libdir/libcurl/lib/libcurl.dll.a \
+ -DCURL_DLL=$libdir/curl/bin/libcurl-4.dll \
+ -DCURL_INCLUDE_DIR=$libdir/curl/include \
+ -DCURL_LIBRARY=$libdir/curl/lib/libcurl.dll.a \
\
- -DGETTEXT_MSGFMT=`which msgfmt` \
- -DGETTEXT_DLL=$libdir/gettext/bin/libintl-8.dll \
- -DGETTEXT_ICONV_DLL=$libdir/gettext/bin/libiconv-2.dll \
+ -DGETTEXT_MSGFMT=`command -v msgfmt` \
+ -DGETTEXT_DLL="$gettext_dlls" \
-DGETTEXT_INCLUDE_DIR=$libdir/gettext/include \
-DGETTEXT_LIBRARY=$libdir/gettext/lib/libintl.dll.a \
\
@@ -158,7 +182,7 @@ cmake .. \
make -j$(nproc)
-[ "x$NO_PACKAGE" = "x" ] && make package
+[ -z "$NO_PACKAGE" ] && make package
exit 0
# EOF
diff --git a/util/buildbot/toolchain_i586-mingw32msvc.cmake b/util/buildbot/toolchain_i686-w64-mingw32-posix.cmake
index 0eeefb84d..b5d9ba5c4 100644
--- a/util/buildbot/toolchain_i586-mingw32msvc.cmake
+++ b/util/buildbot/toolchain_i686-w64-mingw32-posix.cmake
@@ -2,12 +2,14 @@
SET(CMAKE_SYSTEM_NAME Windows)
# which compilers to use for C and C++
-SET(CMAKE_C_COMPILER i586-mingw32msvc-gcc)
-SET(CMAKE_CXX_COMPILER i586-mingw32msvc-g++)
-SET(CMAKE_RC_COMPILER i586-mingw32msvc-windres)
+# *-posix is Ubuntu's naming for the MinGW variant that comes with support
+# for pthreads / std::thread (required by MT)
+SET(CMAKE_C_COMPILER i686-w64-mingw32-gcc-posix)
+SET(CMAKE_CXX_COMPILER i686-w64-mingw32-g++-posix)
+SET(CMAKE_RC_COMPILER i686-w64-mingw32-windres)
# here is the target environment located
-SET(CMAKE_FIND_ROOT_PATH /usr/i586-mingw32msvc)
+SET(CMAKE_FIND_ROOT_PATH /usr/i686-w64-mingw32)
# adjust the default behaviour of the FIND_XXX() commands:
# search headers and libraries in the target environment, search
diff --git a/util/buildbot/toolchain_i646-w64-mingw32.cmake b/util/buildbot/toolchain_i686-w64-mingw32.cmake
index 015baa210..015baa210 100644
--- a/util/buildbot/toolchain_i646-w64-mingw32.cmake
+++ b/util/buildbot/toolchain_i686-w64-mingw32.cmake
diff --git a/util/buildbot/toolchain_x86_64-w64-mingw32-posix.cmake b/util/buildbot/toolchain_x86_64-w64-mingw32-posix.cmake
new file mode 100644
index 000000000..b6b237657
--- /dev/null
+++ b/util/buildbot/toolchain_x86_64-w64-mingw32-posix.cmake
@@ -0,0 +1,19 @@
+# name of the target operating system
+SET(CMAKE_SYSTEM_NAME Windows)
+
+# which compilers to use for C and C++
+# *-posix is Ubuntu's naming for the MinGW variant that comes with support
+# for pthreads / std::thread (required by MT)
+SET(CMAKE_C_COMPILER x86_64-w64-mingw32-gcc-posix)
+SET(CMAKE_CXX_COMPILER x86_64-w64-mingw32-g++-posix)
+SET(CMAKE_RC_COMPILER x86_64-w64-mingw32-windres)
+
+# here is the target environment located
+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
+# programs in the host environment
+set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
+set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
+set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
diff --git a/util/ci/clang-format-whitelist.txt b/util/ci/clang-format-whitelist.txt
index 75d99f4cd..5cbc262ef 100644
--- a/util/ci/clang-format-whitelist.txt
+++ b/util/ci/clang-format-whitelist.txt
@@ -192,8 +192,6 @@ src/gui/guiTable.cpp
src/gui/guiTable.h
src/gui/guiVolumeChange.cpp
src/gui/guiVolumeChange.h
-src/gui/intlGUIEditBox.cpp
-src/gui/intlGUIEditBox.h
src/gui/mainmenumanager.h
src/gui/modalMenu.h
src/guiscalingfilter.cpp
diff --git a/util/ci/lint.sh b/util/ci/clang-format.sh
index 395445ca7..89576c656 100755
--- a/util/ci/lint.sh
+++ b/util/ci/clang-format.sh
@@ -1,6 +1,6 @@
#! /bin/bash
-function perform_lint() {
- echo "Performing LINT..."
+
+function setup_for_format() {
if [ -z "${CLANG_FORMAT}" ]; then
CLANG_FORMAT=clang-format
fi
@@ -8,6 +8,12 @@ function perform_lint() {
CLANG_FORMAT_WHITELIST="util/ci/clang-format-whitelist.txt"
files_to_lint="$(find src/ -name '*.cpp' -or -name '*.h')"
+}
+
+function check_format() {
+ echo "Checking format..."
+
+ setup_for_format
local errorcount=0
local fail=0
@@ -41,3 +47,18 @@ function perform_lint() {
echo "LINT OK"
}
+
+
+function fix_format() {
+ echo "Fixing format..."
+
+ setup_for_format
+
+ for f in ${files_to_lint}; do
+ whitelisted=$(awk '$1 == "'$f'" { print 1 }' "$CLANG_FORMAT_WHITELIST")
+ if [ -z "${whitelisted}" ]; then
+ echo "$f"
+ $CLANG_FORMAT -i "$f"
+ fi
+ done
+}
diff --git a/util/ci/common.sh b/util/ci/common.sh
index 7523fa7ff..f9df54c4a 100644
--- a/util/ci/common.sh
+++ b/util/ci/common.sh
@@ -2,14 +2,24 @@
# Linux build only
install_linux_deps() {
- local pkgs=(libirrlicht-dev cmake libbz2-dev libpng-dev \
+ local pkgs=(cmake libpng-dev \
libjpeg-dev libxxf86vm-dev libgl1-mesa-dev libsqlite3-dev \
libhiredis-dev libogg-dev libgmp-dev libvorbis-dev libopenal-dev \
- gettext libpq-dev postgresql-server-dev-all libleveldb-dev \
- libcurl4-openssl-dev)
+ gettext libpq-dev libleveldb-dev libcurl4-openssl-dev libzstd-dev)
+
+ if [[ "$1" == "--old-irr" ]]; then
+ shift
+ pkgs+=(libirrlicht-dev)
+ else
+ wget "https://github.com/minetest/irrlicht/releases/download/1.9.0mt4/ubuntu-bionic.tar.gz"
+ sudo tar -xaf ubuntu-bionic.tar.gz -C /usr/local
+ fi
sudo apt-get update
sudo apt-get install -y --no-install-recommends ${pkgs[@]} "$@"
+
+ # workaround for bug with Github Actions' ubuntu-18.04 image
+ sudo apt-get remove -y libgcc-11-dev gcc-11 || :
}
# Mac OSX build only
diff --git a/util/fix_format.sh b/util/fix_format.sh
new file mode 100755
index 000000000..3cef6f58d
--- /dev/null
+++ b/util/fix_format.sh
@@ -0,0 +1,5 @@
+#!/bin/bash -e
+
+. ./util/ci/clang-format.sh
+
+fix_format
diff --git a/util/test_multiplayer.sh b/util/test_multiplayer.sh
index 176cf11d9..5ffc044e0 100755
--- a/util/test_multiplayer.sh
+++ b/util/test_multiplayer.sh
@@ -3,41 +3,72 @@ dir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
gameid=devtest
minetest=$dir/../bin/minetest
testspath=$dir/../tests
-worldpath=$testspath/testworld_$gameid
-configpath=$testspath/configs
-logpath=$testspath/log
-conf_server=$configpath/minetest.conf.multi.server
-conf_client1=$configpath/minetest.conf.multi.client1
-conf_client2=$configpath/minetest.conf.multi.client2
-log_server=$logpath/server.log
-log_client1=$logpath/client1.log
-log_client2=$logpath/client2.log
-
-mkdir -p $worldpath
-mkdir -p $configpath
-mkdir -p $logpath
-
-echo -ne 'client1::shout,interact,settime,teleport,give
-client2::shout,interact,settime,teleport,give
-' > $worldpath/auth.txt
-
-echo -ne '' > $conf_server
-
-echo -ne '# client 1 config
-screenW=500
-screenH=380
-name=client1
-viewing_range_nodes_min=10
-' > $conf_client1
-
-echo -ne '# client 2 config
-screenW=500
-screenH=380
-name=client2
-viewing_range_nodes_min=10
-' > $conf_client2
-
-echo $(sleep 1; $minetest --disable-unittests --logfile $log_client1 --config $conf_client1 --go --address localhost) &
-echo $(sleep 2; $minetest --disable-unittests --logfile $log_client2 --config $conf_client2 --go --address localhost) &
-$minetest --disable-unittests --server --logfile $log_server --config $conf_server --world $worldpath --gameid $gameid
+conf_client1=$testspath/client1.conf
+conf_server=$testspath/server.conf
+worldpath=$testspath/world
+waitfor () {
+ n=30
+ while [ $n -gt 0 ]; do
+ [ -f "$1" ] && return 0
+ sleep 0.5
+ ((n-=1))
+ done
+ echo "Waiting for ${1##*/} timed out"
+ pkill -P $$
+ exit 1
+}
+
+gdbrun () {
+ gdb -q -batch -ex 'set confirm off' -ex 'r' -ex 'bt' --args "$@"
+}
+
+[ -e $minetest ] || { echo "executable $minetest missing"; exit 1; }
+
+rm -rf $worldpath
+mkdir -p $worldpath/worldmods/test
+
+printf '%s\n' >$testspath/client1.conf \
+ video_driver=null name=client1 viewing_range=10 \
+ enable_{sound,minimap,shaders}=false
+
+printf '%s\n' >$testspath/server.conf \
+ max_block_send_distance=1 devtest_unittests_autostart=true
+
+cat >$worldpath/worldmods/test/init.lua <<"LUA"
+core.after(0, function()
+ io.close(io.open(core.get_worldpath() .. "/startup", "w"))
+end)
+local function callback(test_ok)
+ if not test_ok then
+ io.close(io.open(core.get_worldpath() .. "/test_failure", "w"))
+ end
+ io.close(io.open(core.get_worldpath() .. "/done", "w"))
+ core.request_shutdown("", false, 2)
+end
+if core.settings:get_bool("devtest_unittests_autostart") then
+ unittests.on_finished = callback
+else
+ core.register_on_joinplayer(function() callback(true) end)
+end
+LUA
+printf '%s\n' >$worldpath/worldmods/test/mod.conf \
+ name=test optional_depends=unittests
+
+echo "Starting server"
+gdbrun $minetest --server --config $conf_server --world $worldpath --gameid $gameid 2>&1 | sed -u 's/^/(server) /' &
+waitfor $worldpath/startup
+
+echo "Starting client"
+gdbrun $minetest --config $conf_client1 --go --address 127.0.0.1 2>&1 | sed -u 's/^/(client) /' &
+waitfor $worldpath/done
+
+echo "Waiting for client and server to exit"
+wait
+
+if [ -f $worldpath/test_failure ]; then
+ echo "There were test failures."
+ exit 1
+fi
+echo "Success"
+exit 0
diff --git a/util/updatepo.sh b/util/updatepo.sh
index 168483bd4..23e2c61e9 100755
--- a/util/updatepo.sh
+++ b/util/updatepo.sh
@@ -13,7 +13,7 @@ abort() {
# this script is. Relative paths are fine for us so we can just
# use the following trick (works both for manual invocations and for
# script found from PATH)
-scriptisin="$(dirname "$(which "$0")")"
+scriptisin="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
# The script is executed from the parent of po/, which is also the
# parent of the script directory and of the src/ directory.
@@ -54,11 +54,14 @@ xgettext --package-name=minetest \
--add-location=file \
--keyword=N_ \
--keyword=wgettext \
+ --keyword=fwgettext \
--keyword=fgettext \
--keyword=fgettext_ne \
--keyword=strgettext \
--keyword=wstrgettext \
+ --keyword=core.gettext \
--keyword=showTranslatedStatusText \
+ --keyword=fmtgettext \
--output $potfile \
--from-code=utf-8 \
`find src/ -name '*.cpp' -o -name '*.h'` \
diff --git a/util/wireshark/minetest.lua b/util/wireshark/minetest.lua
index d954c7597..40e1956f3 100644
--- a/util/wireshark/minetest.lua
+++ b/util/wireshark/minetest.lua
@@ -422,8 +422,8 @@ do
t:add(f_pointed_under_y, buffer(13,2))
t:add(f_pointed_under_z, buffer(15,2))
t:add(f_pointed_above_x, buffer(17,2))
- t:add(f_pointed_above_x, buffer(19,2))
- t:add(f_pointed_above_x, buffer(21,2))
+ t:add(f_pointed_above_y, buffer(19,2))
+ t:add(f_pointed_above_z, buffer(21,2))
elseif ptype == 2 then -- Object
t:add(f_pointed_object_id, buffer(11,2))
end